Registrado: 31 Jul 2002 Mensajes: 1.121
|
Bueno, haciendo caso a Loic, voy a iniciar lo que va a ser un tutorial informativo sobre virus clasicos. Comienzo, pues, lo que pretendo que sea una especie de documental, como cuando un paleontologo divulga los aspectos de los dinosaurios ya extintos.
Mi idea es describir el funcionamiento interno de los virus clasicos de MS-DOS a cierto nivel de forma didactica. Nunca me adentrare ni proporcionare codigo funcionalmente valido. Con esto pretendo segurarme que nadie realizara nada indebido a mi costa.
Quiero dejar bien claro que esto no es un tutorial sobre como desarrollar virus informaticos y que no respondere a preguntas en el hilo o mensajes privados cuya intencion sea la de poder desarrollar codigo virico y funcional propio. Mi intencion es divulgativa nada mas.
Si los moderadores veis que este tutorial no encaja en en el foro, avisadme y no continuare con el mismo. En este capitulo no hay mas que informacion descriptiva.
El adentrarse en el funcionamiento interno de estos virus supondra en el lector cierto nivel de conocimientos que intentare paliar en la medida de lo posible. Hablare de direcciones de memoria, segmentos, lenguaje ensamblador y codigo maquina, estructuras internas de sistemas y ficheros y otros aspectos de la arquitectura generica de un PC convencional que espero que no conviertan esto en una lectura excesivamente tecnica que solo contadas personas puedan entender. Por desgracia no podre detenerme en todos los conceptos y habra muchas cosas que deberan darse por sabidas (si son demasiadas se puede ampliar dinamicamente la seccion de definiciones). He de avisar que algunos temas seran duros o arduos de comprender para un lector que no domine estos temas.
El esquema que pretendo seguir es el de publicar mensajes con capitulos o contenidos de capitulos hasta completar el temario, el cual consta de los siguientes puntos (En negrita los que ya estan publicados) :
1- Algunas definiciones
2- Entorno de los virus clasicos.
3- Descripcion generica y Tipologia de virus
4- Mapa de Memoria.
5- Ficheros com y ficheros exe.
6- Rutinas de instalacion e infeccion
........6.1 Virus residentes
................6.1.1 Infectores de fichero
................6.1.2 Infectores de sector de arranque
........6.2 Virus no residentes
7- Rutinas de evasion y ocultacion
........7.1 Stealth
........7.2 Anti-debugging
........7.3 Virus cifrados
........7.4 Polimorfismo
........7.5 Tecnicas anti-heuristicas
........7.6 Tunneling
........7.7 Evasion de antivirus.
8- Rutinas de activacion
9- Conclusiones
9- Malware en Windows
........9.1 Virus Win32
........9.2 Malware
Este curso no es un "copy/paste". Todo el escrito esta integramente escrito por mi y esta basado en conocimientos adquiridos de forma real aunque con intencion didactica (nunca llegue a distribuir un virus). Si veo que no convence entonces dejare el asunto con "toa la pena de mi arma".
Por supuesto se aceptan criticas y/o sugerencias puesto que esto no es la bilbia ni mucho menos.
1-Algunas definiciones
Aunque los virus clasicos pueden considerarse hoy en dia casi como "no funcionales" existe una clara diferencia, por supuesto, entre éstos y los dinosaurios mencionados inicialmente y es que mientras que los paleontologos tienen que conformarse con fosiles o huellas y realizar labores detectivestas (que no empañan los resultados por supuesto), los estudiosos de los virus clasicos tienen efectivamente especimenes intactos y potencialmente funcionales. Solo necesitan un entorno adecuado para estudiarlos in situ.
Ante todo hay que tener bien clarito que los virus no son “entes” ni “bichos” ni “cosas magicas” que hacen cosas raras en nuestro ordenador. Los virus informaticos son programas corrientes y molientes (y mordientes…) que una persona escribe con diferentes fines.
Empezaremos por definir algunos conceptos :
- Bomba logica: se atribuye a cualquier tipo de programacion que permite que una accion no deseada se ejecute en el sistema mediante un evento cualquiera como una combinacion de teclas, una fecha, etc..
- Gusano : programa que se retransmite a si mismo por la red aprovechandose de agujeros de seguridad en los protocolos o programas de comunicacion hasta, llegado el caso, saturar la red y/o los hosts implicados. No tiene por que implicar necesariamente ningun tipo de destruccion o alteracion de datos (al menos programada como tal) en los hosts interconectados.
Muchos de los llamados virus actuales encajan mas en esta definicion , acaparando tambien la de troyano, ya que sus acciones consisten en retransmitirse por la red e instalarse en un host y no la de auto-replicarse afectando a diferentes programas informaticos de usuario.
- Programa residente: un programa es residente en memoria cuando, una vez ha terminado su ejecucion, todo o parte del programa permanece en memoria con el objetivo de atender eventos hardware o software de cualquier tipo.
- Replicacion : Consideramos de ahora en adelante como replicacion a la capacidad de un virus para anexionarse o adherirse a un fichero con codigo ejecutable de tal modo que al ejecutarse éste, se ejecuta involuntariamente el codigo virico. Si se habla de difusion del virus mediante redes informaticas lo consideraremos como retransmision.
- RTI: Rutina de Tratamiento de Interrupcion.
- Troyano : codigo que, simulando ser un programa original o bien habiendo sido incorporado al programa original, realiza acciones en el sistema que pasan inadvertidas por el usuario que pueden ser maliciosas o no. Como caracteristica principal de un troyano es su incapacidad para replicarse a si mismo. Si tuviera esta capacidad pasaria a denominarse virus.
- TSR : Terminate and Stay Resident. Programa residente.
- Virus : programa informatico que, aprovechando los defectos o fallos de seguridad del sistema, tiene la capacidad de instalarse sin el consentimiento del usuario y replicarse a si mismo pudiendo realizar en el momento de la infeccion o, normalmente, mas retardadamente, acciones maliciosas (o no) en el sistema. Ojo, la caracteristica que define verdaderamente a un virus es la de auto-replicacion sin el consentimiento ni el conocimiento del usuario. Esto significa que un programa que no se auto-replica y que se instala en el sistema sin el consentimiento (aunque lo monitorice) del usuario NO puede ser calificado como virus.
Hoy en dia, como ya hemos comentado, se habla muchas veces de virus a lo que en realidad se acerca mas al concepto de gusano clasico aunque ciertamente cada vez resulta mas dificil su clasificacion. Por ejemplo. Vease la siguiente pagina :
http://alerta-antivirus.red.es/virus/detalle_virus.html?cod=3850
Habla del "virus" sasser, pero en realidad el virus sasser no es un virus, sino un gusano. En la pagina al final, se le califica como tal. El termino de "virus informatico" se vuelve difuso con el tiempo y ya no significa "codigo autoreplicable infector de ficheros", sino que pasa casi a ser usado para definir cualquier tipo de codigo maligno que entra en nuestro ordenador.
Otro ejemplo. Leemos en :
http://www.microsoft.com/latam/athome/security/viruses/intro_viruses_what.mspx
| Cita: | | Algunos virus más sofisticados, como los gusanos, pueden reproducirse y enviarse automáticamente a otras computadoras cuando consiguen controlar determinados programas, como algunas aplicaciones de correo electrónico compartido. Ciertos virus, denominados troyanos (en referencia al legendario caballo de Troya), pueden presentarse como programas aparentemente beneficiosos para que los usuarios los descarguen. Existen incluso algunos troyanos que pueden ofrecer los resultados esperados y, al mismo tiempo, dañar discretamente el sistema local o el de otras computadoras conectadas a la red. |
Es un ejemplo claro de lo que sucede hoy en dia. El autor de este escrito da la impresion de no ser una persona versada en la materia y acaba mezclando conceptos y terminos y confundiendo al lector profano. El autor define como virus cualquier tipo de codigo maligno, lo cual es un error.
Pero lo peor de todo es que no en pocas paginas se publican tutoriales o documentos con definiciones y explicaciones sobre virus totalmente equivocadas. Por ejemplo, puede leerse lo siguiente en la pagina :
http://www.ilustrados.com/publicaciones/EpyppFulkyrzHiMJhv.php
| Cita: | Polimorfismo:
Este es el método mas avanzado de contagio. La técnica consiste en insertar elcódigo del virus en un archivo ejecutable, pero para evitar el aumento de tamañodel archivo infectado, el virus compacta parte de su código y del código del archivo anfitrión, de manera que la suma de ambos sea igual al tamaño originaldel archivo. Al ejecutarse el programa infectado, actúa primero el código delvirus descompactando en memoria las porciones necesarias. Una variante de esta técnicapermite usar métodos de encriptación dinámicos para evitar ser detectados porlos antivirus. |
Desde la primera frase hasta practicamente la ultima del parrafo se comete error tras error porque resulta que le polimorfismo no tiene NADA que ver con lo que cuenta aqui. Se vera en que consiste el polimorfismo en su respectivo capitulo, aunque la palabras "POLI" y "MORFISMO" ¿no os dicen nada? Por lo visto al autor de este texto no...
Continuemos. En la decada de los 80 y principios de los 90 los virus informaticos solian ser escritos por programadores expertos con grandes conocimientos de la arquitectura de los ordenadores que manejaban. El lenguaje que normalmente se utilizaba era el ensamblador. Hoy en dia, aunque puede usarse el ensamblador, los virus informaticos pueden ser desarrollados casi por cualquier programador sin demasiada experiencia en multitud de lenguajes. Esto afecta a dos cosas, buenas y malas.
La primera, es que muchos "virus" (recordemos que muchos en realidad son gusanos) estan toscamente programados pudiendo causar mas daños por los fallos que contenga que por los que en si mismo pretende realizar. La segunda, y esta no es tan buena, es que la aparicion de virus se dispara obligando a una actualizacion casi a diario de nuestros antivirus.
2-Entorno de los virus clasicos
El objetivo del presente capitulo es introducir al lector en el mundo de MS-DOS. Aun cuando un lector pueda tener grandes conocimientos en arquitectura de ordenadores y sistemas operativos es muy posible que éste en concreto le resulte desconocido. Asi pues, se espera que con lo que se explique se entienda medianamente bien el entorno en el que funcionaban los virus. Se introduciran algunos conceptos aqui pero los detalles de este sistema se explicaran en los apartados donde sean requeridos.
Obviaremos la historia de MS-DOS y nos centraremos en sus caracteristicas. Se trata de un sistema operativo monousuario y monotarea, sin mecanismos de proteccion ni de seguridad. Asi pues, un programa en MS-DOS siempre corre en modo superusuario (hablando en terminos de UNIX) con lo que tiene acceso a todo el mapa de memoria del sistema asi como a todos sus perifericos y componentes.
Podeis echarle la culpa a este programa de la enorme proliferacion de virus en las dedada de finales de los 80 y 90 aunque no solo la culpa es suya. Los defectos en seguridad o mas bien la nula capacidad de proteccion ofrecida en los microprocesadores Intel seguramente fue algo tan o mas decisivo que el aspecto anterior. NO fue hasta el lanzamiento del 286 cuando ofrecieron un modo protegido donde los programas no pudieran acceder a los recursos que les viniera en gana aunque MS-DOS nunca corrio en modo protegido.
Bien, MS-DOS, es un programa que ofrece lo basico para denominarlo como un sistema operativo. No tiene capacidad multitarea ni multiusuario y todos los programas estan al mismo nivel, como ya hemos dicho. Un programa de usuario, de hecho, podia facilmente optar por utilizar MS-DOS para accesos a hardware, solicitud de recursos, etc... pero podia tambien optar igual de facilmente por no hacerlo y hacer él mismo el trabajo. De hecho habia muchos programas que no eran virus y que lo hacian. Los juegos son un ejemplo, o en general cualquier programa que requiriera de mas eficiencia y/o de un mayor control sobre el hardware.
Desgraciadamente se "aprovechó" esto en programas no tan benignos como un simple juego para desarrollar todavia mas el concepto de virus informatico.
MS-DOS no era solo un core con un API que permitia el arranque del sistema. Junto con el sistema operativo como tal se incorporaba un interprete de comandos (el famoso command.com) y se añadian una serie de utilidades o "comandos externos" que se incluian en un directorio que era por lo general C:\DOS. Digo "externos" porque los comandos de MS-DOS se clasificaban en internos, que son aquellos que el propio interprete de comandos puede ejecutar por si mismo y los llamados externos que eran programas independientes como ya he comentado.
Los ficheros que mas nos Ocuparan en los proximos capitulos son los ejecutables. Habia muchos tipos de ficheros que podian contener codigo ejecutable pero en general los utilizados y principales eran :
- Ficheros "COM" : se trata de codigo que ocupara como maximo un segmento de memoria (64Kb).
- Ficheros "EXE" : surgen para solucionar el problema que presentan los COM, esto es, la limitacion de los 64K. Estos ficheros son mas complejos y disponen de una cabecera que contiene la informacion necesaria para que el SO cargue en memoria de modo correcto el programa.
Hablaremos de estos ficheros mas detenidamente.
Habia otros tantos ficheros con codigo ejecutable que podian ser objetivo de infeccion de virus y que no trataremos aqui como por ejemplo los .SYS, .BIN y .OVL.
En MS-DOS la interrupcion software mas importante es la 21h. Mediante esta interrupcion MS-DOS atiende las peticiones de los programas de usuario. Por ejemplo la funcion 4Bh de la Int-21H sirve para que MS-DOs ejecute un programa. Existen funciones para solicitar memoria, abrir archivos, listar directorios, solicitar teclas pulsadas, escribir cadenas de texto, etc... Como aprenderse los cientos de funciones documentadas y no documentadas (que las hay) del DOS era una burrada normalmente se utilizaba la famosa lista de Ralf Brown que a quien le interese puede buscarla en internet sin problemas. MS-DOS utilizaba tambien otras interrupciones con funciones no documentadas, que se supone que son para uso interno. Una de ellas era la INT-2Fh. El acceso a estas funciones indocumentadas era muchas veces util pero tambien arriesgado como se vera mas adelante.
Otras interrupciones importantes eran : INT-13H para acceso a disco (funciones que permiten desde leer bloques hasta formatear el disco), InT-16H para acceso a teclado y la INT-10H para acceso a tarjeta de video. Para funciones de dispositivos mas especificos se requeria la carga de software controlador apropiado. Por ejemplo, para el raton la interrupcion "estandar" sobre la que se implementaban las funciones era la int-33h.
El sistema de ficheros en MS-DOS era FAT-16 con tamaños de bloque desde 512Kb y no era raro ver bloques de tamaño 8Mb si los discos duros eran especialmente grandes. La FAT es una tabla que contiene entradas de los ficheros y bloques ocupados por los ficheros y directorios. Perder esta tabla suponia que la informacion era inaccesible aunque siguiera estando en el disco.
Para evitar este tipo de incidencias por accidentes fortuitos (por ejemplo sectores defectuosos en los bloques ocupados por la FAT) se gestionaba tambien una copia de la FAT que podia usarse para restaurar la defectuosa.
La memoria principal que se podia gestionar era de 640K de memoria convencional (donde se cargan y ejecutan los programas), aunque luego "inventaron" metodos para poder ampliar este limite. Teniamos la Zona de Memoria Alta (HMA) que podia utilizarse para cargar ahi al propio core del DOS y asi descargar la convencional para uso de programas de usuario, la memoria extendida (XMS) que podia utilizarse para alojar datos y con la que se podia superar el limite de 1Mb y la memoria expandida (EMS) que podia simularse mediante controladores apropiados a partir de la extendida.
Ningun programa podia superar los 640K ideales de tamaño en memoria. Aparecieron metodos para intentar superar esto, ya que MS-DOS no disponia del concepto de memoria virtual y mucho menos de las tecnicas de segmentacion o paginacion, como por ejemplo el uso de OVERLAYS que eran porciones del programa almacenados en ficheros independientes que se cargaban en memoria en el momento que fuese necesario (desalojando otra porcion de codigo del programa).
No era raro el pegarse continuamente con la configuracion del sistema para poder conseguir los 40 o 100K de convencional adicional necesarios para ejecutar algun juego u otro programa.
Asi estaban las cosas y bajo estas favorecedoras condiciones proliferaron los virus informaticos aprovechandose de todo lo que podian. Veamos como.
3- Descripcion generica y Tipologia de virus
Un virus no es mas que un programa informatico. No se transmite por la red electrica (como suponia yo antes de tocar un ordenador), ni se colaban entre las teclas (como creia un amigo), ni saltaban de disquete a disquete (como suponia mucha gente) ni tampoco del disquete al disco duro por solo meterlo en la unidad de disquetes, no mandan descargas electicas a los cabezales del HD... En definitiva, no tienen capacidades sobrenaturales.
Los habia que mostraban una pelotita rebotando en la pantalla, que te bloqueaban el ordenador, que invertian la imagen de pantalla, que te proponian adivinanzas o los que directamente se mofaban en tu cara. Amen, por supuesto, de poderte destruir la informacion del disco duro mientras tanto.
Generalmente intentaban pasar inadvertidos un tiempo; tiempo que aprovechaban para replicarse y difundirse. La via mas normal era a traves de disquetes infectados que por aquel entonces era lo que se intercambiaba. Lo normal es que se activaran en una fecha determinada aunque los habia que se activaban con una combinacion de teclas o mediante cualquier otro tipo evento.
En el parrafo anterior hemos descrito genericamente un virus. Su ciclo de vida pasa por :
a) Instalacion en el sistema : ficheros COM,EXE,SYS..., sector de arranque.
b) Fase de reproduccion o difusion, en la que el virus no se muestra directamente.
c) Fase de ataque o activacion.
Y para poder llevar a cabo todas las fases un virus dispone genericamente de :
a) Rutinas de instalacion.
b) Rutinas de evasion y ocultacion.
c) Rutinas de activacion.
Como supongo parece obvio la parte menos importante y menos compleja de un virus es su rutina de activacion o de ataque (PayLoad). La rutina de instalacion tampoco es de lo mas interesante aunque obviamente un virus que se instala correctamente y que puede instalarse en numerosos entornos es mas eficaz que otro que no lo es. Donde un virus se la juega es en sus rutinas de evasion y ocultacion y aqui estan las rutinas mas complejas que puede tener un virus. Un virus que no tiene fase de reproduccion, o que es muy corta, no tendra gran repercusion ya que sera rapidamente detectado. Lo ideal es permanecer oculto, cuanto mas tiempo mejor, sin que lo detecten hasta la espera de un evento que lo active.
Podemos clasificar los virus de la siguiente manera :
a) Desde el punto de vista del control del sistema :
- Virus residentes : un virus residente es aquel que una vez instalado permanece en la memoria tomando control de una
o mas partes del sistema.
- Virus no residentes : no tiene control en el sistema excepto en el momento en que es ejecutado.
b) Desde el punto de vista del tipo de infeccion (no son mutuamente excluyentes) :
- Virus de fichero : se propagan instalandose en ficheros ejecutables o con codigo ejecutable.
- Virus de sector de arranque : se propagan instalandose en sectores de arranque de disquetes y/o discos duros.
c) Desde el punto de vista de las rutinas de evasion y ocultacion incorporadas (no son mutuamente excluyentes ) :
- Armoured virus : incorporan tecnicas anti-debug.
- Virus stealth : incorporan tecnicas de ocultacion en el sistema.
- Virus cifrado: incorporan tecnicas de cifrado fijo o variable de parte de su codigo.
- Virus polimorfico : incorporan tecnicas de cifrado variable de parte de su codigo y alteracion algoritmos de descifrado que comprende su parte no cifrada.
En este ultimo punto, que hace alusion a tecnicas de evasion y ocultacion, no se clasifican los virus segun todas las tecnicas que existen sino solo las mas importantes. Existen otras tantas que se veran en su correspondiente capitulo.
Así pues, podiamos tener virus residentes infectores de ficheros y steath, o virus residentes de sector de arranque, etc..
Solo decir que de las combinaciones que podriamos hacer con la clasificacion anterior solo una quizas no tendria mucho sentido : un virus no residente e infector de sector de arranque.
Existen otros tipos de virus que no entran del todo en la clasificacion anterior y en los que no me detendre, como los "Companion Virus".
CONTINUARA....
Última modificación realizada el 10/07/2006 20:05:01, modificado 12 veces |