
このツールの目的は、ユーザー入力をトレースし、機密性の高いメソッド(java.lang.Runtime.exec、java.sql.Statement.executeQuery など)へのインジェクションポイントと、インジェクションポイントからメソッド呼び出しまでの間におけるこれらの入力の変異を特定することです。
アプリのあらゆるユーザー入力に挿入する必要がある「マーク」が生成されます。マークが異なることで、アラートの発信元を特定できます。
監視対象メソッドの一覧は、CLI の > list_breakpoints コマンドで確認できます。この一覧は > add_breakpoint および > delete_breakpoint コマンドで変更できます。
Captain Hook Docker Main machine
container
┌────────────────────────────────────────┐ ┌────────────────────────────────────────┐
│ │ │ │
│ ┌─────────────────┐ ┌────────────────┐ │ │ ┌──────────────────────────┐ │
│ │ │ │ │ │ │ │ │ │
│ │ ┌────┐ │ │ Java Debugger │ │ │ │ │ │
│ │ │ │ Python │ │ ├─┼─────────────┼──────────► │ │
│ │ │ │ + │ │ │ │ │ │ Program being │ │
│ │ │ │ Frida │ │ │ │ │ │ analyzed │ │
│ │ │ │ │ │ JDWP │ │ │ │ │ │
│ │ │ │ ◄─┤ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ │CLI │ ├─► │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ └────────────────┘ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ ┌──────┐ │ │ │
│ │ │ │ ├────────────────────┼─────────────┤►│frida-├─► │ │
│ │ │ │ │ │ │ │server◄─┤ │ │
│ │ └────┘ │ │ │ │ │ └──────────────────────────┘ │
│ │ │◄───────────────────┼─────────────┼─┤ │ │
│ └─────────────────┘ │ │ └──────┘ │
│ │ │ │
└────────────────────────────────────────┘ └────────────────────────────────────────┘
その JVM は次のオプションを指定して起動する必要があります:
-Xdebug-Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n-Xintもちろん、リッスンポート(上記の例では 1000)は任意であり、変更できます。
可能であれば、解析対象のプログラムが置かれているマシンに frida-server をインストールし、次のコマンドで起動してください:
# frida-server -l 0.0.0.0:1500 &
リッスンポート/アドレスも、必要に応じて変更できます。
./dbg にある Dockerfile の末尾で、「host」(解析対象のプログラムを実行しているマシン)の IP アドレス、JDWP のリッスンポート、Frida のリッスンポート(frida-server が利用できない場合は 0)を設定します。
次に # make build、続いて # make run-dbg を実行します。# docker exec -it $(docker ps -lq) bash で、このコンテナに 2 番目のターミナルを接続します。
最初のターミナルで cd debugger && make debug を実行し、次に 2 番目のターミナルで cd frida && make instrument を実行します。
2 番目のターミナルを通じて Captain Hook と対話します。そこには CLI が表示されます。> help と入力すると、すべてドキュメント化された利用可能なコマンドの完全な一覧が表示されます。
## 実験的機能
「agent」フォルダは純粋に実験的なものであり、> set_object_inspection_strategy コマンドも同様です。