- SMB ;

SMB это  — сетевой протокол прикладного уровня для удалённого доступа к файлам, принтерам и другим сетевым ресурсам, а также для межпроцессного взаимодействия. Первая версия протокола, также известная как 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).

Принцип работы

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:

   • 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 специалистами по информационной безопасности выявлялись уязвимости, позволяющие успешно провести сетевую атаку на удалённый узел. Организация атаки на незащищённые серверы SMB является одной из наиболее привлекательных среди злоумышленников. Так, например, с помощью использования уязвимостей протокола SMB были осуществлены взлом серверов Sony Pictures Entertainment и распространение вредоносного ПО DoublePulsar, WannaCry (уязвимость EternalBlue) и Petya.

### Проблемы с производительностью

Использование протокола SMB часто коррелирует со значительным увеличением широковещательного трафика в сети. Однако сам SMB не использует широковещательные рассылки - проблемы широковещания, обычно связанные с SMB, на самом деле возникают из-за протокола определения местоположения NetBIOS. По умолчанию сервер Microsoft Windows NT 4.0 использовал NetBIOS для рекламы и определения местонахождения служб. Функции NetBIOS посредством широковещательных служб, доступных на определенном узле через регулярные промежутки времени. Хотя обычно это делается для приемлемого значения по умолчанию в сети с меньшим числом хостов, увеличенный широковещательный трафик может вызвать проблемы по мере увеличения количества хостов в сети. Реализация этой проблемы связана с внедрением инфраструктуры разрешения имен в виде службы имен WINS (Windows Internet Naming Service) или DNS. WINS была проприетарной реализацией, используемой в сетях Microsoft Windows NT 4.0, но вызвала собственные проблемы и сложности при проектировании и обслуживании сети Microsoft.

Начиная с выпуска Windows 2000 использование WINS для разрешения имен считается Microsoft устаревшей, причем иерархический динамический DNS теперь настроен как протокол разрешения имен по умолчанию для всех операционных систем Windows. Разрешение (коротких) имен NETBIOS DNS требует, чтобы DNS-клиент расширял короткие имена, обычно добавляя DNS-суффикс для DNS-запросов. WINS можно настроить на клиентах как вторичный протокол разрешения имен для взаимодействия с устаревшими средами и приложениями Windows. Кроме того, DNS-серверы Microsoft могут пересылать запросы разрешения имен на устаревшие WINS-серверы, чтобы поддерживать интеграцию с разрешением имен с устаревшими (до Windows 2000) средами, не поддерживающими DNS.

Сетевые разработчики обнаружили, что задержка существенно влияет на производительность протокола SMB 1.0, что она работает хуже, чем другие протоколы, такие как FTP. Мониторинг выявляет высокую степень «болтливости» и пренебрежение задержкой между хостами.

Например, VPN-соединение через Интернет часто приводит к задержке сети. Microsoft объяснила, что проблемы с производительностью связаны прежде всего с тем, что SMB 1.0 является скорее блочным, а не потоковым протоколом, изначально разработанным для небольших локальных сетей; Он имеет размер блока, ограниченный 64 КБ, подписывание SMB создает дополнительные накладные расходы, а размер окна TCP (Transmission Control Protocol) не оптимизирован для каналов глобальной сети. Решения этой проблемы включают обновленный протокол SMB 2.0, автономные файлы, масштабирование окна TCP и устройства ускорения WAN от различных сетевых поставщиков, которые кэшируют и оптимизируют SMB 1.0

### Модификации от Microsoft

Microsoft добавила несколько расширений в свою собственную реализацию SMB. Например, он добавил NTLM, а затем протоколы проверки подлинности NTLMv2, чтобы устранить слабость безопасности в исходной аутентификации LAN Manager. Аутентификация LAN Manager была реализована на основе требований исходной устаревшей спецификации SMB использовать пароли IBM «LAN Manager», но реализовала DES в некорректной манере, что позволило взломать пароли. Позднее была также добавлена аутентификация Kerberos. В протоколах NT 4.0 Domain logon изначально использовалось 40-битное шифрование за пределами США из-за ограничений экспорта на более сильное 128-битное шифрование (впоследствии отмененное в 1996 году, когда президент Билл Клинтон подписал Исполнительный указ 13026). Поддержка уступающей блокировкой изменялась с каждой версией сервера.

В протоколе SMB уступающая блокировка (OpLock) представляет собой механизм блокировки файлов, предназначенный для повышения производительности путем управления кэшированием сетевых файлов клиентом. В отличие от традиционных замков, OpLock не используются для обеспечения взаимного исключения. Главная цель OpLock - обеспечить синхронизацию для кеширования. Существует три типа уступающих замков:

Пакетные блокировки
Пакетные OpLock'и были созданы первоначально для поддержки определенного поведения операции выполнения пакетных файлов MS-DOS, при которой файл открывается и закрывается многократно за короткий период, что является проблемой производительности. Чтобы решить эту проблему, клиент может попросить OpLock типа «пакет». В этом случае клиент задерживает отправку закрытого запроса, и если задан последующий открытый запрос, эти два запроса взаимно компенсируют друг друга.

Исключительные блокировки

Когда приложение открывает в «общем режиме» файл, размещенный на SMB-сервере, который не открывается никаким другим процессом (или другими клиентами), клиент получает эксклюзивный OpLock с сервера. Это означает, что клиент может теперь предположить, что это единственный процесс с доступом к этому конкретному файлу, и теперь клиент может кэшировать все изменения в файле, прежде чем передать его на сервер. Это улучшение производительности, поскольку для чтения и записи в файл требуется меньшее количество циклов. Если другой клиент / процесс пытается открыть тот же файл, сервер отправляет клиенту сообщение (называемое перерывом или отзывом), которое делает недействительной исключительную блокировку, ранее предоставленную клиенту. Затем клиент записывает все изменения в файл .

OpLocks 2 уровня

Если эксклюзивный OpLock удерживается клиентом и заблокированный файл открывается третьим лицом, клиент должен отказаться от своего эксклюзивного OpLock, чтобы разрешить доступ к другому клиенту для записи / чтения. Затем клиент может получить «OpLock 2 уровня» с сервера. OpLock 2 уровня позволяет кэшировать запросы чтения, но исключает кэширование записи.

Разрывы

В отличие от стандартного поведения протокола SMB, запрос на прерывание может быть отправлен с сервера на клиент. Он информирует клиента о том, что OpLock больше не действителен. Это происходит, например, когда другой клиент хочет открыть файл таким образом, который делает недействительным OpLock. Первый клиент затем отправляет разрыв OpLock и требует отправить все его локальные изменения (в случае пакетного или эксклюзивного OpLocks), если они есть, и подтвердить разрыв OpLock. После этого подтверждения сервер может последовательно отвечать второму клиенту.
 Спецификации

Спецификации для SMB запатентованы и изначально закрыты, что вынуждает других поставщиков и проекты перепроектировать протокол, чтобы взаимодействовать с ним. Протокол SMB 1.0 был в конечном итоге опубликован спустя некоторое время после его обратной инженерии, тогда как протокол SMB 2.0 с самого начала был доступен в Центре открытых разработок Microsoft MSDN. Существует ряд спецификаций, имеющих отношение к протоколу SMB:

MS-CIFS. MS-CIFS является недавней заменой (2007) для draft-leach-cifs-v1-spec-02.txt документом, широко используемым для внедрения клиентов SMB, но также известно, что они имеют ошибки бездействия и комиссии.

MS-SMB. Спецификация для Microsoft Extensions для MS-CIFS

MS-SMB2. Спецификация для протоколов SMB 2 и SMB 3

MS-FSSO. Описывает предполагаемые функциональные возможности Службы доступа к файлам Windows, способы взаимодействия с системами и приложениями, которые нуждаются в файловых службах, и способы взаимодействия с административными клиентами для настройки и управления системой.

MS-SMBD. Спецификация транспортного протокола SMB2 удаленного прямого доступа к памяти (RDMA)