Добавить в цитаты Настройки чтения

Страница 61 из 133

Подключение сетевого диска

Способна ли защита Windows 95 (Windows 98) противостоять злоумышленникам, и может ли она гарантировать безопасность ресурсов компьютера? Операционная система позволяет назначать раздельные пароли для чтения и модификации содержимого дисков и папок. Но для аутентификации Windows95 (Windows 98) посылают клиенту как NT-хеш, так и LM-хеш, поэтому злоумышленник может за короткое время подобрать пароль, получив несанкционированный доступ к системе. (Подробнее об этом написано в главе «Атака на Windows NT») Но, в отличие от Windows NT, для Windows 95 (Windows 98) похоже, не существует никакого легального способа запретить использование LM-хешей. И даже если бы такой способ и существовал, он бы не здорово помог этой операционной системе. В Windows 95 (Windows 98) максимальная длина пароля ограничена восемью символами, причем строчечные и прописные буквы не различаются. Поэтому, злоумышленник может подобрать пароль за вполне приемлемое время.

Таким образом, категорически не допустимо на компьютерах, управляемых Windows 95 (Windows 98), предоставлять совместный доступ к ресурсам, особенно если существует выход в Internet. Причем, если злоумышленник получит доступ к диску, на котором установлена Windows (как правило, это диск С), его задача значительно упростится. (Многие пользователи разрешают чтение содержимого диска С не требуя пароля).

Пароли на все «зашаренные» ресурсы хранятся в ветке реестра HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurentVersionNetworkLanManимя ресурса Параметр “Parn1Erc” хранит зашифрованный пароль для полного доступа, а “Parn2Erc” - для доступа только на чтение. Для выяснения алгоритма шифровки нет необходимости прибегать к трудоемкому дизассемблированию кода. Достаточно исследовать несколько пар открытых и зашифрованных паролей (на своей машине такую операцию можно осуществить без труда).

Оказывается, вся «шифровка» сводится к побайтовой операции XOR каждого символа пароля с некоторым ключом, найти который можно «покскорив» открытый пароль зашифрованным. В результате этого (по крайне мере, в Windows 98) образуется следующая последовательность: {0x35; 0x9A; 0x4D; 0xA6; 0x53; 0xA9; 0xD4; 0x6A} [178].

В двоичной форме каждое из этих чисел представляют собой однородную смесь нулей и единиц, поэтому оказывают наибольшее влияние на шифруемый текст. А отсюда следует - вскрыть зашифрованный пароль, не зная ключа невозможно никаким другим методом, кроме полного перебора [179]. Но ключи идентичны на всех машинах, поэтому заведомо известны злоумышленнику, следовательно, найти оригинальный пароль можно без труда.

Ниже, для иллюстрации всего вышесказанного, приведен фрагмент реестра с компьютера “\SERVER” (на прилагаемом к книге компакт-диске он содержится в файле “/log/lm.reg”):

· [HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionNetworkLanMan]

·

· [HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionNetworkLanManASMLIB]

· "Flags"=dword:00000102

· "Type"=dword:00000000

· "Path"="E:\ASMLIB"

· "Parm2enc"=hex:

· "Parm1enc"=hex:

· "Remark"="

·

· [HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionNetworkLanManC]

· "Flags"=dword:00000101

· "Type"=dword:00000000

· "Path"="C:\"

· "Parm2enc"=hex: 04,a8,7e,92,66

· "Parm1enc"=hex:

· "Remark"="

·

· [HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionNetworkLanManD]

· "Flags"=dword:00000191

· "Type"=dword:00000000

· "Path"="D:\"

· "Parm2enc"=hex:

· "Parm1enc"=hex:

· "Remark"="СД РОМ общего доступа"

·

· [HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionNetworkLanManBLEAK]

· "Flags"=dword:00000193

· "Type"=dword:00000000

· "Path"="F:\BLEAK"

· "Parm2enc"=hex:

· "Parm1enc"=hex:

· "Remark"="

·

· [HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionNetworkLanManATACR]

· "Flags"=dword:00000191

· "Type"=dword:00000000

· "Path"="J:\ATACR"

· "Parm2enc"=hex:

· "Parm1enc"=hex:

· "Remark"="

Анализ позволяет установить - все ресурсы (доступные ресурсы указаны в параметрах “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”).