Alexei Sintsov - "Between error and vulerability - one step"

587 views
546 views

Published on

Published in: Art & Photos
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
587
On SlideShare
0
From Embeds
0
Number of Embeds
262
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Alexei Sintsov - "Between error and vulerability - one step"

  1. 1. От ошибки до уязвимости… Алексей Синцов Digital Security twitter.com/asintsov
  2. 2. Программа… http://www.flickr.com/photos/lofink/4501610335/
  3. 3. Программа http://www.flickr.com/photos/lofink/4501610335/
  4. 4. Ошибка http://www.flickr.com/photos/lofink/4501610335/
  5. 5. Эксплуатация Уязвимость Ошибка http://www.flickr.com/photos/lofink/4501610335/
  6. 6. Кто ищет уязвимости ? http://www.flickr.com/photos/rufo_83/3154516530/
  7. 7. Такие разные…• Переполнение буфера• Межсайтовый скриптинг• Инъекция SQL кода• Отсутствие авторизации• Ошибки логики• Обход аутентификации• И многое другое…..
  8. 8. Примеры. Идейные ошибки - 1• PepsiCo • Danon• Coca-Cola • Mercedes-Benz• Johnson & Johnson • Ford Motor• Lockheed Martin • Mazda Motor Corporation• McDonnell-Douglas • Heineken• Sony
  9. 9. Аутентификация
  10. 10. Атака
  11. 11. ЭксплойтXOR EAX, EAX
  12. 12. Где ошибка?Производить аутентификациюна сторонеклиента -НЕправильно!
  13. 13. Примеры. Идейные ошибки - 2 Kaspersky Administration KitУсловия для атаки:• Домен• Учетная запись имеет права Локального Администратора
  14. 14. Сканирование и атака
  15. 15. Что делать?Надо былопредусмотретьвозможностьSMBRelay!Надо было лучшедокументировать.
  16. 16. Примеры. Ошибки в коде - 1 Отечественная система Банк-КлиентActiveX компонент для работы с ЭЦП:
  17. 17. Примеры. BoF Отечественная система Банк-Клиентchar* vuln(char *bufferOut, char *fileName){ char *errorText="Ошибка при создании файла с именем ‘%1’."; while(!*errorText) { if(errorText==% && (errorText+1)<9) // замена %1 { strcpy(bufferOut,fileName); //errorText rewrite! bufferOut+=strlen(fileName); //увеличиваем указатель *errorText++; } *bufferOut++=*errorText++; //Stack overflow (errorText<bufferOut) } return *bufferOut;}
  18. 18. Примеры. BoF
  19. 19. Что делать?Проводить обзор кода.Использоватьсовременный VS.Использовать флагиЗащиты: /GS /SafeSEH
  20. 20. Примеры. Ошибки в коде - 2 Lotus Domino Controller
  21. 21. Примеры. Ошибки в коде - 2 Аутентификация Пользователь -> {Login, Password, cookiefilename} -> Lotus Domino ControllerИмя файла на сервере Lotus с базой учетных записей и с хэшами паролей © Patrik Karlsson and ZDI
  22. 22. Примеры. Ошибки в коде - 2 Аутентификация File file = new File(cookieFilename); ... inputstreamreader = new InputStreamReader(new FileInputStream(file), "UTF8"); ... inputstreamreader.read(ac, 0, i); ... String s7 = new String(ac); ...
  23. 23. do { if((j = s7.indexOf("<user ", j)) <= 0) break; int k = s7.indexOf(">", j); if(k == -1) break; String s2 = getStringToken(s7, "user="", """, j, k); ... String s3 = getStringToken(s7, "cookie="", """, j, k); ... String s4 = getStringToken(s7, "address="", """, j, k); ... if(usr.equalsIgnoreCase(s2) && pwd.equalsIgnoreCase(s3) && appletUserAddress.equalsIgnoreCase(s4)) { flag = true; break; } ... } while(true);
  24. 24. Примеры. Ошибки в коде - 2 Обход аутентификацииecho ^ <user name=“admin" cookie=“dsecrg" address=“10.10.0.1"^> > n:domino2zdi0day_.txt
  25. 25. Что делать?Проводить обзор кода.
  26. 26. Примеры. Исправление. Аутентификация File file = new File(“./”+cookieFilename); ... inputstreamreader = new InputStreamReader(new FileInputStream(file), "UTF8"); ... inputstreamreader.read(ac, 0, i); ... String s7 = new String(ac); ...
  27. 27. do { if((j = s7.indexOf("<user ", j)) <= 0) break; int k = s7.indexOf(">", j); s7.substring(..) if(k == -1) break; String s2 = getStringToken(s7, "user="", """, j, k); ... String s3 = getStringToken(s7, "cookie="", """, j, k); ... String s4 = getStringToken(s7, "address="", """, j, k); ... if(usr.equalsIgnoreCase(s2) && pwd.equalsIgnoreCase(s3) && appletUserAddress.equalsIgnoreCase(s4)) { flag = true; break; } ... } while(true);
  28. 28. Новая атака cookie.xml<?xml version="1.0" encoding="UTF-8"?><user name=“admin" cookie=“dsecrg" Validaddress=“10.10.0.1">cookie2.xml.trash:There is a good <user xml file!andname=“admin”willbefoundas cookie=“dsecrg” andaddress=“10.10.0.1”hooray!>and blah-blah-blah
  29. 29. Новая атака cookie.xml<?xml version="1.0" encoding="UTF-8"?><user name=“admin" cookie=“dsecrg" Validaddress=“10.10.0.1">cookie2.xml.trash:There is a good <user xml file!andname=“admin”willbefoundas cookie=“dsecrg” andaddress=“10.10.0.1”hooray!>and blah-blah-blah
  30. 30. Новая атака cookie.xml<?xml version="1.0" encoding="UTF-8"?><user name=“admin" cookie=“dsecrg" Validaddress=“10.10.0.1">cookie2.xml.trash:There is a good <user xml file!andname=“admin”willbefoundas cookie=“dsecrg” andaddress=“10.10.0.1”hooray!>and blah-blah-blah
  31. 31. Новая атака cookie.xml<?xml version="1.0" encoding="UTF-8"?><user name=“admin" cookie=“dsecrg" Validaddress=“10.10.0.1">cookie2.xml.trash:There is a good <user xml file!andname=“admin”willbefoundas cookie=“dsecrg” andaddress=“10.10.0.1”hooray! Valid>and blah-blah-blah
  32. 32. Демонстрация 0day
  33. 33. Что делать?Проводить обзор кода.Автоматизированныхсредств не достаточно
  34. 34. PS.
  35. 35. WEBНе XSS, не SQLi… что-то новое хотим!
  36. 36. Google docs
  37. 37. Как это выглядит? Пользователь.
  38. 38. Как это выглядит? Создатель.
  39. 39. Как атаковать?Это же Exсel Засунем =A1+B1
  40. 40. Как атаковать?Засунем %08=A1+B1Yaaahooo!!
  41. 41. Уязвимость?
  42. 42. Уязвимость?
  43. 43. Где ошибка?Проводить Фаззинг.Анализироватьбизнес функции.
  44. 44. Как делать это правильно ?• Анализировать логику и функционал с точки зрения угроз • UnitTests• Анализировать код • Автоматически • В ручную, дополнительно, делать ревью кода• Использовать технологии снижения рисков: • C/C++ • /GS • /SafeSEH • /DinamicBase • WEB • HTTPOnly • Secure • X-Frame-options• Анализ типовых угроз и best practices.• Анализ ролевой модели• Анализ схем СУБД
  45. 45. Как ищут?Статический анализ • Source code review • regexp • формальные методы • руками… • Reverse Engineering • формальные методы • сигнатуры • руками…Динамический анализ • Fuzzing (bin/web) + Типичные уязвимости для данного типа + Reverse Engineering • Руками…Обзор архитектуры (логические ошибки)Ошибки в 3rd party- в базе CVE
  46. 46. Автоматизация Fuzzers Source Code AnalyzersSQLMap RATS Peach FlawfinderCOMRaider Yasca Sulley
  47. 47. Разработка (с) OWASP
  48. 48. Спасибо за внимание www.twitter.com/asintsov a.sintsov@dsec.ru
  49. 49. Пожалуйста, поставьте оценку моему докладу.Ваше мнение очень важно. Спасибо!

×