پروتکل SMB چیست و چگونه کار می کند؟
برای اینکه بتوانیم از فایلهای به اشتراک گذاشته شده و منابع سرور از راه دور استفاده کنیم میتوانیم از پروتکل SMB استفاده کنیم. در ادامه به چیستی پروتکل SMB و چگونگی کارکرد آن میپردازیم. با فالنیک همراه باشید.
پروتکل SMB چیست؟
SMB مخفف Server Message Block است. این پروتکل شبکه به سیستمها اجازه اشتراک گذاری فایلها در یک شبکه یا دامین را از کامپیوترهای ریموت میدهد انگار کاربر از هارد لوکال استفاده میکند. پروتکل SMB امکان دسترسی کاربر یا برنامه را به فایلهای موجود در سرور ریموت و دیگر منابع میدهد.
پروتکل SMB پروتکل ارتباطی سرور – کلاینت / پاسخ – درخواست است که برای اشتراک گذاری دسترسی به فایلها، پرینترها، پورت های سریال و دیگر منابع موجود در شبکه استفاده میشود. مثلا کامپیوتر متصل به شبکه ویندوزی میتواند با پرینتر متصل به کامپیوتر دیگری در شبکه پرینت بگیرد. البته به شرطی که هر دو از پروتکل SMB پشتیبانی کنند.
پروتکل SMB با عنوان پروتکل پاسخ – درخواست هم شناخته میشود یعنی چندین پیغام را بین کلاینت و سرور منتقل میکند تا ارتباط برقرار شود. کلاینت میتواند فایل های روی ریموت سرور را باز کرده، بخواند، منتقل، ایجاد و آپدیت کند. همچنین میتواند با هر برنامه سروری دیگری که تنظیماتِ دریافتِ درخواستِ کلاینت SMB را دارد ارتباط برقرار کند.
همچنین میتواند به عنوان پروتکل انتقالی برای interprocess communication – IPC کار کند. در IPC امکان اجرای چندین درخواست کاربر به صورت همزمان وجود دارد.
پروتکل SMB در سال 1983 توسط IBM ارایه شد و علاوه بر اینکه در کامپیوترهای ویندوزی قابل استفاده است با پیاده سازی نرم افزاری به نام Samba در پلتفرم هایی مثل یونیکس و Mac OS X هم استفاده میشود. بدین ترتیب کامپیوترها با سیستم عامل های مختلف میتوانند فایلها و پرینترها را در شبکه به اشتراک گذارند. بدین ترتیب اشتراک گذاری در دفتری با شبکه ویندوزی که گرافیست آن از Mac و متخصص IT آن از سیستم های لینوکس استفاده میکنند به مشکلی برنمیخورد.
کلاینت و سرور ممکن است از انواع مختلف SMB استفاده کنند که قبل از شروع Session با هم Negotiate میکنند.
SMB ممکن است ترافیک بالایی در شبکه ایجاد کند. یکی از راهکارهای حل این مشکل استفاده از DSN است. راهکار دیگر استفاده از Windows Internet Naming Service – WINS است که البته رواج زیادی ندارد.
پروتکل SMB چگونه کار می کند؟
پروتکل SMB در لایه 7 از مدل OSI یعنی لایه اپلیکیشن کار میکند پس متکی بر پروتکلهای سطح پایین برای انتقال است. پروتکل لایه انتقال که SMB اغلب از آن استفاده میکند NetBIOS over TCP/IP یا NBT است. امروزه برای ارتباط بین دستگاههایی که از SMB روی TCP/IP پشتیبانی نمیکنند باید از NetBIOS روی پروتکلهای انتقال مانند TCP/IP استفاده شود.
برای آشنایی با مدل مرجع OSI مقاله “مدل OSI چیست؟” را مطالعه کنید.
SMB میتواند برای انتقال از TCP/IP روی پورت 445 استفاده کند. Dielect های اولیه از API های NetBIOS روی TCP/IP و یا پروتکلهای legacy مانند Internetwork Packet Exchange یا NetBEUI استفاده میکردند.
پروتکل SMB پروتکل سرور کلاینتی است و شامل مجموعه بسته های دیتا است که هر کدام شامل درخواستی است که کلاینت میفرستد یا پاسخی که سرور میفرستد. این بسته ها به صورت زیر هستند:
- بستههای کنترل Session که اتصالی را ایجاد و قطع میکنند تا منابع سرور به اشتراک گذاشته شود.
- بستههای دسترسی فایل که فایلها و دایرکتوریهای روی سرور ریموت قابل دسترسی و دستکاری میکنند.
- بستههای پیغام عمومی که دیتا را برای صفهای پرینت، mailslotها و named pipe ها ارسال میکنند و دیتای وضعیت صفهای پرینت را فراهم میکنند.
- برخی بستههای پیغام گروهبندی شده و در یک انتقال فرستاده میشوند. بدین ترتیب زمان تاخیر کم شده و پهنای باند شبکه افزایش مییابد. به این کار Packet Batching میگویند.
امنیت SMB
مدل امنیتی استفاده شده در SMB شامل دو سطح امنیتی است: کاربر و اشتراک گذاری. اشتراک گذاری – share یعنی فایل و دایرکتوری یا پرینتری که کلاینت ها میتوانند به آن دسترسی یابند.
- احراز هویت سطح کاربر: کلاینتی که میخواهد دسترسی به Share روی سرور داشته باشد، باید نام کاربری و پسورد ارایه کند. پس از احراز هویت، اجازه دسترسی به کاربر داده میشود. این سطح امنیتی به ادمینهای سیستم امکان تعیین کاربران و گروههای مجاز به دسترسی به Share را میدهد.
- احراز هویت سطح Share: دسترسی به Share با پسوردی که به آن اختصاص داده شده کنترل میشود. برخلاف امنیت سطح کاربر، این سطح امنیتی برای احراز هویت به نام کاربری نیازی ندارد.
پسورد در هر دوی این سطوح امنیتی قبل از ارسال به سرور رمزگذاری میشود. SMB از رمزگذاریهایی مانند NTLM و LAN Manager پشتیبانی میکند.
Dialect های پروتکل SMB
مجموعه بسته های از نوع پیغام که نسخه خاصی از پروتکل را تعریف میکند، dialect نامیده میشود. پروتکل The Common Internet File System – CIFS یک Dialect از SMB است. هر دوی این پروتکلها روی VMS، نسخه های متفاوت Unix و دیگر سیستم عاملها قابل دسترسی هستند.
اغلب کلاینت های ویندوزی حداقل از 6 دیالکت مختلف SMB پشتیبانی میکنند. برای برقراری ارتباط بین کلاینت و سروری که از SMB استفاده میکنند باید Dialect ای که هم کلاینت و هم سرور پشتیبانی میکنند و بالاترین سطح کارایی را دارد انتخاب کنید. به این کار negotiating the dialect گفته میشود.
انواع پروتکل های SMB باعث بهبود قابلیتها، ارتقاپذیری، امنیت و کارایی میشوند. در ادامه Dialect های مهم پروتکل SMB را معرفی میکنیم:
SMB 1.0 در سال 1984 توسط IBM برای اشتراک گذاری فایل در DOS ارایه شد. با این کار، مکانیزم Caching در سمت کلاینت با عنوانopportunistic locking – OpLock معرفی شد. تا ترافیک شبکه کم شود. بعدها مایکروسافت پروتکل SMB را در محصول LAN Manager عرضه کرد.
CIFS در سال 1996 در ویندوز 95 ارایه شد. پشتیبانی از اندازه بزرگتر فایل، انتقال مستقیم روی TCP/IP، لینک های هارد و سیمبولیک افزوده شد. این نسخه، کارایی شبکه WAN را کم میکرد چون تعداد Acknowledgement ها زیاد و زمان تاخیر بالا بود. در نسخه بعدی یعنی SMB 2.0 کارایی پروتکل بالا رفت و تعداد صدها دستور و زیردستور به 19 تا کاهش یافت.
SMB 2.0 در سال 2006 در ویندوز ویستا و ویندوز سرور 2008 عرضه شد. پشتیبانی از WAN acceleration افزوده شد و با حذف برخی موارد، کارایی و ارتقاپذیری و Resiliency افزایش یافت.
SMB 2.1 در سال 2010 در ویندوز سرور 2008 R2 و ویندوز 7 عرضه شد. صرفهجویی در مصرف برق، پشتیبانی از واحدهای انتقال بزرگ (MTU بزرگ).
SMB 3.0 در سال 2012 در ویندوز 8 و ویندوز سرور 2012 ارایه شد. با افزودن برخی ویژگیها در مدیریت، امنیت، بکاپگیری، کارایی و دسترس پذیری پیشرفتهایی حاصل شد. این ویژگیها عبارتند از:
- SMB Multichannel
- SMB Direct
- transparent failover of client access
- Remote VSS support, SMB Encryption
SMB 3.0.2 در سال 2014 در ویندوز 8.1 و ویندوز سرور 2012 R2 ارایه شد. قابلیت پشتیبانی از CIFS و SMB 1.0 کاملا غیرفعال و آپدیتهایی در زمینه کارایی ارایه شد.
SMB 3.1.1 در سال 2015 در ویندوز 10 و ویندوز سرور 2016 ارایه شد. قابلیت پشتیبانی از رمزگذاری و preauthentication integrity ارایه شد تا از هک از نوع man-in-the-middle جلوگیری شود.
در سال 2017 باج افزارهای WannaCry و Petya به SMB 1.0 حمله کردند و بدافزار را روی کلاینت ها لود و در شبکه تکثیر کردند. مایکروسافت وصلهای در این زمینه ارایه داد اما تاکید شد که CIFS و SMB 1.0 از سیستم ها غیرفعال شود. در سال 2020 هم دو حفره امنیتی SMBGhost و SMBleed توانست بخش احراز هویت SMB را با مشکل مواجه کند.
مقایسه Samba و SMB
Samba در سال 1992 عرضه شد و پیاده سازی متن باز پروتکل SMB برای یونیکس و لینوکس است. Samba از موارد زیر پشتیبانی میکند:
- اشتراک گذاری فایل
- سرویسهای پرینت
- authentication و authorization
- name resolution
- service announcements بین سرورهای لینوکس/یونیکس و کلاینت های ویندوزی