The Windows IOCTL Census: A Corpus-Scale, Multi-Architecture Database of the Driver Control-Code Surface
이 논문은 심볼릭 실행 없이도 드라이버 코퍼스의 80%를 포괄할 수 있도록 확장 가능한, 리프팅된 중간 표현(intermediate representations)의 결정론적이고 아키텍처 중립적인 분석을 통해 달성된, 여러 아키텍처에 걸친 27,087개의 서명된 Windows 드라이버에 대한 디코딩된 제어 코드와 호출 그래프를 포함하는 수천만 행의 공개 쿼리 가능 데이터베이스인 Windows IOCTL Census를 소개한다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
윈도우 운영체제를 거대하고 북적이는 도시라고 상상해 보십시오. 이 도시에는 그래픽 카드, 프린터, 또는 Wi-Fi 어댑터와 같은 하드웨어와 컴퓨터가 대화할 수 있게 해주는 **드라이버(driver)**라는 수천 개의 특화된 "서비스 스테이션"이 있습니다.
이 스테이션들과 대화하기 위해, 일반 사람들(권한이 없는 사용자)은 IOCTL 코드라고 불리는 "티켓"을 보냅니다. 이것은 "이 페이지를 인쇄하라" 또는 "이 이미지를 보여달라"와 같은 구체적인 명령과 같습니다.
문제점: 잠기지 않은 문
보통 이러한 서비스 스테이션에는 보안 요원들이 있습니다. 하지만 때때로 보안 요원이 잠들어 있거나 스테이션의 자물쇠가 고장 나 있는 경우가 있습니다. 만약 일반 사람이 고장 난 자물쇠가 있는 스테이션에 티켓을 보낸다면, 그들은 "제어실"(커널)에 몰래 들어가 도시의 규칙을 새로 쓸 수도 있습니다. 이것이 해커들이 컴퓨터를 장악하는 방식입니다.
오랫동안 보안 연구자들에게는 이러한 고장 난 자물쇠를 찾는 두 가지 방법이 있었습니다:
- "슈퍼 스캐너" (심볼릭 실행 - Symbolic Execution): 이들은 모든 서비스 스테이션의 모든 문을 하나씩 다 열어보며 확인하려는 고성능 로봇과 같습니다. 하지만 이들은 속도가 느리고 쉽게 혼란에 빠지며, 오직 "현대적인" 부분(64비트 시스템)만 확인할 수 있습니다. 이들은 위험한 건물들이 많이 남아 있는 오래된 32비트 건물들은 아예 포기해 버립니다.
- "수배 명단" (선별된 리스트 - Curated Lists): 이는 이미 잡힌 범죄자들의 목록입니다. 정확하긴 하지만, 이미 잡힌 범죄자들만을 포함할 뿐입니다. 이는 어둠 속에 숨어 있는 새로운 범죄자를 찾는 데는 도움이 되지 않습니다.
공백: 어떤 이도 모든 서비스 스테이션과 모든 티켓 유형을 보여주는 완전한 지도를 가지고 있지 않았습니다. (건물이 오래되었든 새것이든 상관없이 말이죠.)
해결책: Windows IOCTL 센서스 (Windows IOCTL Census)
이 논문의 저자들은 그 놓치고 있던 지도를 만들었습니다. 그들은 이를 Windows IOCTL 센서스라고 부릅니다.
모든 문을 일일이 열어보는 대신(느리고 오류가 발생하기 쉬우므로), 그들은 다른 접근 방식을 사용했습니다:
- "번역가" (결정론적 복구 - Deterministic Recovery): 어떤 언어로 된 설계도라도(오래된 32비트든 새로운 64비트든) 즉시 읽어낼 수 있는 번역가를 상상해 보십시오. 이 번역가는 버튼을 눌렀을 때 어떤 일이 일어날지 "추측"하는 것이 아니라, 단순히 설계도를 읽어서 어떤 버튼이 존재하고 그 버튼들이 어디로 연결되는지를 정확히 파악합니다.
- 결과: 그들은 27,087개의 드라이버를 포함하는 거대한 데이터베이스를 구축했습니다. 그들은 310만 개의 서로 다른 제어 코드(티켓)와 800만 개의 내부 함수를 매핑했습니다.
어떻게 유용하게 만들었는가 (3단계 프로세스)
저자들은 단순히 데이터를 쏟아놓은 것이 아니라, 이를 하나의 파이프라인으로 구성했습니다:
복구 (지도 제작자 - Recover):
그들은 모든 드라이버를 스캔하여 "디스패치 루틴(dispatch routines)"을 추출했습니다. 이것은 모든 서비스 스테이션의 메인 로비가 어디인지 식별하고, 그곳에서 사용할 수 있는 모든 티켓 유형(IOCTL 코드)을 목록화하는 것과 같습니다. 이들은 오래된 건물(32비트)과 새로운 건물(64비트) 모두에 대해 수행하여, 전체 드라이버의 **80%**를 커버했습니다.- 핵 핵심 성과: 기존의 "슈퍼 스캐너"들이 손댈 수 없었던 "오래된 건물"(32비트)들을 찾아냈습니다.
풍부화 (리스크 평가자 - Enrich):
모든 티켓이 위험한 것은 아닙니다. 그들은 스마트한 AI(LLM)를 사용하여 오직 가장 의심스러운 로비, 즉 보안 요원이 허술하거나(허용적인 액세스) 입력값 검증이 제대로 되지 않은(체크되지 않은 입력) 곳만을 조사했습니다. AI는 추측하지 않았습니다. 대신 지도 제작자가 찾아낸 구체적인 설계도 세부 정보를 바탕으로 "위험 등급"(Critical, High, Medium)을 부여했습니다.- 핵심 성과: 안전한 스테이션에 시간을 낭비하지 않았습니다. 오직 위험해 보이는 곳에만 집중했습니다.
순위 지정 (우선순위 리스트 - Rank):
마지막으로, 검색 가능한 리스트를 만들었습니다. 연구자가 27,000개의 드라이버 중 어느 것을 먼저 확인해야 할지 고민할 필요 없이, 이제는 "특정 위험한 티켓 유형을 가진 모든 드라이버를 보여줘"라거나 "가장 위험한 스테이션 상위 100개를 보여줘"라고 요청할 수 있습니다.
무엇을 발견했는가
- 지도는 실재한다: 그들은 알려진 취약점을 통해 자신들의 지도를 검증했습니다. 예를 들어, 그들은 알려진 위험한 드라이버(NVIDIA 디스플레이 드라이버)를 찾아냈고, 그것이 자신들의 위험 목록에서 매우 높게 평가된 것을 확인했습니다. 이는 시스템이 작동함을 증명합니다.
- "오래된 도시"는 가득 차 있다: 32비트 드라이버를 포함함으로써, 이전의 도구들이 무시했던 거대한 공격 표면(attack surface)을 드러냈습니다.
- 교차 검증: 그들은 자신들의 "설계도 읽기" 방식과 "슈퍼 스캐너" 로봇을 비교했습니다. 그 결과, 로봇들이 일부 항목을 찾는 데는 뛰어났지만, 많은 오래된 건물들을 놓쳤다는 것을 발견했습니다. 설계도 방식은 로봇이 볼 수 없었던 것들을 찾아냈고, 반대로 로봇이 찾은 것을 설계도 방식이 놓치기도 했습니다.
그들이 주장하지 않는 것 (한계점)
- 모든 버그를 찾은 것은 아니다: 그들은 버그의 잠재력(열려 있는 문)을 찾은 것이지, 실제로 버그가 작동하는지 일일이 수동으로 검증한 것은 아닙니다.
- "킬 리스트(Kill List)"를 공개하지 않는다: 그들은 연구자들이 스스로 작업할 수 있도록 지도(드라이버의 구조)는 공개했습니다. 하지만 악의적인 공격자가 이 지도를 이용해 즉시 컴퓨터를 공격하는 것을 방지하기 위해, 구체적인 "위험한 지점"(버그의 정확한 코드 위치)은 비공개로 유지했습니다.
- 마법 같은 해결책은 아니다: 이것은 연구자들의 작업을 우선순위에 따라 도와주는 도구입니다. "건초더미에서 바늘 찾기" 문제를 "여기에 가장 가능성 높은 바늘들이 있습니다"라는 문제로 바꿔주는 것입니다.
결론
저자들은 Windows 드라이버 보안을 위한 Google Maps를 구축했습니다. 이전에는 연구자들이 목적 없이 헤매거나 짧은 명단에 의존해야 했습니다. 이제 그들은 모든 문이 어디에 있는지, 어떤 문이 열려 있는지, 그리고 가장 오래되고 방치된 부분의 문은 어디인지를 보여주는 종합적이고 검색 가능한 데이터베이스를 갖게 되었습니다. 이를 통해 그들은 가장 중요한 곳에 에너지를 집중할 수 있습니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.