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-бэкдоров

148 views

Published on

Докладчик расскажет о разработанном и реализованном алгоритме бессигнатурного обнаружения вредоносных фрагментов PHP-кода.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Бессигнатурное обнаружение PHP-бэкдоров

  1. 1. // 2017
 Григорий Земсков, «Ревизиум» Бессигнатурное обнаружение PHP- бэкдоров
  2. 2. Whoami — Григорий Земсков,




 
директор компании «Ревизиум» — 7 лет лечим сайты и защищаем от взлома — Более 10 000 вылеченных сайтов

 — Разработчик сканеров
 
 Сканер AI-BOLIT Веб-сканер ReScan.Pro 2
  3. 3. Экскурс в историю
  4. 4. Работа современных сканеров — База хэшей
 «0155d73447babc77e3e43b27ac4f191b:154259:{MD5
 php.cmdshell.fx29.11985» — Поиск фиксированных фрагментов строк
 «$c99sh_updatefurl» — Поиск по гибким паттернам
 «eval<s>(<s>get_option<s>(» — Использование регулярных выражений, Yara
 «<?php.+?$qV="stop_.+?]);}?>s*» 4
  5. 5. Пример 5 Простейший бэкдор - не детектится сканерами
  6. 6. Реальные инъекции бэкдоров 6
  7. 7. PHP бэкдоры в 2017м 7 — однострочные инжекты в начало PHP файла или после стартовых комментариев — обфускация переменных, разбавление пробелами и комментариями — использование $_GET/$_POST/$_COOKIE/$_REQUEST/$_SERVER в качестве входных параметров — косвенные вызовы, использование функций с callable аргументами — на зараженном сайте обычно один-два типа бэкдора + их вариации (мутации)
  8. 8. Варианты мутаций 8 Использовать регулярное выражение для детектирования - плохая идея
  9. 9. Придумываем новый алгоритм
  10. 10. Задача алгоритма — Статический анализ кода — Определять обфусцированные фрагменты — Обнаруживать инъекции в PHP файлах — Учитывать фрагментированные строки — Обрабатывать косвенные вызовы вида $fn[$par1][$par2]($par3,…); — Выдавать обнаруженные вредоносные сниппеты — Минимизировать ложные срабатывания — Работать быстро на большом наборе файлов 10
  11. 11. Гипотеза — Бэкдоры часто принимают на вход параметры из суперглобальных массивов $_GET, $_POST, $_SERVER, $_REQUEST, $_FILES, $_COOKIE — и используют их в следущих случаях: — как аргументы косвенных вызовов ф-й вида $x[3]($y(…)) — в функциях с callable аргументами (call_user_func, array_diff,…) и eval/assert — в exec-функциях (popen, shell_exec, system, exec, …) — как имя файла в файловых операциях (fopen, unlink,…) — bitwise операции (строковые операции вида $a ^ $b[3] & $c) — Эти случаи не типичные для легитимных скриптов 11
  12. 12. Проблема — Бэкдоры получают пейлоуды из $_GET, $_POST, $_SERVER, $_REQUEST, $_FILES, $_COOKIE, но используют их неявно и по цепочке присваиваний. — Аналогичная ситуация с вызовом функций
 
 
 12
  13. 13. Краткий алгоритм 1. Читаем очередной PHP файл, парсим токенайзером • Находим вызовы eval, assert, call_user_func_array, array_*, *sort (и другие, в которых могут использоваться callable параметры), косвенные вызовы, файловые операции fopen, file_put_contents,…, в которых используются переменные • Собираем список переменных, в которые могли попасть значения глобальных $_GET/$_POST/$_SERVER/$_REQUEST/$_COOKIE/$_FILES и bitwise операций => Бинго. • Если функция вызывается неявно через косвенное обращение к переменным => Бинго. 2. Отфильтровываем легитимные файлы по whitelist базе известных скриптов (sha1 от нормализованного файла php) 3. Формируем сниппеты и выдаем результат 13
  14. 14. «Как нарисовать сову» 14
  15. 15. Пояснения 15
  16. 16. Тестируем в боевых условиях №1 16
  17. 17. Тестируем в боевых условиях №2 17
  18. 18. Результат проверки 18
  19. 19. Результат проверки 19 Проверяем Joomla: 
 6453 файла / 10 сек 0 ложных срабатываний
  20. 20. TODO 20 — Анализ больших PHP файлов (по частям) — Уменьшение числа ложных срабатываний
  21. 21. Спасибо! Вопросы? Григорий Земсков
 Компания «Ревизиум», 
 
 audit@revisium.com


×