Você está na página 1de 63

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

VITRIA 2008

RONILDO CESAR DE MOURA

O USO DA ENGENHARIA REVERSA NO DESENVOLVIMENTO DE SOFTWARE SEGURO


Monografia apresentada ESAB Escola Superior Aberta do Brasil, sob orientao do (a) Prof. (a) Beatriz Christo Gobbi.

VITRIA 2008

RONILDO CESAR DE MOURA

O USO DA ENGENHARIA REVERSA NO DESENVOLVIMENTO DE SOFTWARE SEGURO

Aprovada em ____ de __________ de 2008.

_____________________________________

_____________________________________

_____________________________________

VITRIA 2008

Este trabalho dedicado aos meus pais e minha esposa, pois s eles conhecem todo o esforo que fizemos para chegar at aqui.

RESUMO
O estudo teve por objetivo apresentar meios que contribuam no desenvolvimento de software seguro, por meio de utilizao de engenharia reversa de software. A engenharia reversa de software tem o propsito de recuperar as informaes de projeto perdidas durante a fase de desenvolvimento, de documentar o real estado do software e poder auxiliar o processo de gerenciamento da manuteno. Dessa forma, a engenharia reversa pode ser aplicada em qualquer etapa do ciclo de vida, seja para recuperar nveis de abstrao ou para fornecer uma nova viso em um grau de abstrao mais alto. O objetivo da engenharia reversa a produo de informaes que possam aumentar o conhecimento geral de sistemas de software. Essas informaes podem ser utilizadas em atividades como manuteno, reuso, teste e controle de qualidade de software. Existe um debate legal ao redor de engenharia reversa que acontece h vrios anos. Isto normalmente revolve ao redor da pergunta de qual o impacto social e econmico 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 pases a prtica de engenharia reversa considerada ilegal por ter praticantes interessados em obter acesso no autorizado a recursos de software no oferecidos gratuitamente pelos fabricantes que vendem o produto. Por outro lado, demonstra a utilizao da prpria engenharia reversa como ferramenta de proteo contra a sua prtica ilegal. A partir de tcnicas aplicadas nesta rea possvel modelar melhores protees para o software como anti-descompiladores, cdigos mutantes e armadilhas.

LISTA DE FIGURAS
Figura 1 Comparao dos nveis de abstrao e das vises ................................. 14 Figura 2 Relao entre a engenharia progressiva e a engenharia reversa ............ 15 Figura 3 Software IDA Pro...................................................................................... 53 Figura 4 Sofware VB Decompiler ........................................................................... 54 Figura 5 Software Understand for Delphi ............................................................... 56 Figura 6 Viso geral do mtodo FUSION-RE/I ....................................................... 57 Figura 7 Sntese do mtodo FUSION-RE/I............................................................. 58

SUMRIO
1 INTRODUO ...................................................................................................... 9 1.1 1.2 1.3 1.4 1.5 2 3 CONTEXTO ................................................................................................... 9 PROBLEMA ................................................................................................. 10 JUSTIFICATIVA ........................................................................................... 10 OBJETIVOS ................................................................................................. 10 METODOLOGIA .......................................................................................... 11

CONCEITOS E DEFINIES ............................................................................ 12 ENGENHARIA REVERSA DE SISTEMA ........................................................... 17 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 SOFTWARE DE BAIXO NVEL .................................................................... 17 LINGUAGEM ASSEMBLY ........................................................................... 18 COMPILADORES ........................................................................................ 19 MQUINAS VIRTUAIS E BYTECODES ...................................................... 20 SISTEMAS OPERACIONAIS ....................................................................... 21 DISASSEMBLERS ....................................................................................... 21 DEPURADORES.......................................................................................... 21 DECOMPILADOR ........................................................................................ 22

ASPECTOS LEGAIS .......................................................................................... 23 4.1 4.2 4.3 COMPATIBILIDADE..................................................................................... 23 SO PONTOS FUNDAMENTAIS DA LEI DE SOFTWARE: ........................ 26 FALHAS DE SEGURANA .......................................................................... 27 Um pouco de histria ............................................................................. 27 Alguns conceitos importantes ................................................................ 28 Chaves pblicas e privadas ................................................................... 31 Exemplos de falhas ............................................................................... 32

4.3.1 4.3.2 4.3.3 4.3.4 5

TCNICAS DE ENGENHARIA REVERSA ......................................................... 37

5.1 5.2

TCNICAS DE ENGENHARIA REVERSA SEM O CDIGO-FONTE ......... 37 TCNICAS DE ENGENHARIA REVERSA COM O CDIGO-FONTE ........ 38 Extrao das Informaes ..................................................................... 38 Tratamento das informaes ................................................................. 40

5.2.1 5.2.2 5.3

TCNICAS COMPLEXAS DE ENGENHARIA REVERSA ........................... 43 Anlise de propagao .......................................................................... 43 Objetizao ............................................................................................ 43 Reengenharia de interfaces ................................................................... 44

5.3.1 5.3.2 5.3.3 5.4

ENGENHARIA REVERSA PARA SEGURANA ......................................... 44 Software malicioso................................................................................. 44 Mtodos de proteo ............................................................................. 45 Tcnicas Anti-reverso .......................................................................... 49

5.4.1 5.4.2 5.4.3 6

FERRAMENTAS DE ENGENHARIA REVERSA ................................................ 53 6.1 6.2 6.3 6.4 IDA Pro......................................................................................................... 53 VB Decompiler ............................................................................................. 54 Understand for Delphi .................................................................................. 56 MTODO FUSION-RE/I ............................................................................... 57

7 8

CONCLUSO ..................................................................................................... 59 REFERENCIAS BIBLIOGRAFICAS ................................................................... 61

1 INTRODUO

Engenharia Reversa, Engenharia de Software, Segurana.

1.1 CONTEXTO
O estudo procura demonstrar como o desenvolvimento de software pode se beneficiar com a utilizao da engenharia reversa. O processo de desenvolvimento possui diversos requisitos, entre eles a segurana. Todavia, nem sempre os programadores, analistas e gestores do a devida ateno que o tema requer. Com a disseminao da internet, de novas tecnologias e de ferramentas cada vez mais poderosas, a informao tornou-se artigo valioso. Contudo, preciso torn-la protegida da ao de pessoas no autorizadas. Para tal, a elaborao de programas de computador com um nvel maior de proteo requer a utilizao de ferramentas especficas. Nesse contexto, surgem tcnicas que podem reduzir esse risco, entre elas o emprego da engenharia reversa como meio de proteger o cdigo dos sistemas. A necessidade do uso da engenharia reversa tem vrios motivos, dentre eles: os sistemas terem sido desenvolvidos h muito tempo; possurem pouca ou nenhuma documentao atualizada; os desenvolvedores do produto j no trabalharem mais na empresa; o sistema ter sido criado com mtodos diferentes, nem sempre padronizados. Outras necessidades devem-se a adaptao s novas tecnologias de hardware e software (novas linguagens e mtodos); adaptao s novas economias (moeda, legislao, impostos); adaptao de novas funcionalidades, acessibilidade, correo de erros, etc.

10

1.2 PROBLEMA
Devido quantidade de vulnerabilidades que os sistemas atuais tm enfrentado, aumentar a segurana no desenvolvimento de software tornou- se to necessrio quanto o uso dos computadores nas empresas e nas residncias. Uma das solues tornar os programas imunes aos vrios tipos de ataques que podem sofrer, para isso ressurge a engenharia reversa como alternativa na elaborao de cdigos mais seguros.

1.3 JUSTIFICATIVA
Um dos principais motivos do estudo descrever a engenharia reversa como algo imprescindvel na engenharia de software. Rever os conceitos que colaboram para o uso perverso de suas tcnicas na pirataria e a violao dos direitos autorais. A partir desse conhecimento, propor alternativas que impeam ou diminuam o acesso a dados confidenciais, a reproduo de cpias ilegais e a invaso de sistemas.

1.4 OBJETIVOS
Para tal, este trabalho procura identificar alguns mtodos que podem colaborar na reduo dos riscos. Apresentar a engenharia reversa como ferramenta de segurana no desenvolvimento de software confivel. Identificar seus conceitos, assim como seus aspectos legais; Examinar as falhas de segurana de software e suas conseqncias; Levantar as tcnicas de engenharia reversa e apresentar mtodos de proteo.

11

1.5 METODOLOGIA
Para alcanar o objetivo proposto, a metodologia adotada procura identificar na literatura as falhas dos sistemas, apresentando os conceitos de engenharia reversa, os mtodos empregados na proteo de cdigo dos programas, as tcnicas e os procedimentos empregados na engenharia de software que visam diminuir as vulnerabilidades e aprimorar a segurana de software. Utiliza-se de livros, revistas, manuais, dissertaes e textos de internet sobre o assunto e suas co-relaes, alm de citar alguns dos softwares e ferramentas disponveis no mercado.

12

2 CONCEITOS E DEFINIES
Segundo Saleh e Boujarwah (1996), o mercado de software vem crescendo a cada dia e com ele o uso de tcnicas de desenvolvimento, muitas vezes informais. Como resultado, a manuteno de tais softwares torna-se problemtica, uma vez que a documentao associada ao software, na maioria das vezes, no est de acordo com o cdigo implementado. Alm disso, as constantes modificaes e adies de novas caractersticas ao software acarretam efeitos colaterais inesperados que no esto presentes na documentao. Dessa forma, quando diante da manuteno do produto, o engenheiro de software encontra uma documentao informal e incompleta, que no reflete o software existente, tornando impossvel o gerenciamento do processo de manuteno segundo Saleh e Boujarwah (1996). Neste contexto, a engenharia reversa de software, tem o propsito de recuperar as informaes de projeto perdidas durante a fase de desenvolvimento, de documentar o real estado do software e poder auxiliar o processo de gerenciamento da manuteno. Rugaber (1992) afirma que a maior parte do esforo de desenvolvimento de software gasto na manuteno de sistemas existentes e no no desenvolvimento de sistemas novos, e que grande parte do processo de manuteno dirigido ao entendimento do sistema em manuteno. Sendo assim, se queremos melhorar o desenvolvimento de software, necessrio facilitar o processo de compreenso 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 anlise de hardware, onde a prtica de decifrar o projeto de produtos prontos comum. O mesmo conceito pode ser aplicado a software, com uma diferena: enquanto a engenharia reversa de hardware tem por objetivo reproduzir o sistema, a de software se destina a criar vises do sistema em diferentes nveis de abstrao, facilitando seu entendimento com o principal objetivo de ajudar na manuteno do sistema.

13

Uma definio de abstrao dada como a habilidade de se ignorar os aspectos de assuntos no relevantes para o propsito em questo, tornando possvel uma concentrao maior nos assuntos principais (Oxford, 1986). Segundo Feltrim, V. D. (1999), o ciclo de vida do software expressa bem a diferena entre nveis de abstrao. Vale ainda ressaltar a existncia de dois conceitos relativos a abstrao: nvel e grau. Diferentes nveis de abstrao ocorrem entre diferentes etapas do desenvolvimento (as informaes na etapa de projeto so outras alm das informaes da etapa de anlise), enquanto diferenas no grau de abstrao ocorrem dentro de uma mesma etapa (pode-se representar as informaes 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 nveis de entendimento. Baseado nos nveis de abstrao, as vises so classificadas em quatro categorias:

Viso em nvel implementacional: abstrai caractersticas da linguagem de programao e, especificamente, da implementao. Exemplos de vises em nvel implementacional so informaes a respeito da sintaxe e da semntica da linguagem, e informaes de implementao;

Viso em nvel estrutural: abstrai detalhes da implementao para revelar sua estrutura a partir de diferentes perspectivas. O resultado uma representao explicita das dependncias entre os componentes do sistema;

Viso em nvel funcional: abstrai a funo de um componente do sistema de modo a identificar o que o componente faz. Relaciona partes do programa suas funes a fim de revelar as relaes lgicas entre elas;

Viso em nvel de domnio: 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 nveis de abstrao ou para fornecer uma nova viso em

14

um grau de abstrao mais alto ( consenso de que quanto mais alto o grau de abstrao, menos detalhes so fornecidos.) A engenharia reversa segue o sentido oposto ao da engenharia progressiva. A engenharia progressiva segue a seqncia que vai desde os requisitos, passa pelo projeto at a implementao. 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 direes 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 nvel de abstrao para um alto nvel de abstrao.

Fig. 1 Comparao dos nveis de abstrao e das vises.

Existem vrias definies de engenharia reversa. A definio de Pressman (1995, p.546) diz que o processo de anlise num esforo de criar uma representao do programa em um nvel de abstrao mais alto que o cdigo fonte. Assim sendo, pode-se dizer que o objetivo da engenharia reversa a produo de informaes que possam aumentar o conhecimento geral de sistemas de software. Essas informaes podem ser utilizadas em atividades como manuteno, reuso, teste e controle de qualidade de software.

15

A figura 2 ilustra a relao 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 trs atividades fundamentais:

Sistema (engenharia de sistemas): envolve o contexto em que o sistema est operando, ou seja, o porqu do sistema ser desenvolvido;

Requisitos (anlise): so estabelecidos os servios a serem fornecidos pelo sistema e as restries sob as quais ele deve operar, ou seja, o que o sistema deve fazer e sob quais circunstncias;

Desenvolvimento (projeto, codificao e testes): cria-se um planejamento da soluo, ou seja, como o sistema cumprir o que foi estabelecido na atividade de requisitos e a implementao dessa soluo, incluindo a codificao, os testes, a depurao e a entrega do sistema. A fase de manuteno vista como reiterao das atividades prvias.

Fig. 2 Relao entre a engenharia progressiva e a engenharia reversa.

Em Costa (1997) encontramos a definio de engenharia reversa como o processo de exame e compreenso do sistema existente, para recapturar ou recriar os requisitos atualmente implementados pelo sistema, apresentando-os em um grau ou

16

nvel mais alto de abstrao. No envolve mudanas no sistema ou criao de um novo sistema. Segundo Chikofsky e Cross II (1990), engenharia reversa de software um processo de investigao, no um processo de mudana ou reproduo. Rugaber (1992) identifica o propsito da engenharia reversa como sendo entender um sistema de software com o objetivo de facilitar atividades como: expanso, correo, documentao, re-projeto ou reprogramao em outra linguagem de programao. Chikofsky e Cross II (1990) tambm identificam duas importantes categorias da engenharia reversa: a redocumentao (visualizao de cdigo) e a recuperao de projeto (entendimento de programa). A categoria redocumentao compreende a criao ou reviso de uma representao semanticamente equivalente dentro de um mesmo nvel de abstrao. Esse processo visa criar novas vises do sistema atravs da anlise do cdigo fonte, com o objetivo de melhorar a compreenso do sistema. A criao dessas vises adicionais do cdigo, geralmente grficas, tem como objetivo recriar a documentao que j existiu ou que deveria ter existido sobre o sistema, conforme Costa (1997). No entanto, as informaes recuperadas com esse tipo de anlise fornecem apenas vises estruturais, de forma que informaes como a funo e os propsitos do sistema exigem um maior esforo de entendimento. A engenharia reversa categorizada como recuperao de projeto um subconjunto da engenharia reversa no qual o domnio de conhecimento, informao externa e deduo so adicionados s observaes sobre o sistema para identificar abstraes de mais alto nvel que sejam significativas, alm daquelas obtidas diretamente pelo exame do sistema em si, segundo Biggerstaff (1989). Esse tipo de processo de entendimento visa recuperar todas as informaes necessrias para se compreender melhor o que o sistema faz, como faz e porque o faz. Recuperao de projeto a forma mais critica de engenharia reversa porque tenta recuperar no s a funcionalidade do sistema, mas o processo no qual ele foi desenvolvido, conforme Costa (1997). Esse tipo de anlise recupera mais do que vises estruturais, obtendo vises funcionais e at mesmo de domnio.

17

3 ENGENHARIA REVERSA DE SISTEMA


Engenharia reversa de sistema envolve vrias ferramentas e utiliza o sistema operacional para obter informao, inspecionando programas executveis. Pois toda interao que um programa tem com o mundo externo tem que ir pelo sistema operacional. Esta a razo da necessidade em entender a operao do sistema. Segundo Eilam, E. (2005), a Engenharia reversa de Cdigo uma arte. Conceitos de extrao de algoritmos de um programa binrio um processo complexo que requer um domnio de vrias tcnicas acrescidas de um entendimento slido 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 cdigo fonte freqentemente difcil de ser compreendido. Para isso observa-se o cdigo de baixo nvel, procurando detalhes de como o software opera. Muitos destes detalhes so gerados automaticamente pelo compilador e no manualmente pelo desenvolvedor de software.

3.1 SOFTWARE DE BAIXO NVEL


Segundo Eilam, E. (2005), o software de baixo nvel (tambm conhecido como software de sistema) um nome genrico para a infra-estrutura do mundo de software. Algumas ferramentas de desenvolvimento como compiladores, linkers, e depuradores so software de infra-estrutura para operar sistemas e linguagens de programao de baixo nvel como a linguagem assembly. Esta a camada que separa o desenvolvedor de software e aplicao do hardware fsico. 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 especficos e simplifica a interao com o usurio final, administrando a exibio, o mouse, o teclado, e assim por diante.

18

Antigamente, os programadores sempre tiveram que trabalhar no baixo nvel porque era o nico modo possvel para escrever software de infra-estrutura de baixo nvel. Hoje em dia, sistemas operacionais modernos e ferramentas de desenvolvimento ocultam os detalhes do mundo do baixo nvel. Isto simplifica profundamente o processo de desenvolvimento de software, porm custa da reduo do poder e controle geral do sistema. Para se tornar um engenheiro reverso pleno, preciso desenvolver um slido conhecimento de software de baixo nvel e programao de baixo nvel. Isso porque os aspectos de baixo nvel de um programa freqentemente permitem o domnio dos detalhes de engenharia reversa de alto nvel. A maioria dos desenvolvedores de software usa a linguagem de alto-nvel que de fcil compreenso. Por exemplo, comandos que criam uma janela, carregam uma pgina de Web, ou exibem um quadro inacreditavelmente simples, enquanto o significado disso traduzido em milhares ou at mesmo milhes de comandos nas mais baixas camadas. Engenharia reversa requer um entendimento slido 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 nvel na cadeia de software possibilitando inacreditavelmente satisfazer a engenharia reversa. Se o software executa uma operao, deve ser visvel no cdigo de linguagem assembly. Esta a linguagem da engenharia reversa, seu domnio requer do desenvolvedor um entendimento slido da linguagem assembly na plataforma escolhida. Outro conceito importante do cdigo de mquina (freqentemente chamado de cdigo binrio ou cdigo de objeto). As pessoas s vezes cometem o erro de pensar que o cdigo de mquina "mais rpido" na linguagem assembly. Isso um

19

engano, cdigo de mquina e linguagem assembly so duas representaes diferentes da mesma coisa. ACPU l cdigo de mquina, que nada mais que uma sucesso de pedaos que contm uma lista de instrues para a CPU executar. Em vez de nmeros de hexadecimal secretos ns podemos ver em instruo textual nomes como MOV (Mova), XCHG (Troca), e assim por diante. Cada comando de linguagem assembly representado por um nmero, chamando o cdigo de operao, ou opcode. Cdigo de objeto essencialmente uma sucesso de opcodes e outros nmeros esto relacionados a opcodes para executar operaes. CPUs constantemente lem cdigo de objeto de memria, decodifica-o, e agem baseados em instrues embutidas. Quando o desenvolvedor escreve cdigo em linguagem assembly (uma ocorrncia bastante rara estes dias), eles usam um programa de montador para traduzir o cdigo de linguagem assembly textual em cdigo binrio que pode ser decodificado por uma CPU. Na outra direo, um disassembler faz o oposto exato. L cdigo de objeto e gera o textual traando cada instruo nela. Esta uma operao relativamente simples para executar porque a linguagem assembly textual simplesmente uma representao diferente do cdigo de objeto. Disassembler uma ferramenta fundamental para a engenharia reversa.

3.3 COMPILADORES
Segundo Eilam, E. (2005), um arquivo de texto que contm instrues que descrevem o programa em um alto-nvel de linguagem produzido pelo compilador. O compilador um programa que l um arquivo fonte e gera um arquivo de cdigo de mquina correspondente. Dependendo do alto-nvel da linguagem, este cdigo de mquina pode ser um objeto de plataforma especfica que decodificado diretamente pela CPU ou pode ser codificado em uma plataforma especial independente chamado bytecode. Compiladores tradicionais usam linguagens de programao como C e C++ diretamente para gerar cdigo objeto de mquina legvel a partir do cdigo fonte

20

textual. O que isto significa que o cdigo de objeto resultante, quando traduzido pela linguagem assembly por um disassembler, essencialmente um programa de mquina gerado. Claro que, no completamente nenhum cdigo de mquina, porque o desenvolvedor de software descreveu ao compilador o que precisada ser feito na linguagem de alto-nvel. A barreira maior em decifrar cdigo gerado pelo compilador a otimizao aplicada pela maioria dos compiladores modernos. Compiladores empregam uma variedade de tcnicas, isso minimiza o tamanho de cdigo e melhora o desempenho da execuo. O problema que o cdigo aperfeioado freqentemente difcil de ler. Por exemplo, ao aperfeioar os compiladores substituem instrues com operaes matemticas equivalentes cujo propsito pode estar longe do bvio primeira vista.

3.4 MQUINAS VIRTUAIS E BYTECODES


Segundo Eilam, E. (2005), compiladores para linguagem de alto-nvel como Java geram um bytecode em vez de um cdigo de objeto. Bytecodes so semelhantes a cdigos, a no ser que eles sejam decodificados por um programa, em vez de uma CPU. A idia ter um compilador que gere o bytecode, e usar um programa chamando a mquina virtual para ento decodificar o bytecode e executar as operaes descritas nele. Claro que, a mquina virtual ter que converter em algum ponto o bytecode em cdigo de objeto, que compatvel com a CPU subjacente. H vrios benefcios em usar a linguagem baseada em bytecode. Uma vantagem significativa a independncia de plataforma. A mquina virtual pode ser instalada em plataformas diferentes que habilitam o mesmo programa binrio em qualquer CPU, contanto que tenha uma mquina virtual compatvel. Claro que, indiferentemente da plataforma na qual a mquina virtual est executando atualmente, o bytecode formado fica o mesmo. Isto significa teoricamente que o desenvolvedor de software no precisa se preocupar sobre a compatibilidade de plataforma. Tudo que eles tm que fazer so prover os clientes com uma verso de bytecode do programa deles.

21

3.5 SISTEMAS OPERACIONAIS


Segundo Eilam, E. (2005), um sistema operacional um programa que administra o computador, incluindo o hardware e aplicaes 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 so 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 so programas que transformam um programa executvel em arquivos textuais que contm cdigo de linguagem assembly de um programa inteiro ou partes dele. Isto um processo relativamente simples considerando que cdigo de linguagem assembly a cartografia textual do cdigo 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 nvel.

3.7 DEPURADORES
O depurador um programa que permite ao desenvolvedor de software observar o programa enquanto est funcionando. As caractersticas bsicas do depurador so a habilidade para fixar pontos de ruptura e a habilidade para localizar por cdigo. Pontos de ruptura permitem os usurios selecionar certa funo ou linha de cdigo em qualquer lugar dentro do programa e instrui o depurador para interromper a execuo do programa uma vez que esta linha alcanada. Quando o programa alcana o ponto de ruptura, o depurador pra e exibe o estado atual do programa. Neste ponto, possvel iniciar o depurador e o programa continuar executando ou comear a traar o programa.

22

Depuradores permitem aos usurios localizar por um programa enquanto estiver executando. O programa executa uma linha de cdigo e ento gerada, permite o usurio observar ou at mesmo alterar o estado do programa. O usurio pode executar a prxima linha ento 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 seo problemtica de cdigo e tentar determinar fontes do problema. Os depuradores apresentam o programa em cdigo fonte, e permitem ao desenvolvedor fixar pontos de ruptura e localizar por linhas, embora o depurador esteja trabalhando de fato com o cdigo de mquina, segundo Eilam, E. (2005).

3.8 DECOMPILADOR
O decompilador est a um passo acima do disassembler. Um decompilador transforma um arquivo binrio executvel em linguagem de alto nvel. A idia tentar reverter o processo de compilao, obter o arquivo de fonte original ou algo semelhante. Na maioria das plataformas, a recuperao atual do cdigo fonte original no realmente possvel. Existem elementos significantes na maioria das linguagens de alto-nvel, porm so omitidos no processo de compilao e impossvel recuperar. Decompiladores so ferramentas poderosas que em algumas situaes e ambientes podem reconstruir um cdigo fonte altamente legvel de um programa binrio, segundo Eilam, E. (2005).

23

4 ASPECTOS LEGAIS
A engenharia reversa pode tambm gerar problemas de legalidade, como uma empresa querendo criar uma cpia de um produto que vende bem. No entanto, a questo legal depende das leis de cada pas. E, mesmo assim, ainda existem pases que no possuem leis especficas sobre o assunto. O debate legal ao redor de engenharia reversa acontece h vrios anos. Isto normalmente revolve ao redor da pergunta de qual o impacto social e econmico 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 sees discutem os aspectos legais dessas aplicaes, com uma nfase nos Estados Unidos , segundo Eilam, E. (2005). Porm nota-se a dificuldade em afirmar quando tal procedimento legal ou no, pois depende de muitos fatores.

4.1 COMPATIBILIDADE
Em tecnologia, especialmente em informtica (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 verso anterior. Segundo Eilam, E. (2005), a engenharia reversa utilizada para tal finalidade produz vrios benefcios, simplificando o processo de desenvolvimento e melhorando as tecnologias existentes. Todavia, quando usada como ferramenta de competio de produtos, a situao torna-se mais complexa. Por exemplo, o roubo de segmentos de cdigos dos concorrentes e sua reproduo integral demonstram claramente a violao dos direitos autorais. Entretanto, quando se utiliza de mtodos de

24

descompilao de programas e recompilao com funcionalidades idnticas mas com cdigos diferentes, torna-se mais difcil sua comprovao. Uma das leis mais conhecidas o Digital Millenium Copyright Act, (DMCA) dos Estados Unidos, aprovado em 1998 que, entre vrias medidas para proteger direitos autorais na informtica, tambm faz restries em relao engenharia reversa. O DMCA considera proibido: Burlar sistemas protegidos por direitos autorais: Isto significa que uma pessoa no pode burlar a tecnologia do Digital Rights Management (DRM), at mesmo para uso pessoal. O desenvolvimento de tecnologias de alterao: Isto significa que uma pessoa no 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 seo, e uma pessoa que usa um keygen viola o item anterior. Um keygen um programa que gera um nmero de srie rapidamente para programas que pedem nmeros consecutivos durante a instalao. Keygens esto (ilegalmente) disponveis on-line para praticamente qualquer programa que requer um nmero de srie. Afortunadamente, o DMCA faz vrias excees nas quais a engenharia reversa permitida. So isenes providas pelo DMCA: Compatibilidade: inverter e evitar tecnologias de DRM podem ser permitidas em circunstncias onde tal trabalho necessrio para a compatibilidade com o produto de software em questo. Por exemplo, se um programa foi codificado com a finalidade de proteo de cpia, um desenvolvedor de software pode decifrar o programa em questo se o nico objetivo for a compatibilidade com o mesmo. Investigao de encriptao: est uma clusula altamente restringida no DMCA, que permite os investigadores de tecnologias de encriptao para evitar tecnologias de proteo de direitos autorais em produtos de

25

encriptao. A reverso s permitida se as tecnologias de proteo interferem com a avaliao da tecnologia de encriptao. Teste de segurana: Uma pessoa pode inverter e pode evitar proteo de direitos autorais de software com a finalidade de avaliar ou melhorar a segurana de um sistema de computador. Instituies educacionais e bibliotecas pblicas: Estas instituies podem evitar uma tecnologia de proteo de direitos autorais para avaliar o trabalho registrado antes de compr-lo. Investigao de governo: No surpreendentemente, as agncias de investigaes do governo no so afetadas pelo DMCA. Regulamento: Podem ser evitadas Tecnologias de DRM com o propsito de regular os materiais acessados por menores na Internet. Assim, um produto terico que no permite monitorao dos acessos e navegao na Internet, pode ser burlado com a finalidade de controlar seu uso por menores. Proteo de privacidade: Produtos que armazenam ou transmitem informao pessoal pode ser revertido e qualquer tecnologia de proteo que eles incluem pode ser alterada. Na Unio Europia, o Eu Copyright Directive, de 2001, similar ao Digital Millenium Copyright Act, porm no to restritivo. S so feitas restries caso o objetivo final da engenharia reversa seja a cpia de algum programa ou quebra de patente com objetivo de lucro. Caso seja para fins acadmicos ou de compatibilidade, princpio no existem restries. Entretanto, alguns pases partem do princpio de que o software comprado propriedade particular e, portanto, pode ser alterado como qualquer outra manufatura. Na Sua, a lei a respeito do assunto bastante curiosa e, de certo modo, polmica. A lei Sua de Concorrncia Desleal de 1986 exige dos competidores a realizao de investimentos em engenharia reversa mesmo quando a tecnologia no seja secreta. Os tribunais suos, porm, tm rejeitado ou limitado severamente a aplicao de tal norma, pela inexistncia de prazo e limites.

26

No Japo, a Lei Japonesa de Concorrncia Desleal de 1993 probe a imitao servil, mesmo no caso de produtos no patenteados, nem protegidos por direitos autorais. A lei japonesa impe limites claros aplicao da norma de apropriao ilcita: o lead time vigora apenas por trs anos; no se protegem as idias e os conceitos tcnicos; e ressalva-se o caso de modificaes ou aperfeioamento tcnico efetuado pelo competidor com base no item copiado; a necessidade de padronizao e compatibilizao de produtos e o uso de elementos de carter estritamente funcional. Ou seja, a proibio de imitao no impede o progresso tcnico, ressalva o domnio das patentes para proteger idias e conceitos, e o interesse social na padronizao e compatibilizao industrial. No Brasil no existe uma lei especfica sobre Engenharia Reversa. Apesar disso, quando ocorre costuma-se proceder de duas maneiras: caso a engenharia reversa no tenha como objetivo a pirataria ou infrao de algum direito autoral, no considerado crime; porm caso contrrio, a Lei N. 9.609, de 19 de fevereiro de 1998 (Lei de Software) e tambm a Lei N. 9.610 de Direitos Autorais de 1998 protege seus autores.

4.2 SO PONTOS FUNDAMENTAIS DA LEI DE SOFTWARE:


Segundo Jnior, J. B. (2006), a definio de programa de computador est no artigo primeiro da lei; O regime de proteo dos direitos de autores de programas de computador, conforme o artigo 2 da lei, o mesmo das obras literrias; No h discusso sobre danos morais quanto ao uso irregular de softwares, ressalvado ao proprietrio o direito de fazer cessar as alteraes 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 subseqente publicao ou criao do software; A proteo aos direitos independe de registro do software; H reciprocidade de reconhecimento de direitos aos estrangeiros domiciliados no exterior, desde que seu pas tambm reconhea os mesmos direitos em relao aos brasileiros e estrangeiros domiciliados no Brasil; Ao autor tambm cabe o direito

27

exclusivo de autorizar ou proibir o aluguel comercial de seu software (aplicvel somente aos softwares cujo objeto do contrato no seja a locao em si); Os programas de computador podero ser registrados em rgos competentes; As informaes para registro do programa de computador devero ser capazes de identific-lo, e so de carter sigiloso, sendo reveladas apenas em razo de interesse do proprietrio dos direitos ou por ordem judicial; segundo Jnior, J. B. (2006). A cpia de um s exemplar para salvaguarda no considerada ofensa a direitos autorais. Portanto, se em nossa empresa possumos 10 licenas legalmente adquiridas de Windows, podemos ter tambm 10 cpias (uma de cada licena), e isso no ser considerado ilegal. Ateno: essas cpias de salvaguarda no podero estar instaladas, sob pena de violao de direitos autorais; Em resumo, podemos dizer que a lei de direitos autorais no tocante rea de informtica veio delimitar a ao criminosa e trazer as sanes civis aplicveis ao contrafator (nome tcnico do pirata). O processo de verificao de violao de diretos autorais usar sempre a lei de software como base, eis que o objeto perseguido a proteo de direitos de autor de programa de computador. Segundo Jnior, J. B. (2006), ele ser, tambm, baseado na lei de direitos autorais, eis que esta define o que o ato de contrafao (artigo 5), assim como a multa civil aplicvel ao contrafator em favor do autor lesado.

4.3 FALHAS DE SEGURANA

4.3.1 Um pouco de histria


Anos atrs, os operadores de um computador ENIAC se depararam com uma coisa curiosa. Um inseto havia ficado preso dentro da mquina e estava atrapalhando o funcionamento da mesma. Da surgiu o termo bug (inseto) que virou sinnimo de

28

falha. Hoje quando se descobre um erro em algum programa, se diz: novo bug descoberto. De l pra c, as coisas evoluram muito, mas os bugs continuam a existir. Muitos deles so frutos da histria do prprio programa ou sistema. O Windows por exemplo. O Windows NT foi construdo a partir do zero, mas o Windows ME no. Desde o incio da criao de sua primeira interface grfica, a Microsoft vm tendo problemas com erros graves em seu sistema operacional. J o sistema Unix, foi criado pelos desenvolvedores da linguagem C, para ser um sistema verstil e poderoso. Para Assuno, M. F. A. (2001), a Internet tambm tm seus problemas ligadas histria de sua origem. Desde que se chamava Arpanet e foi criada pelo exrcito americano para resistir guerra fria, a rede evoluiu muito e foram criados novos servios como E-mail, World Wide Web, Gopher, Wais e outros. Milhes de computadores se juntaram a ela e seus recursos so cada vez mais sofisticados. Mas alguns problemas bem antigos ainda so perturbadores hoje. Uma falha na implementao do TCP/IP (conjunto de protocolos em que a Internet se baseia), por exemplo, possibilita que o ataque de Spoof acontea.

4.3.2 Alguns conceitos importantes


Hackers: Algum que estuda sistemas ou qualquer tipo de conhecimento humano pelo simples desafio de domin-los. No sentido original da palavra, o Hacker algum que usa seus conhecimentos para ajudar outros, direta ou indiretamente. Hackers foram os principais responsveis pelo desenvolvimento da Internet, criaram o Linux, o MP3 e a filosofia do software livre. Atualmente o termo vem sendo muito usado em relao aos Crackers, segundo Morimoto, C.E. (2005). Crackers: O cracker um vndalo virtual, algum que usa seus conhecimentos para invadir sistemas, quebrar travas e senhas, roubar dados, etc. Alguns tentam ganhar dinheiro vendendo as informaes 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 algum de mais maturidade, que ao invs de

29

usar seu conhecimento para destruir tudo que v pela frente, o utiliza para construir coisas, desenvolver novos sistemas (principalmente de cdigo aberto), etc. Para Morimoto, C.E. (2005), outra definio, mais branda, algum que quebra travas de segurana de programas e algoritmos de encriptao, seja para rodar jogos sem o CD-ROM, ou gerar uma chave de registro falsa para um determinado programa, quebrar as travas anti-cpias usadas em alguns softwares ou quebrar o sistema de encriptao do DVD (este ltimo realmente importante, pois permitiu que os usurios do Linux e outros sistemas no Windows pudessem assistir DVDs). Ou seja, nesta definio o Cracker algum na margem da lei, cujas aes ainda so ilegais, embora muitas vezes eticamente justificveis (os usurios tm direito a fazer cpias de CDs legalmente comprados, tem direito de assistir DVDs no Linux e assim por diante). Trojans: O nome trojan uma aluso histria do antigo cavalo de tria, em que o governante da cidade de Tria na antiga Grcia foi presenteado com um cavalo de madeira recheado de soldados inimigos, segundo Assuno, M. F. A. (2001). Possui muitas caractersticas similares aos vrus, tais como: perda de arquivos, falhas na memria, erros em perifricos, etc. A grande diferena que o trojan pode ser considerado um vrus inteligente, pois controlado distncia pela pessoa que o instalou. Esse indivduo ento consegue enxergar o seu computador, podendo realizar desde as mais simples tarefas como mexer o mouse utilizao do seu IP como ponte para outros ataques. Conseguem ficar escondidos em arquivos de inicializao do sistema operacional e se iniciam toda vez que a mquina ligada. Sniffers: Os sniffers ou farejadores so os tipos de programas mais usados para conseguir senhas em uma rede. Eles ficam residentes na memria como um cavalo de tria, analisando todo o trfego que ali passa. Qualquer entrada ou sada de dados capturada, seja em um servidor FTP, uma pgina de chat ou um e-mail 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 Assuno, M. F. A. (2001).

30

Syn-flood: O tipo de ataque usado para gerar o ip spoof. A autenticao por Syn feita em trs vias. Para Assuno, M. F. A. (2001), o ataque consiste em no completar essas trs 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 conexo se estabelecer, mas ele no enviado, fazendo com que a mquina alvo consuma seus recursos ao receber muitos Syns e esperar muitos Acks. O ataque por ping parecido, enviado vrios pings com grandes pacotes fazendo com que um sistema trave. Mas mais difcil 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 no 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 condies de erro) spoofados para centenas, talvez milhares de sites. Enviam-se os pacotes com o endereo IP da vtima, assim fazendo com que ela receba muitos pacotes ping de resposta ao mesmo tempo, causando um travamento total. Ainda no existe uma proteo eficaz contra esse tipo de ataque. Um programa bom (para Windows) que realiza o smurf o WinSmurf, conforme Assuno, M. F. A. (2001). Scanners: So 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 usurio, ou seja, utilizada no processo de verificao da identidade do usurio, assegurando que este realmente quem diz ser. Engenharia social: Mtodo de ataque, onde algum faz uso da persuaso, muitas vezes abusando da ingenuidade ou confiana do usurio, para obter informaes

31

que podem ser utilizadas para ter acesso no autorizado a computadores ou informaes, segundo Vale e Ulbrich, (2004). Vulnerabilidades: uma falha no projeto ou implementao de um software ou sistema operacional, que quando explorada por um atacante resulta na violao da segurana de um computador, para Eilam, E. (2005). Criptografia a arte da escrita oculta usada desde a antiguidade, por exemplo: pelos egpcios na sua antiga escrita. Ela muito importante hoje em dia na internet. Mandar um e-mail confidencial da maneira convencional muito inseguro, ele pode ser interceptado no meio da transmisso ou posteriormente, por isto a necessidade do uso de programas eficientes, como o PGP. Esses programas possibilitam uma espcie de cdigo especial entre voc e o receptor da mensagem, fazendo com que mesmo que algum consiga obt-la no meio do caminho, ela ser impossvel de se ler, segundo Assuno, M. F. A. (2001).

4.3.3 Chaves pblicas e privadas


Em Assuno, M. F. A. (2.001), na dcada de 1970 o padro na criptografia era a criptografia simtrica onde existia uma nica chave (senha) para encriptar e desencriptar, tanto para o emissor quanto para o destinatrio. O grande problema desse mtodo era como transmitir com segurana esta senha. No final da dcada de 70 foi desenvolvido o mtodo da criptografia assimtrica e a tecnologia das chaves pblica e privada. Voc encriptava com a chave pblica do destinatrio e somente ele poderia desencriptar utilizando a sua chave privada e tambm 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 trs requisitos bsicos relacionados aos recursos que o compem: confidencialidade, integridade e disponibilidade.

32

A confidencialidade diz que a informao s est disponvel para aqueles que devidamente autorizados; a integridade diz que a informao no destruda ou corrompida e o sistema tem um desempenho correto, e a disponibilidade diz que o servios/recursos do sistema esto disponveis sempre que forem necessrios. Todos os sistemas tm falhas, segundo Assuno, M. F. A. (2001). Elas consistem em pequenos erros na criao dos programas, possibilitando que crackers os utilizem para tomar o controle de alguma mquina. 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 prprio sistema operacional. Essas falhas por mais insignificantes que paream, podem comprometer a segurana 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 no aqueles cabeludos que fazem o compilador at rir do programador, muitas vezes passam despercebidos e s so descobertos por algum hacker ou analista de segurana. Os erros do Windows, por exemplo. A grande maioria das falhas descobertas so os prprios usurios que descobrem. Os criadores que tm o cdigo fonte e conhecem o programa como a palma da mo rarssimas vezes percebem algum erro. Para ser mais seguro, um programa tm que ser testado de todas as maneiras possveis. Algo que nem sempre feito.

4.3.4 Exemplos de falhas


Algumas falhas so to bobas que difcil de acreditar. Geralmente, no sistema Windows, que de longe o que possui mais falhas. O Windows 98 possui muitos erros, mas trs so interessantes. O primeiro que no consegue executar nem abrir nenhum link com a url c:\con\con. Se voc tentar ir em iniciar e executar, o

33

sistema travar e mostrar a famosa tela azul. Os outros dois so do netbios. O primeiro possibilita que voc acesse o diretrio system do Windows por um compartilhamento de impressora. s mapear o compartilhamento padro 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 algum tentar o primeiro h j consegue acesso rede. O Windows 2000 tambm possui algumas falhas, como deixar o netbios ativo em sua instalao. Saindo um pouco dos sistemas operacionais, alguns programas tambm possuem falhas graves, segundo Assuno, 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 e-mail. Erros no Outlook fazem com que s de receber os e-mails, 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 tambm, como no sendmail e no Apache.

4.3.4.1 Buffer overflows


O buffer overflow um ataque usado h muito tempo e que ainda ser muito usado. Compreende em lotar os buffers (memria disponvel para aplicativos) de um servidor e incluir na sua lista de processos algum programa tal como um keylogger ou um trojan. Todos os sistemas so vulnerveis a buffer overflows e a soluo a mesma, procurar se j existem correes existentes. Novos erros desse tipo surgem todo dia, at o XP j tm alguns. A atualizao do software deve ser contnua. Segundo Assuno, M. F. A. (2001), um dos usos famosos do buffer overflow o telnet reverso. Ele consiste em fazer a mquina alvo conectar-se a um servidor no computador do cracker, fornecendo-lhe um shell (prompt) de comando. O netcat, chamado de canivete suo do TCP/IP, uma espcie de super-telnet, pois

34

realiza conexes por UDP, serve como servidor, entre outras tarefas. Ele o mais utilizado para a realizao do telnet reverso, e pode ser usado tanto na arquitetura NT quanto no Unix. A verso para Windows est disponvel em ftp.technotronic.com . A explorao de cdigo vulnervel a buffer overflow exige alguma habilidade. Entretanto, o conhecimento necessrio para tal tarefa pode ser facilmente adquirido pelo material difundido na rede e experimentao exaustiva. A tarefa de codificar software seguro difcil, mas deve ser tomada com mxima seriedade. Principalmente quando se est desenvolvendo software de segurana ou projetado para ser executado com privilgios de super-usurio ou usurio especial do sistema. Chega a impressionar o nmero de vulnerabilidades a buffer overflow encontradas em software de utilizao ampla, dada a simplicidade das tcnicas em evit-las.

4.3.4.2 Race condition


O Race condition ou condio de corrida mais comum no Unix e no Linux. Consiste em fazer algum programa que rode como root (super-usurio) 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 , servio de e-mail padro do Unix. possvel encontrar falhas at em verses mais recentes.

4.3.4.3 Descobrindo se algum sistema tem falhas


Segundo Assuno, M. F. A. (2001), para o programador experiente mais fcil verificar se um sistema tem falhas, utilizando de recursos de debug que checam por erros de buffer overflow e outros. Para o usurio bem mais difcil descobrir algo, principalmente o usurio comum. O interessante seria visitar pginas especializadas no assunto, que a cada dia publicam novos tipos de erros descobertos.

35

Scanners de vulnerabilidade (ou falhas). Typhon (S funciona em Windows NT/2000/XP): esse scanner excelente pois rpido e d algumas informaes muito boas sobre possveis falhas e desconfiguraes do sistema alvo. No muito completo, mas o ideal para se usar antes do Stealth, que como veremos, inigualvel. Stealth: um dos melhores scanner de vulnerabilidades. um programa de uma empresa brasileira, j ganhou destaque internacional pois consegue identificar cerca de 15.000 falhas em sistemas. Poucos conseguem escapar ilesos a essa potente arma.

4.3.4.4 Utilizando exploits


Exploits so 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 possvel conseguir acesso direto ao interpretador de comandos (ou shell). Permitindo fazer o que quiser com o sistema. Existe tambm 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 segurana publicam os dois juntos. Geralmente vm em cdigofonte C, Perl e alguns poucos em executveis comuns, segundo Assuno, M. F. A. (2001).

4.3.4.5 Instalando patches


Os patches so atualizaes de programas geradas pelos fabricantes. Toda vez que um erro for descoberto, deve-se visitar a pgina do fabricante do programa e baixar a correo. Conforme Assuno, M. F. A. (2001), isso no pode ser feito de ms em ms, e sim no mximo de trs em trs dias. Os erros aparecem muito rapidamente, e um sistema composto de muitos softwares. Todos devem ser checados.

36

interessante tambm assinar uma lista de discusso sobre segurana, assim toda vez que uma falha for descoberta, sero enviados e-mails 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 cdigo fonte s vezes pode ser difcil de distinguir cdigo seguro inofensivo de vulnerabilidades de segurana perigosas.

37

5 TCNICAS DE ENGENHARIA REVERSA

5.1 TCNICAS DE ENGENHARIA REVERSA SEM O CDIGO-FONTE


Segundo Anquetil, N. (2002), a engenharia reversa de software pode ser efetuada por vrios mtodos.Trs grupos principais da engenharia de software so:

Anlise de fluxo de dados: Anlise atravs da observao da troca de informaes que envolvem analisadores de bus e pacotes de sniffers, por exemplo, para "ouvir" dentro do bus de um computador ou uma conexo de rede, revelando o trfico de dados "escondidos". O comportamento dos dados no bus ou na rede podem ento ser analisados para produzir uma nova implementao 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 mquina diretamente do programa. Este cdigo lido e entendido nos seus prprios termos, apenas com a ajuda de mnemonics da linguagem de mquina. Isto funciona em qualquer programa de computador, mas pode levar um bom tempo, especialmente para algum que no esteja acostumado ao cdigo de mquina.

Decompilao: Neste mtodo utiliza-se um decompilador, um programa que tenta recriar o cdigo-fonte em uma linguagem de alto nvel, tendo disponvel apenas o cdigo de mquina.

38

5.2 TCNICAS DE ENGENHARIA REVERSA COM O CDIGOFONTE

5.2.1 Extrao das Informaes


O primeiro trabalho que se deve fazer coletar informaes sobre o sistema a ser estudado. As atividades da engenharia reversa se fazem sobre essas informaes extradas, mais do que sobre o prprio sistema. As informaes podem ser extradas de vrias fontes: o cdigo fonte, a execuo, os dados (por exemplo, em banco de dados), a documentao, ou outras fontes.

5.2.1.1 Cdigo (anlise esttica)


A primeira fonte, o cdigo, a mais usada. A anlise do cdigo chamada tambm de anlise esttica (por oposio anlise dinmica que a execuo do sistema). Ela permite extrair as informaes mais bsicas do sistema: Quais so os componentes bsicos do sistema: arquivos, rotinas, tipos, variveis, classes, etc.; Relaes de definio conectam um componente com seu contedo (onde ele se encontra); Relaes de referncia conectam um componente com aqueles que o usam (se uma rotina A chamar uma outra rotina B. A depende de B porque uma modificao na definio de B pode ter conseqncias sobre a execuo de A). Essas relaes podem ser memorizadas como as relaes de definio/referncia. Na extrao das informaes, gravam-se apenas as informaes que vem diretamente do cdigo, mas depois outras podem ser deduzidas a partir dessas.

39

Ferramentas para fazer essa anlise so chamadas de parser. O parsing a primeira etapa da compilao do cdigo fonte. Para fazer isso, preciso conhecer a sintaxe da linguagem de programao usada. Dependendo das necessidades, pode-se usar parsers especficos que vo procurar s um tipo particular de informao. Por exemplo, num programa Pascal, pode-se extrair o nome de todas as funes definidas com um parser muito simples.

5.2.1.2 Trace de execuo (anlise dinmica)


A anlise esttica pode extrair muitas informaes de um programa, mas nem todas. Por exemplo, qual parte de uma instruo IF realmente usada pode depender dos dados com que o programa foi chamado. Para descobrir esse tipo de informao, precisamos da anlise dinmica, que consiste em executar o programa e monitorar os valores das variveis, quais funes so chamadas, etc.

5.2.1.3 Dados
Os bancos de dados podem ser usados como fonte de informao para ajudar na engenharia reversa de um sistema. Mas a engenharia reversa de dados tambm um trabalho especfico 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 distribudo sobre vrios PCs. Podem ser extrados de um banco de dados: a estrutura, os dados, os relacionamentos e at os relatrios e as interfaces com o usurio.

40

5.2.1.4 Documentao
Chama-se de documentao tudo o que no est usado pelo computador para fazer funcionar o sistema, mas se destina aos engenheiros que usam o cdigo: relatrios, comentrios no cdigo, diagramas da anlise ou do projeto, etc. Como ela se destina aos seres humanos, difcil de ser analisada automaticamente. A abordagem mais usada usar as palavras da documentao. Isso pode permitir extrair os conceitos importantes do domnio de aplicao do sistema. Esta abordagem est baseada sobre a suposio que os conceitos importantes aparecem com mais freqncia na documentao.

5.2.1.5 Outras fontes de informao


Finalmente, possvel usar outras fontes de informao. Por exemplo, para definir sub-sistemas, poderamos procurar quem escreveu cada poro do cdigo. razovel pensar que se duas partes do cdigo foram desenvolvidas pela mesma pessoa elas tem maior probabilidade de pertencer ao mesmo sub-sistema. Outras informaes seriam: quais programas so chamados, em que linguagem so escritos, tipo de mquina que roda os programas.

5.2.2 Tratamento das informaes


Essas so algumas das principais atividades envolvidas na engenharia reversa. Essas atividades usam as informaes que foram extradas do sistema. Podemos resumir o objetivo geral dessas atividades da seguinte forma: elas tentam abstrair informaes de mais alto nvel de abstrao das informaes do sistema. O que quer dizer que elas vo eliminar os inumerveis detalhes. O problema decidir nessa massa de informaes o que importante ou no, segundo Anquetil, N. (2002).

41

5.2.2.1 Anomalias no cdigo


Num software legado, o cdigo pode conter vrias anomalias, como partes do programa que nunca podem ser executadas (cdigo morto) e trechos de cdigo que foram copiados e levemente modificados, denominados clones. Essas anomalias complicam o cdigo 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 cdigo morto, e no caso dos clones possvel modificar o cdigo para suprimi-los ou ento fazer comentrios no cdigo sobre a existncia de clones.

5.2.2.2 Encapsulamento
O encapsulamento uma tcnica de re-engenharia mais do que de engenharia reversa. Em vez de reestruturar um sistema, ela prope esconder o velho cdigo dentro de uma nova camada.

5.2.2.3 Slicing
Slicing (fatiar) uma tcnica de decomposio do cdigo de acordo com a utilizao das variveis. O slicing de uma parte do cdigo consiste em extrair dela todas as instrues que tm uma influncia sobre o valor de uma varivel definida a um ponto definido do cdigo. Ajuda na descoberta da origem dos bugs, limitando a pesquisa nas nicas instrues realmente necessrias.

5.2.2.4 (Re-)Modularizao

42

A (re-)modularizao a decomposio de um conjunto de componentes de software em sub-partes (os mdulos). Em engenharia de software, normalmente, se espera que os mdulos tenham uma forte coeso interna e um pequeno acoplamento com o exterior. Essa atividade de agrupar arquivos em sub-sistema no trivial. Um sistema legado pode ser composto de milhares de arquivos, em vrias linguagens de programao (por exemplo: uma linguagem procedural, assembly, dados e alguns scripts para compilaes e execues). Para agrupar os componentes so utilizados algoritmos que medem as distncias entre os componentes com base em informaes extradas do sistema. Existem muitos algoritmos de agrupamento (clustering) diferentes. Os mais tpicos so:

Algoritmo por construo: so os mais rpidos porque trabalham num passe nico. Os componentes so introduzidos um depois do outro. Agrupando um novo componente com um mdulo existente. Algoritmos por otimizao: comeam com uma partio do conjunto de componentes e tentam melhorar esta partio usando heursticas para medir a qualidade desta. Algoritmos hierrquicos: constroem uma hierarquia de mdulos e no necessitam de informaes do usurio. Segundo Anquetil, N. (2002), os algoritmos apresentam dois problemas principais:

O resultado pode ser difcil de entender; Eles agrupam todos os componentes segundo algumas restries. Se as restries forem erradas, o resultado tambm ser. O resultado desta tcnica globalmente bom. Mas sempre h detalhes errados em alguns mdulos. Esses algoritmos so bons quando existem muitos componentes para tratar e como uma primeira abordagem para desbravar o sistema.

43

5.2.2.5 Reconhecimento de Clichs


Um clich ou plano um padro que descreve uma maneira geral de implementar um conceito de programao. A atividade de reconhecimento de clichs trabalha com um banco de clichs e procura esses clichs no cdigo. A idia que um clich implementado com vrias linhas de cdigo. Reconhecer um clich pode simplificar o cdigo porque isso vai substituir um s conceito a essas linhas. O reconhecimento de clich sofre de vrias dificuldades: Construo do banco de clichs; Dualidade, preciso e cobertura (a descrio do clich deve ser geral, porm corre-se o risco de ocorrerem falso-positivos); Tempo de execuo; Clichs deslocalizados ou interligados (podem existir outras instrues entre as que implementam o clich ou dois clichs cujas instrues esto misturadas).

5.3 TCNICAS COMPLEXAS DE ENGENHARIA REVERSA

5.3.1 Anlise de propagao

Utilizada em manuteno de software, consiste no estudo do cdigo para descobrir as conseqncias de uma modificao.

5.3.2 Objetizao

44

Consiste na extrao da representao orientada a objetos de um cdigo procedural. Baseia-se: nas funcionalidades: isolar uma funcionalidade do cdigo e construir um objeto para encapsul-la; nos dados: procurar tipos estruturados que representem conceitos da aplicao. Agrupam-nos com as rotinas para formar classes. e os objetos: fazer uma anlise orientada a objetos do domnio do software para descobrir os objetos pertencentes.

5.3.3 Reengenharia de interfaces


Seu objetivo disponibilizar uma nova interface ou reorganizar a existente para facilitar a utilizao de funcionalidades j existentes. Possui duas atividades: identificao das informaes envolvidas na execuo de uma tarefa e a identificao da sequncia de mensagens necessria para cumpri-la.

5.4 ENGENHARIA REVERSA PARA SEGURANA


Para algumas pessoas a conexo entre segurana e engenharia reversa pode no ser to clara. A engenharia reversa est relacionada a vrios aspectos diferentes na segurana de computador. Por exemplo, engenharia reversa foi empregada em pesquisa de encriptao, o investigador inverte um produto encriptado e avalia o nvel de segurana deste. Tambm usada com relao a software malicioso, em ambos os casos: pelo desenvolvedor de malware e os que desenvolvem seus antdotos.

5.4.1 Software malicioso


Segundo Eilam, E. (2005), a Internet mudou completamente a indstria de computador e o aspectos de segurana de informao em particular. Software

45

malicioso, tal como vrus e worms, espalham mais rpido em um mundo onde milhes de usurios esto conectados diariamente Internet. H 10 anos, um vrus normalmente teria que se copiar a um disquete e ser carregado em outro computador para que o vrus se espalhasse. O processo de infeco era bastante lento e a defesa era muito mais simples porque os canais de infeco eram poucos e exigia a interveno humana para espalhar. Isso histria antiga, a Internet criou uma conexo virtual em quase todos os computadores da terra. Hoje em dia, vrus modernos podem se espalhar automaticamente a milhes de computadores sem qualquer interveno humana. A engenharia reversa extensivamente usada em ambos os fins da cadeia de software maliciosa. O desenvolvedor de software malicioso usa freqentemente a reverso para localizar vulnerabilidades em sistemas operacionais e outros softwares. Tais vulnerabilidades podem ser usadas para penetrar a defesa do sistema, estendendo a infeco, normalmente atravs da Internet. Alm da infeco, s vezes eles empregam tcnicas de engenharia reversa para localizar vulnerabilidades de software que permitem que um programa malicioso ganhe acesso informao sensvel ou at mesmo tome o controle total do sistema. O outro lado da cadeia diz respeito ao desenvolvedor de software antivrus, pois permite a anlise de todo programa malicioso que se tem contato. Eles usam tcnicas reversas para localizar os passos que o programa leva e avalia o dano que possa causar ou a taxa esperada de infeco, como poderia ser removido de sistemas infetados e se a infeco pode ser evitada completamente.

5.4.2 Mtodos de proteo


Alguns cuidados precisam ser levados em considerao para garantir a segurana de um sistema. As boas prticas de programao, mesmo sem se considerar a segurana em si, garantem um cdigo mais robusto, confivel e, conseqentemente, seguro, segundo Albuquerque (2002). Cdigo seguro no significa necessariamente segurana em cdigo ou cdigo que implemente alguma funo para segurana,

46

mas cdigo que escrito para suportar os atacantes maliciosos. O cdigo seguro tambm cdigo robusto, Howard (2002). Albuquerque et al. (2002) considera que o cdigo seguro muita vezes implica em certa perda de desempenho. Entretanto, ressalva que a perda de performance pode ser compensada por um hardware mais rpido, o contrrio, porm, no verdadeiro. A perda de performance pode ser compreendida por sugestes como as de Viega et al. (2003): assuma que toda entrada de dados culpada at que se prove o contrrio ou quanto mais voc compreende o dado, mais facilmente voc o filtrar. Torres (2003) tambm cauteloso ao tratar as entradas de dados, especialmente em uma arquitetura cliente-servidor e, sobretudo, nas solicitaes provenientes de ambientes inseguros ou pouco controlado como o caso da Internet. Existem trs fatos a serem considerados no desenvolvimento de software mais seguro: processo repetvel, educao e mtrica, segundo Lipner (2004). Segundo Lipner et al., importante que se tenha na organizao um grupo responsvel pelo desenvolvimento e evoluo das melhores prticas de segurana; melhorias no processo, que sirva de fonte de conhecimento para a organizao de uma forma geral e que faa a Reviso Final de Segurana (em ingls FSR Final Security Review) antes da liberao da release. Enquanto muitas organizaes preferem ter uma equipe central de segurana, outras optam por contratar terceiros, a experincia demonstrou na viso de Lipner et al. que a existncia de um grupo interno de segurana um fator vital para o sucesso na implementao de um ciclo de vida de desenvolvimento. A experincia com segurana de software tem demonstrado que um conjunto de princpios de alto nvel para desenvolver software mais seguro precisam ser estabelecidos. A Microsoft refere-se a esses princpios como SD3+C Seguro por Design, Seguro por Default, Seguro na Distribuio e Comunicao. Uma descrio sucinta desses princpios seria: Seguro por Design: Uma arquitetura pode ser desenhada para utilizar criptografia 3DES (triplo DES) para dados sensveis antes de serem armazenados no banco de dados e o uso do protocolo SSL para transportar o

47

dado atravs da Internet. Todo cdigo bastante verificado em busca de vulnerabilidades comuns usando ferramentas manuais e automticas. A modelagem de ameaas criada durante o processo de design do software. Seguro por Default: O software empacotado com medidas de segurana e os componentes potencialmente vulnerveis so desativados. Seguro na Distribuio: Atualizaes de segurana so fceis de serem localizadas e instaladas eventualmente so instaladas automaticamente e ferramentas so disponibilizadas para o levantamento e gerenciamento dos riscos de segurana em toda a organizao. Comunicao os desenvolvedores precisam estar preparados para descobrir vulnerabilidades nos produtos e comunicar aberta e responsavelmente os usurios finais e/ou administradores para ajud-los a tomarem as aes preventivas necessrias.

5.4.2.1 Criptografia
Soares et al. (1995) comenta que "a criptografia surgiu da necessidade de se enviar informaes sensveis atravs de meios de comunicao no confiveis, ou seja, em meios onde no possvel garantir que um intruso no ir interceptar o fluxo de dados para leitura (intruso passivo) ou para modific-lo (intruso ativo). A forma de contornar esse problema utilizar um mtodo que modifique o texto original da mensagem a ser transmitida (texto normal), gerando texto criptografado na origem, atravs de um processo de codificao definido por um mtodo de criptografia. O texto (ou a mensagem) criptografado ento transmitido e, no destino, o processo inverso ocorre, isto , o mtodo de criptografia aplicado agora para decodificar o texto criptografado transformando-o no texto normal original". "Existem basicamente dois tipos de criptografia: a simtrica e a assimtrica" Albuquerque (2002). Jlio Csar empregava um mtodo de criptografia que consistia em substituir as letras de uma mensagem pela terceira letra aps sua posio no alfabeto (sendo a sucessor de z) Tanenbaum (1989). Esse um exemplo de criptografia simtrica ou baseada em chave secreta, pois a mesma chave ser

48

usada para cifrar e decifrar a mensagem. O problema clssico dessa soluo a dificuldade de entregar a chave de forma segura a quem vai decifrar a mensagem, segundo Rufino (2002). Existem diversos algoritmos conhecidos de criptografia simtrica, 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 assimtricas baseado na idia que o momento de maior vulnerabilidade da chave quando ela est em trnsito, Rufino (2002), Disnei (2002). Em 1976, Diffie e Hellman (1976) propuseram um mtodo que revolucionou os sistemas de criptografia. Baseado na utilizao de chaves distintas: uma para codificao (E) e outra para decodificao (D), tal que a derivao de D a partir de E fosse, em termos prticos, seno impossvel, pelo menos muito difcil de ser realizada. Portanto, o que uma cifrasse somente a outra poderia revelar. Dessa maneira, uma poderia ser tornada pblica 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 assimtrica ou de chave pblica de uso prtico, os mais comuns so o RSA e as Curvas Elpticas. O RSA, cujo nome deriva das inicias dos autores Rivest, Shamir e Adleman (1978), baseia-se na dificuldade de fatorar nmeros muito grandes. Acreditava-se em 1977 que uma mensagem criptografada pelo RSA-129 levaria milhes de anos para ser quebrada Gardner (1977). Foi quebrada em 1994 usando computao distribuda Leutwyler (1994), Lima (2002).

5.4.2.2 Privacidade
Albuquerque et al. (2002) explica que:
[...] privacidade a capacidade de um usurio realizar aes em um sistema sem que seja identificado. completamente diferente de confidencialidade, que define que apenas usurios autorizados podem ter acesso determinada informao.

49

Um exemplo de sistema que emprega privacidade como atributo essencial o usado pelo processo eleitoral brasileiro, no qual no pode haver forma de ligao entre o eleitor e seu voto. O Common Criteria for Information Technology Security Evaluation (Critrio Comum para Avaliao de Segurana da Tecnologia da Informao) o nome do padro 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 critrios fixos que permitem especificar a segurana de uma aplicao de forma no ambgua a partir de caractersticas do ambiente da aplicao e definir formas de garantir a segurana da aplicao para o cliente final. As formas de privacidades destacadas pelo Common Criteria so: Anonimato - garante que um usurio possa usar um recurso ou servio sem ter sua identidade revelada. Pseudnimo - garante que um usurio possa usar um recurso ou servio sem ter sua identidade revelada, porm suas aes so rastreadas e reveladas, geralmente, em situaes especiais. Portanto, permite a responsabilizao e privacidade ao mesmo tempo. Se usado com no-rastreamento, para cada ato deve ser usado um pseudnimo diferente. No-rastreamento - garante que um usurio possa fazer uso de vrios recursos e servios sem que outros possam lig-lo a esses usos. Invisibilidade - garante que um usurio possa usar um recurso ou servio sem que outros, principalmente terceiros, possam saber que o recurso ou servios est sendo usado.

5.4.3 Tcnicas Anti-reverso


Algumas aplicaes tm uma necessidade especial por medidas de anti-reverso. Um excelente exemplo a tecnologia de proteo de cpia e a administrao de tecnologia de propriedade digital. Prevenir ou obstruir a quebra de tecnologias de proteo um passo crucial de criar meios efetivos de proteo.

50

Segundo Eilam, E. (2005), algumas plataformas de desenvolvimento de software realmente necessitam de medidas anti-reverso, porque caso contrrio o programa pode ser mesmo facilmente convertido numa representao prxima do cdigo fonte. Isto verdade para a maioria das plataformas baseadas em bytecode como a Java e .NET, e a razo de possurem tantas obstrues de cdigo para tais plataformas (entretanto tambm possvel programas de obstruo que foram compilados num processador de idioma nativo da mquina). Um bloqueador uma ferramenta automatizada que reduz a legibilidade de um programa modificando ou eliminando certa informao. Existem vrias formas de evitar a engenharia de software, cada uma com sua vantagem e desvantagem. Pode-se utilizar uma ou vrias formas combinadas.

5.4.3.1 Eliminao de Informao Simblica


O primeiro passo e mais bvio em impedir a reverso eliminar qualquer informao textual bvia do programa. Em um programa compilado baseado em bytecode regular, isto simplesmente tira toda a informao simblica do programa executvel. Segundo Eilam, E. (2005), em programas baseados em bytecode, os executveis contm freqentemente grandes quantias de informao simblica interna como nomes de classe, nomes de objetos globais, etc. Isto comum em linguagens como Java e plataformas como .NET. Esta informao pode ser extremamente til na engenharia reversa, por isto deve ser eliminada de programas onde a reverso uma preocupao. Outra caracterstica fundamental de quase todo ofuscador de bytecode renomear todos os smbolos em sucesses sem sentido de caracteres.

5.4.3.2 Encriptao de cdigo de programa

51

um mtodo comum para prevenir a anlise esttica. realizado codificando o programa em algum ponto depois da compilao (antes de ser entregue ao cliente) e embutindo algum tipo de desencriptao codificada dentro do executvel. Infelizmente, esta alternativa normalmente cria nada mais que uma inconvenincia para o analista hbil, porque na maioria dos casos tudo que o desencriptador requer est no arquivo executvel.

5.4.3.3 Ofuscao de Programa


um nome genrico para vrias tcnicas que so apontadas em reduzir a vulnerabilidade do programa a qualquer tipo de anlise esttica como o processo de engenharia reversa manual. Isto realizado modificando o plano do programa, lgica, dados e organizao, de certo modo isso mantm a funcionalidade idntica, porm menos legvel. H muitas formas diferentes de obstruo, segundo Eilam, E. (2005).

5.4.3.4 Transformao de dados


uma tcnica de ofuscao que focaliza a estrutura de dados do programa. Pois entender a estrutura de dados permite conhecer como ele trabalha.

5.4.3.5 Embutir cdigo antidebugger


outra tcnica comum de impedir a anlise por programas de depurao para determinar detalhes. A idia intencionalmente executar operaes que danificariam de alguma maneira ou incapacitariam um depurador de obter informaes sobre o sistema. Algumas destas aes 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

usurio presente. Existem vrios programas anti-depurao e muitos deles so especficos para cada plataforma.

5.4.3.6 Mudana no fluxo de controle


So transformaes que alteram a ordem e o fluxo de um programa com a finalidade de reduzir a legibilidade humana. O controle nas transformaes de fluxo so categorizadas como transformaes de computao, transformaes de agregao, e ordenao. As transformaes de computao so as que reduzem a legibilidade do cdigo, modificando a estrutura de fluxo de controle original do programa, de modo que traga um programa funcionalmente equivalente, porm mais difcil de traduzir em linguagem de alto-nvel. Isto pode ser feito removendo o controle da informao do fluxo do programa ou somando ao fluxo de controle novas declaraes que complicam o programa e no podem ser traduzidas facilmente em linguagem de alto-nvel. Transformaes de agregao destroem a estrutura de alto-nvel do programa quebrando as abstraes de alto-nvel criadas pelo programador enquanto o programa estava sendo escrito. A idia bsica quebrar tais abstraes assim que a organizao de alto-nvel do cdigo ficar ilegvel. Transformaes de ordenao so transformaes menos poderosas, pois reordenam a ordem das operaes em um programa de forma que sua legibilidade seja reduzida.

53

6 FERRAMENTAS DE ENGENHARIA REVERSA

6.1 IDA Pro

Fig. 3 Software IDA Pro.

IDA Pro (Interactive Disassembler) um software avanado que tem como caractersticas: anlise de cdigo hostil, de vulnerabilidades, pesquisa e engenharia reversa. Possui multiprocessador, disassembler e depurador, funciona tanto em Windows quanto Linux. Suporta uma variedade de formatos de executveis para diferentes processadores e sistemas operacionais. Ele tambm pode ser usado como um depurador PE para Windows, Mac OS X Mach-O, e Linux Executveis ELF. Embora IDA desempenhe um elevado grau automtico de anlise de cdigo, em certa medida, alavancando referncias cruzadas entre cdigo sees, o conhecimento dos parmetros das chamadas API, e outras informaes, centrada no uso interativo. Um usurio ter incio com uma lista gerada automaticamente da desmontagem e, em seguida, renomea, anota, ou adiciona informaes lista, at que se torne claro seu funcionamento, criando um modelo de engenharia reversa. Criado como uma aplicao shareware por Ilfak Guilfanov, foi mais tarde transformado em um produto comercial por DataRescue, uma empresa belga.

54

6.2 VB Decompiler

Fig. 4 Sofware VB Decompiler.

VB Decompiler - um descompilador de programas (executveis, DLL ou OCX) criados em Visual Basic 6.0. Os programas criados pelo Visual Basic 6.0 podem ser compilados nas opes P-Code ou Codigo Nativo. Como a opo P-Code monta comandos de alto nvel, existe a real possibilidade de descompilar um executvel at chegar ao cdigo fonte (mas como regra, nome de variveis, funes, etc. no sero descompilados). VB Decompiler restaura muitas instrues em P-Code e fornece a opo de inseri-las em um projeto do Visual Basic, criado automaticamente. O descompilador ir simplificar o problema do aprendizado da anlise algortmica e parcialmente resgatar o cdigo fonte original. Se um programa foi compilado em Cdigo Nativo, a restaurao das instrues de mquina iniciais no pode ser garantida. Mas nesse caso, VB-Decompiler pode tambm ajudar na anlise do programa. Ele contm um poderoso "Disassembler"

55

que suporta comandos no Pentium Pro incluindo MMX e SSE e permite desmontar qualquer funo. O software VB-Decompiler possui tambm um analisador de cdigo que procura todas as chamadas de funo API. Outro recurso disponvel a "Referncia de Strings", uma lista com todos os textos contidos no executvel (aps a descompilao). Em geral, VB-Decompiler pode ser bastante til na anlise de programa e especialmente recomendado para os casos de perda do cdigo fonte ou restaurao parcial do projeto. Para iniciar a descompilao voc precisa selecionar um programa (executvel EXE, DLL ou OCX) clicando em Open VB program no menu File. Selecione a pasta que contm o arquivo executvel e abra-o. O software confirmar a descompilao. Pressione SIM (YES) para iniciar a descompilao 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 boto Decompile (Descompilar). Se for necessrio gerar o projeto para Visual Basic 6.0 para facilitar a anlise, ser preciso selecionar o menu File, "Save decompiled project" e selecionar a pasta que conter o novo projeto (incluindo funes e mdulos), exceto arquivos forms frx que salvam os cones de programas, objetos de formulrios, grficos e outros dados binrios que sero gerados automaticamente. Para os programadores em Visual Basic, possvel proteger o seu cdigo da descompilao. Para isso, VB-Descompiler contm um "obfuscator" que pode deletar o nome de todas as funes, forms, mdulos e objetos, incluindo diferentes tipos de assinaturas no arquivo executvel (EXE). Isso far com que a anlise de descompilao seja muito complicada. Outros descompiladores no conseguiro descompilar. Para adicionar esta proteo a seus programas, abra o seu programa com o VB-Descompiler e em seguida clique em Tools -> Obfuscate. Este procedimento rpido e seguro, sendo extremamente recomendado como medida preventiva de segurana.

56

6.3 Understand for Delphi

Fig. 5 Software Understand for Delphi.

Understand for Delphi uma ferramenta que suporta todas as verses da linguagem Delphi e de Turbo Pascal da Borland. Tambm suporta a ISO 7185: 1990 (tambm conhecida como Unextended Pascal) com as extenses DEC Pascal. Tambm pode habilitar suporte para Ingres embedded SQL statements. O projeto do banco de dados armazenado num formato binrio proprietrio. 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 contm informao sobre as entidades e suas relaes. O banco de dados permite vrias janelas para facilitar sua utilizao. Estas so divididas em quatro tipos:

57

Informao: 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, funo, procedimento, tarefa)

Espetculo: mostra a origem de um determinado link. Possibilitando descobrir como a informao no cdigo de fonte est relacionada ou ligada a outra informao.

6.4 MTODO FUSION-RE/I

Fig. 6 Viso geral do mtodo FUSION-RE/I. Masiero, P. C. (1995).

58

O mtodo de engenharia reversa Fusion-RE/1 (Fusion-Reverse Engineering / Interface) desenvolvido no ICMC-USP, baseia-se nos conceitos e idias de engenharia reversa orientada a objetos, e fornece mecanismos para abstrair vises funcionais (modelos de anlise de sistemas de acordo com o mtodo Fusion de Coleman e outros (1996)) e vises estruturais partindo, inicialmente, dos aspectos operacionais e de dados disponveis na interface usurio-computador. O mtodo FUSION-RE/I constitudo de duas etapas: 1. Etapa recuperar vises funcionais: parte-se de consideraes lgicas, obtidas por meio de aspectos operacionais e vises de dados disponveis via interface, para a recuperao de vises funcionais do sistema, ou seja, a abstrao da funcionalidade do sistema, representada por meio dos modelos de ciclo de vida, de operaes e de objetos do sistema. 2. Etapa recuperar vises estruturais: parte-se de consideraes fsicas, obtidas por meio do cdigo-fonte, e das vises funcionais, para a recuperao de vises estruturais do sistema, ou seja, a identificao dos procedimentos que implementam as operaes da interface do sistema, representados atravs dos quadros de chamadas de procedimentos e de operaes-procedimentos de implementao.

Fig. 7 - Sntese do mtodo de Engenharia Reversa FUSION-RE/I.

59

7 CONCLUSO
A pesquisa teve por objetivo geral propor a utilizao da engenharia reversa como ferramenta de proteo no desenvolvimento de software. A partir dos conceitos presentes, conclui-se que as tcnicas adotadas atualmente, ao esquecerem o uso da segurana, permitem que os sistemas estejam acessveis a todo tipo de contaminao. Para tal, atravs da reviso de literatura, demonstra que so fatores preponderantes, o uso de procedimentos que tornem o software confivel, seguro, disponvel. Dentro desse escopo, quanto aos objetivos especficos, pode-se destacar a identificao dos conceitos de engenharia reversa e seus aspectos legais. O exame das falhas de segurana de software e suas conseqncias, entre outras. Bem como a apresentao das principais tcnicas de engenharia reversa e de mtodos de proteo utilizados segundo a bibliografia estudada. Porm, foram identificadas algumas dificuldades durante a elaborao desta pesquisa. Entre elas, citam-se a complexidade do assunto em relao s implicaes legais do uso da engenharia reversa devido a sua interpretao e critrios de cada pas; bem como da quantidade de ferramentas disponveis para avaliao, nem sempre confiveis ou de carter acadmico; alm do grande volume de informaes sobre o tema, s vezes conflitantes entre si. Portanto, o presente trabalho no tem a pretenso de esgotar o assunto, pois existe muito material pouco explorado, abordando um conjunto de processos especficos. Todavia, a generalizao dos resultados no fica comprometida, devido s peculiaridades da pesquisa. Quanto s limitaes da pesquisa, um aspecto a ser considerado diz respeito metodologia utilizada, de reviso bibliogrfica e testes de softwares, Para trabalhos posteriores, sugere-se a implementao do tema proposto, aplicando-o dentro dos outros contextos organizacionais e da utilizao de metodologias de pesquisa complementares, entre elas a quantitativa. Sugerem-se pesquisas que identifiquem

60

as funes desempenhadas pouco estruturadas em uma organizao e os fluxos de informao nem sempre claros e perceptveis. Espera-se que, medida que os desenvolvedores de software utilizem a engenharia reversa intensamente, investigaes futuras possam analisar estes pontos, bem como estabelecer um referencial para a criao de legislao especfica do assunto, alm de determinar o impacto econmico do uso ilegal da engenharia reversa.

61

8 REFERENCIAS BIBLIOGRAFICAS
ALBUQUERQUE, R; RIBEIRO, B. Segurana no Desenvolvimento de Software, Editora Campus, 2002. ANQUETIL, N., Engenharia Reversa, COOPE, UFRJ, Rio de Janeiro, 2002. ASSUNO, M.F.A., O guia do hacker brasileiro, 2001. BIGGERSTAFF, T. Design Recovery for Maintenance and Reuse. IEEE Computer, v.22, n.7, p-36-49, 1989. CHIKOFSKY, E.J.; CROSS II, J.H. Reverse Engineering and Design Recovery: A Taxonomy. IEEE Software, v.7, n.1, p.13-17, 1990. COLEMAN, D, et al. Desenvolvimento Orientado a Objetos: O Mtodo Fusion. Ed. Campos, Rio de Janeiro, 1996. COSTA, R.M. Um mtodo de engenharia reversa para auxiliar a manuteno de software. Dissertao (mestrado). ICMC-USP, So Carlos, 1997. DIFFIE, W.; HELLMAN, M. E. New Directions in Cryptography, IEEE Trans. on Inform. Theory, Vol IT-22, Novembro, 1976. DISNEI, Aplicaes de Curvas Elpticas em Criptografia, III Seminrio de Informtica - Segurana da Informao, Instituto Metodista Bennett e Instituto Militar de Engenharia, 2002. EILAM, E., Reversing: Secrets of Reverse Engineering. Wiley Publishing, Inc., 2005. FELTRIM, V. D., Apoio Documentao de Engenharia Reversa de Software por meio de Hipertextos, So Carlos, 1999. Dissertao (Mestrado em Cincias de Computao e Matemtica Computacional) Instituto de Cincias Matemticas e de Computao USP So Carlos. GARDNER, M. Mathematical Games: A New Kind of Cipher that Would Take Millions of Years to Break, Scientific American 237, Agosto, 1977. HARANDI, M.T.; NING, J.Q. Knowledge-base program analysis. IEEE Software, 7: p.74-81, 1990. HOWARD, M.; LEBLANC, D. Writing Secure Code, Microsoft Press, 2002. ISO JTC 1/SC 27 Commitee ISO/IEC 15408-1:1999 Information Technology Security Techniques - Evaluation Criteria for IT Security - Part 1: Introduction @ General Model, ISO Online Catalogue, 1999.

62

JNIOR, J. B., Legislao aplicada Informtica: livro didtico. Palhoa: UnisulVirtual, 2006. LEUTWYLER, K. Superhack: Forty Quadrillion Years Early, a 129-Digit Code is Broken, Scientific American 271, 1994. LIMA, A. P. Algoritmos de Chave Pblica: Estado da Arte, III Seminrio de Informtica - Segurana da Informao, Instituto Metodista Bennett e Instituto Militar de Engenharia, 2002. LIPNER, S.; HOWARD, M. The Trustworthy Computing Security Development Lifecycle, IEEE Annual Computer Security Applications Conference, 2004. MASIERO, P. C.; Anlise Orientada a Objetos: Uma Introduo ao Mtodo Fusion. In: IX Simpsio Brasileiro de Engenharia de Software. Documento preparado como apoio ao tutorial homnimo, Recife, 1995. MORIMOTO, C.E., Dicionrio Tcnico de Informtica, 3a. ed., 2005. (http://www.guiadohardware.net) OXFORD, Dictionary of Computing Oxford, University Press, 1986. PRESSMAN, R.S. Engenharia de Software. 3a. ed., Makron Books, 1995. RIVEST, R. L., SHAMIR, A.; ADLEMAN, L. On a Method for Obtaining Digital Signature and Public Key Cryptosystems, Commun, ACM, Vol 21, Fevereiro, 1978. RUFINO, N. M. O. Segurana Nacional - Tcnicas e Ferramentas de Ataque e Defesa de Redes de Computadores, Novatec Editora, 2002. RUGABER, S. Program Comprehension for Reverse Engineering. In: AAAI Workshop on AI and Automated Program Understanding, San Jose, California, p.106-110. July 1992. (http://www.cc.gatech.edu/reverse/papers.html) SALEH, K.; BOUJARWAH, A. Communications Software Reverse Engineering: A Semi-Automatic approach. Information and Software Technology, Oxford, n.38, p.379-390, 1996. SOARES, L. F. G.; LEMOS, G.; COLCHER, S. Redes de Computadores - Das Lans, Mans e Wans s Redes ATM, Editora Campus, 1995. TANENBAUM, A. S. Computer Networks, Prentice Hall, 2a. Edio, 1989. TORRES, D. Segurana Mxima de Software, Brasport, 2003. VIEGA, J.; MESSIER, M. Secure Programming Cookbook for C and C++, O'Reilly, 2003.

63

VALE, J.; ULBRICH, H. C. Universidade H4CK3R, Digerati Books, 4a. Edio, 2004.