Slide 1

Slide 1 text

Заголовок ptsecurity.com Method Hooking в Android Android разработчик Tinkoff Гузенко Александр Сергеевич

Slide 2

Slide 2 text

Заголовок HCE (Host-based Card Emulation) — технология для совершения бесконтактных платежей со смартфонов Android Предыстория

Slide 3

Slide 3 text

Заголовок Перехват (англ. hooking) — технология, позволяющая изменить стандартное поведение тех или иных компонентов. Injector — программа-помощник, которая встраивает наш hooked код вместо оригинального Основные понятия

Slide 4

Slide 4 text

Заголовок ➔ Прикрепляемся к процессу ➔ Ставим указатель на адрес нужной нам функции (захуканной) ➔ Выполняем функцию ➔ Сохраняем полученное значение ➔ Возвращаемся обратно, как будто вызвали обычную функцию Как работает method hooking

Slide 5

Slide 5 text

Заголовок Original Hooked Метод Hooking

Slide 6

Slide 6 text

Заголовок Original Hooked Метод Hooking

Slide 7

Slide 7 text

Заголовок С++ Hooked Метод Hooking

Slide 8

Slide 8 text

Заголовок С++ Hooked Метод Hooking jmp (место в памяти нашего hooked метода)

Slide 9

Slide 9 text

Заголовок testprogram.exe: 5 + 5 = 10 testprogram.exe: 5 + 5 = 10 testprogram.exe: 5 + 5 = 10 your program has been hacked! testprogram.exe: 5 + 5 = 1010 your program has been hacked! testprogram.exe: 5 + 5 = 1010 your program has been hacked! testprogram.exe: 5 + 5 = 1010 Метод Hooking

Slide 10

Slide 10 text

Заголовок Метод Hooking

Slide 11

Slide 11 text

Заголовок ➔ Используя malloc/calloc , копируем название нужной библиотеки в сторонний процесс. ➔ Загружаем нужную библиотеку, вызывая dlopen . ➔ Находим адрес нашей hooked функции с помощью dlsym. ➔ Вызываем нашу hooked функцию. ➔ Выгружаем загруженную библиотеку, используя функцию dlclose. Детальнее о Hooking

Slide 12

Slide 12 text

Заголовок Трассиро́вка - процесс пошагового выполнения программы. Основные понятия

Slide 13

Slide 13 text

Заголовок Функция Ptrace() #include long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data); Системная функция ptrace () предоставляет средство, с помощью которого один процесс («трассировщик») может наблюдать и контролировать выполнение другого процесса («трассировка»), а также проверять и изменять память и регистры трассировки. В основном, он используется для реализации отладки и трассировки системных вызовов. Метод Hooking

Slide 14

Slide 14 text

Заголовок libc function address = libc start address + function offset Где: libc start address — константа (0xb7e22000 – например, для какого-то ‘заражённого’ бинарника) Отступ функции от начала библиотеки (ищется с помощью “readelf -s libc.so.fun_name | grep “) Если бы было всё просто

Slide 15

Slide 15 text

Заголовок ASLR (англ. address space layout randomization — «рандомизация размещения адресного пространства») — технология, применяемая в операционных системах, при использовании которой случайным образом изменяется расположение в адресном пространстве процесса важных структур данных, а именно образов исполняемого файла, подгружаемых библиотек, кучи и стека. Address space layout randomization

Slide 16

Slide 16 text

Заголовок Основные понятия

Slide 17

Slide 17 text

Заголовок Покажите мне код

Slide 18

Slide 18 text

Заголовок REMOTE_ADDRESS = REMOTE_BASE + (LOCAL_ADDRESS - LOCAL_BASE ) Injector

Slide 19

Slide 19 text

Заголовок PC ( R15 ) – (англ. program counter) — регистр процессора, который указывает, какую команду нужно выполнять следующей. LR ( R14 ) – (англ. Link register) — регистр, хранящий адрес, куда будем возвращаться после выполнения функции R0-R3 — вспомогательные регистры. Сначала хранят первые 4 аргумента, после выполнения в R0 лежит значение выполнившейся функции. R13 – регистр, в котором хранится адрес на стек. Основные понятия

Slide 20

Slide 20 text

Заголовок ● Первые 4 аргумента кладутся в регистры R0-R3. ● Если есть ещё какие-то – они кладутся в стек (R13) . ● В регистр PC ( R15 ) кладётся указатель на функцию. ● В регистр LR ( R14 ) кладётся адрес, куда нам вернуться. ● Возвращаемое значение складывается в регистр R0. Конвенция ARM

Slide 21

Slide 21 text

Заголовок ● Используем PTRACE_GETREGS для сохранения текущих регистров. ● Расставляем регистры в соответствии с конвенцией (R0 – R3, если мало – кладём в стек). ● Ставим 0 в LR, чтобы мы смогли поймать SIGSEGV после вызова функции. ● Кладём в PC адрес функции. ● Обновляем регистры с помощью PTRACE_SETREGS. ● Стартуем функцию с помощью PTRACE_CONT и ждём SIGSEGV (потому что 0 в LR). ● Забираем и сохраняем данные из регистра R0. ● Восстанавливаем оригинальные регистры. Как происходит инъекция

Slide 22

Slide 22 text

Заголовок Покажите мне код

Slide 23

Slide 23 text

Заголовок Покажите мне код

Slide 24

Slide 24 text

Заголовок Покажите мне код

Slide 25

Slide 25 text

Заголовок Демо Legend

Slide 26

Slide 26 text

Заголовок Демо Xposed

Slide 27

Slide 27 text

Заголовок 1. Не используйте рутованный девайс. 2. Думайте, какие приложения ставите. 3. Пользуйтесь разными flavors для дебага и релиза Способы защиты

Slide 28

Slide 28 text

Заголовок ● https://github.com/asLody/legend ● https://github.com/antojoseph/frida-android-hooks ● https://github.com/rk700/YAHFA ● http://d3adend.org/blog/?p=589 ● https://www.evilsocket.net/2015/05/01/dynamically-inject-a-shared-library-into- a-running-process-on-androidarm/ ● https://shunix.com/shared-library-injection-in-android/ ● https://github.com/evilsocket/arminject/ ● https://en.wikipedia.org/wiki/Address_space_layout_randomization ● https://www.youtube.com/watch?v=1S0aBV-Waeo ● https://www.nccgroup.trust/us/about-us/newsroom-and- events/blog/2015/september/code-injection-on-android/ ● http://resources.infosecinstitute.com/android-hacking-and-security-part-25- hooking-and-patching-android-apps-using-xposed-framework/#gref Ссылки

Slide 29

Slide 29 text

Заголовок ptsecurity.com Спасибо! Спасибо!