21 de Noviembre de 2009 Meristation | Zonaforo | Mercadillo | Blogs 
Al home de Meristation

 
Foros Zona Foro | Mercadillo Mercadillo | Foros de Juegos Juegos | Buscar Buscar | Miembros Miembros | FAQ FAQ | Normas Normas
Grupos Grupos | Entra para ver tus mensajes privados Entra para ver tus mensajes privados | Registrarse Registrarse | Login Login
 
Publicar nuevo tema Responder al tema Zona Foro -> Software
Página 1 de 2
1
  >>
Mensaje 03/07/2006 12:26:34
Virus informaticos : que son y como funcionan
Responder citando ¡Menéalo!
Shiva
vida restante: 100%
Ver perfil de usuarioEnviar mensaje privado
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_w​hat.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
Mensaje 03/07/2006 18:04:58
Responder citando
De: Teruel
Fenrir
vida restante: 100%
Ver perfil de usuarioEnviar mensaje privadoVisitar sitio web del autor
Registrado: 2 Dic 2002
Mensajes: 5.605
EXCELente! Yo veo muy útil una guía de lo que son los virus y cómo funcionan. En realidad hay mucha gente (y yo me incluyo, hasta hace pocos años), que pensaba en los virus como bichos que mágicamente se replicaban (a través de disquetes), y que causaban estragos. Aunque como nunca he tenido efectos catastróficos (salvo el Sasser), siempre he considerado que no tenía, y que los antivirus no servían para nada, que con ser prudente y no ejecutar ejecutables sospechosos, estaba por encima de cualquier peligro. Pero claro, no es todo tan sencillo, hay muchos virus (expresado como forma genérica de código malicioso) que no se dedican a jodertelo todo, sino que insidiosamente lo van derrumbando todo poco a poco, o colapsando las redes ( "Me va lenta la conexión, debe de ser un problema de telefónica"). Hace algún tiempo pasé el Spybot y algún antivirus, y el resultado era desalentador, estaba bastante petado.

Pienso que una guía como esta nos ayudará a proteger nuestro sistema y a mejorar nuestras aptitudes para detectarlos. El conocimiento bien aplicado siempre redunda en beneficio de todos. Gracias por compartir tus conocimientos sobre el tema (Y no te olvides del de depuración y optimización de programas!)

Espero no ser el único en responder!
Mensaje 03/07/2006 18:23:09
Responder citando
Shiva
vida restante: 100%
Ver perfil de usuarioEnviar mensaje privado
Registrado: 31 Jul 2002
Mensajes: 1.121
Efectivamente, lo que comentas es lo que pretendo que se saque en claro. Por un lado, que los virus son programas informaticos como cualquier otro, con ciertas peculiaridades, si, pero desde un punto de vista programatico, nada del otro mundo.

Y por otro lado, conocer como actua un virus nos ayuda, no solo a actuar correctamente frente a posibles infecciones sino que tambien nos ayuda a evaluar la efectividad de los antivirus, los cuales en muchos casos deja (o dejaban) bastante que desear.

Por ultimo me gustaria reflejar, y creo que ya he empezado en ello, que hay mucha informacion en internet sobre virus que, no es que no sirva o que confunda, sino que muchas veces lo que explican es erroneo.

Bueno, ¡gracias por responder!.
Mensaje 03/07/2006 21:50:44
Responder citando
De: tective Rockanrollero
SNAKE EATER
vida restante: 100%
Ver perfil de usuarioEnviar mensaje privado
Registrado: 17 Abr 2004
Mensajes: 1.041
no te preocupes, en 1998 ya había kits para hacer virus de forma visual, con sus checkbox etc...

Los virus siempre irán por delante de los antivirus, eso no lo dudes.

Te has olvidado el peor de los virus, virus creados en java capaz de destrozar cualquier S.O. PDA, Móvil, etc...
Mensaje 03/07/2006 22:11:28
Responder citando
Shiva
vida restante: 100%
Ver perfil de usuarioEnviar mensaje privado
Registrado: 31 Jul 2002
Mensajes: 1.121
Ford_Fairlane escribió:
no te preocupes, en 1998 ya había kits para hacer virus de forma visual, con sus checkbox etc...

Los virus siempre irán por delante de los antivirus, eso no lo dudes.

Te has olvidado el peor de los virus, virus creados en java capaz de destrozar cualquier S.O. PDA, Móvil, etc...


Bueno, eso lo he pasado por alto adrede, pero los kits para hacer virus sin saber programar ya existian antes de 1998, pero eran poco efectivos.

En cuanto a lo de los virus Java, bueno, no es que me haya olvidado, es que de momento caen fuera de lo que es el articulo. Es posible que mas adelante incluya otras cosas.

Un saludo.
Mensaje 04/07/2006 12:39:37
Responder citando
Shiva
vida restante: 100%
Ver perfil de usuarioEnviar mensaje privado
Registrado: 31 Jul 2002
Mensajes: 1.121
Bueno, continuemos aunque no veo que haya despertado mucho interes :-( .

4. Mapa de memoria


Vamos a introducir un capitulo que inicialmente no estaba programado pero que resultara util para entender mas adelante ciertas cosas y es la distribucion de la memoria o el mapa de memoria del sistema. Entiendo que esto pueda sonar raro... o bastante raro, pero creo que es necesario si queremos entender lo que se explicara mas adelante.

De ahora en adelante supondremos que nuestro PC es un 80086 con 1 MB de memoria. Puesto que a partir del 80086 todos tienen compatibilidad hacia atras en modo real, todo lo comentado sera valido. Por eso cuando se habla del modo real de un PC se habla de un 80x86.

Bien, nuestro sistema puede manejar como mucho 1 MB. Si, ya se que antes dije que el limite era de 640KB, pero de memoria CONVENCIONAL. En realidad no especifique quien lo pone ni porque existe este limite.

El caso es que la arquitectura de los 80x86 ha tenido historicamente una serie de fallos de diseño. Por un lado resulta que el tamaño de los registros del microprocesador es de 16 bits lo cual concuerda con el bus de datos, que es tambien de 16 bits (el del 8088 era de 8 bits). Pero es que resulta que el tamaño del bus de direcciones es de ¡20 bits! No entiendo muy bien porque optaron por poner un bus de direcciones de 20 bits. El caso es que esto fue un lastre tremendo para la arquitectura del PC y el desarrollo de programas que no se quitarian de encima hasta meter el modo protegido. Con un bus de 20 bits se puede direccionar como mucho 1 MB de memoria (2^20). En un 286 el tamaño del bus de direcciones era de 24 bits con lo que se aumento el limite teorico hasta los 16 MB de memoria. Este diseño tan malo suposo lo que los programadores sufrimos en forma de memoria segmentada (no confundir con mecanismos de memoria virtual de paginacion segmentada).

En un 80x86 (en modo real siempre estamos suponiendo) la memoria se ve como segmentos de 64 KBs que se superponen unos sobre otros y cuya direccion de comienzo siempre es divisible por 16 hasta poder direccionar el megabyte. MSDOS lo ve como 65536 parrafos de 16 bytes (segmentos), que es el bloque minimo de asignacion que tiene. A partir de la direccion de comienzo del segmento se puede direccionar 64 kbs con un registro de 16 bits (un desplazamiento). Suena complicado al menos ¿no? Bueno, de momento no profundizaremos mas que para decir que un segmento es una bloque de 64KB de memoria que puede empezar en la direccion 0, 16, 32, etc.... Un desplazamiento posicion especifica dentro de este segmento. Una direccion de memoria fisica se formaria, como ya hemos dicho, con la direccion SEGMENTO:DESPLAZAMIENTO.

El resumen es que en realidad un 80x86 podia direccionar 1 MB. Entonces ¿que es ese limite de los 640KB? Pues resulta como consecuencia de otro fallo mas de diseño en el PC. Resulta que la memoria de video se mapeo en memoria justo por encima de los 640KB. Esto ocasiono que el limite practico y real para poder alojar un programa en memoria fuera de 640KB. Esto se mantuvo en DOS para permitir compatibilidad hacia atras.

Asi pues, el mapa de memoria seria el siguiente :
Código:

--------------------------------- 0
TABLA DE VECTORES DE INTERRUPCION
--------------------------------- 1024 bytes
AREA DE DATOS DE ROM-BIOS
--------------------------------- 1280 bytes
MEMORIA CONVENCIONAL
--------------------------------- 640 KB
MEMORIA DE VIDEO / UMB
--------------------------------- 960 KB
ROM BIOS / UMB
--------------------------------- 1 MB
HMA (a partir de DOS 5.0)
--------------------------------- 1088 KBs


Por encima del Mega esta la memoria extendida (o expandida) que no se muestra en el diagrama.

Observemos que en las partes mas bajas se almacena la tabla de vectores de interrupcion y la parte de datos de la ROM-BIOS (256bytes). Por encima de esto, la memoria convencional, con el nucleo y areas de comunicacion y partes de COMMAND.COM en las zonas bajas y los programas de usuario en la zona alta. El area de datos de la ROM-BIOS suele ser utilizada tambien por los virus ya que contiene informacion muy util sobre el sistema y que, por supuesto, los virus pueden utilizar. Lo veremos en su momento.

Pasaremos por alto el estudio de los bloques de memoria superior (UMB) y la HMA (High Memory Area). De ahora en adelante siempre supondremos que los programas se alojan siempre en la memoria convencional.

5. Ficheros com y ficheros EXE


En este capitulo vamos a ver como son los ficheros com y exe, que particularidades tienen y como hace el sistema operativo para cargarlos en memoria. Empecemos por los ficheros com.

Ficheros COM

Un fichero COM es un fichero que contiene codigo ejecutable, por supuesto, pero resulta que lo que contiene el fichero es la imagen exacta que el fichero tendra en memoria al ser cargado en ella. Un programa COM puede ocupar como maximo un segmento de memoria, es decir, 64 kbs. Esto significa que el codigo, los datos y la pila estan en el mismo segmento. Ummmm, bien, pero... ¿como llega nuestro fichero hasta la memoria?

Pues tras teclear la ruta y el nombre del fichero ejecutable (en este caso un com, no lo olvidemos) y presionar ENTER, el interprete de comandos traduce de algun modo esto a una llamada al sistema. Las llamadas al sistema se realizan a traves de la interrupcion 21h. La funcion se determina poniendo en el registro AX (AH, mayormente pero AL tambien se utiliza) la funcion de la cual se trata. En este caso llamamos a la funcion 4Bh que es la funcion para solicitar que el sistema operativo cargue un programa y lo ejecute.

MS-DOS busca por defecto el primer bloque de memoria disponible mas grande que concuerde con el modelo de memoria usado por el programa. Puede suceder que la memoria este muy fragmentada y que, aun teniendo memoria libre suficiente, no pueda alojar al programa que lo solicita. MS-DOS gestiona estos bloque mediante unas estructuras llamadas MCBs (Memory Control Blocks). Las veremos mas adelante en detalle. El tamaño de un MCB es de 1 parrafo, es decir, 16 bytes.

Una vez ha decidido asignar este bloque, justo por encima del MCB, a partir del byte 0 del primer segmento, ubica lo que se llama el PSP o Program Segment Prefix que ocupa 256 bytes. El PSP tiene diversos usos como por ejemplo alojar los parametros de entrada del programa, areas de intercambio de datos, direcciones a diferentes interrupciones, etc... Por encima del PSP estaria alojado el programa.

Bien, volvamos al COM. Una vez tiene todo esto listo, lee el fichero y TAL CUAL existe en disco lo aloja en memoria. Puesto que todas las referencias a direcciones de memoria y datos del programa son con respecto al segmento en que reside el programa, no importa en que direccion de memoria se aloje. A partir de aqui, MS-DOS da el control del sistema al programa empezando su ejecucion por la primera instruccion ubicada en la direccion CS:0100h, es decir, la que esta justo por encima del PSP. Es importante quedarse con esto.

Veremos mas adelante como un virus utiliza estas estructuras en beneficio propio.

Ficheros EXE

Bien, un fichero exe tambien es un fichero que contiene codigo ejecutable, pero tiene una estructura mas compleja que le permite sobrepasar los 64KBs. En un EXE puedes tener, por ejemplo, un segmento para codigo, otro diferente para datos y otro diferente para la pila. La cabecera del fichero exe ocupa 28 bytes e indica al sistema operativo el tamaño del fichero, cuanta memoria necesita, donde esta el punto de entrada del programa, donde empieza el segmento de pila y donde empieza el primer elemento reubicable. Esto significa que puesto que un exe ya no es reubicable como un COM el SO necesita hacer unos calculos para que el programa pueda ubicarse en cualquier punto de la memoria y funcione.

El proceso de carga del ejecutable sigue siendo en esencia el mismo. EL SO lee la cabecera, mira la memoria necesaria, busca el bloque libre, planta el PSP al principio del primer segmento asignado, resetea los valores de los registros de segmento y desplazamiento a pila, datos, etc,..a los valores adecuados, reubica los elementos necesarios del ejecutable en ese bloque y lanza el programa en el punto indicado por la cabecera.

He aqui la cabecera :

Cabecera de un archivo EXE.


Código:

Desplazamiento    Descripción
00h      Caracteres 'MZ' (4Dh, 5Ah): Identificador de fichero EXE. (Tambien vale 'ZM')
02h      Resto : longitud del fichero MOD 512.
04h      Número de páginas: longitud del fichero DIV 512.
06h      Número de direcciones de segmento a reubicar.
08h      Tamaño de la cabecera en párrafos (1 párrafo = 16 bytes).
0Ah      Nº mínimo de párrafos de memoria para cargar el fichero.
0Ch      Nº máximo de párrafos de memoria para cargar el fichero.
0Eh      SS inicial al cargar el EXE.
10h      SP inicial al cargar el EXE.
12h      Suma de control o "checksum" de la cabecera. El DOS no la comprueba para nada y muchos virus la utilizan para       marcar los ficheros que ya han infectado. Así no los infectan dos veces.
14h      IP inicial al cargar el EXE. El virus lo modifica para que al cargar el programa se ejecute antes el virus.
16h      CS inicial al cargar el EXE. También lo modifica el virus.
18h      Offset de comienzo de la tabla de reubicación.
1Ah      Número de overlay.


Sin embargo me gusta mas esta version, aunque esta en ingles :

Código:

START OFFSETS            DISCRIPTIONS                                     
 (hex) (dec)                                                               
  00 | 00 | Always 4D 5A. Marks this file as an .EXE file                 
  02 | 02 | Remainder after dividing load module's size by 512           
  04 | 04 | Size of file in 512 byte pages                               
  06 | 06 | Number of relocation table entries                           
  08 | 08 | Size of header in paragraphs (16 bytes)                       
  0A | 10 | Minumum number of paragraphs required after loaded program   
  0C | 12 | Maximum number of paragraphs required after loaded program   
  0E | 14 | (SS) Offset of Stack Segment in Load module in paragraphs     
  10 | 16 | SP regester loaded with this word                             
  12 | 18 | Negative sum (ignore overflow) of all words in file (CRC)     
  14 | 20 | IP register loaded with this word                             
  16 | 22 | (CS) Offset of Code Segment in load module in paragraphs     
  18 | 24 | Offset of first relocation item.                             
  1A | 26 | Overlay number. If no overlays used, this is 0


La cabecera tiene un campo que es el checksum que supuestamente valida el fichero. Resulta que DOS no miraba este campo para nada con lo cual, muy buena la intencion, pero penosa la resolucion. Veremos que los virus modificaban la cabecera del EXE "a su gusto" para acomodarse en el ejecutable.

6- Rutinas de Instalacion e Infeccion


Bueno, despues de tanto rollo ¿como hace, a fin de cuentas, un virus para instalarse en el sistema o infectar ficheros? Pues esto ya dependera de las caracteristicas del virus.

Vamos a suponer que nos han dejado un disquete que contiene un programa infectado. Lo insertamos en la unidad de disquetes y copiamos dicho fichero a nuestra unidad de disco duro. Nos fiamos porque nuestro amigo, que es quien nos ha grabado el programa, es de confianza y ademas su ordenador no presenta sintomas de ningun tipo de infeccion de virus por lo cual el programa no debe contener virus.

Bueno, pues resulta que nos equivocamos, porque el programa sí contiene un virus. Cuando ejecutamos nuestro programa el virus es quien va a ejecutarse en primer lugar. ¿Como? Pues si el programa es un COM, el virus habra sobreescrito los primeros bytes del programa para alojar en su lugar un SALTO a la direccion de memoria donde este cargado. Puesto que es un COM, el virus sabe que reside en el mismo segmento por lo que es un salto cercano.

supongamos que tenemos un COM que contiene lo siguiente:
Código:

CS:0100h   MOV   AX,4C00h   ; salir al DOS
CS:0103h   INT   21h      ; llamada al DOS


Esto puede ser un programa COM. Un virus que quisiese infectar este programa lo modificaria del siguiente modo:

Código:

CS:0100   JMP   0105h   ; Salta al principio del virus
CS:0102   PUSH   CS   ; Estos tres bytes corresponden
CS:0103   STOSB       ; a 1 byte de la instrucción mov ax,4c00h
CS:0104   INC   CL   ; mas 2 del INT 21h
CS:0105   [CODIGO DEL VIRUS]
….      ….



El virus se ejecuta de este modo tan sencillo en primer lugar puesto que la primera instruccion a ejecutar es un salto a la direccion CS:0105h que es donde comienza el codigo del virus. El virus entonces hara lo que quiera o lo que pueda y en ultima instancia restaurara los 2 bytes originales del programa en la direccion CS:0100h y ejecutara el programa original. El usuario no se ha dado cuenta de nada, lo unico que ha visto es que su programa funciona. ¿Se ha entendido esto? Yo creo que es facil.

Si nuestro programa es un EXE sucedera algo parecido. Puesto que el virus modifica las entradas del header del exe (y otras) para que la primera instruccion a ejecutar sea la del propio virus, el SO iniciara su ejecucion automaticamente. El virus, que es muy listo, ha guardado los valores originales de CS:IP y SS:SP del header asi como otros valores. Cuando ha terminado sus acciones recupera estos valores para asignarlos a los registros y salta a la direccion original que es el punto de entrada del EXE.

CONTINUARA (Instalacion e infeccion en virus residentes y no residentes)
Última modificación realizada el 05/07/2006 10:39:45, modificado 1 vez
Mensaje 04/07/2006 17:40:12
Responder citando
De: Teruel
Fenrir
vida restante: 100%
Ver perfil de usuarioEnviar mensaje privadoVisitar sitio web del autor
Registrado: 2 Dic 2002
Mensajes: 5.605
La pregunta que uno se hace es: ¿Cómo ha hecho el virus para meterse primero en el programa? ¿Tal vez era un ejecutable que ha sido ejecutado en algún momento, y en ese momento ha encontrado un programa aleatoriamente, y se ha insertado ahí, o tal vez ya venía insertado, distribuido por el propio creador insospechadamente?
Mensaje 04/07/2006 17:43:07
Responder citando
De: Teruel
Fenrir
vida restante: 100%
Ver perfil de usuarioEnviar mensaje privadoVisitar sitio web del autor
Registrado: 2 Dic 2002
Mensajes: 5.605
Lo que es más, puesto que por entonces Internet no era una realidad tan presente como actualmente...¿Cómo se podían distribuir estos virus? ¿Cómo un virus creado por un mamón en EEUU podía llegar a nuestro ordenadores?
Mensaje 04/07/2006 17:51:57
Responder citando
Shiva
vida restante: 100%
Ver perfil de usuarioEnviar mensaje privado
Registrado: 31 Jul 2002
Mensajes: 1.121
loic_sephiroth escribió:
La pregunta que uno se hace es: ¿Cómo ha hecho el virus para meterse primero en el programa? ¿Tal vez era un ejecutable que ha sido ejecutado en algún momento, y en ese momento ha encontrado un programa aleatoriamente, y se ha insertado ahí, o tal vez ya venía insertado, distribuido por el propio creador insospechadamente?


Bueno, eso se vera en su momento. Porque el logico camino de dicho virus sera instalarse en el sistema e infectar otros ficheros, alguno de los cuales, por un motivo u otro, acabara en otro PC.

Pero, claro, siempre hay una primera vez, y en esa primera vez es el propio autor del virus el que de algun modo infecta un programa para distribuirlo.

Veo que no hay muchas mas dudas o preguntas, y tal vez sea porque no interesa, o lo que es peor, que me explico muy mal y no se entiende nada. Me gustaria que me comentarais algo. Entiendo que todo esto suena como muy lejano, pero hoy en dia hay tecnicas muy parecidas para infeccion en Windows.

Venga, un saludo.
Mensaje 04/07/2006 18:07:17
Responder citando
Shiva
vida restante: 100%
Ver perfil de usuarioEnviar mensaje privado
Registrado: 31 Jul 2002
Mensajes: 1.121
loic_sephiroth escribió:
Lo que es más, puesto que por entonces Internet no era una realidad tan presente como actualmente...¿Cómo se podían distribuir estos virus? ¿Cómo un virus creado por un mamón en EEUU podía llegar a nuestro ordenadores?


Internet no estaba tan presente, pero estaba. Estaban los BBS (Bulletin Board System) y ademas por aquel entonces los programas fluian en forma de disquetes de un ordenador a otro. Los creadores de virus se organizaban en grupos (y seguiran asi, supongo) e intercambiaban informacion entre ellos. No era raro que el codigo fuente de un virus fuera de un lugar a otro, y en este sitio fuera modificado para crear otra variante. No era tan raro que un virus acabara en tantos ordenadores. Con tiempo y paciencia podia suceder.

En 1988 la revista "Tu Ordenador Amstrad" difundia involuntariamente el virus Viernes 13 en unos disquetes que incluia. Es un ejemplo de lo que podia suceder y de hecho sucedia.

EDITO : he aqui un poco de historia :

http://www.latinoseguridad.com/LatinoSeguridad/HCyP/PreVir.shtml

Un saludo.

PD : joder con los errores de conexion a base de datos... ¿No podran arreglar esto?
Mensaje 04/07/2006 18:11:01
Responder citando
De: Teruel
Fenrir
vida restante: 100%
Ver perfil de usuarioEnviar mensaje privadoVisitar sitio web del autor
Registrado: 2 Dic 2002
Mensajes: 5.605
Muy interesante, sigue así (aunque sea tu único seguidor, JUA JUA JUA!). La vida del maestro es dura y cruel, pero si alguien aprende algo, siempre compensa...creo.
Mensaje 04/07/2006 18:13:28
Responder citando
Shiva
vida restante: 100%
Ver perfil de usuarioEnviar mensaje privado
Registrado: 31 Jul 2002
Mensajes: 1.121
loic_sephiroth escribió:
Muy interesante, sigue así (aunque sea tu único seguidor, JUA JUA JUA!). La vida del maestro es dura y cruel, pero si alguien aprende algo, siempre compensa...creo.


"Dura y cruel..." :D :D :D
Mensaje 05/07/2006 13:14:49
Responder citando
Shiva
vida restante: 100%
Ver perfil de usuarioEnviar mensaje privado
Registrado: 31 Jul 2002
Mensajes: 1.121
6.1 Virus Residentes

Antes de ver nada sobre virus residentes hay que definir lo que es la residencia. 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. A estos programas se les llama tambien TSR (Terminate and Stay Resident). Como ejemplo, los antivirus que monitorizan en tiempo real lo que sucede en nuestro PC, son programas residente.

Los programas residentes tienen que estar muy bien desarrollados porque de los contrario nuestro sistema podria quedarse en un estado inconsistente. Puesto que DOS no es re-entrante un TSR no debe invocar una llamada al sistema mientras el propio DOS ya estaba en medio de otra. Hay otros problemas que pasaremos por alto. Generalmente un TSR se "engancha" a una o mas interrupciones para atender eventos. Por ejemplo, podriamos crearnos un TSR para engancharnos a la interrupcion de teclado.

Cada vez que se pulse o suelte una tecla se genera una interrupcion de teclado y esto significa que nuestro TSR acaba siendo invocado. La tarea del TSR seria acceder a los PIC correspondientes para obtener el scan code y ver si se ha pulsado la tecla ESC para mostrar un mensaje de saludos por la consola.


6.1.1 Infectores de fichero

Instalacion

Bueno, ya sabemos que es un programa residente. Vamos a seguir con el ciclo de vida del virus. Recordemos que habiamos ejecutado el programa. supondremos en todo este capitulo que es un virus residente en memoria y que no es cifrado.

Lo primero que intentara el virus sera instalarse en el sistema y tomar el control de parte del mismo. Para ello primero tiene que asegurarse que no esta ya instalado en el sistema. Una forma muy comun es preguntar directamente al propio virus si esta en el PC instalado, es decir, un "¿estas ahi?". Muchos programas, no solo virus, utilizan esta tecnica. Se enganchan a una interrupcion y si alguien llama a esa interrupcion con unos determinados parametros contestara como es debido. Asi un programa puede saber si esta ya instalado.

Por ejemplo supongamos que un virus se engancha a la interrupcion 32h. Si alguien llama a la funcion FF (AH) de esta interrupcion el virus respondera con un FFFF en AX. Un programa para saber si ya esta instalado el virus haria lo siguiente :

Código:

               MOV   AX,FF00h
               INT   32h
               XOR   AX,FFFFh
               JZ   YA_INSTALADO
NO_INSTALADO :    <CODIGO_INSTALACION_VIRUS>
               ....
YA_INSTALADO :    <TERMINAR Y LANZAR PROGRAMA ORIGINAL>
               ...


Sigamos. Supongamos que el virus no esta instalado en el sistema ¿que hace ahora? Lo primera que hace es hacerse residente en memoria.

MSDOS dispone de una llamada al sistema que permite terminar y dejar residente el programa ques es la 31h. Es una opcion muy comoda pero que presenta problemas para el virus. En primer lugar, un antivirus puede estar monitorizando la llamada. En segundo lugar, al llamar al sistema operativo para hacer esto se permite tener una contabilidad de quien hace la llamada. Es decir, el sistema tendra constancia de que existe un programa TSR de tal modo que un usuario podria solicitar ver el estado de la memoria y los programas TSR y apareceria el virus. Y por ultimo lugar, la llamada al sistema 31h terminaria con la ejecucion del virus y por tanto no podria acabar sus acciones y tampoco podria lanzar el programa original. El usuario entonces se daria cuenta de que algo no va bien. Por supuesto un virus no puede hacer esto.

Lo que un virus hace es modificar los bloques de control de memoria “a mano” y modificar el tamaño de la memoria del sistema para conseguir el espacio suficiente. Digamos que crea un hueco en la memoria sin que se entere el SO.

Veamos primero como puede crearse un virus un “hueco” en la memoria del sistema. DOS controla los programas en memoria mediante los MCB (Memory Control Blocks). Cuando un programa va a ser cargado para que sea ejecutado el SO prepara primero el entorno de memoria creando un MCB para el programa. El MCB es una estructura de 16 bytes que entre otras cosas contiene el nombre del programa propietario, la longitud que ocupa en memoria y el segmento de comienzo. Sobre esta estructura se situa el PSP que, como sabemos, ocupa 100h byes. El PSP contiene mucha informacion y uno de los campos que contiene es el Top of Memory que indica cual es la direccion mas alta de memoria del bloque de programa. Sobre estos 100h+Fh bytes se situa el programa propiamente dicho .

Uno de los mas sencillos metodos para hacer esto es el siguiente:
- Obtenemos del PSP el valor del TOM que viene medido en parrafos de 16 bytes (Top of Memory) y le restamos el tamaño del virus en parrafos mas uno.
- Hacemos lo mismo en el MCB en el campo que contiene el tamaño del bloque tambien medido en parrafos.
- Pero con esto no es suficiente. Tambien hay que modificar el tamaño de la memoria RAM convencional. Este es un dato que reside en el area de datos ROM-BIOS del sistema. La BIOS contiene una estructura de informacion muy amplia que cuando se enciende el ordenador pasa a memoria RAM. En concreto esta estructura se situa en el segmento 0040h y el campo que contiene esta informacion reside en la direccion 0040:0103h, o lo que es lo mismo, en la 0000:0413h.

Con esto hemos creado un hueco en lo alto de la memoria del tamaño necesario. El sistema no tiene constancia de esta zona de memoria porque para él ahora simplemente esta zona no existe.

A continuacion se copia a si mismo a esa porcion de memoria y Luego se engancha a una o mas interrupciones. Y como se engancha un programa a una interrupcion. Bueno, hay varias formas de hacerlo. Una de ellas es invocando un servicio del DOS. Hay virus que utilizan estos servicios pero puesto que puede haber antivirus monitorizandolos hay muchos virus que manipulan directamente la tabla de vectores de interrupcion del sistema. Generalmente la interrupcion a la que se enganchan es la propia interrupcion software de MS-DOS : la INT 21h. Asi pues, guardan la direccion anterior que existia en la tabla y ponen la direccion que llamara a una parte del virus. El virus ahora tiene el control del sistema operativo. Ademas de la INT 21h un virus puede engancharse a la interrupcion hardware de disco, la de teclado o la que le de la gana.


Cualquier llamada al sistema pasara ahora primero por el virus. El virus la analizara y en caso de que le interese, puede infectar o hacer alguna otra cosa (esto depende del virus). En cualquier caso una vez analizada y hecho lo necesario llamara a la RTI original con los parametros originales pasados al virus y el sistema ni se enterara. Esto lo veremos mas a fondo todavia en la parte de rutinas de infeccion.

Por ultimo, el virus acabara su tarea, por el momento. Lo ultimo que hara sera restaurar los bytes de comienzo del programa original, en caso de que se trate de un COM, o restaurara los valores de CS:IP y SS:SP en caso de que se trate de un EXE, y saltara a esa direccion para dejar que el programa original se ejecute. Esto ya lo hemos visto.

Infeccion

Partimos del punto en el que el virus ya esta instalado en el sistema. Un virus residente es potencialmente muy peligroso porque quiere decir que tiene el control de todo o parte del sistema.

Un virus residente puede monitorizar todos los accesos a disco o las llamadas realizadas al SO o las teclas que se presionan en cualquier instante, o bien puede hacerlo todo a la vez. Ya explicamos los fundamentos de esto. El virus modifica la tabla de vectores de interrupcion, previamente de haber guardado las direcciones que habia antes, para que cada vez que se produzca una interrupcion determinada llame a una parte de su codigo.

Por ejemplo. Un virus que se haya enganchado a la interrupcion 21h estara observando todos las llamadas que los procesos hacen al SO. Supongamos que un usuario quiere ejecutar un programa (funcion 4Bh). Esto se traducira en la correspondiente llamada al SO (“ejecutame este programa”). Esta llamada pasara primero por el virus que detectara que se trata de una llamada para ejecutar un fichero. El virus aprovechara la ocasión para infectar ese fichero y luego pasara la llamada al SO para que éste ejecute el programa.

Pero hay muchos virus que van todavia mas lejos. No solo infectan cuando se va a ejecutar un fichero. Pueden ser programados para infectar cuando se liste el contenido de un directorio (funciones 11h y 12h), cuando se abran ficheros, etc.. Esto multiplica su velocidad de propagacion. A un virus especialmente entrometido no se le escapara la oportunidad de infectar algo.

Vale. ¿Y entonces como infectan? Pues en realidad ya sabemos como. Cuando alguien hace una llamada al sistema. El virus la intercepta. Si es una llamada que le interesa (una ejecucion de programa, por ejemplo) lo que hace es obtener la ruta y nombre del programa ejecutable. Lee los dos primeros bytes y comprueba si es un EXE. Si no lo es entonces comprueba si es un COM viendo su extension (.COM).

Si es un EXE, lo primero que hace es comprobar si ya esta infectado. Hay muchas maneras de hacer esto y de hecho casi cada virus tiene la suya. Algunos utilizan ciertas marcas en el virus. Otros meten en el campo del checksum del header unos valores determinados. Uno especialmente ingenioso, creo que era el FRODO, le sumaba a la fecha de creacion 100 años. DOS cuando hacia un dir no mostraba los dos primeros digitos del año con lo que parecia que todo estaba correcto. En fin, esto ya iba a la imaginacion del creador. Habia virus, creo que el viernes 13 era uno de ellos, que no hacia esta comprobacion por lo que cada vez que ejecutaba un programa lo volvia a infectar. No era raro que un usuario de repente se quedara sin disco duro por este fallo de programacion del virus.

Luego obtiene los valores originales del header (como CS:IP y SS:SP) y se copia al final del fichero con esos valores. A continuacion leer el header del EXE y modifica las entradas que le intersan. Guarda el header y cierra el fichero. El programa ya esta infectado.

Si es un COM, es muy parecido, tiene que hacer alguna comprobacion adicional de seguridad que voy a omitir, pero basicamente es igual. Guarda los primeros bytes del programa, se copia al final y como primera instruccion del com pone un salto. Ya vimos esto anteriormente.

Alguno se preguntara cosas como ¿Y si el programa es de solo lectura? Generalmente esto no le importa a un virus. Igual que un programa le ha puesto los atributos al fichero mediante una llamada al sistema, el virus puede hacer lo mismo pero quitandoselos. El que un virus falle si esta protegido contra escritura se debe mas a la torpeza del programador del virus que a otra cosa. Asi que lo normal es que antes de abrir el fichero guarden los atributos originales, se los quite y una vez infectado se los vuelva a poner. ¿Y que pasa con la fecha del fichero? ¿no deberia actualizarse? Si, pero estamos en las mismas. El virus guarda la fecha anterior y cuando termina la vuelve a poner. si algun virus no hace eso es por un defecto de programacion. Asi que generalmetne es una tarea inutil el poner atributos al programa o vigilar las fechas.

¿Y con los tamaños de los ficheros? Tambien hay virus que se encargan de esto. Lo veremos en las tecnicas de ocultacion.

He comentado que los virus de fichero se añaden al final de los ficheros que infectan. Esto es cierto en parte y me explico. Lo real seria haber dicho que “la gran mayoria de los virus de fichero” se añaden al final cuando infectan. Existen virus con otras tecnicas de infeccion:

- Hay algunos que se situan al principio del fichero, no al final. Supongo que los que programaron asi estos virus lo hicieron por no liarse con los puntos de entrada del programa, calculo del offset y otras cosas. Pero por contra son mas lentos en su infeccion y esto puede ocasionar su descubrimiento.
- Hay algunos que se insertan en espacios intermedios del fichero ejecutable aprovechando que estan en blanco (estan a cero). El problema de esto es que encontrar un espacio de estos puede llevar tiempo y a lo mejor ni se encuentra con lo que el resultado seria un virus lento e ineficaz en la infeccion.
- Existen virus, incluso, que sobreescriben el archivo infectado. Esto no es lo normal porque delata inmediatamente la presencia del virus.
- Por ultimo hay virus que no tocan siquiera el fichero original. Si el ejecutable es un EXE el virus crea un fichero oculto con el mismo nombre pero con extension COM. Como el SO primero busca los ejecutables con extension COM y luego los EXE el resultado sera que primero se ejecutara el virus y luego éste llamara al programa original. A este tipo de virus se les llama “virus companion”. Estos virus presentan numerosas desventajas. En primer lugar un usuario medio se daria cuenta en seguida cuando viera que existen cientos de archivos ocultos, eliminar el virus seria sencillisimo pues solo habria que borrar los archivos companion, no puede infectar por definicion ningun COM, y en fin, ahora mismo no se me ocurre ninguna mas pero seguro que las hay… :D

La conclusion que se saca es que la gran mayoria se añaden al final porque es la mejor tecnica de infeccion aunque sea un poco mas complicada y presente algunos pequeños inconvenientes que se solventan con alguna de estas otras tecnicas alternativas. ¿Y cuales son estos inconvenientes? Pues el principal es que al añadirse a los ficheros el original incrementa su tamaño con lo que el usuario puede darse cuenta o un programa que lleve la cuenta de esto. Sin embargo esto puede solucionarse mediante otras tecnicas que veremos mas adelante con lo que resulta que tenemos las ventajas de todas las tecnicas de infeccion.

CONTINUARA (Infectores de sector de arranque)
Mensaje 05/07/2006 18:41:49
Responder citando
Shiva
vida restante: 100%
Ver perfil de usuarioEnviar mensaje privado
Registrado: 31 Jul 2002
Mensajes: 1.121
Antes de continuar, voy a hacer un inciso. Como podeis ver, hacer un virus de un modo mas o menos serio, es decir, un virus bien hecho, requeria de bastantes conocimientos y para hacer algo semejante en windows todavia mas : ensamblador, sistemas operativos y arquitectura de ordenadores asi como de hardware, etc..

En una entrevista que le hicieron a un miembro de un grupo de vi-writers, éste decia :

"Pregunta: ¿Cuál es el futuro de los virus? ¿Hacia dónde se dirigen?

Mr. S.: Creo que se está avanzando hacia una profesionalización del sector. En unos años se habrá acabado la masiva llegada de advenedizos que aprendieron a contaminar un COM con un infector runtime, y esto traerá como consecuencia una desmasificación de las listas de virus "in the wild", pero una mayor calidad de los infectores existentes. Aunque lo que todavía no tengo muy claro es a quién beneficiará ésto. "

Pero en mi opinion ha sucedido justo lo contrario. Antes de la "popularizacion" de la informatica la programacion era a bastante mas bajo nivel. Con la llegada y masificacion de Windows tambien llega la simplificacion de la programacion. Ahora hay librerias, controles, OCX,etc... Muchos lenguajes ya ni siquiera utilizan punteros ni asignacion dinamica de memoria. La programacion, en definitiva, se vuelve mucho mas asequible. Por otro lado, los sistemas operativos tienen mas seguridad con lo que se vuelve mas dificil realizar virus informaticos como antes se hacia bajo DOS.

Asi pues, la situacion es que esos "advenedizos" que llama Mr S, no solo no han desaparecido, sino que se han mutiplicado como conejos. Abundan los chavales que sabiendo un poco de VB y cogiendo trozos de codigo de una pagina para hacer esto y trozos de codigo para hacer esto otro hacen lo que llaman un "virus".

Hay un grupo de éstos, de los cuales no dare nombre, que sacaron una e-zines. Me han hecho mucha gracia... En primer lugar veo el indice y me sorprende que no habla de virus win32, ni de levels de polimorfismo, ni de PE-headers, ni paso a ring-0, ni leches.... habla de ¿virus batch? ¿infeccion con VB?... Bueno, vale, decido echarle un ojo... y me entra el descojone cuando veo una supuesta tecnica para evadir antivirus online en VB... No la voy a poner, pero es de risa...

Luego veo un "virus" (un gusano realmente que se retransmite por correo) hecho en Delphi, creo que sera delphi porque se parece mucho a pascal. Y no solo esta maaaal programado (hasta con gotos, oye) sino que encima la mitad del codigo no es suyo sino de alguno que lo puso en alguna pagina de internet.

Luego he seguido leyendo muchas cosas divertidas. "Infeccion" de carpetas, infeccion P2P... todo muy bonito, pero en todos los articulos cometen los mismos fallos: el codigo esta lleno de sentencias "hardcoded", supone que podemos escribir en el registro, que tenemos permisos de escritura sobre elementos de sistema, etc, etc... El de P2p se basa en copiarse con extensiones como .avi.exe.... mas usado que el coño de la Bernarda...Son las cosas mas simples y tontas que es practicamente imposible que lleguen a funcionar bien.

Hay un articulo sobre como hacer scripts VBS indetectables. Atentos a lo que el autor del susodicho articulo propone para hacerlo...... !crear un proyecto en VB6.0 y plantar el codigo VBS tal cual en la carga del formulario inicial y generar un EXE¡ Cuando he leido esto me he quedado a cuadros pero es que dice literalmente ...

Cita:
Ahora, nuestro VBS es extensión EXE. =P, sin necesidad de saber nada de Visual Basic 6.0


:D :D :D :D ¿pero que dice este? "nuestro VBS es extension EXE" :D :D :D :D Y dice a contiuacion...

Cita:
Pero si este EXE si es ejecutado en una PC que tenga un antivirus con ScriptBlocking como el Norton 2002 no se daria cuenta de los comandos VBS que usamos y no alertará al usuario de la existencia de nuestra criatura, dejando al usuario a nuestra merced. =)


:D :D :D.... lo siento pero me he descojonado vivo al leer esto.... Pero vamos a ver hombre de dios..... ¿¿¿como te va a detectar eso como un script VBS SI ES UN EXE???? o sea !!es un programa corriente y moliente¡ :D :D :D

Ahora yo me pregunto. Has hecho un EXE.. ¿y? ¿que narices haces con esto amigo?...

Bueno, tal vez luego siga comentando esto... En otra ezine que tienen apuestan por una tecnica que haria reir a toda la "comunidad virica"... la "apoptosis" !ay que me da¡ :D :D

Pues eso... Creo que lo que quiero decir esta claro. Que hay mucho tocanarices y abrazafarolas por ahi creyendose el amo del cotarro....
Mensaje 05/07/2006 21:47:03
Responder citando
Siren
vida restante: 100%
Ver perfil de usuarioEnviar mensaje privadoEnviar email
Registrado: 1 Nov 2002
Mensajes: 8.197
Uff, suena interesante, a ver si encuentro un ratillo para leerlo. Gracias!
Publicar nuevo tema Responder al tema Zona Foro -> Software
Página 1 de 2
1
  >>
LO MÁS NUEVO EN MERISTATION.COM
Artículo: Regreso al Pasado: Recreativas Míticas ()
Regreso al Pasado: Recreativas Míticas
Artículo
Artículo: APM 218: Rumores Remix (PC)
APM 218: Rumores Remix
Artículo | PC
Avance: King's Bounty: Armored Princess, Impresiones (PC)
King's Bounty: Armored Princess, Impresiones
Avance | PC
Avance: Dark Void, Impresiones (360)
Dark Void, Impresiones
Avance | 360
Análisis: Los Sims 3: Trotamundos (PC)
Los Sims 3: Trotamundos
Análisis | PC
Copyright © MeriStation.com | Contacto Powered by phpBB © 2001, 2005 phpBB Group