2. Whoami
— Григорий Земсков, директор компании «Ревизиум»
— 7 лет лечим сайты и защищаем от взлома
— Более 10 000 вылеченных сайтов
— Разработчик сканеров
Сканер AI-BOLIT Веб-сканер ReScan.Pro
2
7. PHP бэкдоры в 2017м
7
— однострочные инжекты в начало PHP файла или после стартовых комментариев
— обфускация переменных, разбавление пробелами и комментариями
— использование $_GET/$_POST/$_COOKIE/$_REQUEST/$_SERVER в качестве входных
параметров
— косвенные вызовы, использование функций с callable аргументами
— на зараженном сайте обычно один-два типа бэкдора + их вариации (мутации)
10. Задача алгоритма
— Статический анализ кода
— Определять обфусцированные фрагменты
— Обнаруживать инъекции в PHP файлах
— Учитывать фрагментированные строки
— Обрабатывать косвенные вызовы вида $fn[$par1][$par2]($par3,…);
— Выдавать обнаруженные вредоносные сниппеты
— Минимизировать ложные срабатывания
— Работать быстро на большом наборе файлов
10
11. Гипотеза
— Бэкдоры часто принимают на вход параметры из суперглобальных
массивов $_GET, $_POST, $_SERVER, $_REQUEST, $_FILES, $_COOKIE
— и используют их в следущих случаях:
— как аргументы косвенных вызовов ф-й вида $x[3]($y(…))
— в функциях с callable аргументами (call_user_func, array_diff,…) и eval/assert
— в exec-функциях (popen, shell_exec, system, exec, …)
— как имя файла в файловых операциях (fopen, unlink,…)
— bitwise операции (строковые операции вида $a ^ $b[3] & $c)
— Эти случаи не типичные для легитимных скриптов
11
12. Проблема
— Бэкдоры получают пейлоуды из $_GET, $_POST,
$_SERVER, $_REQUEST, $_FILES, $_COOKIE, но
используют их неявно и по цепочке
присваиваний.
— Аналогичная ситуация с вызовом функций
12
13. Краткий алгоритм
1. Читаем очередной PHP файл, парсим токенайзером
• Находим вызовы eval, assert, call_user_func_array, array_*, *sort (и другие, в которых
могут использоваться callable параметры), косвенные вызовы, файловые
операции fopen, file_put_contents,…, в которых используются переменные
• Собираем список переменных, в которые могли попасть значения глобальных
$_GET/$_POST/$_SERVER/$_REQUEST/$_COOKIE/$_FILES и bitwise операций =>
Бинго.
• Если функция вызывается неявно через косвенное обращение к переменным =>
Бинго.
2. Отфильтровываем легитимные файлы по whitelist базе известных скриптов (sha1 от
нормализованного файла php)
3. Формируем сниппеты и выдаем результат
13