SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Методы защиты
Java-приложений и их обход
Ведущий:
Специалист по информационной
безопасности в "ASP Labs"
Лебедев Филипп
Ведущий: Лукьяненко Леонид
1
1. Java-приложения в наше время
2. Особенности компиляции и
функционирования java-приложений
3. Обзор способов защиты java
приложений
4. Обзор плагина Immunity Debugger java
dumper и спектр решаемых с помощью
него задач
5. Результаты
Структура доклада
2
Java-приложения в наше время
Android
Apps
Software
Tools
Server Apps
(J2EE)
Java Web
applications
Big Data
technologies
Java Card
Scientific
Applications
3
Особенности компиляции и
функционирования java-приложений (1)
Текстовыйредактор
.java
Байткод
.class
Среда
JVM
4
Особенности компиляции и
функционирования java-приложений (2)
Текстовыйредактор
.java
Байткод
.class
Среда
JVM
Vuln_1
5
Обход: используем декомпиляторы DJ
Java Decompiler, JAD, Procyon,
Fernflower, CFR и т. д.
Защита: обфусцируем java-код
Уязвимость 1
Простота декомпиляции .class
6
Особенности компиляции и
функционирования java-приложений (3)
Обфускация
A=A
B=B
Java-app
1.class n.class
7
Обфускация Java-приложений
8
• Обфускация строк
• Обфускация имен
• Обфускация логики
Обход: злоумышленник все равно
получает Java код, многие переменные и
функции сохраняют свое оригинальное
название, декомпиляторы частично
деобфусцируют код
Защита: использование модификации
байт-кода Java
Уязвимости 2
Обфускация кода
9
Особенности компиляции и
функционирования java-приложений (4)
Изменение байт-кода
A=A
B=B
Java-app
1.class n.class
10
Изменение байт-кодовых инструкций (1)
11
public void paint(Graphics g) {
g.drawString(date + " by ",100, 15);
g.drawString(email,290,15);
}
javap –c file.class
Изменение байт-кодовых инструкций (2)
public void paint(java.awt.Graphics);
Code:
0: aload_1
1: new #8 // class java/lang/StringBuilder
4: dup
5: invokespecial #9 // Method java/lang/StringBuilder."<init>":()V
8: aload_0
9: getfield #5 // Field date:Ljava/lang/String;
12: invokevirtual #10 // Method
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
15: ldc #11 // String by
17: invokevirtual #10 // Method
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
20: invokevirtual #12 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
23: bipush 100
25: bipush 15
27: invokevirtual #13 // Method java/awt/Graphics.drawString:(Ljava/lang/String;II)V
30: aload_1
31: aload_0
32: getfield #7 // Field email:Ljava/lang/String;
35: sipush 290
38: bipush 15
40: invokevirtual #13 // Method java/awt/Graphics.drawString:(Ljava/lang/String;II)V
43: return 12
Обход: Часть кода декомпилируется,
различные методы могут быть получены
разными декомпиляторами, другая часть
может быть проанализирована в байт-коде
Защита: Использование динамической
загрузки классов с возможным
шифрованием и разделением кода
Уязвимость 3
Байт-код
13
Особенности компиляции и
функционирования java-приложений (5)
Java app
Обфускация и изменение байт-кодовых инструкций
jar
1.class n.class
14
jar
1.class m.class
Bootstrap
Classloader
System Classloader
• Загружает основные
классы приложения
Secured Classloader
• Шифрует и
расшифровывает
загружаемые классы
Extension
Classloader
Особенности компиляции и
функционирования 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
Обход: исходные классы получаются
путем модификации загрузчика
классов или использования Java Agent
Защита: Используем обертку для Java
приложений посредством алгоритмов
сжатия и упаковки в .exe
Уязвимости 4
Динамическая загрузка кода
16
Особенности компиляции и
функционирования java-приложений (6)
.EXE
x86
x64
Обфускация и изменение
байт-кодовых инструкций
A=A
B=B
Java-app
1.class n.class
17
Особенности компиляции и
функционирования java-приложений (7)
.EXE
x86
x64
Обфускация и изменение
байт-кодовых инструкций
A=A
B=B
Java-app
1.class n.class
18
Обход: используем IDA, windbg, immunity
debugger, radare2, binary ninja и т. д, любой
java-декомпилятор и в ходе реверса и
отладки вытаскиваем классы из памяти
Защита: используем проприетарную
цепочку классовых загрузчиков с
шифрующим корневым классовым
загрузчиком, упакованным в .exe файл
Уязвимости 5
Сложность дизассемблирования .EXE
не влияет на сложность восстановления .class
19
Bootstrap
Classloader
System
Classloader
•Загружает
основные
классы
приложения
Secured
Classloader
•Шифрует и
расшифровывает
загружаемые
классы
Classloader 1
Extension
Classloader
Classloader N
Особенности компиляции и
функционирования java-приложений (6)
20
Особенности компиляции и
функционирования java-приложений (7)
Bootstrap
Classloader
System
Classloader
•Загружает
основные
классы
приложения
Secured
Classloader
•Шифрует и
расшифровывает
загружаемые
классы
Classloader 1
Extension
Classloader
Classloader N
21
Vuln_6
Принцип работы плагина java-dumper (1)
CreateFileW
calls
ReadFileW
calls
CloseHandle
calls
22
Принцип работы плагина java-dumper (2)
# collect system functions addresses
CreateFileW_addr = imm.getAddress("kernel32.CreateFileW")
ReadFile_addr = imm.getAddress("kernel32.ReadFile")
CloseHandle_addr = imm.getAddress("kernel32.CloseHandle")
…
# catch CreateFileW calls
whook = Hooker(verbose, heaps_scan)
whook.add("bp_on_kernel32.CreateFileW", CreateFileW_addr)
imm.log('[*] CreateFileW hook')
# catch ReadFile calls
rhook = Hooker(verbose, heaps_scan)
rhook.add("bp_on_kernel32.ReadFile", ReadFile_addr)
imm.log('[*] ReadFile hook')
# catch CloseHandle calls
chook = Hooker(verbose, heaps_scan)
chook.add("bp_on_kernel32.CloseHandle", CloseHandle_addr)
imm.log('[*] CloseHandle hook')
23
Принцип работы плагина java-dumper (3)
CreateFileW
calls
ReadFileW
calls
CloseHandle
calls
leak
java.class
leak
java.class
leak
java.class 24
Принцип работы плагина java-dumper (4)
Chunk 1
decrypted1.class
decrypted2.class
Chunk 2
decrypted3.class
decrypted4.class
Chunk N
decrypted2N_1.class
decrypted2N.class
25
Принцип работы плагина 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
Принцип работы плагина java-dumper (6)
Chunk 1
decrypted1.class
decrypted2.class
Chunk 2
decrypted3.class
decrypted4.class
Chunk N
decrypted2N_1.class
decrypted2N.class
LEAKED
27
Принцип работы плагина java-dumper (7)
Chunk i
securedclassloader.class
28
Принцип работы плагина java-dumper (8)
Chunk i
securedclassloader.class
LEAKED 29
Принцип работы плагина java-dumper (9)
30
Принцип работы плагина java-dumper (10)
31
Обход: с помощью плагина java-dumper
сканируем память и вытаскиваем из
нее securedclassloader.class, с
помощью заданных алгоритмов
шифрования и ключа получаем все
необходимые java-классы
Защита: Ooooops
Уязвимость 6
Любой зашифрованный класс когда-нибудь
расшифруется и загрузится в память
32
1. Выявлено, что большая часть способов
защиты java-приложений легко
обходится с помощью известных
программных инструментов и техник
2. Определено, что задача получения
расшифрованных java-классов сводится
к применению представленного плагина
java-dumper
Результы
33
• https://github.com/ASP-Labs/Java-dumper
Ссылка на плагин
34

Weitere ähnliche Inhalte

Was ist angesagt?

How to build solid CI-CD pipeline / Илья Беда (beda.software)
How to build solid CI-CD pipeline / Илья Беда (beda.software)How to build solid CI-CD pipeline / Илья Беда (beda.software)
How to build solid CI-CD pipeline / Илья Беда (beda.software)Ontico
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Ontico
 
Yandex Tank - Арсений Фомченко
Yandex Tank - Арсений ФомченкоYandex Tank - Арсений Фомченко
Yandex Tank - Арсений ФомченкоAvitoTech
 
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Tanya Denisyuk
 
Sphinx: распределяя индексы.
Sphinx: распределяя индексы.Sphinx: распределяя индексы.
Sphinx: распределяя индексы.MageCloud
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1Technopark
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)Ontico
 
Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...
Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...
Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...Ontico
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Java black box profiling
Java black box profilingJava black box profiling
Java black box profilingaragozin
 
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (..."Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...AvitoTech
 
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан КупреевCRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан КупреевOpenVZ
 
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...zfconfua
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur Shemsedinov
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаAlexei Smolyanov
 
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...Mail.ru Group
 
Управление большим количеством физических серверов, Александр Берсенев, Инст...
 Управление большим количеством физических серверов, Александр Берсенев, Инст... Управление большим количеством физических серверов, Александр Берсенев, Инст...
Управление большим количеством физических серверов, Александр Берсенев, Инст...it-people
 
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в TarantoolИнструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в TarantoolTimur Safin
 
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковОпенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковYandex
 
Scaling services with apache mesos (and docker)
Scaling services with apache mesos (and docker)Scaling services with apache mesos (and docker)
Scaling services with apache mesos (and docker)Ivan Kudryavtsev
 

Was ist angesagt? (20)

How to build solid CI-CD pipeline / Илья Беда (beda.software)
How to build solid CI-CD pipeline / Илья Беда (beda.software)How to build solid CI-CD pipeline / Илья Беда (beda.software)
How to build solid CI-CD pipeline / Илья Беда (beda.software)
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
 
Yandex Tank - Арсений Фомченко
Yandex Tank - Арсений ФомченкоYandex Tank - Арсений Фомченко
Yandex Tank - Арсений Фомченко
 
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
 
Sphinx: распределяя индексы.
Sphinx: распределяя индексы.Sphinx: распределяя индексы.
Sphinx: распределяя индексы.
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
 
Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...
Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...
Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Серге...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Java black box profiling
Java black box profilingJava black box profiling
Java black box profiling
 
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (..."Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
 
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан КупреевCRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
 
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
 
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
 
Управление большим количеством физических серверов, Александр Берсенев, Инст...
 Управление большим количеством физических серверов, Александр Берсенев, Инст... Управление большим количеством физических серверов, Александр Берсенев, Инст...
Управление большим количеством физических серверов, Александр Берсенев, Инст...
 
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в TarantoolИнструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
 
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковОпенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
 
Scaling services with apache mesos (and docker)
Scaling services with apache mesos (and docker)Scaling services with apache mesos (and docker)
Scaling services with apache mesos (and docker)
 

Ähnlich wie Методы защиты Java-приложений и их обход

Java осень 2014 занятие 1
Java осень 2014 занятие 1Java осень 2014 занятие 1
Java осень 2014 занятие 1Technopark
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Александр Егурцов
 
использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.Asya Dudnik
 
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionJVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionNikita Lipsky
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПKirill Chebunin
 
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценарияхПриемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценарияхPositive Hack Days
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NETPositive Hack Days
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Yandex
 
JPoint 2016 - Bytecode
JPoint 2016 - BytecodeJPoint 2016 - Bytecode
JPoint 2016 - BytecodeAnton Arhipov
 
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
 
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптахПриемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптахrevisium
 
Продвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевПродвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевYandex
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Stfalcon Meetups
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Yandex
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language RuntimeSQALab
 
Evgeny Rybak Presentation
Evgeny Rybak PresentationEvgeny Rybak Presentation
Evgeny Rybak Presentationsef2009
 

Ähnlich wie Методы защиты Java-приложений и их обход (20)

Java осень 2014 занятие 1
Java осень 2014 занятие 1Java осень 2014 занятие 1
Java осень 2014 занятие 1
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 
использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.
 
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionJVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
 
Bytecode
BytecodeBytecode
Bytecode
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценарияхПриемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
 
New Android NDK & JNI
New Android NDK & JNINew Android NDK & JNI
New Android NDK & JNI
 
JPoint 2016 - Bytecode
JPoint 2016 - BytecodeJPoint 2016 - Bytecode
JPoint 2016 - Bytecode
 
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”
 
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптахПриемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
 
Продвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевПродвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр Кошелев
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
 
Спецификация WSGI (PEP-333)
Спецификация WSGI (PEP-333)Спецификация WSGI (PEP-333)
Спецификация WSGI (PEP-333)
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
Evgeny Rybak Presentation
Evgeny Rybak PresentationEvgeny Rybak Presentation
Evgeny Rybak Presentation
 

Mehr von 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
 

Mehr von 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 и брутфорс-атаки
 

Методы защиты Java-приложений и их обход

  • 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
  • 4. Особенности компиляции и функционирования java-приложений (1) Текстовыйредактор .java Байткод .class Среда JVM 4
  • 5. Особенности компиляции и функционирования java-приложений (2) Текстовыйредактор .java Байткод .class Среда JVM Vuln_1 5
  • 6. Обход: используем декомпиляторы DJ Java Decompiler, JAD, Procyon, Fernflower, CFR и т. д. Защита: обфусцируем java-код Уязвимость 1 Простота декомпиляции .class 6
  • 7. Особенности компиляции и функционирования java-приложений (3) Обфускация A=A B=B Java-app 1.class n.class 7
  • 8. Обфускация Java-приложений 8 • Обфускация строк • Обфускация имен • Обфускация логики
  • 9. Обход: злоумышленник все равно получает Java код, многие переменные и функции сохраняют свое оригинальное название, декомпиляторы частично деобфусцируют код Защита: использование модификации байт-кода Java Уязвимости 2 Обфускация кода 9
  • 10. Особенности компиляции и функционирования java-приложений (4) Изменение байт-кода A=A B=B Java-app 1.class n.class 10
  • 11. Изменение байт-кодовых инструкций (1) 11 public void paint(Graphics g) { g.drawString(date + " by ",100, 15); g.drawString(email,290,15); } javap –c file.class
  • 12. Изменение байт-кодовых инструкций (2) public void paint(java.awt.Graphics); Code: 0: aload_1 1: new #8 // class java/lang/StringBuilder 4: dup 5: invokespecial #9 // Method java/lang/StringBuilder."<init>":()V 8: aload_0 9: getfield #5 // Field date:Ljava/lang/String; 12: invokevirtual #10 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 15: ldc #11 // String by 17: invokevirtual #10 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 20: invokevirtual #12 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; 23: bipush 100 25: bipush 15 27: invokevirtual #13 // Method java/awt/Graphics.drawString:(Ljava/lang/String;II)V 30: aload_1 31: aload_0 32: getfield #7 // Field email:Ljava/lang/String; 35: sipush 290 38: bipush 15 40: invokevirtual #13 // Method java/awt/Graphics.drawString:(Ljava/lang/String;II)V 43: return 12
  • 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
  • 17. Особенности компиляции и функционирования java-приложений (6) .EXE x86 x64 Обфускация и изменение байт-кодовых инструкций A=A B=B Java-app 1.class n.class 17
  • 18. Особенности компиляции и функционирования java-приложений (7) .EXE x86 x64 Обфускация и изменение байт-кодовых инструкций A=A B=B Java-app 1.class n.class 18
  • 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
  • 23. Принцип работы плагина java-dumper (2) # collect system functions addresses CreateFileW_addr = imm.getAddress("kernel32.CreateFileW") ReadFile_addr = imm.getAddress("kernel32.ReadFile") CloseHandle_addr = imm.getAddress("kernel32.CloseHandle") … # catch CreateFileW calls whook = Hooker(verbose, heaps_scan) whook.add("bp_on_kernel32.CreateFileW", CreateFileW_addr) imm.log('[*] CreateFileW hook') # catch ReadFile calls rhook = Hooker(verbose, heaps_scan) rhook.add("bp_on_kernel32.ReadFile", ReadFile_addr) imm.log('[*] ReadFile hook') # catch CloseHandle calls chook = Hooker(verbose, heaps_scan) chook.add("bp_on_kernel32.CloseHandle", CloseHandle_addr) imm.log('[*] CloseHandle hook') 23
  • 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
  • 28. Принцип работы плагина java-dumper (7) Chunk i securedclassloader.class 28
  • 29. Принцип работы плагина java-dumper (8) Chunk i securedclassloader.class LEAKED 29
  • 32. Обход: с помощью плагина java-dumper сканируем память и вытаскиваем из нее securedclassloader.class, с помощью заданных алгоритмов шифрования и ключа получаем все необходимые java-классы Защита: Ooooops Уязвимость 6 Любой зашифрованный класс когда-нибудь расшифруется и загрузится в память 32
  • 33. 1. Выявлено, что большая часть способов защиты java-приложений легко обходится с помощью известных программных инструментов и техник 2. Определено, что задача получения расшифрованных java-классов сводится к применению представленного плагина java-dumper Результы 33