24
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP- сценариях Григорий Земсков, компания “Ревизиум” PHDays 2014

Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Embed Size (px)

DESCRIPTION

Как хакеры и разработчики вредоносного кода затрудняют обнаружение и анализ кода в PHP скриптах.

Citation preview

Page 1: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях

Григорий Земсков, компания “Ревизиум”

PHDays 2014

Page 2: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Интро

Разработчики вредоносов используют шифрование, обфускацию, различные ухищрения и возможности php

Две цели: 1) затруднить обнаружение 2) затруднить анализ Самые “живучие” скрипты – использующие оба подхода Методы могут использоваться разработчиками защиты лицензионного софта Обнаружение выполняется по:

Контрольным суммам, хэшам По сигнатурам (фикс. строки, “регулярки”) Нечетким правилам, эвристике

10 приемов для затруднения обнаружения и 9 приемов затруднения анализа

Page 3: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение обнаружения 1

Отбивка кода пробельными символами (пробелы, табы, переводы строки)

Page 4: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение обнаружения 2

Сокрытие кода среди “мусора”, комментариев, внутри бинарных файлов, картинок и после заголовка .gif.

Page 5: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение обнаружения 3

Сокрытие кода в мета-данных картинок .jpg (exif заголовок), .png.

Page 6: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение обнаружения 4

“Мимикрия” php кода (маскировка под важный код) Обрамление кода пугающими комментариями вида “DO NOT

DELETE THIS CODE OTHERWISE SCRIPT DOESN’T OPERATE PROPERLY…”

Приклеивание к многострочным комментариям Размещение кода между или после больших комментариев

Page 7: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение обнаружения 5

Маскировка обфусцированного кода под PGP ключ, файл данных или лицензионный ключ

Page 8: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение обнаружения 6

Код, написанный согласно coding style и/или вставленный в середину большого скрипта, ООП код, вставка внутрь функций или классов

Page 9: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение обнаружения 7

Фрагментация кода (склейка из большого числа подстрок)

Page 10: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение обнаружения 8

Полиморфный или обфусцированный фрагмент

Page 11: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение обнаружения 9

Использование “гибкого синтаксиса” языка php для записи конструкций Строки как константы:

@assert( @$_POST[a])

Пробельные символы/переводы строк в аргументах: preg_replace( '/.*/e' , …)

Косвенный вызов: $_POST [‘f’]( $_POST[ ‘arg’ ])

Разбавление кода комментариями: eval(/*zzz*/ gzinflate( @base64_decode…

Опускание скобок при вызове функций: $a = base64_decode ‘…’;

Не чувствительность к региструPrEG_ReplAce(‘/.’ . ‘*/’ . “e”, ‘eval(base64…

Без использования регулярных выражений не обнаружить

Page 12: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение обнаружения 10

Маскировка за счет имен файлов Именование вредоносных скриптов созвучно файлам cms:

LICNESE.php, odbc_connect1.php Использование скрытых файлов и каталогов

.images, .configure.php Обфускация имен файлов и директорий

Page 13: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение анализа: шифрование/обфускация

base64, rot13, zip архивация, шифрование кастомным шифровщиком – “классика жанра”

Page 14: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение анализа: шифрование/обфускация

Запись строк в виде hex/oct последовательностей

Page 15: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение анализа: шифрование/обфускация

Замусоривание кода

Page 16: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение анализа: шифрование/обфускация

Обфускация идентификаторов (имен переменных, функций, классов…)

Page 17: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение анализа: шифрование/обфускация

Шифрование кода через логические операции над строками

Page 18: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение анализа: шифрование/обфускация

Многоступенчатое шифрование кода (“матрешка”)

Page 19: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение анализа: использование В.И.Д.

Использование внешних источников данных в качестве хранилища кода БД Внешний сервер Локальный файл Memcached COOKIE, переменные окружения, параметры скрипта Мета-данные файлов изображений

Page 20: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение анализа: неявный вызов

Динамическое формирование кода и неявные вызовы выполнение кода через 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()

Page 21: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Затруднение анализа: антиреверс

Использование проверок, затрудняющих реверс-инжиниринг защита от декодирования за счет проверки на наличие в коде

скрипта функций echo, print, var_dump, print_r и аварийное завершение при обнаружении

проверка в скрипте, что код запускается в окружении сервера или конкретного сайта

авторизация по входным параметрам. Код выполняется только при определенных значениях параметров запроса

Page 22: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Инструменты, облегчающие анализ скриптов

Инструменты анализа скриптов (реверс-инжиниринг) Декодеры

http://ddecode.com/ (PHP) http://www.whitefirdesign.com/tools/unobfuscate-php-hack-

code.html (PHP)

http://www.unphp.net/ (PHP) http://iblogbox.com/devtools/js/ (JS) http://php-security.org/ evalhook (PHP)

Отладка Chrome Firebug, IE10 Debugger (JS) http://www.xdebug.org/ (PHP) NuSphere DBG http://www.php-debugger.com/dbg/ (PHP) http://www.php-debug.com/www/ (PHP)

Page 23: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Сканеры вредоносных скриптов на сервере

AI-Bolit (http://revisium.com/ai/ )Ищет по регулярным выражениям, а не хэшам. Большая база, эвристика.

ClamAv (http://www.clamav.net/lang/en/ )Самый популярный на хостингах. Ищет по хэшам.

Maldet (https://www.rfxn.com/projects/linux-malware-detect/ )Большая база хэшей.

Десктопные антивирусы (с оговорками) “Ручки” (find/grep в командной строке)

Самый доступный инструмент. Хорошо работает у админов, которые знают свои сервера и сайты.

Page 24: Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах

Конец)

Спасибо за внимание!

Докладчик: Григорий Земсков, компания “Ревизиум”[email protected]