Крис Касперский - ТЕХНИКА СЕТЕВЫХ АТАК
- Название:ТЕХНИКА СЕТЕВЫХ АТАК
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Крис Касперский - ТЕХНИКА СЕТЕВЫХ АТАК краткое содержание
ТЕХНИКА СЕТЕВЫХ АТАК - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Анализ позволяет установить - все ресурсы (доступные ресурсы указаны в параметрах “Path”), за исключением диска “C” не защищены паролем ни для чтения, ни для записи (об этом говорят пустые параметры “Parm1enc” и “Param2enc”). Для полного доступа к диску “C” требуется пароль, который в зашифрованном виде выглядит так: “0x4 0xA8 0x7E 0x92 0x66”. Один из способов его расшифровки демонстрирует программа, приведенная ниже (на прилагаемом к книге компакт диске она расположена в файле “/SRC/win9x.xor.c”):
· #include «stdio.h»
·
· main(int argc, char **argv)
· {
· int a=1,tmp;
· char xore=0x35;
· for (;a«argc;a++)
· {
· sscanf(argv[a],"%x", amp;tmp);
· printf("%c",tmp ^ xore);
· __asm
· {
· rol xore, 7;
·}
·}
· printf("\n");
·
·}
Пример использования программы содержится в файле “/SRC/win9x.xor.bat” - необходимо передать в командной строке зашифрованный пароль в шестнадцатеричной форме, отделяя числа друг от друга пробелом, скажем так: win9x.xor.exe 0x5 0xAA 0x7D 0x96 0x63 0x99 0xE4 0x5A. А в ответ программа возвратит расшифрованный пароль (в данном случае “0000000”).
Конечно, получить доступ к реестру удаленного компьютера, имея лишь право на чтение диска, штатными средствами Windows невозможно. Поэтому, необходимо использовать утилиту, которая бы в отличие от стандартного «Редактора реестра» позволяла бы указывать путь к файлам реестра и умела бы работать с избранными ветвями, не считывая весь реестр целиком. (В большинстве случаев из-за низкой пропускной способности коммуникационных каналов прочитать все несколько мегабайт реестра оказывается чрезвычайно затруднительно, а то и вовсе невозможно).
Среди «домашних» пользователей широко распространено заблуждение, что на их компьютерах не содержится никакой секретной информации, и, следовательно, злоумышленнику воровать нечего. На самом же деле, большинство пользователей при входе в Internet не набирают пароль вручную, а используют возможность его сохранения в собственном профиле.
Похищение чужого пароля позволяет злоумышленнику пользоваться Internet за чужой счет, пока владелец пароля не догадается его сменить. Поэтому, способ хранения паролей в Windows представляет интерес не только для злоумышленников, но и для пользователей. Способна ли операционная система их защитить? К сожалению, в очередной раз, в алгоритме шифровки паролей (а они хранятся в зашифрованном виде) разработчики допустили грубые ошибки, позволяющие подобрать исходный пароль за приемлемое время.
Пароли по-разному хранятся в зависимости от версии Windows (Windows 95, Windows 95 OSR2), поэтому ниже каждый из них будет рассмотрен отдельно.
Пароли на вход в Internet (если только они не набираются каждый раз вручную), сохраняются в PWL файлах, причем имя пользователя совпадает с именем файла, т.е. пароли пользователя “KPNC” сохраняются в файле “KPNC.PWL”, расположенного в каталоге Windows. Содержимое PWL файлов зашифровано производным значением от пароля, под которым пользователь входит в систему.
В Windows 95 алгоритм шифрования в общих чертах выглядит следующим образом: пароль, заданный при регистрации нового пользователя в системе, приводится к верхнему регистру и посредством хеш-функции сворачивается к двойному слову (32 бита), используемого в качестве ключа для генерации гаммы по алгоритму RC4 [180]. Полученной гаммой и зашифровывается содержимое файла PWL.
Затем, при входе пользователя в систему, введенный им пароль аналогичным образом сворачивается к двойному слову, на основе которого генерируются гамма, использующаяся для расшифровки содержимого PWL. Среди прочих, содержащихся данных, в нем хранится имя пользователя. Если, в результате расшифровки оно совпадет с именем файла, то пароль считается истинным и наоборот.
Таким образом, ни хеш - значение, ни сам пароль нигде не хранятся и при условии правильной реализации криптоалгоритма, расшифровать содержимое PWL файла невозможно. На самом же деле, все происходит не так.
Слишком короткая длина ключа (32 бита) позволяет злоумышленнику воспользоваться тривиальным перебором. Поскольку алгоритм RC4 достаточно прост и допускает эффективную реализацию, уже на младших моделях процессора Pentium хорошо оптимизированная программа способна достичь скорости перебора от нескольких сотен тысяч ключей в секунду и выше. Поэтому, приблизительное время, за которое гарантированно удастся расшифровать PWL файл равно: 2 32 / 500 000 = 8 590 секунд или меньше двух с половиной часов [181]. В среднем же потребуется вдвое меньше времени, то есть что-то около часа. Другими словами - практически мгновенно.
Однако разработчиками были допущены и другие ошибки, позволяющие расшифровать файл даже не прибегая к перебору. Так, например, алгоритм «сворачивая» представляет собой пример очень слабой хеш-функции. Плохое рассеяние порождает множество паролей-двойников, т.е. различных паролей, но дающих одинаковые ключи. А некоторые пароли в результате свертки обращаются в нуль, что равносильно отсутствию пароля вообще!
Поэтому, представляет интерес взглянуть на алгоритм хеширования поближе. Он невероятно прост. Пароль приводится к верхнему регистру, затем над каждым его символом (включая нуль, завершающий строку) выполняются следующие операции:
· сложить значение ключа с очередным символом пароля
· выполнить циклический двоичный сдвиг ключа на семь позиций влево
Легко видеть насколько слабо взаимное влияние соседних символов друг на друга. В самом деле, схематично этот алгоритм можно записать как: 2 7*sym 1+2 7*sym 2+2 7*sym 3,… где sym nN-ый символ пароля. Поскольку 2 в степени 7 равно 128, то для смежных символов из интервала 0-127 взаимное влияние друг на друга полностью отсутствует, только на четверном символе циклический сдвиг приводит к наложению второй половины пароля на первую, в результате чего некоторое взаимное влияние между символами все же возможно. Стоить заметить, в качественных хеш функциях изменение одного бита исходной строки способно изменить все биты полученного результата. Рассматриваемый алгоритм, к таковым, очевидно не принадлежит.
Программа, приведенная ниже, демонстрирует одну из возможных реализаций этого алгоритма (на диске она находится в файле “/SRC/win95.hashe.c”). Она рассчитывает «свертку» пароля, указанного в командной строке.
· #include «stdio.h»
· #include «string.h»
· main (int argc, char ** argv)
· {
· int a=0,key=0;
· if (argc«2)
· printf ("USAGE: win95.hashe.exe MyGoodPassword\n");
· else
· {
· _strupr(argv[1]);
· for (;a«(strlen(argv[1])+1);a++)
· {
· key+=(unsigned char) argv[1][a];
· __asm
· {
· ROL key,7
·}
·}
· printf("%08X \n",key);
·}
·}
Если в качестве пароля задать «FFFFKKKKL», то хеш-функция возвратит нулевое значение [182]! И подобных паролей существует достаточно много (их точное количество можно вычислить математически или установить перебором).
Алгоритм шифрования тоже реализован с грубыми ошибками - одна и та же гамма используется несколько раз, - как для шифровки имени пользователя, так и для шифровки ресурсов. Но имя пользователя заранее известно (оно совпадает с именем файла). Поэтому, можно мгновенно восстановить первые 20 байт гаммы (а именно 20 символов отведено под имя пользователя). Причем, PWL файлы содержат множество избыточной (дублирующейся) и предсказуемой информации, поэтому существует возможность вычислить (без всякого перебора!) и остаток гаммы.
Читать дальшеИнтервал:
Закладка: