1. Методы защиты
Java-приложений и их обход
Ведущий:
Специалист по информационной
безопасности в "ASP Labs"
Лебедев Филипп
Ведущий: Лукьяненко Леонид
1
2. 1. Java-приложения в наше время
2. Особенности компиляции и
функционирования java-приложений
3. Обзор способов защиты java
приложений
4. Обзор плагина Immunity Debugger java
dumper и спектр решаемых с помощью
него задач
5. Результаты
Структура доклада
2
3. Java-приложения в наше время
Android
Apps
Software
Tools
Server Apps
(J2EE)
Java Web
applications
Big Data
technologies
Java Card
Scientific
Applications
3
9. Обход: злоумышленник все равно
получает Java код, многие переменные и
функции сохраняют свое оригинальное
название, декомпиляторы частично
деобфусцируют код
Защита: использование модификации
байт-кода Java
Уязвимости 2
Обфускация кода
9
13. Обход: Часть кода декомпилируется,
различные методы могут быть получены
разными декомпиляторами, другая часть
может быть проанализирована в байт-коде
Защита: Использование динамической
загрузки классов с возможным
шифрованием и разделением кода
Уязвимость 3
Байт-код
13
14. Особенности компиляции и
функционирования java-приложений (5)
Java app
Обфускация и изменение байт-кодовых инструкций
jar
1.class n.class
14
jar
1.class m.class
Bootstrap
Classloader
System Classloader
• Загружает основные
классы приложения
Secured Classloader
• Шифрует и
расшифровывает
загружаемые классы
Extension
Classloader
15. Особенности компиляции и
функционирования java-приложений (5)
Java app
Обфускация и изменение байт-кодовых инструкций
jar
1.class n.class
15
jar
1.class m.class
Bootstrap
Classloader
System Classloader
• Загружает основные
классы приложения
Secured Classloader
• Шифрует и
расшифровывает
загружаемые классы
Extension
Classloader
Vuln_5
16. Обход: исходные классы получаются
путем модификации загрузчика
классов или использования Java Agent
Защита: Используем обертку для Java
приложений посредством алгоритмов
сжатия и упаковки в .exe
Уязвимости 4
Динамическая загрузка кода
16
19. Обход: используем IDA, windbg, immunity
debugger, radare2, binary ninja и т. д, любой
java-декомпилятор и в ходе реверса и
отладки вытаскиваем классы из памяти
Защита: используем проприетарную
цепочку классовых загрузчиков с
шифрующим корневым классовым
загрузчиком, упакованным в .exe файл
Уязвимости 5
Сложность дизассемблирования .EXE
не влияет на сложность восстановления .class
19
21. Особенности компиляции и
функционирования java-приложений (7)
Bootstrap
Classloader
System
Classloader
•Загружает
основные
классы
приложения
Secured
Classloader
•Шифрует и
расшифровывает
загружаемые
классы
Classloader 1
Extension
Classloader
Classloader N
21
Vuln_6
22. Принцип работы плагина java-dumper (1)
CreateFileW
calls
ReadFileW
calls
CloseHandle
calls
22
24. Принцип работы плагина java-dumper (3)
CreateFileW
calls
ReadFileW
calls
CloseHandle
calls
leak
java.class
leak
java.class
leak
java.class 24
25. Принцип работы плагина java-dumper (4)
Chunk 1
decrypted1.class
decrypted2.class
Chunk 2
decrypted3.class
decrypted4.class
Chunk N
decrypted2N_1.class
decrypted2N.class
25
26. Принцип работы плагина java-dumper (5)
def scan_heaps(self,imm):
# get all heaps
heaps = imm.getHeapsAddress()
for heap in heaps:
pheap = imm.getHeap(heap)
# get all chunks in current heap
chunks = pheap.getChunks(0)
for chunk in chunks:
imm.log('[*] checking chunk at address 0x%08X' % chunk.addr)
data = imm.readMemory(chunk.addr, chunk.size)
self.check_java_class(imm, buf = data, chunk = chunk)
def run(self, regs):
imm = immlib.Debugger()
self.regs = regs
# scan memory
self.scan_heaps(imm)
26
27. Принцип работы плагина java-dumper (6)
Chunk 1
decrypted1.class
decrypted2.class
Chunk 2
decrypted3.class
decrypted4.class
Chunk N
decrypted2N_1.class
decrypted2N.class
LEAKED
27
32. Обход: с помощью плагина java-dumper
сканируем память и вытаскиваем из
нее securedclassloader.class, с
помощью заданных алгоритмов
шифрования и ключа получаем все
необходимые java-классы
Защита: Ooooops
Уязвимость 6
Любой зашифрованный класс когда-нибудь
расшифруется и загрузится в память
32
33. 1. Выявлено, что большая часть способов
защиты java-приложений легко
обходится с помощью известных
программных инструментов и техник
2. Определено, что задача получения
расшифрованных java-классов сводится
к применению представленного плагина
java-dumper
Результы
33