título: hacking con python - sh3llconconsiste en inyectar rutinas en procesos que se encuentran en...

20
Título: Hacking con Python Ponente: Daniel Echeverri Montoya.

Upload: others

Post on 19-Mar-2020

17 views

Category:

Documents


0 download

TRANSCRIPT

Título: Hacking con PythonPonente: Daniel Echeverri Montoya.

Nickname: Adastra (@jdaanial)

Blog: thehackerway.com

The Hacker Way: thehackerway.es

THW Academy: academy.thehackerway.com

Consultor e Investigador independiente de seguridad informática y hacking.

AGENDA

Manipulando shellcodes y malware desde Python.

- Creación de rutinas para la inyección de código malicioso con Python.

- Inyección de código en procesos bajo sistemas Gnu/Linux.

- Inyección de código en procesos bajo sistemas Windows.

AGENDA

Monitorizar la actividad del usuario.

- Creación de keyloggers con Python.

- Creación de screen scrapers.

- Creación de webcam scrapers.

Creación de herramientas para monitorización y control

Let’s get evil :-)

Creación de herramientas para monitorización y control

- Rutinas que permitan controlar la interacción del usuario con el sistema (dispositivos de entrada y salida).

- Comunicación bidireccional entre víctima y atacante por medio de un canal de comunicación cifrado.

- Definición de un protocolo compartido/conocido entre ambas partes para el intercambio de información.

- Modelo master/slave: El servidor (atacante) envía las rutinas que debe ejecutar el cliente (víctima) utilizando un protocolo común y conocido por ambas partes.

- Comunicación anónima entre atacante y víctima (servidor como servicio oculto en alguna solución de anonimato existente).

Inyección de malware sobre Windows.- Una de las técnicas más comunes a la hora de desarrollar malware,

consiste en inyectar rutinas en procesos que se encuentran en ejecución en la víctima.

- Un atacante puede seguir dos caminos que le ayudarán a reafirmar su presencia en la víctima, el primero consiste en inyectar librerías con código malicioso que se deberán subir al sistema comprometido y el segundo en inyectar shellcodes directamente en el espacio de direcciones de un proceso.

Inyección de malware sobre Windows.- Independiente del enfoque empleado, en ambos casos es

necesario crear un hilo en el espacio de memoria virtual del proceso.

- En sistemas Windows dicho hilo se puede crear con la función "CreateRemoteThread", la cual se encuentra incluida en la librería "kernel32.dll".

Inyección de malware sobre Windows.https://msdn.microsoft.com/es-es/library/windows/desktop/ms682437(v=vs.85).aspx

HANDLE WINAPI CreateRemoteThread(

_In_ HANDLE hProcess,

_In_ LPSECURITY_ATTRIBUTES lpThreadAttributes,

_In_ SIZE_T dwStackSize,

_In_ LPTHREAD_START_ROUTINE lpStartAddress,

_In_ LPVOID lpParameter,

_In_ DWORD dwCreationFlags,

_Out_ LPDWORD lpThreadId

);

Inyección de malware sobre Windows.- Inyectar DLLs en procesos que se encuentran en ejecución, a

menudo se asocia con una actividad maliciosa, sin embargo se trata de una técnica utilizada por varias herramientas de seguridad para analizar el comportamiento de los procesos activos.

- Esta técnica se basa en la creación de una librería compilada, la cual posteriormente se carga en la memoria de un proceso determinado.

- Para cargar una librería DLL en la memoria de un proceso en ejecución, es necesario utilizar la función "LoadLibrary" o "LoadLibraryEx", las cuales se encuentran definidas en la librería "kernel32.dll".

Inyección de malware sobre Windows.- Dichas funciones permiten mapear el módulo ejecutable en el

espacio de direcciones del proceso. Admiten módulos DLL y ejecutables EXE.

https://msdn.microsoft.com/es-es/library/windows/desktop/ms684175(v=vs.85).aspx

HMODULE WINAPI LoadLibrary(

_In_ LPCTSTR lpFileName

);

Inyección de malware sobre Windows.- El procedimiento a seguir es el siguiente:

1– Generar el shellcode/librería

2– Se debe abrir el proceso objetivo con las flags adecuadas para manipularlo. Utilizar kernel32.OpenProcess.

3– Reservar espacio en el proceso para inyectar la librería en el proceso objetivo. Utilizar kernel32.VirtualAllocEx y kernel32.WriteProcessMemory

4– Resolver la librería kernel32.LoadLibraryA

5– Crear un nuevo hilo en el proceso con kernel32.CreateRemoteThread

Inyección de malware sobre Windows.

Inyección de malware sobre GNU/Linux.- Una de las formas más comunes de monitorizar y controlar el

comportamiento de los procesos en un sistema Linux, consiste en usar la system call “ptrace” y la implementación “python-ptrace” permite interactuar directamente con dicha función desde cualquier script escrito en lenguaje Python.

- Con “ptrace” además que acceder a la información del proceso, también es posible inyectar rutinas de código ejecutable directamente en la memoria de dicho proceso y manipular el Instruction Pointer para que el shellcode inyectado se ejecute inmediatamente.

Inyección de malware sobre GNU/Linux.

Keylogger (Windows).- Un keylogger básico se encarga de registrar todas las teclas

pulsadas por la víctima en un sistema comprometido.

- Es posible implementar Keyloggers en Python utilizando las librerías PyWin (http://sourceforge.net/projects/pywin32/) y PyHook (http://sourceforge.net/projects/pyhook/), las cuales solamente se encuentran disponibles en sistemas Windows.

- Contienen funciones que permiten enganchar los principales eventos de entrada en el sistema, como por ejemplo eventos del teclado o del ratón.

Keylogger (GNU/Linux).- Una implementación bastante habitual en sistemas Linux es Xorg,

el cual utiliza XKB (X Keyboard Extension) para configurar el mapa de caracteres del teclado dependiendo del idioma utilizado por el usuario.

- La librería “Xlib” provee una función llamada “XqueryKeymap”, la cual recibe como parámetro una conexión al servidor X y devuelve un array de bytes con las teclas que se han presionado.

Screen scraper.- Para un atacante también puede ser útil tomar capturas de pantalla

y ver gráficamente lo que el usuario esta viendo en un momento determinado.

- PIL (Python Imaging Library) sirve para éste propósito, sin embargo, la clase “ImageGrab” que es la encargada de tomar capturas de pantalla en PIL, solamente funciona en sistemas Windows.

- Otra alternativa se encuentra en la librería “pyscreenshot” que funciona como un envoltorio de las funciones de “ImageGrab” que es independiente de plataforma.

Webcam scraper.- Si un atacante consigue introducirse en el ordenador de su víctima,

no solamente tendrá la posibilidad de registrar los eventos producidos por el teclado y el ratón, sino que también podrá activar la cámara y capturar lo que ésta registra.

- La librería “opencv” incluye utilidades para el procesamiento de imágenes, detección de objetos y permite controlar las cámaras que se encuentren instaladas en el ordenador.

- El enfoque del atacante consistirá en primer lugar en crear un objeto del tipo “VideoCapture” y posteriormente, iniciar un servidor web en la máquina de la víctima, desde donde se transmitirá cada uno de los frames generados del objeto “VideoCapture” de OpenCV.

- Se puede crear un servidor HTTP básico y emitir respuestas a los clientes con Apache o las utilidades incluidas en Python.

¿Preguntas?.