2. Интро
Разработчики вредоносов используют шифрование,
обфускацию, различные ухищрения и возможности php
Две цели: 1) затруднить обнаружение 2) затруднить
анализ
Самые “живучие” скрипты – использующие оба подхода
Методы могут использоваться разработчиками защиты
лицензионного софта
Обнаружение выполняется по:
Контрольным суммам, хэшам
По сигнатурам (фикс. строки, “регулярки”)
Нечетким правилам, эвристике
10 приемов для затруднения обнаружения и 9 приемов
затруднения анализа
6. Затруднение обнаружения 4
“Мимикрия” php кода (маскировка под важный код)
Обрамление кода пугающими комментариями вида “DO NOT
DELETE THIS CODE OTHERWISE SCRIPT DOESN’T OPERATE
PROPERLY…”
Приклеивание к многострочным комментариям
Размещение кода между или после больших комментариев
8. Затруднение обнаружения 6
Код, написанный согласно coding style и/или
вставленный в середину большого скрипта, ООП код,
вставка внутрь функций или классов
19. Затруднение анализа: использование В.И.Д.
Использование внешних источников данных в качестве
хранилища кода
БД
Внешний сервер
Локальный файл
Memcached
COOKIE, переменные окружения, параметры скрипта
Мета-данные файлов изображений
20. Затруднение анализа: неявный вызов
Динамическое формирование кода и неявные вызовы
выполнение кода через eval, assert, *sort, array* и разные итераторы
выполнение кода через preg_replace('/.*/e')
косвенный вызов функции $a($b)
выполнение кода через preg_replace_callback
через регистрацию функции завершения register_shutdown_function
использование механизма autoload (2 варианта)
использование обработчика сессии session_set_save_handler
вызов через обработчик исключений set_exception_handler
использование обработчика ошибок set_error_handler
использование собственного загрузчика сущностей
libxml_set_external_entity_loader
создание собственного стрима для неявного вызова кода
stream_wrapper_register
php_auto_append / php_auto_prepend
динамическая загрузка расширений функцией dl()
21. Затруднение анализа: антиреверс
Использование проверок, затрудняющих реверс-
инжиниринг
защита от декодирования за счет проверки на наличие в коде
скрипта функций echo, print, var_dump, print_r и аварийное
завершение при обнаружении
проверка в скрипте, что код запускается в окружении сервера или
конкретного сайта
авторизация по входным параметрам. Код выполняется только
при определенных значениях параметров запроса
23. Сканеры вредоносных скриптов на сервере
AI-Bolit (http://revisium.com/ai/ )
Ищет по регулярным выражениям, а не хэшам. Большая
база, эвристика.
ClamAv (http://www.clamav.net/lang/en/ )
Самый популярный на хостингах. Ищет по хэшам.
Maldet (https://www.rfxn.com/projects/linux-malware-
detect/ )
Большая база хэшей.
Десктопные антивирусы (с оговорками)
“Ручки” (find/grep в командной строке)
Самый доступный инструмент. Хорошо работает у
админов, которые знают свои сервера и сайты.