Black Hole organizacion
CostaRica  
  Bienvenida
  Hackers
  Foro ingresa
  Noticias
  Contacto
  Imagenes
  Programas
  Visitantes
  Chat
  Libros
  => hacker
  => Virus
  => Cracker
  => Lecciones hackin
  => Programacion
  => Diseños web
  => Guia de hackin
  => Privasidad
  => Guia → 1
  => Guia → 2
  => Guia → 3
  => Guia → 4
  => Guia → 5
  => Guia → 6
  => Guia → 7
  => Guia → 8
  => Guia → 9
  => Guia → 10
  => Guia → 11
  => Como intrudusirse aun sistema
  => shellcodes_linux-1
  => shellcodes_linux -2
  => UN-scodes.
  => Guia version Deluxe
  => Ser Hacker dentro de Términos Legales
  => Como hackear una paginaweb
  => Comoprogramar un Virus
  => Como Crear un Virus
  => Cuantos tipos de Virus existen
  => Programaciones de un virus
  => Estructura de computadores
  => Fundamentos de SSOO
  => Sistemas de numeración
  => Ensamblador I: Conceptos básicos
  => Ensamblador II
  => Utilidades para la programación
  => Infección bajo Windows
  => Infección bajo Linux
  => Técnicas avanzadas
  => Apéndices
  => CONOCIENDO LA MAQUINA
  => DIRECCIONAMIENTO DE MEMORIA EN EL 8086
  => CHIPS DE APOYO (Ampliación de la lección 1)
  => LA PILA DEL 8086
  => CODIFICACIÓN DE LAS INSTRUCCIONES EN EL 8086
  => Manual HTML
  => Ataques basados en Desbordamiento de Buffer (Buffer Overflow)
  => Privasidad
  => Escaneo
  => anti Escaneo y Escaneo
  => Malianom
  Triang
  Tersirve esta paguina?
  -
  juegos
  Vagos
  mapa
  Mapa del sitio
  546
Como Crear un Virus

Atras

1.- Introducci¢n: T‚cnicas de protecci¢n %                                  

    **************************************

   

     Cuando uno hace virus se topa con tres tipos de conocimientos        

referentes a como hacerlos: T‚cnicas de reproducci¢n, T‚cnicas de Ataque y

T‚cnicas de protecci¢n. Las t‚cnicas de ataque son las que permiten al    

virus mostrar su presencia (o da¤ar), y no son muy interesantes, y la     

mayor¡a de virus no las usa. Las t‚cnicas de reproducci¢n incluyen todos  

los conocimientos relacionados con como y cuando infectar ("como infectar 

EXE", "Como hacer un fast infector" etc) que son tratadas en otros        

art¡culos de esta ilustre revista :-).                                    

     Las t‚cnicas de protecci¢n apuntan a proteger el virus de sus        

"enemigos naturales": El usuario observador y El Antivirus. El Usuario    

Observador amenaza la vida del virus d ndose cuenta de su existencia en el

sistema (para luego sacarlo). Algunas t‚cnicas de protecci¢n, entonces,   

apuntan sencillamente a hacer la presencia del virus poco visible, y un   

ejemplo de esto es el Directory-Stealth, t‚cnica que consiste sencillamente

en ocultar el size de los archivos infectados en el comando DIR.          

     El Antivirus, segundo enemigo natural, amenaza la vida del virus     

d ndose cuenta de la presencia del virus y avisando al usuario. Existen   

muchos tipos de t‚cnicas usadas para enga¤ar al Antivirus, entre ellas el 

stealth y el Tunneling.                                                    

                                                                          

2.- Tunneling %                                                             

    ***********

   

     El tunneling apunta a proteger al virus de los m¢dulos residentes de 

los antivirus, que monitorean todo lo que sucede en la maquina para       

interceptar todas las actividades "t¡picas" de los virus.                 

     Para entender como funciona esta t‚cnica, basta saber como trabaja   

este tipo de antivirus. El modulo residente queda colgado de todas las    

interrupciones usualmente usadas por los virus (INT 21, INT 13, a veces INT

25 Y 26) y entonces cuando el virus intenta llamar a INT 21, por ejemplo, 

para abrir un ejecutable para lectura/escritura (y luego infectarlo), el  

antivirus chilla, pues los ejecutables no son normalmente abiertos, ni    

menos para escritura. Y as¡ con todas las llamadas t¡picas de los virus. En

cambio, cuando se hace una llamada com£n y corriente, el antivirus no     

chilla y la deja pasar, llamando a la INT 21 original.                    

     Un virus con tunneling, entonces, antes de llamar a ninguna funci¢n ni

hacer nada, intenta obtener el address absoluto de esta INT 21 original,  

que esta en alguna parte de la memoria del antivirus residente. Una vez que

obtiene este address, accede al DOS por medio de el, sin llamar al        

antivirus. Y as¡, efectivamente, le "pasa por debajo", lo "tunelea". ¨Como

se hace esto?                                                             

                                                                          

2.1.- Tipos de tunneling %                                                    

     *********************

 

     Existen dos formas fundamentales de obtener este address. La primera,

y la mas usada, es utilizando la interrupci¢n de trace (INT 1) y la trap  

flag. (Que son usadas por los DEBUGGERS) para atravesar el c¢digo orden a 

orden hasta hallar lo que se busca. La segunda, hacer un simple y llano   

scanning del c¢digo, byte a byte, hasta hallar el address.                

     La primera forma de tunneling es usada por todos los virus que usan  

esta t‚cnica, como por ejemplo, el Predator II o el (ya viejo) Yankee     

Doodle. La segunda no se usa en ning£n virus, pero es la que usa Kohntark 

en su celebre Kohntark Recursive Tunneling Toolkit. Pasemos a los detalles

t‚cnicos...                                                                

                                                                          

2.2.- La referencia %                                                         

      ***************

    

     Antes de ponerse a buscar, por cualquiera de los dos m‚todos, es     

necesario obtener el segmento del DOS, para poder ir comprobando a medida 

que se encuentren addresses si son o no el de la INT 21. Hay varias formas

de obtener el segmento de DOS antes de empezar a "tunelear". Una de ellas 

es obtener las INTs internas del DOS y ver cual es su segmento (Usada en la

KRTT). Otra es llamar a la funci¢n (no documentada) del sistema, funci¢n  

1203h, interrupci¢n 2Fh. El Yankee Doodle sencillamente considera que todo

segmento menor a 300h es el de la INT 21. Todos estas formas son validas, 

con sus pros y sus contras, a saber:                                      

     Ints internas: El obtener los segmentos de las INTS internas es seguro

en la mayor¡a de los casos, pero ¨que pasar¡a si estos segmentos son      

distintos entre si? Esto querr¡a decir que alguna de las INTs fue capturada

por alg£n programa, y no se podr¡a tunelear. Y lo que es peor, podr¡a     

suceder que TODAS las ints internas del dos estuvieran capturadas, con lo 

cual el virus considerar¡a que el segmento del DOS es el segmento del     

programa que capturo las INTS sin darse cuenta de nada! (Fatal! ARGH!)    

     Funci¢n 1203, INT 2F: Esta es una funci¢n No-Documentada del DOS, que

retorna el DS del sistema. Un punto en contra es precisamente que sea no  

documentada, ya que podr¡a dejar de aparecer en futuras versiones de DOS. 

(Adem s podr¡a ser capturada, aunque no lo creo, porque es interna).      

     Segmento DOS < 300: Es efectiva, pero podr¡a suceder que en          

determinadas configuraciones fuera mayor a 300. Es un dato "de hecho", en 

ning£n lugar esta documentado, pero siempre es menor. Sin embargo, quien  

sabe en futuros DOS, en futuras configuraciones, lo que podr¡a pasar.     

     Ahora veamos, esas t‚cnicas...                                       

                                                                          

2.1.1.- Trace Tunneling %                                                        

        *****************

 

     Para entender la primera t‚cnica basta una breve explicaci¢n de como 

funciona un debugger. Para hacer un sencillo trace, en un debugger ('T' en

DEBUG y F7 en Turbo Debugger) primero se prende la "trap flag". Esta flag 

es el primer bit del byte mas alto del registro de flags (flags=100h). No 

hay ordenes para prenderla, por lo que se lo debe hacer manipulando un    

poco. Este c¢digo enciende la flag:                                        

          pushf                                                           

          pop ax                                                          

          or ax, 100h                                                     

          push ax                                                         

          popf                                                            

     Cuando esta encendida esta flag, cada vez que se ejecuta una         

instrucci¢n, la INT 1 es llamada. Entonces el DEBUGGER tiene interceptada 

esta interrupci¢n, y manipula todo para suspender la ejecuci¢n y volver al

debugger. De este modo, se ejecuta UNA instrucci¢n y se vuelve al prompt  

del debugger.                                                              

     ¨Como sirve esto al tunneling? Pues es sencillo: el virus enciende la

trap flag y llama a la INT 21 (osea, al antivirus que esta colgado de la  

int 21 :-)). Y recordemos que al llamar a una INT (la INT 1 en este caso, 

que es llamada luego de ejecutada cada instrucci¢n) quedan en la stack seis

bytes: las flags, y el CS:IP de retorno. La rutina de INT 1 del virus se  

fija cada vez que es llamada en ese CS que queda en la stack, y si es igual

al del DOS (que tiene de antes), entonces apaga la trap flag y guarda el  

CS:IP, pues este es el addres de la INT 21 "posta". Y el laburo ya esta   

hecho...                                                                  

     He aqu¡ una rutina basica y tipica de INT 1 para tunneling:          

NewInt1:                                                                  

     push bp                                                              

     mov bp, sp                                                            

     push dx                                                              

     mov dx, cs:DosSegm                                                   

     cmp [bp+6], dx                                                       

     jz Found                                                             

     pop dx                                                               

     pop bp                                                               

     iret                                                                  

Found:                                                                    

     mov dx, [bp+6]                                                       

     mov cs:OldInt21+2, dx                                                 

     mov dx, [bp+4]                                                       

     mov cs:OldInt21, dx                                                  

     pop dx                                                               

     pop bp                                                                

     add sp, 6                                                            

     ...                                                                  

                                                                           

2.1.1.1.- Flaquezas del trace tunneling %                                         

          ******************************

 

     El problema mayor del trace es que REALMENTE se esta ejecutando el   

c¢digo del antivirus. Esto da lugar a muchos problemas, como por ejemplo, 

que el antivirus deshabilite interrupciones con CLI o poniendo a OFF la   

TRAP FLAG. O que reemplace la rutina en INT 1 por una rutina "dumb".      

     Otro tema es que el trace no inspecciona las INTs por adentro. Es    

decir, ejecuta la INT, pero no la tracea. Por ejemplo:                    

     mov ax, 1 ; ok, trace                                                

     mov bx, 2 ; sigue el trace                                            

     int 25h   ; pero ac  no tracea la int 25 por adentro, sino           

     nop       ; que viene ac , al NOP.                                   

     Esto hace que si el antivirus redireccion¢ la INT 21 a otra INT sin  

usar, y la usa llamando a esta nueva INT, te jode. (Por ejemplo, copio el 

addres de INT 21 a INT 60, y llama a INT 60 para hacer sus llamadas).     

     Cabe observar, sin embargo, que en principio uno tiene cierto control.

Uno podr¡a fijarse, desde la rutina de INT 1, si la pr¢xima orden es un CLI

y saltearlo. Pero esto deberia hacerse con un mont¢n mas de otras cosas, y

presumiblemente ocasionar¡a que la maquina se cuelgue en muchos casos. (Por

ejemplo, saltearse un CLI hecho antes de que se haga un cambio de stack   

seria fatal)                                                              

                                                                          

2.1.2.- Byte-to-Byte scanning: KRTT %                                           

        *****************************

 

     El KRTT es el £nico en el caso de scanning byte-a-byte. Este consiste

en sencillamente en buscar byte a byte hasta encontrar instrucciones que  

entreguen el control a rutinas remotas (FAR). Osea, se scanea buscando los

c¢digos maquina de las siguientes instrucciones:                          

     JMP FAR XXXX:XXXX   ; (n¢tese que estos no son las £nicas)           

     CALL FAR XXXX:XXXX  ; (instrucciones para pasar el control)          

     CALL FAR CS:VVVV    ; (a rutinas FAR. Es una de las)                 

     JMP FAR CS:VVVV     ; (flaquezas del KRTT)                           

     Cuando se encuentran estos c¢digos-maquina, se toman los addreses a  

los que se quiere pasar el control, y se compara con el segmento del DOS. 

Si son iguales, se encontr¢ la INT 21 original. Si no, se sigue scaneando 

desde ah¡.                                                                

                                                                           

2.1.2.1.- Flaquezas del scaning byte a byte %                                     

          ***********************************

 

     Parece muy sencillo, pero la rutina, necesariamente, tiene que ser   

recursiva. Adem s, tiene el problema de que se scanea siempre hacia       

adelante, y no se sigue el flujo de control; (seria f cil seguirlo si se  

encuentra un JMP NEAR o CALL NEAR, pero ¨que hacer con un JZ o cualquier  

otro condicional?) esto produce que si el JMP o CALL a la int 21 se       

encuentra ANTES del punto de entrada de la INT del antivirus, el tunneling

falla.                                                                    

     Adem s hay otras formas de entregar el control a una rutina remota,  

como por ejemplo: con RETF. Seria _muy_ dif¡cil, por no decir imposible,  

que un tunneling con scaning pudiera seguir con ‚xito QUE esta pasando en 

la stack, como para poder considerar un RETF. En el KRTT ni siquiera esta 

contemplado, y sin embargo es tan f cil entregar el control con RETF...   

     Y otra fuerte falla del scanning byte a byte es que si por casualidad

pasa sobre una zona de datos, que por una de esas cosas del destino       

contiene, como dato, el c¢digo binario de una de las instrucciones de     

entrega de control, el scanning la tomar¡a como instrucci¢n, aunque es    

dato. Esto es imposible de evitar en este tipo de tunneling.              

                                                                           

2.2.- Problemas Generales del Tunneling %                                     

      **********************************

 

     Pero el problema principal del tunneling es que aun teniendo ‚xito en

obtener la INT 21 posta, se pueden tener problemas si hay alg£n residente 

importante y uno lo esta pasando por debajo. Es famoso ya el caso del     

Predator II y el DoubleSpace. El predator II tuneleaba por debajo del     

DoubleSpace y trataba de acceder al disco directamente por DOS. Esto      

produjo que trasheara mas de un disco (:-)). En definitiva, esto es       

contrario a las intenciones del tunneling, pues el usuario no necesita que

el antivirus le diga que tiene virus: se da cuenta solo al ver que su disco

esta hecho pur‚. (JA!).                                                   

                                                                          

2.3.- Conclusi¢n %                                                            

      ************

 

     Espero que les haya sido de utilidad. El tunneling es una t‚cnica    

bastante buena, y al mismo tiempo sencilla (mucho mas sencilla que        

polimorfismo o stealth, por ejemplo), y sin embargo no es tan usada. ­Vamos

muchachos, p¢nganse las pilas, que con 50 bytes tienen un tunneling (medio

truch¢n, pero bueno :-))!                                                 

     Para ayudarlos, les prometemos los sources de la KRTT, y del Yankee  

Doodle, comentados, para que tengan buenos ejemplos. Y por ahi, tambien el

del Predator II.                                                          

     Hasta la pr¢xima...  
Black Hole  
   
Facebook botón-like  
 
 
Hoy hay 27 visitantes¡Aqui en esta página!
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis