해법
고전적인 서비스 거부 아카이브는 재귀적 zip 폭탄이었다. 42.zip은 여섯 겹의 zip 파일을 중첩시켜, 압축 해제기가 중첩된 아카이브를 계속 풀어낼 경우에만 4.5 PB에 도달한다. 대부분의 실제 파서는 한 번만 풀기 때문에 최상위 계층은 하찮은 0.6 MB에 그치고, 스캐너들은 재귀 깊이와 압축 해제 크기에 상한을 두어 스스로를 방어했다. 모두가 알고 있던 그 공격은 나무의 형태를 하고 있었다.
David Fifield의 착수는 재귀를 제거하는 것이었다. 그는 반복되는 바이트의 단일 커널을 압축한 다음, 수만 개의 중앙 디렉터리 항목이 그 바이트들의 중첩된 범위를 가리키게 하고, 그 사이에 끼어 있는 각 로컬 파일 헤더를 DEFLATE 비압축 블록 안에 인용하여 일반 파서들도 여전히 서로 구별되는 잘 형성된 파일들을 보도록 했다. 커널의 모든 바이트가 파일마다 한 번씩 압축 해제되므로 출력은 입력에 대해 제곱으로 증가하고, 폭탄은 한 번의 압축 해제로 터진다.
수치는 이전의 모든 구성물을 능가했다. 42.zip의 외부 계층 크기인 42,374바이트에서 아카이브는 5.5 GB로 팽창하며(비율 129,000), 10 MB 버전은 281 TB로 팽창하여 비율이 2,800만을 넘고 zip 형식의 이론적 최대치의 99.97%에 해당하며, Zip64 확장을 사용하면 46 MB가 4.5 PB로 팽창한다. USENIX는 이 글을 WOOT 2019 워크숍에 채택하고 최우수 논문상을 수여했다.
이 공개는 업계 방어 체계에 대한 실시간 시험이 되었다. 10 MB 샘플에 대한 VirusTotal 스캔은 여러 엔진에서 시간 초과되었고, ClamAV는 탐지가 패치될 때까지 CPU를 소진했으며 이후 다시 패치되었다. Mark Adler는 Debian이 배포하고 SUSE는 거부한 UnZip용 중첩 파일 탐지기를 작성했으며(CVE-2019-13232), Chromium은 비정상 압축 비율에 대한 지표를 추가했고, Apple은 iOS 14에서 iOS Quick Look 캐시 고갈을 완화했다.
달성한 것
하나의 압축된 커널 위에 많은 파일을 중첩시켜 저장된 모든 바이트가 N번씩 팽창하게 한다
표준 방어의 전제를 공격한다. 스캐너들은 재귀 깊이를 제한했으므로, 한 번에 완전히 팽창하는 폭탄은 디스크를 범람시키기 전까지 평범해 보인다.
중첩은 비율을 초선형으로 만든다. 저장된 각 바이트가 모든 출력 파일에 기여하므로, 아카이브는 계층마다 고정된 배수를 더하는 것이 아니라 커질수록 더 치명적으로 성장한다.
호환성은 일치하는 이름, 올바른 CRC, 순수한 DEFLATE로 설계에 반영되어, 시연이 예외적인 사례가 아니라 Info-ZIP, Python, Go, Android 파서에서 작동했다.
Fifield는 작동하는 샘플을 배포하고 공격을 수정책, 즉 중첩 탐지와 파서 샌드박싱과 함께 제시하여, 호기심을 공급업체가 채택할 수 있는 패치로 바꾸었다.
방어자들이 한 가지 형태의 공격을 패치하면 형태를 바꿔라. 중첩 파일은 재귀를 선택 사항으로 만들고 깊이 제한을 무용지물로 만들었다. 시그니처를 열거하는 대신 파서 내부에서 시간과 디스크를 제한하라.
후속 상황
Mark Adler의 중첩 탐지기는 UnZip과 Debian에 반영되었고, ClamAV는 처음에 인접한 쌍만 검사하다가 이후 시간 제한을 두었으며, D의 std.zip은 중첩을 거부하는 법을 익혔고, Chromium은 비정상 비율 지표를 추가했으며, Apple은 iOS 14에서 iOS 12/13 Quick Look 고갈을 완화했다. VirusTotal은 시간 초과된 엔진들을 문서화했고, 백신 공급업체들은 2019년 내내 탐지를 갱신했다. Google Safe Browsing은 2019년 7월 말부터 8월 중순까지 bamsoftware.com 전체를 플래그했고, 이로 인해 Tor의 Snowflake 브로커가 잠시 중단되었으며, Xfinity는 2019년 11월에 해당 페이지를 차단했다. Fifield는 USENIX WOOT 2019에서 최우수 논문상을 수상했다.
근거 확인하기
출처
- A better zip bomb David Fifield · bamsoftware.com
- A better zip bomb (Best Paper), USENIX WOOT 19 USENIX Association · usenix.org
- A better zip bomb — Hacker News discussion Hacker News · news.ycombinator.com ·