GN⁺: 구글 프로젝트 제로의 도구를 사용한 퍼징 레이디버드
(awesomekling.substack.com)Google Project Zero 도구를 사용한 Ladybird 퍼징
- Domato는 Google Project Zero에서 개발한 DOM 퍼저로, 대량의 주로 유효하지만 이상한 HTML, CSS, JavaScript를 포함한 웹 페이지를 생성함.
- 생성된 웹 페이지는 약 500 KiB 크기로, 브라우저 엔진을 놀라게 할 "흥미로운" JS, CSS, HTML로 가득 차 있음.
- Domato는 주요 브라우저에서 많은 버그를 발견했다고 하며, 이를 Ladybird에 적용하여 문제를 발견하고 수정함.
Issue #1: <th>
태그가 <mfrac>
안에 있을 때
- Domato가 생성한 출력에서
<mfrac>
안에<th>
를 넣는 문제를 발견함. - UBSAN(Undefined Behavior SANitizer)을 사용하여 컴파일한 Ladybird에서 null 포인터 참조 오류가 발생함.
-
<th>
와<td>
요소를 항상<table>
이 DOM 트리 상위에 있다고 가정하여 구현했으나, JavaScript API를 사용하여 DOM 노드를 수동으로 생성할 때는 이러한 규칙을 어길 수 있음. - 문제 해결을 위해
<th>
와<td>
요소가 항상<table>
을 포함하고 있다고 가정하지 않고,first_ancestor_of_type<HTMLTableElement>()
를 사용하여 수정함.
Issue #2: 분리된 DOM에서 window 이벤트 핸들러 할당
- 퍼저를 실행하면서 또 다른 문제에 빠르게 부딪힘.
-
DOMParser
를 통해 생성된 문서는 window 객체가 없으며, 이로 인해 문제가 발생함. -
Document::window()
가 nullable 값을 반환하도록 수정하고, 여러 곳에서 null 처리를 함. - window 없는 문서에서
document.body.onblur
를 할당할 때 아무 것도 하지 않도록 수정함.
Issue #3: SVG <linearGradient>
에서 무한 재귀
- SVG는 다른 그라디언트를 참조하여 색상을 상속받는 그라디언트를 선언할 수 있음.
- 그라디언트가 자기 자신을 참조하는 경우를 고려하지 않아 무한 루프가 발생함.
- 참조 사이클이 여러 단계에 걸쳐 있는 경우를 처리하기 위해 방문한 모든 그라디언트를 추적하고, 이미 방문한 그라디언트를 만나면 체인을 따르는 것을 중단함.
Issue #4: 제거된 iframe의 window 속성 접근
- iframe이 DOM에서 제거되면 해당 콘텐츠 문서가 브라우징 컨텍스트에서 분리됨.
- window 객체의 속성에 접근할 때 브라우징 컨텍스트의 존재를 가정하는 HTML 사양의 버그 발견.
- HTML 사양에 대한 이슈를 제기하고, Ladybird에서는 null 검사를 추가하여 문제를 해결함.
Issue #5: Element.before()
에서 무한 루프
- 페이지가 로드되지 않고 CPU 사용률이 100%로 유지됨.
-
before()
구현의 오류로 인해 무한 루프가 발생함. -
node->previous_sibling
대신previous_sibling->previous_sibling
을 통해 형제 체인을 따라가도록 수정함.
결론
- 하루 동안 실제 버그 5개를 발견하고 모두 수정함.
- 퍼저와 같은 도구는 소프트웨어를 더욱 견고하게 만들고자 하는 사람들에게 놀라운 자원임.
- Ladybird가 지속적인 퍼징 입력을 처리할 수 있을 정도로 안정화되면, 클라우드에서 자동으로 실행하여 더 많은 문제를 발견할 수 있을 것임.
GN⁺의 의견
- 이 기사는 Ladybird 브라우저 엔진이 Google Project Zero의 Domato 퍼저를 사용하여 발견한 버그들을 수정하는 과정을 설명함.
- 퍼징은 소프트웨어의 보안 취약점을 발견하는 데 매우 효과적인 기술로, 개발자들이 자신의 코드를 더 견고하게 만들기 위해 사용할 수 있음.
- 이 기사는 개발자들에게 퍼징의 중요성을 일깨우고, 실제로 어떻게 적용되는지에 대한 통찰력을 제공함.
- 비판적으로 볼 때, 퍼징은 예상치 못한 입력에 대한 소프트웨어의 반응을 테스트하는 것이므로, 실제 사용자의 사용 패턴을 완전히 반영하지는 않을 수 있음.
- 비슷한 기능을 제공하는 다른 퍼징 도구로는 AFL(American Fuzzy Lop)이나 LibFuzzer 등이 있으며, 개발자들은 이러한 도구들을 사용하여 자신의 프로젝트를 테스트할 수 있음.
- Ladybird 개발자들은 이 기술을 도입함으로써 발견된 버그를 수정하여 브라우저의 안정성을 향상시킬 수 있으며, 이는 사용자 경험을 개선하고 보안을 강화하는 데 도움이 될 것임.
Hacker News 의견
-
다양한 구현을 통해 스펙의 가치가 입증됨
스펙에 대한 다양한 구현이 중요한 이유가 이 글을 통해 드러남. 이미 한 가지 문제가 발견되었고, 더 있을 것으로 예상됨.
-
소규모 그룹도 놀라운 것을 만들 수 있는 가능성
소규모 그룹이 놀라운 프로젝트를 진행하는 것에 대한 열정을 표현함. 이는 이해관계자가 있는 회사에서는 어려운 일임.
-
SVG 구현으로 프로젝트의 빠른 진행에 놀라움
프로젝트가 예상보다 빠르게 진행되고 있으며, SVG 구현이 완료되었다는 소식에 매료됨을 표현함.
-
소프트웨어 개발 시 문제 해결에 대한 심층적 접근 필요성
개발자들이 문제를 발견하고 수정하는 것에 그치지 말고, 문제의 근본 원인을 이해하고 전체 코드베이스에서 유사한 오류를 찾아내야 한다고 주장함. 현대 소프트웨어의 불안정함과 버그 문제는 자본주의의 제약으로 인한 것이지만, 더 나은 소프트웨어 개발이 가능하다고 강조함.
-
Ladybird의 웹 엔진 해커페스트 참여 여부에 대한 궁금증
Ladybird가 올해 웹 엔진 해커페스트에 참여할지에 대한 관심을 표현함.
-
해킹 관련 유튜브 비디오의 부재에 대한 의문
해킹 관련 유튜브 비디오가 더 이상 업데이트되지 않는 것에 대한 아쉬움을 표현함.
-
"fuzzing ladybird"라는 단어 조합에 대한 재미있는 반응
"fuzzing ladybird"라는 단어 조합이 재미있고 야만적으로 들린다는 의견을 제시함.
-
Ladybird가 세계를 장악할 수 있기를 비밀리에 희망함
Ladybird가 언젠가 세계를 장악할 수 있기를 비밀리에 바라며, 이를 아무에게도 말하지 말라고 당부함.
-
[삭제된 댓글]
특정 댓글이 삭제되었음을 알림.