SlideShare une entreprise Scribd logo
1  sur  24
Приемы, затрудняющие
обнаружение и анализ
вредоносного кода в PHP-сценариях
Григорий Земсков, компания “Ревизиум”
PHDays 2014
Интро
 Разработчики вредоносов используют шифрование,
обфускацию, различные ухищрения и возможности php
 Две цели: 1) затруднить обнаружение 2) затруднить
анализ
 Самые “живучие” скрипты – использующие оба подхода
 Методы могут использоваться разработчиками защиты
лицензионного софта
 Обнаружение выполняется по:
 Контрольным суммам, хэшам
 По сигнатурам (фикс. строки, “регулярки”)
 Нечетким правилам, эвристике
 10 приемов для затруднения обнаружения и 9 приемов
затруднения анализа
Затруднение обнаружения 1
 Отбивка кода пробельными символами (пробелы, табы,
переводы строки)
Затруднение обнаружения 2
 Сокрытие кода среди “мусора”, комментариев, внутри
бинарных файлов, картинок и после заголовка .gif.
Затруднение обнаружения 3
 Сокрытие кода в мета-данных картинок .jpg (exif
заголовок), .png.
Затруднение обнаружения 4
 “Мимикрия” php кода (маскировка под важный код)
 Обрамление кода пугающими комментариями вида “DO NOT
DELETE THIS CODE OTHERWISE SCRIPT DOESN’T OPERATE
PROPERLY…”
 Приклеивание к многострочным комментариям
 Размещение кода между или после больших комментариев
Затруднение обнаружения 5
 Маскировка обфусцированного кода под PGP ключ, файл
данных или лицензионный ключ
Затруднение обнаружения 6
 Код, написанный согласно coding style и/или
вставленный в середину большого скрипта, ООП код,
вставка внутрь функций или классов
Затруднение обнаружения 7
 Фрагментация кода (склейка из большого числа
подстрок)
Затруднение обнаружения 8
 Полиморфный или обфусцированный фрагмент
Затруднение обнаружения 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…
 Без использования регулярных выражений не
обнаружить
Затруднение обнаружения 10
 Маскировка за счет имен файлов
 Именование вредоносных скриптов созвучно файлам cms:
LICNESE.php, odbc_connect1.php
 Использование скрытых файлов и каталогов
.images, .configure.php
 Обфускация имен файлов и директорий
Затруднение анализа: шифрование/обфускация
 base64, rot13, zip архивация, шифрование кастомным
шифровщиком – “классика жанра”
Затруднение анализа: шифрование/обфускация
 Запись строк в виде hex/oct последовательностей
Затруднение анализа: шифрование/обфускация
 Замусоривание кода
Затруднение анализа: шифрование/обфускация
 Обфускация идентификаторов (имен переменных,
функций, классов…)
Затруднение анализа: шифрование/обфускация
 Шифрование кода через логические операции над
строками
Затруднение анализа: шифрование/обфускация
 Многоступенчатое шифрование кода (“матрешка”)
Затруднение анализа: использование В.И.Д.
 Использование внешних источников данных в качестве
хранилища кода
 БД
 Внешний сервер
 Локальный файл
 Memcached
 COOKIE, переменные окружения, параметры скрипта
 Мета-данные файлов изображений
Затруднение анализа: неявный вызов
 Динамическое формирование кода и неявные вызовы
 выполнение кода через 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()
Затруднение анализа: антиреверс
 Использование проверок, затрудняющих реверс-
инжиниринг
 защита от декодирования за счет проверки на наличие в коде
скрипта функций echo, print, var_dump, print_r и аварийное
завершение при обнаружении
 проверка в скрипте, что код запускается в окружении сервера или
конкретного сайта
 авторизация по входным параметрам. Код выполняется только
при определенных значениях параметров запроса
Инструменты, облегчающие анализ скриптов
Инструменты анализа скриптов (реверс-инжиниринг)
 Декодеры
 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)
Сканеры вредоносных скриптов на сервере
 AI-Bolit (http://revisium.com/ai/ )
Ищет по регулярным выражениям, а не хэшам. Большая
база, эвристика.
 ClamAv (http://www.clamav.net/lang/en/ )
Самый популярный на хостингах. Ищет по хэшам.
 Maldet (https://www.rfxn.com/projects/linux-malware-
detect/ )
Большая база хэшей.
 Десктопные антивирусы (с оговорками)
 “Ручки” (find/grep в командной строке)
Самый доступный инструмент. Хорошо работает у
админов, которые знают свои сервера и сайты.
Конец)
Спасибо за внимание!
Докладчик: Григорий Земсков, компания “Ревизиум”
www.revisium.com
audit@revisium.com

Contenu connexe

Tendances

Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2Technopark
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9Technopark
 
Operating Systems Hardening
Operating Systems HardeningOperating Systems Hardening
Operating Systems HardeningVasily Sartakov
 
Спецкурс 2014, занятие 4. Конфиги, сборка, автотесты
Спецкурс 2014, занятие 4. Конфиги, сборка, автотестыСпецкурс 2014, занятие 4. Конфиги, сборка, автотесты
Спецкурс 2014, занятие 4. Конфиги, сборка, автотесты7bits
 
Lviv MDDay 2014. Андріан Буданцов “Внутрішній світ iOS додатків”
Lviv MDDay 2014. Андріан Буданцов “Внутрішній світ iOS додатків”Lviv MDDay 2014. Андріан Буданцов “Внутрішній світ iOS додатків”
Lviv MDDay 2014. Андріан Буданцов “Внутрішній світ iOS додатків”Lviv Startup Club
 
Дмитрий Щадей "Зачем и как мы используем jsLint"
Дмитрий Щадей "Зачем и как мы используем jsLint"Дмитрий Щадей "Зачем и как мы используем jsLint"
Дмитрий Щадей "Зачем и как мы используем jsLint"Yandex
 
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотестыСтажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты7bits
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 47bits
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5Technopark
 
Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3Technopark
 
Введение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
Введение в реверс-инжиниринг вредоносного ПО - Сергей ХарюкВведение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
Введение в реверс-инжиниринг вредоносного ПО - Сергей ХарюкHackIT Ukraine
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1Technopark
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NETPositive Hack Days
 
"Внутренности" CPython, часть II
"Внутренности" CPython, часть II"Внутренности" CPython, часть II
"Внутренности" CPython, часть IIPython Meetup
 

Tendances (20)

бегун
бегунбегун
бегун
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9
 
бегун
бегунбегун
бегун
 
About Python
About PythonAbout Python
About Python
 
CVEhound
CVEhoundCVEhound
CVEhound
 
Operating Systems Hardening
Operating Systems HardeningOperating Systems Hardening
Operating Systems Hardening
 
Спецкурс 2014, занятие 4. Конфиги, сборка, автотесты
Спецкурс 2014, занятие 4. Конфиги, сборка, автотестыСпецкурс 2014, занятие 4. Конфиги, сборка, автотесты
Спецкурс 2014, занятие 4. Конфиги, сборка, автотесты
 
Lviv MDDay 2014. Андріан Буданцов “Внутрішній світ iOS додатків”
Lviv MDDay 2014. Андріан Буданцов “Внутрішній світ iOS додатків”Lviv MDDay 2014. Андріан Буданцов “Внутрішній світ iOS додатків”
Lviv MDDay 2014. Андріан Буданцов “Внутрішній світ iOS додатків”
 
Дмитрий Щадей "Зачем и как мы используем jsLint"
Дмитрий Щадей "Зачем и как мы используем jsLint"Дмитрий Щадей "Зачем и как мы используем jsLint"
Дмитрий Щадей "Зачем и как мы используем jsLint"
 
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотестыСтажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5
 
Gen server
Gen serverGen server
Gen server
 
Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3
 
Введение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
Введение в реверс-инжиниринг вредоносного ПО - Сергей ХарюкВведение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
Введение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
 
file handling in c
file handling in cfile handling in c
file handling in c
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
"Внутренности" CPython, часть II
"Внутренности" CPython, часть II"Внутренности" CPython, часть II
"Внутренности" CPython, часть II
 

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

Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Vadim Kruchkov
 
Practical Language for Extracting Data from Source Codes and Preparing Them f...
Practical Language for Extracting Data from Source Codes and Preparing Them f...Practical Language for Extracting Data from Source Codes and Preparing Them f...
Practical Language for Extracting Data from Source Codes and Preparing Them f...Denis Efremov
 
Методы защиты Java-приложений и их обход
Методы защиты Java-приложений и их обходМетоды защиты Java-приложений и их обход
Методы защиты Java-приложений и их обходPositive Hack Days
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волковkarina krew
 
Универсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPУниверсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPИван Кочуркин
 
Waf.js: как защищать веб-приложения с использованием JavaScript
Waf.js: как защищать веб-приложения с использованием JavaScriptWaf.js: как защищать веб-приложения с использованием JavaScript
Waf.js: как защищать веб-приложения с использованием JavaScriptPositive Hack Days
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Andrey Karpov
 
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Vladimir Kochetkov
 
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Ontico
 
Автоматизация построения правил для Approof
Автоматизация построения правил для ApproofАвтоматизация построения правил для Approof
Автоматизация построения правил для ApproofPositive Development User Group
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersPositive Hack Days
 
#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)e-Legion
 
ERP Глазами Злоумышленника
ERP Глазами ЗлоумышленникаERP Глазами Злоумышленника
ERP Глазами ЗлоумышленникаPositive Hack Days
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаcorehard_by
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаAndrey Karpov
 

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

Enter: legacy code
Enter: legacy codeEnter: legacy code
Enter: legacy code
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
 
Practical Language for Extracting Data from Source Codes and Preparing Them f...
Practical Language for Extracting Data from Source Codes and Preparing Them f...Practical Language for Extracting Data from Source Codes and Preparing Them f...
Practical Language for Extracting Data from Source Codes and Preparing Them f...
 
Методы защиты Java-приложений и их обход
Методы защиты Java-приложений и их обходМетоды защиты Java-приложений и их обход
Методы защиты Java-приложений и их обход
 
Drupal Do
Drupal DoDrupal Do
Drupal Do
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волков
 
Универсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPУниверсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHP
 
Waf.js: как защищать веб-приложения с использованием JavaScript
Waf.js: как защищать веб-приложения с использованием JavaScriptWaf.js: как защищать веб-приложения с использованием JavaScript
Waf.js: как защищать веб-приложения с использованием JavaScript
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
 
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!
 
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
 
Автоматизация построения правил для Approof
Автоматизация построения правил для ApproofАвтоматизация построения правил для Approof
Автоматизация построения правил для Approof
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappers
 
#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)
 
ERP Глазами Злоумышленника
ERP Глазами ЗлоумышленникаERP Глазами Злоумышленника
ERP Глазами Злоумышленника
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Bytecode
BytecodeBytecode
Bytecode
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 

Plus de Positive Hack Days

Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesPositive Hack Days
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerPositive Hack Days
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesPositive Hack Days
 
Аналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + QlikАналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + QlikPositive Hack Days
 
Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQubePositive Hack Days
 
Развитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityРазвитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityPositive Hack Days
 
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...Positive Hack Days
 
Автоматизация построения правил для Approof
Автоматизация построения правил для ApproofАвтоматизация построения правил для Approof
Автоматизация построения правил для ApproofPositive Hack Days
 
Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»Positive Hack Days
 
Формальные методы защиты приложений
Формальные методы защиты приложенийФормальные методы защиты приложений
Формальные методы защиты приложенийPositive Hack Days
 
Эвристические методы защиты приложений
Эвристические методы защиты приложенийЭвристические методы защиты приложений
Эвристические методы защиты приложенийPositive Hack Days
 
Теоретические основы Application Security
Теоретические основы Application SecurityТеоретические основы Application Security
Теоретические основы Application SecurityPositive Hack Days
 
От экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летОт экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летPositive Hack Days
 
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиУязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиPositive Hack Days
 
Требования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПОТребования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПОPositive Hack Days
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке СиPositive Hack Days
 
Механизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CoreМеханизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CorePositive Hack Days
 
SOC для КИИ: израильский опыт
SOC для КИИ: израильский опытSOC для КИИ: израильский опыт
SOC для КИИ: израильский опытPositive Hack Days
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterPositive Hack Days
 
Credential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атакиCredential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атакиPositive Hack Days
 

Plus de Positive Hack Days (20)

Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
 
Аналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + QlikАналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + Qlik
 
Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQube
 
Развитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityРазвитие сообщества Open DevOps Community
Развитие сообщества Open DevOps Community
 
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
 
Автоматизация построения правил для Approof
Автоматизация построения правил для ApproofАвтоматизация построения правил для Approof
Автоматизация построения правил для Approof
 
Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»
 
Формальные методы защиты приложений
Формальные методы защиты приложенийФормальные методы защиты приложений
Формальные методы защиты приложений
 
Эвристические методы защиты приложений
Эвристические методы защиты приложенийЭвристические методы защиты приложений
Эвристические методы защиты приложений
 
Теоретические основы Application Security
Теоретические основы Application SecurityТеоретические основы Application Security
Теоретические основы Application Security
 
От экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летОт экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 лет
 
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиУязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на грабли
 
Требования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПОТребования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПО
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Механизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CoreМеханизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET Core
 
SOC для КИИ: израильский опыт
SOC для КИИ: израильский опытSOC для КИИ: израильский опыт
SOC для КИИ: израильский опыт
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services Center
 
Credential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атакиCredential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атаки
 

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

  • 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 последовательностей
  • 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