jnizz(Android application fuzzer framework using JNI spoofing) 시연 영상

jnizz를 이용한 간단한 퍼저 제작 실습을 보여드리겠습니다 기존에 아무 파일이 없는 디렉토리를 확인할 수 있습니다 "init" 명령을 통해 새로운 퍼저 프로젝트를 생성할 수 있습니다 새롭게 프로젝트 디렉토리가 생성된 것을 확인할 수 있습니다 이번엔 "add-apk" 명령을 통해 퍼징할 apk를 관리할 코드를 생성해줍니다 입력한 apk이름의 새로운 소스 파일이 생성된 것을 확인할 수 있습니다 이제 apk관리 소스 코드를 수정합니다 퍼징할 apk파일이 있는 경로로 코드를 대체해줍니다 다음으로 runpy를 수정합니다 방금 제너레이팅 되었던 apk 클래스를 임포트해줍니다 그 후 객체를 하나 생성해줍니다 이 객체는 생성됨과 동시에 경로에 있는 apk파일을 분석할 것입니다 분석한 뒤 해당 apk에서 사용하는 JNI 함수를 이용하여 JNI call을 흉내내는 퍼징용 apk를 만들어낼 것입니다 이렇게 만들어진 퍼징용 apk와 분석된 함수 명세로 avdmanager 객체를 생성합니다 간단한 run

py 수정이 완료되었습니다 이제 runpy를 실행하여 퍼징을 실시합니다 1 먼저 apk를 분석하여 JNI call 이루어지는지 확인합니다 2 이를 기반으로 퍼징용 apk를 빌드합니다 3 빌드가 완료되면 퍼징용 샌드박스가 되는 안드로이드 이미지를 생성합니다 4

또한 대시보드가 활성화 돼 퍼징 상태를 간단히 확인할 수 있습니다 5 이제 안드로이드 VM을 올립니다 6 안드로이드 VM에 랜덤 input 생성기, 동작할 쉘 스크립트를 주입합니다 이러한 쉘 스크립트 역시 JNI 함수 명세에 맞게 자동으로 제너레이팅 됩니다 7 그 후 생성된 퍼징용 apk를 설치하여 줍니다 첫 구동에는 컴퓨터 성능에 따라 다소 시간이 소요됩니다 8 모든 구동이 완료되었으므로 이제부터 본격적인 퍼징이 시작됩니다 퍼징용 apk가 크래시가 날 때마다 CLI와 대시보드에서 바로 확인을 할 수 있습니다 방금 첫 크래시가 발생하였습니다!! 또 한 번의 크래시가 발생하였습니다!! 이런 식으로 퍼저는 계속해서 크래시를 쌓아나갈 것입니다 퍼징을 시작한지 5분 정도가 지났으므로 어떤 크래시들이 쌓였나 확인해보도록 하겠습니다 9

crash table에서 크래시들을 한눈에 파악할 수 있습니다 10 또한 각 크래시들마다 Exploitable Level을 확인할 수 있습니다 이러한 Exploitable Level은 생성된 Tombstone을 분석하여 eip의 값이나 fault 종류를 보고 파악합니다 11 퍼저를 종료하면 Tombstone 파일을 프로젝트 디렉토리에 저장해줍니다 그동안 발생했던 크래시들에서 생성된 톰브스톤들을 확인할 수 있습니다 그 중 하나를 열어보겠습니다 12 어떤 함수에 어떤 인자를 넣었을 때 발생한 크래시인지 알 수 있고 각 레지스터의 값들을 알 수 있습니다 여기까지 jnizz를 활용한 간단한 퍼저 제작 시연이었습니다 감사합니다