ComRaceConditionSeeker : Finding Race Condition Bug in COM Objects with IdaPython

202 & 203호

15:30~16:20

Tech
김승찬한국디지털미디어고등학교

현재 한국디지털미디어 고등학교 해킹방어과 2학년에 재학 중인 김승찬입니다. BoB 12기 취약점 분석 트랙에서 Best 10으로 교육을 이수하였습니다. 현재는 Fuzzing 및 취약점 자동 식별에 큰 관심을 가지며 관련 연구를 진행하고 있습니다.

구성 요소 개체 모델(COM)은 Microsoft에서 개발한 소프트웨어 아키텍처로, 다양한 소프트웨어 구성 요소의 상호 통신과 데이터 교환을 가능하게 합니다. COM은 Windows 10에서 27,000개 이상의 인터페이스를 노출하는 등의 사용의 폭넓음에도 불구하고 보안 검사가 누락된 인터페이스들을 포함하고 있습니다. 이러한 배경에서, COM의 보안 취약점 중 하나인 Race-Condition을 검출하기 위한 도구로 ComRace라는 선행 연구가 진행되었습니다. COM에서는 특히 'this' 객체의 공유 자원에 대한 경쟁 상태로 Race-Condition이 발생합니다. 이러한 취약점은 동일한 영역을 해제하는 Double-Free, 오프셋에 대한 연산 등이 두 번 일어나 발생하는 OOB등의 추가적인 공격으로 이루어질 수 있습니다. 이러한 Race-Condition을 식별하기 위해 고안된 ComRace는 this 객체의 멤버 변수 접근을 추적하기 위해, [RCX + N] 꼴의 레지스터에 더해지는 오프셋을 추적하는 방식으로 진행되었습니다. 그 과정에서 구조체 포인터의 복사와 같은 예기치 못한 방식으로, 추적이 누락되는 멤버 접근이 발생할 수 있었습니다. 이를 해결하기 위해, IdaPython을 사용하여 인자로 사용되는 구조체의 형식과, 참조되는 멤버 변수를 정확하게 추적할 수 있도록 보완한 ComRaceConditionSeeker을 제시하게 되었습니다. 이 도구는 원자성 잠금이 없고, 동일한 구조체를 인자로 받는 함수와 이 함수들이 참조하는 공유 리소스를 식별함으로써, 사용자가 Race-Condition이 가능한 함수를 빠르게 찾아낼 수 있도록 설계되었습니다. 이 도구는 CVE-2020-1394과 같은 취약점을 성공적으로 식별할 수 있었으며, 2개의 Race-Condition이 가능한 함수를 발견하는데 활용되었습니다. 위 방법론은 COM에만 국한되는 것이 아닌, 객체를 사용하는 타 바이너리에서도 Race-Condition을 식별할 수 있는 아이디어를 제공합니다. 대부분의 Race-Condition 관련 Fuzzer와 분석 툴에서 전역 변수에만 집중하여 동일한 '객체'를 참조하여 발생 가능한 취약점을 식별하지 못하는 경우가 있었으나, 위 발표를 통해 구조체의 공유 자원에서 어떻게 Race-Condition이 발생하는지와 COM의 구조, ComRaceConditionSeker을 통해 발견한 취약점 등을 이해할 수 있습니다.