Безопасность IOS-приложений (часть 18) – детектирование собственных сигнатур при помощи Introspy

Безопасность IOS-приложений (часть 18) – детектирование собственных сигнатур при помощи Introspy

В предыдущей статье мы использовали Introspy для анализа IOS-приложений по методу черного ящика. В этой статье мы рассмотрим настройку собственных сигнатур, а также их обнаружение во время работы приложения.

Автор: Пратик Джианчандани (Prateek Gianchandani)

В предыдущей статье мы использовали Introspy для анализа IOS-приложений по методу черного ящика. В этой статье мы рассмотрим настройку собственных сигнатур, а также их обнаружение во время работы приложения. Использование собственных сигнатур может быть полезным в тех случаях, когда вы обнаружили интересный метод, используемый в конкретном приложении, и теперь хотите найти другие места, где вызывается этот метод. В Introspy уже есть перечень предопределенных сигнатур, которые используются для обнаружения потенциальных уязвимостей или небезопасных конфигураций. Однако вы можете добавлять и свои собственные сигнатуры.

Предопределенные сигнатуры находятся в файле signatures.py, который можно найти в папке анализатора.

Click to Enlarge

Рисунок 1: Содержимое файла signatures.py

Из Рисунка 1 видно, что сигнатура состоит из заголовка, описания, уровня угрозы и фильтра, который состоит из вызываемых методов, соответствующих этой сигнатуре. Давайте рассмотрим простейшую сигнатуру.

Рисунок 2: Параметры одной из сигнатур

В данном случае сигнатура проверяет, использует ли приложение Pasteboards или нет. Pasteboards весьма небезопасны поскольку позволяют приложения копировать данные из Pasteboard для собственных нужд. Таким образом, использовать эту сигнатуру целесообразно. Из Рисунка 2 видно, что фильтр состоит из двух значений: classes_to_match и methods_to_match. Также в сигнатуре можно определить параметр args_to_match. Из описания сигнатуры совершенно очевидно, что следующие реализации методов будут соответствовать описанию сигнатуры.

  • UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
  • UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"XYZ" create:YES];
  • UIPasteboard *pasteboard = [UIPasteboard pasteboardWithUniqueName];

Еще одна сигнатура, показанная на рисунке ниже, проверяет методы, которые обходят проверку учетных данных во время соединения с удаленным сервером. Такое случается, когда вы используйте самоподписанный SSL-сертификат и хотите всегда доверять ему без каких-либо проверок.

Рисунок 3: Сигнатура, проверяющая методы, которые обходят проверку учетных данных

Для обнаружения любого метода из библиотеки LibC установите значение C у атрибута classes_to_match.

Рисунок 4: Сигнатура для обнаружения слабого генератора случайных чисел

Теперь рассмотрим сигнатуру, у которой в фильтре установлены аргументы. Объявить фильтр можно при помощи трех классов (ArgumentsFilter, ArgumentsNotSetFilter или ArgumentsWithMaskFilter), которые можно найти в файле Filters.py. Ниже показано несколько скриншотов из файла, в котором находятся вышеупомянутые классы.



Рисунок 5: Объявления классов, позволяющих детектировать методы по аргументам

На рисунке ниже показаны сигнатуры, которые детектируют случаи, когда данные записываются в keychain без надлежащей степени защиты (secure protection domain). В этих сигнатурах используются два вида фильтров: ArgumentsFilter и ArgumentsNotSetFilter. ArgumentsFilter используется для нахождения небезопасных степеней защиты, а ArgumentsNotSetFilter для случаев, когда происходит запись данных без установки атрибута доступа (в этом случае устанавливается kSecAttrAccessibleAlways, то есть эти записи в keychain будут доступны всегда).

Click to Enlarge

Рисунок 6: Сигнатуры, в которых используется фильтры по аргументам

Теперь создадим собственную сигнатуру в файле signature.py, при помощи которой будем находить случаи, когда кто-либо пытается считать строку, сохраненную в NSUserDefaults.

Рисунок 7: Добавление собственной сигнатуры

Теперь запустите скрипт introspy.py (в качестве аргумента укажите уже сохраненную базу данных).

Рисунок 8: Запуск анализатора

В сформированном отчете в разделе Potential Findings вы увидите, что сигнатура была обнаружена во множестве различных мест.

Рисунок 9: Места, которые соответствую шаблону собственной сигнатуры

Заключение

В этой статье мы научились использовать собственные сигнатуры в Introspy. Для статического анализа приложений подобные сигнатуры могут быть весьма полезны, если вы хотите отследить специфические методы, которые использует приложение.

Ссылки

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

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