Park, Geon (re-st)

Abstract

MODFuzz는 지향성 퍼징의 이점을 USB 드라이버 검증 문제에 최초로 적용하고자 많은 발품을 팔고 휴리스틱을 동원한다. 휴리스틱과 연구 문제 간 관계를 명쾌하게 이해할 순 없지만, 이는 USB 드라이버에 대한 내 직관력 부족이 아닐까 생각한다. 동적 다중 지향성 퍼징이라는 같은 명칭을 공유하는 Topuzz와 다른 점이 많아 비교하는 재미가 있다.

본문

지향성 퍼징은 코드 지점들의 버그 의심 정도가 다를 때 효과적이다. 무지향성 퍼징은 버그 위치 정보가 없으므로 모든 실행 가능 경로를 탐색하고자 커버리지를 높이려는 반면, 지향성 퍼징은 정적분석 정보와 휴리스틱을 활용하여 목표를 정밀하게 조준한다. 오늘 세미나에서 태은 님이 무지향성/지향성 퍼징을 비유한 훌륭한 표현을 빌리자면, 무지향성 퍼징 (람보)은 버그가 어디 있는지 정보가 없으므로 (정글) 코드의 모든 실행 가능 경로를 탐색 (총 난사)해 보기 위해 보통 커버리지를 높이는 목표를 갖고, 지향성 퍼징 (저격수)은 정적분석 정보 (관찰)과 휴리스틱 (경험)을 써서 목표를 향한다.

소개할 도구는 정적분석 정보 활용에 있어서는 거리 점수를 쓰는 점이 익숙하지만, 목표 설정과 휴리스틱에 특별한 점이 있다. MODFuzz는 USB 드라이버에 지향성 퍼징을 적용하고자 하는 목표의식으로, 많은 도구 부족을 이겨냈다.

예를 들어, 안전벨트 (sanitizer) 작성위치를 목표로 사용하는 FishFuzz 등 타 연구와 달리, USB 드라이버의 예상 취약 지점은 찾아 주는 도구가 없다. 따라서 이 연구는 728개의 취약점 보고를 찾고, USB 기기의 실행 흔적 (execution trace)을 직접 기록하여 자주 등장하는 함수를 골라냈다.

도구 대신 사람이 만들어낸 레이블 벤치마크의 완성이다. 새로운 접근을 하려는 연구자에게 요구되는 노력의 필요성이 엿보였다.

MODFuzz가 퍼징 목표지점을 찾는 방식이 어떤 직관에서 나왔는지 알기는 어려웠지만, 논문의 전문성은 큰 흥미를 불어일으켰다. 이 연구는 연구 문제(R.Q.) 하나의 해결에 다양한 휴리스틱이 동원되고 있어, 각 아이디어가 왜 문제와 연결되는지 명쾌히 깨닫는 게 어려웠다. 한편으론 특정 분야 사람들이 암묵적으로 가지는 문제를 해결하는 전문성의 단편이라 생각되어 겸허해진다. MODFuzz는 스스로를 동적 다중 지향성 퍼징이라 부르고 있으나, 이가 Topuzz의 구상과는 많이 다른 점이 흥미로웠다. Topuzz의 중심 아이디어는 목표 지점별 점수를 어떻게 합치고, 이를 퍼징 진행상황에 따라 어떻게 조율할지인데 이는 MODFuzz의 쟁점이 아니고, 역으로 MODFuzz가 USB 드라이버의 문제를 풀기 위해 변수 이름을 걸러내거나 함수가 USB 관련인지 솎아내는 버그 타입 지향성은 Topuzz에 없다. 이미 적지 않은 `다중 지향성 퍼징’ 이 나와 있으나, 그 안에서 Topuzz가 찾을 독창성이 가져올 파급이 기다려지게 된다.


%% 지향성 퍼징은 코드 지점들의 버그 의심 정도가 다를 때에 효과적이다. 이번 주 금요일 세미나에서 태은 님이 무지향성 퍼징을 람보의 총 난사에, 지향성 퍼징을 스나이퍼에 비유하셨는데 탁월한 비유이다. 버그가 코드 어디에 있는지 모르는 경우는 일단 코드의 모든 실행 가능 경로를 탐색해 보는 것이고, 그렇지 않을 경우에는 저격수(지향성 퍼징)의 관찰(정적분석 정보)과 경험(휴리스틱)에 의존하는 것이다. MODFuzz는 USB 드라이버에 지향성 퍼징을 최초로 적용하면서, 미답의 길에 따르는 많은 도구 부족을 겪어냈다. 예로, 안전벨트(sanitizer) 작성위치를 목표로 사용하는 FishFuzz 등 타 연구와 달리, USB 드라이버의 예상 취약 지점이란 건 결정해주는 도구가 없다. 따라서, 이 연구는 728개의 취약점 보고를 찾고, USB 기기의 실행 흔적(execution trace) 을 직접 기록하여 자주 등장하는 함수를 골라냈다. 또한 이름이 특정한 변수들을 걸러내 쓰기도 한다. MODFuzz가 퍼징 목표지점을 찾는 방식이 어떤 직관에서 나왔는지 알기는 어려웠지만, 논문의 전문성은 큰 흥미를 불어일으켰다. 연구 중에는 연구 문제(R.Q.)와 해결 방안이 일대일로 대응되는 경우도 있지만, 이 연구처럼 연구 문제 하나의 해결에 다양한 휴리스틱이 동원되는 경우도 많은 것 같다. 이럴 땐 논문에 제시된 아이디어가 왜 문제 해결에 도움이 되는지 명쾌히 깨닫는 게 어려워 아쉬움이 생긴다. 하지만, 한편으론 그 설명되지 않는 논문 요소 사이에는 그 분야의 사람들이 암묵적으로 공감하는 전문성이 있는 게 아닐까, 하는 생각에 겸허해지게 된다. MODFuzz는 스스로를 동적 다중 지향성 퍼징이라 부르고 있으나, 이가 Topuzz의 구상과는 많이 다른 점이 흥미로웠다. Topuzz의 중심 아이디어는 목표 지점별 점수를 어떻게 합치고, 이를 퍼징 진행상황에 따라 어떻게 조율할지인데 이는 MODFuzz에 묘사되지 않고, 역으로 MODFuzz가 USB 드라이버의 문제를 풀기 위해 변수 이름을 걸러내거나 함수가 USB 관련인지 솎아내는 버그 타입 지향성은 Topuzz에 없다. 이미 적지 않은 ‘다중 지향성 퍼징’ 이 나와 있으나, 그 안에서 Topuzz가 찾을 독창성이 가져올 파급이 기다려지게 된다. %%

#Essay