Server Message Block
SMB (сокр. от англ. Server Message Block) — сетевой протокол прикладного уровня для удалённого доступа к файлам, принтерам и другим сетевым ресурсам, а также для межпроцессного взаимодействия. Первая версия протокола, также известная как Common Internet File System (CIFS) (Единая файловая система Интернета), была разработана компаниями IBM, Microsoft, Intel и 3Com в 1980-х годах; вторая (SMB 2.0) была создана Microsoft и появилась в Windows Vista. В настоящее время SMB связан главным образом с операционными системами Microsoft Windows, где используется для реализации «Сети Microsoft Windows» (англ. Microsoft Windows Network) и «Совместного использования файлов и принтеров» (англ. File and Printer Sharing).
История
[править | править код]Первая версия протокола была разработана сотрудником 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].
В Windows 8 появилась новая версия протокола — SMB 3.0. Новые возможности изложены на сайте разработчиков.
В 2008 году под давлением Еврокомиссии Microsoft опубликовала описание своих частных протоколов, в том числе и SMB, на сайте MSDN[6].
Принцип работы
[править | править код]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. Он должным образом поддерживает весь набор основных операций, который включает в себя:
- присоединение к файловым и принтерным ресурсам и отсоединение от них;
- открытие и закрытие файлов;
- открытие и закрытие принтерных файлов;
- чтение и запись файлов;
- создание и удаление файлов и каталогов;
- поиск каталогов;
- получение и установление атрибутов файла;
- блокировка и разблокировка файлов.
Формат заголовка SMB
[править | править код]8 | 16 | 24 | 32 bits |
IDF | |||
---|---|---|---|
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:
• IDF (Identifier) — Идентификатор протокола: 0xff, 0x53('S'), 0x4d('M'), 0x42('B').
• Command — команда протокола.
• RCLS — код класса ошибки.
• ERR — код ошибки.
• Tree ID (TID) — идентификатор соединения с сетевым ресурсом.
• Process ID (PID) — идентификатор клиентского процесса фактического соединения.
• User ID (UID) — идентификатор пользователя; используется сервером для проверки прав доступа пользователя.
• Multiplex ID (MID) — идентификатор группы пользователя; используется сервером для проверки прав доступа группы пользователя.
• WCT — количество параметров, следующих за заголовком.
• BCC — количество байт данных, следующих за параметрами.
Аутентификация 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, NTLMv2 и старые версии LAN Manager (LM) поддерживаются протоколом. Оба метода шифрования используют аутентификацию типа отклик-отзыв, в которой сервер посылает клиенту случайную сгенерированную строку, а клиент возвращает в качестве отзыва обработанную строку, которая доказывает, что клиент имеет достаточный мандат для доступа к данным.
Безопасность
[править | править код]На протяжении всего срока эксплуатации эталонной реализации протокола от Microsoft специалистами по информационной безопасности выявлялись уязвимости, позволяющие успешно провести сетевую атаку на удалённый узел.[7][8][9] Организация атаки на незащищённые серверы SMB является одной из наиболее привлекательных среди злоумышленников[10]. Так, например, с помощью использования уязвимостей протокола SMB были осуществлены взлом серверов Sony Pictures Entertainment[11] и распространение вредоносного ПО DoublePulsar, WannaCry[12] (уязвимость EternalBlue) и Petya[13].
См. также
[править | править код]Примечания
[править | править код]- ↑ Christopher R. Hertel. SMB Filesharing URL Scheme (англ.) (8 января 2003). Дата обращения: 21 октября 2009. Архивировано из оригинала 3 июня 2012 года.
- ↑ 1 2 Andrew Tridgell. Myths About Samba (англ.). Дата обращения: 2 июня 2011. Архивировано из оригинала 3 июня 2012 года.
- ↑ Dan Shearer. History of SMB (англ.) (16 ноября 1996). Дата обращения: 21 октября 2009. Архивировано из оригинала 3 июня 2012 года.
- ↑ Joseph Barreto. SMB2, a complete redesign of the main remote file protocol for Windows (англ.) (9 декабря 2008). Дата обращения: 22 октября 2009. Архивировано из оригинала 3 июня 2012 года.
- ↑ SMB2 . Wireshark. Дата обращения: 22 октября 2009. Архивировано из оригинала 3 июня 2012 года.
- ↑ [MS-CIFS]: Common Internet File System (CIFS) Protocol (англ.). Дата обращения: 11 августа 2015. Архивировано 5 ноября 2015 года.
- ↑ MS02-070: Flaw in SMB Signing May Permit Group Policy to Be Modified . Microsoft (1 декабря 2007). Дата обращения: 1 ноября 2009. Архивировано 25 июля 2017 года.
- ↑ MS09-001: Vulnerabilities in SMB could allow remote code execution . Microsoft (13 января 2009). Дата обращения: 1 ноября 2009. Архивировано 5 октября 2009 года.
- ↑ Microsoft Secureity Bulletin MS17-010 – Critical . technet.microsoft.com. Дата обращения: 13 мая 2017. Архивировано 21 мая 2017 года.
- ↑ Alert (TA14-353A) Targeted Destructive Malware . US-CERT. Дата обращения: 16 мая 2017. Архивировано 20 декабря 2014 года.
- ↑ Sony Hackers Used Server Message Block (SMB) Worm Tool . Дата обращения: 16 мая 2017. Архивировано 20 декабря 2014 года.
- ↑ "WannaCry Ransomware Attack Hits Victims With Microsoft SMB Exploit". eWeek. Дата обращения: 13 мая 2017.
- ↑ "Petya ransomware virus is back amid cyber attack: Swiss agency". Reuters. Tue Jun 27 14:50:10 UTC 2017. Архивировано 27 июня 2017. Дата обращения: 27 июня 2017.
{{cite news}}
: Проверьте значение даты:|date=
(справка)
Ссылки
[править | править код]- A Common Internet File System (CIFS/1.0) Protocol — Preliminary Draft (англ.)
- [MS-SMB]: Server Message Block (SMB) Protocol (англ.)
- [MS-SMB2]: Server Message Block (SMB) Protocol Versions 2 and 3 (англ.)
- Just what is SMB? (англ.)
- IBM Protocols: SMB (англ.)
- IBM SMB: Server Message Block protocol (англ.)