Приемы, облегчающие работу противника. Часть 18.
Однако то, как проверяется пароль в PFTW, заслуживает серьезной критики. В ранних версиях пароль просто сравнивался со строкой, хранившейся в зашифрованном виде. Следовательно, можно было или откорректировать условие, в результате проверки которого принималось решение о правильности ввода пароля, или "подсмотреть" пароль в момент проверки.
Более новые версии PFTW поступают гораздо умнее. Пароль нигде не хранится даже в зашифрованном виде, но запоминается его 14-битовый хэш, который сравнивается со значением хэша от введенного пользователем пароля. В случае несовпадения пользователя сразу информируют о том, что пароль неверен. Но так как длина хэша составляет всего 14 бит, примерно один из 16 тысяч паролей будет проходить эту проверку. Это широко распространенный подход, который позволяет защититься от случайных опечаток, но не дает возможности правильно определить пароль, даже если удастся обратить хэш — каждому значению хэша будет соответствовать, например, почти полмиллиона семисимвольных паролей, состоящих только из маленьких латинских букв, но только один из этих паролей будет правильным.
Если проверка хэша прошла успешно, из пароля вычисляется ключ, который используется для расшифрования инсталлятора. Но именно тут разработчики PFTW допустили оплошность.
Дело в том, что длина ключа шифрования соответствует длине пароля, и преобразование пароля в ключ является обратимым, т. е., зная ключ шифрования, легко вычислить пароль. А алгоритм шифрования не устойчив к атаке на основе открытого текста, т. е., зная несколько байт открытого текста и соответствующего ему шифртекста, очень просто вычислить фрагмент ключа шифрования той же длины, что и известный открытый текст.
Таким образом, для определения пароля достаточно найти фрагмент открытого текста, который по длине не короче пароля.
Но, как оказалось, шифруемые данные представляют собой так называемый САВ-файл, формат которого был разработан корпорацией Microsoft. CAB- файл является разновидностью архивного файла, хранящего один или несколько других файлов в упакованном виде, и всегда начинается со строковой сигнатуры "MSCF" (Microsoft CAB File), за которой следуют 4 нулевых байта и 64-битовое число, соответствующее размеру САВ-файла. Таким образом, определить первые 16 байт открытого текста, а значит и пароля, длина которого не превышает 16 байт, не составит труда. В САВ-файле присутствуют и другие области, значение которых совсем не трудно предугадать.
Их можно использовать для вычисления более длинных паролей.