O USO DA ENGENHARIA REVERSA NO DESENVOLVIMENTO DE SOFTWARE SEGURO

Tamanho: px
Começar a partir da página:

Download "O USO DA ENGENHARIA REVERSA NO DESENVOLVIMENTO DE SOFTWARE SEGURO"

Transcrição

1 1 ESCOLA SUPERIOR ABERTA DO BRASIL ESAB CURSO LATO SENSU EM ENGENHARIA DE SISTEMAS RONILDO CESAR DE MOURA O USO DA ENGENHARIA REVERSA NO DESENVOLVIMENTO DE SOFTWARE SEGURO VITÓRIA 2008

2 2 RONILDO CESAR DE MOURA O USO DA ENGENHARIA REVERSA NO DESENVOLVIMENTO DE SOFTWARE SEGURO Monografia apresentada à ESAB Escola Superior Aberta do Brasil, sob orientação do (a) Prof. (a) Beatriz Christo Gobbi. VITÓRIA 2008

3 3 RONILDO CESAR DE MOURA O USO DA ENGENHARIA REVERSA NO DESENVOLVIMENTO DE SOFTWARE SEGURO Aprovada em de de VITÓRIA 2008

4 4 Este trabalho é dedicado aos meus pais e à minha esposa, pois só eles conhecem todo o esforço que fizemos para chegar até aqui.

5 5 RESUMO O estudo teve por objetivo apresentar meios que contribuam no desenvolvimento de software seguro, por meio de utilização de engenharia reversa de software. A engenharia reversa de software tem o propósito de recuperar as informações de projeto perdidas durante a fase de desenvolvimento, de documentar o real estado do software e poder auxiliar o processo de gerenciamento da manutenção. Dessa forma, a engenharia reversa pode ser aplicada em qualquer etapa do ciclo de vida, seja para recuperar níveis de abstração ou para fornecer uma nova visão em um grau de abstração mais alto. O objetivo da engenharia reversa é a produção de informações que possam aumentar o conhecimento geral de sistemas de software. Essas informações podem ser utilizadas em atividades como manutenção, reuso, teste e controle de qualidade de software. Existe um debate legal ao redor de engenharia reversa que acontece há vários anos. Isto normalmente revolve ao redor da pergunta de qual o impacto social e econômico a engenharia reversa está causando na sociedade como um todo. Todavia, para calcular este tipo de impacto, em grande parte, depende de como a engenharia reversa é usada. Em alguns países a prática de engenharia reversa é considerada ilegal por ter praticantes interessados em obter acesso não autorizado a recursos de software não oferecidos gratuitamente pelos fabricantes que vendem o produto. Por outro lado, demonstra a utilização da própria engenharia reversa como ferramenta de proteção contra a sua prática ilegal. A partir de técnicas aplicadas nesta área é possível modelar melhores proteções para o software como anti-descompiladores, códigos mutantes e armadilhas.

6 6 LISTA DE FIGURAS Figura 1 Comparação dos níveis de abstração e das visões Figura 2 Relação entre a engenharia progressiva e a engenharia reversa Figura 3 Software IDA Pro Figura 4 Sofware VB Decompiler Figura 5 Software Understand for Delphi Figura 6 Visão geral do método FUSION-RE/I Figura 7 Síntese do método FUSION-RE/I... 58

7 7 SUMÁRIO 1 INTRODUÇÃO CONTEXTO PROBLEMA JUSTIFICATIVA OBJETIVOS METODOLOGIA CONCEITOS E DEFINIÇÕES ENGENHARIA REVERSA DE SISTEMA SOFTWARE DE BAIXO NÍVEL LINGUAGEM ASSEMBLY COMPILADORES MÁQUINAS VIRTUAIS E BYTECODES SISTEMAS OPERACIONAIS DISASSEMBLERS DEPURADORES DECOMPILADOR ASPECTOS LEGAIS COMPATIBILIDADE SÃO PONTOS FUNDAMENTAIS DA LEI DE SOFTWARE: FALHAS DE SEGURANÇA Um pouco de história Alguns conceitos importantes Chaves públicas e privadas Exemplos de falhas TÉCNICAS DE ENGENHARIA REVERSA... 37

8 8 5.1 TÉCNICAS DE ENGENHARIA REVERSA SEM O CÓDIGO-FONTE TÉCNICAS DE ENGENHARIA REVERSA COM O CÓDIGO-FONTE Extração das Informações Tratamento das informações TÉCNICAS COMPLEXAS DE ENGENHARIA REVERSA Análise de propagação Objetização Reengenharia de interfaces ENGENHARIA REVERSA PARA SEGURANÇA Software malicioso Métodos de proteção Técnicas Anti-reversão FERRAMENTAS DE ENGENHARIA REVERSA IDA Pro VB Decompiler Understand for Delphi MÉTODO FUSION-RE/I CONCLUSÃO REFERENCIAS BIBLIOGRAFICAS... 61

9 9 1 INTRODUÇÃO Engenharia Reversa, Engenharia de Software, Segurança. 1.1 CONTEXTO O estudo procura demonstrar como o desenvolvimento de software pode se beneficiar com a utilização da engenharia reversa. O processo de desenvolvimento possui diversos requisitos, entre eles a segurança. Todavia, nem sempre os programadores, analistas e gestores dão a devida atenção que o tema requer. Com a disseminação da internet, de novas tecnologias e de ferramentas cada vez mais poderosas, a informação tornou-se artigo valioso. Contudo, é preciso torná-la protegida da ação de pessoas não autorizadas. Para tal, a elaboração de programas de computador com um nível maior de proteção requer a utilização de ferramentas específicas. Nesse contexto, surgem técnicas que podem reduzir esse risco, entre elas o emprego da engenharia reversa como meio de proteger o código dos sistemas. A necessidade do uso da engenharia reversa tem vários motivos, dentre eles: os sistemas terem sido desenvolvidos há muito tempo; possuírem pouca ou nenhuma documentação atualizada; os desenvolvedores do produto já não trabalharem mais na empresa; o sistema ter sido criado com métodos diferentes, nem sempre padronizados. Outras necessidades devem-se a adaptação às novas tecnologias de hardware e software (novas linguagens e métodos); adaptação às novas economias (moeda, legislação, impostos); adaptação de novas funcionalidades, acessibilidade, correção de erros, etc.

10 PROBLEMA Devido à quantidade de vulnerabilidades que os sistemas atuais têm enfrentado, aumentar a segurança no desenvolvimento de software tornou- se tão necessário quanto o uso dos computadores nas empresas e nas residências. Uma das soluções é tornar os programas imunes aos vários tipos de ataques que podem sofrer, para isso ressurge a engenharia reversa como alternativa na elaboração de códigos mais seguros. 1.3 JUSTIFICATIVA Um dos principais motivos do estudo é descrever a engenharia reversa como algo imprescindível na engenharia de software. Rever os conceitos que colaboram para o uso perverso de suas técnicas na pirataria e a violação dos direitos autorais. A partir desse conhecimento, propor alternativas que impeçam ou diminuam o acesso a dados confidenciais, a reprodução de cópias ilegais e a invasão de sistemas. 1.4 OBJETIVOS Para tal, este trabalho procura identificar alguns métodos que podem colaborar na redução dos riscos. Apresentar a engenharia reversa como ferramenta de segurança no desenvolvimento de software confiável. Identificar seus conceitos, assim como seus aspectos legais; Examinar as falhas de segurança de software e suas conseqüências; Levantar as técnicas de engenharia reversa e apresentar métodos de proteção.

11 METODOLOGIA Para alcançar o objetivo proposto, a metodologia adotada procura identificar na literatura as falhas dos sistemas, apresentando os conceitos de engenharia reversa, os métodos empregados na proteção de código dos programas, as técnicas e os procedimentos empregados na engenharia de software que visam diminuir as vulnerabilidades e aprimorar a segurança de software. Utiliza-se de livros, revistas, manuais, dissertações e textos de internet sobre o assunto e suas co-relações, além de citar alguns dos softwares e ferramentas disponíveis no mercado.

12 12 2 CONCEITOS E DEFINIÇÕES Segundo Saleh e Boujarwah (1996), o mercado de software vem crescendo a cada dia e com ele o uso de técnicas de desenvolvimento, muitas vezes informais. Como resultado, a manutenção de tais softwares torna-se problemática, uma vez que a documentação associada ao software, na maioria das vezes, não está de acordo com o código implementado. Além disso, as constantes modificações e adições de novas características ao software acarretam efeitos colaterais inesperados que não estão presentes na documentação. Dessa forma, quando diante da manutenção do produto, o engenheiro de software encontra uma documentação informal e incompleta, que não reflete o software existente, tornando impossível o gerenciamento do processo de manutenção segundo Saleh e Boujarwah (1996). Neste contexto, a engenharia reversa de software, tem o propósito de recuperar as informações de projeto perdidas durante a fase de desenvolvimento, de documentar o real estado do software e poder auxiliar o processo de gerenciamento da manutenção. Rugaber (1992) afirma que a maior parte do esforço de desenvolvimento de software é gasto na manutenção de sistemas existentes e não no desenvolvimento de sistemas novos, e que grande parte do processo de manutenção é dirigido ao entendimento do sistema em manutenção. Sendo assim, se queremos melhorar o desenvolvimento de software, é necessário facilitar o processo de compreensão de sistemas existentes. A engenharia reversa ataca diretamente o problema de compreender o software. Segundo Chikofsky e Cross II (1990) o termo engenharia reversa teve sua origem na análise de hardware, onde a prática de decifrar o projeto de produtos prontos é comum. O mesmo conceito pode ser aplicado a software, com uma diferença: enquanto a engenharia reversa de hardware tem por objetivo reproduzir o sistema, a de software se destina a criar visões do sistema em diferentes níveis de abstração, facilitando seu entendimento com o principal objetivo de ajudar na manutenção do sistema.

13 13 Uma definição de abstração é dada como a habilidade de se ignorar os aspectos de assuntos não relevantes para o propósito em questão, tornando possível uma concentração maior nos assuntos principais (Oxford, 1986). Segundo Feltrim, V. D. (1999), o ciclo de vida do software expressa bem a diferença entre níveis de abstração. Vale ainda ressaltar a existência de dois conceitos relativos a abstração: nível e grau. Diferentes níveis de abstração ocorrem entre diferentes etapas do desenvolvimento (as informações na etapa de projeto são outras além das informações da etapa de análise), enquanto diferenças no grau de abstração ocorrem dentro de uma mesma etapa (pode-se representar as informações de uma mesma etapa do desenvolvimento de forma geral ou de forma mais detalhada). Segundo Harandi e Ning (HARANDI e NING, 1990), um sistema pode ser visualizado a partir de diferentes níveis de entendimento. Baseado nos níveis de abstração, as visões são classificadas em quatro categorias: Visão em nível implementacional: abstrai características da linguagem de programação e, especificamente, da implementação. Exemplos de visões em nível implementacional são informações a respeito da sintaxe e da semântica da linguagem, e informações de implementação; Visão em nível estrutural: abstrai detalhes da implementação para revelar sua estrutura a partir de diferentes perspectivas. O resultado é uma representação explicita das dependências entre os componentes do sistema; Visão em nível funcional: abstrai a função de um componente do sistema de modo a identificar o que o componente faz. Relaciona partes do programa à suas funções a fim de revelar as relações lógicas entre elas; Visão em nível de domínio: abstrai o contexto em que o sistema está operando, ou seja, relato o porquê do sistema ter sido desenvolvido. Dessa forma, a engenharia reversa pode ser aplicada em qualquer etapa do ciclo de vida, seja para recuperar níveis de abstração ou para fornecer uma nova visão em

14 14 um grau de abstração mais alto (é consenso de que quanto mais alto o grau de abstração, menos detalhes são fornecidos.) A engenharia reversa segue o sentido oposto ao da engenharia progressiva. A engenharia progressiva segue a seqüência que vai desde os requisitos, passa pelo projeto até a implementação. Na engenharia progressiva o sistema é o resultado do processo de desenvolvimento. Na engenharia reversa, o sistema geralmente é o ponto inicial do processo, conforme Chikofsky e Cross II (1990). A figura 1 representa esquematicamente, uma forma comparativa das direções inversas por quais se orientam as etapas envolvidas em cada uma das engenharias. O processo de engenharia reversa caracteriza-se pelas atividades retroativas do ciclo de vida, que partem de um baixo nível de abstração para um alto nível de abstração. Fig. 1 Comparação dos níveis de abstração e das visões. Existem várias definições de engenharia reversa. A definição de Pressman (1995, p.546) diz que é o processo de análise num esforço de criar uma representação do programa em um nível de abstração mais alto que o código fonte. Assim sendo, pode-se dizer que o objetivo da engenharia reversa é a produção de informações que possam aumentar o conhecimento geral de sistemas de software. Essas informações podem ser utilizadas em atividades como manutenção, reuso, teste e controle de qualidade de software.

15 15 A figura 2 ilustra a relação entre a engenharia progressiva e a engenharia reversa de acordo com as fases do ciclo de vida do software, sendo que essas fases podem ser agrupadas em três atividades fundamentais: Sistema (engenharia de sistemas): envolve o contexto em que o sistema está operando, ou seja, o porquê do sistema ser desenvolvido; Requisitos (análise): são estabelecidos os serviços a serem fornecidos pelo sistema e as restrições sob as quais ele deve operar, ou seja, o que o sistema deve fazer e sob quais circunstâncias; Desenvolvimento (projeto, codificação e testes): cria-se um planejamento da solução, ou seja, como o sistema cumprirá o que foi estabelecido na atividade de requisitos e a implementação dessa solução, incluindo a codificação, os testes, a depuração e a entrega do sistema. A fase de manutenção é vista como reiteração das atividades prévias. Fig. 2 Relação entre a engenharia progressiva e a engenharia reversa. Em Costa (1997) encontramos a definição de engenharia reversa como o processo de exame e compreensão do sistema existente, para recapturar ou recriar os requisitos atualmente implementados pelo sistema, apresentando-os em um grau ou

16 16 nível mais alto de abstração. Não envolve mudanças no sistema ou criação de um novo sistema. Segundo Chikofsky e Cross II (1990), engenharia reversa de software é um processo de investigação, não um processo de mudança ou reprodução. Rugaber (1992) identifica o propósito da engenharia reversa como sendo entender um sistema de software com o objetivo de facilitar atividades como: expansão, correção, documentação, re-projeto ou reprogramação em outra linguagem de programação. Chikofsky e Cross II (1990) também identificam duas importantes categorias da engenharia reversa: a redocumentação (visualização de código) e a recuperação de projeto (entendimento de programa). A categoria redocumentação compreende a criação ou revisão de uma representação semanticamente equivalente dentro de um mesmo nível de abstração. Esse processo visa criar novas visões do sistema através da análise do código fonte, com o objetivo de melhorar a compreensão do sistema. A criação dessas visões adicionais do código, geralmente gráficas, tem como objetivo recriar a documentação que já existiu ou que deveria ter existido sobre o sistema, conforme Costa (1997). No entanto, as informações recuperadas com esse tipo de análise fornecem apenas visões estruturais, de forma que informações como a função e os propósitos do sistema exigem um maior esforço de entendimento. A engenharia reversa categorizada como recuperação de projeto é um subconjunto da engenharia reversa no qual o domínio de conhecimento, informação externa e dedução são adicionados às observações sobre o sistema para identificar abstrações de mais alto nível que sejam significativas, além daquelas obtidas diretamente pelo exame do sistema em si, segundo Biggerstaff (1989). Esse tipo de processo de entendimento visa recuperar todas as informações necessárias para se compreender melhor o que o sistema faz, como faz e porque o faz. Recuperação de projeto é a forma mais critica de engenharia reversa porque tenta recuperar não só a funcionalidade do sistema, mas o processo no qual ele foi desenvolvido, conforme Costa (1997). Esse tipo de análise recupera mais do que visões estruturais, obtendo visões funcionais e até mesmo de domínio.

17 17 3 ENGENHARIA REVERSA DE SISTEMA Engenharia reversa de sistema envolve várias ferramentas e utiliza o sistema operacional para obter informação, inspecionando programas executáveis. Pois toda interação que um programa tem com o mundo externo tem que ir pelo sistema operacional. Esta é a razão da necessidade em entender a operação do sistema. Segundo Eilam, E. (2005), a Engenharia reversa de Código é uma arte. Conceitos de extração de algoritmos de um programa binário é um processo complexo que requer um domínio de várias técnicas acrescidas de um entendimento sólido de desenvolvimento de software, da CPU, e do sistema operacional. O software pode ser altamente complexo, até mesmo com acesso a programas bem escritos e corretamente documentados, o código fonte é freqüentemente difícil de ser compreendido. Para isso observa-se o código de baixo nível, procurando detalhes de como o software opera. Muitos destes detalhes são gerados automaticamente pelo compilador e não manualmente pelo desenvolvedor de software. 3.1 SOFTWARE DE BAIXO NÍVEL Segundo Eilam, E. (2005), o software de baixo nível (também conhecido como software de sistema) é um nome genérico para a infra-estrutura do mundo de software. Algumas ferramentas de desenvolvimento como compiladores, linkers, e depuradores são software de infra-estrutura para operar sistemas e linguagens de programação de baixo nível como a linguagem assembly. Esta é a camada que separa o desenvolvedor de software e aplicação do hardware físico. As ferramentas de desenvolvimento separam o desenvolvedor de software de arquiteturas de processador e da linguagem assembly, enquanto sistemas operacionais separam o desenvolvedor de software de dispositivos de hardware específicos e simplifica a interação com o usuário final, administrando a exibição, o mouse, o teclado, e assim por diante.

18 18 Antigamente, os programadores sempre tiveram que trabalhar no baixo nível porque era o único modo possível para escrever software de infra-estrutura de baixo nível. Hoje em dia, sistemas operacionais modernos e ferramentas de desenvolvimento ocultam os detalhes do mundo do baixo nível. Isto simplifica profundamente o processo de desenvolvimento de software, porém à custa da redução do poder e controle geral do sistema. Para se tornar um engenheiro reverso pleno, é preciso desenvolver um sólido conhecimento de software de baixo nível e programação de baixo nível. Isso porque os aspectos de baixo nível de um programa freqüentemente permitem o domínio dos detalhes de engenharia reversa de alto nível. A maioria dos desenvolvedores de software usa a linguagem de alto-nível que é de fácil compreensão. Por exemplo, comandos que criam uma janela, carregam uma página de Web, ou exibem um quadro é inacreditavelmente simples, enquanto o significado disso é traduzido em milhares ou até mesmo milhões de comandos nas mais baixas camadas. Engenharia reversa requer um entendimento sólido destas mais baixas camadas. Para tanto, tem que estar literalmente atento a qualquer coisa que se coloca entre a fonte de programa e a CPU. 3.2 LINGUAGEM ASSEMBLY Segundo Eilam, E. (2005), a linguagem assembly é o mais baixo nível na cadeia de software possibilitando inacreditavelmente satisfazer a engenharia reversa. Se o software executa uma operação, deve ser visível no código de linguagem assembly. Esta é a linguagem da engenharia reversa, seu domínio requer do desenvolvedor um entendimento sólido da linguagem assembly na plataforma escolhida. Outro conceito importante do código de máquina (freqüentemente chamado de código binário ou código de objeto). As pessoas às vezes cometem o erro de pensar que o código de máquina é "mais rápido" na linguagem assembly. Isso é um

19 19 engano, código de máquina e linguagem assembly são duas representações diferentes da mesma coisa. ACPU lê código de máquina, que nada mais é que uma sucessão de pedaços que contêm uma lista de instruções para a CPU executar. Em vez de números de hexadecimal secretos nós podemos ver em instrução textual nomes como MOV (Mova), XCHG (Troca), e assim por diante. Cada comando de linguagem assembly é representado por um número, chamando o código de operação, ou opcode. Código de objeto é essencialmente uma sucessão de opcodes e outros números estão relacionados a opcodes para executar operações. CPU s constantemente lêem código de objeto de memória, decodifica-o, e agem baseados em instruções embutidas. Quando o desenvolvedor escreve código em linguagem assembly (uma ocorrência bastante rara estes dias), eles usam um programa de montador para traduzir o código de linguagem assembly textual em código binário que pode ser decodificado por uma CPU. Na outra direção, um disassembler faz o oposto exato. Lê código de objeto e gera o textual traçando cada instrução nela. Esta é uma operação relativamente simples para executar porque a linguagem assembly textual simplesmente é uma representação diferente do código de objeto. Disassembler é uma ferramenta fundamental para a engenharia reversa. 3.3 COMPILADORES Segundo Eilam, E. (2005), um arquivo de texto que contém instruções que descrevem o programa em um alto-nível de linguagem é produzido pelo compilador. O compilador é um programa que lê um arquivo fonte e gera um arquivo de código de máquina correspondente. Dependendo do alto-nível da linguagem, este código de máquina pode ser um objeto de plataforma específica que é decodificado diretamente pela CPU ou pode ser codificado em uma plataforma especial independente chamado bytecode. Compiladores tradicionais usam linguagens de programação como C e C++ diretamente para gerar código objeto de máquina legível a partir do código fonte

20 20 textual. O que isto significa é que o código de objeto resultante, quando traduzido pela linguagem assembly por um disassembler, é essencialmente um programa de máquina gerado. Claro que, não é completamente nenhum código de máquina, porque o desenvolvedor de software descreveu ao compilador o que precisada ser feito na linguagem de alto-nível. A barreira maior em decifrar código gerado pelo compilador é a otimização aplicada pela maioria dos compiladores modernos. Compiladores empregam uma variedade de técnicas, isso minimiza o tamanho de código e melhora o desempenho da execução. O problema é que o código aperfeiçoado é freqüentemente difícil de ler. Por exemplo, ao aperfeiçoar os compiladores substituem instruções com operações matemáticas equivalentes cujo propósito pode estar longe do óbvio à primeira vista. 3.4 MÁQUINAS VIRTUAIS E BYTECODES Segundo Eilam, E. (2005), compiladores para linguagem de alto-nível como Java geram um bytecode em vez de um código de objeto. Bytecodes são semelhantes a códigos, a não ser que eles sejam decodificados por um programa, em vez de uma CPU. A idéia é ter um compilador que gere o bytecode, e usar um programa chamando a máquina virtual para então decodificar o bytecode e executar as operações descritas nele. Claro que, a máquina virtual terá que converter em algum ponto o bytecode em código de objeto, que é compatível com a CPU subjacente. Há vários benefícios em usar a linguagem baseada em bytecode. Uma vantagem significativa é a independência de plataforma. A máquina virtual pode ser instalada em plataformas diferentes que habilitam o mesmo programa binário em qualquer CPU, contanto que tenha uma máquina virtual compatível. Claro que, indiferentemente da plataforma na qual a máquina virtual está executando atualmente, o bytecode formado fica o mesmo. Isto significa teoricamente que o desenvolvedor de software não precisa se preocupar sobre a compatibilidade de plataforma. Tudo que eles têm que fazer são prover os clientes com uma versão de bytecode do programa deles.

21 SISTEMAS OPERACIONAIS Segundo Eilam, E. (2005), um sistema operacional é um programa que administra o computador, incluindo o hardware e aplicações de software. Um sistema operacional tem o controle de muitas tarefas diferentes e pode ser visto como um tipo de coordenador entre diferentes elementos em um computador. Sistemas operacionais são fundamentais em um computador, tanto que a engenharia reversa necessita do conhecimento profundo do que eles fazem e como eles trabalham. 3.6 DISASSEMBLERS Segundo Eilam, E. (2005), disassemblers são programas que transformam um programa executável em arquivos textuais que contêm código de linguagem assembly de um programa inteiro ou partes dele. Isto é um processo relativamente simples considerando que código de linguagem assembly é a cartografia textual do código de objeto. Um disassembler de alta qualidade é um componente fundamental no kit de ferramentas da engenharia reversa, contudo alguns preferem usar disassemblers embutidos em certos depuradores de baixo nível. 3.7 DEPURADORES O depurador é um programa que permite ao desenvolvedor de software observar o programa enquanto está funcionando. As características básicas do depurador são a habilidade para fixar pontos de ruptura e a habilidade para localizar por código. Pontos de ruptura permitem os usuários selecionar certa função ou linha de código em qualquer lugar dentro do programa e instrui o depurador para interromper a execução do programa uma vez que esta linha é alcançada. Quando o programa alcança o ponto de ruptura, o depurador pára e exibe o estado atual do programa. Neste ponto, é possível iniciar o depurador e o programa continuará executando ou começar a traçar o programa.

22 22 Depuradores permitem aos usuários localizar por um programa enquanto estiver executando. O programa executa uma linha de código e então gerada, permite o usuário observar ou até mesmo alterar o estado do programa. O usuário pode executar a próxima linha então e pode repetir o processo. Isto permite ao desenvolvedor ver o fluxo exato de um programa. Instalando pontos de ruptura e localizando por programas, o desenvolvedor pode assistir a um programa de perto, como executa uma seção problemática de código e tentar determinar fontes do problema. Os depuradores apresentam o programa em código fonte, e permitem ao desenvolvedor fixar pontos de ruptura e localizar por linhas, embora o depurador esteja trabalhando de fato com o código de máquina, segundo Eilam, E. (2005). 3.8 DECOMPILADOR O decompilador está a um passo acima do disassembler. Um decompilador transforma um arquivo binário executável em linguagem de alto nível. A idéia é tentar reverter o processo de compilação, obter o arquivo de fonte original ou algo semelhante. Na maioria das plataformas, a recuperação atual do código fonte original não é realmente possível. Existem elementos significantes na maioria das linguagens de alto-nível, porém são omitidos no processo de compilação e é impossível recuperar. Decompiladores são ferramentas poderosas que em algumas situações e ambientes podem reconstruir um código fonte altamente legível de um programa binário, segundo Eilam, E. (2005).

23 23 4 ASPECTOS LEGAIS A engenharia reversa pode também gerar problemas de legalidade, como uma empresa querendo criar uma cópia de um produto que vende bem. No entanto, a questão legal depende das leis de cada país. E, mesmo assim, ainda existem países que não possuem leis específicas sobre o assunto. O debate legal ao redor de engenharia reversa acontece há vários anos. Isto normalmente revolve ao redor da pergunta de qual o impacto social e econômico a engenharia reversa está causando na sociedade como um todo. Claro que, para calcular este tipo de impacto, em grande parte, depende de como a engenharia reversa é usada. As seguintes seções discutem os aspectos legais dessas aplicações, com uma ênfase nos Estados Unidos, segundo Eilam, E. (2005). Porém nota-se a dificuldade em afirmar quando tal procedimento é legal ou não, pois depende de muitos fatores. 4.1 COMPATIBILIDADE Em tecnologia, especialmente em informática (independentemente de plataforma), é dito de um produto que este possui compatibilidade reversa (ou compatibilidade descendente) quando é capaz de assumir o lugar de um produto mais antigo, interagindo com outros produtos que foram desenhados para funcionar com a versão anterior. Segundo Eilam, E. (2005), a engenharia reversa utilizada para tal finalidade produz vários benefícios, simplificando o processo de desenvolvimento e melhorando as tecnologias existentes. Todavia, quando usada como ferramenta de competição de produtos, a situação torna-se mais complexa. Por exemplo, o roubo de segmentos de códigos dos concorrentes e sua reprodução integral demonstram claramente a violação dos direitos autorais. Entretanto, quando se utiliza de métodos de

24 24 descompilação de programas e recompilação com funcionalidades idênticas mas com códigos diferentes, torna-se mais difícil sua comprovação. Uma das leis mais conhecidas é o Digital Millenium Copyright Act, (DMCA) dos Estados Unidos, aprovado em 1998 que, entre várias medidas para proteger direitos autorais na informática, também faz restrições em relação à engenharia reversa. O DMCA considera proibido: Burlar sistemas protegidos por direitos autorais: Isto significa que uma pessoa não pode burlar a tecnologia do Digital Rights Management (DRM), até mesmo para uso pessoal. O desenvolvimento de tecnologias de alteração: Isto significa que uma pessoa não pode desenvolver ou possa disponibilizar qualquer produto ou tecnologia que iluda uma tecnologia de DRM. Exemplo, um programa de keygen. Na realidade, uma pessoa que desenvolve um keygen viola esta seção, e uma pessoa que usa um keygen viola o item anterior. Um keygen é um programa que gera um número de série rapidamente para programas que pedem números consecutivos durante a instalação. Keygens estão (ilegalmente) disponíveis on-line para praticamente qualquer programa que requer um número de série. Afortunadamente, o DMCA faz várias exceções nas quais a engenharia reversa é permitida. São isenções providas pelo DMCA: Compatibilidade: inverter e evitar tecnologias de DRM podem ser permitidas em circunstâncias onde tal trabalho é necessário para a compatibilidade com o produto de software em questão. Por exemplo, se um programa foi codificado com a finalidade de proteção de cópia, um desenvolvedor de software pode decifrar o programa em questão se o único objetivo for a compatibilidade com o mesmo. Investigação de encriptação: está é uma cláusula altamente restringida no DMCA, que permite os investigadores de tecnologias de encriptação para evitar tecnologias de proteção de direitos autorais em produtos de

25 25 encriptação. A reversão só é permitida se as tecnologias de proteção interferem com a avaliação da tecnologia de encriptação. Teste de segurança: Uma pessoa pode inverter e pode evitar proteção de direitos autorais de software com a finalidade de avaliar ou melhorar a segurança de um sistema de computador. Instituições educacionais e bibliotecas públicas: Estas instituições podem evitar uma tecnologia de proteção de direitos autorais para avaliar o trabalho registrado antes de comprá-lo. Investigação de governo: Não surpreendentemente, as agências de investigações do governo não são afetadas pelo DMCA. Regulamento: Podem ser evitadas Tecnologias de DRM com o propósito de regular os materiais acessados por menores na Internet. Assim, um produto teórico que não permite monitoração dos acessos e navegação na Internet, pode ser burlado com a finalidade de controlar seu uso por menores. Proteção de privacidade: Produtos que armazenam ou transmitem informação pessoal pode ser revertido e qualquer tecnologia de proteção que eles incluem pode ser alterada. Na União Européia, o Eu Copyright Directive, de 2001, é similar ao Digital Millenium Copyright Act, porém não é tão restritivo. Só são feitas restrições caso o objetivo final da engenharia reversa seja a cópia de algum programa ou quebra de patente com objetivo de lucro. Caso seja para fins acadêmicos ou de compatibilidade, à princípio não existem restrições. Entretanto, alguns países partem do princípio de que o software comprado é propriedade particular e, portanto, pode ser alterado como qualquer outra manufatura. Na Suíça, a lei a respeito do assunto é bastante curiosa e, de certo modo, polêmica. A lei Suíça de Concorrência Desleal de 1986 exige dos competidores a realização de investimentos em engenharia reversa mesmo quando a tecnologia não seja secreta. Os tribunais suíços, porém, têm rejeitado ou limitado severamente a aplicação de tal norma, pela inexistência de prazo e limites.

26 26 No Japão, a Lei Japonesa de Concorrência Desleal de 1993 proíbe a imitação servil, mesmo no caso de produtos não patenteados, nem protegidos por direitos autorais. A lei japonesa impõe limites claros à aplicação da norma de apropriação ilícita: o lead time vigora apenas por três anos; não se protegem as idéias e os conceitos técnicos; e ressalva-se o caso de modificações ou aperfeiçoamento técnico efetuado pelo competidor com base no item copiado; a necessidade de padronização e compatibilização de produtos e o uso de elementos de caráter estritamente funcional. Ou seja, a proibição de imitação não impede o progresso técnico, ressalva o domínio das patentes para proteger idéias e conceitos, e o interesse social na padronização e compatibilização industrial. No Brasil não existe uma lei específica sobre Engenharia Reversa. Apesar disso, quando ocorre costuma-se proceder de duas maneiras: caso a engenharia reversa não tenha como objetivo a pirataria ou infração de algum direito autoral, não é considerado crime; porém caso contrário, a Lei N , de 19 de fevereiro de 1998 (Lei de Software) e também a Lei N de Direitos Autorais de 1998 protege seus autores. 4.2 SÃO PONTOS FUNDAMENTAIS DA LEI DE SOFTWARE: Segundo Júnior, J. B. (2006), a definição de programa de computador está no artigo primeiro da lei; O regime de proteção dos direitos de autores de programas de computador, conforme o artigo 2º da lei, é o mesmo das obras literárias; Não há discussão sobre danos morais quanto ao uso irregular de softwares, ressalvado ao proprietário o direito de fazer cessar as alterações que seu software tenha sofrido ou venha sofrendo; A tutela dos direitos autorais sobre software é por 50 anos, a partir de 1º de janeiro do ano subseqüente à publicação ou criação do software; A proteção aos direitos independe de registro do software; Há reciprocidade de reconhecimento de direitos aos estrangeiros domiciliados no exterior, desde que seu país também reconheça os mesmos direitos em relação aos brasileiros e estrangeiros domiciliados no Brasil; Ao autor também cabe o direito

27 27 exclusivo de autorizar ou proibir o aluguel comercial de seu software (aplicável somente aos softwares cujo objeto do contrato não seja a locação em si); Os programas de computador poderão ser registrados em órgãos competentes; As informações para registro do programa de computador deverão ser capazes de identificá-lo, e são de caráter sigiloso, sendo reveladas apenas em razão de interesse do proprietário dos direitos ou por ordem judicial; segundo Júnior, J. B. (2006). A cópia de um só exemplar para salvaguarda não é considerada ofensa a direitos autorais. Portanto, se em nossa empresa possuímos 10 licenças legalmente adquiridas de Windows, podemos ter também 10 cópias (uma de cada licença), e isso não será considerado ilegal. Atenção: essas cópias de salvaguarda não poderão estar instaladas, sob pena de violação de direitos autorais; Em resumo, podemos dizer que a lei de direitos autorais no tocante à área de informática veio delimitar a ação criminosa e trazer as sanções civis aplicáveis ao contrafator (nome técnico do pirata ). O processo de verificação de violação de diretos autorais usará sempre a lei de software como base, eis que o objeto perseguido é a proteção de direitos de autor de programa de computador. Segundo Júnior, J. B. (2006), ele será, também, baseado na lei de direitos autorais, eis que esta define o que é o ato de contrafação (artigo 5º), assim como a multa civil aplicável ao contrafator em favor do autor lesado. 4.3 FALHAS DE SEGURANÇA Um pouco de história Anos atrás, os operadores de um computador ENIAC se depararam com uma coisa curiosa. Um inseto havia ficado preso dentro da máquina e estava atrapalhando o funcionamento da mesma. Daí surgiu o termo bug (inseto) que virou sinônimo de

28 28 falha. Hoje quando se descobre um erro em algum programa, se diz: novo bug descoberto. De lá pra cá, as coisas evoluíram muito, mas os bugs continuam a existir. Muitos deles são frutos da história do próprio programa ou sistema. O Windows por exemplo. O Windows NT foi construído a partir do zero, mas o Windows ME não. Desde o início da criação de sua primeira interface gráfica, a Microsoft vêm tendo problemas com erros graves em seu sistema operacional. Já o sistema Unix, foi criado pelos desenvolvedores da linguagem C, para ser um sistema versátil e poderoso. Para Assunção, M. F. A. (2001), a Internet também têm seus problemas ligadas à história de sua origem. Desde que se chamava Arpanet e foi criada pelo exército americano para resistir à guerra fria, a rede evoluiu muito e foram criados novos serviços como , World Wide Web, Gopher, Wais e outros. Milhões de computadores se juntaram a ela e seus recursos são cada vez mais sofisticados. Mas alguns problemas bem antigos ainda são perturbadores hoje. Uma falha na implementação do TCP/IP (conjunto de protocolos em que a Internet se baseia), por exemplo, possibilita que o ataque de Spoof aconteça Alguns conceitos importantes Hackers: Alguém que estuda sistemas ou qualquer tipo de conhecimento humano pelo simples desafio de dominá-los. No sentido original da palavra, o Hacker é alguém que usa seus conhecimentos para ajudar outros, direta ou indiretamente. Hackers foram os principais responsáveis pelo desenvolvimento da Internet, criaram o Linux, o MP3 e a filosofia do software livre. Atualmente o termo vem sendo muito usado em relação aos Crackers, segundo Morimoto, C.E. (2005). Crackers: O cracker é um vândalo virtual, alguém que usa seus conhecimentos para invadir sistemas, quebrar travas e senhas, roubar dados, etc. Alguns tentam ganhar dinheiro vendendo as informações roubadas, outros buscam apenas fama ou divertimento. Na hierarquia Hacker, o Cracker está acima do Lamer (que sabe muito pouco), mas abaixo do Hacker, que é alguém de mais maturidade, que ao invés de

29 29 usar seu conhecimento para destruir tudo que vê pela frente, o utiliza para construir coisas, desenvolver novos sistemas (principalmente de código aberto), etc. Para Morimoto, C.E. (2005), outra definição, mais branda, é alguém que quebra travas de segurança de programas e algoritmos de encriptação, seja para rodar jogos sem o CD-ROM, ou gerar uma chave de registro falsa para um determinado programa, quebrar as travas anti-cópias usadas em alguns softwares ou quebrar o sistema de encriptação do DVD (este último realmente importante, pois permitiu que os usuários do Linux e outros sistemas não Windows pudessem assistir DVDs). Ou seja, nesta definição o Cracker é alguém na margem da lei, cujas ações ainda são ilegais, embora muitas vezes eticamente justificáveis (os usuários têm direito a fazer cópias de CDs legalmente comprados, tem direito de assistir DVDs no Linux e assim por diante). Trojans: O nome trojan é uma alusão à história do antigo cavalo de tróia, em que o governante da cidade de Tróia na antiga Grécia foi presenteado com um cavalo de madeira recheado de soldados inimigos, segundo Assunção, M. F. A. (2001). Possui muitas características similares aos vírus, tais como: perda de arquivos, falhas na memória, erros em periféricos, etc. A grande diferença é que o trojan pode ser considerado um vírus inteligente, pois é controlado à distância pela pessoa que o instalou. Esse indivíduo então consegue enxergar o seu computador, podendo realizar desde as mais simples tarefas como mexer o mouse à utilização do seu IP como ponte para outros ataques. Conseguem ficar escondidos em arquivos de inicialização do sistema operacional e se iniciam toda vez que a máquina é ligada. Sniffers: Os sniffers ou farejadores são os tipos de programas mais usados para conseguir senhas em uma rede. Eles ficam residentes na memória como um cavalo de tróia, analisando todo o tráfego que ali passa. Qualquer entrada ou saída de dados é capturada, seja em um servidor FTP, uma página de chat ou um digitado. O sniffer captura os pacotes recebidos em seu estado bruto e os transforma em texto puro para serem lidos. Sempre foram mais usados em sistemas Unix, mas ultimamente todos os outros sistemas contam com poderosos sniffers, segundo Assunção, M. F. A. (2001).

30 30 Syn-flood: O tipo de ataque usado para gerar o ip spoof. A autenticação por Syn é feita em três vias. Para Assunção, M. F. A. (2001), o ataque consiste em não completar essas três vias. Mais ou menos assim. No caso do ping, ele é em duas vias, apenas envia o pacote e recebe a resposta. Para o Syn-flood, primeiro é enviado o pacote Syn e logo depois teria que ser enviado o Ack para a conexão se estabelecer, mas ele não é enviado, fazendo com que a máquina alvo consuma seus recursos ao receber muitos Syns e esperar muitos Acks. O ataque por ping é parecido, é enviado vários pings com grandes pacotes fazendo com que um sistema trave. Mas é mais difícil de ocorrer o travamento do que o ataque por syn. OOB: Ataque Out-of-Band ou popularmente conhecido como WinNuke. Consiste em mandar pacotes malformados para uma porta Netbios do Windows. Geralmente usado nas portas 135, 137 e 139, essa última sendo a mais usada. O sistema não consegue lidar com os pacotes, trava e mostra a famosa tela azul de erro. No Windows 95 esse ataque era mais eficaz, agora está se tornando obsoleto. Smurf: Enviam pacotes ICMP (protocolo que informa condições de erro) spoofados para centenas, talvez milhares de sites. Enviam-se os pacotes com o endereço IP da vítima, assim fazendo com que ela receba muitos pacotes ping de resposta ao mesmo tempo, causando um travamento total. Ainda não existe uma proteção eficaz contra esse tipo de ataque. Um programa bom (para Windows) que realiza o smurf é o WinSmurf, conforme Assunção, M. F. A. (2001). Scanners: São programas que analisam um sistema ou rede em busca de falhas de qualquer tipo. Existem dezenas de scanners diferentes, cada um com suas vantagens. Aprendendo melhor sobre eles, poderá se proteger melhor e evitar que algum invasor malicioso dê um passo à sua frente. Senhas: Serve para autenticar o usuário, ou seja, é utilizada no processo de verificação da identidade do usuário, assegurando que este é realmente quem diz ser. Engenharia social: Método de ataque, onde alguém faz uso da persuasão, muitas vezes abusando da ingenuidade ou confiança do usuário, para obter informações

31 31 que podem ser utilizadas para ter acesso não autorizado a computadores ou informações, segundo Vale e Ulbrich, (2004). Vulnerabilidades: É uma falha no projeto ou implementação de um software ou sistema operacional, que quando explorada por um atacante resulta na violação da segurança de um computador, para Eilam, E. (2005). Criptografia é a arte da escrita oculta usada desde a antiguidade, por exemplo: pelos egípcios na sua antiga escrita. Ela é muito importante hoje em dia na internet. Mandar um confidencial da maneira convencional é muito inseguro, ele pode ser interceptado no meio da transmissão ou posteriormente, por isto a necessidade do uso de programas eficientes, como o PGP. Esses programas possibilitam uma espécie de código especial entre você e o receptor da mensagem, fazendo com que mesmo que alguém consiga obtê-la no meio do caminho, ela será impossível de se ler, segundo Assunção, M. F. A. (2001) Chaves públicas e privadas Em Assunção, M. F. A. (2.001), na década de 1970 o padrão na criptografia era a criptografia simétrica onde existia uma única chave (senha) para encriptar e desencriptar, tanto para o emissor quanto para o destinatário. O grande problema desse método era como transmitir com segurança esta senha. No final da década de 70 foi desenvolvido o método da criptografia assimétrica e a tecnologia das chaves pública e privada. Você encriptava com a chave pública do destinatário e somente ele poderia desencriptar utilizando a sua chave privada e também haveria como saber com certeza absoluta se a pessoa que mandou a mensagem era realmente quem dizia ser, segundo Soares et al. (1995). Um sistema computacional é dito seguro se este atende a três requisitos básicos relacionados aos recursos que o compõem: confidencialidade, integridade e disponibilidade.

32 32 A confidencialidade diz que a informação só está disponível para aqueles que devidamente autorizados; a integridade diz que a informação não é destruída ou corrompida e o sistema tem um desempenho correto, e a disponibilidade diz que o serviços/recursos do sistema estão disponíveis sempre que forem necessários. Todos os sistemas têm falhas, segundo Assunção, M. F. A. (2001). Elas consistem em pequenos erros na criação dos programas, possibilitando que crackers os utilizem para tomar o controle de alguma máquina. Existem em absolutamente todo tipo de software, desde um simples tocador de mp3, um aparentemente inofensivo editor de texto, um jogo de computador e até mesmo o próprio sistema operacional. Essas falhas por mais insignificantes que pareçam, podem comprometer a segurança de uma rede inteira. E a maior de todas as falhas é o desinteresse dos muitos administradores de hoje que acham que o termo bug é algum desenho do Walt Disney. O bug, ou falha, surge a partir do momento que o programador comete um erro. Ou seja, indiretamente é um erro humano que gera a falha nos programas. Por serem pequenos erros e não aqueles cabeludos que fazem o compilador até rir do programador, muitas vezes passam despercebidos e só são descobertos por algum hacker ou analista de segurança. Os erros do Windows, por exemplo. A grande maioria das falhas descobertas são os próprios usuários que descobrem. Os criadores que têm o código fonte e conhecem o programa como a palma da mão raríssimas vezes percebem algum erro. Para ser mais seguro, um programa têm que ser testado de todas as maneiras possíveis. Algo que nem sempre é feito Exemplos de falhas Algumas falhas são tão bobas que é difícil de acreditar. Geralmente, no sistema Windows, que de longe é o que possui mais falhas. O Windows 98 possui muitos erros, mas três são interessantes. O primeiro é que não consegue executar nem abrir nenhum link com a url c:\con\con. Se você tentar ir em iniciar e executar, o

33 33 sistema travará e mostrará a famosa tela azul. Os outros dois são do netbios. O primeiro possibilita que você acesse o diretório system do Windows por um compartilhamento de impressora. É só mapear o compartilhamento padrão printer$. O último possibilita que se descubra a senha do netbios sabendo apenas o primeiro caractere. Por exemplo: coloca-se no disco C compartilhado a senha herodes. Se alguém tentar o primeiro h já consegue acesso à rede. O Windows 2000 também possui algumas falhas, como deixar o netbios ativo em sua instalação. Saindo um pouco dos sistemas operacionais, alguns programas também possuem falhas graves, segundo Assunção, M. F. A. (2001). Erros de Active X possibilitam que ao visitar um site, o Internet Explorer instale um programa no seu computador e o execute sem ser percebido. Outro erro está no anexo de . Erros no Outlook fazem com que só de receber os s, os anexos sejam executados automaticamente. O Internet Information Server, servidor de homepages da Microsoft, possui erros graves. Unicode, RDS, existem muitos. O mais recente é uma falha no printer.isapi, fazendo com que se consiga acesso ao Windows 2000 pelo IIS 5.0. O sistema Unix possui muitas falhas também, como no sendmail e no Apache Buffer overflows O buffer overflow é um ataque usado há muito tempo e que ainda será muito usado. Compreende em lotar os buffers (memória disponível para aplicativos) de um servidor e incluir na sua lista de processos algum programa tal como um keylogger ou um trojan. Todos os sistemas são vulneráveis a buffer overflows e a solução é a mesma, procurar se já existem correções existentes. Novos erros desse tipo surgem todo dia, até o XP já têm alguns. A atualização do software deve ser contínua. Segundo Assunção, M. F. A. (2001), um dos usos famosos do buffer overflow é o telnet reverso. Ele consiste em fazer a máquina alvo conectar-se a um servidor no computador do cracker, fornecendo-lhe um shell (prompt) de comando. O netcat, chamado de canivete suíço do TCP/IP, é uma espécie de super-telnet, pois

34 34 realiza conexões por UDP, serve como servidor, entre outras tarefas. Ele é o mais utilizado para a realização do telnet reverso, e pode ser usado tanto na arquitetura NT quanto no Unix. A versão para Windows está disponível em ftp.technotronic.com. A exploração de código vulnerável a buffer overflow exige alguma habilidade. Entretanto, o conhecimento necessário para tal tarefa pode ser facilmente adquirido pelo material difundido na rede e experimentação exaustiva. A tarefa de codificar software seguro é difícil, mas deve ser tomada com máxima seriedade. Principalmente quando se está desenvolvendo software de segurança ou projetado para ser executado com privilégios de super-usuário ou usuário especial do sistema. Chega a impressionar o número de vulnerabilidades a buffer overflow encontradas em software de utilização ampla, dada a simplicidade das técnicas em evitá-las Race condition O Race condition ou condição de corrida é mais comum no Unix e no Linux. Consiste em fazer algum programa que rode como root (super-usuário) executar alguma falha que possa lhe enviar para o shell do sistema. O programa que mais teve problemas de race condition até hoje é o sendmail, serviço de padrão do Unix. É possível encontrar falhas até em versões mais recentes Descobrindo se algum sistema tem falhas Segundo Assunção, M. F. A. (2001), para o programador experiente é mais fácil verificar se um sistema tem falhas, utilizando de recursos de debug que checam por erros de buffer overflow e outros. Para o usuário é bem mais difícil descobrir algo, principalmente o usuário comum. O interessante seria visitar páginas especializadas no assunto, que a cada dia publicam novos tipos de erros descobertos.

35 35 Scanners de vulnerabilidade (ou falhas). Typhon (Só funciona em Windows NT/2000/XP): esse scanner é excelente pois é rápido e dá algumas informações muito boas sobre possíveis falhas e desconfigurações do sistema alvo. Não é muito completo, mas é o ideal para se usar antes do Stealth, que como veremos, é inigualável. Stealth: um dos melhores scanner de vulnerabilidades. É um programa de uma empresa brasileira, já ganhou destaque internacional pois consegue identificar cerca de falhas em sistemas. Poucos conseguem escapar ilesos a essa potente arma Utilizando exploits Exploits são programas criados para explorar falhas. O exemplo do printer.isapi do IIS 5.0 mencionado anteriormente, possui um exploit chamado iishack2000. Ele possibilita que somente digitando o IP de algum computador, seja possível conseguir acesso direto ao interpretador de comandos (ou shell). Permitindo fazer o que quiser com o sistema. Existe também o iishack (sem o 2000), que utiliza um erro de buffer overflow do IIS 4.0 para fazer com que o servidor execute qualquer tarefa (como um trojan). Cada exploit corresponde a uma falha, por isso geralmente os grandes sites de segurança publicam os dois juntos. Geralmente vêm em códigofonte C, Perl e alguns poucos em executáveis comuns, segundo Assunção, M. F. A. (2001) Instalando patches Os patches são atualizações de programas geradas pelos fabricantes. Toda vez que um erro for descoberto, deve-se visitar a página do fabricante do programa e baixar a correção. Conforme Assunção, M. F. A. (2001), isso não pode ser feito de mês em mês, e sim no máximo de três em três dias. Os erros aparecem muito rapidamente, e um sistema é composto de muitos softwares. Todos devem ser checados. É

36 36 interessante também assinar uma lista de discussão sobre segurança, assim toda vez que uma falha for descoberta, serão enviados s para alertar. A Microsoft (www.microsoft.com), a Securenet (www.securenet.com.br) e Security-focus (www.securityfocus.com) possuem algumas. O fato é que até mesmo com o código fonte às vezes pode ser difícil de distinguir código seguro inofensivo de vulnerabilidades de segurança perigosas.

37 37 5 TÉCNICAS DE ENGENHARIA REVERSA 5.1 TÉCNICAS DE ENGENHARIA REVERSA SEM O CÓDIGO-FONTE Segundo Anquetil, N. (2002), a engenharia reversa de software pode ser efetuada por vários métodos.três grupos principais da engenharia de software são: Análise de fluxo de dados: Análise através da observação da troca de informações que envolvem analisadores de bus e pacotes de sniffers, por exemplo, para "ouvir" dentro do bus de um computador ou uma conexão de rede, revelando o tráfico de dados "escondidos". O comportamento dos dados no bus ou na rede podem então ser analisados para produzir uma nova implementação do software que imita o mesmo comportamento. Isto é especialmente utilizado na engenharia reversa de drivers de dispositivos. Desassemblar: Usando um desassembler, conseguimos obter a linguagem de máquina diretamente do programa. Este código é lido e entendido nos seus próprios termos, apenas com a ajuda de mnemonics da linguagem de máquina. Isto funciona em qualquer programa de computador, mas pode levar um bom tempo, especialmente para alguém que não esteja acostumado ao código de máquina. Decompilação: Neste método utiliza-se um decompilador, um programa que tenta recriar o código-fonte em uma linguagem de alto nível, tendo disponível apenas o código de máquina.

38 TÉCNICAS DE ENGENHARIA REVERSA COM O CÓDIGO- FONTE Extração das Informações O primeiro trabalho que se deve fazer é coletar informações sobre o sistema a ser estudado. As atividades da engenharia reversa se fazem sobre essas informações extraídas, mais do que sobre o próprio sistema. As informações podem ser extraídas de várias fontes: o código fonte, a execução, os dados (por exemplo, em banco de dados), a documentação, ou outras fontes Código (análise estática) A primeira fonte, o código, é a mais usada. A análise do código é chamada também de análise estática (por oposição à análise dinâmica que é a execução do sistema). Ela permite extrair as informações mais básicas do sistema: Quais são os componentes básicos do sistema: arquivos, rotinas, tipos, variáveis, classes, etc.; Relações de definição conectam um componente com seu conteúdo (onde ele se encontra); Relações de referência conectam um componente com aqueles que o usam (se uma rotina A chamar uma outra rotina B. A depende de B porque uma modificação na definição de B pode ter conseqüências sobre a execução de A). Essas relações podem ser memorizadas como as relações de definição/referência. Na extração das informações, gravam-se apenas as informações que vem diretamente do código, mas depois outras podem ser deduzidas a partir dessas.

39 39 Ferramentas para fazer essa análise são chamadas de parser. O parsing é a primeira etapa da compilação do código fonte. Para fazer isso, é preciso conhecer a sintaxe da linguagem de programação usada. Dependendo das necessidades, pode-se usar parsers específicos que vão procurar só um tipo particular de informação. Por exemplo, num programa Pascal, pode-se extrair o nome de todas as funções definidas com um parser muito simples Trace de execução (análise dinâmica) A análise estática pode extrair muitas informações de um programa, mas nem todas. Por exemplo, qual parte de uma instrução IF é realmente usada pode depender dos dados com que o programa foi chamado. Para descobrir esse tipo de informação, precisamos da análise dinâmica, que consiste em executar o programa e monitorar os valores das variáveis, quais funções são chamadas, etc Dados Os bancos de dados podem ser usados como fonte de informação para ajudar na engenharia reversa de um sistema. Mas a engenharia reversa de dados é também um trabalho específico que pode ser feito independentemente de qualquer sistema que possa manipular esses dados. Por exemplo, querer converter um velho banco de dados de um mainframe para um banco de dados relacional e distribuído sobre vários PCs. Podem ser extraídos de um banco de dados: a estrutura, os dados, os relacionamentos e até os relatórios e as interfaces com o usuário.

40 Documentação Chama-se de documentação tudo o que não está usado pelo computador para fazer funcionar o sistema, mas se destina aos engenheiros que usam o código: relatórios, comentários no código, diagramas da análise ou do projeto, etc. Como ela se destina aos seres humanos, é difícil de ser analisada automaticamente. A abordagem mais usada é usar as palavras da documentação. Isso pode permitir extrair os conceitos importantes do domínio de aplicação do sistema. Esta abordagem está baseada sobre a suposição que os conceitos importantes aparecem com mais freqüência na documentação Outras fontes de informação Finalmente, é possível usar outras fontes de informação. Por exemplo, para definir sub-sistemas, poderíamos procurar quem escreveu cada porção do código. É razoável pensar que se duas partes do código foram desenvolvidas pela mesma pessoa elas tem maior probabilidade de pertencer ao mesmo sub-sistema. Outras informações seriam: quais programas são chamados, em que linguagem são escritos, tipo de máquina que roda os programas Tratamento das informações Essas são algumas das principais atividades envolvidas na engenharia reversa. Essas atividades usam as informações que foram extraídas do sistema. Podemos resumir o objetivo geral dessas atividades da seguinte forma: elas tentam abstrair informações de mais alto nível de abstração das informações do sistema. O que quer dizer que elas vão eliminar os inumeráveis detalhes. O problema é decidir nessa massa de informações o que é importante ou não, segundo Anquetil, N. (2002).

41 Anomalias no código Num software legado, o código pode conter várias anomalias, como partes do programa que nunca podem ser executadas (código morto) e trechos de código que foram copiados e levemente modificados, denominados clones. Essas anomalias complicam o código inutilmente, fazendo ele mais longo do que deveria ser e multiplicando as coisas que um programador tem que estudar e entender. Para resolver esse problema pode-se apagar o código morto, e no caso dos clones é possível modificar o código para suprimi-los ou então fazer comentários no código sobre a existência de clones Encapsulamento O encapsulamento é uma técnica de re-engenharia mais do que de engenharia reversa. Em vez de reestruturar um sistema, ela propõe esconder o velho código dentro de uma nova camada Slicing Slicing (fatiar) é uma técnica de decomposição do código de acordo com a utilização das variáveis. O slicing de uma parte do código consiste em extrair dela todas as instruções que têm uma influência sobre o valor de uma variável definida a um ponto definido do código. Ajuda na descoberta da origem dos bugs, limitando a pesquisa nas únicas instruções realmente necessárias (Re-)Modularização

42 42 A (re-)modularização é a decomposição de um conjunto de componentes de software em sub-partes (os módulos). Em engenharia de software, normalmente, se espera que os módulos tenham uma forte coesão interna e um pequeno acoplamento com o exterior. Essa atividade de agrupar arquivos em sub-sistema não é trivial. Um sistema legado pode ser composto de milhares de arquivos, em várias linguagens de programação (por exemplo: uma linguagem procedural, assembly, dados e alguns scripts para compilações e execuções). Para agrupar os componentes são utilizados algoritmos que medem as distâncias entre os componentes com base em informações extraídas do sistema. Existem muitos algoritmos de agrupamento (clustering) diferentes. Os mais típicos são: Algoritmo por construção: são os mais rápidos porque trabalham num passe único. Os componentes são introduzidos um depois do outro. Agrupando um novo componente com um módulo existente. Algoritmos por otimização: começam com uma partição do conjunto de componentes e tentam melhorar esta partição usando heurísticas para medir a qualidade desta. Algoritmos hierárquicos: constroem uma hierarquia de módulos e não necessitam de informações do usuário. Segundo Anquetil, N. (2002), os algoritmos apresentam dois problemas principais: O resultado pode ser difícil de entender; Eles agrupam todos os componentes segundo algumas restrições. Se as restrições forem erradas, o resultado também será. O resultado desta técnica é globalmente bom. Mas sempre há detalhes errados em alguns módulos. Esses algoritmos são bons quando existem muitos componentes para tratar e como uma primeira abordagem para desbravar o sistema.

43 Reconhecimento de Clichés Um clichê ou plano é um padrão que descreve uma maneira geral de implementar um conceito de programação. A atividade de reconhecimento de clichês trabalha com um banco de clichês e procura esses clichês no código. A idéia é que um clichê é implementado com várias linhas de código. Reconhecer um clichê pode simplificar o código porque isso vai substituir um só conceito a essas linhas. O reconhecimento de clichê sofre de várias dificuldades: Construção do banco de clichês; Dualidade, precisão e cobertura (a descrição do clichê deve ser geral, porém corre-se o risco de ocorrerem falso-positivos); Tempo de execução; Clichês deslocalizados ou interligados (podem existir outras instruções entre as que implementam o clichê ou dois clichês cujas instruções estão misturadas). 5.3 TÉCNICAS COMPLEXAS DE ENGENHARIA REVERSA Análise de propagação Utilizada em manutenção de software, consiste no estudo do código para descobrir as conseqüências de uma modificação Objetização

44 44 Consiste na extração da representação orientada a objetos de um código procedural. Baseia-se: nas funcionalidades: isolar uma funcionalidade do código e construir um objeto para encapsulá-la; nos dados: procurar tipos estruturados que representem conceitos da aplicação. Agrupam-nos com as rotinas para formar classes. e os objetos: fazer uma análise orientada a objetos do domínio do software para descobrir os objetos pertencentes Reengenharia de interfaces Seu objetivo é disponibilizar uma nova interface ou reorganizar a existente para facilitar a utilização de funcionalidades já existentes. Possui duas atividades: identificação das informações envolvidas na execução de uma tarefa e a identificação da sequência de mensagens necessária para cumpri-la. 5.4 ENGENHARIA REVERSA PARA SEGURANÇA Para algumas pessoas a conexão entre segurança e engenharia reversa pode não ser tão clara. A engenharia reversa está relacionada a vários aspectos diferentes na segurança de computador. Por exemplo, engenharia reversa foi empregada em pesquisa de encriptação, o investigador inverte um produto encriptado e avalia o nível de segurança deste. Também é usada com relação a software malicioso, em ambos os casos: pelo desenvolvedor de malware e os que desenvolvem seus antídotos Software malicioso Segundo Eilam, E. (2005), a Internet mudou completamente a indústria de computador e o aspectos de segurança de informação em particular. Software

45 45 malicioso, tal como vírus e worms, espalham mais rápido em um mundo onde milhões de usuários estão conectados diariamente à Internet. Há 10 anos, um vírus normalmente teria que se copiar a um disquete e ser carregado em outro computador para que o vírus se espalhasse. O processo de infecção era bastante lento e a defesa era muito mais simples porque os canais de infecção eram poucos e exigia a intervenção humana para espalhar. Isso é história antiga, a Internet criou uma conexão virtual em quase todos os computadores da terra. Hoje em dia, vírus modernos podem se espalhar automaticamente a milhões de computadores sem qualquer intervenção humana. A engenharia reversa é extensivamente usada em ambos os fins da cadeia de software maliciosa. O desenvolvedor de software malicioso usa freqüentemente a reversão para localizar vulnerabilidades em sistemas operacionais e outros softwares. Tais vulnerabilidades podem ser usadas para penetrar a defesa do sistema, estendendo a infecção, normalmente através da Internet. Além da infecção, às vezes eles empregam técnicas de engenharia reversa para localizar vulnerabilidades de software que permitem que um programa malicioso ganhe acesso à informação sensível ou até mesmo tome o controle total do sistema. O outro lado da cadeia diz respeito ao desenvolvedor de software antivírus, pois permite a análise de todo programa malicioso que se tem contato. Eles usam técnicas reversas para localizar os passos que o programa leva e avalia o dano que possa causar ou a taxa esperada de infecção, como poderia ser removido de sistemas infetados e se a infecção pode ser evitada completamente Métodos de proteção Alguns cuidados precisam ser levados em consideração para garantir a segurança de um sistema. As boas práticas de programação, mesmo sem se considerar a segurança em si, garantem um código mais robusto, confiável e, conseqüentemente, seguro, segundo Albuquerque (2002). Código seguro não significa necessariamente segurança em código ou código que implemente alguma função para segurança,

46 46 mas código que é escrito para suportar os atacantes maliciosos. O código seguro é também código robusto, Howard (2002). Albuquerque et al. (2002) considera que o código seguro muita vezes implica em certa perda de desempenho. Entretanto, ressalva que a perda de performance pode ser compensada por um hardware mais rápido, o contrário, porém, não é verdadeiro. A perda de performance pode ser compreendida por sugestões como as de Viega et al. (2003): assuma que toda entrada de dados é culpada até que se prove o contrário ou quanto mais você compreende o dado, mais facilmente você o filtrará. Torres (2003) também é cauteloso ao tratar as entradas de dados, especialmente em uma arquitetura cliente-servidor e, sobretudo, nas solicitações provenientes de ambientes inseguros ou pouco controlado como é o caso da Internet. Existem três fatos a serem considerados no desenvolvimento de software mais seguro: processo repetível, educação e métrica, segundo Lipner (2004). Segundo Lipner et al., é importante que se tenha na organização um grupo responsável pelo desenvolvimento e evolução das melhores práticas de segurança; melhorias no processo, que sirva de fonte de conhecimento para a organização de uma forma geral e que faça a Revisão Final de Segurança (em inglês FSR Final Security Review) antes da liberação da release. Enquanto muitas organizações preferem ter uma equipe central de segurança, outras optam por contratar terceiros, a experiência demonstrou na visão de Lipner et al. que a existência de um grupo interno de segurança é um fator vital para o sucesso na implementação de um ciclo de vida de desenvolvimento. A experiência com segurança de software tem demonstrado que um conjunto de princípios de alto nível para desenvolver software mais seguro precisam ser estabelecidos. A Microsoft refere-se a esses princípios como SD3+C Seguro por Design, Seguro por Default, Seguro na Distribuição e Comunicação. Uma descrição sucinta desses princípios seria: Seguro por Design: Uma arquitetura pode ser desenhada para utilizar criptografia 3DES (triplo DES) para dados sensíveis antes de serem armazenados no banco de dados e o uso do protocolo SSL para transportar o

47 47 dado através da Internet. Todo código é bastante verificado em busca de vulnerabilidades comuns usando ferramentas manuais e automáticas. A modelagem de ameaças é criada durante o processo de design do software. Seguro por Default: O software é empacotado com medidas de segurança e os componentes potencialmente vulneráveis são desativados. Seguro na Distribuição: Atualizações de segurança são fáceis de serem localizadas e instaladas eventualmente são instaladas automaticamente e ferramentas são disponibilizadas para o levantamento e gerenciamento dos riscos de segurança em toda a organização. Comunicação os desenvolvedores precisam estar preparados para descobrir vulnerabilidades nos produtos e comunicar aberta e responsavelmente os usuários finais e/ou administradores para ajudá-los a tomarem as ações preventivas necessárias Criptografia Soares et al. (1995) comenta que "a criptografia surgiu da necessidade de se enviar informações sensíveis através de meios de comunicação não confiáveis, ou seja, em meios onde não é possível garantir que um intruso não irá interceptar o fluxo de dados para leitura (intruso passivo) ou para modificá-lo (intruso ativo). A forma de contornar esse problema é utilizar um método que modifique o texto original da mensagem a ser transmitida (texto normal), gerando texto criptografado na origem, através de um processo de codificação definido por um método de criptografia. O texto (ou a mensagem) criptografado é então transmitido e, no destino, o processo inverso ocorre, isto é, o método de criptografia é aplicado agora para decodificar o texto criptografado transformando-o no texto normal original". "Existem basicamente dois tipos de criptografia: a simétrica e a assimétrica" Albuquerque (2002). Júlio César empregava um método de criptografia que consistia em substituir as letras de uma mensagem pela terceira letra após sua posição no alfabeto (sendo a sucessor de z) Tanenbaum (1989). Esse é um exemplo de criptografia simétrica ou baseada em chave secreta, pois a mesma chave será

48 48 usada para cifrar e decifrar a mensagem. O problema clássico dessa solução é a dificuldade de entregar a chave de forma segura a quem vai decifrar a mensagem, segundo Rufino (2002). Existem diversos algoritmos conhecidos de criptografia simétrica, como DES, IDEA, TRIPLE-DES e BlowFish, conforme Albuquerque (2002). O algoritmo DES codifica blocos de 64 bits de texto normal gerando 64 bits de texto criptografado, diz Tanenbaum (1989). O conceito de chaves assimétricas é baseado na idéia que o momento de maior vulnerabilidade da chave é quando ela está em trânsito, Rufino (2002), Disnei (2002). Em 1976, Diffie e Hellman (1976) propuseram um método que revolucionou os sistemas de criptografia. Baseado na utilização de chaves distintas: uma para codificação (E) e outra para decodificação (D), tal que a derivação de D a partir de E fosse, em termos práticos, senão impossível, pelo menos muito difícil de ser realizada. Portanto, o que uma cifrasse somente a outra poderia revelar. Dessa maneira, uma poderia ser tornada pública e trafegar sem necessidade de canais seguros, desde que a outra, privada, permanecesse em local seguro, conforme Rufino (2002) e Soares (1995). Entre os algoritmos de criptografia assimétrica ou de chave pública de uso prático, os mais comuns são o RSA e as Curvas Elípticas. O RSA, cujo nome deriva das inicias dos autores Rivest, Shamir e Adleman (1978), baseia-se na dificuldade de fatorar números muito grandes. Acreditava-se em 1977 que uma mensagem criptografada pelo RSA-129 levaria milhões de anos para ser quebrada Gardner (1977). Foi quebrada em 1994 usando computação distribuída Leutwyler (1994), Lima (2002) Privacidade Albuquerque et al. (2002) explica que: [...] privacidade é a capacidade de um usuário realizar ações em um sistema sem que seja identificado. É completamente diferente de confidencialidade, que define que apenas usuários autorizados podem ter acesso à determinada informação.

49 49 Um exemplo de sistema que emprega privacidade como atributo essencial é o usado pelo processo eleitoral brasileiro, no qual não pode haver forma de ligação entre o eleitor e seu voto. O Common Criteria for Information Technology Security Evaluation (Critério Comum para Avaliação de Segurança da Tecnologia da Informação) é o nome do padrão que originou a norma ISO/IEC 15408, muitas vezes chamada apenas de Common Criteria, conforme ISO JTC 1/SC (1999). A norma objetiva fornecer um conjunto de critérios fixos que permitem especificar a segurança de uma aplicação de forma não ambígua a partir de características do ambiente da aplicação e definir formas de garantir a segurança da aplicação para o cliente final. As formas de privacidades destacadas pelo Common Criteria são: Anonimato - garante que um usuário possa usar um recurso ou serviço sem ter sua identidade revelada. Pseudônimo - garante que um usuário possa usar um recurso ou serviço sem ter sua identidade revelada, porém suas ações são rastreadas e reveladas, geralmente, em situações especiais. Portanto, permite a responsabilização e privacidade ao mesmo tempo. Se usado com não-rastreamento, para cada ato deve ser usado um pseudônimo diferente. Não-rastreamento - garante que um usuário possa fazer uso de vários recursos e serviços sem que outros possam ligá-lo a esses usos. Invisibilidade - garante que um usuário possa usar um recurso ou serviço sem que outros, principalmente terceiros, possam saber que o recurso ou serviços está sendo usado Técnicas Anti-reversão Algumas aplicações têm uma necessidade especial por medidas de anti-reversão. Um excelente exemplo é a tecnologia de proteção de cópia e a administração de tecnologia de propriedade digital. Prevenir ou obstruir a quebra de tecnologias de proteção é um passo crucial de criar meios efetivos de proteção.

50 50 Segundo Eilam, E. (2005), algumas plataformas de desenvolvimento de software realmente necessitam de medidas anti-reversão, porque caso contrário o programa pode ser mesmo facilmente convertido numa representação próxima do código fonte. Isto é verdade para a maioria das plataformas baseadas em bytecode como a Java e.net, e é a razão de possuírem tantas obstruções de código para tais plataformas (entretanto também é possível programas de obstrução que foram compilados num processador de idioma nativo da máquina). Um bloqueador é uma ferramenta automatizada que reduz a legibilidade de um programa modificando ou eliminando certa informação. Existem várias formas de evitar a engenharia de software, cada uma com sua vantagem e desvantagem. Pode-se utilizar uma ou várias formas combinadas Eliminação de Informação Simbólica O primeiro passo e mais óbvio em impedir a reversão é eliminar qualquer informação textual óbvia do programa. Em um programa compilado baseado em bytecode regular, isto simplesmente tira toda a informação simbólica do programa executável. Segundo Eilam, E. (2005), em programas baseados em bytecode, os executáveis contêm freqüentemente grandes quantias de informação simbólica interna como nomes de classe, nomes de objetos globais, etc. Isto é comum em linguagens como Java e plataformas como.net. Esta informação pode ser extremamente útil na engenharia reversa, por isto deve ser eliminada de programas onde a reversão é uma preocupação. Outra característica fundamental de quase todo ofuscador de bytecode é renomear todos os símbolos em sucessões sem sentido de caracteres Encriptação de código de programa

51 51 É um método comum para prevenir a análise estática. É realizado codificando o programa em algum ponto depois da compilação (antes de ser entregue ao cliente) e embutindo algum tipo de desencriptação codificada dentro do executável. Infelizmente, esta alternativa normalmente cria nada mais que uma inconveniência para o analista hábil, porque na maioria dos casos tudo que o desencriptador requer está no arquivo executável Ofuscação de Programa É um nome genérico para várias técnicas que são apontadas em reduzir a vulnerabilidade do programa a qualquer tipo de análise estática como o processo de engenharia reversa manual. Isto é realizado modificando o plano do programa, lógica, dados e organização, de certo modo isso mantém a funcionalidade idêntica, porém menos legível. Há muitas formas diferentes de obstrução, segundo Eilam, E. (2005) Transformação de dados É uma técnica de ofuscação que focaliza a estrutura de dados do programa. Pois entender a estrutura de dados permite conhecer como ele trabalha Embutir código antidebugger É outra técnica comum de impedir a análise por programas de depuração para determinar detalhes. A idéia é intencionalmente executar operações que danificariam de alguma maneira ou incapacitariam um depurador de obter informações sobre o sistema. Algumas destas ações simplesmente envolvem a descoberta do depurador presente e encerrar o programa, enquanto outros envolvem meios mais sofisticados de interferir com depuradores no caso de um

52 52 usuário presente. Existem vários programas anti-depuração e muitos deles são específicos para cada plataforma Mudança no fluxo de controle São transformações que alteram a ordem e o fluxo de um programa com a finalidade de reduzir a legibilidade humana. O controle nas transformações de fluxo são categorizadas como transformações de computação, transformações de agregação, e ordenação. As transformações de computação são as que reduzem a legibilidade do código, modificando a estrutura de fluxo de controle original do programa, de modo que traga um programa funcionalmente equivalente, porém mais difícil de traduzir em linguagem de alto-nível. Isto pode ser feito removendo o controle da informação do fluxo do programa ou somando ao fluxo de controle novas declarações que complicam o programa e não podem ser traduzidas facilmente em linguagem de alto-nível. Transformações de agregação destroem a estrutura de alto-nível do programa quebrando as abstrações de alto-nível criadas pelo programador enquanto o programa estava sendo escrito. A idéia básica é quebrar tais abstrações assim que a organização de alto-nível do código ficar ilegível. Transformações de ordenação são transformações menos poderosas, pois reordenam a ordem das operações em um programa de forma que sua legibilidade seja reduzida.

53 53 6 FERRAMENTAS DE ENGENHARIA REVERSA 6.1 IDA Pro Fig. 3 Software IDA Pro. IDA Pro (Interactive Disassembler) é um software avançado que tem como características: análise de código hostil, de vulnerabilidades, pesquisa e engenharia reversa. Possui multiprocessador, disassembler e depurador, funciona tanto em Windows quanto Linux. Suporta uma variedade de formatos de executáveis para diferentes processadores e sistemas operacionais. Ele também pode ser usado como um depurador PE para Windows, Mac OS X Mach-O, e Linux Executáveis ELF. Embora IDA desempenhe um elevado grau automático de análise de código, em certa medida, alavancando referências cruzadas entre código seções, o conhecimento dos parâmetros das chamadas API, e outras informações, é centrada no uso interativo. Um usuário terá início com uma lista gerada automaticamente da desmontagem e, em seguida, renomea, anota, ou adiciona informações à lista, até que se torne claro seu funcionamento, criando um modelo de engenharia reversa. Criado como uma aplicação shareware por Ilfak Guilfanov, foi mais tarde transformado em um produto comercial por DataRescue, uma empresa belga.

54 VB Decompiler Fig. 4 Sofware VB Decompiler. VB Decompiler - é um descompilador de programas (executáveis, DLL ou OCX) criados em Visual Basic 6.0. Os programas criados pelo Visual Basic 6.0 podem ser compilados nas opções P-Code ou Codigo Nativo. Como a opção P-Code monta comandos de alto nível, existe a real possibilidade de descompilar um executável até chegar ao código fonte (mas como regra, nome de variáveis, funções, etc. não serão descompilados). VB Decompiler restaura muitas instruções em P-Code e fornece a opção de inseri-las em um projeto do Visual Basic, criado automaticamente. O descompilador irá simplificar o problema do aprendizado da análise algorítmica e parcialmente resgatar o código fonte original. Se um programa foi compilado em Código Nativo, a restauração das instruções de máquina iniciais não pode ser garantida. Mas nesse caso, VB-Decompiler pode também ajudar na análise do programa. Ele contém um poderoso "Disassembler"

55 55 que suporta comandos no Pentium Pro incluindo MMX e SSE e permite desmontar qualquer função. O software VB-Decompiler possui também um analisador de código que procura todas as chamadas de função API. Outro recurso disponível é a "Referência de Strings", uma lista com todos os textos contidos no executável (após a descompilação). Em geral, VB-Decompiler pode ser bastante útil na análise de programa e especialmente recomendado para os casos de perda do código fonte ou restauração parcial do projeto. Para iniciar a descompilação você precisa selecionar um programa (executável EXE, DLL ou OCX) clicando em Open VB program no menu File. Selecione a pasta que contém o arquivo executável e abra-o. O software confirmará a descompilação. Pressione SIM (YES) para iniciar a descompilação ou NAO (NO) para fazê-lo mais tarde. Se for selecionado <<NAO>>, o nome do arquivo será adicionado na caixa de texto FileName e quando for preciso descompilá-lo basta clicar no botão Decompile (Descompilar). Se for necessário gerar o projeto para Visual Basic 6.0 para facilitar a análise, será preciso selecionar o menu File, "Save decompiled project" e selecionar a pasta que conterá o novo projeto (incluindo funções e módulos), exceto arquivos forms frx que salvam os ícones de programas, objetos de formulários, gráficos e outros dados binários que serão gerados automaticamente. Para os programadores em Visual Basic, é possível proteger o seu código da descompilação. Para isso, VB-Descompiler contém um "obfuscator" que pode deletar o nome de todas as funções, forms, módulos e objetos, incluindo diferentes tipos de assinaturas no arquivo executável (EXE). Isso fará com que a análise de descompilação seja muito complicada. Outros descompiladores não conseguirão descompilar. Para adicionar esta proteção a seus programas, abra o seu programa com o VB-Descompiler e em seguida clique em Tools -> Obfuscate. Este procedimento é rápido e seguro, sendo extremamente recomendado como medida preventiva de segurança.

56 Understand for Delphi Fig. 5 Software Understand for Delphi. Understand for Delphi é uma ferramenta que suporta todas as versões da linguagem Delphi e de Turbo Pascal da Borland. Também suporta a ISO 7185: 1990 (também conhecida como Unextended Pascal) com as extensões DEC Pascal. Também pode habilitar suporte para Ingres embedded SQL statements. O projeto do banco de dados é armazenado num formato binário proprietário. Este formato de arquivo utiliza o formato rede/objeto para otimizar seu desempenho. Understand for Delphi analisa seu software e cria um banco de dados que contém informação sobre as entidades e suas relações. O banco de dados permite várias janelas para facilitar sua utilização. Estas são divididas em quatro tipos:

57 57 Informação: mostra tudo sobre uma determinada entidade. Hierarquia: mostra o relacionamento entre as entidades. Cada janela demonstra um relacionamento (por exemplo, "chamadas") da entidade entre pais e filhos. Estrutura: mostra a estrutura de qualquer entidade que é adicionada à estrutura do software (por exemplo, um pacote, função, procedimento, tarefa) Espetáculo: mostra a origem de um determinado link. Possibilitando descobrir como a informação no código de fonte está relacionada ou ligada a outra informação. 6.4 MÉTODO FUSION-RE/I Fig. 6 Visão geral do método FUSION-RE/I. Masiero, P. C. (1995).

58 58 O método de engenharia reversa Fusion-RE/1 (Fusion-Reverse Engineering / Interface) desenvolvido no ICMC-USP, baseia-se nos conceitos e idéias de engenharia reversa orientada a objetos, e fornece mecanismos para abstrair visões funcionais (modelos de análise de sistemas de acordo com o método Fusion de Coleman e outros (1996)) e visões estruturais partindo, inicialmente, dos aspectos operacionais e de dados disponíveis na interface usuário-computador. O método FUSION-RE/I é constituído de duas etapas: 1ª. Etapa recuperar visões funcionais: parte-se de considerações lógicas, obtidas por meio de aspectos operacionais e visões de dados disponíveis via interface, para a recuperação de visões funcionais do sistema, ou seja, a abstração da funcionalidade do sistema, representada por meio dos modelos de ciclo de vida, de operações e de objetos do sistema. 2ª. Etapa recuperar visões estruturais: parte-se de considerações físicas, obtidas por meio do código-fonte, e das visões funcionais, para a recuperação de visões estruturais do sistema, ou seja, a identificação dos procedimentos que implementam as operações da interface do sistema, representados através dos quadros de chamadas de procedimentos e de operações-procedimentos de implementação. Fig. 7 - Síntese do método de Engenharia Reversa FUSION-RE/I.

Engenharia Reversa. UFF Universidade Federal Fluminense. Graduação em Ciência da Computação. Informática I 2005/2

Engenharia Reversa. UFF Universidade Federal Fluminense. Graduação em Ciência da Computação. Informática I 2005/2 Engenharia Reversa UFF Universidade Federal Fluminense Graduação em Ciência da Computação Informática I 2005/2 Antonio Jorge Sapage da Canhota Junior Diego Alves de Souza Diogo dos Santos Moutinho Felipe

Leia mais

3. ( ) Para evitar a contaminação de um arquivo por vírus, é suficiente salvá-lo com a opção de compactação.

3. ( ) Para evitar a contaminação de um arquivo por vírus, é suficiente salvá-lo com a opção de compactação. 1. Com relação a segurança da informação, assinale a opção correta. a) O princípio da privacidade diz respeito à garantia de que um agente não consiga negar falsamente um ato ou documento de sua autoria.

Leia mais

Sistemas de Informação Processamento de Dados

Sistemas de Informação Processamento de Dados Sistemas de Informação Processamento de Dados Ferramentas e serviços de acesso remoto VNC Virtual Network Computing (ou somente VNC) é um protocolo desenhado para possibilitar interfaces gráficas remotas.

Leia mais

Softwares de Sistemas e de Aplicação

Softwares de Sistemas e de Aplicação Fundamentos dos Sistemas de Informação Softwares de Sistemas e de Aplicação Profª. Esp. Milena Resende - milenaresende@fimes.edu.br Visão Geral de Software O que é um software? Qual a função do software?

Leia mais

AFRE. a. ( ) Instalando um programa gerenciador de carregamento, como o LILO ou o GRUB. a. ( ) Data Werehouse ; Internet ; Linux

AFRE. a. ( ) Instalando um programa gerenciador de carregamento, como o LILO ou o GRUB. a. ( ) Data Werehouse ; Internet ; Linux 1. De que forma é possível alterar a ordem dos dispositivos nos quais o computador procura, ao ser ligado, pelo sistema operacional para ser carregado? a. ( ) Instalando um programa gerenciador de carregamento,

Leia mais

TECNOLOGIA WEB. Segurança na Internet Aula 4. Profa. Rosemary Melo

TECNOLOGIA WEB. Segurança na Internet Aula 4. Profa. Rosemary Melo TECNOLOGIA WEB Segurança na Internet Aula 4 Profa. Rosemary Melo Segurança na Internet A evolução da internet veio acompanhada de problemas de relacionados a segurança. Exemplo de alguns casos de falta

Leia mais

Março/2005 Prof. João Bosco M. Sobral

Março/2005 Prof. João Bosco M. Sobral Plano de Ensino Introdução à Segurança da Informação Princípios de Criptografia Segurança de Redes Segurança de Sistemas Símbolos: S 1, S 2,..., S n Um símbolo é um sinal (algo que tem um caráter indicador)

Leia mais

Segurança da Informação Prof. Jeferson Cordini jmcordini@hotmail.com

Segurança da Informação Prof. Jeferson Cordini jmcordini@hotmail.com Segurança da Informação Prof. Jeferson Cordini jmcordini@hotmail.com Segurança da Informação Segurança da Informação está relacionada com proteção de um conjunto de dados, no sentido de preservar o valor

Leia mais

Introdução à Programação de Computadores

Introdução à Programação de Computadores 1. Objetivos Introdução à Programação de Computadores Nesta seção, vamos discutir os componentes básicos de um computador, tanto em relação a hardware como a software. Também veremos uma pequena introdução

Leia mais

Segurança Internet. Fernando Albuquerque. fernando@cic.unb.br www.cic.unb.br/docentes/fernando (061) 273-3589

Segurança Internet. Fernando Albuquerque. fernando@cic.unb.br www.cic.unb.br/docentes/fernando (061) 273-3589 Segurança Internet Fernando Albuquerque fernando@cic.unb.br www.cic.unb.br/docentes/fernando (061) 273-3589 Tópicos Introdução Autenticação Controle da configuração Registro dos acessos Firewalls Backups

Leia mais

16/09/2012. Agenda. Introdução. Introdução. Tipos de Software (Básico) Tipos de Software. Curso Conexão Noções de Informática

16/09/2012. Agenda. Introdução. Introdução. Tipos de Software (Básico) Tipos de Software. Curso Conexão Noções de Informática Curso Conexão Noções de Informática Aula 2 Arquitetura de Computadores (Software) Agenda Introdução; Tipos de Software; Básico; Aplicativo; Livre; Proprietário. Pirataria de Software; Demos, Freewares

Leia mais

Sistemas Operacionais

Sistemas Operacionais UNIVERSIDADE BANDEIRANTE DE SÃO PAULO INSTITUTO POLITÉCNICO CURSO DE SISTEMAS DE INFORMAÇÃO Sistemas Operacionais Notas de Aulas: Tópicos 7 e 8 Estrutura do Sistema Operacional São Paulo 2009 1 Sumário

Leia mais

SISTEMAS OPERACIONAIS. Apostila 03 Estrutura do Sistema Operacional UNIBAN

SISTEMAS OPERACIONAIS. Apostila 03 Estrutura do Sistema Operacional UNIBAN SISTEMAS OPERACIONAIS Apostila 03 Estrutura do Sistema Operacional UNIBAN 1.0 O Sistema Operacional como uma Máquina Virtual A arquitetura (conjunto de instruções, organização de memória, E/S e estrutura

Leia mais

SISTEMAS OPERACIONAIS. 01) Considere as seguintes assertivas sobre conceitos de sistemas operacionais:

SISTEMAS OPERACIONAIS. 01) Considere as seguintes assertivas sobre conceitos de sistemas operacionais: SISTEMAS OPERACIONAIS 01) Considere as seguintes assertivas sobre conceitos de sistemas operacionais: I. De forma geral, os sistemas operacionais fornecem certos conceitos e abstrações básicos, como processos,

Leia mais

Malwares. Algumas das diversas formas como os códigos maliciosos podem infectar ou comprometer um computador são:

Malwares. Algumas das diversas formas como os códigos maliciosos podem infectar ou comprometer um computador são: Malwares Códigos Maliciosos - Malware Códigos maliciosos (malware) são programas especificamente desenvolvidos para executar ações danosas e atividades maliciosas em um computador. Algumas das diversas

Leia mais

Curso Técnico de Nível Médio

Curso Técnico de Nível Médio Curso Técnico de Nível Médio Disciplina: Informática Básica 3. Software Prof. Ronaldo Software Formado por um conjunto de instruções (algoritmos) e suas representações para o

Leia mais

Evitar cliques em emails desconhecidos; Evitar cliques em links desconhecidos; Manter um Firewall atualizado e ativado; Adquirir um Antivírus de uma

Evitar cliques em emails desconhecidos; Evitar cliques em links desconhecidos; Manter um Firewall atualizado e ativado; Adquirir um Antivírus de uma Evitar cliques em emails desconhecidos; Evitar cliques em links desconhecidos; Manter um Firewall atualizado e ativado; Adquirir um Antivírus de uma loja específica Manter um Antivírus atualizado; Evitar

Leia mais

Planejando uma política de segurança da informação

Planejando uma política de segurança da informação Planejando uma política de segurança da informação Para que se possa planejar uma política de segurança da informação em uma empresa é necessário levantar os Riscos, as Ameaças e as Vulnerabilidades de

Leia mais

SEGURANÇA DA INFORMAÇÃO. Aguinaldo Fernandes Rosa

SEGURANÇA DA INFORMAÇÃO. Aguinaldo Fernandes Rosa SEGURANÇA DA INFORMAÇÃO DICAS Aguinaldo Fernandes Rosa Especialista em Segurança da Informação Segurança da Informação Um computador (ou sistema computacional) é dito seguro se este atende a três requisitos

Leia mais

Sistemas Operacionais Cap 3 Estruturas de Sistemas Operacionais. Podemos analisar um sistema operacional sob diversos aspectos:

Sistemas Operacionais Cap 3 Estruturas de Sistemas Operacionais. Podemos analisar um sistema operacional sob diversos aspectos: Estruturas de Sistemas Operacionais Podemos analisar um sistema operacional sob diversos aspectos: Os serviços que o sistema operacional oferece. A interface que o sistema operacional torna disponível

Leia mais

São programas de computador com a função de interagir a maquina com o usuário. Licenciados Livres - Gratuitos ou uso limitados 18/10/2010 1

São programas de computador com a função de interagir a maquina com o usuário. Licenciados Livres - Gratuitos ou uso limitados 18/10/2010 1 Softwares São programas de computador com a função de interagir a maquina com o usuário Tipos : Licenciados Livres - Gratuitos ou uso limitados 18/10/2010 1 Licenciados São software autorizados, cedidos

Leia mais

Processos (Threads,Virtualização e Migração de Código)

Processos (Threads,Virtualização e Migração de Código) Processos (Threads,Virtualização e Migração de Código) Roteiro Processos Threads Virtualização Migração de Código O que é um processo?! Processos são programas em execução. Processo Processo Processo tem

Leia mais

Desenvolvimento e disponibilização de Conteúdos para a Internet

Desenvolvimento e disponibilização de Conteúdos para a Internet Desenvolvimento e disponibilização de Conteúdos para a Internet Por Matheus Orion Principais tecnologias front-end HTML CSS JAVASCRIPT AJAX JQUERY FLASH JAVA APPLET Linguagens que executam no cliente HTML

Leia mais

Davidson Rodrigo Boccardo flitzdavidson@gmail.com

Davidson Rodrigo Boccardo flitzdavidson@gmail.com Segurança em Sistemas de Computação Davidson Rodrigo Boccardo flitzdavidson@gmail.com Segurança Segurança deve considerar o ambiente externo do sistema, e proteger de: Acesso não autorizado Alteração ou

Leia mais

PROJETO INTEGRADOR LUIZ DAVI DOS SANTOS SOUZA

PROJETO INTEGRADOR LUIZ DAVI DOS SANTOS SOUZA PROJETO INTEGRADOR LUIZ DAVI DOS SANTOS SOUZA Os serviços IP's citados abaixo são suscetíveis de possíveis ataques, desde ataques passivos (como espionagem) até ataques ativos (como a impossibilidade de

Leia mais

Gerência de Redes Segurança

Gerência de Redes Segurança Gerência de Redes Segurança Cássio D. B. Pinheiro cdbpinheiro@ufpa.br cassio.orgfree.com Objetivos Apresentar o conceito e a importância da Política de Segurança no ambiente informatizado, apresentando

Leia mais

Tecnólogo em Análise e Desenvolvimento de Sistemas

Tecnólogo em Análise e Desenvolvimento de Sistemas Tecnólogo em Análise e Desenvolvimento de Sistemas O conteúdo deste documento tem como objetivos geral introduzir conceitos mínimos sobre sistemas operacionais e máquinas virtuais para posteriormente utilizar

Leia mais

OBJETIVO DA POLÍTICA DE SEGURANÇA

OBJETIVO DA POLÍTICA DE SEGURANÇA POLÍTICA DE SEGURANÇA DIGITAL Wagner de Oliveira OBJETIVO DA POLÍTICA DE SEGURANÇA Hoje em dia a informação é um item dos mais valiosos das grandes Empresas. Banco do Brasil Conscientizar da necessidade

Leia mais

SUMÁRIO 1. AULA 7 INTRODUÇÃO À REDES PONTO A PONTO = PARTE 1:... 2

SUMÁRIO 1. AULA 7 INTRODUÇÃO À REDES PONTO A PONTO = PARTE 1:... 2 SUMÁRIO 1. AULA 7 INTRODUÇÃO À REDES PONTO A PONTO = PARTE 1:... 2 1.1 Introdução... 2 1.2 Montando Redes Ponto-a-Ponto... 3 1.2.1 Parte lógica... 3 1.2.2 Escolhendo o sistema operacional... 3 1.2.3 Instalação

Leia mais

MALWARE. Spyware. Seguem algumas funcionalidades implementadas em spywares, que podem ter relação com o uso legítimo ou malicioso:

MALWARE. Spyware. Seguem algumas funcionalidades implementadas em spywares, que podem ter relação com o uso legítimo ou malicioso: MALWARE Spyware É o termo utilizado para se referir a uma grande categoria de software que tem o objetivo de monitorar atividades de um sistema e enviar as informações coletadas para terceiros. Seguem

Leia mais

Informática. Prof. Macêdo Firmino. O Mundo dos Softwares e Introdução aos Sistemas Operacionais

Informática. Prof. Macêdo Firmino. O Mundo dos Softwares e Introdução aos Sistemas Operacionais Informática Prof. Macêdo Firmino O Mundo dos Softwares e Introdução aos Sistemas Operacionais Macêdo Firmino (IFRN) Informática Março de 2012 1 / 26 Software O Hardware não consegue executar qualquer ação

Leia mais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais Notas da Aula 15 - Fundamentos de Sistemas Operacionais 1. Software de Entrada e Saída: Visão Geral Uma das tarefas do Sistema Operacional é simplificar o acesso aos dispositivos de hardware pelos processos

Leia mais

UFF Universidade Federal Fluminense. Graduação em Ciência da Computação. Informática I 2005/2

UFF Universidade Federal Fluminense. Graduação em Ciência da Computação. Informática I 2005/2 ENGENHARIA REVERSA UFF Universidade Federal Fluminense Graduação em Ciência da Computação Informática I 2005/2 Antonio Jorge Sapage da Canhota Junior Diego Alves de Souza Diogo dos Santos Moutinho Felipe

Leia mais

Firewall. Alunos: Hélio Cândido Andersson Sales

Firewall. Alunos: Hélio Cândido Andersson Sales Firewall Alunos: Hélio Cândido Andersson Sales O que é Firewall? Firewall pode ser definido como uma barreira de proteção, que controla o tráfego de dados entre seu computador e a Internet (ou entre a

Leia mais

6 - Gerência de Dispositivos

6 - Gerência de Dispositivos 1 6 - Gerência de Dispositivos 6.1 Introdução A gerência de dispositivos de entrada/saída é uma das principais e mais complexas funções do sistema operacional. Sua implementação é estruturada através de

Leia mais

- Aula 1 - ARQUITETURA DE COMPUTADORES

- Aula 1 - ARQUITETURA DE COMPUTADORES - Aula 1 - ARQUITETURA DE COMPUTADORES Em arquitetura de computadores serão estudados aspectos da estrutura e do funcionamento dos computadores. O objetivo é apresentar de forma clara e abrangente a natureza

Leia mais

3 Ataques e Intrusões

3 Ataques e Intrusões 3 Ataques e Intrusões Para se avaliar a eficácia e precisão de um sistema de detecção de intrusões é necessário testá-lo contra uma ampla amostra de ataques e intrusões reais. Parte integrante do projeto

Leia mais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais Arquitetura de Computadores Introdução aos Sistemas Operacionais O que é um Sistema Operacional? Programa que atua como um intermediário entre um usuário do computador ou um programa e o hardware. Os 4

Leia mais

SolarWinds Kiwi Syslog Server

SolarWinds Kiwi Syslog Server SolarWinds Kiwi Syslog Server Monitoramento de syslog fácil de usar e econômico O Kiwi Syslog Server oferece aos administradores de TI o software de gerenciamento mais econômico do setor. Fácil de instalar

Leia mais

ATIVIDADE 1. Redes Windows. 1.1 Histórico do SMB

ATIVIDADE 1. Redes Windows. 1.1 Histórico do SMB ATIVIDADE 1 Redes Windows Falar sobre Samba e redes mistas Windows / Linux, sem antes explicar o conceito básico de uma rede não parece correto e ao mesmo tempo, perder páginas e mais páginas explicando

Leia mais

1º Estudo Dirigido. Capítulo 1 Introdução aos Sistemas Operacionais

1º Estudo Dirigido. Capítulo 1 Introdução aos Sistemas Operacionais 1º Estudo Dirigido Capítulo 1 Introdução aos Sistemas Operacionais 1. Defina um sistema operacional de uma forma conceitual correta, através de suas palavras. R: Sistemas Operacionais são programas de

Leia mais

TEORIA GERAL DE SISTEMAS

TEORIA GERAL DE SISTEMAS TEORIA GERAL DE SISTEMAS Vulnerabilidade dos sistemas e uso indevido Vulnerabilidade do software Softwares comerciais contém falhas que criam vulnerabilidades na segurança Bugs escondidos (defeitos no

Leia mais

DoS: Negação de Serviço e formas de defesa

DoS: Negação de Serviço e formas de defesa DoS: Negação de Serviço e formas de defesa Viva o Linux Day RJ http://volcon.org/volday1/ Elgio Schlemer Ulbra Gravataí http://gravatai.ulbra.tche.br/~elgio 06 de Março de 2010 Introdução Problemas de

Leia mais

Organização e Arquitetura de Computadores I. de Computadores

Organização e Arquitetura de Computadores I. de Computadores Universidade Federal de Campina Grande Unidade Acadêmica de Sistemas e Computação Curso de Bacharelado em Ciência da Computação Organização e Arquitetura de Computadores I Organização Básica B de Computadores

Leia mais

BOAS PRÁTICAS DE SEGURANÇA EM TECNOLOGIA DA INFORMAÇÃO (TI)

BOAS PRÁTICAS DE SEGURANÇA EM TECNOLOGIA DA INFORMAÇÃO (TI) BOAS PRÁTICAS DE SEGURANÇA EM TECNOLOGIA DA INFORMAÇÃO (TI) André Gustavo Assessor Técnico de Informática MARÇO/2012 Sumário Contextualização Definições Princípios Básicos de Segurança da Informação Ameaças

Leia mais

Compartilhamento de recursos de forma a racionar e otimizar o uso de equipamentos e softwares. Servidores e Workstations. Segurança é um desafio, por

Compartilhamento de recursos de forma a racionar e otimizar o uso de equipamentos e softwares. Servidores e Workstations. Segurança é um desafio, por $XWDUTXLD(GXFDFLRQDOGR9DOHGR6mR)UDQFLVFR± $(96) )DFXOGDGHGH&LrQFLDV6RFLDLVH$SOLFDGDVGH3HWUROLQD± )$&$3( &XUVRGH&LrQFLDVGD&RPSXWDomR $8',725,$'$7(&12/2*,$'$,1)250$d 2 &\QDUD&DUYDOKR F\QDUDFDUYDOKR#\DKRRFRPEU

Leia mais

SISTEMAS OPERACIONAIS LIVRES SERVICOS DE REDE LOCAL. Professor Carlos Muniz

SISTEMAS OPERACIONAIS LIVRES SERVICOS DE REDE LOCAL. Professor Carlos Muniz SISTEMAS OPERACIONAIS LIVRES SERVICOS DE REDE LOCAL Na internet, cada computador conectado à rede tem um endereço IP. Todos os endereços IPv4 possuem 32 bits. Os endereços IP são atribuídos à interface

Leia mais

TECNÓLOGO EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PROGRAMAÇÃO DE COMPUTADORES I Aula 01: Conceitos Iniciais / Sistema Operacional

TECNÓLOGO EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PROGRAMAÇÃO DE COMPUTADORES I Aula 01: Conceitos Iniciais / Sistema Operacional TECNÓLOGO EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PROGRAMAÇÃO DE COMPUTADORES I Aula 01: Conceitos Iniciais / Sistema Operacional O conteúdo deste documento tem por objetivo apresentar uma visão geral

Leia mais

CA Nimsoft Monitor Snap

CA Nimsoft Monitor Snap CA Nimsoft Monitor Snap Guia de Configuração do Monitoramento de conectividade de rede net_connect série 2.9 Aviso de copyright do CA Nimsoft Monitor Snap Este sistema de ajuda online (o Sistema ) destina-se

Leia mais

Implementar servidores de Web/FTP e DFS. Disciplina: Serviços de Redes Microsoft Professor: Fernando Santorsula fernando.santorsula@esamc.

Implementar servidores de Web/FTP e DFS. Disciplina: Serviços de Redes Microsoft Professor: Fernando Santorsula fernando.santorsula@esamc. Implementar servidores de Web/FTP e DFS Disciplina: Serviços de Redes Microsoft Professor: Fernando Santorsula fernando.santorsula@esamc.br Conteúdo programático Introdução ao protocolo HTTP Serviço web

Leia mais

Desenvolvimento para Sistemas Embarcados (CEA 513) Conceitos Gerais

Desenvolvimento para Sistemas Embarcados (CEA 513) Conceitos Gerais Universidade Federal de Ouro Preto Departamento de Computação e Sistemas - DECSI Desenvolvimento para Sistemas Embarcados (CEA 513) Conceitos Gerais Vicente Amorim vicente.amorim.ufop@gmail.com Sumário

Leia mais

Blinde seu caminho contra as ameaças digitais. Manual do Produto. Página 1

Blinde seu caminho contra as ameaças digitais. Manual do Produto. Página 1 ] Blinde seu caminho contra as ameaças digitais Manual do Produto Página 1 O Logon Blindado é um produto desenvolvido em conjunto com especialistas em segurança da informação para proteger os clientes

Leia mais

Andarta - Guia de Instalação. Guia de Instalação

Andarta - Guia de Instalação. Guia de Instalação Guia de Instalação 29 de setembro de 2010 1 Sumário Introdução... 3 Os Módulos do Andarta... 4 Instalação por módulo... 6 Módulo Andarta Server... 6 Módulo Reporter... 8 Módulo Agent... 9 Instalação individual...

Leia mais

CA Nimsoft Monitor. Guia do Probe Monitoramento de conectividade de rede. net_connect série 3.0

CA Nimsoft Monitor. Guia do Probe Monitoramento de conectividade de rede. net_connect série 3.0 CA Nimsoft Monitor Guia do Probe Monitoramento de conectividade de rede net_connect série 3.0 Aviso de copyright do CA Nimsoft Monitor Este sistema de ajuda online (o Sistema ) destina-se somente para

Leia mais

Introdução aos Sistemas de Informações

Introdução aos Sistemas de Informações Introdução aos Sistemas de Informações Módulo 6 Segurança da TI Por que os Controles São Necessários Os controles são necessários para garantir a qualidade e segurança dos recursos de hardware, software,

Leia mais

Cartilha de Segurança para Internet

Cartilha de Segurança para Internet Comitê Gestor da Internet no Brasil Cartilha de Segurança para Internet Parte III: Privacidade Versão 3.1 2006 CERT.br Centro de Estudos, Resposta e Tratamento de Incidentes de Segurança no Brasil Cartilha

Leia mais

Proteção no Ciberespaço da Rede UFBA. CPD - Divisão de Suporte Yuri Alexandro yuri.alexandro@ufba.br

Proteção no Ciberespaço da Rede UFBA. CPD - Divisão de Suporte Yuri Alexandro yuri.alexandro@ufba.br Proteção no Ciberespaço da Rede UFBA CPD - Divisão de Suporte Yuri Alexandro yuri.alexandro@ufba.br Agenda Segurança o que é? Informação o que é? E Segurança da Informação? Segurança da Informação na UFBA

Leia mais

CA ARCserve Backup. Visão geral

CA ARCserve Backup. Visão geral INFORME DE PRODUTO: CA ARCSERVE BACKUP R12.5 CA ARCserve Backup CA ARCSERVE BACKUP, O PRODUTO DE ALTA PERFORMANCE, LÍDER DA INDÚSTRIA DE PROTEÇÃO DE DADOS, COMBINA TECNOLOGIA INOVADORA DE ELIMINAÇÃO DE

Leia mais

Consulte a parte de trás para obter informações sobre instalação rápida.

Consulte a parte de trás para obter informações sobre instalação rápida. Guia do Usuário Consulte a parte de trás para obter informações sobre instalação rápida. Protegemos mais usuários contra ameaças on-line do que qualquer outra empresa no mundo. Cuidar de nosso meio ambiente,

Leia mais

Blinde seu caminho contra as ameaças digitais. Manual do Produto. Página 1

Blinde seu caminho contra as ameaças digitais. Manual do Produto. Página 1 ] Blinde seu caminho contra as ameaças digitais Manual do Produto Página 1 O Logon Blindado é um produto desenvolvido em conjunto com especialistas em segurança da informação para proteger os clientes

Leia mais

Partição Partição primária: Partição estendida: Discos básicos e dinâmicos

Partição Partição primária: Partição estendida: Discos básicos e dinâmicos Partição Parte de um disco físico que funciona como se fosse um disco fisicamente separado. Depois de criar uma partição, você deve formatá-la e atribuir-lhe uma letra de unidade antes de armazenar dados

Leia mais

Políticas de Segurança da Informação e Utilização de Recursos da Rede

Políticas de Segurança da Informação e Utilização de Recursos da Rede Políticas de Segurança da Informação e Utilização de Recursos da Rede Índice 1 Introdução... 3 2 Política de cadastro e senhas... 5 3 Política de Utilização da Internet... 7 4 Política de Utilização de

Leia mais

ATA - Exercícios Informática Carlos Viana. 2012 Copyright. Curso Agora eu Passo - Todos os direitos reservados ao autor.

ATA - Exercícios Informática Carlos Viana. 2012 Copyright. Curso Agora eu Passo - Todos os direitos reservados ao autor. ATA - Exercícios Informática Carlos Viana 2012 Copyright. Curso Agora eu Passo - Todos os direitos reservados ao autor. ATA EXERCÍCIOS CARLOS VIANA 22 - ( ESAF - 2004 - MPU - Técnico Administrativo ) O

Leia mais

INTRODUÇÃO A PROGRAMAÇÃO ESTRUTURADA DE COMPUTADORES EM C

INTRODUÇÃO A PROGRAMAÇÃO ESTRUTURADA DE COMPUTADORES EM C INTRODUÇÃO A PROGRAMAÇÃO ESTRUTURADA DE COMPUTADORES EM C Prof. Msc. Helio Esperidião PROGRAMAS Um computador nada mais faz do que executar programas. Um programa é simplesmente uma seqüência de instruções

Leia mais

4 Estrutura do Sistema Operacional. 4.1 - Kernel

4 Estrutura do Sistema Operacional. 4.1 - Kernel 1 4 Estrutura do Sistema Operacional 4.1 - Kernel O kernel é o núcleo do sistema operacional, sendo responsável direto por controlar tudo ao seu redor. Desde os dispositivos usuais, como unidades de disco,

Leia mais

Segurança no Computador

Segurança no Computador Segurança no Computador Segurança na Internet: Módulo 1 (CC Entre Mar E Serra), 2008 Segurança na Internet, CC Entre Mar E Serra 1 Segurança no Computador Um computador (ou sistema computacional) é dito

Leia mais

Segurança da Informação

Segurança da Informação Segurança da Informação Segurança e Vulnerabilidades em Aplicações Web jobona@terra.com.br Definição: Segurança Segundo o dicionário da Wikipédia, o termo segurança significa: 1. Condição ou estado de

Leia mais

Hackers. Seus dados podem ser inúteis, mas seu computador em si pode ainda ser um recurso valioso.

Hackers. Seus dados podem ser inúteis, mas seu computador em si pode ainda ser um recurso valioso. Firewalls Hackers Gostam de alvos fáceis. Podem não estar interessados nas suas informações. Podem invadir seu computador apenas por diversão. Para treinar um ataque a uma máquina relativamente segura.

Leia mais

Faculdade de Tecnologia Senac Goiás Segurança da Informação. Guilherme Pereira Carvalho Neto. Portas e Serviços

Faculdade de Tecnologia Senac Goiás Segurança da Informação. Guilherme Pereira Carvalho Neto. Portas e Serviços Faculdade de Tecnologia Senac Goiás Segurança da Informação Guilherme Pereira Carvalho Neto Portas e Serviços Goiânia 2015 Relatório de portas e serviços na rede Relatório produzido com base em dados colhidos

Leia mais

O processo de ataque em uma rede de computadores. Jacson R.C. Silva

O processo de ataque em uma rede de computadores. Jacson R.C. Silva <jacsonrcsilva@gmail.com> O processo de ataque em uma rede de computadores Jacson R.C. Silva Inicialmente, se conscientizando... É importante ter em mente os passos que correspondem a um ataque Porém,

Leia mais

TERMO DE USO 1. ACESSO AO WEB SITE

TERMO DE USO 1. ACESSO AO WEB SITE TERMO DE USO O presente web site é disponibilizado pela VIDALINK DO BRASIL S/A ("VIDALINK") e todos os seus recursos, conteúdos, informações e serviços ( conteúdo ) poderão ser usados exclusivamente de

Leia mais

Informática I. Aula 19. http://www.ic.uff.br/~bianca/informatica1/ Aula 19-20/11/06 1

Informática I. Aula 19. http://www.ic.uff.br/~bianca/informatica1/ Aula 19-20/11/06 1 Informática I Aula 19 http://www.ic.uff.br/~bianca/informatica1/ Aula 19-20/11/06 1 Ementa Histórico dos Computadores Noções de Hardware e Software Microprocessadores Sistemas Numéricos e Representação

Leia mais

Segurança da Informação Segurança de Redes Segurança de Sistemas Segurança de Aplicações

Segurança da Informação Segurança de Redes Segurança de Sistemas Segurança de Aplicações Segurança da Informação Segurança de Redes Segurança de Sistemas Segurança de Aplicações Símbolos Símbolos: S 1, S 2,..., S n Um símbolo é um sinal (algo que tem um caráter indicador) que tem uma determinada

Leia mais

Aula 02 Software e Operações Básicas. Prof. Bruno Gomes bruno.gomes@ifrn.edu.br http://www.profbrunogomes.com.br/

Aula 02 Software e Operações Básicas. Prof. Bruno Gomes bruno.gomes@ifrn.edu.br http://www.profbrunogomes.com.br/ Aula 02 Software e Operações Básicas Prof. Bruno Gomes bruno.gomes@ifrn.edu.br http://www.profbrunogomes.com.br/ Revisando Como um computador funciona: Entrada (Dados) Processamento (Análise dos Dados)

Leia mais

INFORMÁTICA APLICADA AULA 03 CONCEITOS DE SOFTWARE

INFORMÁTICA APLICADA AULA 03 CONCEITOS DE SOFTWARE UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: Bacharelado em Ciências e Tecnologia INFORMÁTICA APLICADA AULA 03 CONCEITOS DE SOFTWARE Profª Danielle Casillo SUMÁRIO O que é software? Software x Hardware

Leia mais

Consulte a parte de trás para obter informações sobre instalação rápida.

Consulte a parte de trás para obter informações sobre instalação rápida. Guia do Usuário Consulte a parte de trás para obter informações sobre instalação rápida. Protegemos mais usuários contra ameaças on-line do que qualquer outra empresa no mundo. Cuidar de nosso meio ambiente,

Leia mais

Riscos, Ameaças e Vulnerabilidades. Aécio Costa

Riscos, Ameaças e Vulnerabilidades. Aécio Costa Riscos, Ameaças e Vulnerabilidades Aécio Costa Riscos, Ameaças e Vulnerabilidades Independente do meio ou forma pela qual a informação é manuseada, armazenada, transmitida e descartada, é recomendável

Leia mais

Malwares Segurança da Informação. S.O.S. Concursos Prof: Tiago Furlan Lemos

Malwares Segurança da Informação. S.O.S. Concursos Prof: Tiago Furlan Lemos Malwares Segurança da Informação. S.O.S. Concursos Prof: Tiago Furlan Lemos Malware O termo malware é proveniente do inglês malicious software; é um software destinado a se infiltrar em um sistema de computador

Leia mais

CONCEITOS GERAIS SOBRE SEGURANÇA NA TECNOLOGIA DA INFORMAÇÃO. Prof. Me. Hélio Esperidião

CONCEITOS GERAIS SOBRE SEGURANÇA NA TECNOLOGIA DA INFORMAÇÃO. Prof. Me. Hélio Esperidião CONCEITOS GERAIS SOBRE SEGURANÇA NA TECNOLOGIA DA INFORMAÇÃO Prof. Me. Hélio Esperidião CONCEITOS GERAIS SOBRE SEGURANÇA NA TECNOLOGIA DA INFORMAÇÃO O conceito de segurança envolve formas de proteção e

Leia mais

SENAI São Lourenço do Oeste. Introdução à Informática. Adinan Southier Soares

SENAI São Lourenço do Oeste. Introdução à Informática. Adinan Southier Soares SENAI São Lourenço do Oeste Introdução à Informática Adinan Southier Soares Informações Gerais Objetivos: Introduzir os conceitos básicos da Informática e instruir os alunos com ferramentas computacionais

Leia mais

Novas funcionalidades ficarão automaticamente sujeitas a novo Termo de Uso.

Novas funcionalidades ficarão automaticamente sujeitas a novo Termo de Uso. Termo de Uso Ao acessar o sistema SIEM na Plataforma WEB (SIEM WEB), e quaisquer de suas páginas, você está aceitando seus termos e condições de uso. Esses termos e condições poderão ser modificados eletronicamente,

Leia mais

Consulte a parte de trás para obter informações sobre instalação rápida.

Consulte a parte de trás para obter informações sobre instalação rápida. Guia do Usuário Consulte a parte de trás para obter informações sobre instalação rápida. Protegemos mais usuários contra ameaças on-line do que qualquer outra empresa no mundo. Cuidar de nosso meio ambiente,

Leia mais

Introdução. Hardware X Software. Corpo Humano Parte Física. Capacidade de utilizar o corpo em atividades especificas explorando seus componentes

Introdução. Hardware X Software. Corpo Humano Parte Física. Capacidade de utilizar o corpo em atividades especificas explorando seus componentes Introdução Hardware X Software Corpo Humano Parte Física Componentes 18 Capacidade de utilizar o corpo em atividades especificas explorando seus componentes Hardware Introdução Parte física: placas, periféricos,

Leia mais

Figura 01 Kernel de um Sistema Operacional

Figura 01 Kernel de um Sistema Operacional 01 INTRODUÇÃO 1.5 ESTRUTURA DOS SISTEMAS OPERACIONAIS O Sistema Operacional é formado por um Conjunto de rotinas (denominado de núcleo do sistema ou kernel) que oferece serviços aos usuários e suas aplicações

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Tipos de Sistemas Operacionais Com o avanço dos computadores foram surgindo alguns tipos de sistemas operacionais que contribuíram para o desenvolvimento do software. Os tipos de

Leia mais

Palestra sobre Segurança de Redes - Windows NT

Palestra sobre Segurança de Redes - Windows NT Palestra sobre Segurança de Redes - Windows NT Workshop: "Internet, Windows NT e Segurança de Rede" Realizada em 13/05/1998 Palestrante: Fabio C. Cunha Microsoft Systems Engineer fccunha@flipflip.usp.br

Leia mais

FundamentosemInformática

FundamentosemInformática FundamentosemInformática 04 Software Conteúdo Conceito de Software Classificação de Softwares Conceito de Sistema Operacional(S.O.) FunçõesBásicasdeumS.O. um Arquivos Atributos Diretórios 1 -Conceitos

Leia mais

Gateways de Correio Eletrônico Usando o MDaemon 6.0

Gateways de Correio Eletrônico Usando o MDaemon 6.0 Gateways de Correio Eletrônico Usando o MDaemon 6.0 Alt-N Technologies, Ltd 1179 Corporate Drive West, #103 Arlington, TX 76006 Tel: (817) 652-0204 2002 Alt-N Technologies. Todos os Direitos Reservados.

Leia mais

FIREWALL PROTEÇÃO EFICIENTE

FIREWALL PROTEÇÃO EFICIENTE FIREWALL PROTEÇÃO EFICIENTE Antonio Josnei Vieira da Rosa 1 João Carlos Zen 2 RESUMO. Firewall ou porta corta fogo pode ser definido como uma barreira de proteção cuja função é controlar o trafego de uma

Leia mais

Revisão. Prof. Marciano dos Santos Dionizio

Revisão. Prof. Marciano dos Santos Dionizio Revisão Prof. Marciano dos Santos Dionizio SISTEMA DE ARQUIVOS No mundo Windows, temos apenas três sistemas de arquivos: FAT16, FAT32 e NTFS. O FAT16 é o mais antigo, usado desde os tempos do MS-DOS, enquanto

Leia mais

Segurança a da Informação Aula 06. Aula 06

Segurança a da Informação Aula 06. Aula 06 Segurança a da Informação 26/9/2004 Prof. Rossoni, Farias 1 Em Segurança a da Informação, o que vem a ser: Cracking de Senhas IP Spoofing Denial of Service Sniffer Trojan Engenharia Social Consolidação

Leia mais

CA Nimsoft Monitor Snap

CA Nimsoft Monitor Snap CA Nimsoft Monitor Snap Guia de Configuração do Monitoramento do Jboss do Nimsoft jboss série 1.3 Aviso de copyright do CA Nimsoft Monitor Snap Este sistema de ajuda online (o Sistema ) destina-se somente

Leia mais

FAT32 ou NTFS, qual o melhor?

FAT32 ou NTFS, qual o melhor? FAT32 ou NTFS, qual o melhor? Entenda quais as principais diferenças entre eles e qual a melhor escolha O que é um sistema de arquivos? O conceito mais importante sobre este assunto, sem sombra de dúvidas,

Leia mais

Faculdade Tecnologia SENAC. Curso Técnico Informática Pronatec. Joice Silva, Luís Filipe, Ramon Olkoski, Rosber Silva.

Faculdade Tecnologia SENAC. Curso Técnico Informática Pronatec. Joice Silva, Luís Filipe, Ramon Olkoski, Rosber Silva. 1 Faculdade Tecnologia SENAC Curso Técnico Informática Pronatec Joice Silva, Luís Filipe, Ramon Olkoski, Rosber Silva. Termos Técnicos: Apresentação Relatório Técnico Pelotas, 2012 2 Joice Silva, Luís

Leia mais

Lista de Exercício: PARTE 1

Lista de Exercício: PARTE 1 Lista de Exercício: PARTE 1 1. Questão (Cód.:10750) (sem.:2a) de 0,50 O protocolo da camada de aplicação, responsável pelo recebimento de mensagens eletrônicas é: ( ) IP ( ) TCP ( ) POP Cadastrada por:

Leia mais

Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V. 2009-2

Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V. 2009-2 Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V. 2009-2 Aula 3 Virtualização de Sistemas 1. Conceito Virtualização pode ser definida

Leia mais

Prof. Jefferson Costa www.jeffersoncosta.com.br

Prof. Jefferson Costa www.jeffersoncosta.com.br Prof. Jefferson Costa www.jeffersoncosta.com.br Preservação da: confidencialidade: Garantia de que o acesso à informação seja obtido somente por pessoas autorizadas. integridade: Salvaguarda da exatidão

Leia mais

IMPLEMENTANDO UMA ARQUITETURA DO SECURITY ANALYTICS

IMPLEMENTANDO UMA ARQUITETURA DO SECURITY ANALYTICS IMPLEMENTANDO UMA ARQUITETURA DO SECURITY ANALYTICS Resumo da solução RESUMO As novas ameaças de segurança exigem uma nova abordagem ao gerenciamento de segurança. As equipes de segurança precisam de uma

Leia mais

Curso de Sistemas de Informação 8º período Disciplina: Tópicos Especiais Professor: José Maurício S. Pinheiro V. 2009-1

Curso de Sistemas de Informação 8º período Disciplina: Tópicos Especiais Professor: José Maurício S. Pinheiro V. 2009-1 Curso de Sistemas de Informação 8º período Disciplina: Tópicos Especiais Professor: José Maurício S. Pinheiro V. 2009-1 Aula 4 Introdução aos Sistemas Biométricos 1. Identificação, Autenticação e Controle

Leia mais