В последнее время появилось достаточно много сообщений об уязвимостях в мобильных приложениях для Android и IOS, связанных с протоколом SSL/TLS. Предупреждения о возможной небезопасности мобильных приложений еще в прошлом году (2014) опубликовали компании CERT и FireEye. Открытый проект обеспечения безопасности веб-приложений (OWASP, сокращенно от Open Web Application Security Project) в 2014 году составил список топ-10 проблем в безопасности мобильных приложений, среди которых
"недостаточная защита транспортного уровня" заняла
третью позицию.
Приложения, не использующие
SSL сертификат, - особенно уязвимы, учитывая тот факт, насколько просто можно прочитать или изменить информацию, передаваемую, например, через незащищенные хот-споты Wi-Fi. Но даже приложения, которые используют протокол SSL/TLS, должны осуществить надлежащую проверку, чтобы убедиться, что злоумышленники не смогут воспользоваться слабыми сторонами приложений.
SSL уязвимости в популярных приложениях Android
Год назад
компания FireEye исследовала 1000 наиболее скачиваемых бесплатных Android приложений из Google Store. Оказалось, что 674 мобильных приложения, а это около 68%, имели хотя бы одну из исследуемых компанией уязвимостей:
- Использование траст менеджеров, которые не проверяют SSL сертификаты: из 614 приложений, работающих по протоколу SSL/TLS, 448 (около 73%)приложений не проверяют SSL сертификаты.
- Использование собственных сервисов по проверке имен хоста, которые на самом деле не проверяют имена хостов: 50 мобильных приложений (около 8%)
- Игнорирование ошибок SSL в Webkit: из 285 мобильных приложений, которые используют Webkit, 219 (а это около 77%) игнорируют ошибки SSL, которые показываются в системе.
Впоследствии FireEye проанализировали 10 000 случайно выбранных мобильных приложений на Google Play и выяснили следующее:
- Около 4000 Android приложений (40%) используют траст менеджеры, которые не проверяют SSL сертификат сервера, тем самым открывая доступ потенциальным мошенникам к информации, которой они обмениваются.
- Около 750 Android приложений (что составляет 7%) используют сервисы проверки имени хоста, которые на самом деле их не проверяют, что означает их неспособность распознать атаки с перенаправлением, в которых мошенник перенаправляет запрос сервера на свой сервер, используемый в мошеннических целях.
- 1300 (13%) Android приложений, как выяснилось, не проверяют ошибки SSL при использовании Webkit.
Мобильные приложения и SSL уязвимости в библиотеках
Одно из недавних исследований показало, что тысячи мобильных приложений все еще используют устаревшую версию
библиотеки OpenSSL, которая уязвима к атаке FREAK. О похожей проблеме сообщили создатели известной библиотеки по работе с сетями для мобильных приложений
AFNetworking, когда они обнаружили критическую уязвимость в библиотеке:
SSL пиннинг был настроен так, что проверка SSL сертификатов оказалась полностью отключенной. И хотя в обеих случаях уязвимости были быстро исправлены, тысячи мобильных приложений остаются уязвимыми, пока их разработчики не перекомпилируют приложения с новыми версиями AFNetworking или OpenSSL, а пользователи не установят новые версии мобильных приложений.
Так как уязвимости находились в библиотеках приложений, а не в операционной системе, поставщики смартфонов не могли откорректировать их автоматически. Учитывая то, насколько медленно пользователи обновляют мобильные приложения, вполне возможно, что уязвимые приложения будут использоваться еще долгое время. Причинами ошибок в написании кода, связанного с протоколом SSL/TLS, может быть незнание или ошибочное предположение, что платформа или библиотека все сделает верно. Иногда проверки SSL/TLS отключают на время разработки или отладки, а потом просто забывают их снова включить перед выпуском приложения в свет.
Проверка SSL сертификата в мобильном приложении
Разработчики не должны полагаться на интуицию. Существуют некоторые хорошие сервисы, которые позволяют проверить, как мобильное приложение будет вести себя в случае MITM-атаки. Одно из них –
Tapioca от CERT, которое было описано в
этой статье (на английском). Приложение или библиотека, которые работают с SSL сертификаты, должны проводить ряд проверок, чтобы обеспечить должный уровень аутентификации, конфиденциальности и целостности.
При условии правильного использования, SSL/TLS протокол предоставляет надежный уровень защиты информации (т.е. ее аутентификации, целостности и конфиденциальности) при передаче ее между двумя сторонами. Тем не менее, без соответствующих проверок данные могут незаметно попадать в руки мошенникам.
Чтобы SSL/TLS соединение гарантированно обеспечивало безопасность в мобильных приложениях, все приложения, работающие с SSL/TLS вне браузера, должны в обязательном порядке выполнять действия, описанные в данном
документе (на английском языке).