Upload
yandex
View
362
Download
2
Embed Size (px)
DESCRIPTION
При работе с мобильным приложением любой пользователь рассчитывает на то, что его данные передаются на сервер безопасно и никто, кроме него, не получит к ним доступ. Поэтому одна из главных задач мобильной разработки — обеспечить безопасное взаимодействие приложения с сервером. Безопасное клиент-серверное взаимодействие предотвращает сразу множество возможных атак. Как же избежать самых распространенных ошибок? Как сделать так, чтобы никто не мог вмешаться в канал передачи данных? Об этом вы узнаете из моего доклада.
Citation preview
Безопасные связи
Дмитрий Евдокимов Директор исследовательского центра Digital Security
© 2002—2014, Digital Security
#whoami
Безопасные связи
• Исследователь информационной безопасности в Digital Security Research Group
• Редактор рубрик в журнале Xakep
• Один из организаторов конференций DEFCON Russia и ZeroNights
• Специализируюсь на поиске уязвимостей в бинарных приложениях без исходного кода
• Анализ мобильных приложений для Android, iOS, WindowsPhone
• Докладчик на конференциях в Польше, Франции, Германии, ОАЭ 2
© 2002—2014, Digital Security
Исследования
3
Безопасные связи
Безопасные связи
© 2002—2014, Digital Security
M3 – Insufficient Transport Layer Protecqon
5
Безопасные связи
© 2002—2014, Digital Security
Атака “MitM”
При контролировании канала передачи данных между приложением и сервером злоумышленник может
производить любые манипуляции
• Подключение пользователя к поддельной Wi-‐Fi-‐точке доступа
• Подключение к поддельной базовой станции оператора
• Использование зараженного сетевого оборудования
• …
6
Безопасные связи
© 2002—2014, Digital Security
Вредоносные SOHO-‐роутеры!
Исследование Team Cymru: h~p://www.team-‐cymru.com/ReadingRoom/Whitepapers/SOHOPharming.html
7
Безопасные связи
© 2002—2014, Digital Security
Последствия MiiM
• Модификация данных • Кража сессии • Раскрытие данных • Выполнение произвольного кода • Отказ в обслуживании клиента • …
8
Безопасные связи
© 2002—2014, Digital Security
Специфика работы мобильных устройств с Wi-‐Fi-‐сетями
Подробнее: Raúl Siles – “Wi-‐Fi: Why iOS (Android and others) Fail Inexplicably?” www.slideshare.net/rootedcon/ral-‐siles-‐wifi-‐why-‐ios-‐android-‐and-‐others-‐fail-‐inexplicably-‐rooted-‐con-‐2013
9
Безопасные связи
© 2002—2014, Digital Security
Виды каналов связи
• Открытые • Защищенные нестандартными методами
‒ ~= открытые • Защищенные стандартными методами
‒ SSL/TLS Ø Все взаимодействие основывается на паре «открытый и
закрытый ключ» сертификата сервера Ø Сертификат должен быть действительным
10
Безопасные связи
© 2002—2014, Digital Security
SSL и Android
• В ОС Android до версии 4.0 все сертификаты хранились в едином файле – Bouncy Castle Keystore File. • Файл: /system/etc/security/cacerts.bks
• C Android 4.0, подход к работе с сертификатами изменился. Теперь все сертификаты хранятся отдельными файлами, и при необходимости можно удалять их из доверенных. • Системные хранятся в: /system/etc/security/cacerts • Пользовательские хранятся в: /data/misc/keychain/cacerts-‐added
11
Безопасные связи
© 2002—2014, Digital Security
SSL и iOS
• В ОС iOS посмотреть встроенные сертификаты нельзя, и получить информацию о них можно только с сайта компании Apple. • h~p://support.apple.com/kb/HT5012?viewlocale=en_US • Системные хранятся в: /System/Library/Frameworks/
Security.framework/certsTable.data
• Для просмотра пользовательских сертификатов необходимо зайти в меню Настройки -‐> Основные -‐> Профиль(и). • Пользовательские хранятся в: /private/var/Keychains/TrustStore.sqlite3
12
Безопасные связи
© 2002—2014, Digital Security
Некорректное использование SSL
• Использование уязвимых фреймворков • Отключение проверок (отладочное API) • Некорректное переопределение стандартных обработчиков на
собственные • Неправильная конфигурация API-‐вызовов • Слабые параметры шифрования • Использование уязвимой версии библиотеки • Неправильная обработка результатов вызовов • Отсутствие проверки на имя хоста или использование неправильных
регулярных выражений для проверки
13
Безопасные связи
© 2002—2014, Digital Security
НЕ делайте так (Android)
14
Безопасные связи
© 2002—2014, Digital Security
НЕ делайте так (Android)
15
Безопасные связи
© 2002—2014, Digital Security
НЕ делайте так (iOS)
16
Безопасные связи
• NSURLRequest class • setAllowsAnyHTTPSCerqficate
• NSURLConnecqon class • allowsAnyHTTPSCerqficateForHost • setAllowsAnyHTTPSCerqficate • conqnueWithoutCredenqalForAuthenqcaqonChallenge
• CFStreams sockets • kCFStreamPropertySSLSe¢ngs
• kCFStreamSSLAllowsExpiredCerqficates • kCFStreamSSLAllowsExpiredRoots • kCFStreamSSLAllowsAnyRoot
© 2002—2014, Digital Security
Проблемы frameworks
• Очень-‐очень модно • А что там под капотом? Что там с безопасностью? • RCE Apache Cordova
• Cross-‐Applicaqon Scripqng – выполнение вредоносного JS в контексте Cordova-‐based приложения
• h~p://cordova.apache.org/announcements/2014/08/04/android-‐351.html
• Titanium • RCE + отсутствие проверки сертификата • h~p://www.appcelerator.com/blog/2012/11/the-‐qtanium-‐sdk-‐and-‐
cerqficate-‐validaqon/ • …
17
Безопасные связи
© 2002—2014, Digital Security
Проверка SSL-‐сертификата на устройстве
18
Безопасные связи
© 2002—2014, Digital Security
Установка сертификата и соц. инженерия
1) Пользователь делает все сам из-‐за неосведомленности. 2) Приобретается подержанный телефон со встроенным вредоносным сертификатом 3) Сертификат устанавливается на телефон с iOS за несколько секунд, если оказывается случайно в руках злоумышленника (например, он попросил позвонить) 4) Сетевое оборудование с «хорошим» сертификатом – тут NSA и все дела 5) …
19
Безопасные связи
© 2002—2014, Digital Security
Компрометация SSL
• Компрометация корневого сертификата
• Установка вредоносного сертификата с помощью соц. инженерии
• Инциденты с Bit9, DigiNator и Comodo • Сертификаты иностранных государств ;)
20
Безопасные связи
© 2002—2014, Digital Security
Если CA-‐сертификат скомпрометирован
• Пользователь может удалить сертификат из доверенных
• В ОС Android пользователь может это сделать как со встроенными сертификатами, так и с пользовательскими
• В iOS пользователь может удалить только пользовательские сертификаты
• Разработчик ОС может выпустить обновление • Издатель сертификата может отозвать свой сертификат. Механизм
проверки сертификата может динамически проверить это • Android не поддерживает ни CRL, ни OCSP • iOS использует OCSP
21
Безопасные связи
© 2002—2014, Digital Security
SSL pinning
В качестве защиты от компрометации корневых системных сертификатов и специально встроенных пользовательских можно использовать подход SSL Pinning. Pinning – это процесс ассоциации хоста с его ожидаемым X509-‐сертификатом или публичным ключом.
22
Безопасные связи
© 2002—2014, Digital Security
SSL Pinning
• app1 использует SSL Pinning Ø Проверяет «вшитый» примитив
• app2 не использует SSL Pinning Ø Обращается к системному хранилищу
23
Безопасные связи
© 2002—2014, Digital Security
Подход к SSL pinning
SSL Pinning бывает двух основных типов:
• Cerqficate Pinning: • Простота реализации • Низкая гибкость подхода
• Public Key Pinning: • Проблемы с реализацией на некоторых платформах • Хорошая гибкость подхода
Преимуществом также является возможность использовать: • Self-‐Signed сертификаты • Private CA-‐Issued сертификаты
24
Безопасные связи
© 2002—2014, Digital Security
Обход SSL Pinning
• SSL Pinning можно обойти/отключить, если на мобильном устройстве
присутствует jailbreak или root-‐доступ • Как правило, это нужно только исследователям для анализа сетевого
трафика • Android:
• Android SSL Bypass • iOS:
• iOS SSL Kill Switch • TrustMe
• По идее, эти же подходы могут использовать и вредоносные
программы • Как и любой код, проверки при SSL Pinning могут быть реализованы
некорректно, и на это стоит обращать внимание!
25
Безопасные связи
© 2002—2014, Digital Security
Реализация SSL pinning
• Код для реализации SSL Pinning уже сейчас можно найти на сайте OWASP
для Android, iOS и .NET. • h~ps://www.owasp.org/index.php/Cerqficate_and_Public_Key_Pinning
• Проект AndroidPinning от Moxie • h~ps://github.com/moxie0/AndroidPinning
• Начиная с Android 4.2, SSL Pinning поддерживается на системном уровне. • Не получится реализовать в случае использования WebView в Android и
UIWebView в iOS в связи с их спецификой
26
Безопасные связи
© 2002—2014, Digital Security
Дополнительный фактор
27
Безопасные связи
Как правило, передается по тому же каналу, что и контролирует злоумышленник!
© 2002—2014, Digital Security
Рекомендую к прочтению
• «The Most Dangerous Code in the World: Validaqng SSL Cerqficates in Non-‐Browser So®ware» • h~p://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf
• «Rethinking SSL Development in an Appified World» • h~p://android-‐ssl.org/files/p49.pdf
28
Безопасные связи
© 2002—2014, Digital Security
Безопасная разработка
• iOS • Secure Coding Guide from Apple
• h~ps://developer.apple.com/library/ios/documentaqon/Security/Conceptual/SecureCodingGuide/SecureCodingGuide.pdf
• IOS Developer Cheat Sheet • h~ps://www.owasp.org/index.php/IOS_Developer_Cheat_Sheet
• Android • The CERT Oracle Secure Coding Standard for Java
• h~ps://www.securecoding.cert.org/confluence/pages/viewpage.acqon?pageId=111509535
• Analysis of Android Applicability: CERT's Java Coding Guidelines • h~ps://www.securecoding.cert.org/confluence/display/java/Analysis+of
+Android+Applicability%3A+CERT%27s+Java+Coding+Guidelines • Security Tips from Android
• h~p://developer.android.com/training/arqcles/security-‐qps.html
29
Безопасные связи
© 2002—2014, Digital Security
Рекомендации
• Не доверяйте клиентской стороне! • Критичная информация не должна передаваться в
открытом виде! • Не изобретайте собственное шифрование! • Используйте SSL/TLS • Используйте безопасное шифрование (128 бит и больше) • Проверяйте сертификаты • Используйте SSL pinning
30
Безопасные связи
[email protected] @evdokimovds
Digital Security в Москве: (495) 223-‐07-‐86
Digital Security в Санкт-‐Петербурге: (812) 703-‐15-‐47
Безопасные связи
Спасибо за внимание! Вопросы?
© 2002—2014, Digital Security 31