Copyright by: Ricardo C. Zímmerl' - Todos os direitos reservados.
A cópia de todo ou parte deste artigo só é permitida com a citação expressa do autor e fonte.
www.ITABRA.com

VÍRUS
[Escrito em 2003 publicado na revista PCExpert nº43 da qual foi matéria de capa]

Continuando o assunto de meu artigo da edição anterior, desta vez irei falar sobre Vírus de computador. Antes, porém, quero ressaltar: "Tenha sempre em mente que nem tudo que acontece de errado com seu computador, sistema ou arquivos é causado por vírus, worms ou ferramentas hackers. Muitas vezes os problemas são causados por erros do próprio usuário, falhas de programa, falhas de hardware e incompatibilidade entre arquivos de sistema", portanto, sem paranóia, vamos entender o que são e o que fazem esses programas capazes de se anexar a outros programas de forma automática e que são classificados como: "Vírus de computador".

Um pouco de história
A melhor forma de entendermos algo é compreendendo desde o princípio, por isso vamos analisar resumidamente a história do Vírus de computador.
O conceito de programa autocopiante foi estabelecido pela primeira vez pelo cientista Húngaro John von Neumann em 1949 em seu trabalho "Theory and Organization of Complicated Automata". Em 1959, H. Douglas McIlroy, Victor Vysottsky, e Robert Morris, programadores dos laboratórios Bell, inventam o jogo "Core Wars", em seus IBM 360, neste jogo pequenos programas tentavam Hackear, invadir ou destruir outros programas. A descrição da ameaça dos vírus foi ilustrada nos anos 70 nas histórias de ficção científica de David Gerrold.
O primeiro programa que poderia receber na prática a classificação de vírus foi o "Elk Cloner" (1981), um programa que infectava os disquetes do Apple II (veja o código-fonte no fim desse artigo). Os disquetes do Apple II vinham com o sistema operacional (DOS - Disk Operational System) e o vírus, quando infiltrado, exibia na tela a seguinte "poesia":

Elk Cloner: The program with a personality

It will get on all your disks
It will infiltrate your chips
Yes it's Cloner!

It will stick to you like glue
It will modify ram too
Send in the Corner!

Em sua tese de doutorado, no ano de 1983, Fred Cohen (http://all.net/oldindex.html) define o que é "Vírus de computador". Segundo a divisão de segurança de computadores do Instituto Nacional de Padrões e Tecnologia dos EUA (http://csrc.nist.gov/), para ser classificado como vírus de computador o programa deve ter as seguintes propriedades: A 3 de novembro de 1983 o primeiro "vírus" foi concebido como um experimento para um ser apresentado em um seminário de segurança de computadores num computador VAX 11/750 rodando Unix. Em 1986 Ralf Burger escreve e distribui seu vírus "Virdem" em uma conferência sobre computadores na Alemanha. Mas o primeiro "real" vírus a infectar computadores IBM-PC foi o "Brain", criado por dois irmãos paquistaneses que, analisando o setor de Boot dos disquetes, desenvolveram um meio de "carregar" seu programa nele.
O primeiro trojan surge em 1985 num programa de "gráficos avançados" chamado EGABTR como um jogo chamado NUKE-LA.

Em 1987 surge o primeiro infectador de arquivos: o Lehigh (recebeu este nome por haver sido descoberto na Universidade Estadunidense Lehigh), que infectava o "Command.com" e, meses após, surge o famoso "Jerusalem" (descoberto pela universidade hebraica em Israel) que talvez seja o mais bem sucedido programa da história, já que ainda há registros de infecção por ele (que outro programa escrito em 1987 continua em uso, por assim dizer, popular?).
Em 1988 um garoto escreve o "Stoned", um vírus de Boot, para ver se conseguia criar um vírus. Após ter testado seu funcionamento, temendo as conseqüências dele ser "propagado", deletou as cópias mas manteve uma em sua casa. Seu irmão mais novo com um amigo resolveram infectar alguns diquetes e espalhá-lo por brincadeira, o resultado foi uma das primeiras "pandemias" de vírus de computador cujo controle foi bastante problemático. Neste mesmo ano o primeiro antivírus, o "Zuk", criado por Denny Yanuar Ramdhani (Bandung, Indonesia), surge para remover o vírus "Brain" O vírus "Dark Avenger", o primeiro infectador rápido surgiu em 1989 e o primeiro vírus polimórfico em abril de 1991 (Tequila).
O desenvolvimento posterior dos vírus foi marcado por uma constante procura de novas formas de replicação e de ocultamento.
Estrutura básica do vírus de computador
No vírus de computador há três "programas" ou sub-rotinas básicas: ocultamento, infecção e carga. Entendemos por ocultamento todos os artifícios colocados no código do programa viral visando impedir sua detecção e/ou destruição. O sistema de infecção sempre é provido de um modo de análise que objetiva impedir que arquivos já infectados o sejam novamente. E a carga é o conjunto de ações maléficas (ou não) que possui um acionador lógico (mormente por data).
Vamos esmiuçar cada uma dessas partes com suas subdivisões.
Sistemas de ocultamento
Quem cria um vírus normalmente o escreve tentando dotá-lo de mecanismos que dificultem ou impeçam que ele seja detectado e/ou destruído antes que cumpra sua tarefa.
A primeira tarefa de um vírus é espalhar-se o máximo possível e, então, deflagrar sua carga.
Não é difícil imaginar por que quase sempre a carga deva ser destrutiva, se formos pensar em quem se beneficiaria por isso logo passamos a imaginar que são os próprios fabricantes de antivírus que criam essas pragas justamente para venderem seus produtos, mas, na verdade, quando estudamos a origem individual de cada vírus percebemos que estamos tratando de pessoas que acham essa destruição divertida ou apenas estão testando as possibilidades da tecnologia sem ligar para as possíveis consequências funestas que possam causar.
Muita gente acha que esses "coders" de vírus (programadores que escrevem vírus) não devem ser perseguidos e presos mas, se você analisar psicologicamente: são pessoas que sabem que estão fazendo algo errado, que vai prejudicar muita gente, se empenham em fazer isso e se satisfazem com o estrago gerado. São pessoas com distúrbios afetivos e relacionais e de potencial perigoso muito elevado, devem ser tratados como qualquer outro criminoso, afinal, o princípio malévolo que os motiva é o mesmo, a diferença reside apenas no nível maior de conhecimento que detém em relação aos demais criminosos.
A mente de um criminoso é típica e muito simples: embora busque se ocultar ao mesmo tempo ele deseja notoriedade, é o jeito de se sentir "homem", em que sente ter algum poder. Por isso os vírus devem ter uma carga qualquer que revele o "poder" de quem o criou e quão "esperto" ele é.
Por mais "idiotas" que sejam os que escrevem vírus muitas vezes eles testam princípios e conceitos muito interessantes cujo estudo vale à pena para quem quer ter melhor conhecimento de sistemas e programação, nisso se incluem as técnicas de ocultamento. Há cinco tipos de técnicas de ocultamento: Ocultação, Proteção, Camuflagem, Evasão, e Residência.
Nas técnicas relativas a ocultamento encontramos os mecanismos de "stealth" e de "encriptação".

Stealth

É o conceito de ficar "invisível" aos sistemas de busca de antivírus. Vários são os graus de invisibilidade e eles englobam técnicas tão diversas quanto a originalidade do "coder" permitir.
Basicamente essa "invisibilidade" é conseguida procurando-se esconder as modificações que o vírus faz no arquivo. Um dos meios mais comuns é acionar certas interrupções (por assim dizer, funções do BIOS), que impedem a notificação de erros ou que seja feita leitura nos trechos onde o vírus está, sendo que, neste caso, ele precisa manter-se residente na memória (ou seja, em funcionamento).
Alguns vírus procuram manter o tamanho dos arquivos infectados como eram no original (usando o que se chama "cavidade" - Isso geralmente causa erros no funcionamento normal do arquivo, já que parte de seus códigos tem que ser excluídas) e dificilmente consegue manter seu códigos de checagem (CRC) correto.
Algum vírus se mantém invisíveis mesmo quando lidos por um antivírus, para isso modificam a tabela de vetores de interrupção (IVT) enquanto outros se carregam acima da memória baixa do DOS (640 KB), alguns até mesmo restauram o arquivo antes que ele seja lido pelo antivírus para depois reinfectá-lo.
Para que as técnicas de "Stealth" funcionem, em muitos casos, o vírus precisa se instalar na inicialização do sistema (geralmente no Boot), por isso os softwares antivírus devem também estar instalados na inicialização, de modo a impedir que o vírus ganhe acesso aos controles de interrupções de erro ou à memória. Se seu computador for infectado e o setor de boot for contaminado jamais utilize comandos como fdisk/MBR. O vírus Monkey, por exemplo, danifica a cópia do MBR (Master Boot Record), esse comando simplesmente destruiria as informações de seu HD. Procure utilizar um antivírus em outro HD, Cds ou disquetes de limpeza (com softwares antivírus), ou antivírus por rede para desinfectar seu micro.

Encriptação

Um antivírus é um programa que procura certos "trechos" dos códigos dos vírus em locais nos arquivos onde, se contaminados, esses trechos estariam (a isso chamamos "identidade" ou "assinatura"). Se esses trechos são encontrados então é por que o arquivo está contaminado!
Claro que esse método de busca por "trechos de vírus" gera falsos positivos e, não raras vezes, mesmo os mais sofisticados antivírus acusam arquivos inocentes de estarem contaminados só por que contém algum comando ou forma de compactação que o tornou similar a um vírus segundo a análise do programa antivírus.
Para resolver o problema da "assinatura" os vírus usam técnicas de encriptação, ou seja, alteram o código original por um outro modificado de forma diferente em cada contaminação para impedir que o antivírus consiga pegar sua "identidade".

Nas técnicas relativas à proteção encontramos o "antidebugging" ou couraçamento.

Anti-Debugging ou Encouraçamento

Em programação, a técnica de "depurar" um programa enquanto o mesmo funciona é chamada de "Debug" (remover os "Bugs"), ou depuração. Durante esse processo é analisado o funcionamento interno do programa à caça de eventuais erros, incongruências ou lapsos ("esquecimentos").
Claro que isso expõe o código-fonte do programa.
Alguns vírus são dotados de funções especiais para desativar ou atrapalhar o funcionamento de programas de depuração, impedindo o acesso ao seu código. O método mais usual é se ocultar em subclasses dentro do arquivo contaminado, dificultando ao máximo uma possível análise.

Nas técnicas relativas a camuflagem encontramos o polimorfismo.

Polimorfismo

É uma técnica que visa alterar o código à cada infecção.
Um "coder" desenvolveu uma ferramenta chamada "Dark Avenger Mutation Engine" (também conhecido como MTE ou DAME) que permite a outros "coders" implementarem com facilidade o polimorfismo em seus vírus. A desvantagem deste mecanismo é que qualquer vírus que venha a adotá-lo fica fácil de ser detectado pelos antivírus, já que recém mutações padronizadas e conhecidas.
A técnica comum de polimorfismo envolve criptografia simples (XOR), mas todo vírus criptografado deve ter uma parte normal (que é a que permite decriptar a parte encriptada) e, assim, o polimorfismo não consegue ocultar 100% do vírus, permitindo que ele seja pêgo.

Nas técnicas relativas a evasão temos o Tunneling (escondendo em túneis)

Tunneling

Um método de detecção de vírus é a interceptação. Para isso o antivírus fica rodando em segundo plano, monitorando as atividades do computador à espreita de ações realizadas por algum vírus.
Para escapar desta forma de detecção, uma das mais complexas técnicas utilizadas é a de "tunneling". Por meio dela um vírus tenta ficar "abaixo" de cada processo sendo executado no computador, através da manipulação direta das chaves de controle do sistema, por veio de uma ISR (Interrupt Service Routine). Alguns programas antivírus tentam detectar isso e se instalar "abaixo" dos vírus que estejam utilizando essa técnica, o que pode gerar uma guerra de controle das interrupções de sistema ocasionando problemas.

Residência

A técnica TSR (Terminate and Stay Residente) é uma forma oposta da Tunneling. Ao invés de estar sob todos os demais processo, aqui se procura estar sobre todos eles, controlando-os.
Embora muitas pessoas achem que os comandos para se criar um vírus sejam complexos, na realidade são bem simples, eis como se programa isso em assembler:

Função para permanecer residente em memória após terminar (TSR)
Interrupção 31H

Registers: 	ah = 31H
		al = 0 ; código de saída
		dx = ## ; Tamanho da memória a ser mantida
		(em parágrafos (16 bytes))
Returns: (sem retorno algum)
Se o arquivo tiver um tamanho de 365 bytes, a especificação de memória seria "Tamanho" + 256 o resultado dividido por 16 o que daria 39 parágrafos.

Um vírus TSR pode simplesmente desativar o antivírus!
Para burlar sistemas antivírus e chegar ao controle antes deles os vírus TSR tentam sempre iniciar junto com o computador.
Como podemos perceber, a tarefa de se fazer antivírus exige não somente muito conhecimento técnico como também habilidades táticas para se sobrepor às invenções dos "coders".
É por isso que qualquer idiota é capaz de criar um vírus (há até kits tipo "monte o seu"), mas somente pessoas com real conhecimento técnico e providas de muita inteligência têm capacidade para criar antivírus. O ramo da segurança de computadores é o que mais exige em termos de conhecimento e de desenvolvimento tecnológico.
Atualmente muitos dos vírus tem em seus códigos um banco de dados cuja função é localizar programas antivírus que estejam em funcionamento e desativá-los! Outros, além disso, danificam as bases de dados dos antivírus.

Sistema de Análise e infecção

Como vimos, um vírus deve ser capaz de se multiplicar quando acionado, mas não pode reinfectar um mesmo arquivo, isso seria perda inútil de tempo. Então todos os vírus são normalmente dotados de algum meio para analisar se um arquivo já está ou não infectado (sistemas esses dos quais os antivírus também se utilizam para um fim parecido). A análise é um ponto fraco já que mesmo se o vírus estiver usando um sistema antidebug, sua ação dá pistas para um investigador descobrir como detectar se o arquivo está ou não infectado.
Uma vez que o vírus saiba que o arquivo não está infectado deve proceder à sua infecção. Há cinco tipos principais de vírus, dependendo do que eles infectam: Boot, arquivos, Múltiplos - Híbridos ou Multiparte (infectam o setor de Boot e arquivos), de macro e de script.
Os vírus de Boot infectam os setores de inicialização de discos rígidos (Hds) ou disquetes. O setor de inicialização (Boot) é a primeira parte a ser lida em um disco e traz especificações de quantas trilhas há nos discos, clusters (blocos de armazenagem), formatação, localização da FAT (File Allocation Table), etc. Em suma, informa como deve ser lido o conteúdo que há no disco.
Os vírus que infectam arquivos contaminam arquivos que podem ser executados, como os .com, .exe, .dll, .ocx, .scr, .pif, etc. Isso é necessário para que o vírus seja executado também, junto com o arquivo. É impossível a infecção de arquivos .txt, .bmp ou outros arquivos que só trazem "dados" por que estes arquivos apenas contém informações para geração de textos (txt) ou imagens (bmp), não tendo como realizar comandos, o que seria necessário para acionar um vírus. Porém, lembre-se que a extensão que importa é a final do arquivo. Se você receber um anexo de email escrito tipo: "qualquer texto.txt .pif" é a extensão .pif que se refere ao conteúdo do arquivo, portanto, nesse exemplo, ele é executável, podendo estar carregando um vírus! (Os coders geralmente colocam espaços antes da extensão real que é para que ela não seja visualizada com facilidade nas janelas de propriedades ou páginas de internet).
O vírus multiparte infectam tanto o setor de boot como arquivos, garantindo assim melhor taxa de propagação e sobrevivência.
Vírus de macro e de script, como os nomes sugerem, são vírus especiais capazes de infectar não a programas ou ao setor de boot, mas sim documentos como os do Word, do Excel, arquivos .vbs em páginas de internet ou emails e arquivos .class do java. Até mesmo os arquivos de ajuda do windows (.Hlp e .chm) podem ser contaminados por vírus!

Carga destrutiva

Independente da forma como se multiplicam é importante frisar que qualquer um deles pode realizar ações destrutivas em qualquer parte, podem danificar o setor de boot, podem carregar outros vírus, enfim, não se deve achar que um tipo possa ser pior que outro, todos podem ser igualmente ruins.
A carga destrutiva é ativada por um acionador lógico (trigger). Alguns vírus usam datas (6ª feira 13), dias de independência, um ou dois dias em determinado mês, outros acionam a carga após algum tempo instalados, após enviar emails, outros são destrutivos mesmo enquanto infectam.
A carga destrutiva é a parte ruim dos vírus e, como no caso do Chernobill (CIH) pode simplesmente "detonar" seu HD promovendo uma total perda de dados. Por isso mesmo sempre devemos ter cópias em backup (em disquetes ou CDROMs) de todos os arquivos que nos sejam realmente importantes.
Alguns vírus simplesmente brincam com a imagem na tela, outros sabotam teclas, mas há os que gravam o que o usuário digita e abre conexões para que "hackers", ou melhor, "araquers", tenham acesso a essas informações. Esse tipo de vírus pode arrasar a vida de uma pessoa ou empresa ao permitir que desconhecidos venham a saber senhas (bancárias e de emails), números de cartões de crédito e/ou outras informações confidenciais. Infelizmente muitos programas, além dos vírus, roubam essas informações, são chamados spywares.

Como garantir segurança?

Primeiro lugar através do conhecimento! A informação sempre é a melhor arma que se pode dispor. Ter um bom antivírus (Kaspersky), mantê-lo atualizado é essencial. Um bom Firewall também é imprescindível se você acessa a rede de computadores (internet ou local) e softwares de segurança auxiliar, como o Alerta-Z(*). É claro que não se deve abrir anexos de emails, exceto se tiver certeza de que sejam seguros, deve-se evitar que qualquer página rode script ou utilize controles active-x que possam por em risco sua segurança. Se você acompanha meus artigos aqui você já sabe como fazer todas essas coisas =).

Para quem gostaria de ter mais informações técnicas sobre vírus de computador, uma opção é o livro "The Giant Black Book of Computer Viruses" de Mark A. Ludwig (672 páginas)

(*) NOTA: Devido ao fato do nosso software Alerta-Z ter sido descontinuado para versões do Windows posteriores ao XP ele não é mais distribuído no site. Se você ainda for usuário de Windows 98, ME e XP e quiser baixar o Alerta-Z para testá-lo, clique aqui.

Código Fonte do Elk Cloner
	ORG $9000
VERSN	DFB $02 
HIMEM	LDA #$FF
	STA $4C
	LDA #$8F
	STA $4D
DOPTCH	LDA #$20 
	STA $A180  
	LDA #$5B 
	STA $A181 
	LDA #$A7 
	STA $A182 
RUNPTCH	LDA #$AD
	STA $A4D1
	LDA #$B6
	STA $A4D2
	LDA #$AA
	STA $A4D3
LODPTCH	LDA #$4C
	STA $A413 
	LDA #>LOD
	STA $A414 
	LDA #BLOD
	STA $A35E
	LDA #CATALOG 
	STA $A56F
	LDA #USRCMD 
	STA $0B
	LDA #MSG
	LDA #REPORT
	LDA #UERR
	LDA #POEM
	LDA #ERRMSG
	LDA #PRPOEM
	STA $3F2
	LDA #