Server Message Block ( SMB ) — это протокол связи [1], используемый для совместного использования файлов, принтеров , последовательных портов и различных коммуникаций между узлами в сети . В Microsoft Windows реализация SMB состоит из двух неопределенно названных служб Windows : «Сервер» (ID: LanmanServer
) и «Рабочая станция» (ID: LanmanWorkstation
). [2] Он использует протоколы NTLM или Kerberos для аутентификации пользователей. Он также обеспечивает механизм аутентифицированного межпроцессного взаимодействия (IPC).
SMB был первоначально разработан в 1983 году Барри А. Фейгенбаумом в IBM [3] для совместного доступа к файлам и принтерам в сети систем, работающих под управлением IBM PC DOS от IBM . В 1987 году Microsoft и 3Com реализовали SMB в LAN Manager для OS/2 , в то время SMB использовал службу NetBIOS поверх протокола NetBIOS Frames в качестве своего базового транспорта. Позже Microsoft реализовала SMB в Windows NT 3.1 и с тех пор обновляла его, адаптируя для работы с новыми базовыми транспортами: TCP/IP и NetBT . SMB через QUIC был представлен в Windows Server 2022 .
В 1996 году Microsoft опубликовала версию SMB 1.0 [4] с небольшими изменениями под названием Common Internet File System ( CIFS / s ɪ f s / ). CIFS была совместима даже с самой ранней версией SMB, включая LAN Manager . [4] Она поддерживает символические ссылки, жесткие ссылки и файлы большего размера, но ни одну из функций SMB 2.0 и более поздних версий. [4] [5] Однако предложение Microsoft осталось проектом в Интернете и так и не получило статуса стандарта. [6] С тех пор Microsoft прекратила использование названия CIFS, но продолжает разрабатывать SMB и публиковать последующие спецификации. Samba — это свободное программное обеспечение , повторно реализующее протокол SMB и его расширения Microsoft.
Блок сообщений сервера (SMB) обеспечивает общий доступ к файлам , общий доступ к принтерам , просмотр сетевых ресурсов и межпроцессное взаимодействие (через именованные каналы ) по компьютерной сети . SMB служит основой для реализации распределенной файловой системы Microsoft .
SMB использует протоколы TCP и IP для транспорта. Эта комбинация позволяет обмениваться файлами по сложным, взаимосвязанным сетям , включая общедоступный Интернет. Компонент сервера SMB использует порт TCP 445. Первоначально SMB работал на NetBIOS через IEEE 802.2 - кадры NetBIOS или NBF - и через IPX/SPX , а позже на NetBIOS через TCP/IP (NetBT), но с тех пор Microsoft объявила эти протоколы устаревшими . В NetBT компонент сервера использует три порта TCP или UDP : 137 (служба имен NETBIOS), 138 (служба датаграмм NETBIOS) и 139 (служба сеансов NETBIOS).
В Microsoft Windows SMB реализуется двумя неопределенно названными службами Windows . Служба «Сервер» (ID: LanmanServer
) отвечает за обслуживание общих ресурсов . Служба «Рабочая станция» (ID: LanmanWorkstation
) поддерживает имя компьютера и помогает получать доступ к общим ресурсам на других компьютерах. [2] SMB использует протокол Kerberos для аутентификации пользователей в Active Directory в доменных сетях Windows. В более простых одноранговых сетях SMB использует протокол NTLM .
Windows NT 4.0 SP3 и более поздние версии могут использовать цифровую подпись SMB для предотвращения некоторых атак типа «человек посередине» . [7] [8] [9] Подписание SMB может быть настроено индивидуально для входящих подключений SMB (службой «LanmanServer») и исходящих подключений SMB (службой «LanmanWorkstation»). Настройка по умолчанию для контроллеров домена Windows под управлением Windows Server 2003 и более поздних версий — не разрешать неподписанные входящие подключения. [10] Таким образом, более ранние версии Windows, которые изначально не поддерживают подписание SMB (включая Windows 9x ), не могут подключаться к контроллеру домена Windows Server 2003. [8]
SMB поддерживает оппортунистическую блокировку (см. ниже) файлов для повышения производительности. Поддержка оппортунистических блокировок менялась с каждым выпуском Windows Server.
В протоколе SMB уступающая блокировка — это механизм, предназначенный для повышения производительности путем управления кэшированием сетевых файлов клиентом. [11] В отличие от традиционных блокировок , уступающая блокировка (OpLocks) не является строго файловой блокировкой и не используется для обеспечения взаимного исключения.
Существует четыре типа оппортунистических блокировок.
Использование протокола SMB часто коррелировало со значительным увеличением широковещательного трафика в сети. Однако сам SMB не использует широковещательные сообщения — проблемы широковещательной передачи, обычно связанные с SMB, на самом деле возникают из-за протокола определения местоположения служб NetBIOS . [ необходимо разъяснение ] По умолчанию сервер Microsoft Windows NT 4.0 использовал NetBIOS для объявления и определения местоположения служб. NetBIOS функционирует, широковещательно передавая службы, доступные на определенном хосте, через регулярные интервалы. Хотя это обычно делает приемлемым значение по умолчанию в сети с меньшим количеством хостов, увеличение широковещательного трафика может вызвать проблемы по мере увеличения количества хостов в сети. Реализация инфраструктуры разрешения имен в виде службы имен Интернета Windows (WINS) или системы доменных имен (DNS) решает эту проблему. WINS была собственной реализацией, используемой с сетями Windows NT 4.0, но принесла свои собственные проблемы и сложности в проектирование и обслуживание сети Microsoft.
С момента выпуска Windows 2000 использование WINS для разрешения имен было объявлено устаревшим корпорацией Microsoft, и теперь иерархический динамический DNS настроен как протокол разрешения имен по умолчанию для всех операционных систем Windows. Разрешение (коротких) имен NetBIOS с помощью DNS требует, чтобы клиент DNS расширял короткие имена, обычно путем добавления DNS-суффикса, специфичного для соединения, к своим запросам поиска DNS. WINS по-прежнему можно настроить на клиентах как вторичный протокол разрешения имен для взаимодействия с устаревшими средами и приложениями Windows. Кроме того, серверы Microsoft DNS могут пересылать запросы на разрешение имен устаревшим серверам WINS для поддержки интеграции разрешения имен с устаревшими (до Windows 2000) средами, которые не поддерживают DNS.
Разработчики сетей обнаружили, что задержка оказывает значительное влияние на производительность протокола SMB 1.0, что он работает хуже, чем другие протоколы, такие как FTP . Мониторинг показывает высокую степень «болтливости» и игнорирование сетевой задержки между хостами. [13] Например, VPN- подключение через Интернет часто приводит к сетевой задержке. Microsoft объяснила, что проблемы с производительностью возникают в первую очередь из-за того, что SMB 1.0 является протоколом на уровне блоков, а не потоковым протоколом, который изначально был разработан для небольших локальных сетей ; его размер блока ограничен 64 КБ, подписание SMB создает дополнительные накладные расходы, а размер окна TCP не оптимизирован для соединений WAN. [14] Решения этой проблемы включают обновленный протокол SMB 2.0, [15] автономные файлы , масштабирование окна TCP и устройства оптимизации WAN от различных поставщиков сетей, которые кэшируют и оптимизируют SMB 1.0 [16] и 2.0. [17]
Барри Фейгенбаум изначально разработал SMB в IBM в начале 1983 года с целью превратить локальный доступ к файлам DOS INT 21h в сетевую файловую систему. [3] Microsoft внесла значительные изменения в наиболее часто используемую версию и включила поддержку SMB в операционную систему LAN Manager , которую она начала разрабатывать для OS/2 с 3Com около 1990 года. [18] [19] [20] Microsoft продолжала добавлять функции в протокол в Windows for Workgroups ( около 1992 года ) и в более поздних версиях Windows. Аутентификация LAN Manager была реализована на основе требования оригинальной устаревшей спецификации SMB использовать пароли IBM "LAN Manager", но реализовала DES некорректным образом , что позволяло взламывать пароли. [21] Позже была также добавлена аутентификация Kerberos . Первоначально протоколы входа в домен Windows использовали 40-битное шифрование за пределами США из-за экспортных ограничений на более сильное 128-битное шифрование [22] (впоследствии снятых в 1996 году, когда президент Билл Клинтон подписал указ 13026 [23] ).
SMB 1.0 (или SMB1) изначально был разработан для работы на кадрах NetBIOS (NetBIOS через IEEE 802.2 ). С тех пор он был адаптирован к NetBIOS через IPX/SPX (NBX) и NetBIOS через TCP/IP (NetBT). Кроме того, начиная с Windows 2000 , SMB работает на TCP, используя порт TCP 445, функцию, известную как «прямой хост SMB». [24] Между SMB и TCP по-прежнему существует тонкий слой (похожий на пакет сообщений сеанса службы сеансов NetBT). [24] Windows Server 2003 и устаревшие устройства NAS изначально используют SMB1.
SMB1 — чрезвычайно болтливый протокол, что не является проблемой в локальной сети (LAN) с низкой задержкой. Он становится очень медленным в глобальных сетях (WAN), поскольку двустороннее рукопожатие протокола увеличивает присущую такой сети высокую задержку. Более поздние версии протокола сократили большое количество обменов рукопожатиями. Одним из подходов к смягчению неэффективности протокола является использование продуктов оптимизации WAN, таких как предоставляемые Riverbed , Silver Peak или Cisco . Лучшим подходом является обновление до более поздней версии SMB. Это включает обновление как устройств NAS, так и Windows Server 2003. Наиболее эффективным методом идентификации трафика SMB1 является использование инструмента сетевого анализатора, такого как Wireshark . Microsoft также предоставляет инструмент аудита в Windows Server 2016 для отслеживания устройств, использующих SMB1. [25]
В июне 2013 года Microsoft пометила SMB1 как устаревший . [26] В Windows Server 2016 и Windows 10 версии 1709 SMB1 по умолчанию не установлен. [27]
В 1996 году, когда Sun Microsystems анонсировала WebNFS , [28] Microsoft выступила с инициативой переименовать SMB в Common Internet File System (CIFS) [3] и добавила больше функций, включая поддержку символических ссылок , жестких ссылок , больших размеров файлов и первоначальную попытку поддержки прямых соединений через порт TCP 445 без необходимости использования NetBIOS в качестве транспорта (в значительной степени экспериментальная попытка, которая потребовала дальнейшей доработки). Microsoft представила некоторые частичные спецификации в качестве проектов Интернета в IETF . [6] Срок действия этих заявок истек.
Microsoft представила новую версию протокола (SMB 2.0 или SMB2) в 2006 году с Windows Vista и Windows Server 2008. [ 29] Хотя протокол является проприетарным, его спецификация была опубликована, чтобы позволить другим системам взаимодействовать с операционными системами Microsoft, использующими новый протокол. [30]
SMB2 снижает «болтливость» протокола SMB 1.0, сокращая количество команд и подкоманд с более чем ста до всего девятнадцати. [13] Он имеет механизмы для конвейеризации , то есть отправки дополнительных запросов до того, как прибудет ответ на предыдущий запрос, тем самым повышая производительность по каналам с высокой задержкой . Он добавляет возможность объединять несколько действий в один запрос, что значительно сокращает количество циклов, которые клиент должен выполнить на сервере, в результате чего повышается производительность. [13] SMB1 также имеет механизм объединения, известный как AndX, для объединения нескольких действий, но клиенты Microsoft редко используют AndX. [ необходима цитата ] Он также вводит понятие «надежных дескрипторов файлов»: они позволяют соединению с сервером SMB выдерживать кратковременные сбои в работе сети, что типично для беспроводной сети, без необходимости нести накладные расходы на повторное согласование нового сеанса.
SMB2 включает поддержку символических ссылок . Другие улучшения включают кэширование свойств файлов, улучшенную подпись сообщений с помощью алгоритма хеширования HMAC SHA-256 и лучшую масштабируемость за счет увеличения числа пользователей, общих ресурсов и открытых файлов на сервере среди прочего. [13] Протокол SMB1 использует 16-битные размеры данных, что, среди прочего, ограничивает максимальный размер блока до 64 КБ. SMB2 использует 32- или 64-битные поля хранения и 128 бит в случае файловых дескрипторов , тем самым устраняя предыдущие ограничения на размеры блоков, что повышает производительность при передаче больших файлов по быстрым сетям. [13]
Windows Vista/ Server 2008 и более поздние операционные системы используют SMB2 при взаимодействии с другими машинами, также способными использовать SMB2. SMB1 продолжает использоваться для соединений со старыми версиями Windows, а также с решениями NAS различных поставщиков. Samba 3.5 также включает экспериментальную поддержку SMB2. [31] Samba 3.6 полностью поддерживает SMB2, за исключением изменения пользовательских квот с помощью инструментов управления квотами Windows. [32]
Когда был представлен SMB2, он принес ряд преимуществ по сравнению с SMB1 для сторонних разработчиков протоколов SMB. SMB1, изначально разработанный IBM , был подвергнут обратному проектированию и позже стал частью большого количества операционных систем, отличных от Windows, таких как Xenix , OS/2 и VMS ( Pathworks ). X/Open стандартизировала его частично; Microsoft представила Internet-Drafts, описывающие SMB2, в IETF , частично в ответ на формальную стандартизацию IETF версии 4 сетевой файловой системы в декабре 2000 года как IETF RFC 3010; [33] однако эти связанные с SMB Internet-Drafts утратили силу, не получив никакого одобрения IETF standards-track или какого-либо другого одобрения IETF. (См. http://ubiqx.org/cifs/Intro.html для получения исторических подробностей.) SMB2 также является относительно чистым разрывом с прошлым. Код SMB1 от Microsoft должен работать с большим количеством клиентов и серверов SMB. SMB1 предлагает много версий информации для команд (выбор структуры для возврата для конкретного запроса), поскольку такие функции, как поддержка Unicode, были добавлены позднее. SMB2 подразумевает значительно сокращенное тестирование совместимости для реализаторов протокола. Код SMB2 имеет значительно меньшую сложность, поскольку существует гораздо меньше изменчивости (например, не-Unicode-пути кода становятся избыточными, поскольку SMB2 требует поддержки Unicode).
Apple перешла на SMB2 (из своего собственного протокола Apple Filing Protocol , теперь устаревшего), начиная с OS X 10.9 «Mavericks» . [34] Однако этот переход был сопряжен с проблемами совместимости. [35] [36] Нестандартная поддержка SMB2 фактически появилась в OS X 10.7, когда Apple отказалась от Samba в пользу собственной реализации SMB под названием SMBX [34] после того, как Samba приняла GPLv3 . [37] [38]
Клиентская файловая система CIFS ядра Linux поддерживает SMB2 начиная с версии 3.7. [39]
SMB 2.1, представленный в Windows 7 и Server 2008 R2, внес незначительные улучшения производительности с новым механизмом оппортунистической блокировки. [40]
SMB 3.0 (ранее называвшийся SMB 2.2) [41] был представлен в Windows 8 [41] и Windows Server 2012. [ 41] Он принес несколько существенных изменений, которые направлены на расширение функциональности и повышение производительности SMB2, [42] особенно в виртуализированных центрах обработки данных :
Он также вводит несколько улучшений безопасности, таких как сквозное шифрование и новый алгоритм подписи на основе AES . [47] [48]
SMB 3.0.2 (в то время известный как 3.02) был представлен в Windows 8.1 и Windows Server 2012 R2; [49] [50] в этих и более поздних версиях более ранняя версия SMB 1 может быть опционально отключена для повышения безопасности. [51] [52]
SMB 3.1.1 был представлен в Windows 10 и Windows Server 2016. [ 53] Эта версия поддерживает шифрование AES-128 GCM в дополнение к шифрованию AES-128 CCM , добавленному в SMB3, и реализует проверку целостности перед аутентификацией с использованием хеша SHA-512 . SMB 3.1.1 также делает безопасные переговоры обязательными при подключении к клиентам, использующим версии SMB, которые его поддерживают. [54]
Спецификации для SMB являются собственностью и изначально были закрыты, тем самым заставляя других поставщиков и проекты проводить обратную разработку протокола для взаимодействия с ним. Протокол SMB 1.0 был в конечном итоге опубликован некоторое время после его обратной разработки, тогда как протокол SMB 2.0 был доступен в Центре разработчиков открытых спецификаций Microsoft с самого начала. [55]
В 1991 году Эндрю Триджелл начал разработку Samba, свободной программной реализации (с использованием обратного проектирования ) сетевого протокола SMB/CIFS для Unix-подобных систем, изначально для реализации SMB-сервера, позволяющего ПК-клиентам, работающим под управлением клиента DEC Pathworks, получать доступ к файлам на компьютерах SunOS . [3] [56] Из-за важности протокола SMB во взаимодействии с широко распространенной платформой Microsoft Windows , Samba стала популярной свободной программной реализацией совместимого SMB-клиента и сервера, позволяющей операционным системам, отличным от Windows, таким как Unix-подобные операционные системы, взаимодействовать с Windows.
Начиная с версии 3 (2003), Samba предоставляет файловые и печатные службы для клиентов Microsoft Windows и может интегрироваться с доменом сервера Windows NT 4.0 , как в качестве основного контроллера домена (PDC) или как члена домена. Установки Samba4 могут действовать как контроллер домена Active Directory или сервер-участник на функциональных уровнях домена и леса Windows 2008. [57]
Менеджеры пакетов в дистрибутивах Linux могут искать пакет cifs-utils . Пакет от разработчиков Samba.
NSMB (Netsmb и SMBFS) — это семейство реализаций SMB-клиента в ядре операционных систем BSD. Впервые он был представлен в FreeBSD 4.4 Борисом Поповым, а теперь встречается во многих других системах BSD, включая NetBSD и macOS . [58] С тех пор реализации значительно разошлись. [59]
Версия NSMB для macOS примечательна своей ныне общепринятой схемой представления символических ссылок. Этот формат «Minshall-French» показывает символические ссылки как текстовые файлы с .symlink
расширением и Xsym\n
магическим числом, всегда длиной 1067 байт. Этот формат также используется для хранения символических ссылок на собственных серверах SMB или неподдерживаемых файловых системах. Samba поддерживает этот формат с опцией mfsymlink
. [60] Docker в Windows также, кажется, использует его. [ требуется цитата ]
NQ — это семейство переносимых реализаций SMB-клиента и сервера, разработанное Visuality Systems, израильской компанией, основанной в 1998 году Сэмом Видерманом, бывшим генеральным директором Siemens Data Communications. Семейство NQ включает в себя встроенный стек SMB (написанный на C), клиент Pure Java SMB и реализацию сервера хранения SMB. Все решения поддерживают новейший диалект SMB 3.1.1. NQ для Linux, NQ для WinCE, iOS, Android, VxWorks и другие операционные системы реального времени поддерживаются настраиваемым решением NQ.
MoSMB — это реализация SMB в пользовательском пространстве для Linux. Поддерживает SMB 2.x и SMB 3.x. Основные функции включают в себя Cloud-scale Active-Active Scale-out Clusters, SMB Direct (RDMA), SMB Multichannel, Transparent Failover и Continuous Availability. MoSMB также поддерживает хранилище объектов Amazon S3 в качестве бэкэнда хранилища в дополнение к файловым системам POSIX, таким как ext4 , ZFS , Lustre , Ceph и т. д. [61]
Fusion File Share от Tuxera — это фирменная реализация SMB-сервера, разработанная Tuxera , которая может работать как в ядре, так и в пользовательском пространстве . [62] Она поддерживает SMB 3.1.1 и все предыдущие версии, а также расширенные функции SMB, такие как непрерывная доступность (постоянные дескрипторы), масштабирование, RDMA (SMB Direct), многоканальность SMB, прозрачное сжатие, теневое копирование .
Likewise разработала реализацию CIFS/SMB (версии 1.0, 2.0, 2.1 и NFS 3.0) в 2009 году, которая предоставила многопротокольную платформу с идентификацией для сетевого доступа к файлам, используемым в OEM- продуктах хранения, созданных на основе устройств Linux/Unix. Платформа могла использоваться для традиционных устройств NAS, Cloud Gateway и Cloud Caching для предоставления безопасного доступа к файлам по сети. Likewise была куплена EMC Isilon в 2012 году.
KSMBD — это реализация сервера CIFS/SMB с открытым исходным кодом для ядра Linux. По сравнению с реализациями в пользовательском пространстве она обеспечивает лучшую производительность и упрощает реализацию некоторых функций, таких как SMB Direct. Поддерживает SMB 3.1.1 и предыдущие версии.
За прошедшие годы в реализации протокола или компонентов, на которые Microsoft напрямую полагается, было обнаружено множество уязвимостей безопасности. [63] [64] Уязвимости безопасности других поставщиков в основном заключаются в отсутствии поддержки новых протоколов аутентификации , таких как NTLMv2 и Kerberos, в пользу протоколов, таких как NTLMv1, LanMan или паролей в виде открытого текста . Отслеживание атак в реальном времени [65] показывает, что SMB является одним из основных векторов атак для попыток вторжения, [66] например , атака Sony Pictures в 2014 году [67] и атака вируса-вымогателя WannaCry в 2017 году. [68] В 2020 году были раскрыты две уязвимости SMB высокой степени серьезности, получившие название SMBGhost (CVE-2020-0796) и SMBleed (CVE-2020-1206), которые при объединении могут предоставить злоумышленнику привилегию RCE (удалённое выполнение кода) . [69]
В этой статье рассматривается [...] подписание сообщений Server Message Block (SMB).
Этот механизм безопасности в протоколе SMB помогает избежать таких проблем, как подделка пакетов и атаки "man in the middle". [...] Подписание SMB доступно во всех поддерживаемых в настоящее время версиях Windows, но по умолчанию включено только на контроллерах домена. Это рекомендуется для контроллеров домена, поскольку SMB — это протокол, используемый клиентами для загрузки информации о групповой политике. Подписание SMB позволяет гарантировать, что клиент получает подлинную групповую политику.
По умолчанию подписывание SMB требуется для входящих сеансов SMB на контроллерах домена под управлением Windows Server 2003.