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

  • 148 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
148
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
9
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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