07.11 // Нестойкость в ГПСЧ Windows позволяет быстро вскрывать ключи и SSL-соединения
Израильские учёные Leo Dorrendorf, Zvi Gutterman и Benny Pinkas опубликовали работу "Cryptanalysis of the Random Number Generator of the Windows Operating System".
Им удалось дизассемблировать и трассировать закрытый код ОС Windows, содержащийся в библиотеках ADVAPI32.DLL, RSAENH.DLL и KSECDD.SYS и полностью восстановить исходный код генератора псевдослучайных чисел ОС Windows без какой-либо помощи со стороны компании Microsoft и практически полном отсутствии документации по этой теме. WRNG используют многочисленные приложения через вызов функции CryptGenRandom, также он используется в WinCryptoAPI.
В работе также приводятся сравнения с LRNG – реализацией ГПСЧ в Linux, в которой также были ранее обнаружены многочисленные уязвимости, но из-за особенности архитектуры ОС, практическое значение их оказалось не так велико.
Генератор Windows использует модифицированную функцию SHA-1 и потоковый шифр RC4. Не используя каких либо уязвимостей в самом шифре RC4, исследователи обнаружили многочисленные ошибки в дизайне генератора и его несоответствие элементарным и давно известным требованиям, которым должны отвечать такие генераторы.
Генератор запускается не на уровне ядра, а на уровне пользовательских процессов, отдельно для каждого процесса. Это даёт некоторые преимущества: если будет извлечено состояние генератора для одного процесса, то другие процесы не пострадают. Но это также облегчает к нему доступ (достаточно получить значение адресного пространства для определённого приложения) и делает возможным, получив значение из одного сеанса, вычислить другие. В некоторых случаях доступ вредоносного кода к компьютеру, необходимый для проведения такой атаки, может быть незначительным, а уязвимости в приложениях, раскрывающие состояния генератора, имеют много шансов остаться незамеченными.
Атака типа forward security (предсказание предыдущих состояний генератора) составляет 223 операций (всего несколько секунд на персональном компьютере), а атака на backward security (предсказание последующих состояний) тривиальна и имеет сложность всего O(1)
Это связано с тем, что обновление состояния генератора происходит не при каждой итерации, а только после использования выхода в 128 кбайт. Такое большое значение может быть израсходовано приложением зачастую лишь спустя несколько дней после запуска. Например, Internet Explorer обновит своё состояние PRNG только спустя 600-1200 SSL-сессий. Это очень большое временное окно для атаки. Если в Linux состояние генератора обновляется почти ежесекундно (что совместно с реализацией на уровне ядра и защитой от прямого чтения состояния пользовательскими процессами делают уязвимости в Linux некритичными – приложения могут читать только выход генератора), то в Windows оно может оставаться неизменным в течении многих дней или не успевать обновляться вообще.
Исследователи рекоммендуют полностью переработать дизайн генератора, убрать из него функцию на основе RC4, которая не обеспечивает forward security и вообще не должна применяться в ГПСЧ. ОС Windows Vista исследованию не подвергалась, но учёные предполагают, что данный дизайн генератора сохранён и в ней.
Источник: Cryptology ePrint Archive