PEInjector, es una herramienta que puede infectar ejecutables de Windows (PE COFF) y que además incluye un proxy (interceptor) que también es capaz de modificar los ejecutables al "vuelo" pero mucho más completo y con mayor rendimiento: parcheo más transparente, infección ELF o MACH-O, PE code cave jumping, parcheo IAT y otros métodos de parcheo más "estáticos".
Instalamos PEInjector-server que provee parcheo de ejecutables como servicio:
Instalamos PEInjector-control que administra el servidor de PEInjector vía webgui:
Instalamos PEInjector-interceptor que es el proxy MiTM con el conector de PEInjector:
Configura una contraseña en el gui:
Asocia los puertos de PEInjector a localhost para que sólo el webgui y el proxy puedan conectarse al servidor de PEInjector (recomendable):
2. Navegamos a "shellcode" y nos desplazamos abajo a demo (calc).
3. Hacemos clic en "create and send shellcode".
4. Configuramos el navegador para usar el proxy {your_ip}:8080
5. Descargamos cualquier ejecutable, en nuestro ejemplo puttygen.exe.
6. Ejecutamos el fichero exe y comprobamos como el payload ejecuta en segundo plano también la calculadora.
...y como pueden ver a continuación, el fichero infectado es casi FuD }:-)
Virus Scan Result
Características generales
- Soporte de archivos PE x64 y x86.
- Código abierto.
- Totalmente funcional en Windows y Linux, incluyendo scripts de instalación automatizada.
- Puede funcionar en hardware embebido, probado en una Raspberry Pi 2.
- En Linux, todos los servidores se integrarán automáticamente como servicio, sin necesidad de configuración manual.
- Escrito en C plano, no se requieren librerías externas (PEInjector).
- La integración MiTM está disponible en C, Python y Java. Se incluye un ejemplo de implementación en Python.
- Facilidad de uso. Cualquier persona que pueda configurar un router en casa podrá configurar el servidor de inyector.
- Creador de shellcodes integrado y de fácil uso. Todos los shellcodes disponibles en 32 y 64bits con cifrado automático opcional.
- Podemos personalizar nuestro propio código shell e inyectarlo directamente o como un nuevo thread.
Características de funcionamiento
- Elimina las comprobaciones de integridad tales como los checksums de la cabecera del PE, certificados, force-check-checksum-flag, ...
- Intenta inyectar el shellcode al final de la sección del ejecutable. Esto es posible debido al gap entre el valor SizeOfRawData y VirtualSize.
- Intentar redimensionar el tamaño de la sección del ejecutable e inyectar ahí el shellcode. Esto es posible debido al gap entre el valor FileAlignment y SectionAlignment.
- Inserta una nueva sección e inyecta ahí el shellcode.
- Trata de descubrir si el ejecutable puede detectar la infección (por ejemplo, configuraciones NSIS) y salta el ejecutable.
- Genera un nombre aleatorio para las secciones creadas por el flag del "nuevo nombre de la sección".
- Cifra el payload con claves aleatorias. El stub de descifrado es generado y ofuscado individualmente sobre la marcha para cada inyección, utilizando el motor polimórfico integrado.
- Inyecta el shellcode con uno de los métodos seleccionados e inserta un salto ofuscado al payload en otra sección. En principio el PE no apunta al shellcode porque puede aumentar la tasa de detección heurística de algún AV (por defecto: OFF).
+ configuration | payload | ... +-----------v------------+ +-------+ | | | PATCH <-------+ libpeinfect <--+ +-------+ | | | +-----------+------------+ | | | +-----------v------------+ | | | | +---------------> libpetool | | | change values | | | | add sections +-----------^------------+ | | resize sect. | | + ... +----v----+ | | PEFILE +----------+ +----^----+ | +-----------v------------+ PE File data | | PE File data +---------------> libpefile +---------------> | | +------------------------+
libpefile
Proporciona el análisis de archivos PE, modificación y capacidades de volver a montarlo basándose en la especificación PE COFF. También funciona con muchos archivos no conformes y deliberadamente mal formados que el loader de Windows acepta.libpetool
Proporciona modificaciones más complejas (añadir/cambiar el tamaño de las secciones). Mantiene compatibles los valores de la cabecera PE COFF.libpeinfect
Proporciona diferentes métodos de infección, elimina comprobaciones de integridad, certificados, etc. Puede infectar totalmente un archivo (de forma estática, por ejemplo, desde el disco) o generar un parche (para la infección por MITM). Los conectores que trabajan con estos parches están disponibles en C, Python y Java. El archivo infectado mantiene su funcionalidad original.Arquitectura
PEInjector incluye de tres componentes: servidor, interfaz web (webgui) y proxy. Los puertos por defecto que se utilizan son:- 3333: python webserver (GUI)
- 31337: puerto de datos de PEInjector (communication proxy <-> PEInjector)
- 31338: puerto de control de PEInjector (communication GUI <-> PEInjector)
- 8080: proxy
+-----------------+-+ | web browser |X| +-------------+ +-----------------+-+ | peinjector- | | _____ | ------->+ interceptor +---------> | / \ | -orig.->+ (MITM) +-patched-> | | () () | | -data-->+ +-data----> | \ ^ / | ------->+ +---------+ +---------> | ||||| | | |connector| | | | +-+-+-----^-+-+ +-----+------^------+ raw | | send | | get header | | patch config | | status | | | | +-+-v-----+-+-+ +-+---v------+---+-+ | |data port| | | |http(s) server| | | +---------+ | | +--------------+ | | peinjector | | | | (core +---+ crtl +---+ peinjector- | | engine) |c p| protocol |c p| control | | |r o+----------->r r| (user | | |t r<-----------+t o| interface) | | |l t| |l .| | +---------+---+ +---+--------------+
Instalación
Descargamos el repositorio de Github:git clone https://github.com/JonDoNym/PEInjector
Instalamos PEInjector-server que provee parcheo de ejecutables como servicio:
cd /pruebas/PEInjector/PEInjector/install/ sudo chmod a+x PEInjector_install.sh sudo ./PEInjector_install.sh root@kali:~/pruebas/PEInjector/PEInjector/install# service PEInjector status â PEInjector.service - LSB: PEInjector server Loaded: loaded (/etc/init.d/PEInjector) Active: active (running) since Mon 2015-09-14 04:38:18 EDT; 40s ago Process: 1970 ExecStart=/etc/init.d/PEInjector start (code=exited, status=0/SUCCESS) CGroup: /system.slice/PEInjector.service ââ1974 /usr/bin/PEInjector --server
Instalamos PEInjector-control que administra el servidor de PEInjector vía webgui:
cd /tmp/peinjector/pe-injector-control/install/ sudo chmod a+x peinjector-control_install.sh sudo ./peinjector-control_install.sh root@kali:~/pruebas/peinjector/pe-injector-control/install# service peinjector-control status â peinjector-control.service - LSB: peinjector-control server Loaded: loaded (/etc/init.d/peinjector-control) Active: active (running) since Mon 2015-09-14 04:40:36 EDT; 58s ago CGroup: /system.slice/peinjector-control.service ââ2109 python3 ./peinjector_control.py Sep 14 04:40:36 kali peinjector-control[2105]: Start peinjector-control server
Instalamos PEInjector-interceptor que es el proxy MiTM con el conector de PEInjector:
cd /tmp/peinjector/pe-injector-interceptor/install/ sudo chmod a+x peinjector-interceptor_install.sh sudo ./peinjector-interceptor_install.sh root@kali:~/pruebas/peinjector/pe-injector-interceptor/install# service peinjector-interceptor status â peinjector-interceptor.service - LSB: peinjector-interceptor server Loaded: loaded (/etc/init.d/peinjector-interceptor) Active: active (running) since Mon 2015-09-14 04:43:38 EDT; 24s ago Process: 6252 ExecStart=/etc/init.d/peinjector-interceptor start (code=exited, status=0/SUCCESS) CGroup: /system.slice/peinjector-interceptor.service ââ6256 python2 ./peinjector_interceptor.py Sep 14 04:43:38 kali peinjector-interceptor[6252]: Start peinjector-interceptor server
Hardening
Cambia el certificado del interfaz web por uno propio:sudo openssl req -new -x509 -keyout /etc/peinjector-control/cert_example_do_not_use_this.pem -out /etc/peinjector-control/cert_example_do_not_use_this.pem -days 365 -nodes sudo service peinjector-control stop sudo service peinjector-control start
Configura una contraseña en el gui:
- Ve a https://{your_ip}:3333/settings.htm
- Pon una contraseña para el usuario 'admin'
- Activa la autenticación (enable authentication)
- USER: admin; PASS: {your_pass}
Asocia los puertos de PEInjector a localhost para que sólo el webgui y el proxy puedan conectarse al servidor de PEInjector (recomendable):
- Ve a https://{your_ip}:3333/injector.htm
- Haz clic en el botón local (interfaz de control)
- Haz clic en el botón local (interfaz de datos)
- Haz clic en el botón de reinicio para reiniciar el PEInjector
Uso (demo)
1. Visitamos https://{your_ip}:33332. Navegamos a "shellcode" y nos desplazamos abajo a demo (calc).
3. Hacemos clic en "create and send shellcode".
4. Configuramos el navegador para usar el proxy {your_ip}:8080
5. Descargamos cualquier ejecutable, en nuestro ejemplo puttygen.exe.
6. Ejecutamos el fichero exe y comprobamos como el payload ejecuta en segundo plano también la calculadora.
...y como pueden ver a continuación, el fichero infectado es casi FuD }:-)
Virus Scan Result
Comentarios
Publicar un comentario