SMB (скор. від англ. Server Message Block ) - мережевий протокол прикладного рівня для віддаленого доступу до файлів, принтерам і іншим мережним ресурсам, а також для між процесами взаємодії. Перша версія протоколу була розроблена компаніями IBM, Microsoft, Intel і 3Com в 1980-х роках; друга (SMB 2.0) була створена Microsoft і з'явилася в Windows Vista. В даний час SMB пов'язаний головним чином з операційними системами Microsoft Windows, де використовується для реалізації "Мережі Microsoft Windows" ( англ. Microsoft Windows Network ) І "Спільного використання файлів і принтерів" ( англ. File and Printer Sharing ).


1. Історія

Перша версія протоколу була розроблена співробітником IBM Беррі Файгенбаумом ( англ. Barry Feigenbaum ) В 1983 [1] [2]. Спочатку SMB був реалізований через NetBIOS (поверх NBF, IPX / SPX або NetBIOS over TCP / IP) і використовувався в мережах MS-NET і LAN Manager для DOS, а також в Windows for Workgroups. Microsoft регулярно доповнювала протокол новими можливостями; так, друга версія Microsoft Networks SMB File Sharing Protocol Extensions з'явилася в 1988, 3-я версія в 1989, версія 3.4 в 1992 [3].

В 1992 з'явилася Samba - Вільна реалізація протоколу SMB для UNIX -подібних операційних систем (спочатку для SunOS). Оскільки Microsoft не опублікувала документацію значної частини своїх доповнень до SMB, розробникам Samba довелося провести зворотну розробку протоколу.

В 1996 Microsoft стала використовувати нову назву для доповненої версії протоколу, яка використовувалася в Windows NT 4.0 - CIFS ( англ. Common Internet File System ); Нове ім'я прижилося, і SMB і CIFS фактично стали синонімами [2]. Microsoft деякий час намагалася перетворити CIFS в міжнародний стандарт через IETF, але після 2000 припинила роботу по стандартизації.

В Windows 2000 вперше з'явився SMB безпосередньо поверх TCP (без NetBIOS); для цього використовується порт 445 (SMB через NBT використовував порт 139).

В Windows Vista з'явилася нова версія протоколу - SMB 2.0. Протокол був значно спрощений (у SMB було більше 100 команд, а в SMB 2 всього 19); при цьому була підвищена продуктивність (завдяки механізму кешування, можливості поєднувати кілька команд SMB 2 в одному мережевому запиті і збільшеним буферам читання і запису), особливо в мережах з високою латентністю, поліпшена масштабованість і додана можливість автоматичного продовження сеансу у разі тимчасового від'єднання від сервера [4]. SMB 2 використовує той же порт (445) як і SMB, але інший заголовок пакетів ( 0xFF 'S' 'M' 'B' в SMB, 0xFE 'S' 'M' 'B' в SMB 2) [5].

У 2008 році, під тиском Єврокомісії, Microsoft опублікувала опис своїх пропрієтарних протоколів, в тому числі і SMB, на сайті MSDN [6].


2. Принцип роботи

SMB - це протокол, заснований на технології клієнт-сервер, який надає клієнтським застосуванням простий спосіб для читання і запису файлів, а також запиту служб у серверних програм у різних типах мережевого оточення. Єдина відмінність від моделі клієнт-сервер полягає в тому, що коли клієнт посилає в якості запиту опортуністичні блокування, то сервер змушений відпустити вже надану блокування, так як інший клієнт запросив відкриття файлу в режимі, несумісній з наданою блокуванням. У цьому випадку, сервер посилає клієнтові повідомну повідомлення про те, що блокування було знято. Сервери надають файлові системи та інші ресурси (принтери, поштові сегменти, іменовані канали і т. д.) для загального доступу в мережі. Клієнтські комп'ютери можуть мати у себе свої носії інформації, але вони так само хочуть мати доступ до ресурсів, наданих сервером для загального користування.

Клієнти з'єднуються з сервером, використовуючи протоколи TCP / IP (а точніше NetBIOS через TCP / IP), NetBEUI або IPX / SPX. Після того, як з'єднання встановлено, клієнти можуть посилати команди сервера (ці команди називаються SMB-команди або SMBs), який дає їм доступ до ресурсів, дозволяє відкривати, читати файли, писати у файли і, взагалі, виконувати весь перелік дій, які можна виконувати з файловою системою. Однак, у випадку SMB, ці дії здійснюються через мережу. Як було сказано вище, SMB працює, використовуючи різні протоколи.

В мережевий моделі OSI протокол SMB використовується як протокол Application / Presentation рівня і залежить від низькорівневих транспортних протоколів. SMB може використовуватися через TCP / IP, NetBEUI і IPX / SPX. Якщо TCP / IP або NetBEUI будуть зайняті, то буде використовуватися NetBIOS API. SMB також може надсилатися через DECnet протокол. Digital (нині Compaq) зробила це спеціально для свого продукту PATHWORKS. NetBIOS, у разі використання через TCP / IP, має різні назви. Microsoft називає його в деяких випадках NBT, а в деяких NetBT. Так само зустрічається назва RFCNB.

З початку існування SMB було розроблено безліч різних варіантів протоколу для обробки все зростаючої складності комп'ютерної середовища, в якій він використовувався. Домовилися, що реальний варіант протоколу, який буде використовуватися клієнтом і сервером, буде визначатися командою negprot (negotiate protocol). Цей SMB зобов'язаний посилатися першим до встановлення з'єднання. Першим варіантом протоколу був Core Protocol, відомий як SMB реалізація PC NETWORK PROGRAM 1.0. Він належним чином підтримує весь набір основних операцій, який включає в себе:

  • приєднання до файлового іпринтерного ресурсів та від'єднання від них
  • відкриття і закриття файлів
  • відкриття і закриття принтерних файлів
  • читання і запис файлів
  • створення і видалення файлів і директорій
  • пошук директорій
  • отримання та встановлення атрибутів файлу
  • блокування та розблокування файлів

3. Формат заголовка SMB

8 16 24 32 bits
Command RCLS Reserved ERR
ERR (cont) REB / FLG Reserved
Reserved
Reserved
Reserved
Tree ID Process ID
User ID Multiplex ID
WCT VWV
BCC BUF
SMB header structure

Основні елементи структури заголовка SMB:
Command - команда протоколу.
RCLS - код класу помилки.
ERR - код помилки.
Tree ID (TID) - ідентифікатор з'єднання з мережевим ресурсом.
Process ID (PID) - ідентифікатор клієнтського процесу фактичного з'єднання.
User ID (UID) - ідентифікатор користувача; використовується сервером для перевірки прав доступу користувача.
Multiplex ID (MID) - ідентифікатор групи користувача; використовується сервером для перевірки прав доступу групи користувача.
WCT - кількість параметрів, наступних за заголовком.
BCC - кількість байт даних, наступних за параметрами.


4. Аутентифікація Microsoft SMB Protocol

Модель механізму захисту, яка використовується в Microsoft SMB Protocol, в основному ідентична моделі будь-якого іншого варіанту SMB протоколу. Вона складається з двох рівнів захисту: user-level (користувальницький рівень) і share-level (рівень спільно використовуваного ресурсу). Під share (викладений в мережу ресурс) розуміється файл, директорія, принтер, будь-яка послуга, яка може бути доступна клієнтам по мережі.

Аутентифікація на рівні user-level означає, що клієнт, який намагається отримати доступ до ресурсу на сервері, повинен мати username (ім'я користувача) і password (пароль). Якщо аутентифікація пройшла успішно, клієнт має доступ до всіх доступних ресурсів сервера, крім тих, що з share-level захистом. Цей рівень захисту дає можливість системним адміністраторам конкретно вказувати, які користувачі і групи користувачів мають доступ до певних даних. Він використовується в Windows NT, Windows 2000, Windows XP.

Аутентифікація на рівні share-level означає, що доступ до ресурсу контролюється паролем, встановленим конкретно на цей ресурс. На відміну від user-level, цей рівень захисту не вимагає ім'я користувача для аутентифікації і не встановлюється ніяка унікальність поточного користувача. Цей рівень використовується в Windows NT, Windows 2000 і Windows XP для забезпечення додаткового рівня контролю захисту понад user-level. Операційні системи Windows 95, Windows 98 і Windows ME реалізують захист тільки цього рівня.

В обох цих рівнях захисту використовується шифрування. Пароль зашифровується, перш ніж відправляється на сервер. Типи шифрування NTLM і старі версії LAN Manager (LM) підтримуються протоколом. Обидва методи шифрування використовують аутентифікацію типу відгук-відгук, в якій сервер посилає клієнтові випадкову сгенерированную рядок, а клієнт повертає в якості відкликання оброблену рядок, яка доводить, що клієнт має достатній мандат для доступу до даних.


5. Методи злому SMB

Більшість методів злому засноване на тому, що зловмисник отримує доступ до бази даних, в якій операційна система зберігає хеши паролів користувачів, т.е в SAM. Якщо SAM вже отримана, то далі залишається тільки скористатися однією з багатьох утиліт, які допомагають дешифрувати паролі користувачів, отримані з SAM.

Однією з найвідоміших подібного роду програм є L0phtCrack. Принцип її дії дуже простий. Викрадена база даних спочатку імпортується в програму. Далі вибирається потрібна обліковий запис і запускається процес дешифрування, який може зайняти багато часу. Серед способів розшифровки є можливість проведення "атаки по словнику", т.е спроба вгадати пароль по вже закладеному в програму списком поширених паролів, на той випадок якщо пароль короткий і нехитрий. Також зловмисник може задумати використовувати L0phtCrack в режимі "SMB Packet Capture" в локальній мережі, якщо він володіє необхідними правами для установки і запуску програм на комп'ютері. У цьому випадку хеши паролів користувачів також можна буде перехопити за допомогою утиліти. Запустивши програму відразу ж можна, перехоплюючи пакети, отримати хеши паролів користувачів, які автентифіковані на сервері в даний момент, так як досить часто при роботі в локальній мережі користувачі з різних комп'ютерів повторно автентифіковані на головному сервері. Потім зловмисникові залишається тільки зберегти все перехоплені хеши паролів і почати дешифрацию аналогічно тому, як це відбувалося з дешифровкою SAM файлу. Як правило, у більшості користувачів прості паролі, тому програма здатна зламати їх всього за кілька хвилин своєї роботи, за допомогою вбудованого списку паролів. Решта утиліти засновані на такому ж принципі.


Примітки

  1. Christopher R. Hertel SMB Filesharing URL Scheme - tools.ietf.org/html/draft-crhertel-smb-url-04 (Англ.) (8 січня 2003). Читальний - www.webcitation.org/688rfL7XY з першоджерела 3 червня 2012.
  2. 1 2 Andrew Tridgell Myths About Samba - samba.org / samba / docs / myths_about_samba.html (Англ.) . Читальний - www.webcitation.org/688rft3cU з першоджерела 3 червня 2012.
  3. Dan Shearer History Of SMB - www.samba.org / cifs / docs / smb-history.html (Англ.) (16 листопада 1996). Читальний - www.webcitation.org/688rgKw16 з першоджерела 3 червня 2012.
  4. Joseph Barreto SMB2, a complete redesign of the main remote file protocol for Windows - (Англ.) (9 грудня 2008). Читальний - www.webcitation.org/688rgkgbL з першоджерела 3 червня 2012.
  5. SMB2 - wiki.wireshark.org/SMB2. Wireshark. Читальний - www.webcitation.org/688rhjxXZ з першоджерела 3 червня 2012.
  6. Microsoft Makes Strategic Changes in Technology and Business Practices to Expand Interoperability - www.microsoft.com / presspass / presskits / interoperability / default.mspx (Англ.) . (Недоступна посилання - історія - web.archive.org / web / * / http://www.microsoft.com/presspass/presskits/interoperability/default.mspx)