From Documentation to Zero-day Vulnerabilities: LLM-Driven Fuzzing of JavaScript Engines in PDF Readers
이 논문은 대규모 언어 모델을 활용하여 API 관계를 추론하고 복잡한 호출 시퀀스를 생성함으로써 코드 커버리지를 크게 향상시키고, 기존의 최첨단 도구들과 비교하여 주요 PDF 리더들에서 31개의 제로 데이 취약점을 발견한 새로운 LLM 기반 퍼저인 PDFuzzer를 소개한다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
단순히 화면에 머물러 있는 것이 아니라, 생각하고 계산하며 반응할 수 있는 디지털 문서를 상상해 보십시오. 이것은 PDF(Portable Document Format)가 자바스크립트 엔진이라는 내장된 컴퓨터 프로그램을 갖추었을 때 실현되는 약속입니다. 물리적인 책이 특정 페이지를 넘길 때만 열리는 숨겨진 칸을 가지고 있을 수 있듯이, PDF는 독서 애플리케이션 내부에서 실행되는 코드를 포함할 수 있어 대화형 양식, 맞춤법 검사, 동적 메뉴 등을 가능하게 합니다. 그러나 이러한 힘에는 위험이 따릅니다. 만약 해커가 이 엔진을 속여 실수를 유발할 수 있다면, 파일을 읽고 있는 컴퓨터를 제어하여 데이터를 훔치거나 악성 소프트웨어를 설치할 수도 있습니다. 수년 동안 보안 연구자들은 PDF 리더에 무작위로 변형된 문서들을 던져 프로그램이 충돌하기를 바라며 이러한 숨겨진 함정들을 찾아내려 노력해 왔습니다. 하지만 이 방법은 종종 어둠 속에서 다트를 던지는 것과 같아서, 가장 위험한 결함을 유발하는 데 필요한 복잡하고 구체적인 동작의 순서를 놓치곤 합니다.
캘리포니아 대학교 산타바바라 캠퍼스의 연구팀은 이 문제에 대해 단순한 추측에서 벗어나 지능적인 추론으로 나아가는 새로운 접근 방식을 개발했습니다. 그들은 'PDFuzzer'라고 불리는 도구를 만들었는데, 이는 다트를 던지는 사람이라기보다 과업을 수행하기 전에 설명서를 철저히 공부한 학생처럼 작동합니다. 이 시스템은 단순히 고립된 명령들에 의존하는 대신, PDF 엔진의 프로그래밍 언어의 서로 다른 부분들이 어떻게 서로 의존하는지를 학습합니다. 예를 들어, 특정 동작을 수행하기 위해 사용자가 먼저 조건을 설정해야 한다거나, 두 개의 서로 다른 명령어가 함께 작동하려면 정확히 같은 이름을 사용해야 한다는 점을 이해합니다. 컴퓨터에게 이러한 소프트웨어 엔진의 복잡한 서면 문서들을 읽고 이해하도록 가르침으로써, 연구진은 이전의 도구들은 결코 구상할 수 없었던 매우 정교한 테스트 케이스를 생성할 수 있었습니다.
이 새로운 방법의 핵심은 소프트웨어의 "규칙"을 처리하는 방식에 있습니다. 과거에 자동화된 테스트 도구들은 하나의 명령이 다음 명령에 바통을 넘겨주는 릴레이 경주처럼 기본적인 연결 관계만을 이해했기 때문에 어려움을 겪었습니다. 그들은 두 명령이 올바르게 상호작나기 위해 반드시 동일한 특정 값을 사용해야 한다거나, 한 명령이 이후의 명령이 의존하게 될 숨겨진 상태를 설정하는 것과 같은 더 미묘한 관계를 놓쳤습니다. PDFuzzer는 방대한 양의 텍스트로 훈련된 인공지능의 일종인 대규모 언어 모델을 사용하여 소프트웨어의 공식 매뉴얼과 기술적 흔적(traces)을 읽습니다. 그런 다음, 모든 함수가 다른 모든 함수와 어떻게 연관되는지에 대한 상세한 지도를 구축합니다. 이 시스템은 서면 설명을 엄격한 논리적 규칙으로 변환하여, 테스트를 생성할 때 파라미터가 완벽하게 일치하도록 보장합니다. 예를 들어, 어떤 명령이 특정 이름을 요구한다면, 시스템은 무작위로 추측하는 대신 해당 이름을 필요로 하는 후속 명령에서도 동일한 이름이 사용되도록 보장합니다.
연구진은 자신들의 창조물을 테스트하기 위해 전 세계에서 가장 인기 있는 세 가지 PDF 리더인 어도비 아크로뱃 리더(Adobe Acrobat Reader), 폭싯 PDF 리더(Foxit PDF Reader), PDF-XChange 에디터(PDF-XChange Editor)에 PDFuzzer를 적용했습니다. 그들은 이 도구를 몇 주 동안 실행하며 현재 보안 전문가들이 사용하는 최고의 기존 방식들과 성능을 비교했습니다. 결과는 놀라웠습니다. 기존의 도구들이 소프트웨어의 내부 로직 중 극히 일부만을 탐색하는 데 그친 반면, PDFuzzer는 훨씬 더 깊숙이 도달하여 코드의 최대 48%를 더 많이 커버했습니다. 더 중요한 것은, 이러한 더 깊은 탐색이 31개의 이전에 알려지지 않은 보안 결함, 즉 '제로 데이(zero-day)' 취약점을 발견하는 데로 이어졌다는 점입니다. 이것들은 사소한 오류가 아니었습니다. 많은 것들이 공격자가 임의의 코드를 실행하여 본질적으로 피해자의 컴퓨터를 완전히 제어하거나 민감한 정보를 유출할 수 있는 심각한 문제였습니다. 반면, 기존 도구들은 같은 기간 동안 합쳐서 최대 6개의 취약점만을 찾아냈습니다.
연구진은 버그를 찾는 데서 멈추지 않고, 소프트웨어 제조사들과 직접 협력하여 이를 해결했습니다. 조율된 과정을 통해, 그들은 31개의 취약점에 대한 세부 정보를 책임 있는 기업들에 공개했습니다. 업계는 신속하게 대응하여 26개의 문제를 확인하고 패치했으며, 10개에는 사용자들에게 경고하기 위한 공식 보안 식별자를 부여했습니다. 또한 연구진은 이 작업에 대한 대가로 총 2,450달러의 버그 바운티(보상금)를 받았습니다. 이 결과는 그들의 접근 방식이 가진 실질적인 가치를 강조합니다. 복잡한 소프트웨어 관계를 이해하는 어려운 작업을 자동화함으로써, 그들은 인간 전문가와 기존의 자동화 도구가 놓쳤던 위험들을 찾아내고 수정할 수 있었습니다.
성공의 핵심 요소는 도구가 소프트웨어 매뉴얼에 담긴 방대한 양의 정보를 처리하는 방식에 있었습니다. 이 엔진들의 문서는 수백 페이지에 달할 수 있으며, 컴퓨터가 자동으로 파싱하기 어려운 기술적 세부 사항들로 가득 차 있습니다. 연구진은 인공지능에게 처음부터 테스트 케이스를 생성하도록 요청하는 것만으로는 속도가 느리고 종종 터무니없는 결과를 낸다는 것을 발견했습니다. 대신, 그들은 AI를 자연어 매뉴얼을 정밀한 기계 판독 가능 규칙으로 변환하는 번역기로 사용했습니다. 그들은 과정을 단계별로 나누었습니다. 첫째, 명령의 기본 구조를 추출하고, 둘째, 완전히 문서화되지 않은 명령들에 대한 숨겨진 세부 사항을 추론하며, 셋-째, 수학적 솔버(solver)를 사용하여 생성된 테스트 케이스가 모든 논리적 제약 조건을 충족하도록 했습니다. 인공지능의 추론 능력과 수학적 논리의 정밀함을 결합한 이 하이브리드 접근 방식은 AI에만 의존하는 것보다 훨씬 더 효율적이고 효과적이었습니다.
이 연구는 또한 가장 위험한 취약점들이 이전의 도구들은 재현할 수 없었던 특정한 사건의 순서를 요구한다는 것을 밝혀냈습니다. 예를 들어, 한 결함은 사용자 인터페이스 요소가 생성된 직후 바로 삭제되었지만, 이후의 명령이 그것을 다시 사용하려고 시도하는 상황과 관련이 있었습니다. 이를 유발하려면 테스트 케이스가 요소를 생성하고, 사용하고, 삭제한 다음, 다시 접근을 시尝试해야 하며, 이 모든 과정에서 사용되는 이름과 값이 동일해야 합니다. 각 명령을 독립적인 사건으로 취급했던 기존의 도구들은 이러한 특정 사건의 사슬을 생성할 수 없었습니다. 명령 간의 관계를 이해하는 PDFuzzer는 결함을 드러내는 데 필요한 정확한 시퀀스를 구성할 수 있었습니다. 이러한 복잡한 의존성을 모델링하는 능력이 새로운 취약점들을 찾아내는 결정적인 요인이었습니다.
연구진은 PDF 리더에서의 즉각적인 성공을 넘어, 상세한 문서가 존재하는 다른 소프트웨어 보안 영역에도 이들의 방법을 적용할 수 있다고 제안합니다. 그들은 자신들의 파이프라인을 마이크로소프트 워드 매크로에서 사용되는 프로그래밍 언어에 적용하여 테스트했는데, 이는 이와 유사하게 복잡한 환경이며, 그곳에서도 동일한 유형의 관계와 의존성이 존재함을 발견했습니다. 이는 소프트웨어 구성 요소들이 어떻게 상호작용하는지를 이해하는 과제가 PDF 리더에 국한된 것이 아니라, 현대 컴퓨팅의 광범위한 문제임을 나타냅로 합니다. 서면 매뉴얼을 엄격한 테스트 규칙으로 자동 변환하는 능력은 우리가 매일 사용하는 소프트웨어를 보호하는 새로운 길을 제시합니다.
결국, 이 연구는 소프트웨어 보안의 미래가 우리가 작성한 지침을 이해하도록 컴퓨터를 가르치는 데 달려 있음을 보여줍니다. 인간이 작성한 문서와 기계가 생성한 테스트 사이의 간극을 메움으로써, 연구진은 이전보다 더 빠르고 철저하게 위험한 결함을 찾아내고 수정할 수 있음을 입증했습니다. 그들이 발견한 31개의 취약점은 우리가 매일 사용하는 소프트웨어 속에 얼마나 많은 복잡성이 숨겨져 있는지, 그리고 나쁜 의도를 가진 이들이 균열을 찾아내기 전에 이를 찾아낼 만큼 똑똑한 도구가 있을 때 우리가 얼마나 더 안전해질 수 있는지를 상기시켜 줍니다. 이 과정은 마법이나 운이 아니라, 소프트웨어의 논리를 생각하고 통찰할 수 있는 시스템을 구축하여, 모든 테스트 케이스가 무작위적인 추측이 아니라 시스템을 깨뜨리기 위한 의미 있는 시도가 되도록 만드는 과정이었습니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.