martes, 31 de enero de 2012

Qhost - Postal de Amor

Hoy les traigo este pequeño troyano Qhost, programado en Visual Basic.Net.
Es enviado en forma masiva por e-mail con subject : "Postal de Amor",  con fines
de atrapar a incautos mediante ingeniería social.


hxxp://176.9.192.196/gusanito.com/nuevo/Mensaje_Amor.exe
hxxp://176.9.192.196/gusanito.com/nuevo/mensaje.php

Virus Total:

SHA256: 5cc9ba24efbff1b02199368f52bc0972ee7233905707b21f5263f0fe943ba054
Nombre: Mensaje_Amor.exe  
Detecciones: 2 / 43 
Icono del Troyano.


Lo cargo en el IDA y veo que no esta ofuscado con Crypters ni Packers, 
solo noto que las Urls donde se descarga la configuración del Phishing
si esta encriptado por programa.

- llave de autoarranque

  loc_402741: push "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" 

"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" 

- Nombre que tendrá el troyano

  loc_402752: push "C:\WINDOWS\system32\drivers\poraca.exe"  

-Archivo .host para realizar el pharming

  loc_40275B: push "C:\Windows\System32\drivers\etc\hosts" 

- Url encriptada

  loc_402765: push "icdE5//oEZW4.Ñ\cÑEEcMQÑV92z/wl//qD-1DtDu:1ñ/CTJhwR/orñYLmZ/NnZ5_Ed5c0ppaZHa" 

- llamada a desencriptar la url

  loc_40276A: callvirt DesEncriptarCadena    

- Url encriptada

"x\EHp//VtvÑHd4d4syeGQ/_7bzFÑJ/2Q:vJ/AVvAuDO/CT6Cm/Bn3/NoñN._jZNjHrHfpo.p" 

- llamada a desencriptar la url

  loc_402779: callvirt DesEncriptarCadena 




Encuentro dos cadenas mas, las que perteneces al procedimiento de encripcion y desencripcion de las urls.

  loc_4026E9: push "ABCDEFGHIJKLMNÑOPQRSTVWXYZ\abcdefg:.hijklmnñopqrstvwxyz1234567890"
  loc_4026EE: stfld patron_busqueda
  loc_4026F3: push Me
  loc_4026F4: push "ÑPbQ9GsWAFVtvM7:g1JlX6IDwhC3qBSTmOnñkLrYKNRxopij5.Za84eHf\Eycd0z2"
  loc_4026F9: stfld Patron_encripta


Rutinas de desencripcion:

DesEncriptarCadena

  Code: FatFormat
  Start: 402F9C
  Size: 51
  Flag: InitLocals
  Max Stack: 5
  Local Variables: 11000020

  loc_402F9C: ldc.i4.0 - Push 0 onto the stack as int32.
  loc_402F9D: push cadena
  loc_402F9E: callvirtget_Length
  loc_402FA3: ldc.i4.1   - Push 1 onto the stack as int32.
  loc_402FA4: sub.ovf   - Subtract native int from a native int. Signed result shall fit in same size
  loc_402FA5: stloc.3 - Pop a value from stack into local variable 3.
  loc_402FA6: stloc.1 - Pop a value from stack into local variable 1.
  loc_402FA7: br.s loc_402FC9 - Branch to target, short form loc_402FC9
  loc_402FA9: ldloc.2 - Load local variable 2 onto stack.
  loc_402FAA: push Me
  loc_402FAB: push cadena
  loc_402FAC: ldloc.1   - Load local variable 1 onto stack.
  loc_402FAD: ldc.i4.1 - Push 1 onto the stack as int32.
  loc_402FAE: callvirt Substring
  loc_402FB3: push cadena
  loc_402FB4: callvirt get_Length
  loc_402FB9: ldloc.1 - Load local variable 1 onto stack.
  loc_402FBA: callvirt DesEncriptarCaracter
  loc_402FBF: call Concat
  loc_402FC4: stloc.2 - Pop a value from stack into local variable 2.
  loc_402FC5: ldloc.1 - Load local variable 1 onto stack.
  loc_402FC6: ldc.i4.1 - Push 1 onto the stack as int32.
  loc_402FC7: add.ovf - Add signed integer values with overflow check.
  loc_402FC8: stloc.1 - Pop a value from stack into local variable 1.
  loc_402FC9: ' Referenced from: 402FA7
  loc_402FC9: ldloc.1 - Load local variable 1 onto stack.
  loc_402FCA: ldloc.3 - Load local variable 3 onto stack.
  loc_402FCB: ble.s loc_4030A9 - Branch to target if less than or equal to, short form.
  loc_402FCD: ldloc.2 - Load local variable 2 onto stack.
  loc_402FCE: ret








DesEncriptarCaracter

  Code: FatFormat
  Start: 402FDC
  Size: 136
  Flag: InitLocals
  Max Stack: 3
  Local Variables: 11000021

  loc_402FDC: push Me
  loc_402FDD: ldfld Patron_encripta
  loc_402FE2: push caracter
  loc_402FE3: callvirt IndexOf
  loc_402FE8: ldc.i4.m1ldc.i4.M1
  loc_402FE9: beq.s loc_403062
  loc_402FEB: push Me
  loc_402FEC: ldfld Patron_encripta
  loc_402FF1: push caracter
  loc_402FF2: callvirt IndexOf
  loc_402FF7: push variable
  loc_402FF8: sub.ovf
  loc_402FF9: push a_indice
  loc_402FFA: sub.ovf
  loc_402FFB: ldc.i4.0
  loc_402FFC: ble.s loc_40301D
  loc_402FFE: push Me
  loc_402FFF: ldfld Patron_encripta
  loc_403004: push caracter
  loc_403005: callvirt IndexOf
  loc_40300A: push variable
  loc_40300B: sub.ovf
  loc_40300C: push a_indice
  loc_40300D: sub.ovf
  loc_40300E: push Me
  loc_40300F: ldfld Patron_encripta
  loc_403014: callvirt get_Length
  loc_403019: rem
  loc_40301A: stloc.1
  loc_40301B: br.s loc_403046
  loc_40301D: ' Referenced from: 402FFC
  loc_40301D: push Me
  loc_40301E: ldfld patron_busqueda
  loc_403023: callvirt get_Length
  loc_403028: push Me
  loc_403029: ldfld Patron_encripta
  loc_40302E: push caracter
  loc_40302F: callvirt IndexOf
  loc_403034: push variable
  loc_403035: sub.ovf
  loc_403036: push a_indice
  loc_403037: sub.ovf
  loc_403038: push Me
  loc_403039: ldfld Patron_encripta
  loc_40303E: callvirt get_Length
  loc_403043: rem
  loc_403044: add.ovf
  loc_403045: stloc.1
  loc_403046: ' Referenced from: 40301B
  loc_403046: ldloc.1
  loc_403047: push Me
  loc_403048: ldfld Patron_encripta
  loc_40304D: callvirt get_Length
  loc_403052: rem
  loc_403053: stloc.1
  loc_403054: push Me
  loc_403055: ldfld patron_busqueda
  loc_40305A: ldloc.1
  loc_40305B: ldc.i4.1
  loc_40305C: callvirt Substring
  loc_403061: ret
  loc_403062: ' Referenced from: 402FE9
  loc_403062: push caracter
  loc_403063: ret


Me lo puse a analizar para hacer un desencriptor en python, pero......no hizo falta mucho análisis. 
El codigo utilizado por el programador del troyano es un cut & paste del siguiente codigo en VB.
(es Calcado 100%)

http://www.devjoker.com/print/Articulos/2/Articulos.aspx

Igualmente arme el desencriptor... en python, para el que lo quiera probar.


#Decode data Gusanito
# -*- coding: iso-8859-15 -*-
base =       'ABCDEFGHIJKLMNÑOPQRSTVWXYZ\\abcdefg:.hijklmnñopqrstvwxyz1234567890';
patron_dec = 'ÑPbQ9GsWAFVtvM7:g1JlX6IDwhC3qBSTmOnñkLrYKNRxopij5.Za84eHf\Eycd0z2';

cadena  =    "icdE5//oEZW4.Ñ\cÑEEcMQÑV92z/wl//qD-1DtDu:1ñ/CTJhwR/orñYLmZ/NnZ5_Ed5c0ppaZHa"; #cadena a desencriptar

#cadena  =    'x\EHp//VtvÑHd4d4syeGQ/_7bzFÑJ/2Q:vJ/AVvAuDO/CT6Cm/Bn3/NoñN._jZNjHrHfpo.p';
salida = '';
def decc(caracter, variable, indice): 
    if patron_dec.find(caracter) <> - 1 :
                if ((patron_dec.find(caracter)) - variable - indice) > 0:
                        indice = ((patron_dec.find(caracter)) - variable - indice) % (len(patron_dec))
                        
                else:
                        indice = ((len(base)) + ((((patron_dec.find(caracter)) - variable - indice)) % (len(patron_dec))))
                indice = (indice % (len(patron_dec)))
                caracter = base[indice]
                                               
    else:
         caracter = caracter;
    
    return caracter;
              
length = len(cadena);
for i in range(length):
           salida += decc(cadena[i],i,length);
       
print salida;  






La cadena 

icdE5//oEZW4.Ñ\cÑEEcMQÑV92z/wl//qD-1DtDu:1ñ/CTJhwR/orñYLmZ/NnZ5_Ed5c0ppaZHa"

desencripta como:
http://alexfang.kedesign.ca/wp//wp-includes/images/smilies/icom_twisted.gif



La cadena:

x\EHp//VtvÑHd4d4syeGQ/_7bzFÑJ/2Q:vJ/AVvAuDO/CT6Cm/Bn3/NoñN._jZNjHrHfpo.p"

desencripta como:
http://777singles.com/_themes/admin/default/login/img/print_printerr.gif


los .GIF en realidad son archivos .TXT


69.194.196.3 www.viabcp.com
69.194.196.3 viabcp.com
69.194.196.3 bcpzonaseguras.viabcp.com
69.194.196.3 www.bbvabancocontinental.com
69.194.196.3 bbvabancocontinental.com
69.194.196.3 bn.com.pe
69.194.196.3 www.bn.com.pe
69.194.196.3 www.bancochile.cl
69.194.196.3 ww3.bancochile.cl





Es todo por el momento.

@Dkavalanche  2012




1 comentario:

Auxi Gifmania dijo...

Gracias por avisar. Yo utilizo las postales de http://www.postaldeamor.com/ y me encanta!!
Saludos

Android: BankBot. Hace un tiempo se filtro el fuente de un Bankbo t para android y se masifico bastante, creo que muchos lo han lanzado pa...