За защита на своя сървър използвам zip бомби
Оригиналът е на Ibrahim Diallo
По-голямата част от трафика в мрежата се дължи на ботове. В по-голямата си част тези ботове се употребяват за разкриване на ново наличие. Съществуват четци на RSS излъчвания, търсачки, които претърсват наличието ви, а в днешно време и ботове с изкуствен интелект, които събират наличие, с цел да го подават на LLM. Но има и злонамерени ботове. Те са основани от спамъри, събирачи на наличие и хакери. На предходното ми работно място един бот откри накърнимост в WordPress и вгради злотворен скрипт в нашия сървър, след което трансформира машината в ботнет, употребен за DDOS. Един от първите ми уеб уеб сайтове беше изцяло изтласкан от търсенията в Гугъл поради ботове, генериращи спам. Трябваше да намеря метод да се защитя от тези ботове, по тази причина започнах да употребявам zip бомби.
Zip бомбата е относително дребен компресиран файл, който може да се разгърне до доста огромен и да претрупа машината.
Една от първите характерности на уеб беше потреблението на gzip компресията. Интернет беше муден и имаше малко налична информация, по тази причина данните се компресираха, преди да бъдат трансферирани по проводниците. По този метод един 50KB HTML файл, състоящ се от текст, можеше да бъде компресиран до 10KB, като по този метод се икономисваха 40KB при предаването. При комутируема интернет връзка това позволяваше една страница да бъде изтеглена за 3 секунди вместо за 12 секунди.
Същото компресиране може да се употребява за прекачване на CSS, Javascript и даже изображения. Gzip е бърз, елементарен и доста усъвършенства работата при сърфиране. Когато браузърът прави уеб поръчка, той прибавя заглавия, с които оповестява на целевия сървър, че поддържа компресия. И в случай че сървърът също поддържа компресиране, той ще върне данните в компресиран тип.
Accept-Encoding: gzip, deflateУеб ботовете за обхождане също поддържат тази функционалност. Именно тъй като тяхната задача е да употребяват наличие от цялата световна мрежа, те се стремят да усилят размера посредством използване на компресия. И ние се възползваме изцяло от тази функционалност.
Платформата, на която повеждам блога си, постоянно се сканира от ботовете за уязвимости в сигурността, само че в по-голямата си част аз я пренебрегвам. Но когато открия, че се пробват да извършат офанзиви или се пробват да налучкват даден отговор, връщам 200 OK и по-късно им предавам gzip. Размерът на файла варира от 1 MB до 10 MB, според от това какво могат да употребяват. Най-често, откакто получат този файл, в никакъв случай повече не слушам за тях. Защо? Защото се срутват още преди да са приключили обработката на файла.
Content-Encoding: deflate, gzipТова, което се случва, е, че те получават файла и прочитат заглавието, което им споделя, че файлът е компресиран. Те се пробват да декомпресират файла с размер 1 МВ, с цел да намерят търсеното наличие. Но файлът продължава да се декомпресира още веднъж, и още веднъж, и още веднъж, и още веднъж, и още веднъж, до момента в който не свърши паметта и сървърът им не се срине. Файл с размер 1 МВ се декомпресира в 1 GB. Това е повече от задоволително, с цел да прекъсне работата на множеството ботове. Въпреки това, за тези досадни скриптове, които не желаят да спрат, имам 10MB файл. Той се разархивира до 10 GB и незабавно убива скрипта.
Преди да пристъпя към изложение на това по какъв начин да създадете zip бомба, би трябвало да кажа, че евентуално може да организирате срив и щета на личното си устройство, тъй че помислете за рисковете. Ето по какъв начин се основава една zip бомба:
Ето какво прави тази команда:
dd: командата dd се употребява за прекопирване или конвертиране на данни. if: входящ файл, тук е посочено dev zero – специфичен файл, който основава безконечен поток от нулеви байтове. bs: block size (размер на блока), задава размера на блока на 1 гигабайт (1G), което значи, че dd ще чете и записва данни на блокове от по 1GB. count=10: тази алтернатива указва на dd да обработва 10 блока, като всеки блок е с размер 1GB. Това значи, че ще създадем 10 GB данни единствено от нули. След това предаваме резултата от командата на програмата gzip, която го компресира във файл 10GB.gz. Полученият файл ще бъде с размер 10 MB.
На моя сървър съм добавил междинна стратегия, която ревизира настоящата поръчка за преднамереност. Имам черен лист с IP адреси, които се пробват неведнъж да сканират целия уеб уебсайт. Има и други евристични способи за идентифициране на спамърите. Много спамъри се пробват да изпратят спам на дадена страница и по-късно се връщат, с цел да видят дали спамът е попаднал на страницата. Използвам този модел, с цел да ги разпознавам. Той наподобява по следния метод:
Това е всичко, което е належащо. Единствените ми разноски са свързани с прехвърлянето на 10MB файл понякога. Ако този пост бъде инфектиран от вируси, ще понижа размера на файла до 1 МВ, което е съвсем толкоз дейно.
Струва си също по този начин да се каже, че zip бомбата не подсигурява цялостна сигурност. Тя може елементарно да бъде открита и заобиколена. А наличието може да бъде прочетено единствено отчасти. Но за елементарните ботове, които сляпо обхождат мрежата и се намесват в работата на сървърите, това е задоволително добър инструмент за отбрана на сървъра.




