Pereiti prie pagrindinio turinio

„ZIP Bombs: A Journey to Good and Offensive Techniques”

Jei kada nors esi užmetęs akį į nuolat online esančio kompiuterio serverio log‘us, žinai – pasaulis negailestingas. Web’ai ar serveriai yra nuolatiniai hack’erių taikiniai. Gali bannin‘ti IP adresus, nebesinaudoti kenksmingomis programomis ar portalais… visgi, gali smogti ten, kur labiausiai skauda – į RAM. Kaip? Apie tai pasakoja Visma Lietuva PHP programuotojas Denis.

Kas yra ZIP?

Zip yra failo formatas, sukurtas 1984 – iais metais. Šis formatas gali suglaudinti duomenis neprarandant kokybės, neiškraipant duomenų (lossless data compression). Taip pat jis leidžia naudoti skirtingus glaudinimo metodus:

  • Store (saugoti; neglaudinimas)
  • Shrink (sutraukti)
  • Reduce (sumažinti, 1-4 lygiai)
  • Implode
  • Deflate
  • Bzip2
  • LZMA (EFS)
  • WavPack, and PPMd

Kas yra Zip bomba?

Zip bomba yra kenksminga archyvo byla, sukurta sugadinti ar sutrikdyti programą, kuri bando šį archyvą atidaryti. Zip bomba dažnai naudojama siekiant išjungti antivirusinę programinę įrangą, kad tradiciniai virusai galėtų pakliūti į sistemą.

ZIP bombų rūšys

Paprasta ZIP bomba:

  • 1 žingsnis: sukurk didelį failą su besikartojančiu turiniu (pvz., daug nulių)
  • 2 žingsnis: suspausk į ZIP failą
  • 3 žingsnis: profit

Sudėtinga ZIP bomba:

  • 1 žingsnis: sukurk didelį failą su besikartojančiu turiniu (pvz., daug nulių)
  • 2 žingsnis: suspausk į ZIP failą
  • 3 žingsnis: padaryk šio failo kopijų tiek, kiek nori (5, 16, 99 kopijos)
  • 4 žingsnis: suspausk visas kopijas į ZIP archyvą
  • 5 žingsnis: pakartok šiuos žingsnius 3-4 kartus
  • 6 žingsnis: profit

Pavyzdinis skaičiavimas:

Nesuspaustas failas = 4 GB

Suspaustu kopijų kiekviename lygyje = 16

Iš viso lygių = 5

4 GB × 16^5 = 4 194 304 GB = 4 PB (petabaitai) nesuglaudintų duomenų
Rezultato pavyzdys: http://www.unforgettable.dk/42.zip (42,838 baitų)

Rezultato pavyzdys:

Rekursinė ZIP bomba:

Reikalavimai: negali būti tuščia ir turi išlaikyti savo suspaustą struktūrą ir turinį toje pačioje vietoje.

Pavyzdžiai:

Original Input → zip() → Compressed Input

Compressed Input → unzip() → (same) Compressed Output

Lempel-Ziv algoritmas:

literal(n) == Ln

repeat(d, n) => repeat(n, n) == Rn

Dekompresija:

L3 H E L R1 L1 O  => H E L L O

L5 H E L L O  => H E L L O

ZIP bomba (web edition)

ZIP bomba (web edition)

PNG bomba

PNG formato kompresijos algoritmas:

  • Taikomas vienas iš 5 PNG filtrų (0x00 – 0x04) kiekvienai pikselių eilutei
  • Ankstesnio žingsnio rezultatai suspaudžiami naudojant Deflate algoritmą

Kaip sukurti daug sveriantį vaizdą su geriausiu glaudinimo santykiu?

  • Naudokite 1 bito spalvų erdvę
  • Padarykite visus pikselius tos pačios spalvos

Reikalinga RAM:

  • plotis × aukštis × baitai vienam pikseliui
  • RGB spalvų erdvė => 3 baitai vienam pikseliui

225 000 × 225 000 px = 50.625 gigapixels (giga = 10^9)

50.625 × 10^9 × 3 bytes = 141.44 GB (151 875 000 000 bytes)

XML bomba:

XML bomba – tai žinutė, sukurta ir siunčiama siekiant užkrauti XML parser’į (paprastai HTTP serverį). Pavyzdys:

Kaip ZIP bomba padės tau apsiginti nuo kenkėjų?

Kai botas patenka į tavo serverį, ieškodamos blogai sukonfigūruoto WordPress’o, jis gauna 10 GB duomenų, kurie iš pradžių atrodo kaip milžiniško puslapio turinys suspaustas iki 10 MB. Bandant analizuoti suspaustą turinį, bot`ui reikės jį išskleisti, o čia jau prasideda pats įdomumas: priklausomai nuo bot`o implementacijos, jis gali:

  • užsipildyti visa operatyvioji atmintis (RAM) ir bot`o kompiuteris apsikraus taip, jog nebegalės vykdyti darbo
  • atminties pritrūks ir bot`o programos veikla sutriks – ji nutrauks savo veikimą
  • programa “tyliai” pratęs veikimą lyg nebūtų aptikus jokių WordPress`o spragų šiame serveryje, nors iš tikrųjų jų net nepatikrino.

Tikimės, kad ši PHP programuotojo Denio Zyk apžvalga apie Zip bombas bus naudinga!

Populiariausi blog'ai