Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Приемы, затрудняющие
обнаружение и анализ
вредоносного кода в PHP-сценариях
Григорий Земсков, компания “Ревизиум”
PHDays 2...
Интро
 Разработчики вредоносов используют шифрование,
обфускацию, различные ухищрения и возможности php
 Две цели: 1) за...
Затруднение обнаружения 1
 Отбивка кода пробельными символами (пробелы, табы,
переводы строки)
Затруднение обнаружения 2
 Сокрытие кода среди “мусора”, комментариев, внутри
бинарных файлов, картинок и после заголовка...
Затруднение обнаружения 3
 Сокрытие кода в мета-данных картинок .jpg (exif
заголовок), .png.
Затруднение обнаружения 4
 “Мимикрия” php кода (маскировка под важный код)
 Обрамление кода пугающими комментариями вида...
Затруднение обнаружения 5
 Маскировка обфусцированного кода под PGP ключ, файл
данных или лицензионный ключ
Затруднение обнаружения 6
 Код, написанный согласно coding style и/или
вставленный в середину большого скрипта, ООП код,
...
Затруднение обнаружения 7
 Фрагментация кода (склейка из большого числа
подстрок)
Затруднение обнаружения 8
 Полиморфный или обфусцированный фрагмент
Затруднение обнаружения 9
 Использование “гибкого синтаксиса” языка php для
записи конструкций
 Строки как константы:
@a...
Затруднение обнаружения 10
 Маскировка за счет имен файлов
 Именование вредоносных скриптов созвучно файлам cms:
LICNESE...
Затруднение анализа: шифрование/обфускация
 base64, rot13, zip архивация, шифрование кастомным
шифровщиком – “классика жа...
Затруднение анализа: шифрование/обфускация
 Запись строк в виде hex/oct последовательностей
Затруднение анализа: шифрование/обфускация
 Замусоривание кода
Затруднение анализа: шифрование/обфускация
 Обфускация идентификаторов (имен переменных,
функций, классов…)
Затруднение анализа: шифрование/обфускация
 Шифрование кода через логические операции над
строками
Затруднение анализа: шифрование/обфускация
 Многоступенчатое шифрование кода (“матрешка”)
Затруднение анализа: использование В.И.Д.
 Использование внешних источников данных в качестве
хранилища кода
 БД
 Внешн...
Затруднение анализа: неявный вызов
 Динамическое формирование кода и неявные вызовы
 выполнение кода через eval, assert,...
Затруднение анализа: антиреверс
 Использование проверок, затрудняющих реверс-
инжиниринг
 защита от декодирования за сче...
Инструменты, облегчающие анализ скриптов
Инструменты анализа скриптов (реверс-инжиниринг)
 Декодеры
 http://ddecode.com/...
Сканеры вредоносных скриптов на сервере
 AI-Bolit (http://revisium.com/ai/ )
Ищет по регулярным выражениям, а не хэшам. Б...
Конец)
Спасибо за внимание!
Докладчик: Григорий Земсков, компания “Ревизиум”
www.revisium.com
audit@revisium.com
Upcoming SlideShare
Loading in …5
×

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

1,802 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях Григорий Земсков, компания “Ревизиум” PHDays 2014
  2. 2. Интро  Разработчики вредоносов используют шифрование, обфускацию, различные ухищрения и возможности php  Две цели: 1) затруднить обнаружение 2) затруднить анализ  Самые “живучие” скрипты – использующие оба подхода  Методы могут использоваться разработчиками защиты лицензионного софта  Обнаружение выполняется по:  Контрольным суммам, хэшам  По сигнатурам (фикс. строки, “регулярки”)  Нечетким правилам, эвристике  10 приемов для затруднения обнаружения и 9 приемов затруднения анализа
  3. 3. Затруднение обнаружения 1  Отбивка кода пробельными символами (пробелы, табы, переводы строки)
  4. 4. Затруднение обнаружения 2  Сокрытие кода среди “мусора”, комментариев, внутри бинарных файлов, картинок и после заголовка .gif.
  5. 5. Затруднение обнаружения 3  Сокрытие кода в мета-данных картинок .jpg (exif заголовок), .png.
  6. 6. Затруднение обнаружения 4  “Мимикрия” php кода (маскировка под важный код)  Обрамление кода пугающими комментариями вида “DO NOT DELETE THIS CODE OTHERWISE SCRIPT DOESN’T OPERATE PROPERLY…”  Приклеивание к многострочным комментариям  Размещение кода между или после больших комментариев
  7. 7. Затруднение обнаружения 5  Маскировка обфусцированного кода под PGP ключ, файл данных или лицензионный ключ
  8. 8. Затруднение обнаружения 6  Код, написанный согласно coding style и/или вставленный в середину большого скрипта, ООП код, вставка внутрь функций или классов
  9. 9. Затруднение обнаружения 7  Фрагментация кода (склейка из большого числа подстрок)
  10. 10. Затруднение обнаружения 8  Полиморфный или обфусцированный фрагмент
  11. 11. Затруднение обнаружения 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…  Без использования регулярных выражений не обнаружить
  12. 12. Затруднение обнаружения 10  Маскировка за счет имен файлов  Именование вредоносных скриптов созвучно файлам cms: LICNESE.php, odbc_connect1.php  Использование скрытых файлов и каталогов .images, .configure.php  Обфускация имен файлов и директорий
  13. 13. Затруднение анализа: шифрование/обфускация  base64, rot13, zip архивация, шифрование кастомным шифровщиком – “классика жанра”
  14. 14. Затруднение анализа: шифрование/обфускация  Запись строк в виде hex/oct последовательностей
  15. 15. Затруднение анализа: шифрование/обфускация  Замусоривание кода
  16. 16. Затруднение анализа: шифрование/обфускация  Обфускация идентификаторов (имен переменных, функций, классов…)
  17. 17. Затруднение анализа: шифрование/обфускация  Шифрование кода через логические операции над строками
  18. 18. Затруднение анализа: шифрование/обфускация  Многоступенчатое шифрование кода (“матрешка”)
  19. 19. Затруднение анализа: использование В.И.Д.  Использование внешних источников данных в качестве хранилища кода  БД  Внешний сервер  Локальный файл  Memcached  COOKIE, переменные окружения, параметры скрипта  Мета-данные файлов изображений
  20. 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. 21. Затруднение анализа: антиреверс  Использование проверок, затрудняющих реверс- инжиниринг  защита от декодирования за счет проверки на наличие в коде скрипта функций echo, print, var_dump, print_r и аварийное завершение при обнаружении  проверка в скрипте, что код запускается в окружении сервера или конкретного сайта  авторизация по входным параметрам. Код выполняется только при определенных значениях параметров запроса
  22. 22. Инструменты, облегчающие анализ скриптов Инструменты анализа скриптов (реверс-инжиниринг)  Декодеры  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)
  23. 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 в командной строке) Самый доступный инструмент. Хорошо работает у админов, которые знают свои сервера и сайты.
  24. 24. Конец) Спасибо за внимание! Докладчик: Григорий Земсков, компания “Ревизиум” www.revisium.com audit@revisium.com

×