타겟은 만만한 것을 잡습니다.
ASLR이 없는 거라던가, 공격 벡터가 많은 것, 적당히 알려진 것(유명한 소프트웨어는 다른 사람이 털어먹었을 것)이 좋습니다.
이미지 파싱 소프트웨어를 타겟으로 선정했습니다. 그 이유는 위에서 언급한 것에 부합하기 때문입니다.
샘플 이미지를 대충 소프트웨어에 던져서 procmon
으로 Call Stack을 확인합니다.
그 다음 IDA + DynamoRIO + Lighthouse
로 Code Coverage를 확보합니다.
Call Stack을 파악 후 IDA에서 열심히 분석을 합니다.
대강 파악했다면,
1. WinAFL offset으로 퍼징 날먹하기
2. WinAFL 하네스 열심히 짜기
3. 오디팅으로 열심히 버그 찾기
위 3가지에서 적당히 선택할 수 있는데, WinAFL은 도저히 못해먹겠어서 오디팅을 했습니다.
오디팅하는 시간에 퍼징 돌아갔으면 좋겠어서, WinAFL 대신 Peach Fuzzer를 사용하여 효율은 안좋지만 일단 돌려놨습니다.
Peach Fuzz로 발생한 크래시를 재현했을 때, Windbg에서 Access Violation (first chance)라고 떠서, second chance가 아니니까 소프트웨어에서 자체적으로 필터링하는구나 라고 생각했는데, 이로도 Exploit이 가능하기 때문에 분석을 하는게 좋다고 합니다.
Gflags를 사용하여 Page Heap을 enable로 하면 Page Gaurd로 Heap Overflow를 탐지하기 쉽습니다.
다음 회차는 크래시 Root Cause와 익스 가능성에 대해 알아보겠습니다.