SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

52
Radare2 - от A до Z Radare2 воркшоп (4 часа) Anton Kochkov (@akochkov), Boris Ryutin (@dukebarman) 18 апреля 2016 г. SECON 2016

Transcript of SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Page 1: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Radare2 - от A до Z

Radare2 воркшоп (4 часа)

Anton Kochkov (@akochkov), Boris Ryutin (@dukebarman)

18 апреля 2016 г.

SECON 2016

Page 2: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Anton Kochkov

• Москва, Россия

• Хобби - реверс инжиниринг, языки и путешествия

• Участник R2 crew и евангелист radare2

• Security Code Ltd.

1

Page 3: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Boris Ryutin

• Санкт-Петербург, Россия

• Реверсер, blizzard фан

• Участник R0 crew (reverse4you) и евангелист radare2

• Автор журнала “Хакер”

• Digital Security

2

Page 4: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Краткий обзор radare2

Page 5: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Что такое radare2

• radare1 начат в 2006, radare2 в 2009

• Поддерживает много архитектур, OS, файловых форматов, etc

• 10 встроенных утилит

• CLI и Visual (TUI) режимы, GUI (bokken), WebUI

• 149 контрибьюторов со всего мира

• Участие в программе GSoC и проведение своей RSoC

3

Page 6: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Установка

• Правило 1: Всегда использовать версию из git!1

• Или использовать виртуальную машину (radare:radare /root:radare)

• git clone http://github.com/radare/radare2 && cd radare2&& ./sys/install.sh

• Для Windows лучше всего работает с Msys2 или ConEmu

1До выхода версии 1.0

4

Page 7: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты

Page 8: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты

• rax2

• rabin2

• rasm2

• radiff2

• rafind2

• rahash2

• radare2

• r2pm

• rarun2/ragg2/ragg2-cc

5

Page 9: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты

• rax2

• rabin2

• rasm2

• radiff2

• rafind2

• rahash2

• radare2

• r2pm

• rarun2/ragg2/ragg2-cc

6

Page 10: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты: rax2

rax2 — конвертер и калькулятор

$ rax2 10

0xa

$ rax2 33 0x41 0101b

0x21 65 0x5

$ rax2 -s 4142434445

ABCDE

$ rax2 0x5*101b+5

30

7

Page 11: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты

• rax2

• rabin2

• rasm2

• radiff2

• rafind2

• rahash2

• radare2

• r2pm

• rarun2/ragg2/ragg2-cc

8

Page 12: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты: rabin2

rabin2 — извлечение информации из бинарных файлов

$ rabin2 -e

Entrypoints

$ rabin2 -i

Shows imports

$ rabin2 -zz

Shows strings

$ rabin2 -g

Show all possible information

9

Page 13: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты

• rax2

• rabin2

• rasm2

• radiff2

• rafind2

• rahash2

• radare2

• r2pm

• rarun2/ragg2/ragg2-cc

10

Page 14: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты: rasm2

rasm2 — ассемблер и дизассемблер

$ rasm2 -a x86 -b 32 ’mov eax, 33’

ассемблирование

$ rasm2 -d 9090

дизассемблирование

$ rasm2 -L

вывести список загруженных плагинов

$ rasm2 -a x86 -b 32 ’mov eax, 33’ -C

Вывести в формате C-массива

11

Page 15: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты

• rax2

• rabin2

• rasm2

• radiff2

• rafind2

• rahash2

• radare2

• r2pm

• rarun2/ragg2/ragg2-cc

12

Page 16: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты: radiff2

radiff2 — утилита для бинарного сравнения

$ radiff2 original patched

Сравнение кода

$ radiff2 -C original patched

Сравнение с использованием graphdiff алгоритма

$ radiff2 -g main -a x86 -b32 original patched

Сравнение с генерацией графа функции

13

Page 17: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты: radiff2 — пример с генерацией графа

/bin/true /bin/false

14

Page 18: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты

• rax2

• rabin2

• rasm2

• radiff2

• rafind2

• rahash2

• radare2

• r2pm

• rarun2/ragg2/ragg2-cc

15

Page 19: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты: rafind2

rafind2 — утилита поиска и редктирования бинарной информации

$ rafind2 -X -s passwd dump.bin

Поиск строки “passwd”

16

Page 20: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты

• rax2

• rabin2

• rasm2

• radiff2

• rafind2

• rahash2

• radare2

• r2pm

• rarun2/ragg2/ragg2-cc

17

Page 21: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты: rahash2

rahash2 — утилита поблочного хэширования и шифрования

$ rahash2 -a all binary.exe

Отобразить хэши файла во всех алгоритмах

$ rahash2 -B -b 512 -a md5

Вычислить md5 для блоков в 512 байт

$ rahash2 -B -b 512 -a entropy

Вычислить энтропию для блоков в 512 байт

$ echo -n "admin" | rahash2 -a md5 -s "

Вычислить md5 для строки “admin”

18

Page 22: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты

• rax2

• rabin2

• rasm2

• radiff2

• rafind2

• rahash2

• radare2

• r2pm

• rarun2/ragg2/ragg2-cc

19

Page 23: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Командная строка

Page 24: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

1 команда <—>1 назначение

Для запоминания команд важно помнить:

1. Каждый символ в команде имеет своё значение (w = write, p =print)

2. Большинство команд представляют собой аббревиатуры pdf = p<->print d <->disassemble f <->function

3. Каждая команда имеет короткую помощь: cmd?, напримерpdf?,?, ???, ???, ?$?, ?@?

20

Page 25: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Команда # - хэш и скрипты

1. Откроем файл в radare2 radare2 file.exe

2. Распечатать короткую помощь: #? Usage: #algo <size>@ addr

3. Вывести список поддерживаемых алгоритмов ##

4. Расчет SHA1 #sha1

5. Расчет SHA1 с начала #sha1 @ 0

6. Расчет с размером блока равным размеру файла #sha1 $s @ 0x0

Аналог вызова rahash2 -a sha1 file.exe

21

Page 26: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Флаги

• Флаги используются для соответствия offset - имя флага: f?.

• Добавить функцию af+ (требует afb+)

• f. name @ offset добавить “локальный” флаг

• R2 работает с данными по-блочно. Изменить размер блокаможно командой ‘b’.

22

Page 27: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Команда ’i’ — общая информация

1. Получить короткую справку по команде i?

2. Аналог rabin2

3. izj для показа строк в секциях данных в виде JSON

4. Дополнительные команды: ,̃ ls, {}, @, . . .

23

Page 28: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Radare2 — использование команды pf

Небольшое демо

24

Page 29: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Radare2 - работа с типами командами t*

Небольшое демо

25

Page 30: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Radare2 — основные команды CLI режима

1. r2 -A или r2 затем aaa : анализ

2. s : перейти по адресу/смещению

3. pdf : вывести дизасм функции

4. af? : анализировать функцию

5. ax? : анализировать XREF

6. /? : поиск

7. ps? : вывод строк

8. C? : работа с комментариями

9. w? : запись данных

26

Page 31: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Radare2 — визуальный режим

Page 32: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Главные команды

1. V? : помощь по визуальному режиму

2. p/P : переключение между режимами

3. перемещение стрелками/hjkl

4. o : перейти по смещению

5. e : r2configurator

6. v : список функций

7. _ : HUD

8. V : ASCII граф

9. 0-9 : перейти по ссылке (функции)

10. u : вернуться назад (seek undo)

27

Page 33: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

ASCII граф

28

Page 34: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Radare2 - разбор простого x86 malware

Небольшое демо

29

Page 35: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Radare2 - разбор простого ARM malware

Небольшое демо

30

Page 36: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Radare2 — Отладка

Page 37: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Radare2 — Отладка

1. radare2 -d

2. переключиться в визуальный режим отладки: Vpp

3. горячие клавиши похожи на OllyDBG/IDApro

31

Page 38: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Утилиты

• rax2

• rabin2

• rasm2

• radiff2

• rafind2

• rahash2

• radare2

• r2pm

• rarun2/ragg2/ragg2-cc

32

Page 39: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

R2PM

R2PM — radare2 package manager

1. r2pm -s (вывести список доступных плагинов)

2. r2pm -i retdec

33

Page 40: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Виды отладки

• Локальная (нативная) отладка (r2 -d)

• Удаленная с помощью r2 agent (протокол rap://)

• Удаленная отладка по протоколу GDB

• Удаленная отладка по протоколу WinDBG

34

Page 41: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Режим “телескопирования”

• r2 можетпоказыватьссылки врегистрах илистеке

• очень удобнодлядинамическойотладки

• разрешаетсимволы,флаги, строки,etc.

• drr (регистры)pxr N @ esp/rsp(стек)

35

Page 42: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Команды отладчика

• d? - справка по командам

• db addr/flag - установка breakpoint

• dc[u] debug, continue [until]

• visual mode "?"c для курсора, b для breakpoints

• Останавливается на entry, не мэйн, "dcu entry0"перед стартоманализа.

36

Page 43: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Отладочные “профили”

• r2 -de dbg.profile=file.rr2 exec.elf

• или r2 -R file.rr2 exec.elf

• установать среду выполнения, переназначение stdin/out

• удобны для быстрой репродукции среды выполнения

37

Page 44: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Протокол GDB

Запустить gdbserver где-нибудь

И подсоединить r2 к нему:

• r2 -D gdb gdb://99.44.23.50:4589

38

Page 45: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Протокол GDB в Wine

Winedbg позволяет запускать Windows программы

Режим отладки при этом включает встроенный gdbserver:

• winedbg –gdb –no-start malware.exe

• r2 -a x86 -b 32 -D gdb gdb://localhost:44840

39

Page 46: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

WinDBG

r2 может подсоединяться к WinDBG/KD2

Например, для отладки ядра Windows через последовательный порт(VM):

• bcdedit /debug on

• bcdedit /dbgsettings serial debugport:1 baudrate:115200

И подсоединимся с помощью r2:

• r2 -a x86 -b 32 -D wind windbg:///tmp/windbg.pipe

На данный момент проверена работа с QEMU и VirtualBox

2r2windbg.

40

Page 47: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Скриптование

Page 48: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

The t command — types management

1. Get Usage on the command t?3

2. to to load the types from the C header file

3. tl link type to the memory, tf shows it like the pf

4. add j to get the output in the json format

3Radare2 types command (2014).

41

Page 49: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Searching GUIDs

1. We need r2pipe (python) for that #?4

2. . command to load the pipe script

3. >. search_guids.py

4. this script using the EFI guids list from the snarez’s repo5

4R2pipe API (2014).5ida-efiutils.

42

Page 50: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Документация

• Website: http://rada.re/

• Blog: http://radare.today

• Book: http://radare.gitbooks.io/radare2book/content

• Cheatsheet: https://github.com/pwntester/cheatsheets/blob/master/radare2.md

43

Page 51: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

References

Page 52: SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z

Список литературы I

Список литературы

R2pipe API (2014).Radare2 types command (2014).

44