서론
- 인터넷 트래픽의 대부분은 봇이며, 이 중 일부는 악의적인 목적(스팸, 해킹 등)을 가진다.
- 작성자는 과거에 봇으로 인해 워드프레스 서버가 감염되거나 구글 검색에서 제외되는 등 피해를 겪음.
- 이를 방지하기 위해 Zip Bomb을 사용하기 시작함.
본론
-
Zip Bomb이란?
- 작지만 압축 해제 시 매우 큰 용량으로 확장되는 압축 파일.
- 1MB 압축 파일이 1GB로, 10MB는 10GB로 확장되어 서버를 마비시킴.
-
기존의 gzip 기능
- 웹에서는 전송 효율을 위해 gzip 압축을 사용함.
- 대부분의 봇도 gzip 압축을 지원함.
-
Zip Bomb을 통한 대응 방식
- 악성 봇으로 판단되면 200 OK와 함께 gzip 압축된 Zip Bomb 파일을 응답함.
- 이 파일을 열다가 봇이 서버에서 다운되거나 멈춤.
- 일반적으로 1MB(1GB 확장) 또는 10MB(10GB 확장)를 사용.
-
Zip Bomb 생성 방법
dd if=/dev/zero bs=1G count=10 | gzip -c > 10GB.gz
-
/dev/zero로 10GB의 0 바이트 데이터를 생성한 후 gzip으로 압축.
- 결과물은 약 10MB 크기의 zip bomb.
-
서버 적용 예시
- 미들웨어에서 IP 블랙리스트 또는 악성 패턴을 감지하면 Zip Bomb 전송.
if (ipIsBlackListed() || isMalicious()) {
header("Content-Encoding: deflate, gzip");
header("Content-Length: "+ filesize(ZIP_BOMB_FILE_10G));
readfile(ZIP_BOMB_FILE_10G);
exit;
}
결론
- Zip Bomb은 완벽한 방어책은 아님.
- 그러나 무차별 웹 크롤링을 하는 저급 봇에겐 효과적인 방어 수단.
- 일부 서버 리소스를 사용하더라도 보안을 위해 충분한 가치가 있음.