
Rastrea las entradas del usuario para detectar vulnerabilidades de inyección en métodos Java mediante JDWP y Frida, identificando posibles puntos de inyección de comandos y SQL.
El propósito de esta herramienta es rastrear las entradas del usuario, para encontrar puntos de inyección en métodos sensibles (como java.lang.Runtime.exec, java.sql.Statement.executeQuery, ...) así como las mutaciones en estas entradas entre el punto de inyección y la llamada al método.
Se generan "Marcas" que deben insertarse en cada posible entrada de usuario de tu aplicación. Las distintas marcas te ayudarán a determinar el origen de una alerta.
La lista de métodos monitorizados está disponible mediante el comando > list_breakpoints en la CLI. Esta lista puede modificarse con los comandos > add_breakpoint y > delete_breakpoint.
Captain Hook Docker Main machine
container
┌────────────────────────────────────────┐ ┌────────────────────────────────────────┐
│ │ │ │
│ ┌─────────────────┐ ┌────────────────┐ │ │ ┌──────────────────────────┐ │
│ │ │ │ │ │ │ │ │ │
│ │ ┌────┐ │ │ Java Debugger │ │ │ │ │ │
│ │ │ │ Python │ │ ├─┼─────────────┼──────────► │ │
│ │ │ │ + │ │ │ │ │ │ Program being │ │
│ │ │ │ Frida │ │ │ │ │ │ analyzed │ │
│ │ │ │ │ │ JDWP │ │ │ │ │ │
│ │ │ │ ◄─┤ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ │CLI │ ├─► │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ └────────────────┘ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ ┌──────┐ │ │ │
│ │ │ │ ├────────────────────┼─────────────┤►│frida-├─► │ │
│ │ │ │ │ │ │ │server◄─┤ │ │
│ │ └────┘ │ │ │ │ │ └──────────────────────────┘ │
│ │ │◄───────────────────┼─────────────┼─┤ │ │
│ └─────────────────┘ │ │ └──────┘ │
│ │ │ │
└────────────────────────────────────────┘ └────────────────────────────────────────┘
Su JVM debe lanzarse con las siguientes opciones:
-Xdebug-Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n-XintPor supuesto, el puerto de escucha (1000 en el ejemplo anterior) es arbitrario y se puede cambiar.
Si es posible, instala frida-server en la máquina que contiene el programa que se está analizando y ejecútalo con el siguiente comando:
# frida-server -l 0.0.0.0:1500 &
El puerto/dirección de escucha también se puede cambiar según tus necesidades.
Al final del Dockerfile ubicado en ./dbg, establece la dirección IP del "host" (la máquina que ejecuta el programa a analizar), el puerto de escucha de JDWP y el puerto de escucha de Frida (0 si frida-server no está disponible).
Luego # make build, y después # make run-dbg. Adjunta una segunda terminal a este contenedor con # docker exec -it $(docker ps -lq) bash.
En la primera, ejecuta: cd debugger && make debug, luego en la segunda: cd frida && make instrument
Interactuarás con Captain Hook a través de la segunda terminal, que te presenta una CLI. Escribe > help para obtener una lista exhaustiva de los comandos disponibles, todos documentados.
La carpeta "agent" es puramente experimental, al igual que el comando > set_object_inspection_strategy.