Beruflich Dokumente
Kultur Dokumente
ESCOLA SUPERIOR ABERTA DO BRASIL ESAB CURSO LATO SENSU EM ENGENHARIA DE SISTEMAS
VITRIA 2008
VITRIA 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
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
TCNICAS COMPLEXAS DE ENGENHARIA REVERSA ........................... 43 Anlise de propagao .......................................................................... 43 Objetizao ............................................................................................ 43 Reengenharia de interfaces ................................................................... 44
ENGENHARIA REVERSA PARA SEGURANA ......................................... 44 Software malicioso................................................................................. 44 Mtodos de proteo ............................................................................. 45 Tcnicas Anti-reverso .......................................................................... 49
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
1 INTRODUO
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.
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.
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
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.
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.
21
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.
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.
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.
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).
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.
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.
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.
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.
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
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
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.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.
41
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
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.
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.
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.
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.
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.
52
usurio presente. Existem vrios programas anti-depurao e muitos deles so especficos para cada plataforma.
53
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
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
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.
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.
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.