Появился чужой код в Moodle

Появился чужой код в Moodle

от Nurbek Tentiev -
Количество ответов: 6

В общем, ломанули как-то. Поискал инфу по проблеме, не нашел, теперь сюда обращаюсь. Сейчас в коде в начале (сразу после body) вставился примерно следующий кусок:

<font style="position: absolute;overflow: hidden;height: 0;width: 0">
xeex101901
<a href=http://>smog</a>
...
<a href=http://>finally</a>
</font>

Что то пока никак не пойму откуда он.

Скрипты прошерстил - нет такого куска.

В базе поискал, вроде тоже нет. Кстати, как в mySQL поискать по контенту, чтоб точно проверить?

Фиксы Moodle давненько не отслеживал... Может, проблема не редкая. Но по поиску ничего похожего не нашел.

А еще перестал работать WYSIWYG-редактор, страничка на javascript ругается.

В общем, жду подсказок...

В ответ на Nurbek Tentiev

Re: Появился чужой код в Moodle

от Виктор Энгель -
Приходилось с таким сталкиваться на сайте сделанном на Joomla. Порядок действий примерно следующий:
  1. Обязательно поменять пароли для доступа по ftp, ssh, желательно к БД mysql и пр.
  2. Проверить компьютеры, с которых происходит доступ по ftp и ssh, на вирусы. В ftp-клиентах отключить автосохранение паролей. Вполне возможно на компьютере сидит троян, который перехватил пароль и организовал заражение на сайте.
  3. Сделать резервные копии всего что можно: БД, каталогов moodle и moodledata.
  4. Сделать копии файлов конфигурационных файлов (в данном случае config.php и .htaccess). Изучить их на наличие подозрительного кода. Их размер небольшой, поэтому вряд ли удастся пропустить что-то интересное.
  5. Удалить содержимое каталога с Moodle залить туда свежий дистрибутив. Moodle желательно испольлзовать той же версии (чтобы не добавлять неожиданности связанные с обновлением). Скопировать старые конфиги.
  6. Поменять пароли администратора и всех, кто обладает возможностью хоть чем-то управлять на сайте. Желательно конечно поменять у всех пользователей.
  7. Подождать одну-две недели. Если заражение не повторится - значит все дыры заткнули.
Когда лечил сайт на Joomla, то пятый пункт не делал. Сайт состоял из большого количества модулей и заново его собирать показалось слишком утомительным. Был сделан скрипт, перебирающий все файлы сайта, и удаляющий лишний код. Через некоторое всё повторилось, оказалось, что было два разных куска. После повторного лечения всё наладилось.
В ответ на Виктор Энгель

Re: Появился чужой код в Moodle

от Dmitry Pupinin -
Поддерживаю Виктора. Было такое.
Однозначно менять пароли на ftp и ssh, причем с другого компьютера. Убрать автосохранение паролей в far и т.п.
Внутренние пароли Мудл можно не менять.
Левый код нужно конечно удалить. Причем сделать это (и смену паролей) нужно как можно быстрее, иначе если Google проиндексирует ваш сайт, то он попадет в черный список и Internet Explorer и Firefox перестанут туда ходить, при этом будут ругаться что сайт заражен.
В ответ на Nurbek Tentiev

Re: Появился чужой код в Moodle

от Nurbek Tentiev -

Виктор,
Вы говорите, что в вашем случае прописался в коде скриптов.

А у меня поиск ничего не дает. Даже более того делал поиск и по дате изменения файлов. За долгий прошедший период, оказалось, что менялись только файлы index.php и config.php в корневой папке Мудла. А остальные скрипты не менялись (что в принципе и должно быть).

Я уже начинаю думать, что код вставляется через сервисы (Apache или PHP) улыбаюсь

Вариант вставки из mySQL тоже как-то не очень правдоподобен... Хотя, точно не могу сказать, в коде Мудла не особо ковырялся...

В ответ на Nurbek Tentiev

Re: Появился чужой код в Moodle

от Nurbek Tentiev -

Всё оказалось проще...

В config.php первой строчкой добавился хешированный код. Поэтому через поиск по контенту фрагмент не находился.

WYSIWYG-редактор тоже заработал.

Скорее всего, вставленный кусок влиял на код всей страницы, в т.ч. JS.

Как к файловой системе доступ получили - пока не понятно.

В системе (Windows) вроде вирусов нет.

Вручную что ли кто-то лазил?

Через Moodle могли к файлам доступ получить?

В ответ на Nurbek Tentiev

Re: Появился чужой код в Moodle - решение

от Michael Goncharenko -
Всем добрый день,

у нас регулярно происходит такой взлом. Мне удалось выработать к нему иммунитет. Более того - мне на почту теперь приходит полный дамп POST-запроса, который я перешлю всем желающим.

Уязвимость связана с одной функцией библиотеки KSES, которая используется в ядре Moodle - kses_bad_protocol_once. Она позволяет выполнять код, если он указан в ${}.

В более новых версиях (в данный момент у нас 1.9.7+) такой взлом не проходит - видимо, обновили библиотеку KSES.
Версия 1.8 оказалась уязвима. Поэтому рекомендую:

1. Обновиться как можно скорее. Запросы шлются несколько раз в день.
2. Закрыть всё дерево moodle для записи процессом веб-сервера. Как правило, нужно просто изменить владельца на root и поставить права 644.
3.
Для исключительных случаев, когда обновление невозможно по ряду причин, выкладываю полный код функции:

function kses_bad_protocol_once($string, $allowed_protocols)
{
// FIXME by M.Goncharenko - remove all $ from string because ${} executes a code!
$string = str_replace("$", "", $string);

$str2 = preg_replace('/^((&[^;]*;|[\sA-Za-z0-9])*)'. '(:|&#0*58;|&#[Xx]0*3[Aa];)\s*/e',
'kses_bad_protocol_once2("\\1", $allowed_protocols)',
$string);
return $str2;
} # function kses_bad_protocol_once

Эта функция находится в файле lib/kses.php. Думаю, понятно, что старую нужно удалить, а эту написать на её место.

Надеюсь, мои исследования вам помогут одобряю