나는 내 서버를 보호하기 위해 ZIP 폭탄을 사용한다
(idiallo.com)서론
- 인터넷 트래픽의 대부분은 봇이며, 이 중 일부는 악의적인 목적(스팸, 해킹 등)을 가진다.
- 작성자는 과거에 봇으로 인해 워드프레스 서버가 감염되거나 구글 검색에서 제외되는 등 피해를 겪음.
- 이를 방지하기 위해 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은 완벽한 방어책은 아님.
- 정교한 봇은 이를 감지하고 우회할 수 있음.
- 그러나 무차별 웹 크롤링을 하는 저급 봇에겐 효과적인 방어 수단.
- 일부 서버 리소스를 사용하더라도 보안을 위해 충분한 가치가 있음.
이런 글을 올리는 목적이 뭘까요?
실제로 크롤러를 돌리는 기업들이 이 글을 읽고 제외까지 할 가능성은 거의 없다고 생각하는데 말입니다.
그럼 이 글은 어떤 독자들을 대상으로 쓴 글일까요?
같이 블로그를 운영하는 사람들에게 이런 방법이 있다고 알려주는 소개글,
아니면 내 블로그 이렇게 보안 쎄니까 할 수 있으면 한번 크롤링 해보라는 어그로?
글을 올려서 얻는 게 뭘지 정말 궁금해집니다
물론 공적인 장소가 아니니까 그냥 별 생각 없이 올린 글일수도 있죠.
커뮤니티에서 별 생각 없이 댓글을 달 수도 있듯이요
저는 크롤러를 완전히 막을 수는 없으니 시도 자체를 안 받는 게 가장 좋을 텐데, 어그로를 끄는 의도가 궁금했습니다.
agent가 bot이라고 오는 요청에 폭탄을 선사하겠다는건데..
너무 악의 적이네요. 어짜피 agent는 쉽게 숨길 수 있습니다. 진짜 악의적인 봇이면 악의를 드러내지 않습니다.
말씀하신 User-Agent든 원글에서 언급된 IP 기반 탐지든, 식별 정보는 위장이 가능하기에 악성 여부를 단정하기 어렵다는 점에 동의합니다. 실제 악의적인 봇은 더 교묘하게 접근하겠지요.
제 생각에는 이런 공격보다는, 차라리 부하 제한이 있는 크롤링 API를 제공해서 합법적인 자동화 접근은 허용하되 서버 자원은 보호하는 방향이 더 현실적인 '넛지'가 아닐까 싶습니다. ㅎㅎ