Вы все еще храните 404backup.zip на сервере? Я на 200ДА

Сумеречными зимними вечерами под песнь вьюги, укутавшись в овечий плед с бокальчиком «яблочной самогонки», я люблю почитывать логи на сервере. Авторизация по ключам упрощает сие, так что если в публичное помещение меня и не пустят, то сервер всегда рад приютить, старый чертяга.

В мире много чего происходит, у кого счастливое 200, кто-то недоуменно смотрит на 301, кто-то царапает похабщину на 403.

Но самый ценных мех — это исследователи. Это те, кто открывает новый для себя мир на основе своих знаний путем проб и 404.

Вот о 404 и пойдет речь. Это статья не то, чтобы не о чем. Она о безопасности.

С каждым днем все больше и больше людей разного возраста, религии, пола и установленной системы выбирают себе дорогу ИТ-опасника, чтобы потом стать ИТ-безопасником с хороших плохим послужным списком списком.

Такие креативные ребята и девчата денно и нощно посылают запросы об эксплоитах, которые отдаются им в виде 403 и 404, но это потом.

Все начинают с грубой аналитики поиска backup.zip, которые должен быть в корне сайта. Многие уходят за рамки backup.zip, и упираются в стенку archive.zip. Кто-то, поставив первую в своей жизни MySQL 3.0 ищет dump.zip, mysql.zip и, компьютерныхбоже алилуйя, home.zip. О .7z или .tar.gz даже мыслей нет!

Каждый раз, когда я вижу 404 в логе напротив очередного head, или того хуже get, мое сердце сжимается от боли, которую они чувствуют, читая ошибку с экрана, как вы читаете эту статью.

В один прекрасный день, я сказал себе — «Довольно, %username%! Ты жесток! Ты не даешь им шанса, так нельзя, это не по-человечески».

Я возразил, что жизнь вообще такая штука, нельзя им подать на блюде файл, да еще и с каемочкой. Третий голос молвил «моя преелесссть..», я не понял к чему, но рука потянулась в карман.

В итоге, после сделки с совестью и железным супергероем, которые есть почти в каждом из нас и из вас, я написал вот это:

location ~* "^/(archive|auth|backup|clients|com|dat|dump|engine|files|home|html|index|master|media|my|mysql|old|site|sql|website|wordpress)\.zip$" {
	access_log /usr/local/nginx/logs/dummy.log;
	default_type application/zip;
	root /usr/local/nginx/html/dummy;
	rewrite ^(.*)$ /mydummy break;
	max_ranges 0;
	limit_rate 4k;
	include param/zone1rs;
}

max_ranges 0; — запрещает «докачку»
limit_rate 4k; — ограничивает скорость скачивания
include param/zone1rs; — Зона, где разрешен 1 коннект на 1 ип. В разных версиях nginx свой листинг. Главное — limit_conn one 1;, где one это имя вашей зоны.

mydummy получается очень просто:

dd bs=1024 count=1572864 </dev/urandom >mydummy 

Затем нужно показать недоверчивым, что это zip архив:

echo -ne \\x50\\x4b\\x03\\x04\\x14\\x00\\x00\\x00\\x08\\x00 | dd conv=notrunc bs=1 count=10 of=mydummy


Теперь даже плохая погода мне нипочем! Ежели на дворе печальная осень, или мертвая зима, я бережно сдуваю хлебные крошки с консоли, вызываю:

tail -n 16 /usr/local/nginx/logs/dummy.log

… и на моем лице появляется улыбка! Я счастлив за будущее человечества, я горд за тех adsl или cablenet, кто целеустремленно, в течение пяти суток, бережно скачивает этот архив, этот маленький билетик в жизнь, весом в 1.5 гигабайта и ценой 5 дней этой же самой жизни. Я счастлив, что я могу сделать этот мир лучше и подарить неполную неделю счастья и практически рождественского ожидания подарка из моего правого носка.

image
Метки:
Поделиться публикацией
Похожие публикации
Комментарии 79
  • +9
    «Сделать этот мир лучше» гоняя порожняком гигабайты шума? Вот это вряд ли. Но все равно смешно.
    • –8
      Осталось добраться боднет до этого файла и задосить сервак.
      • +3
        Какой сервак? Чем задосить? Отдавая nginx'ом статику?
        • –3
          То есть при отдаче статики у нас не используются ресурсы сервера? Не остается отрытым коннект, не съедаются ресурсы на поддержание коннекта и тп?
          • +6
            Крайне мало ресурсов отъедается. Это не апач. Чтоб заддосить даже современный ноутбук таким образом надо привести ОЧЕНЬ большой ботнет, который будет стоить ОЧЕНЬ много денег. Проще будет заддосить на канал, а это другая история и не зависит от отдаваемого контента.
            • –1
              Мне в 17к ботов положили сервер. Это весьма скромный ботнет, и стоит такой недорого.
              • 0
                Я один раз положил свой сервер, когда у меня ф5 залипла. Сервер был на малинке и очень кривой пхп скрипт в бэкнде.

                Но исходный тред начался про ботов, запрашивающих статику.
                • 0
                  Так у меня статика и была. nginx, 3.5 гб памяти, Xeon CPU E5-2673 v3 @ 2.40GHz.
                  • 0
                    Мне даже интересно стало, что Вы сделали не так. «Положили» — это в чем именно выражалось?
                    • 0
                      Очень просто: все процессорное время кушал nginx, отдавая эту самую статику, плюс закончился лимит открытых файлов. Ограничение на количество открытых файлов проблему не решило — достучаться до сервера все равно было невозможно.
                      К слову, сервер находился за CF, челленджи включены, парень их обошел (мы с ним потом пообщались немного).
                      • 0
                        limit_req \ limit_con включали? У меня сервера без ссд, похожей конфигурации, отдающие статику и немного динамики (хороший бэкэнд) досы с подобным количеством ботов переживают легко, показывая только небольшое повышение LA (десятые доли на ядро).

                        Клаудфлеер вообще не использую.

                        Ккой у вас был rps во время ддоса?
                        • 0
                          Включал, но, видимо, неверные значения ставил. Вот вы сколько выставляете? rps честно не помню.
                          • 0
                            Лимиты зависят как от приложения, так и от мощности сервера, канала, задач, прочего конфига nginx.

                            У меня стоит limit_conn на 10 соединений на ип. Но только динамика. Статику не лимитирую вообще, только иногда включаю aio и кеширую дескрипторы открытых файлов.
                            • –2
                              Вы, видимо, еще не видели хорошего ddos. Например, когда прилетает сотня тысяч соединений на «статику» или просто заливается 100Гбит/c флуда так, что у ДЦ все каналы забиваются.
                              Тут не то что nginx, вообще ничего кроме глобальных cdn не поможет.
                              • +1
                                Читайте тред с начала, пожалуйста. Мы начали с того, что атака, которая будет специально «бить» в подобным образом выложенный файл и способная положить что-то, что более-менее «сервер» — экономически нецелесообразна. И еще я выразил сомнение в том, что описанный в статье способ как-то облегчит ДДоС. И я сразу открестился от атак в сотни тысяч соединений и 100Гбит/c флуда.

                                Когда приходит такое, Вы совершенно правильно заметили, средства борьбы другие, и отдаваемая с лимитированная скоростью отдачи статика — песчинка во вселенной.
                                Когда Вы становитесь мишенью подобных атак, когда они экономически осмысленны, у вас уже должен быть не один (десяток) сервер(ов); хорошая, умная балансировка и\или далеко не бесплатный тариф клаудфлеер.
                        • +1
                          Давайте вместе размышлять:
                          • у CF на данный момент 42 точки забора контента
                          • тьма точек раздачи

                          Уже значит, что 17к пользователей размажется в 42 клиента, если у вас соотв. правило в nginx добавлено и запрещены все клиенты, кроме CF и самого сервера.

                          Теперь роль играет принцип кеширования (полное, игнор агрументов, читы на стороне сервера) и, как заметил J_o_k_e_R, limit'ы в конфиге nginx. Хотя у меня стоит очень большой лимит для серверов CF, но я контролирую запросы через регулярки и аргументы.

                          CF могут отдавать контент очень быстро, запрашивать тоже. Если контент актуален, и стоит respect server headers в кастомном page rules, то они будут его хранить и 10 лет, но, при условии, что он запрашивается регулярно.

                          Я почему-то уверен, что у вас стоял standart на статику.

                          И, наконец, CF это коммерческий продукт, и защита от layer 7 у них на платных тарифах.
                          • 0
                            Кеширование статики CF было отключено, да, потому что сайт активно допиливался, скрипты и стили часто менялись.
                            • 0
                              То есть вас положили 3х часовое окно?
              • +1
                В случае канала, как правильно заметил J_o_k_e_R, это может сработать.
                Только вот в чем незадача:
                Оффициально мой канал составляет 200 Мбит. Неоффициально я могу выжать 800 Мбит на отдачу (проверял).
                У хостера сеть построена сеть на juniper'ах и, хочется верить, есть решения, чтобы отсекать паразитный траффик и различать «паразитов».
                Если же вдруг канал забит на столько, что нету и пары кбит для ssh, я зайду в панель хостера и запрошу посредством кликов мышкой доступ только себе. Далее, я просто переименую файл и все. Будет ответ 404.
                • +2
                  Если продолжить фантазировать, что придет ботнет, который забьет канал отдаваемой статикой, то после переименования по старому локейшену лучше отдавать 444. Тогда даже на ответах 404 сэкономите.
          • +6
            Вы — чистое зло.
            В хорошем смысле.
            • +13
              А не проще zip-бомбу отдавать?
              • +1
                У меня нету цели добиваться краха системы пользователя, даже в благих намерениях.
                • +7
                  А напрасно. Хозяева зараженных хостов ботнета быстрее обнаружат проблему. А выделенные сервера на время выйдут из строя и таким образом перестанут сканировать других.
                  Возьму на вооружение вариант с zip-бомбой.
                  • 0
                    Вот например добрый парень из провинции Цуаньчжоу качал это в течение суток, нещадно пытаясь открыть второй поток, как и янки из Лос Анжелеса. Зачем мне ломать их машины и, внимание, вопрос: сломаются ли они?

                    Получив бомбу в архиве бот не будет ее открывать, он ее передаст на мастерхост (это такой «не хостинг»). Который её и откроет, и, скорее всего, ручками. Так же эта бомба ловится антивирусами.
                    Но даже, если антивируса нету — какой может быть бекап в 42 кб и в корне сайта?
                    Мне очень слабо верится. Но я верю в бекапы размером в гиг в корне простого сайта, вполне себе 8-10 гигов в распакованном виде.

                    Так что zip бомба никому не насолит. Да и не о вреде этот материал, а скорее о том, как занять руки.

                    Но смею заметить, что усовершенствованием к предложенному варианту будет вариант с max_ranges отличным от нуля. В этом случае пользователь скачает часть архива. Недоверчиво стопнет, затем увидит сигнатуру в hex редакторе и запустит докачку. Только несколько часов спустя докачка уже не будет работать (если у него к примеру инет разорвет), так как он превысит max_ranges при очередном запросе.
                    • 0
                      Аргументы резонные. Но почему не объединить варианты? Вначале — zip-бомба, а конец файла забить мусором. Навскидку не помню, но, по-моему, форматом не запрещено иметь мусор в конце файла.
                      • 0
                        В принципе и хорошо, что ловится антивирусами. Сработка при скачивании теоретически должна побудить ничего не подозревающего пользователя более глубоко проверить машинку (члена ботнета) на заразу.
                        • 0
                          Хотя вообще неплохо бы придумать какой-то менее вредный вариант — например, тестовый вирус, который безвреден и при этом ловится всеми антивирями.
                          • 0
                            Есть проблема в виде «черных списков».
                            Портить репутацию домена — не очень умно. Правда я не знаю, будет ли что за тестовый вирус, но проверять не хочу:)
                            • 0
                              Если публичную ссылку на архив с вирусом (пусть будет EICAR) никуда не давать или как-то прописать неиндексирование (robots.txt ?) именно для этого архива, репутация в поисковках будет портиться?
                              • 0
                                Будет. Ссылка обязательно где-то всплывёт, антивирусы её просканируют, пометят сайт как подозрительный, пользователи придут на WOT, понизят сайту рейтинг, на WOT придут антивирусы, увидят, что у сайта низкий рейтинг, предупредят пользователя, он пойдёт на WOT… Такая вот петля смерти.
                                Они все умные сейчас стали, но о последствиях не думают, главное пользователей попугать. Мне мой сайт занесли в чёрный список, потому что у него была ссылка на другой сайт, на котором оказалась ссылка с вирусом. Такая вот транзитивная смерть от антивирусов.
                              • +2
                                Есть «эталонный» тестовый вирус EICAR. Вот его содержимое:

                                X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
                            • +3
                              Так к тем 42кб в конец можно дописать гигабайт. Станет даже правдподобнее, когда не будет хватать памяти для распаковки. Можно даже предположить, что на той стороне могут не догадаться и станут пробовать разные разархиваторы и искать хардварные ресурсы. Разве не забавно?
                            • 0
                              Сомнительно. Для начала: как в будете отдавать архив, с каким Content-Type?
                              • +1
                                А в чем проблема Content-Type при отдаче файла с расширением zip?
                                nginx сам правильный подставит. В моем случае у файла не было расширения, поэтому я ручками дописал default_type application/zip;.
                                • –1
                                  Так о том и речь. Был бы я ботнетом — в первую очередь смотрел бы на CT. Нафига пытаться распаковывать какие-то зипы, если нужное в другом? Ну а если охоа за арживами именно — не проверить compression ratio и/или реальный объём, это нужно быть совсем долбанько.
                        • +7
                          это божественно, прям до слез
                          • 0
                            А может сделать на подобие UltimateXXXPornCollectionAllSex.zip (4.0 Tb)? Можно дорисовать какую-нить pseudofs которая будет эту лажу генерировать находу
                            • 0
                              Я хотел сделать безлимитный файл на основе urandom, только такое нельзя сделать в linux. Судя по google, я не был первым.
                              Но мусор можно отдавать через динамику, очень долго, пока сокет открыт.
                              • 0
                                Ну можно попробовать расширеньку для nginx сделать
                                • 0
                                  А симлинк на /dev/urandom нельзя сделать?
                              • 0
                                Вот можно было бы прямо с /dev/urandom бесконечный поток отдавать =) Да еще и с жестким лимитом по скорости скачивания.
                                • +4
                                  Добавьте еще wp-admin.php — осчастливьте и их.
                                  • +4
                                    Когда-то давно возникала мысль запилить /wp-admin, /administrator, /admin и прочие хорошие штуки в виде простых форм всегда отдающих «Неправильный пароль». Но руки до запиливания не дошли )
                                    • +7
                                      Такая мысль меня посетила два года назад теплым июльским вечером:
                                      скриншот
                                      image


                                      Там я сделал там настоящую структуру из папок, html'ок и финала на старой доброй ASCII для тех, кто прошел квест:
                                      финал
                                      image


                                      Но сие чудо, к счастью, только на одном домене:)
                                      • 0
                                        А зачем было столько создавать? Проще же rewrite сделать :)
                                        • 0
                                          Я тогда не хотел толком rewrite изучать, как и использование регулярок в nginx. Что в плюс мне не идет, конечно.
                                          Время проходит, люди учаться:)
                                          • +1
                                            [grammar-nazi]
                                            http://tsya.ru/
                                            [/grammar-nazi]
                                            • +4
                                              Хуже, когда я делаю ошибки в окончаниях прилагательных. Непроизвольно, причем за сочинения в школе на выпускном 5/5 было.
                                              Сказывается отсутствие русского языка в повседневной жизни. Несколько контактов из скайпа и вы, хабражители.
                                    • +1
                                      Благодаря wp-admin я поимел огромный список халявных прокси серверов.
                                      • 0
                                        Кстати, сейчас есть умные боты, которые умеют в javascript. Ищем админку, которую любят тыкать боты и оная содержит жабаскрипт, который надо выполнить, чтобы поюзать её и рисуем весёленький маленький скрипт, который будет дико тормозным и неэффективным, а ещё будет кушать тонну памяти…
                                      • 0
                                        Раньше так pagefile.sys/vmlinuz/etc на bbs/fido/ed2k/etc отдавали, в виде архива с порно :)
                                        • +11
                                          с pagefile.sys поосторожнее — это вам не /dev/urandom
                                          • +1
                                            pagefile в ююках!
                                            • 0
                                              Да, да. Своп от полуоси на холд положить, святое дело! ;)
                                            • +5
                                              Лет 16-18 назад в узких кругах было популярно распространение троянцев «методом ленивого кота». На машину ставился открытый для анонимов FTP, в котором лежали файлы, типа «games/porno/tetris.exe» И народ исправно находил ftp при массовом поиске халявы, качал и запускал :)
                                              • +2
                                                Лет ещё больше назад и в PATH первой переменной вставляли что-то похожее на PROG, GAMES, TOOLS, NС, TOYS, UTIL т.д :-)
                                              • 0
                                                Для грустящих читателей вашей статьи могли бы тогда выложить небольшой кусочек лога, чтобы мы тоже могли порадоваться и узнать наших упорных героев :)
                                                • +1
                                                  да наверняка стандарт. возьмите свой лог, грипните по 404 — получите то же самое.
                                                • 0
                                                  Ламер жив всегда,
                                                  Он ко мне залез,
                                                  Связь его крута,
                                                  Аж сотни CPS.

                                                  Имя шустро ввел,
                                                  Лишь за пол-часа,
                                                  Качает мне Винды NT,
                                                  Выпучив глаза.
                                                  • 0
                                                    Я вас, возможно, разочарую, но на том конце никто не сидит и не ждет окончания скачивания, и не страдает впоследствии — это ботнеты сканируют интернет в поисках наживы. У ботов, как известно, нет эмоций, им всё равно — 5 суток качать или 5 секунд.
                                                  • 0
                                                    А можно ли на архивчик повесить еще пароль символов на много?
                                                    • 0
                                                      А смысл? Это не не ZIP архив, а только утка, с 10 байтами ZIP архива.
                                                      В принципе, если кто-то подскажет, что через dd надо добавить и куда, то пароль будет.
                                                    • –4
                                                      Что-то у вас с форматированием случилось. Так бывает, когда копипастят текст с другого ресурса.
                                                      • +1
                                                        Поделитесь ссылкой, пожалуйста. Хочу посмотреть.
                                                        • –3
                                                          Какой ссылкой?
                                                          • +1
                                                            Откуда я наглым образом скопипастил этот текст. С того самого «другогоресурса.com».
                                                            • –4
                                                              Я не утверждал, что вы скопипастили. Я сказал, что текст так выглядит.
                                                              Беглый поиск дал только пару ресурсов, которые копипастят отсюда.
                                                              И я вижу, вы уже кое-что подправили.
                                                              • +1
                                                                Я не утверждал, что вы скопипастили. Я сказал, что текст так выглядит.

                                                                И я вижу, вы уже кое-что подправили.


                                                                «Профессор, конечно, лопух, но аппаратура при нём-мм, при нём-мм! Как слышно?»
                                                                Покажите, где есть хоть небольшое совпадение, хотя бы про яблочную самогонку, она была тут изначально и именно она сподвигла меня на написание материала.
                                                      • +2
                                                        Уже есть перевод этой статьи на украинский. SEOшники не дремлют…
                                                        • +1
                                                          Неожиданно!
                                                          У них альфа версия, запятых не хватает :)
                                                        • 0
                                                          Комментарий для поддержки хабра на счет hsto. Тест картинки и hsto.


                                                          та же картинку в img после обработки hsto
                                                          image
                                                          • 0
                                                            тест
                                                            image
                                                            • 0
                                                              картинка

                                                              img без спойлера
                                                              image
                                                              • 0
                                                                image
                                                                • 0
                                                                  надеюсь для теста хватит.

                                                                  После прошу саппорт удалить это комментарии, ибо они к статье не относятся.
                                                                  • 0
                                                                    Картинка, которую хабр может скачать
                                                                    image

                                                                    И которую не может
                                                                    image
                                                          • 0
                                                            del (для саппорта)

                                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.