1. www.secadmin.es#secadmin2017 Security Conference 2017 Ed. Resilience
Título: Hacking con Python
Ponente: Daniel Echeverri Montoya.
Cargo o puesto: Founder at The Hacker Way.
Fecha: 25/11/2017
www.secadmin.es#secadmin2017 Security Conference 2017
Evento: SecAdmin Security Conference
2. www.secadmin.es#secadmin2017 Security Conference 2017 Ed. Resilience
Nickname: Adastra (@jdaanial)
Blog: thehackerway.com
The Hacker Way: thehackerway.es
THW Academy: academy.thehackerway.com
Formador, consultor e Investigador de seguridad
informática y hacking.
3. www.secadmin.es#secadmin2017 Security Conference 2017 Ed. Resilience
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.
4. www.secadmin.es#secadmin2017 Security Conference 2017 Ed. Resilience
AGENDA
Monitorizar la actividad del usuario.
- Creación de keyloggers con Python.
- Creación de screen scrapers.
- Creación de webcam scrapers.
6. www.secadmin.es#secadmin2017 Security Conference 2017 Ed. Resilience
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).
7. www.secadmin.es#secadmin2017 Security Conference 2017 Ed. Resilience
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.
8. www.secadmin.es#secadmin2017 Security Conference 2017 Ed. Resilience
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".
10. www.secadmin.es#secadmin2017 Security Conference 2017 Ed. Resilience
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".
11. www.secadmin.es#secadmin2017 Security Conference 2017 Ed. Resilience
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
);
12. www.secadmin.es#secadmin2017 Security Conference 2017 Ed. Resilience
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
14. www.secadmin.es#secadmin2017 Security Conference 2017 Ed. Resilience
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.
16. www.secadmin.es#secadmin2017 Security Conference 2017 Ed. Resilience
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.
17. www.secadmin.es#secadmin2017 Security Conference 2017 Ed. Resilience
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.
18. www.secadmin.es#secadmin2017 Security Conference 2017 Ed. Resilience
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.
19. www.secadmin.es#secadmin2017 Security Conference 2017 Ed. Resilience
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.