developing of native code obfuscator - Евгений Кулик

20
Developing of native code obfuscator

Upload: hackit-ukraine

Post on 12-Jan-2017

201 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Developing of native code obfuscator - Евгений Кулик

Developing of native code obfuscator

Page 2: Developing of native code obfuscator - Евгений Кулик

1. Сферы применения бинарных

обфускаторов

2. Алгоритм работы обфускатора.

3. Переносимость на разные 3. Переносимость на разные

платформы.

4. Трудности деобфускации.

Page 3: Developing of native code obfuscator - Евгений Кулик

1. Защита от реверс-инженерии.

2. Противодействие сигнатурным

анализаторам.анализаторам.

3. Сокрытие полезной нагрузки

эксплоитов.

Page 4: Developing of native code obfuscator - Евгений Кулик

Пример обфускации кода в протекторе Shiva

Page 5: Developing of native code obfuscator - Евгений Кулик

Core-packer от Hacking Team скрывает

malware от сигнатурного анализа

Page 6: Developing of native code obfuscator - Евгений Кулик

1. Обфускаторы исходного кода.

2. Обфускаторы промежуточного

байт-кода.байт-кода.

3. Обфускаторы ассемблерных

инструкций.

Page 7: Developing of native code obfuscator - Евгений Кулик

1. Реализация поли- и метаморфизма

вирусных инфекторов.

2. Навесные упаковщики.

3. Критически важные части

алгоритмов регистрации приложений.

Page 8: Developing of native code obfuscator - Евгений Кулик

Схема применения обфускатора

Исходный

бинарный файлДизассемблерный

движок

Ассемблерный

движок Обфусцированный

бинарный файл

Page 9: Developing of native code obfuscator - Евгений Кулик

Пермутация как основа обфускатора

До пермутации После пермутации

xor eax,eax

mov eax,12345678

xor eax,eax

nop

add eax,12345678

nop

Page 10: Developing of native code obfuscator - Евгений Кулик

Шаблоны и полиморфизм

inc eax inc %reg0inc %reg0

inc %reg0inc eax inc %reg0 inc %reg0

dec %reg0

Page 11: Developing of native code obfuscator - Евгений Кулик

Подстановка оригинального

значения операнда в шаблон

inc %reg0

eax

inc eaxinc %reg0

inc %reg0

dec %reg0

inc eax

inc eax

dec eax

Page 12: Developing of native code obfuscator - Евгений Кулик

Генерация промежуточного представления

ассемблерных инструкций

mov eax, ecx

class Instruction{

public:

std::string Prefix;

std::string Opcode;

Argument left;

Argument right;

};

Prefix Opcode Argument Argument

class Argument{

public:

std::string Constant;

std::string Register;

std::string Label;

Expression expression;

Type type;

};

Page 13: Developing of native code obfuscator - Евгений Кулик

Expression – что это?

class Expression{

public:

std::string Register1;

std::string Terminal;

[eax]

[ecx + 5]

[edx + ebx]std::string Terminal;

std::string Constant;

std::string Register2;

}

[edx + ebx]

[esi * 2]

mov eax, [ecx + edx]

Expression

Page 14: Developing of native code obfuscator - Евгений Кулик

Алгоритм работы обфускатора

Исходная

инструкция1. Морфирующие

2. Мусорные

База

шаблонов

1

2

3

ГПСЧ

Обфусцированные

инструкции

24

5

Обфускатор

Исходный код обфускатора на С++

Page 15: Developing of native code obfuscator - Евгений Кулик

1. Метаморфные шаблоны.

2. Мусорные шаблоны.2. Мусорные шаблоны.

3. Возможность наложения шаблонов

друг на друга - ключевая.

Page 16: Developing of native code obfuscator - Евгений Кулик

Чем полиморфизм отличается от

метаморфизма?

push eax

mov eax, esp

mov ecx, dword ptr[eax-4]

add ecx,10

pop eax

push ebp

mov ebp, esp

mov ecx, dword ptr[ebp -4]

add ecx,10pop eax

retn 4

add ecx,10

pop ebp

retn 4

push eaxpush 0

mov dword ptr [esp], eax

Page 17: Developing of native code obfuscator - Евгений Кулик

Метод «чёрного» ящика

Обфусцированный

код

Разбиение на

блокиДанные для

анализа подаются

на вход каждого

блока. блока.

Анализируются

выходные данные.

Сложность в

правильном

разбиении на

блоки.

Page 18: Developing of native code obfuscator - Евгений Кулик

Наличие инструментов для реверс-

инженерии под разные системы

x86 x86-64 ARM

Windows

Linux

Page 19: Developing of native code obfuscator - Евгений Кулик

Где используются ARM-процессоры

Page 20: Developing of native code obfuscator - Евгений Кулик

1. Отличие встраиваемых систем от

канонических.

2. Необходимость сборки большинства

утилит для статического и динамического утилит для статического и динамического

анализа.

3. Сложность отладки модулей ядра.

4. Отсутствие портирования под arm

некоторых утилит.