BYOB (Build Your Own Botnet) es un proyecto de código abierto que proporciona un framework para que los investigadores y profesionales de seguridad construyan y operen una botnet básica. Gracias a ésta herramienta se podrá:
- profundizar en la comprensión del malware cada vez más sofisticado que infecta millones de dispositivos cada año
- generar botnets modernas con el fin de mejorar su capacidad para desarrollar contramedidas contra este tipo de amenazas
La herramienta contiene 4 partes principales:
Servidor
uso: server.py [-h] [-v] [--host HOST] [--port PORT] [--database DATABASE]
Servidor de comando y control con base de datos persistente y consola
- Interfaz de usuario basado en consola: interfaz por consola para controlar las máquinas clientes de forma remota a través de shells reversas
- Base de datos persistente de SQLite: base de datos liviana que almacena información de identificación de las máquinas clientes, lo que permite que las sesiones de reversas persistan
- Arquitectura Cliente-Servidor: todos los paquetes/módulos python instalados localmente están disponibles automáticamente para que los clientes los importen de forma remota sin tocar el disco, permitiendo a los clientes utilizar módulos que requieren paquetes no instalados en las máquinas de destino
Cliente
uso: client.py [-h] [-v] [--name NAME] [--icon ICON] [--pastebin API] [--encrypt] [--obfuscate] [--compress] [--compile] host port [module [module ...]]
Genera clientes completamente indetectables con payloads staged, imports remotos y módulos ilimitados
- Imports remotos: importa remotamente paquetes de terceros desde el servidor sin escribirlos en el disco o descargarlos/instalarlos
- No escribe nada en el disco: los clientes nunca escriben nada en el disco, ni siquiera archivos temporales (se realizan llamadas al sistema IO zero) porque las importaciones remotas permiten que el código arbitrario se cargue dinámicamente en la memoria y se importe directamente en el proceso en ejecución
- Cero dependencias (ni siquiera el propio Python): el cliente ejecuta solo la biblioteca estándar de Python, importa de forma remota cualquier paquete/módulo no estándar del servidor y puede compilarse con un intérprete de Python independiente en un ejecutable binario portátil formateado para cualquier plataforma/arquitectura, lo que le permite ejecutarse en cualquier cosa, incluso cuando Python mismo falta en el host de destino
- Se pueden agregar nuevas funciones con solo 1 clic: cualquier script, módulo o paquete de Python que se copie en el directorio ./byob/modules/ automáticamente se puede importar de forma remota y puede ser utilizado directamente por cada cliente mientras el servidor de comando y control se está ejecutando
- Permite escribir módulos personalizados: se proporciona una plantilla de un módulo básico en el directorio ./byob/modules/ para que la escritura de módulos propios sea un proceso sencillo y sin problemas
- Ejecuta cualquier módulo sin importar el tamaño del archivo: utiliza imports remotos para agregar funciones sin agregar un solo byte al tamaño del archivo del cliente
- Totalmente actualizable: cada cliente revisará periódicamente el servidor para buscar nuevo contenido disponible y actualizará dinámicamente sus recursos en memoria si se ha agregado/eliminado algo
- Multi-plataforma: todo está escrito en Python y los clientes generados pueden compilarse opcionalmente en un ejecutable portátil (Windows) o agruparse en una aplicación independiente (macOS)
- Bypass de firewalls: los clientes se conectan al servidor de comando y control a través de conexiones TCP reversas, lo que evitará la mayoría de los firewalls porque las configuraciones de filtrado predeterminadas bloquean principalmente las conexiones entrantes.
- Medidas contra los antivirus: evita ser analizado por antivirus al bloquear procesos con nombres de productos antivirus conocidos
- Cifra payloads para evitar el análisis: el payload del cliente principal se cifra con una clave aleatoria de 256 bits que existe únicamente en el stager del payload que se genera al mismo tiempo
- Evita la ingeniería inversa: de forma predeterminada, los clientes cancelarán la ejecución si se detecta una máquina virtual o un entorno limitado
Módulos
Por el momento existen 11 módulos post-explotación que son remotamente importables por los clientes:
- Keylogger (byob.modules.keylogger): registra las pulsaciones del teclado del usuario y el nombre de la ventana ingresada
- Captura de pantalla (byob.modules.screenshot): toma una captura de pantalla del escritorio del usuario actual
- Webcam (byob.modules.webcam): visualiza streaming o captura imágenes/videos desde la cámara web
- Ransom (byob.modules.ransom): cifra archivos y genera una billetera BTC aleatoria para el pago de un rescate
- Outlook (byob.modules.outlook): lee/busca/sube correos electrónicos del cliente local de Outlook
- Packet Sniffer (byob.modules.packetsniffer): ejecuta un sniffer de paquetes en la red de host y sube el archivo .pcap
- Persistencia (byob.modules.persistence): establece persistencia en la máquina host usando 5 métodos diferentes
- Teléfono (byob.modules.phone): lee/busca/sube mensajes de texto desde el smartphone del cliente
- Escalado de privilegios (byob.modules.escalate): intenta el bypass de UAC para obtener privilegios de administrador no autorizados
- Escáner de puertos (byob.modules.portscanner): escanea la red local en busca de otros dispositivos online y puertos abiertos
- Control de procesos (byob.modules.process): lista/busca/mata/monitoriza los procesos actualmente en ejecución en el host
Core
6 módulos del framework principal utilizados por el generador y el servidor
- Utilidades (byob.core.util): funciones de utilidades varias que son utilizadas por muchos módulos
- Handlers (byob.core.handlers): handlers para recibir resultados de tareas completadas en clientes
- Seguridad (byob.core.security): modos de cifrado Diffie-Hellman IKE y 3 (AES-256-OCB, AES-256-CBC, XOR-128)
- Loaders (byob.core.loaders): importa de forma remota cualquier paquete/módulo/scripts del servidor
- Payloads (byob.core.payloads): shell inverso de TCP diseñado para importar de forma remota dependencias, paquetes y módulos
- Stagers (byob.core.stagers): generan payloads de stagers únicos para evitar el análisis y la detección
- Generators (byob.core.generators): funciones que generan dinámicamente código para el generador de clientes
- Base de datos (byob.core.database): maneja la interacción entre el servidor de comando y control y la base de datos SQLite
To-Do
Los autores de la herramienta comentan que cualquier contribución es bienvenida así que siéntete libre! De momento tienen identificado lo siguiente por hacer:
- Cifrado de los imports remotos: cifrado para los flujos de datos de paquetes/módulos que se importan de forma remota (para mantener la confidencialidad/autenticidad/integridad y evitar cualquier vulnerabilidad remota de ejecución de código derivada de la deserialización)
- Tipos de transporte: agregar soporte para más tipos de transporte (HTTP/S, DNS, etc.)
- Mejorar el módulo de teléfono/SMS: agregar la capacidad de propagación a través de correos electrónicos/mensajes de texto cuando se encuentre una lista de contactos en el host de destino
- Mejorar el módulo de Outlook/Correo electrónico: agregar la capacidad de difusión a través de correos electrónicos/mensajes de texto cuando se encuentre una lista de contactos en el host de destino
- Mejorar el módulo de Ransom: agregar métodos para usar una API de intercambio de Bitcoins para generar direcciones de billetera temporales que son exclusivas del host objetivo, hacerlas caducar después de un número determinado de horas sin recibir pago y notificar al servidor C2 (¿quizás a través de webhooks?) cuando se realice el pago o la billetera caduque
- Correción de errores: corregir cualquier error o problema
Github: https://github.com/colental/byob
- profundizar en la comprensión del malware cada vez más sofisticado que infecta millones de dispositivos cada año
- generar botnets modernas con el fin de mejorar su capacidad para desarrollar contramedidas contra este tipo de amenazas
La herramienta contiene 4 partes principales:
Servidor
uso: server.py [-h] [-v] [--host HOST] [--port PORT] [--database DATABASE]
Servidor de comando y control con base de datos persistente y consola
- Interfaz de usuario basado en consola: interfaz por consola para controlar las máquinas clientes de forma remota a través de shells reversas
- Base de datos persistente de SQLite: base de datos liviana que almacena información de identificación de las máquinas clientes, lo que permite que las sesiones de reversas persistan
- Arquitectura Cliente-Servidor: todos los paquetes/módulos python instalados localmente están disponibles automáticamente para que los clientes los importen de forma remota sin tocar el disco, permitiendo a los clientes utilizar módulos que requieren paquetes no instalados en las máquinas de destino
Cliente
uso: client.py [-h] [-v] [--name NAME] [--icon ICON] [--pastebin API] [--encrypt] [--obfuscate] [--compress] [--compile] host port [module [module ...]]
Genera clientes completamente indetectables con payloads staged, imports remotos y módulos ilimitados
- Imports remotos: importa remotamente paquetes de terceros desde el servidor sin escribirlos en el disco o descargarlos/instalarlos
- No escribe nada en el disco: los clientes nunca escriben nada en el disco, ni siquiera archivos temporales (se realizan llamadas al sistema IO zero) porque las importaciones remotas permiten que el código arbitrario se cargue dinámicamente en la memoria y se importe directamente en el proceso en ejecución
- Cero dependencias (ni siquiera el propio Python): el cliente ejecuta solo la biblioteca estándar de Python, importa de forma remota cualquier paquete/módulo no estándar del servidor y puede compilarse con un intérprete de Python independiente en un ejecutable binario portátil formateado para cualquier plataforma/arquitectura, lo que le permite ejecutarse en cualquier cosa, incluso cuando Python mismo falta en el host de destino
- Se pueden agregar nuevas funciones con solo 1 clic: cualquier script, módulo o paquete de Python que se copie en el directorio ./byob/modules/ automáticamente se puede importar de forma remota y puede ser utilizado directamente por cada cliente mientras el servidor de comando y control se está ejecutando
- Permite escribir módulos personalizados: se proporciona una plantilla de un módulo básico en el directorio ./byob/modules/ para que la escritura de módulos propios sea un proceso sencillo y sin problemas
- Ejecuta cualquier módulo sin importar el tamaño del archivo: utiliza imports remotos para agregar funciones sin agregar un solo byte al tamaño del archivo del cliente
- Totalmente actualizable: cada cliente revisará periódicamente el servidor para buscar nuevo contenido disponible y actualizará dinámicamente sus recursos en memoria si se ha agregado/eliminado algo
- Multi-plataforma: todo está escrito en Python y los clientes generados pueden compilarse opcionalmente en un ejecutable portátil (Windows) o agruparse en una aplicación independiente (macOS)
- Bypass de firewalls: los clientes se conectan al servidor de comando y control a través de conexiones TCP reversas, lo que evitará la mayoría de los firewalls porque las configuraciones de filtrado predeterminadas bloquean principalmente las conexiones entrantes.
- Medidas contra los antivirus: evita ser analizado por antivirus al bloquear procesos con nombres de productos antivirus conocidos
- Cifra payloads para evitar el análisis: el payload del cliente principal se cifra con una clave aleatoria de 256 bits que existe únicamente en el stager del payload que se genera al mismo tiempo
- Evita la ingeniería inversa: de forma predeterminada, los clientes cancelarán la ejecución si se detecta una máquina virtual o un entorno limitado
Módulos
Por el momento existen 11 módulos post-explotación que son remotamente importables por los clientes:
- Keylogger (byob.modules.keylogger): registra las pulsaciones del teclado del usuario y el nombre de la ventana ingresada
- Captura de pantalla (byob.modules.screenshot): toma una captura de pantalla del escritorio del usuario actual
- Webcam (byob.modules.webcam): visualiza streaming o captura imágenes/videos desde la cámara web
- Ransom (byob.modules.ransom): cifra archivos y genera una billetera BTC aleatoria para el pago de un rescate
- Outlook (byob.modules.outlook): lee/busca/sube correos electrónicos del cliente local de Outlook
- Packet Sniffer (byob.modules.packetsniffer): ejecuta un sniffer de paquetes en la red de host y sube el archivo .pcap
- Persistencia (byob.modules.persistence): establece persistencia en la máquina host usando 5 métodos diferentes
- Teléfono (byob.modules.phone): lee/busca/sube mensajes de texto desde el smartphone del cliente
- Escalado de privilegios (byob.modules.escalate): intenta el bypass de UAC para obtener privilegios de administrador no autorizados
- Escáner de puertos (byob.modules.portscanner): escanea la red local en busca de otros dispositivos online y puertos abiertos
- Control de procesos (byob.modules.process): lista/busca/mata/monitoriza los procesos actualmente en ejecución en el host
Core
6 módulos del framework principal utilizados por el generador y el servidor
- Utilidades (byob.core.util): funciones de utilidades varias que son utilizadas por muchos módulos
- Handlers (byob.core.handlers): handlers para recibir resultados de tareas completadas en clientes
- Seguridad (byob.core.security): modos de cifrado Diffie-Hellman IKE y 3 (AES-256-OCB, AES-256-CBC, XOR-128)
- Loaders (byob.core.loaders): importa de forma remota cualquier paquete/módulo/scripts del servidor
- Payloads (byob.core.payloads): shell inverso de TCP diseñado para importar de forma remota dependencias, paquetes y módulos
- Stagers (byob.core.stagers): generan payloads de stagers únicos para evitar el análisis y la detección
- Generators (byob.core.generators): funciones que generan dinámicamente código para el generador de clientes
- Base de datos (byob.core.database): maneja la interacción entre el servidor de comando y control y la base de datos SQLite
To-Do
Los autores de la herramienta comentan que cualquier contribución es bienvenida así que siéntete libre! De momento tienen identificado lo siguiente por hacer:
- Cifrado de los imports remotos: cifrado para los flujos de datos de paquetes/módulos que se importan de forma remota (para mantener la confidencialidad/autenticidad/integridad y evitar cualquier vulnerabilidad remota de ejecución de código derivada de la deserialización)
- Tipos de transporte: agregar soporte para más tipos de transporte (HTTP/S, DNS, etc.)
- Mejorar el módulo de teléfono/SMS: agregar la capacidad de propagación a través de correos electrónicos/mensajes de texto cuando se encuentre una lista de contactos en el host de destino
- Mejorar el módulo de Outlook/Correo electrónico: agregar la capacidad de difusión a través de correos electrónicos/mensajes de texto cuando se encuentre una lista de contactos en el host de destino
- Mejorar el módulo de Ransom: agregar métodos para usar una API de intercambio de Bitcoins para generar direcciones de billetera temporales que son exclusivas del host objetivo, hacerlas caducar después de un número determinado de horas sin recibir pago y notificar al servidor C2 (¿quizás a través de webhooks?) cuando se realice el pago o la billetera caduque
- Correción de errores: corregir cualquier error o problema
Github: https://github.com/colental/byob
Comentarios
Publicar un comentario