Zip Bomb

Zip Bomb

πŸ” 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

잘 μ•Œλ €μ§„ μƒ˜ν”Œμ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. λ¬Όλ‘  μ•ˆμ •μ μΈ ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄μ„  직접 λ§Œλ“€μ–΄μ„œ μ‚¬μš©ν•˜λŠ” 것을 μΆ”μ²œλ“œλ €μš”.

Exploitation

Zip-BombλŠ” DOS와 같이 κ°€μš©μ„±μ— 영ν–₯을 μ£ΌλŠ” κ³΅κ²©μž…λ‹ˆλ‹€. ν•˜λ‚˜μ˜ 파일 λ˜λŠ” HTTP Request둜 μ„œλ²„μ˜ λ¦¬μ†ŒμŠ€λ₯Ό κ³Όλ„ν•˜κ²Œ μ‚¬μš©ν•˜μ—¬ μ„œλΉ„μŠ€ μ „λ°˜μ μœΌλ‘œ 영ν–₯을 μ£Όκ±°λ‚˜, 파일 μ‹œμŠ€ν…œμ— 문제λ₯Ό 일으켜 μ‹œμŠ€ν…œμ— λŒ€ν•΄ 반영ꡬ적으둜 ν”Όν•΄λ₯Ό 쀄 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

μ‹œμŠ€ν…œμ˜ ꡬ성에 λ”°λΌμ„œ μ•„λž˜μ™€ 같은 μ•…μš© μ‹œλ‚˜λ¦¬μ˜€λ“€μ΄ μ‘΄μž¬ν•©λ‹ˆλ‹€.

  • μ»΄ν“¨νŒ… μžμ›μ„ λŒ€λŸ‰μœΌλ‘œ μ†Œλͺ¨ν•˜μ—¬ λ‹€λ₯Έ κΈ°λŠ₯에 영ν–₯을 끼침
  • μ»΄ν“¨νŒ… μžμ›μ„ λŒ€λŸ‰μœΌλ‘œ μ†Œλͺ¨ν•˜μ—¬ κ³Όλ„ν•œ λΉ„μš©μ„ λ°œμƒμ‹œν‚΄ (Public Cloud의 경우 민감)
  • κ³Όλ„ν•œ 파일 μ‚¬μ΄μ¦ˆλ‘œ 파일 μ‹œμŠ€ν…œμ˜ μ—¬μœ  곡간을 쀄여 λ‘œκΉ… 등을 λ°©ν•΄

πŸ›‘ Defensive techniques

Zip λ“± μ••μΆ• ν•΄μ œ μ‹œ μ‚¬μš©ν•˜λŠ” 라이브러리 λ˜λŠ” 직접 μž‘μ„±ν•œ μ½”λ“œμ—μ„œ κ³Όλ„ν•œ ꡬ쑰λ₯΄λ₯Ό 가진 νŒŒμΌμ΄λ‚˜ μž¬κ·€μ μΈ 파일, 헀더가 μ΄μƒν•œ νŒŒμΌμ— λŒ€ν•΄μ„œλŠ” μ²˜λ¦¬ν•˜μ§€ μ•Šλ„λ‘ μ œν•œν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

πŸ•Ή Tools

πŸ“Œ References