
Rastreia entradas do usuário para detectar vulnerabilidades de injeção em métodos Java via JDWP e Frida, identificando possíveis pontos de injeção de comando e SQL.
O objetivo desta ferramenta é rastrear entradas do usuário, a fim de encontrar pontos de injeção em métodos sensíveis (como java.lang.Runtime.exec, java.sql.Statement.executeQuery, ...), bem como as mutações nessas entradas entre o ponto de injeção e a chamada do método.
"Marcas" são geradas e devem ser inseridas em todas as possíveis entradas do usuário do seu aplicativo. Marcas diferentes ajudarão você a determinar a origem de um alerta.
A lista de métodos monitorados está disponível usando o comando > list_breakpoints na CLI. Essa lista pode ser modificada com os comandos > add_breakpoint e > delete_breakpoint.
Captain Hook Docker Main machine
container
┌────────────────────────────────────────┐ ┌────────────────────────────────────────┐
│ │ │ │
│ ┌─────────────────┐ ┌────────────────┐ │ │ ┌──────────────────────────┐ │
│ │ │ │ │ │ │ │ │ │
│ │ ┌────┐ │ │ Java Debugger │ │ │ │ │ │
│ │ │ │ Python │ │ ├─┼─────────────┼──────────► │ │
│ │ │ │ + │ │ │ │ │ │ Program being │ │
│ │ │ │ Frida │ │ │ │ │ JDWP │ analyzed │ │
│ │ │ │ │ │ ◄─┼─────────────┼──────────┤ │ │
│ │ │ │ ◄─┤ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ │CLI │ ├─► │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ └────────────────┘ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ ┌──────┐ │ │ │
│ │ │ │ ├────────────────────┼─────────────┤►│frida-├─► │ │
│ │ │ │ │ │ │ │server◄─┤ │ │
│ │ └────┘ │ │ │ │ │ └──────────────────────────┘ │
│ │ │◄───────────────────┼─────────────┼─┤ │ │
│ └─────────────────┘ │ │ └──────┘ │
│ │ │ │
└────────────────────────────────────────┘ └────────────────────────────────────────┘
A JVM dele deve ser iniciada com as seguintes opções:
-Xdebug-Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n-XintNaturalmente, a porta de escuta (1000 no exemplo acima) é arbitrária e pode ser alterada.
Se possível, instale o frida-server na máquina que contém o programa sendo analisado e inicie-o com o seguinte comando:
# frida-server -l 0.0.0.0:1500 &
A porta / endereço de escuta também pode ser alterada conforme suas necessidades.
No final do Dockerfile localizado em ./dbg, defina o endereço IP do "host" (a máquina que executa o programa a ser analisado), a porta de escuta JDWP e a porta de escuta Frida (0 se o frida-server não estiver disponível).
Em seguida, # make build e depois # make run-dbg. Anexe um segundo terminal a este contêiner com # docker exec -it $(docker ps -lq) bash.
No primeiro, execute: cd debugger && make debug, depois no segundo: cd frida && make instrument
Você interagirá com o Captain Hook através do segundo terminal, que apresenta uma CLI. Digite > help para obter uma lista exaustiva dos comandos disponíveis, todos documentados.
A pasta "agent" é puramente experimental, assim como o comando > set_object_inspection_strategy.