0
Приемы, затрудняющие
обнаружение и анализ
вредоносного кода в 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-сценариях

452

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
452
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
17
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Приемы, затрудняющие обнаружение и анализ вредоносного кода в 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×