Обновить
39
0
Raz0r @Raz0r

Пользователь

Отправить сообщение
160 миллионов с питоном — шикарно. Как насчет md5?
А можете собрать вариант для ATI карточек под OpenCL? Они быстрее и дешевле Nvidia.

OpenCL не планируем, если реализовывать в отдельности под каждую GPU-платформу, скорость будет выше.
ей нельзя атаковать реальные веб-проекты

Не надо преувеличивать, согласен, что на некоторых серверах могут возникнуть трудности с keep-alive и Date, но на самом деле все не так плохо.
и как это связано с PHPSESSID хоть убейте — не понимаю!

Здесь не упомянули возможность извлечения значения microseconds из токена.

Ссылки добавим, спасибо за комментарий!
Скоро отправим CFP на Zero Nights :)
Да, с этой работой мы разумеется знакомы. Действительно, идея та же, но софт Сами в реальных условиях едва ли применим, так как требует информацию, которую можно получить только локально на атакуемой машине, например pid и вывод функции lcg_value(). Новизна в том, что энтропию microtime можно значительно уменьшить за счет техник ATS и Request Twins, кроме того, в работе Сами не учитывается то, что у атакующего есть возможность заставить веб-сервер создавать новые процессы со свежими сидами для php_combined_lcg.
Софт Сами можно назвать просто PoC'ом, так как не реализует даже многопоточности, нам же было необходимо готовое решение для внутреннего пользования, что привело к созданию такой программы (есть и pro версия ;))
Да, это тот же md5. Функция bin_to_readable.
Да, использование этих директив устраняет уязвимость, но по умолчанию они отключены.
В PHP есть две директивы:
  • session.hash-function — по умолчанию 0 (md5), 1 — sha1
  • session.hash-bits-per-character — преобразовывает байты хэша в удобочитаемый формат, возможные значения '4' (0-9, a-f), '5' (0-9, a-v) и '6' (0-9, a-z, A-Z, "-", ","). У нас реализован только режим '4', так как он наиболее часто используется, но мы скоро добавим поддержку и остальных форматов.
Единственная безопасная функция — openssl_random_pseudo_bytes. uniqid не уязвим, если стоит suhosin extension (не путать с патчем).
Числа не случайные, а псевдо случайные, поэтому узнав сид, можно предугадывать все последующие.
Сессии мы брутим у себя, требуется отправлять запросы лишь для создания новых процессов. Как правило, требуется всего ~100 keep-alive запросов для Apache+mod_php, чтобы веб-сервер начал создавать новые процессы.
Смысл в том, что нужен как раз собственный PHPSESSID, с помощью него мы можем получить сид для mt_rand(), uniqid(), т.е. предугадывать все случайные числа.
Если обратиться к скрипту с session_start() без Cookie PHPSESSID, генерируется новый PHPSESSID, отправляется клиенту в Set-Cookie. php_combined_lcg инициализируется при запуске нового процесса, поэтому задача атакующего — заставить веб-сервер создать несколько свежих процессов, при чем так, чтобы microtime обладал наиболее низкой энтропией (с помощью техник ATS и Request Twins). Создать новые процессы можно путем отправки большого количества Keep-Alive запросов. Т.е. отправляя keep-alive запросы на скрипт c session_start, можно получить PHPSESSID из свежего процесса, в котором атакующий брутит pid, microtime, две дельты. IP и время (заголовок Date), естественно известны.
Через PHPSESSID можно подобрать php_combined_lcg, а от него значения и mt_rand, и uniqid, так что такой рандом уязвим.
У проца мощная защита от радиации и стоит он 200к $
en.wikipedia.org/wiki/RAD750

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Работает в
Зарегистрирован
Активность