Критичность: СРЕДНИЙ
Способ обнаружения: DAST, API

Описание

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

Хотя в Xcode по умолчанию включены все функции защиты, рекомендуется дополнительно проверить параметры компиляции.

Возможно использование следующих функций:

  • ARC — автоматический подсчет ссылок  (функция управления памятью), при необходимости добавляет сообщения о сохранении и освобождении;

  • Stack Canary — помогает предотвратить атаки переполнения буфера;

  • PIE — Position Independent Executable — включает полную ASLR;

 

Рекомендации

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

Automatic reference counting

Automatic reference counting (автоматический подсчет ссылок) — отслеживание и управление памятью вашего приложения. В большинстве случаев это означает, что управление памятью «просто работает» и не нужно думать о самостоятельном управлении памятью. ARC автоматически освобождает память, которая использовалась экземплярами класса, когда эти экземпляры больше не нужны.

"Targets"  >  "Build Settings“ > "Objective-C Automatic Reference Counting"  = “YES”
Stack smashing protection

Stack smashing protection — это техника для защиты от атаки переполнения стека.

Помещаем случайное значение (stack canary) перед локальными переменными в стеке. Stack canary проверяется после возвращения из функции. В случае переполнения – значение canary будет другим или будет отсутствовать, что приведет к срабатыванию защиты.

"Targets" > "Build Settings“ > " Other C Flags " > “-fstack-protector-all”
ASLR (Address space layout randomization)

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

Технология ASLR создана для усложнения эксплуатации нескольких типов уязвимостей. Например, если при помощи переполнения буфера или другим методом атакующий получит возможность передать управление по произвольному адресу, ему нужно будет угадать, по какому именно адресу расположен стек, куча или другие структуры данных, в которые можно поместить код.

"Targets"  >  "Generate Position-Dependent Code“ = "NO"
"Targets"  >  "Don't Create Position Independent Executables “ = "NO"

На картинке ниже наглядно показано, как размещаются данные приложения в памяти с использованием рандомизации и без неё:

ASLR (Address space layout randomization)
Предыдущая Небезопасная конфигурация App Transport Security
Содержание: