
JDWP 및 Frida를 통해 Java 메서드에서 사용자 입력을 추적하여 잠재적인 커맨드 인젝션 및 SQL 인젝션 지점을 식별합니다.
이 도구의 목적은 사용자 입력을 추적하여 민감한 메서드(java.lang.Runtime.exec, java.sql.Statement.executeQuery, ...)에 대한 주입 지점을 찾고, 주입 지점과 메서드 호출 사이에서 발생하는 입력의 변형(mutation)을 찾는 것입니다.
"마크(Mark)"가 생성되며, 이 마크는 앱의 모든 가능한 사용자 입력에 삽입되어야 합니다. 서로 다른 마크는 알림(alert)의 출처를 파악하는 데 도움이 됩니다.
모니터링되는 메서드 목록은 CLI에서 > list_breakpoints 명령어를 사용하여 확인할 수 있습니다. 이 목록은 > add_breakpoint 및 > delete_breakpoint 명령어로 수정할 수 있습니다.
Captain Hook Docker Main machine
container
┌────────────────────────────────────────┐ ┌────────────────────────────────────────┐
│ │ │ │
│ ┌─────────────────┐ ┌────────────────┐ │ │ ┌──────────────────────────┐ │
│ │ │ │ │ │ │ │ │ │
│ │ ┌────┐ │ │ Java Debugger │ │ │ │ │ │
│ │ │ │ Python │ │ ├─┼─────────────┼──────────► │ │
│ │ │ │ + │ │ │ │ │ │ Program being │ │
│ │ │ │ Frida │ │ │ │ │ │ analyzed │ │
│ │ │ │ │ │ ◄─┼─────────────┼──────────┤ │ │
│ │ │ │ ◄─┤ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ │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 명령어로 이 컨테이너에 두 번째 터미널을 연결하세요.
첫 번째 터미널에서 cd debugger && make debug를 실행하고, 그 다음에 두 번째 터미널에서 cd frida && make instrument를 실행하세요.
두 번째 터미널을 통해 Captain Hook과 상호작용하게 되며, CLI가 표시됩니다. 사용 가능한 모든 명령어의 전체 목록을 보려면 > help를 입력하세요. 모든 명령어에는 문서가 제공됩니다.
"agent" 폴더는 순전히 실험적인 기능이며, > set_object_inspection_strategy 명령어도 마찬가지입니다.