Екатерина Трошина, ведущий эксперт по анализу кода Центра информационной безопасности компании «Инфосистемы Джет»Екатерина Трошина, ведущий эксперт по анализу кода Центра информационной безопасности компании «Инфосистемы Джет»

Мобильные приложения для банков сегодня – это уже не просто конкурентное преимущество, а неотъемлемая часть инфраструктуры ведения бизнеса. Бизнес требует добавления все большего и большего функционала в мобильные приложения, а разработчики и служба информационной безопасности не успевают качественно отвечать его запросам. В результате мобильный банк хранит множество сюрпризов. Учитывая то, что платформа Android сама по себе «помогает» вносить дыры в код, исходный код легко восстанавливается, а аудитория пользователей значительна, знания, о чем молчит мобильный Android-банк, могут быть весьма полезны не только службе информационной безопасности.

Дефекты кода не спрячешь

Казалось бы, разработали Android-приложение, выложили запускаемый *.apk-файл в Play Store, «спрятали» исходные коды у разработчиков, и можно спать спокойно. Дефекты кода можно обнаружить только динамическими тестами на проникновение, а это сложно, это умеют делать далеко не все, и вообще это определенная магия, доступная только избранным. Другое дело, когда у тебя есть исходный код, где все дефекты налицо, надо только правильно этот код прочитать. Но исходный код-то недоступен.

Это так и не так одновременно. Особенность Android-приложения по сравнению с его «братом» iOS-приложением в том, что Android разрабатывается на языке программирования Java, который относится к интерпретируемым языкам, и исходный код достаточно точно восстанавливается из byte-кода. Этот byte-код обычно в чистом виде хранится в *.apk-файле, который мы загружаем из Play Store. iOS-приложения разрабатываются на компилируемом языке программирования Objective-C. Во время компиляции программы в исполняемый файл, который загружается из Apple Store, разрушается много значимой информации, поэтому восстановить исходный код для iOS-приложения – очень непростая задача.

Восстановить исходный код для Android-приложения можно любым Java-декомпилятором, они доступны каждому.

Секреты Android-приложений

В процессе разработки инструментального средства автоматического анализа мобильных приложений для Android-платформы мы протестировали более 30 банковских приложений, загруженных из Play Store. Ниже мы приводим наиболее интересные уязвимости, которые были замечены.

Недостаточная проверка подлинности сертификата сервера. Приложения используют политику проверки сертификата веб-сервера без обязательного требования подписания сертификата корневым центром и не осуществляют привязку сертификата веб-сервера. Такая проверка сертификата является небезопасной. В частности, приложения являются уязвимыми к атакам типа «человек посередине», например, при создании злоумышленником беспроводной точки доступа стандарта IEEE 802.11 (Wi-Fi), к которой затем подключается пользователь мобильного устройства.

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

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

Отсутствие методов двухфакторной авторизации. В процессе аутентификации пользователя в контексте веб-сервиса не используются методы двухфакторной аутентификации. Их использование является рекомендованной практикой в контексте разработки сервисов, к которым предъявляются повышенные требования безопасности.

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

Передача аутентификационных данных в открытом виде. В процессе аутентификации пользователя в контексте сервиса данные аутентификации передаются в открытом виде по недостаточно защищенному каналу связи. В случае если данные HTTPS-запроса будут перехвачены злоумышленником, он получит доступ к данным аутентификации пользователя. Рекомендованной практикой является передача хеш-суммы пароля.

Излишняя беспечность. Часто не уделяется должного внимания вспомогательным сервисам, предоставляемым мобильными Android-банками. Например, новости могут храниться в базе данных SQLite без применения методов шифрования.

При наличии у злоумышленника доступа к файловой системе возможно добавление ложных новостей (например, со ссылками на сайт, имитирующий сайт банка), которые пользователь будет считать доверенными новостями компании. Также зачастую доступ к веб-ресурсам в разделах новостей и справочной информации осуществляется по небезопасному протоколу передачи данных HTTP. Злоумышленник может подменить запрос пользователя, заменив адрес запрашиваемого веб-ресурса.

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

Такая атака под силу злоумышленникам с низким уровнем квалификации, и ее реализация не трудоемка.

Небезопасное использование возможностей межпроцессного взаимодействия. Мобильные Android-банки регистрируют обработчики широковещательных сообщений, доступных для взаимодействия с другими мобильными приложениями. Вредоносное приложение, содержащее такой код, может форсировать отказ в обслуживании. Результатом его работы может быть отказ в обслуживании и Android-банка. Помимо этого, вредоносные приложения, исполняющиеся на мобильном устройстве пользователя, могут существенным образом влиять на работу мобильного приложения через интерфейсы межпроцессного взаимодействия посредством широковещательных сообщений.

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

Помимо этого, многие мобильные Android-банки не осуществляют проверку целостности исходного пакета приложения. Пакет мобильного приложения может быть произвольным образом изменен злоумышленником и загружен в хранилище Android-приложений под видом «правильного» приложения. Если проверка целостности пакета отсутствует, реализация такой атаки становится легкой и доступной злоумышленникам даже с низким уровнем квалификации.

Требования бизнеса или требования ИБ – что важнее?

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