Пентестинг приложений iPhone – часть 1

Пентестинг приложений iPhone – часть 1

Цель статьи – рассмотреть всю методологию пентестинга приложений на реальном устройстве (под управлением iOS 5), а не на симуляторе.

Автор: satishb3

В данной статье рассматриваются приемы и инструменты, которые помогут специалистам в области информационной безопасности понять методы тестирования на проникновение (пентестинга) приложений iPhone. Цель статьи – рассмотреть всю методологию пентестинга приложений на реальном устройстве (под управлением iOS 5), а не на симуляторе.

Вводная информация

Со времени появления iPhone Apple продала более 110 миллионов экземпляров данного устройства. Платформа этого смартфона открыла новое поле для бизнеса, и компании стали создавать мобильные версии своих услуг, чтобы их пользователи могли легко и быстро получать к ним доступ. Поскольку по производительности iPhone сравним с ноутбуком, приложения iPhone решают широкий круг задач: от работы и обучения до развлечений и игр.

iPhone предоставляет программистам платформу для разработки трех типов приложений.

  1. Веб-приложения – используют технологии JavaScript, CSS и HTML5
  2. Нативные iOS-приложения – разрабатываются на Objective-C и используют Cocoa touch API
  3. Гибридные приложения – нативные приложения со встроенными веб-элементами

Данная статья посвящена методологии пентестинга нативных iOS-приложений. Однако, некоторые рассмотренные здесь методы могут применяться и к в веб-приложениям iOS.

Модели распространения приложений

Разработчики iOS используют среду Apple Xcode и тестируют свои приложения на симуляторе iOS. Симулятор создает лишь приближенное подобие операционной системы, в котором отсутсвуют многие возможности и функции, доступные на реальных устройствах. Симулятор iOS компилирует iOS-приложения в локальный нативный код в отличие от эмулятора Android, который компилирует приложения в ARM-инструкции. Хотя симуляторы предоставляют основные возможности для разработки и тестирования, для многих приложений, требующих использования всей мощи оборудования, максимальной производительности и всех доступных на реальных устройствах функций, средств симулятора оказывается недостаточно. Чтобы протестировать такие приложения на реальных устройствах, разработчикам приходится подписываться на программу разработчиков iOS (iOS Developer Program), ведь iPhone разрешает запускать только код, подписанный Apple. Механизм принудительного подписывания кода, реализованный в iOS, требует, чтобы весь нативный код, выполняемый на устройстве, был подписан известным или доверенным сертификатом. Участнику программы разработчиков Apple выдает подписанный профиль (provisioning profile), который используется для настройки системы и разрешает выполнение кода, подписанного сертификатом разработчика. Разработчики могут подписаться на программу индивидуально, либо от имени компании или учебного заведения.

На основе профиля можно выделить 5 моделей распространения приложений.

Распространение в пределах одного устройства:

Профиль разработчика (development) привязан к уникальному идентификатору устройства, UUID. Этот профиль позволяет запускать приложения разработчика на одном конкретном устройстве. На других устройствах этот профиль не имеет силы. Данная модель используется для тестирования на единственном устройстве.

Распространение Ad Hoc:

Профили Ad Hoc привязаны к уникальным идентификаторам группы из не более, чем ста устройств. Помимо iPhone, в группу могут входить устройства iPad и iPod touch. Разработчик должен предоставить идентификаторы устройств в процессе получения подписки. Эта модель позволяет разработчикам тестировать свои приложения на широком диапазоне устройств.

Распространение внутри фирмы (in-house):

Корпоративные профили позволяют установку приложений на устройства без привязки к UUID. Данная модель, как правило, используется компаниями для распространения приложения между своими сотрудниками.

Распространение "по воздуху" (Over the air):

Данная модель позволяет разработчикам компании передавать приложения отдельным пользователям своей организации через e-mail или выкладывая приложение на веб-сервер. Главная проблема данного типа распространения в том, что если кто-то, не имеющий отношения к данной организации, получит доступ к ссылке, он тоже сможет установить соответствующее приложение.

Распространение через App Store:

Это централизованный механизм распространения приложений с подписью Apple. Разработчик отправляет приложение на сервер Apple, после чего Apple проверяет приложение на соответствие стандартам App Store. После подтверждения соответствия стандартам Apple переподписывает приложение своим сертификатом и делает возможным его загрузку через App Store.

Тестирование на проникновение

Данный раздел в большей степени посвящен iOS-приложениям, а не операционной системе iPhone. Тем не менее, безопасность ОС и безопасность приложений iPhone взаимосвязаны. Поэтому понимание платформы iOS и методов обеспечения ее безопасности поможет пентестерам должным образом оценить безопасность приложений iPhone.

В ходе оценки безопасности приложения iPhone стоит проанализировать:

  • Трафик приложения
  • Проблемы приватности
  • Локальное хранилище данных
  • Кэширование
  • Реверс-инжиниринг
  • Неуправляемый код
  • URL-схемы
  • Push-уведомления

Подготовка:

Симулятор не воссоздает точную копию среды устройства, и поэтому все методы пентестинга, изложенные в данной статье, подразумевают запуск на физическом устройстве. Все дальнейшие демонстрации будут проводиться на iPhone 4 под управлением iOS 5.

Чтобы осуществить тестирование на проникновение, понадобится установить на устройство несколько утилит. Apple не одобряет использование данных инструментов. Ограничения, связанные с принудительной подписью кода, не позволят установить требуемые утилиты напрямую. Чтобы обойти ограничения, придется выполнить джейлбрейк устройства. Джейлбрейк даст полный доступ к устройству и позволит нам запускать не подписанный Apple код. После джейлбрейка требуемые неподписанные приложения можно скачать с Cydia.

Cydia – это аналог App Store для неподписанных приложений. Джейлбрейк подвергает ваш iPhone большому риску, поскольку устройство теперь позволяет запуск любого приложения, не одобренного Apple: среди таких приложений могут оказаться и вредоносные. Хотя мы можем оценить безопасность приложения на не подвергшемся джейлбрейку iPhone, оценка в таком случае будет неполной. Джейлбрейк облегчает работу пентестера и помогает обеспечить стопроцентное покрытие приложения.

Для джейлбрейка iPhone можно использовать инструменты вроде Pwnage, readsn0w и greenposi0n.

Инструменты для пентестинга:

Загрузите из Cydia и установите перечисленные ниже приложения:

  • OpenSSH – позволяет подключаться к iPhone по SSH
  • Adv-cmds – содержит набор команд для работы с процессами: ps, kill, finger...
  • Sqlite3 – клиент базы данных Sqlite
  • GNU Debugger – отладчик для анализа во время выполнения и реверс-инженерии
  • Syslogd – средство просмотра журналов iPhone
  • Veency – средство удаленного управления iPhone с рабочей станции (на которой должен стоять veency-клиент)
  • Tcpdump – захват сетевого трафика телефона
  • com.ericasadun.utlities – утилиты для просмотра файлов plist
  • Grep – утилита для поиска
  • Odcctools: otool – утилита для просмотра объектных файлов
  • Crackulous – расшифровщик приложений iPhone
  • Hackulous – установщик расшифрованных приложений

На iPhone нет терминала для просмотра структуры папок. Установив OpenSSH, мы можем соединяться с SSH-сервером телефона через любой SSH-клиент (Putty, CyberDuck, WinScp и т. п.). Это дает нам возможность перемещаться по папкам файловой системы iPhone и запускать команды. По умолчанию на iPhone два пользователя: mobile и root. Все приложения, установленные на телефоне, запускаются с правами пользователя mobile. Но, используя SSH, мы можем войти от имени root и получить полный доступ к устройству. По умолчанию оба аккаунта (и root, и mobile) имеют пароль "alpine".

Заметим, что в целях безопасности SSH-пароль на вашем устройстве следует сменить.

Если ваш iPhone и ваша рабочая станция подключены к одной сети Wi-Fi, вы можете войти в iPhone по SSH напрямую, введя в терминале рабочей станции IP-адрес и логин/пароль.

Получение SSH-доступа к iPhone через Wi-Fi:

ssh root@iPhoneIP
password: alpine

В противном случае вы все равно сможете получить SSH-доступ, но вам понадобится USB-кабель и приложение iPhone tunnel (которое можно скачать здесь: http://code.google.com/p/iphonetunnel-usbmuxconnectbyport/).

SSH to iPhone over USB cable –

Получение SSH-доступа к iPhone через USB:

./iphone_tunnel -lport 2222 ssh -p 2222 root@127.0.0.1 password : alpine

После установки SSH-соединения мы сможем запускать команды на iPhone напрямую. Поскольку iOS – не что иное, как урезанная версия MacOS, на iPhone работают многие команды MacOS.

Анализ трафика приложения

Пентестинг приложений iPhone не слишком отличается от пентестинга приложений других платформ, поскольку клиентские приложения здесь тоже взаимодействуют с серверными компонентами по сети, используя некоторые сетевые протоколы. Соответственно, он включает в себя сетевой пентестинг и пентестинг веб-приложений. Главной целью анализа трафика является поиск уязвимостей в захваченном сетевом трафике.

Приложения iPhone могут передавать данные на сервер, используя любой из следующих механизмов обмена информацией:

  • Передача данных открытым текстом, например, по протоколу http
  • Зашифрованный канал, например, https
  • Специальные протоколы или низкоуровневые потоки

Хотя на дворе 2013 год, многие приложения все еще используют протоколы вроде http, в которых информация передается в незащищенном виде. В общем случае мобильные приложения более уязвимы к MITM-атакам (атакам типа "человек-посередине"), поскольку, как правило, передают данные по Wi-Fi. Злоумышленник, который имеет доступ к той же точке Wi-Fi, может использовать инструменты вроде FireSheep для похищения сессий пользователя. Поскольку протоколы передачи незащищенной информации уязвимы к MITM-атакам, приложения, передающие конфиденциальные данные, должны использовать защищенные протоколы, например, https. В ходе пентестинга необходимо выяснить, передает ли приложение какую-либо конфиденциальную информацию в незашифрованном виде. Чтобы осуществить захват трафика, нужно поменять на iPhone настройки прокси-сервера. Данные настройки позволят пропускать трафик телефона через указанный прокси-сервер.

Настройка прокси

На последующих снимках экрана показано, как заставить iPhone пропускать весь трафик через рабочую станцию с IP-адресом 192.168.1.4, выступающую в роли прокси.

  1. Зайдите в приложение настроек
  2. Включите Wi-Fi
  3. Выберите сеть и нажмите на соответствующую выбранной сети синюю стрелку
  4. Выберите опцию "Manual" и введите IP прокси-сервера (в данном случае – 192.168.1.4)
  5. На вашей рабочей станции откройте Open Burp Suite и зайдите во вкладку Proxy->Options. Добавьте прослушиватель прокси в котором отключите опцию "loopback only", включите "support invisible" и укажите порт 8080.
  6. Теперь весь HTTP-трафик iPhone, генерируемый как веб-браузером, так и другими приложениями, будет направляться на вашу рабочую станцию и отображаться в окне Burp Suite.

Отметим, что в качестве альтернативы burp можно использовать Charles proxy.

Данные настройки прокси работают и для https-трафика. Однако захват https-трафика приложений iPhone представляет более сложную процедуру. При общении по протоколу SSL приложения, созданные на основе браузера, автоматически проверяют сертификат сервера. Однако, в нативных приложениях iOS ответственность за проверку сертификатов сервера лежит на разработчике. Ошибки в коде проверки сертификатов могут привести к тому, что приложение будет принимать любой сертификат. Атакующий может воспользоваться такой уязвимостью для проведения MITM-атаки на основе поддельных сертификатов.

Одной из распространенных ошибок, возникающих при разработке приложений iPhone, является вызов метода allowanyhttpscertificateforhost (NSURLRequest) или continueWithoutCredentialForAuthenticationChallenge (NSURLConnection). Приложения, использующие данные функции, будут принимать любой сертификат, в том числе выпущенный не целевым сервером. Причем пользователи приложения даже не увидят соответствующего предупреждения. Поэтому в ходе пентестинга нужно выяснить, проверяет ли приложение сертификаты должным образом. При надлежащей проверке в случае получения некорректного сертификата приложение отображает сообщение об ошибке. Кроме того, после получения некорректного сертификата приложение не даст пользователю продолжить работу.

Чтобы захватывать SSL-трафик приложений в ходе пентестинга, прежде всего нужно добавить CA-сертификат прокси-сервера в список доверенных сертификатов iPhone. Поскольку данный сертификат становится доверенным, приложение не будет отображать сообщение об ошибке при его получении, что позволит нам захватывать его https-трафик. Подобный метод применим и к другим протоколам, использующим цифровые сертфикаты.

Данное видео демонстрирует захват https-трафика приложения.

Помимо протоколов http и https, приложения iPhone могут использовать менее распространенные протоколы или низкоуровневый API обмена информацией через сокеты (NSStreams, CFStreams). В этих случаях MITM-методы, упомянутые выше, для захвата трафика не применимы. Чтобы захватить трафик таких приложений, загрузите с Cydia и установите утилиту tcpdump. После установки tcpdump запустите данные команды для подключения к iPhone по SSH и записи захваченного трафика в файл с расширением pcap.

ssh root@iphone-IP
password: alpine
tcpdump –w traffic.pcap

Далее подключитесь к iPhone с помощью SSH-клиента с графическим интерфейсом вроде Cyberduck. Перейдите в нужную папку и скопируйте недавно созданный файл с расширением pcap на свою рабочую станцию. Откройте файл в перехватчике пакетов, например, в Wireshark. Теперь вы можете проанализировать трафик и определить используемый протокол. Те же методы можно использовать для приложений, которые игнорируют настройки прокси. Для перенаправления трафика таких приложений можно использовать DNS-спуфинг.

Настроив захват трафика, можно приступать к пентестингу серверной части приложения: искать SQL-инъекции, недостатки аутентификации, авторизации, управления сессиями, шифрования и множество других уязвимостей, специфичных для веб-приложений.

Это первая часть серии статей о пентестинге приложений iPhone. Во второй части я рассмотрю проблемы приватности и локального хранилища данных.

Домашний Wi-Fi – ваша крепость или картонный домик?

Узнайте, как построить неприступную стену