SlideShare una empresa de Scribd logo
1 de 30
Ловим шеллкоды под ARM
Докладчики :
Гайворонская Светлана @SadieSv
Петров Иван Сергеевич @_IvanPetrov_
Актуальность
• Значительный рост устройств на базе процессоров ARM:
количество устройств на базе ARM превышает
количество PC в несколько раз.
• Большая установочная база уязвимых программ и
преемственность кода
• Ошибки работы с памятью все еще актуальны
• Уязвимости в программном обеспечении этих устройств
могут принести огромный ущерб, как пользователям, так
и производителям
@SadieSv @_IvanPetrov_
Решаема ли эта задача?
Activator
• NOP
• GetPC
Decryptor
Payload
Return address zone
• Ограничения по структуре
• Ограничения по размеру
@SadieSv @_IvanPetrov_
Может все не так плохо?
• Stack canaries: вычисление псевдо-радномного
значения и сохранения его на стек;
• SafeSEH: вместо защиты стека, используются
техники защиты обработчиков исключений;
• DEP: стек или часть стека становятся
неисполнимыми;
• ASLR: рандомизация начала кода, стека, кучи в
адресном пространстве исполнимого
процесса.
BYPASSED
@SadieSv @_IvanPetrov_
Так что же с ARM-ом?
• Шеллкоды уже есть
• Методов обнаружения
«поумнее» сигнатур…
Анализ применимости
существующих методов
обнаружения шеллкодов
Для анализа применимости
существующих методов
детектирования шеллкодов х86
к платформе ARM нужно выделить
основные отличия этих архитектур.
@SadieSv @_IvanPetrov_
Основные отличия архитектур
ARM от x86:
• Фиксированный размер команд;
• Наличие 2-х режимов работы процессора (32bit и 16bit) и
возможность динамического переключения между ними;
• Возможность условного выполнения инструкций
(в зависимости от значения регистра флагов);
• Возможность прямого обращения к счетчику инструкций;
• load-store архитектура (мы не можем из арифметических
инструкций обращаться напрямую в память);
• При вызове функций аргументы помещаются в регистры.
@SadieSv @_IvanPetrov_
i f ( e r r != 0)
p r i n t f ( " Er r o r c o d e = %i  n " , e r r ) ;
e l s e
p r i n t f ( "OK!  n " ) ;
CMP r1 , #0
BEQ . L4
LDR r0 , < string_1_address >
BL printf
B . L8
. L4 :
LDR r0 , < string_2_address >
BL printf
. L8 :
CMP r1 , #0
LDRNE r0 , < string_1_address >
LDREQ r0 , < string_2_address >
BL printf
Без условного
выполнения
С условным
выполнением
Условное выполнение
@SadieSv @_IvanPetrov_
Thumb режим процессора
chmod("/etc/passwd", 0777) - 31 byte
"x78x46" // mov r0, pc
"x10x30" // adds r0, #16
"xffx21" // movs r1, #255 ; 0xff
"xffx31" // adds r1, #255 ; 0xff
"x01x31" // adds r1, #1
"x0fx37" // adds r7, #15
"x01xdf" // svc 1 ; chmod(..)
"x40x40" // eors r0, r0
"x01x27" // movs r7, #1
"x01xdf" // svc 1 ; exit(0)
"x2fx65x74x63"
"x2fx70x61x73"
"x73x77"
"x64”
chmod("/etc/passwd", 0777) - 51 byte
"x0fx00xa0xe1" // mov r0, pc
"x20x00x90xe2" // adds r0, r0, #32
"xffx10xb0xe3" // movs r1, #255 ; 0xff
"xffx10x91xe2" // adds r1, r1, #255; 0xff
"x01x10x91xe2" // adds r1, r1, #1
"x0fx70x97xe2" // adds r7, r7, #15
"x01x00x00xef" // svc 1
"x00x00x30xe0" // eors r0, r0, r0
"x01x70xb0xe3" // movs r7, #1
"x01x00x00xef" // svc 1
"x2fx65x74x63"
"x2fx70x61x73"
"x73x77"
"x64"
Thumb режим ARM режим
@SadieSv @_IvanPetrov_
Результаты анализа
Статический
анализ
Динамический
анализ
@SadieSv @_IvanPetrov_
Причины затруднения анализа
Появление в платформе ARM новых
возможностей обфускации
программ благодаря:
1. Условному выполнению инструкций;
2. Дополнительному режиму
процессора.
@SadieSv @_IvanPetrov_
Статические признаки
• Корректное дизассемблирование данных в цепочку, содержащую
не менее K инструкций;
• Наличие команды смены режима процессора (BX Rm) на пересечении
цепочек команд из разных режимов процессора;
• Наличие Get-UsePC кода;
• Число паттернов ( инициализация аргументов, вызов функции )
превышает предопределенное пороговое значение;
• Системному вызову предшествует инициализация аргументов вызова;
• Наличие цикла записи/загрузки из памяти;
• Адрес возврата находится в определенном диапазоне значений;
• Последняя инструкция в цепочке заканчивается командой перехода
(BL, BLX), либо системным вызовом(svc);
• Операнды самомодифицирующегося кода и кода с косвенными
переходами должны быть инициализированы.
Корректное дизассемблирование данных в цепочку,
содержащую не менее K инструкций
Не шеллкод
Не шеллкод
Не шеллкод
Не шеллкод
Шеллкод!
@SadieSv @_IvanPetrov_
Наличие команды смены режима процессора (BX Rm) на
пересечении цепочек команд из разных режимов
процессора
Переключение режима
Шеллкод в режиме
Thumb
Данные для шеллкода
Регистр PCПереход с переключением Код режима
Thumb
@SadieSv @_IvanPetrov_
Наличие Get-UsePC кода
Регистр PC
Зашифрованный шеллкод
Получение PC
Использование PC
Получение PC в регистр LR (r14)
Использование PC
@SadieSv @_IvanPetrov_
Инициализация аргументов вызовов функций и
системных вызовов
Аргументы вызова
Номер вызова
Системный вызов
_socket #281
_connect #283
@SadieSv @_IvanPetrov_
Наличие цикла записи/загрузки из памяти
Зашифрованный шеллкод
Чтение из памяти
Загрузка в память
Счетчик цикла
Адрес зашифрованной
полезной нагрузки
Основной цикл
@SadieSv @_IvanPetrov_
Адрес возврата находится в определенном диапазоне
значений
Адрес
возврата
Уязвимый
буфер
Стек
Полезная
нагрузка
Шеллкод
0xbeffedbc
0xbeffedbc
0xbeffedbc
0xbeffedbc
0xbeffedbc
0xbeffedbc
Зона адресов
возврата
@SadieSv @_IvanPetrov_
Динамические признаки
• Количество чтений полезной нагрузки превышает
определенный порог;
• Количество уникальных записей в память
превышает определенный порог;
• Поток управления хотя бы один раз передается из
адресного пространства входного буфера на адрес,
по которому ранее осуществлялась запись;
• Количество исполненных wx-инструкций
превышает определенный порог;
• В зависимости от определенных значений флагов
выполняется набор инструкций, удовлетворяющих
вредоносной сигнатуре.
@SadieSv @_IvanPetrov_
Запись и чтение из памяти
Декриптор Зашифрованная полезная нагрузка
N Уникальных чтений и записей
@SadieSv @_IvanPetrov_
Передача потока управления
Декриптор Расшифрованная полезная нагрузка
Поток управления
@SadieSv @_IvanPetrov_
Зависимость сигнатуры от флагов
Z = 0 & C = 0 Z = 1 & C = 0
ADDNES r0, r1 ADDNES r0, r1
Блок AL
(любой флаг)
Блок AL
(любой флаг)
Блок CS
( С == 1)
Z = 0
С = 1
Блок CS
( С == 1)
Блок EQ
( Z == 0)
Блок EQ
( Z == 0)
ADDCCS r3, r4 ADDCCS r3, r4
Z = 1
С = 0
Если был
выполнен блок
EQ, то Z = 1,
иначе Z = 0
Блок EQ
( Z == 0)
Блок EQ
( Z == 0)
@SadieSv @_IvanPetrov_
Предложенное решение
Реализовывать детекторы
выделенных признаков, как
расширение к существующей
библиотеке детектирования
шеллкодов - Demorpheus
@SadieSv @_IvanPetrov_
Demorpheus - идея
@SadieSv @_IvanPetrov_
Гибридный классификатор
Дизассемблирование
Построение CFG
Построение IFG
…
Дизассемблиро
ванный поток
CFG
IFG
…
Детектор
признака 1
Детектор
признака К
…
@SadieSv @_IvanPetrov_
Апробация
• Шеллкодов;
• Легитимных исполняемых файлов;
• Произвольных данных;
• Мультимедиа данных.
Апробация детекторов проводится на тестовой
выборке, состоящей из:
@SadieSv @_IvanPetrov_
Результат исследований
• Выделены признаки шеллкодов для
платформы ARM
• Реализованы детекторы, использующие
признаки шеллкодов ARM
• Детекторы объединены в гибридный
классификатор
• Классификатор реализован как расширение
к библиотеке Demorpheus
@SadieSv @_IvanPetrov_
Результат исследований
@SadieSv @_IvanPetrov_
Результат исследований
@SadieSv @_IvanPetrov_
• Вопросы?
Спасибо за внимание!
@SadieSv @_IvanPetrov_

Más contenido relacionado

La actualidad más candente

Некриптографическое исследование носителей православной криптографии
Некриптографическое исследование носителей  православной криптографииНекриптографическое исследование носителей  православной криптографии
Некриптографическое исследование носителей православной криптографииSergey Soldatov
 
Yandex Tank - Арсений Фомченко
Yandex Tank - Арсений ФомченкоYandex Tank - Арсений Фомченко
Yandex Tank - Арсений ФомченкоAvitoTech
 
Fabric для управления серверами
Fabric для управления серверамиFabric для управления серверами
Fabric для управления серверамиMaxim Kulsha
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON
 
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep «Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep e-Legion
 
Erlang killer features
Erlang killer featuresErlang killer features
Erlang killer featuresYuri Zhloba
 
Обратная разработка бинарных форматов с помощью Kaitai Struct
Обратная разработка бинарных форматов с помощью Kaitai StructОбратная разработка бинарных форматов с помощью Kaitai Struct
Обратная разработка бинарных форматов с помощью Kaitai StructPositive Hack Days
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Stas Vyschepan
 
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Ontico
 
Valentin Simonov “Who cracks our games and how that is done”
Valentin Simonov “Who cracks our games and how that is done”Valentin Simonov “Who cracks our games and how that is done”
Valentin Simonov “Who cracks our games and how that is done”DevGAMM Conference
 
Вебинар по отказоустойчивости, 13.04.2017
Вебинар по отказоустойчивости, 13.04.2017Вебинар по отказоустойчивости, 13.04.2017
Вебинар по отказоустойчивости, 13.04.2017S-Terra CSP
 
Универсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPУниверсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPИван Кочуркин
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программированиеPython Meetup
 
Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Minsk Linux User Group
 
Антон Карпов - Обзорная лекция по безопасности
Антон Карпов - Обзорная лекция по безопасностиАнтон Карпов - Обзорная лекция по безопасности
Антон Карпов - Обзорная лекция по безопасностиYandex
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)Ontico
 
Зачем программистам Ansible
Зачем программистам AnsibleЗачем программистам Ansible
Зачем программистам AnsibleDenis Honig
 

La actualidad más candente (20)

Некриптографическое исследование носителей православной криптографии
Некриптографическое исследование носителей  православной криптографииНекриптографическое исследование носителей  православной криптографии
Некриптографическое исследование носителей православной криптографии
 
Yandex Tank - Арсений Фомченко
Yandex Tank - Арсений ФомченкоYandex Tank - Арсений Фомченко
Yandex Tank - Арсений Фомченко
 
Fabric для управления серверами
Fabric для управления серверамиFabric для управления серверами
Fabric для управления серверами
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
 
php frameworks
php frameworksphp frameworks
php frameworks
 
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep «Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
 
Erlang killer features
Erlang killer featuresErlang killer features
Erlang killer features
 
Обратная разработка бинарных форматов с помощью Kaitai Struct
Обратная разработка бинарных форматов с помощью Kaitai StructОбратная разработка бинарных форматов с помощью Kaitai Struct
Обратная разработка бинарных форматов с помощью Kaitai Struct
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
 
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
 
Valentin Simonov “Who cracks our games and how that is done”
Valentin Simonov “Who cracks our games and how that is done”Valentin Simonov “Who cracks our games and how that is done”
Valentin Simonov “Who cracks our games and how that is done”
 
Вебинар по отказоустойчивости, 13.04.2017
Вебинар по отказоустойчивости, 13.04.2017Вебинар по отказоустойчивости, 13.04.2017
Вебинар по отказоустойчивости, 13.04.2017
 
Универсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPУниверсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHP
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
 
Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех
 
Антон Карпов - Обзорная лекция по безопасности
Антон Карпов - Обзорная лекция по безопасностиАнтон Карпов - Обзорная лекция по безопасности
Антон Карпов - Обзорная лекция по безопасности
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
 
Зачем программистам Ansible
Зачем программистам AnsibleЗачем программистам Ansible
Зачем программистам Ansible
 
08 linux-course
08 linux-course08 linux-course
08 linux-course
 

Similar a Ловим шеллкоды под ARM

Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаcorehard_by
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаAndrey Karpov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5Technopark
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибкиAndrey Karpov
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Alex Tutubalin
 
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кодаРазвитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кодаPositive Hack Days
 
SAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в кодеSAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в кодеAndrey Karpov
 
Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора Yandex
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Ontico
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012Alex Tutubalin
 
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...Yandex
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213
 
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)Vadim Kosov
 
Низкоуровневая Оптимизация (Андрей Аксенов)
Низкоуровневая Оптимизация (Андрей Аксенов)Низкоуровневая Оптимизация (Андрей Аксенов)
Низкоуровневая Оптимизация (Андрей Аксенов)Ontico
 

Similar a Ловим шеллкоды под ARM (20)

Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибки
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибки
 
Enter: legacy code
Enter: legacy codeEnter: legacy code
Enter: legacy code
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
 
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кодаРазвитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
 
SAP hands on lab_ru
SAP hands on lab_ruSAP hands on lab_ru
SAP hands on lab_ru
 
SAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в кодеSAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в коде
 
Platov
PlatovPlatov
Platov
 
Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012
 
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
 
Низкоуровневая Оптимизация (Андрей Аксенов)
Низкоуровневая Оптимизация (Андрей Аксенов)Низкоуровневая Оптимизация (Андрей Аксенов)
Низкоуровневая Оптимизация (Андрей Аксенов)
 

Más 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
 

Más 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 и брутфорс-атаки
 

Ловим шеллкоды под ARM

  • 1. Ловим шеллкоды под ARM Докладчики : Гайворонская Светлана @SadieSv Петров Иван Сергеевич @_IvanPetrov_
  • 2. Актуальность • Значительный рост устройств на базе процессоров ARM: количество устройств на базе ARM превышает количество PC в несколько раз. • Большая установочная база уязвимых программ и преемственность кода • Ошибки работы с памятью все еще актуальны • Уязвимости в программном обеспечении этих устройств могут принести огромный ущерб, как пользователям, так и производителям @SadieSv @_IvanPetrov_
  • 3. Решаема ли эта задача? Activator • NOP • GetPC Decryptor Payload Return address zone • Ограничения по структуре • Ограничения по размеру @SadieSv @_IvanPetrov_
  • 4. Может все не так плохо? • Stack canaries: вычисление псевдо-радномного значения и сохранения его на стек; • SafeSEH: вместо защиты стека, используются техники защиты обработчиков исключений; • DEP: стек или часть стека становятся неисполнимыми; • ASLR: рандомизация начала кода, стека, кучи в адресном пространстве исполнимого процесса. BYPASSED @SadieSv @_IvanPetrov_
  • 5. Так что же с ARM-ом? • Шеллкоды уже есть • Методов обнаружения «поумнее» сигнатур…
  • 6. Анализ применимости существующих методов обнаружения шеллкодов Для анализа применимости существующих методов детектирования шеллкодов х86 к платформе ARM нужно выделить основные отличия этих архитектур. @SadieSv @_IvanPetrov_
  • 7. Основные отличия архитектур ARM от x86: • Фиксированный размер команд; • Наличие 2-х режимов работы процессора (32bit и 16bit) и возможность динамического переключения между ними; • Возможность условного выполнения инструкций (в зависимости от значения регистра флагов); • Возможность прямого обращения к счетчику инструкций; • load-store архитектура (мы не можем из арифметических инструкций обращаться напрямую в память); • При вызове функций аргументы помещаются в регистры. @SadieSv @_IvanPetrov_
  • 8. i f ( e r r != 0) p r i n t f ( " Er r o r c o d e = %i n " , e r r ) ; e l s e p r i n t f ( "OK! n " ) ; CMP r1 , #0 BEQ . L4 LDR r0 , < string_1_address > BL printf B . L8 . L4 : LDR r0 , < string_2_address > BL printf . L8 : CMP r1 , #0 LDRNE r0 , < string_1_address > LDREQ r0 , < string_2_address > BL printf Без условного выполнения С условным выполнением Условное выполнение @SadieSv @_IvanPetrov_
  • 9. Thumb режим процессора chmod("/etc/passwd", 0777) - 31 byte "x78x46" // mov r0, pc "x10x30" // adds r0, #16 "xffx21" // movs r1, #255 ; 0xff "xffx31" // adds r1, #255 ; 0xff "x01x31" // adds r1, #1 "x0fx37" // adds r7, #15 "x01xdf" // svc 1 ; chmod(..) "x40x40" // eors r0, r0 "x01x27" // movs r7, #1 "x01xdf" // svc 1 ; exit(0) "x2fx65x74x63" "x2fx70x61x73" "x73x77" "x64” chmod("/etc/passwd", 0777) - 51 byte "x0fx00xa0xe1" // mov r0, pc "x20x00x90xe2" // adds r0, r0, #32 "xffx10xb0xe3" // movs r1, #255 ; 0xff "xffx10x91xe2" // adds r1, r1, #255; 0xff "x01x10x91xe2" // adds r1, r1, #1 "x0fx70x97xe2" // adds r7, r7, #15 "x01x00x00xef" // svc 1 "x00x00x30xe0" // eors r0, r0, r0 "x01x70xb0xe3" // movs r7, #1 "x01x00x00xef" // svc 1 "x2fx65x74x63" "x2fx70x61x73" "x73x77" "x64" Thumb режим ARM режим @SadieSv @_IvanPetrov_
  • 11. Причины затруднения анализа Появление в платформе ARM новых возможностей обфускации программ благодаря: 1. Условному выполнению инструкций; 2. Дополнительному режиму процессора. @SadieSv @_IvanPetrov_
  • 12. Статические признаки • Корректное дизассемблирование данных в цепочку, содержащую не менее K инструкций; • Наличие команды смены режима процессора (BX Rm) на пересечении цепочек команд из разных режимов процессора; • Наличие Get-UsePC кода; • Число паттернов ( инициализация аргументов, вызов функции ) превышает предопределенное пороговое значение; • Системному вызову предшествует инициализация аргументов вызова; • Наличие цикла записи/загрузки из памяти; • Адрес возврата находится в определенном диапазоне значений; • Последняя инструкция в цепочке заканчивается командой перехода (BL, BLX), либо системным вызовом(svc); • Операнды самомодифицирующегося кода и кода с косвенными переходами должны быть инициализированы.
  • 13. Корректное дизассемблирование данных в цепочку, содержащую не менее K инструкций Не шеллкод Не шеллкод Не шеллкод Не шеллкод Шеллкод! @SadieSv @_IvanPetrov_
  • 14. Наличие команды смены режима процессора (BX Rm) на пересечении цепочек команд из разных режимов процессора Переключение режима Шеллкод в режиме Thumb Данные для шеллкода Регистр PCПереход с переключением Код режима Thumb @SadieSv @_IvanPetrov_
  • 15. Наличие Get-UsePC кода Регистр PC Зашифрованный шеллкод Получение PC Использование PC Получение PC в регистр LR (r14) Использование PC @SadieSv @_IvanPetrov_
  • 16. Инициализация аргументов вызовов функций и системных вызовов Аргументы вызова Номер вызова Системный вызов _socket #281 _connect #283 @SadieSv @_IvanPetrov_
  • 17. Наличие цикла записи/загрузки из памяти Зашифрованный шеллкод Чтение из памяти Загрузка в память Счетчик цикла Адрес зашифрованной полезной нагрузки Основной цикл @SadieSv @_IvanPetrov_
  • 18. Адрес возврата находится в определенном диапазоне значений Адрес возврата Уязвимый буфер Стек Полезная нагрузка Шеллкод 0xbeffedbc 0xbeffedbc 0xbeffedbc 0xbeffedbc 0xbeffedbc 0xbeffedbc Зона адресов возврата @SadieSv @_IvanPetrov_
  • 19. Динамические признаки • Количество чтений полезной нагрузки превышает определенный порог; • Количество уникальных записей в память превышает определенный порог; • Поток управления хотя бы один раз передается из адресного пространства входного буфера на адрес, по которому ранее осуществлялась запись; • Количество исполненных wx-инструкций превышает определенный порог; • В зависимости от определенных значений флагов выполняется набор инструкций, удовлетворяющих вредоносной сигнатуре. @SadieSv @_IvanPetrov_
  • 20. Запись и чтение из памяти Декриптор Зашифрованная полезная нагрузка N Уникальных чтений и записей @SadieSv @_IvanPetrov_
  • 21. Передача потока управления Декриптор Расшифрованная полезная нагрузка Поток управления @SadieSv @_IvanPetrov_
  • 22. Зависимость сигнатуры от флагов Z = 0 & C = 0 Z = 1 & C = 0 ADDNES r0, r1 ADDNES r0, r1 Блок AL (любой флаг) Блок AL (любой флаг) Блок CS ( С == 1) Z = 0 С = 1 Блок CS ( С == 1) Блок EQ ( Z == 0) Блок EQ ( Z == 0) ADDCCS r3, r4 ADDCCS r3, r4 Z = 1 С = 0 Если был выполнен блок EQ, то Z = 1, иначе Z = 0 Блок EQ ( Z == 0) Блок EQ ( Z == 0) @SadieSv @_IvanPetrov_
  • 23. Предложенное решение Реализовывать детекторы выделенных признаков, как расширение к существующей библиотеке детектирования шеллкодов - Demorpheus @SadieSv @_IvanPetrov_
  • 25. Гибридный классификатор Дизассемблирование Построение CFG Построение IFG … Дизассемблиро ванный поток CFG IFG … Детектор признака 1 Детектор признака К … @SadieSv @_IvanPetrov_
  • 26. Апробация • Шеллкодов; • Легитимных исполняемых файлов; • Произвольных данных; • Мультимедиа данных. Апробация детекторов проводится на тестовой выборке, состоящей из: @SadieSv @_IvanPetrov_
  • 27. Результат исследований • Выделены признаки шеллкодов для платформы ARM • Реализованы детекторы, использующие признаки шеллкодов ARM • Детекторы объединены в гибридный классификатор • Классификатор реализован как расширение к библиотеке Demorpheus @SadieSv @_IvanPetrov_
  • 30. • Вопросы? Спасибо за внимание! @SadieSv @_IvanPetrov_