😡angr-PT
개요
AngrPT의 핵심기능은 다음과 같습니다.
IOCTL RIP범위 추적
IOCTL 제약조건 분석
전역변수 종속성 분석

IOCTL RIP 추적
많은 드라이버가 IoControl을 이용하여 유저와 상호작용을 하기 때문에 Windows Driver의 분석에 있어서 가장 중요한 것은 드라이버가 특정 IoControl Code를 통해 어떠한 동작을 하는지 식별하는 것입니다.
IDA Hex Ray결과 아래와 같이 switch / case문으로 표현되는 경우도 있었지만, 대부분의 Driver코드가 각 IoControl Code가 특정 변수에서 Offset을 빼서 계산이 되어 분석에 큰 어려움이 있었습니다.

때문에 저희는 각 IoControl Code를 식별하고 IDA Hex Ray결과에서 IoControl Code별 바이너리상의Offset을 제시하여 분석가의 편의를 제공합니다.

IOCTL 제약조건 분석
드라이버가 다양한 기능을 지원하기 위해서는 적게는 몇 개 많게는 수십개의 IoControl Code를 가집니다.
ex) 백신 드라이버의경우 50개 이상의 IOCTL이 있었음.
각 IoControl Code에는 서로 다른 제약 조건이 있고, 각 제약조건을 분석하는 데에는 시간이 상당히 소요됩니다.
많은 제약조건을 분석하는데에 시간을 줄이기 위해 Symbolic Execution을 이용하여 각 IOCTL별 제약조건을 분석했습니다.
분석된 제약조건은 Fuzzing과정 중에 유효한 코드 부분을 실행하여 더 높은 커버리지를 얻고 더 많은 Crash를 발견할 확률을 높일 수 있습니다.
정상적인 제약조건을 구하기 위한 기준은 IRP구조체의 IoStatus Code를 Symbolic Variable로 만들어 아래 기준에 따라 판단하였습니다.

전역변수 종속성 분석
100개 이상의 드라이버를 분석하면서 IoControl Code간의 종속성으로 인한 버그 케이스도 있었습니다.
이러한 버그 케이스들의 특징은 동일한 전역변수 공유
라는 특징이 있었습니다.
전역변수종속성으로 인한 버그 케이스도 Fuzzing 과정 중에 식별하기 위해 Angr를 이용해 동일한 전역변수를 공유
하는 IoControl Code를 그룹화
했습니다.
그룹화된
IoControl Code들은 이후 Fuzzing단게에서 종속성을 고려한 버그 케이스를 찾는데에 사용됩니다.
