31
Безопасные связи Дмитрий Евдокимов Директор исследовательского центра Digital Security

Безопасные связи, Дмитрий Евдокимов

  • Upload
    yandex

  • View
    362

  • Download
    2

Embed Size (px)

DESCRIPTION

При работе с мобильным приложением любой пользователь рассчитывает на то, что его данные передаются на сервер безопасно и никто, кроме него, не получит к ним доступ. Поэтому одна из главных задач мобильной разработки — обеспечить безопасное взаимодействие приложения с сервером. Безопасное клиент-серверное взаимодействие предотвращает сразу множество возможных атак. Как же избежать самых распространенных ошибок? Как сделать так, чтобы никто не мог вмешаться в канал передачи данных? Об этом вы узнаете из моего доклада.

Citation preview

Page 1: Безопасные связи, Дмитрий Евдокимов

Безопасные  связи  

Дмитрий  Евдокимов  Директор  исследовательского  центра    Digital  Security    

Page 2: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

#whoami  

Безопасные  связи  

•  Исследователь  информационной  безопасности  в  Digital  Security  Research  Group  

•  Редактор  рубрик  в  журнале  Xakep  

•  Один  из  организаторов  конференций  DEFCON  Russia  и  ZeroNights  

•  Специализируюсь  на  поиске  уязвимостей  в  бинарных  приложениях  без  исходного  кода  

•  Анализ    мобильных  приложений  для  Android,  iOS,  WindowsPhone  

•  Докладчик  на  конференциях  в  Польше,  Франции,  Германии,  ОАЭ   2  

Page 3: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

Исследования  

3  

Безопасные  связи  

Page 4: Безопасные связи, Дмитрий Евдокимов

Безопасные    связи  

Page 5: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

M3  –  Insufficient  Transport  Layer  Protecqon  

 

5  

Безопасные  связи  

Page 6: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

Атака  “MitM”  

При  контролировании  канала  передачи  данных  между  приложением  и  сервером  злоумышленник  может  

производить  любые  манипуляции  

•  Подключение  пользователя  к  поддельной  Wi-­‐Fi-­‐точке  доступа  

•  Подключение  к  поддельной  базовой  станции  оператора  

•  Использование  зараженного  сетевого  оборудования  

•  …    

6  

Безопасные  связи  

Page 7: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

Вредоносные  SOHO-­‐роутеры!  

 

Исследование  Team  Cymru:  h~p://www.team-­‐cymru.com/ReadingRoom/Whitepapers/SOHOPharming.html    

7  

Безопасные  связи  

Page 8: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

Последствия  MiiM  

 

•  Модификация  данных  •  Кража  сессии  •  Раскрытие  данных  •  Выполнение  произвольного  кода  •  Отказ  в  обслуживании  клиента  •  …  

8  

Безопасные  связи  

Page 9: Безопасные связи, Дмитрий Евдокимов

©  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  

Безопасные  связи  

Page 10: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

Виды  каналов  связи  

 

•  Открытые  •  Защищенные  нестандартными  методами  

‒  ~=  открытые  •  Защищенные  стандартными  методами  

‒  SSL/TLS  Ø  Все  взаимодействие  основывается  на  паре  «открытый  и  

закрытый  ключ»  сертификата  сервера  Ø  Сертификат  должен  быть  действительным  

10  

Безопасные  связи  

Page 11: Безопасные связи, Дмитрий Евдокимов

©  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  

Безопасные  связи  

Page 12: Безопасные связи, Дмитрий Евдокимов

©  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  

Безопасные  связи  

Page 13: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

Некорректное  использование  SSL  

 

•  Использование  уязвимых  фреймворков  •  Отключение  проверок  (отладочное  API)  •  Некорректное  переопределение  стандартных  обработчиков  на  

собственные  •  Неправильная  конфигурация  API-­‐вызовов  •  Слабые  параметры  шифрования  •  Использование  уязвимой  версии  библиотеки  •  Неправильная  обработка  результатов  вызовов  •  Отсутствие  проверки  на  имя  хоста  или  использование  неправильных  

регулярных  выражений  для  проверки  

13  

Безопасные  связи  

Page 14: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

НЕ  делайте  так  (Android)  

 

14  

Безопасные  связи  

Page 15: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

НЕ  делайте  так  (Android)  

 

15  

Безопасные  связи  

Page 16: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

НЕ  делайте  так  (iOS)  

 

16  

Безопасные  связи  

•  NSURLRequest  class  •  setAllowsAnyHTTPSCerqficate  

•  NSURLConnecqon  class  •  allowsAnyHTTPSCerqficateForHost  •  setAllowsAnyHTTPSCerqficate  •  conqnueWithoutCredenqalForAuthenqcaqonChallenge  

•  CFStreams  sockets  •  kCFStreamPropertySSLSe¢ngs    

•  kCFStreamSSLAllowsExpiredCerqficates  •  kCFStreamSSLAllowsExpiredRoots  •  kCFStreamSSLAllowsAnyRoot  

Page 17: Безопасные связи, Дмитрий Евдокимов

©  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  

Безопасные  связи  

Page 18: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

Проверка  SSL-­‐сертификата  на  устройстве  

 

18  

Безопасные  связи  

Page 19: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

Установка  сертификата  и  соц.  инженерия  

 

1)  Пользователь  делает  все  сам  из-­‐за  неосведомленности.    2)  Приобретается  подержанный  телефон  со  встроенным  вредоносным  сертификатом  3)  Сертификат  устанавливается  на  телефон  с  iOS  за  несколько  секунд,  если  оказывается  случайно  в  руках  злоумышленника  (например,  он  попросил  позвонить)  4)  Сетевое  оборудование  с  «хорошим»  сертификатом  –  тут  NSA  и  все  дела  5)  …    

19  

Безопасные  связи  

Page 20: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

Компрометация  SSL  

 •  Компрометация  корневого  сертификата  

•  Установка  вредоносного  сертификата  с  помощью  соц.  инженерии  

•  Инциденты  с  Bit9,  DigiNator  и  Comodo  •  Сертификаты  иностранных  государств  ;)  

20  

Безопасные  связи  

Page 21: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

Если  CA-­‐сертификат  скомпрометирован  

 •  Пользователь  может  удалить  сертификат  из  доверенных  

•  В  ОС  Android  пользователь  может  это  сделать  как  со  встроенными  сертификатами,  так  и  с  пользовательскими  

•  В  iOS  пользователь  может  удалить  только  пользовательские  сертификаты  

•  Разработчик  ОС  может  выпустить  обновление  •  Издатель  сертификата  может  отозвать  свой  сертификат.  Механизм  

проверки  сертификата  может  динамически  проверить  это  •  Android  не  поддерживает  ни  CRL,  ни  OCSP  •  iOS  использует  OCSP  

21  

Безопасные  связи  

Page 22: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

SSL  pinning  

 В  качестве  защиты  от  компрометации  корневых  системных  сертификатов  и  специально  встроенных  пользовательских  можно  использовать  подход  SSL  Pinning.      Pinning  –  это  процесс  ассоциации  хоста  с  его  ожидаемым  X509-­‐сертификатом  или  публичным  ключом.      

22  

Безопасные  связи  

Page 23: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

SSL  Pinning  

 

•  app1  использует  SSL  Pinning  Ø  Проверяет  «вшитый»  примитив  

•  app2  не  использует  SSL  Pinning  Ø  Обращается  к  системному  хранилищу  

23  

Безопасные  связи  

Page 24: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

Подход  к  SSL  pinning  

 SSL  Pinning  бывает  двух  основных  типов:  

•  Cerqficate  Pinning:  •  Простота  реализации  •  Низкая  гибкость  подхода  

•  Public  Key  Pinning:  •  Проблемы  с  реализацией  на  некоторых  платформах  •  Хорошая  гибкость  подхода  

   

Преимуществом  также  является  возможность  использовать:  •  Self-­‐Signed  сертификаты  •  Private  CA-­‐Issued  сертификаты  

     

24  

Безопасные  связи  

Page 25: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

Обход  SSL  Pinning  

 •  SSL  Pinning  можно  обойти/отключить,  если  на  мобильном  устройстве  

присутствует  jailbreak  или  root-­‐доступ  •  Как  правило,  это  нужно  только  исследователям  для  анализа  сетевого  

трафика  •  Android:    

•  Android  SSL  Bypass    •  iOS:    

•  iOS  SSL  Kill  Switch  •  TrustMe  

 •  По  идее,  эти  же  подходы  могут  использовать  и  вредоносные  

программы  •  Как  и  любой  код,  проверки  при  SSL  Pinning  могут  быть  реализованы  

некорректно,  и  на  это  стоит  обращать  внимание!      

25  

Безопасные  связи  

Page 26: Безопасные связи, Дмитрий Евдокимов

©  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  

Безопасные  связи  

Page 27: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

Дополнительный  фактор  

27  

Безопасные  связи  

Как  правило,  передается  по  тому  же  каналу,    что  и  контролирует  злоумышленник!  

Page 28: Безопасные связи, Дмитрий Евдокимов

©  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  

Безопасные  связи  

Page 29: Безопасные связи, Дмитрий Евдокимов

©  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  

Безопасные  связи  

Page 30: Безопасные связи, Дмитрий Евдокимов

©  2002—2014,  Digital  Security  

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

 

•  Не  доверяйте  клиентской  стороне!  •  Критичная  информация  не  должна  передаваться  в  

открытом  виде!  •  Не  изобретайте  собственное  шифрование!  •  Используйте  SSL/TLS  •  Используйте  безопасное  шифрование  (128  бит  и  больше)  •  Проверяйте  сертификаты  •  Используйте  SSL  pinning    

30  

Безопасные  связи  

Page 31: Безопасные связи, Дмитрий Евдокимов

       

[email protected]  @evdokimovds  

       

       Digital  Security  в  Москве:  (495)  223-­‐07-­‐86  

Digital  Security  в  Санкт-­‐Петербурге:  (812)  703-­‐15-­‐47  

Безопасные  связи  

Спасибо  за  внимание!  Вопросы?  

©  2002—2014,  Digital  Security   31