Introduction
Zip Bomb는 Decompression bomb로도 불리며 압축을 풀었을 때 엄청난 리소스를 소모하게 만드는 파일을 이용한 공격입니다. 여러겹의 파일 구조를 가지는 Zip 파일을 만들고 이를 해제하는 컴퓨터에 리소스를 크게 사용하는 방법으로 Zip을 해제하는 기능을 가진 소프트웨어는 체크가 필요한 공격입니다.
- 압축을 해제하는 디바이스 (모바일, PC 등)
- 서버 내 처리를 위해 Decompression 하는 경우
- PK헤더를 사용하는 포맷(e.g Office의 OXML)을 처리하는 도구들
가장 간단한 방법으론 여러 파일과 디렉토리를 포함한 Zip을 만드는 방법이 있고, 재귀를 이용한 벙법이나 파일 헤더와 내용을 겹쳐쓰는 방식으로 만들어진 Zip Bomb 들이 존재합니다.
10MB의 Zip Bomb 파일이 있을 때 압축을 풀면 281TB의 사이즈를 가지는 경우도 있습니다.
유사한 형태의 공격으로 Compiler Bomb란 공격도 있은 참고하시면 좋을 것 같습니다.
Single-layered
Zip 파일 내 단일 레이어로 구성한 Zip Bomb로 파일의 헤더, 내용 등을 겹쳐써서 만듭니다. 대표적으로 zbsm, zblg, zbxl의 샘플이 있습니다.
Multi-layered
여러 레이어를 포함하는 Zip Bomb 입니다. 잘 알려진 파일로는 42.zip이 있습니다.
Self-replicating
자가 복제 기반의 Zip Bomb입니다. Decompression 시 자체적으로 복제하며 재귀 프로세스를 생성하는 Zip 형태입니다.
Offensive techniques
Detect
압축 해제 시 발생하는 문제이기 때문에 압축 파일을 다루는 서비스의 기능이나 API, Application은 모두 테스팅의 대상이 됩니다. 서비스 내부에서 Zip과 같은 압축 파일을 처리하는지 확인합니다. 만약 해당 구간이 있다고 판단된다면 Zip bomb를 식별하고 대응하는지 악의적인 파일을 만들어 테스트해볼 수 있습니다.
POST /upload_zip HTTP/1.1
잘 알려진 샘플은 아래와 같습니다. 물론 안정적인 테스트를 위해선 직접 만들어서 사용하는 것을 추천드려요.
- Multi-layered: 42.zip
- Single-layered: zbsm, zblg, zbxl
- Self-replicating: r.zip
Exploitation
Zip-Bomb는 DOS와 같이 가용성에 영향을 주는 공격입니다. 하나의 파일 또는 HTTP Request로 서버의 리소스를 과도하게 사용하여 서비스 전반적으로 영향을 주거나, 파일 시스템에 문제를 일으켜 시스템에 대해 반영구적으로 피해를 줄 수도 있습니다.
시스템의 구성에 따라서 아래와 같은 악용 시나리오들이 존재합니다.
- 컴퓨팅 자원을 대량으로 소모하여 다른 기능에 영향을 끼침
- 컴퓨팅 자원을 대량으로 소모하여 과도한 비용을 발생시킴 (Public Cloud의 경우 민감)
- 과도한 파일 사이즈로 파일 시스템의 여유 공간을 줄여 로깅 등을 방해
Defensive techniques
Zip 등 압축 해제 시 사용하는 라이브러리 또는 직접 작성한 코드에서 과도한 구조를 가진 파일이나 재귀적인 파일, 헤더가 이상한 파일에 대해서는 처리하지 않도록 제한하는 것이 좋습니다.