مقدمه:
با گسترش سیستمهای اینترنت اشیا (IoT)، پروتکل MQTT به عنوان یک انتخاب اصلی برای ارتباط میان دستگاهها مطرح شده است. اما امنیت MQTT یکی از چالشهای اساسی برای اجرای موفقیتآمیز این پروتکل در محیطهای صنعتی حساس مانند شبکه توزیع گاز، برق، یا کنترل فرآیند محسوب میشود. در این مقاله با تهدیدهای امنیتی MQTT، سطوح مختلف امنیت، و راهکارهای دفاعی در سطح شبکه، انتقال و کاربرد آشنا خواهید شد.
[ez-toc]
۱. تهدیدهای امنیتی MQTT
در محیطهای واقعی، چندین تهدید اصلی میتواند امنیت پروتکل MQTT را به خطر بیاندازد:
-
دسترسی غیرمجاز به تجهیزات کلاینت یا سرور
-
شنود و رهگیری پیامها
-
حملات تزریق پیام کنترلی یا جعل بسته
-
حملات DoS (انکار سرویس)
-
اسکن تاپیکها توسط مهاجم
-
سوءاستفاده از شناسههای کلاینت یا Credentialها
-
اتصالهای مشکوک و ارسال پیام بدون اشتراک
۲. امنیت در سطوح مختلف MQTT
۲.۱. سطح شبکه (Network Level)
-
استفاده از شبکه خصوصی یا VPN
-
پیادهسازی DMZ برای جداسازی سرور MQTT از شبکه داخلی
-
استفاده از فایروال برای فیلتر ترافیک
۲.۲. سطح انتقال (Transport Layer)
-
پیادهسازی TLS/SSL برای رمزنگاری ارتباط
-
استفاده از پورت 8883 (استاندارد برای MQTT با TLS)
-
اطمینان از اعتبار گواهی X.509 سرور
۲.۳. سطح کاربرد (Application Layer)
-
احراز هویت با Username/Password یا Client ID
-
استفاده از JWT یا گواهی دیجیتال
-
رمزگذاری Payload بهصورت جداگانه برای امنیت مضاعف
۳. احراز هویت در MQTT
روشهای رایج:
-
Username + Password: اطلاعات ارسال شده در پیام CONNECT
-
Client ID: شناسه یکتای دستگاه (مثل MAC یا UUID)
-
گواهی X.509: در ارتباطات TLS
-
احراز هویت ترکیبی: استفاده از چند شناسه همزمان
مثال: احراز هویت در HiveMQ
HiveMQ با استفاده از پلاگیننویسی (مثلاً OnAuthenticationCallback) امکان اتصال به پایگاه داده، LDAP یا وبسرویس را برای احراز هویت فراهم میسازد.
۴. صدور مجوز و کنترل دسترسی (Authorization)
مجوز (Authorization) یعنی تعیین اینکه هر کلاینت به چه تاپیکهایی میتواند Publish یا Subscribe کند.
| وضعیت | رفتار کارگزار |
|---|---|
| کلاینت بدون مجوز Publish کند | قطع اتصال یا نادیده گرفتن پیام |
| کلاینت بدون مجوز Subscribe کند | بازگرداندن Return Code مناسب |
مجوزها معمولاً با استفاده از لیستهای کنترل دسترسی (ACL) یا سیاستهای مبتنی بر نقش (RBAC) پیادهسازی میشوند.
۵. TLS و امنیت رمزنگاری در MQTT
نکات کلیدی در استفاده از TLS:
-
استفاده از پورت 8883
-
اجتناب از Cipher Suiteهای ضعیف یا NULL
-
اعتبارسنجی گواهینامه سرور (Name Matching)
-
فعالسازی Session Resumption برای کاهش بار پردازشی در دستگاههای سبک
توصیه:
همیشه از TLS نسخه 1.2 یا 1.3 با الگوریتمهای امن استفاده کنید و از رمزگذاری نقطه به نقطه در کنار احراز هویت بهره بگیرید.
۶. رفتارهای مشکوک و نظارت امنیتی
کارگزار باید قادر به شناسایی رفتارهای زیر باشد و در صورت نیاز اقدام کند:
-
تلاشهای مکرر برای اتصال یا احراز هویت
-
قطع ناگهانی و غیرعادی اتصال
-
اسکن تاپیکها یا تلاش برای اشتراک در همه تاپیکها
-
ارسال پیام به تاپیکهایی که هیچ مشترکی ندارند
-
کلاینتهای خاموش یا بدون فعالیت
۷. ایمنسازی MQTT از دید زیرساخت
| لایه | اقدامات امنیتی |
|---|---|
| زیرساخت | استفاده از فایروال، DMZ، آنتیویروس، مانیتورینگ |
| سیستمعامل | بروزرسانیها، حداقلسازی سرویسها، سختافزار امن |
| MQTT Broker | تنظیم ACL، محدودسازی تاپیکها، پلاگین امنیتی، Rate Limiting |
۸. رمزنگاری سبک برای کلاینتهای محدود
دستگاههایی که پردازش محدودی دارند میتوانند از موارد زیر بهرهمند شوند:
-
TLS Session Resumption
-
رمزنگاری با الگوریتمهای سبک مانند AES-128 یا ECC
-
استفاده از ISO 29192 برای رمزنگاری سبک
۹. پروفایلهای امنیتی پیشنهادی
| پروفایل امنیتی | توضیح |
|---|---|
| ارتباط شفاف | بدون رمزنگاری – فقط در شبکه بسته توصیه میشود |
| شبکه امن | اجرا در داخل VPN یا VLAN جداگانه |
| انتقال امن (TLS) | رمزنگاری با TLS و احراز هویت گواهی کلاینت |
| رمزنگاری سطح کاربرد | رمزگذاری پیامها داخل Payload بهصورت مجزا |
برای امنیت MQTT اکیداً توصیه میشود که پیادهسازیهای سروری که TLS را ارائه میکنند، باید از پورت 8883 در TCP استفاده کند. تعدادی تهدید وجود دارد که ارائه دهندگان راهكار باید در نظر بگیرند. مثلا:
- تجهيزات ممکن است به خطر بیافتند.
- دادههای ذخيره شده در كلاينتها و سرورها ممکن است قابل دسترسی باشند.
- رفتارهای پروتکل ممکن است عوارض جانبی داشته باشد (مانند «حملات زمانبندی»)
- حملات انکار سرویس (DoS).
- ارتباطات میتواند رهگیری، تغییر، مسیریابی مجدد یا افشا شود.
- تزریق بستههای کنترلي جعلی
- راه حل های امنسازي MQTT اغلب در محیطهای ارتباطی متخاصم مستقر میشوند. در پیادهسازیها اغلب نیاز به ارائه مکانیسمهایی برای موارد زیر دارند:
- احراز هویت کاربران و تجهيزات
- مجوز دسترسی به منابع سرور
- یکپارچگی پكتهای کنترلی MQTT و دادههای کاربردی موجود در آن
- حریم خصوصی پكتهای کنترلی MQTT و دادههای برنامه موجود در آن
- به عنوان یک پروتکل انتقال، MQTT تنها به انتقال پیام مربوط میشود و بايد ویژگیهای امنیتی مناسب را ارائه دهد كه معمولاً با استفاده از TLS به دست میآید.
- رفتارهای غیرعادی كه نياز است سرور و كلاينت برای شناسایی حوادث امنیتی بالقوه به آنها نظارت کند. مانند:
- تلاش های مکرر برای اتصال
- تلاش های مکرر برای احراز هویت
- قطع غیرعادی اتصالات
- اسکن عنوان (تلاش برای ارسال یا اشتراک در بسیاری از موضوعات)
- ارسال پیامهای غیر قابل تحویل (بدون اشتراک در موضوعات)
- کلاینتهایی که متصل میشوند اما داده ارسال نمیکنند
سرور بايد کلاینت هایی را که قوانین امنیتی آن را نقض میکنند قطع کند. در پیادهسازیهای، سروری که رفتار نامطلوب را تشخیص میدهد بايد یک لیست پویا را بر اساس شناسههایی مانند آدرس IP یا شناسه مشتری پیادهسازی کند.
امنیت در MQTT به چندین لایه تقسیم شده و هر لایه از انواع مختلف حملات جلوگیری ميكند. از آنجا که MQTT یک پروتکل ارتباطی سبک و با کاربری آسان است. خود پروتکل صرفاً چند مکانیسم امنیتی را بیشتر مشخص نميكند. پیاده سازی های MQTT معمولاً از دیگر استانداردهای امنیتی پیشرفته و به روز (مانند SSL/TLS برای امنیت انتقال) استفاده میکنند. از آنجایی که تامین امنیت دشوار است، منطقی است که بر اساس استانداردهای پذیرفته شده عمومی بنا شود.
سطح شبکه
یکی از راههای ارائه یک اتصال امن و قابل اعتماد، استفاده از یک شبکه امن فیزیکی یا VPN برای کلیه ارتباطات بین كلاينت ها و کارگزاران است. این راه حل برای مشتركين عمده و فوق عمده داراي RTU و بخش گیتوی در ارتباطات مشتركين جزء مناسب است به اين صورت که گیتوی از یک طرف به كنتورها و از طرف دیگر با کارگزار از طریق VPN در ارتباط است.
سطح انتقال
هنگامی که محرمانگی هدف اصلی است، TLS/SSL معمولا برای رمزگذاری انتقال استفاده ميشود. این روش یک راه مطمئن و اثبات شده برای اطمینان از عدم خواندن دادهها در حین انتقال است و احراز هویت گواهی كلاينت را برای تأیید هویت هر دو طرف فراهم ميكند.
سطح کاربرد
در سطح انتقال، مخابره رمزگذاری شده و هویت ها احراز و تائید میشوند. پروتکل MQTT یک شناسه کلاینت و نام کاربری/رمز عبور برای احراز هویت تجهيزات در سطح برنامه ارائه ميكند. این ویژگی توسط خود پروتکل ارائه شده است. مجوز یا کنترل کارهایی که هر دستگاه مجاز به انجام آن است با پیادهسازی یک کارگزار خاص تعریف ميشود. علاوه بر این، امکان استفاده از رمزگذاری Payload در سطح برنامه برای ایمن سازی اطلاعات ارسالی (بدون نیاز به رمزگذاری انتقال تمام عیار) وجود دارد. در ادامه راهحلهای امنیتی رایج و مهم پیشبینی شده در پروتکل MQTT ارائه میشوند.
احراز هویت با شناسه کاربری و کلمه عبور
احراز هویت بخشی از امنیت سطح انتقال و کاربرد در MQTT است. برای احراز هویت كلاينت به سرور با کمک امنیت لایه انتقال (TLS)، از اعتبارسنجی موفقیت آمیز یک گواهی كلاينت استفاده ميشود. در سطح کاربرد، پروتکل MQTT نام کاربری/ رمز عبور را برای احراز هویت ارائه ميكند. در ادامه رویکردهای مختلفی در پیادهسازی کارگزار كه با احراز هویت همراه است توصیف ميشود.
پروتکل MQTT فیلدهای نامکاربری و رمزعبور را در پیام CONNECT برای احراز هویت ارائه ميكند. كلاينت این گزینه را دارد که هنگام اتصال به یک کارگزار MQTT، نام کاربری و رمز عبور را ارسال کند.
نام کاربری یک رشته رمزگذاری شده UTF-8 است. رمز عبور داده باینری با حداکثر 65535 بایت است. مطابق مشخصات MQTT ميتوان نام کاربری را بدون رمز عبور ارسال نمود، اما ارسال رمز بدون نام کاربری امکان پذیر نیست.
هنگامی که از احراز هویت با نام کاربری/ رمزعبور داخلی MQTT استفاده میشود، کارگزار MQTT اعتبارنامهها را بر اساس مکانیزم احراز هویت که پیادهسازی شده است ارزیابی ميكند و یکی از ReturnCode هاي تعریف شده را بر میگرداند.
هنگامی که نامکاربری و رمزعبور برای كلاينت تعریف ميشود، اطلاعات به صورت متن ساده برای کارگزار ارسال ميشود. این متن در برابر شنود آسیب پذیر است و راه آسانی را برای مهاجمان برای به دست آوردن اعتبارنامه فراهم ميكند. انتقال ایمن نامهای کاربری و رمزهای عبور نیاز به رمزگذاری دارد.
در ادامه به مکانیسم های پیشرفته احراز هویت برای پیاده سازی احراز هویت در سمت کارگزار ميپردازيم (به عنوان مثال، تأیید نام کاربری و رمز عبور ارائه شده با استفاده از ویژگی هایی مانند شناسه كلاينت برای احراز هویت).
چگونگی ایمن کردن MQTT
قبلا گفته شد که پروتکل MQTT یک نام کاربری و رمز عبور را در پیام CONNECT برای احراز هویت مهیا ميسازد. در اين بخش راهكارهاي بیشتری برای احراز هویت كلاينت معرفی میشود و نشان داده میشود که چگونه احراز هویت در سمت کارگزار MQTT پیادهسازی ميشود. علاوه بر نام کاربری و رمز عبور، كلاينتهاي MQTT اطلاعات دیگری مانند شناسه كلاينت را ارائه میدهند که ميتواند برای احراز هویت استفاده شود.
هر كلاينت MQTT یک شناسه كلاينت منحصر به فرد دارد. كلاينت این شناسه منحصر به فرد را در پیام CONNECT به کارگزار ارائه ميدهد. شناسه كلاينت ميتواند حداکثر 65535 کاراکتر داشته باشد (مطابق مشخصات MQTT 3.1.1 محدودیت قبلی 23 کاراکتر حذف شده). استفاده از شناسه منحصر به فرد 36 کاراکتری (UUID) یا سایر اطلاعات كلاينت منحصر به فرد به عنوان شناسه كلاينت، مانند آدرس MAC ماژول شبکه یا شماره سریال دستگاه امری متداول است.
در فرآیند احراز هویت، شناسه های كلاينت اغلب در ترکیب با نام کاربری و رمز عبور استفاده ميشود. یک راه متداول برای تأیید اینکه آیا یک کلاینت ميتواند به کارگزار MQTT دسترسی داشته باشد، اعتبارسنجی نام کاربری/رمز عبور و شناسه كلاينت است که برای آن ترکیب اعتبارنامه صحیح است. همچنین ميتوان نام کاربری/رمز عبور را نادیده گرفت و فقط با شناسه كلاينت احراز هویت کرد. با این حال، این روش یک روش امنیتی خوبي نیست. (برای برخی از سیستمها بسته به كاربرد، این نوع احراز هویت ممکن است کافی باشد).
گواهینامه X.509
یکی دیگر از روشهای احراز هویت ممکن، استفاده از گواهی كلاينت X.509 است. كلاينت این گواهی را در حین توافق TLS به کارگزار ارائه ميدهد (در ادامه به امنیت سطح انتقال و نحوه کار SSL/TLS با MQTT بیشتر پرداخته میشود). پس از یک توافق موفقیت آمیز TLS، برخی از کارگزاران مانند HiveMQ اجازه استفاده از اطلاعات گواهینامه را برای احراز هویت لایه برنامه میدهند. این کارگزار را قادر میسازد تا تمام اطلاعات گواهینامه را بخواند و از آن برای اهداف احراز هویت نیز استفاده کند. به هرحال گواهیهای كلاينت X.509 میتواند منبع بسیار خوبی برای احراز هویت كلاينتها در کارگزار MQTT باشد.
مثالی از پیاده سازی احراز هویت با کارگزار برند Hiveq MQTT
انواع مختلفی از اطلاعات برای احراز هویت یک كلاينت MQTT وجود دارد. ارتباط کارگزار MQTT و ماژول احراز هویت میتواند یک پایگاه داده، یک وب سرویس، یک فهرست LDAP یا یک لیست کنترل دسترسی ساده (ACL) باشد.
در ادامه نحوه اجرای منطق احراز هویت در کارگزار HiveMQ MQTT (که به اختصار HiveMQ نامیده میشود) شرح داده ميشود. کارگزار HiveMQ دارای یک سیستم افزونه منبع باز است که امکان اتصال به رویدادهای مختلف به کارگزار را مهیا میسازد. HiveMQ رابطهای پاسخگوی مختلفی را پیشنهاد ميدهد که پیادهسازی آنها در پلاگینهای سفارشی بسیار آسان است. کارگزار اجرای پلاگین را در زمان اجرا فراخوانی ميكند. HiveMQ رابط OnAuthenticationCallback را برای احراز هویت فراهم ميكند.
صدور مجوز توسط MQTT
مجوز، حق دسترسی به یک منبع را مشخص ميكند. مجوز شامل تعریف و اجرای سیاست های کنترلی است که چه کسی ميتواند کاری را با یک منبع خاص داشته باشد یا انجام دهد. شرایط زیر بخشهای ضروری مجوز هستند:
موضوع یا کاربری که میخواهد به یک منبع دسترسی پیدا کند.
منبع، شی یا سرویسی که باید از دسترسی غیرمجاز محافظت شود.
خطمشی که مشخص ميكند آیا یک عنوان یا کاربر به یک منبع دسترسی دارد یا خیر.
ارتباط احراز هویت و صدور مجوز
احراز هویت و صدور مجوز مفاهیم امنیتی مهمی هستند که در كنار هم امنيت را افزايش میدهند. اگر از قبل هویت کاربر یا عنوان احراز هویت نشود، اجازه دادن به کاربر یا عنوان ارزش چندانی ندارد. مجوز برای محدود کردن ورود و اجازه دادن به افراد، كلايينتها یا افراد واجد شرایط برای دسترسی به منابع، داده ها یا موارد خاص است.
انکار (Repudiation)
پس از تعریف خطمشیهای مجوز، یک سوال رایج این است که چگونه به كلاينت اطلاع دهیم که مجوز انتشار یا اشتراک در یک عنوان خاص را ندارد.
طراحان برنامه ممکن است نیاز به در نظر گرفتن استراتژیهای مناسب برای دستیابی به عدم انکار انتقال پيام داشته باشند.
انتشار
هنگامی که مشتری بدون مجوز صحیح عنواني را منتشر ميكند، کارگزار دو گزینه دارد:
کارگزار ميتواند ارتباط كلاينت را قطع کند زیرا براي انتشار در یک عنوان محدود مجاز نیست.
کارگزار ميتواند انتشار را به صورت عادی برای كلاينت تایید کند. در QoS1 یا QoS2 با پكتهای PUBACK یا PUBREL تصمیم بگیرید که پیام منتشر شده را برای كلاينتها ارسال نکند.
مشخصات فعلی MQTT 3.1.1 روشی مستقل از کارگزار برای اطلاع رسانی به كلاينتها در مورد انتشار غیرمجاز به غیر از قطع ارتباط كلاينت تعریف نميكند. گزینه های اعلان ممکن است در نسخههای آینده MQTT بهبود یابد.
اشتراک
هنگامی که كلاينت در یک عنوان مشترک ميشود، کارگزار باید هر اشتراک را با یک ReturnCode تأیید کند. ReturnCode ها شامل 4 کد مختلف هستند که عنوانهايي را با QoS و کدهای خطا تایید ميكند. اگر كلاينت حق اشتراک موضوع خاصی را نداشته باشد، کارگزار ميتواند به كلاينت اعلام کند که اشتراک رد شده است.
TLS/SSL
قبلتر احراز هویت و صدور مجوز بررسی گردید و در اینجا به رمزگذاری لایه انتقال با TLS پرداخته ميشود. امنیت لایه انتقال TLS و لایه سوکت های امن SSL، یک کانال ارتباطی امنی بین كلاينت و سرور را فراهم ميسازد. در هسته TLS و SSL پروتکلهای رمزنگاری هستند که از مکانیزم توافق برای مذاکره با پارامترهای مختلف برای ایجاد یک ارتباط امن بین كلاينت و سرور استفاده میکنند. پس از تکمیل توافق، یک ارتباط رمزگذاری شده بین كلاينت و سرور برقرار ميشود و هیچ مهاجمی نميتواند هیچ بخشی از ارتباط را شنود کند. سرورها یک گواهی X.509 (معمولاً توسط یک مرجع قابل اعتماد صادر ميشود) ارائه میدهند که كلاينت ها از آن برای تأیید هویت سرور استفاده ميكنند.
برنامهها میتوانند به طور مستقل مقادیر هش را در پیامهای خود قرار دهند. این میتواند یکپارچگی محتوای پكتهای کنترلی منتشر شده در سراسر شبکه و در حالت آماده باش را فراهم کند.
TLS الگوریتم های هش را برای تأیید صحت دادههای ارسال شده از طریق شبکه فراهم میکند.TLS میتواند دادههای ارسال شده از طریق شبکه را رمزگذاری کند. مجموعههای رمزنگاری TLS معتبری وجود دارد که شامل یک الگوریتم رمزگذاری NULL است که دادهها را رمزگذاری نمیکند. برای اطمینان از حفظ حریم خصوصی، كلاينتها و سرورها باید از این مجموعههای رمزنگاری اجتناب کنند.
یک برنامه ممکن است به طور مستقل محتویات پیامهای خود را رمزگذاری کند. این میتواند حریم خصوصی پیام برنامه را هم از طریق شبکه و هم در حالت آمادهباش را فراهم کند. پیاده سازیهای سرویس گیرنده و سرور میتوانند ذخیرهسازی رمزگذاری شده برای دادههای در حالت آماده باش مانند پیامهای برنامه ذخیره شده به عنوان بخشی از یک نشست فراهم کنند.
پیادهسازیهای سرویس گیرنده و سرور با استفاده از TLS باید قابلیتهایی را فراهم کنند تا اطمینان حاصل شود که هر گواهینامه SSL ارائه شده هنگام شروع اتصال TLS با نام میزبان كلاينت متصل یا سروری که به آن متصل است مرتبط است.
استقرار فیزیکی ممکن است سخت افزار ضد دستکاری را با انتقال داده های خاص در پيامهاي برنامه ترکیب کند. به عنوان مثال، یک تصحيح كننده ممکن است یک GPS تعبیه شده داشته باشد تا اطمینان حاصل شود که در مکان های غیرمجاز استفاده نمیشود. IEEE 802.1AR استانداردی برای پیادهسازی مکانیسمهایی برای احراز هویت یک دستگاه با استفاده از یک شناسه محدود رمزنگاری شده است.
اعتبارنامههای احراز هویت كلاينت یا سرور، مانند نام کاربری و رمز عبور، اگر گم شدهاند یا در معرض خطر تلقی میشوند باید باطل شوند و یا دوباره صادر شوند.
در مورد اتصالات طولانی مدت:
پیاده سازی های سرویس گیرنده و سرور با استفاده از TLS باید امکان راهاندازي مجدد نشست را برای ایجاد پارامترهای رمزنگاری جدید (جایگزینی کلیدهای جلسه، تغییر مجموعه های رمزنگاری، تغییر اعتبارنامههای احراز هویت) فراهم کند.
سرورها ممکن است ارتباط کلاینتها را قطع کنند و از آنها بخواهند با اعتبارنامه های جدید احراز هویت مجدد را انجام دهند.
MQTT و TLS
MQTT پروتکل انتقال متکی بر TCP است. به طور پیش فرض، اتصالات TCP از یک ارتباط رمزگذاری شده استفاده نميكنند. برای رمزگذاری کل ارتباطات MQTT، بسیاری از کارگزاران MQTT (مانند HiveMQ) اجازه استفاده از TLS را به جای TCP ساده میدهند. اگر از فیلدهای نام کاربری و رمز عبور پكت CONNECT پروتکل MQTT برای مکانیسمهای احراز هویت و مجوز استفاده میشود، باید قویاً استفاده از TLS در نظر گرفته شود.
پورت 8883 برای اتصال ایمن MQTT استاندارد شده است. نام ” secure-mqtt” استاندارد شده در IANA است. پورت 8883 منحصراً برای MQTT از طریق TLS رزرو شده است.
ایمن سازی سیستمهای MQTT
در اینجا بر روی استقرار ایمن یک سیستم MQTT تمرکز ميشود. لایههای مختلف امنیتی و نحوه تقویت استقرارشان برای جلوگیری و کاهش حملات بررسی خواهند شد. لایههای امنیتی مختلفی وجود دارد که باید در مورد آنها بحث گردد :
- زیرساخت
- سیستم عامل
- کارگزار MQTT
زیرساخت
کارگزاران MQTT معمولاً بر روی نوعی از زیرساخت شبکه مستقر میشوند. درک توپولوژی شبکه و هدف سیستم بسیار مهم است. همچنین مهم است که مهاجمان در اسرع وقت بلاك شوند تا از آسیب و خرابی سیستمهای پایین دستی جلوگیری شود.
فایروال
هر اتصال به یک کارگزار MQTT باید حداقل از یک فایروال عبور کند که قوانین پیچیدهای را برای دسترسی به اجزای پایین دستی پیادهسازی کند.
DMZ
DMZ اصطلاحاً منطقه ايمن شبکه میباشد. خدمات اینترنت مانند کارگزار MQTT اغلب در این منطقه وجود دارد. DMZ یک زیرشبکه است كه از دسترسی به سرویسهای پایین دستی مانند پایگاههای داده و خدمات برنامه داخلی توسط یک فایروال اضافی محافظت ميكند. اگر مهاجم به یکی از سرویسهای DMZ دسترسی پیدا کند، به طور خودکار به سیستمهای دیگر پشت فایروال اضافی دسترسی پیدا نميكند.
سیستم عامل
کارگزارهای MQTT بر روی سرورهایی (مجازی و فیزیکی) نصب میشوند که سیستم عاملهای مختلفی را اجرا ميكنند. قبل از اینکه در مورد امنیت برنامه کارگزار MQTT صحبت کنیم، درک این نکته مهم است که بسیاری از حملات بر روی حفرههای امنیتی در سیستم عامل یا نرمافزار و سرویسهایی که معمولاً با سیستم عامل نصب میشوند تمرکز دارند. نحوه امن سازي سيستم عامل ها مهم است كه در این بخش نميگنجد.
ایمنسازی سیستمهای MQTT (شبیه به هر سیستم فناوری اطلاعات) ميتواند چالش برانگیز باشد و امنیت باید در سطوح مختلف در نظر گرفته شود.
رمزنگاری سبک براي تجهيزات با پردازش محدود
استاندارد رمزگذاری پیشرفته AES و استاندارد رمزگذاری داده DES به طور گسترده مورد استفاده قرار گرفتهاند. ISO 29192 [11] توصیههایی را برای رمزنگاریهای ابتدایی که به طور خاص برای اجرا در تجهيزات “پاییندست” تنظیم شدهاند، ارائه میدهد.
تجهيزات با پردازش محدود و كلاينتها در شبکههای با پردازش محدود میتوانند از سرگیری نشست TLS استفاده کنند تا پردازشهای اتصال مجدد نشستها را کاهش دهند.
استفاده از SOCKS
پیادهسازی كلاينتها باید آگاهانه باشند که برخی به استفاده از پراکسیهای SOCKSv5 برای ایجاد اتصالات شبکه نیاز دارند. برخی از پیادهسازیهای MQTT میتوانند از تونلهای ایمن جایگزین (مانند SSH) از طریق استفاده از SOCKS باشد. در جایی که پیادهسازیها با SOCKS را انتخاب میکنند، باید از پروکسیهای SOCKS احراز هویت رمزعبور و نامکاربری پشتیبانی کنند.
پروفایلهای امنیتی
طراحان ممکن است بخواهند امنیت را به عنوان مجموعهای از پروفایلها در نظر بگیرند که میتوانند در پروتکل MQTT اعمال شوند. نمونه ای از سلسله مراتب امنیتی لایهای در زیر ارائه شده است.
مشخصات ارتباطی را پاک کنید
هنگام استفاده از مشخصات ارتباطی واضح، پروتکل MQTT روی یک شبکه باز اجرا میشود و هیچ مکانیسم ارتباطی ایمن اضافی وجود ندارد.
پروفایل ارتباط شبکه ایمن
هنگام استفاده از مشخصات ارتباط شبکه ایمن، پروتکل MQTT روی یک شبکه فیزیکی یا مجازی اجرا میشود که دارای کنترلهای امنیتی (مانند VPN) است.
مشخصات انتقال ایمن
هنگام استفاده از مشخصات انتقال ایمن، پروتکل MQTT روی یک شبکه فیزیکی یا مجازی و با استفاده از TLS اجرا میشود که احراز هویت، یکپارچگی و حریم خصوصی را فراهم میکند.
جمعبندی
امنیت MQTT یک ضرورت حیاتی برای موفقیت در پروژههای IoT و صنعتی است. از آنجا که MQTT ذاتاً سبک و ساده طراحی شده، لازم است در پیادهسازیها به کمک ابزارها، تنظیمات سرور و زیرساخت شبکه، امنیت در تمام سطوح پوشش داده شود. TLS، احراز هویت چندلایه، کنترل مجوز، نظارت رفتار، و فایروالهای دقیق ابزارهایی هستند که برای ایمنسازی کامل توصیه میشوند.
سوالات متداول
آیا MQTT بهخودیخود امن است؟
خیر، MQTT ذاتاً سبک است و ویژگیهای امنیتی پایهای دارد. باید با استفاده از TLS، احراز هویت و زیرساخت امن، تقویت شود.
چه پورتهایی برای MQTT امن استفاده میشود؟
پورت استاندارد 8883 برای اتصال رمزنگاریشده MQTT با TLS استفاده میشود.
بهترین روش احراز هویت در MQTT چیست؟
ترکیب Client ID منحصر بهفرد با Username/Password و در صورت نیاز گواهی X.509 بهترین روش است.
آیا امکان رمزنگاری پیامها بهصورت مستقل از TLS وجود دارد؟
بله، میتوان Payload را بهصورت مجزا رمزنگاری کرد (مثلاً با AES یا RSA)، حتی بدون TLS.
چگونه از حملات DoS در MQTT جلوگیری کنیم؟
با محدود کردن نرخ درخواستها (Rate Limiting)، لیست سیاه/سفید و تشخیص رفتارهای مشکوک توسط کارگزار.
