31
Выживаем в недоверенной среде iOS Дмитрий Евдокимов, Аудитор по ИБ Digital Security

Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

  • Upload
    yandex

  • View
    1.544

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

Выживаем в недоверенной среде iOS

Дмитрий Евдокимов, Аудитор по ИБ Digital Security

Page 2: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

#whoami

Выживаем в недоверенной среде iOS

• Исследователь информационной

безопасности в Digital Security.

• Редактор рубрик в журнале

Xakep.

• Один из организаторов

конференций DEFCON Russia и

ZeroNights.

Специализируюсь на поиске уязвимостей

в бинарных приложениях без исходного

кода.

Page 3: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Agenda

Выживаем в недоверенной среде iOS

- Мир jailbreak

- Что делает jailbreak

- Механизмы безопасности iOS

- Обнаружение jailbreak

- Советы по защите приложений

Page 4: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Что такое Jailbreak?

Выживаем в недоверенной среде iOS

Jailbreak – специальная программа для снятия

некоторых ограничений безопасности

системы посредством эксплойтов.

Нужен:

- Разработчикам

- Обычным пользователям

- Исследователям ИБ

Page 5: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Apple о jailbreak

Выживаем в недоверенной среде iOS

http://support.apple.com/kb/HT3743

Page 6: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Сообщество о jailbreak

Выживаем в недоверенной среде iOS

Page 7: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Cat and mouse game

Выживаем в недоверенной среде iOS

Page 8: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Истории jailbreak-сцены

Выживаем в недоверенной среде iOS

Лица: iPhone Dev Team, Chronic Dev Team, George

Hotz, comex, pod2g, evad3rs + saurik

JB: PwnageTool, redsn0w, purplera1n, Spirit,

JailbreakMe, Absinthe, evasi0n

Jailbreak зависит от hardware и software

Jailbreak:

- Tethered

- Untethered

Page 9: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Жизнь после Jailbreak

Выживаем в недоверенной среде iOS

- Возможность доступа к ФС - Копирование/редактирование любого файла в системе

- Обход ограничений sandbox - Выход за пределы директории приложения

- Запуск неподписанных приложений - Запуск приложений не из App Store

Page 10: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Механизмы безопасности iOS на пути JB

Выживаем в недоверенной среде iOS

• Code Signing

- X.509v3 сертификат

• Sandboxing (Seatbelt)

- /var/mobile/Applications/<app-GUID>

- Нет доступа к другим процессам

- Отсутствие прямого доступа к железу устройства

- Невозможность динамически генерировать код

• Разделение привилегий

- Приложениями с правами mobile + Entitlements

Page 11: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Цепочка загрузки iOS

Выживаем в недоверенной среде iOS

Bootrom

LLB

iBoot

Kernel

System

Software

Apps

Режимы загрузки:

• Normal Boot

• DFU Mode

• Recovery Mode

Page 12: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Атака на цепочку iOS

Выживаем в недоверенной среде iOS

Bootrom

LLB

iBoot

Kernel

System

Software

Apps

Проверка подписи

Атака

sandbox

Page 13: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Общие этапы JB

Выживаем в недоверенной среде iOS

Попадание на

устройство

Запуск

неподписанного

кода

Поднятие

привилегий

Патчинг ядра Закрепление в

системе

Page 14: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Последствия: Изменения в ФС

Выживаем в недоверенной среде iOS

Изменение /etc/fstab

До: /dev/disk0s1 / hfs ro 0 1

/dev/disk0s2 /private/var hfs rw, nosuid, nodev 0 2

После: /dev/disk0s1 / hfs rw 0 1

/dev/disk0s2 /private/var hfs rw 0 2

NAND

FTL

Block device

/ /private/var

Page 15: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Последствия: Дополнительные утилиты

Выживаем в недоверенной среде iOS

Новые утилиты на устройстве: - Утилиты для работы JB

- Файлы самого JB

- Bundle

- Cydia

- Mobile Substrate

- …

+ Изменение: /var/mobile/Library/Caches/com.apple.mobile.installation.plist

Page 16: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Последствия: Прячем приложения

Выживаем в недоверенной среде iOS

Page 17: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Последствия: Ломаем песочницу

Выживаем в недоверенной среде iOS

Убирает проверки в Apple Mobile File Integrity Daemon Отвечает за проверку подписей

Вносит изменения в ядро iOS // выключаем MAC для процессов

security.mac.proc_enforce=0

// выключаем MAC для Vnode

security.mac.vnode_enforce=0

Page 18: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Последствия: Итоги

Выживаем в недоверенной среде iOS

• Появление новых файлов/директорий

• Измененные свойства

• Измененное поведения

Page 19: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Последствия: Угроза безопасности!

Выживаем в недоверенной среде iOS

• Проект iPhone-Espionage (https://github.com/milo2012/iPhone-Espionage)

• Keylogger

• Захват снимков экрана

• Перенаправление SMS

• Записи микрофона

• Отправка GPS-координат

• Вредоносное ПО из Cydia (?!)

• ZitMo, SpitMo, CitMo для JB iOS (?!)

Page 20: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Обнаружение JB: Зачем?

Выживаем в недоверенной среде iOS

1) Снизить риски

• Запретить запуск приложения

• Ограничить некоторый функционал

2) Не допустить обход ограничений, внесенных в код

3) Усложнить анализ приложения

Page 21: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Обнаружение JB: API

Выживаем в недоверенной среде iOS

- Jailbreak detection API с iOS 4.0

• Часть MDM API

• Данная возможность удалена с 4.2.1 (< 6 месяцев)

Page 22: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Обнаружение JB: Новые файлы

Выживаем в недоверенной среде iOS

- Cydia: /Applications/Cydia.app/

URI-схема cydia://

- Файлы за песочницей: /bin/bash

/Application/Preferences.app/General.plist

К другим приложениям типа /Applications/MobileMail.app

- Файлы от jailbreak: /private/var/stash

- Экзотика: SSH loopback connection

Обращение на 127.0.0.1 порт 22

Page 23: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Обнаружение JB: Изменение свойств

Выживаем в недоверенной среде iOS

- Права доступа на запись

- Размер /etc/fstab

- Обнаруживаем символические ссылки на /var/stash с:

/Applications

/Library/Ringtones

/Library/Wallpaper

/usr/arm-apple-darwin9

/usr/include

/usr/libexec

/usr/share

Page 24: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Обнаружение JB: Измененное поведение или целостность Sandbox

Выживаем в недоверенной среде iOS

- Пытаемся создать процесс за пределами jail fork()

popen()

- Вызов system()

0 – sandbox работает

1 – jailbreak

- Использование _dyld_image_count() и _dyld_get_image_name()

Page 25: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Пример

Выживаем в недоверенной среде iOS

DEMO

Page 26: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Обходы обнаружения jailbreak

Выживаем в недоверенной среде iOS

1) Редактирование бинарного файла

2) Использование MobileSubstrate

1) Проект XCon (http://theiphonewiki.com/wiki/XCon)

3) Игры во время выполнения программы (gdb, Cycript)

Page 27: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Рекомендации разработчикам

Выживаем в недоверенной среде iOS

- Техники антиотладки - ptrace(PT_DENY_ATTACH, 0, 0, 0);

- Флаг P_TRACED

- Техники анти-hooking - dladdr() вызов & Dl_info структура

- Inline функции __attribute__((always_inline));

- Обфускация кода/данных

- Переименовывать имена классов и методов

- Шифровать/динамически генерировать строки

- Обнаруживать jailbreak

- Использование различных техник обнаружения

Общие моменты:

- Распыление проверок по коду

- Использовать Си для критичных функций и функций безопасности

Page 28: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Рекомендации разработчикам: Защита от пиратства

Выживаем в недоверенной среде iOS

1) Проверка целостности исполняемого файла

• LC_ENCRYPTION_INFO

2) Проверка целостности метаданных приложения • iTunesMetadata.plist

• SC_Info

• Code Signing

• Info.plist

Page 29: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Материалы по теме

Выживаем в недоверенной среде iOS

1) Hacking and Securing iOS Applications, Jonathan

Zdziarski

2) iOS Hacker's Handbook, Charlie Miller, Dion

Blazakis, Dino DaiZovi, Stefan Esser, Vincenzo

Iozzo, Ralf-Philipp Weinmann

3) Mac OS X and iOS Internals: To the Apple's Core,

Jonathan Levin

Page 30: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Выводы

Выживаем в недоверенной среде iOS

1) Jailbreak – это великолепная цепочка эксплойтов

и техник

2) Jailbreak – это большая угроза безопасности

3) Наличие Jailbreak можно детектировать

4) Можно обходить методы детектирования

Jailbreak

Page 31: Дмитрий Евдокимов «Выживаем в недоверенной среде iOS»

© 2002—2013, Digital Security

Вопросы

Выживаем в недоверенной среде iOS

Контакты:

[email protected]

@evdokimovds