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

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

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

Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NETPositive Hack Days
 
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
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Vadim Kruchkov
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волковkarina krew
 
Универсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPУниверсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPИван Кочуркин
 
Методы защиты Java-приложений и их обход
Методы защиты Java-приложений и их обходМетоды защиты Java-приложений и их обход
Методы защиты Java-приложений и их обходPositive Hack Days
 
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
 
Автоматизация построения правил для Approof
Автоматизация построения правил для ApproofАвтоматизация построения правил для Approof
Автоматизация построения правил для ApproofPositive Development User Group
 
#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)e-Legion
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersPositive Hack Days
 
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Ontico
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
ERP Глазами Злоумышленника
ERP Глазами ЗлоумышленникаERP Глазами Злоумышленника
ERP Глазами ЗлоумышленникаPositive Hack Days
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаAndrey Karpov
 

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

Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
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...
 
Enter: legacy code
Enter: legacy codeEnter: legacy code
Enter: legacy code
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волков
 
Универсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPУниверсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHP
 
Drupal Do
Drupal DoDrupal Do
Drupal Do
 
Методы защиты Java-приложений и их обход
Методы защиты Java-приложений и их обходМетоды защиты Java-приложений и их обход
Методы защиты Java-приложений и их обход
 
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? Сложно, но можно!
 
Автоматизация построения правил для Approof
Автоматизация построения правил для ApproofАвтоматизация построения правил для Approof
Автоматизация построения правил для Approof
 
#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappers
 
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Bytecode
BytecodeBytecode
Bytecode
 
ERP Глазами Злоумышленника
ERP Глазами ЗлоумышленникаERP Глазами Злоумышленника
ERP Глазами Злоумышленника
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 

Plus de revisium

Почему хакеры выбирают WordPress. WordCamp 2017, Moscow.
Почему хакеры выбирают WordPress. WordCamp 2017, Moscow.Почему хакеры выбирают WordPress. WordCamp 2017, Moscow.
Почему хакеры выбирают WordPress. WordCamp 2017, Moscow.revisium
 
Безопасность Joomla: мифы и реальность
Безопасность Joomla: мифы и реальностьБезопасность Joomla: мифы и реальность
Безопасность Joomla: мифы и реальностьrevisium
 
Выступление Ревизиум на ХостОбзор 2017
Выступление Ревизиум на ХостОбзор 2017Выступление Ревизиум на ХостОбзор 2017
Выступление Ревизиум на ХостОбзор 2017revisium
 
"На Стачку" - Взлом сайта: 5 стадий принятия неизбежного
"На Стачку" - Взлом сайта: 5 стадий принятия неизбежного"На Стачку" - Взлом сайта: 5 стадий принятия неизбежного
"На Стачку" - Взлом сайта: 5 стадий принятия неизбежногоrevisium
 
Как обеспечить безопасность клиентских сайтов
Как обеспечить безопасность клиентских сайтовКак обеспечить безопасность клиентских сайтов
Как обеспечить безопасность клиентских сайтовrevisium
 
Безопасность Joomla: теория и практика
Безопасность Joomla: теория и практикаБезопасность Joomla: теория и практика
Безопасность Joomla: теория и практикаrevisium
 
Разумная безопасность сайта
Разумная безопасность сайтаРазумная безопасность сайта
Разумная безопасность сайтаrevisium
 
Взломать Нельзя Защитить: как взламывают сайты и как их эффективно защищать
Взломать Нельзя Защитить: как взламывают сайты и как их эффективно защищатьВзломать Нельзя Защитить: как взламывают сайты и как их эффективно защищать
Взломать Нельзя Защитить: как взламывают сайты и как их эффективно защищатьrevisium
 
Современный агрессивный интернет
Современный агрессивный интернетСовременный агрессивный интернет
Современный агрессивный интернетrevisium
 
Почему взламывают даже защищенные CMS на безопасном хостинге
Почему взламывают даже защищенные CMS на безопасном хостингеПочему взламывают даже защищенные CMS на безопасном хостинге
Почему взламывают даже защищенные CMS на безопасном хостингеrevisium
 
Как не дать хакеру заработать на вашем сайте. Григорий Земсков, Ревизиум, RIW...
Как не дать хакеру заработать на вашем сайте. Григорий Земсков, Ревизиум, RIW...Как не дать хакеру заработать на вашем сайте. Григорий Земсков, Ревизиум, RIW...
Как не дать хакеру заработать на вашем сайте. Григорий Земсков, Ревизиум, RIW...revisium
 
Яндекс.Вебмастерская №3: как найти вирусы и вредоносный код на сайте
Яндекс.Вебмастерская №3: как найти вирусы и вредоносный код на сайтеЯндекс.Вебмастерская №3: как найти вирусы и вредоносный код на сайте
Яндекс.Вебмастерская №3: как найти вирусы и вредоносный код на сайтеrevisium
 
Как безопасно работать с файлами по ftp
Как безопасно работать с файлами по ftpКак безопасно работать с файлами по ftp
Как безопасно работать с файлами по ftprevisium
 
Лечение мобильных, поисковых редиректов и дорвеев на сайте
Лечение мобильных, поисковых редиректов и дорвеев на сайте Лечение мобильных, поисковых редиректов и дорвеев на сайте
Лечение мобильных, поисковых редиректов и дорвеев на сайте revisium
 
Seopult мастеркласс 2 - мобильный редирект
Seopult   мастеркласс 2 - мобильный редиректSeopult   мастеркласс 2 - мобильный редирект
Seopult мастеркласс 2 - мобильный редиректrevisium
 
Seopult мастеркласс 1 - восстановление сайта после взлома
Seopult   мастеркласс 1 - восстановление сайта после взломаSeopult   мастеркласс 1 - восстановление сайта после взлома
Seopult мастеркласс 1 - восстановление сайта после взломаrevisium
 

Plus de revisium (16)

Почему хакеры выбирают WordPress. WordCamp 2017, Moscow.
Почему хакеры выбирают WordPress. WordCamp 2017, Moscow.Почему хакеры выбирают WordPress. WordCamp 2017, Moscow.
Почему хакеры выбирают WordPress. WordCamp 2017, Moscow.
 
Безопасность Joomla: мифы и реальность
Безопасность Joomla: мифы и реальностьБезопасность Joomla: мифы и реальность
Безопасность Joomla: мифы и реальность
 
Выступление Ревизиум на ХостОбзор 2017
Выступление Ревизиум на ХостОбзор 2017Выступление Ревизиум на ХостОбзор 2017
Выступление Ревизиум на ХостОбзор 2017
 
"На Стачку" - Взлом сайта: 5 стадий принятия неизбежного
"На Стачку" - Взлом сайта: 5 стадий принятия неизбежного"На Стачку" - Взлом сайта: 5 стадий принятия неизбежного
"На Стачку" - Взлом сайта: 5 стадий принятия неизбежного
 
Как обеспечить безопасность клиентских сайтов
Как обеспечить безопасность клиентских сайтовКак обеспечить безопасность клиентских сайтов
Как обеспечить безопасность клиентских сайтов
 
Безопасность Joomla: теория и практика
Безопасность Joomla: теория и практикаБезопасность Joomla: теория и практика
Безопасность Joomla: теория и практика
 
Разумная безопасность сайта
Разумная безопасность сайтаРазумная безопасность сайта
Разумная безопасность сайта
 
Взломать Нельзя Защитить: как взламывают сайты и как их эффективно защищать
Взломать Нельзя Защитить: как взламывают сайты и как их эффективно защищатьВзломать Нельзя Защитить: как взламывают сайты и как их эффективно защищать
Взломать Нельзя Защитить: как взламывают сайты и как их эффективно защищать
 
Современный агрессивный интернет
Современный агрессивный интернетСовременный агрессивный интернет
Современный агрессивный интернет
 
Почему взламывают даже защищенные CMS на безопасном хостинге
Почему взламывают даже защищенные CMS на безопасном хостингеПочему взламывают даже защищенные CMS на безопасном хостинге
Почему взламывают даже защищенные CMS на безопасном хостинге
 
Как не дать хакеру заработать на вашем сайте. Григорий Земсков, Ревизиум, RIW...
Как не дать хакеру заработать на вашем сайте. Григорий Земсков, Ревизиум, RIW...Как не дать хакеру заработать на вашем сайте. Григорий Земсков, Ревизиум, RIW...
Как не дать хакеру заработать на вашем сайте. Григорий Земсков, Ревизиум, RIW...
 
Яндекс.Вебмастерская №3: как найти вирусы и вредоносный код на сайте
Яндекс.Вебмастерская №3: как найти вирусы и вредоносный код на сайтеЯндекс.Вебмастерская №3: как найти вирусы и вредоносный код на сайте
Яндекс.Вебмастерская №3: как найти вирусы и вредоносный код на сайте
 
Как безопасно работать с файлами по ftp
Как безопасно работать с файлами по ftpКак безопасно работать с файлами по ftp
Как безопасно работать с файлами по ftp
 
Лечение мобильных, поисковых редиректов и дорвеев на сайте
Лечение мобильных, поисковых редиректов и дорвеев на сайте Лечение мобильных, поисковых редиректов и дорвеев на сайте
Лечение мобильных, поисковых редиректов и дорвеев на сайте
 
Seopult мастеркласс 2 - мобильный редирект
Seopult   мастеркласс 2 - мобильный редиректSeopult   мастеркласс 2 - мобильный редирект
Seopult мастеркласс 2 - мобильный редирект
 
Seopult мастеркласс 1 - восстановление сайта после взлома
Seopult   мастеркласс 1 - восстановление сайта после взломаSeopult   мастеркласс 1 - восстановление сайта после взлома
Seopult мастеркласс 1 - восстановление сайта после взлома
 

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