Да, с этой работой мы разумеется знакомы. Действительно, идея та же, но софт Сами в реальных условиях едва ли применим, так как требует информацию, которую можно получить только локально на атакуемой машине, например pid и вывод функции lcg_value(). Новизна в том, что энтропию microtime можно значительно уменьшить за счет техник ATS и Request Twins, кроме того, в работе Сами не учитывается то, что у атакующего есть возможность заставить веб-сервер создавать новые процессы со свежими сидами для php_combined_lcg.
Софт Сами можно назвать просто PoC'ом, так как не реализует даже многопоточности, нам же было необходимо готовое решение для внутреннего пользования, что привело к созданию такой программы (есть и pro версия ;))
session.hash-bits-per-character — преобразовывает байты хэша в удобочитаемый формат, возможные значения '4' (0-9, a-f), '5' (0-9, a-v) и '6' (0-9, a-z, A-Z, "-", ","). У нас реализован только режим '4', так как он наиболее часто используется, но мы скоро добавим поддержку и остальных форматов.
Сессии мы брутим у себя, требуется отправлять запросы лишь для создания новых процессов. Как правило, требуется всего ~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), естественно известны.
OpenCL не планируем, если реализовывать в отдельности под каждую GPU-платформу, скорость будет выше.
Не надо преувеличивать, согласен, что на некоторых серверах могут возникнуть трудности с keep-alive и Date, но на самом деле все не так плохо.
Здесь не упомянули возможность извлечения значения microseconds из токена.
Ссылки добавим, спасибо за комментарий!
Софт Сами можно назвать просто PoC'ом, так как не реализует даже многопоточности, нам же было необходимо готовое решение для внутреннего пользования, что привело к созданию такой программы (есть и pro версия ;))
en.wikipedia.org/wiki/RAD750