Jueves, 20 de Noviembre de 2008
Win32.Girigat: Búsqueda por acción directa
· Generalidades
· Inicialización
· Automutación
· Activaciones gráficas
· Residencia por proceso
· Búsqueda por acción directa
· Infección del formato PE
· Nombre del virus
· Conclusión
· Girigat1.jpg
· Girigat3.jpg
· Presentación

Volver al indice de articulos
La otra alternativa en cuanto al método de acceso a posibles víctimas se refiere es la accíón directa, cuya presencia no excluye la presencia del otro método posible, la recién explicada residencia por proceso.

La acción directa no representa nada nuevo de lo que podamos ofrecer información que la mayoría de los lectores no conozcan: desde los primeros virus de fichero del DOS hasta Bizatch, el primer ejemplar nativo de Win95, el procedimiento no ha cambiado: lo único nuevo en Win32 es la adaptación de las rutinas ya conocidas al sistema de APIs, que también han traído consigo nuevas estructuras, como la conocida como WIN32_FINDDATA, que se podría describir como una especie de unión entre la DTA (Disk Transfer Area) y la SFT (System File Table) del DOS, a juzgar por los datos que nos facilita en relación con los ficheros encontrados por Find(First/Next)File.

Tras dilucidar si el flag correspondiente a la búsqueda de ficheros por acción directa está en su posición on, y siempre que esto sea así, Girigat pasa a comprobar otro de sus flags, mediante el cual determinará si el radio de acción del runtime afectará tan solo al directorio actual o si llegará a afectar también al directorio en donde está ubicado Windows(9x/NT). Las APIs empleadas con el propósito de obtener el nombre de dichos directorios son GetCurrentDirectory y GetWindowsDirectory, y, a partir de aquí, la rutina empleada para buscar y procesar ficheros es la misma.

Dicha rutina comienza comprobando que el directorio actual no es el raíz, en donde la actividad vírica podría llamar más la atención que en el resto de los directorios del disco duro, debido a que generalmente es en el que se tiene un mayor control del tamaño de los ficheros. Girigat efectúa esta comprobación por medio de un ingenioso truco: si la distancia entre el último y el primer byte de la cadena ASCIIZ correspondiente al nombre del directorio actual es igual a cuatro, no cabe la menor duda de que se trata del raíz (ya que cuatro son los bytes que ocupan la letra de la unidad, los dos puntos, la barra invertida y el cero que indica el final de la cadena).

A partir de aquí el virus emplea Find(First/Next)File para encontrar ficheros, por medio del wildcard o patrón de búsqueda "*.*", ya que Girigat es capaz de infectar ficheros con distintas extensiones (en este caso, CPL, EXE y SCR). Una vez que la estructura WIN32_FINDDATA contiene los datos de alguna posible víctima, el virus comprueba que el tamaño del fichero deja espacio suficiente para el cuerpo del virus y 4096 bytes extra sin llegar a alcanzar el tope de los FFFFFFFFh bytes. En caso de que el fichero haya pasado este fácil "test", Girigat pasará a llamar a una función específica de manipulación de posibles víctimas, la cual emplea también desde los handlers residentes, tras haber procesado el nombre del fichero por medio de un bucle de homologación. Las comprobaciones efectuadas por medio de esta rutina común se limitan a chequar la extensión del fichero de acuerdo con los flags activados (CPL, EXE o SCR) y a llamar a la consiguiente rutina de infección en caso de que todo haya salido como el virus esperaba.

Éste es el proceso que sigue Girigat para encontrar ficheros nuevos por infectar, y así es como "trabaja" con cada uno de los programas que caen en sus manos por medio de las APIs FindFirstFile y FindNextFile, hasta que esta última retorna un error, al no haber más ficheros en el directorio en el que el virus está procurándose nuevas víctimas. Como es posible apreciar, este método de infección no posee nada de especial ni ningún detalle excepcional digno de reseñar, por lo que directamente pasamos a analizar el siguiente apartado del virus, la rutina de infección de ficheros.