3. 3
Agenda
• Race conditions
• Session management
• Personal experience
• Extras
• Q&A
Крысиные бега, или Взлом одной кнопкой
4. 4
Race conditions
Крысиные бега, или Взлом одной кнопкой
Состояние гонки – ошибка проектирования
многопоточной системы или приложения, при
которой работа системы или приложения зависит от
того, в каком порядке выполняются части кода. Оно
наступает в случае, когда два или более потока в
параллельной программе одновременно обращаются
к одной структуре данных, причем между ними нет
принудительного упорядочивания во времени и хотя
бы одно из этих обращений – на запись.
https://www.owasp.org/index.php/Race_Conditions
6. 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
7. 7
Race conditions
Крысиные бега, или Взлом одной кнопкой
Therac-25
"Одна и та же переменная
применялась как для анализа
введённых чисел, так и для
определения положения
поворотного круга. Поэтому
при быстром вводе Therac мог
иметь дело с неправильным
положением поворотного
круга... Что приводило к
переоблучению пациента"
8. 8
Race conditions
Крысиные бега, или Взлом одной кнопкой
Inherent latency
Y N
Эффективное обнаружение и
эксплуатация
• Транзакции БД
• SOA (service-oriented
architecture)
• Backend-операции
• . . .
Трудно найти легко потерять,
невозможно забыть и
воспроизвести, особенно в
blackbox
• Менеджмент сессий
• . . .
• PROFIT!!!
9. 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
10. 10
Session management
Крысиные бега, или Взлом одной кнопкой
• При первичном обращении браузера к серверу
генерируется новый, уникальный идентификатор сессии
• Обычно идентификатор сессии возвращается клиенту в
заголовке ответа "Set-Cookie"
• Браузер сохраняет SessID в доменнозависимых cookie,
которые отправляются на сервер при каждом запросе
11. 11
Session puzzling
Крысиные бега, или Взлом одной кнопкой
Session puzzling – уязвимости прикладного уровня,
позволяющие атакующему выполнять множество
различных вредоносных действий путем
манипуляций с переменными сессии:
– Обход аутентификации
– Повышение привилегий и логин под чужим аккаунтом
– Обход ограничений в многофазных процессах
– Выполнение “традиционных атак” (например,
инъекций)
– Воздействие на адресата доставки контента
– . . .
12. 12
Session puzzling
Крысиные бега, или Взлом одной кнопкой
Принцип: приложение использует одни и
те же переменные сессии более, чем для
одной цели
13. 13
Session puzzling
Крысиные бега, или Взлом одной кнопкой
Возможные причины возникновения session puzzling :
– Преждевременное присвоение объектов сессии в публично
доступных точках входа
– Неоправданное хранение данных в памяти сессий
– Одни и те же переменные сессии используются различными
процессами
– Использование сессионных флагов в легальном функционале
приложения
– Отсутствие валидации для “доверенных” данных, генерируемых на
основе сессии
– Неэффективные или неполные механизмы аутентификации и
авторизации
– Баги в сценариях приложения, которые способствуют созданию или
предотвращению удаления переменных сессии