Перейти к содержанию

Приложение не запрещает использование пользовательских клавиатур

Критичность: ИНФО
Способ обнаружения: DAST

Описание

Сегодня существует так много клавиатур от сторонних производителей, что вы можете менять их каждый день и никогда не останавливаться. Некоторые предлагают лучшее предсказание слов, другие разные шрифты, скины и плавный ввод на разных языках. Но у большинства есть одна общая черта: чтобы иметь возможность реализовывать весь функционал, расширение клавиатуры просит пользователя «Разрешить полный доступ» в настройках. Большинство пользователей согласятся, не раздумывая. Предоставление полного доступа клавиатуре позволяет ей устанавливать интернет-соединения и получать доступ к системным ресурсам. Вот почему такие организации, как OWASP или ENISA, подчеркивают в своих руководствах, что приложения должны блокировать сторонние клавиатуры.

Специальные клавиатуры могут легко получить доступ к данным пользователей и отправлять эти данные на сервера злоумышленников. Помимо этого они могут использовать механизм Named Pasteboards и многие другие способы для той же цели.

Статистика использования сторонних клавиатур говорит сама за себя — они популярны.

И это только самые известные, другие расширения клавиатуры, такие как Go Keyboard, Touchpal, Minuum, Themeboard и сотни других, доступны после ввода слова «клавиатура» в строке поиска AppStore.

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

iOS имеет функцию безопасности, которая блокирует появление пользовательских клавиатур в заданном поле ввода (т. е. пароля). Чтобы пользователь не переключился на стороннюю клавиатуру, используйте поле SecureTextEntry, так как оно автоматически переключается на системную клавиатуру; предоставление OpenAccess не имеет значения — в любом случае будет использоваться системная клавиатура.

Примечание

В случае возникновения уязвимости «Приложение не запрещает использование пользовательских клавиатур» необходимо дополнительно убедиться в наличии данного кода в приложении, так как сделать это средствами динамического анализа или при помощи дизассемблирования не представляется возможным. Система видит, что присутствует метод AppDelegate, но что именно находится внутри, проверить нет возможности.

Другое решение — полностью отключить использование любых расширений клавиатуры в приложении. Для этого откажите в разрешении на использование расширений приложения на основе UIApplicationKeyboardExtensionPointIdentifier с помощью метода application:shouldAllowExtensionPointIdentifier. Когда приложение реализует этот механизм, пользователи не смогут использовать стороннюю клавиатуру ни в одном поле приложения.

Для этого в код AppDelegate необходимо добавить опцию.

func application(application: UIApplication, shouldAllowExtensionPointIdentifier extensionPointIdentifier: String) -> Bool {
    if extensionPointIdentifier == UIApplicationKeyboardExtensionPointIdentifier {
        return false
    }
    return true
}
Для Swift 4.

func application(_ application: UIApplication, shouldAllowExtensionPointIdentifier extensionPointIdentifier: UIApplicationExtensionPointIdentifier) -> Bool {
    if extensionPointIdentifier == UIApplicationExtensionPointIdentifier.keyboard {
        return false
    }
    return true
}

Ссылки

  1. https://www.securing.pl/en/third-party-iphone-keyboards-vs-your-ios-application-security/
  2. https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623122-application
К началу