آسیبپذیری پروتکل SCADA Modbus
پروتکلهای نظارتی و یا اکتساب داده ( SCADA ) پروتکلهای ارتباطی هستند که برای مبادله پیامهای کنترل در شبکههای صنعتی طراحی شدهاند. طی سه دهه گذشته، صدها مورد از این پروتکلها برای ارتباطات سریال LAN و WAN در طیف گستردهای از صنایع از جمله صنایع پتروشیمی، خودرو، حمل و نقل و تولید برق ایجاد شدهاند. SCADA MODBUS پرکاربردترین پروتکل SCADA است. این مقاله مروری بر پروتکل MODBUS ارایه میدهد و نشان میدهد که چرا این پروتکل یکی از آسیبپذیرترین گروهها در حملات سایبری است.
SCADA MODBUS یک پروتکل پیامرسان در لایه کاربردی است که در سطح ۷ مدل OSI قرار داده شدهاست. این پروتکل سیستم ارتباطی بین دستگاهها و تجهیزات متصل به انواع مختلف Bus یا شبکهها را فراهم میکند که توسط Modicon در سال ۱۹۷۹ برای استفاده با کنترلکنندههای منطقی قابلبرنامهریزی (PLC) ایجاد و توسعه دادهشده است. این پروتکل روشی است که برای انتقال اطلاعات بر روی خطوط سریال بین دستگاههای الکترونیکی استفاده میشود. دستگاهی که اطلاعات را درخواست میکند، Modbus Master نامیده میشود و دستگاه هایی که اطلاعات را تامین میکنند از نوع Slave هستند. در یک شبکه Modbus استاندارد، تنها یک Master وجود دارد و میتوان تا ۲۴۷ عدد Slave داشت، که هر کدام با یک عدد منحصر به فرد از ۱ تا ۲۴۷ شماره گذاری میشود. Master نیز میتواند اطلاعاتی را برای Slave بنویسد.

سادگی و کارایی پروتکل MODBUS باعث شد که این پروتکل به گستردهترین پروتکل شبکه در محیط تولید صنعتی تبدیل شود. این پروتکل توسط صدها فروشنده در هزاران سخت افزار مختلف برای انتقال دادههای گسسته / آنالوگ I/O و ثبت دادهها بین دستگاههای کنترل پیاده سازی و به کارگرفته شدهاست.
در ارتباطات اینترنتی می توانید به پورت 502 رزرو شده در سیستم در پشته TCP / IP به پروتکل MODBUS دسترسی داشته باشید.
یک طرح ساده درخواست – پاسخ برای تمام تراکنش های MBAP استفاده میشود. گیرنده (که به عنوان Master نیز شناخته میشود) یک درخواست و سرور (که به عنوان Slave شناخته میشود) را آغاز میکند. برای مثال، زمانی که رابط کاری ماشین انسانی ( HMI ) نیاز به یک مقدار از PLC دارد، یک پیغام درخواست برای شروع فرآیند انتقال داده ارسال میکند. سپس PLC یک پاسخ فراهم میکند که اطلاعات خواستهشده را ارایه میدهد. در این موقعیت، دستگاه اجرا کننده HMI به عنوان سرویس گیرنده / Master عمل میکند و PLC به عنوان سرویس دهنده / Slave عمل میکند. هر پیغام شامل یک کد کاربردی است که توسط سرویس گیرنده / Master تنظیم میشود و نشان میدهد که سرویس دهنده / Slave چه نوع اقدامی برای اجرا دارد. کدهای عملکرد اعدادی هستند که به Slave می گویند به کدام جدول دسترسی داشته باشد و اینکه از آن جدول بخواند یا بنویسد.
به دنبال یک درخواست، 4 نتیجه احتمالی از سمت Slave وجود دارد:
- این درخواست با موفقیت توسط Salve پردازش میشود و یک پاسخ معتبر فرستاده میشود .
- این درخواست توسط Slave دریافتنشده است، بنابراین هیچ پاسخی ارسال نمیشود .
- این درخواست توسط Slave به همراه یک خطا، CRC یا LRC دریافت میشود. Slave این درخواست را نادیده میگیرد و هیچ پاسخی نمیدهد.
- درخواست بدون خطا دریافت میشود، اما Slave به دلیل دیگری نمیتواند آن را پردازش کند. در این حالت Salve با یک Exception پاسخ میدهد.
یک نمونه از کدهای Exception:
02- آدرس داده غیرقانونی- آدرس داده دریافت شده در درخواست یک آدرس مجاز برای Slave نمیباشد در این حالت Slave یک Exception با کد 02 ایجاد میکند.
آسیبپذیریهای پروتکل MODBUS / TCP
پروتکل MODBUS / TCP پیادهسازی شده دارای آسیبپذیریهای متعددی است که میتواند به حملهکننده اجازه انجام فعالیتهای اکتشافی و یا صدور فرمانهای دلخواه را بدهد.
عدم قابلیت اعتماد : همه پیامهای MODBUS به صورت متن شفاف از طریق رسانههای انتقالی منتقل میشوند.
عدم انسجام : هیچ یکپارچگی در پروتکل نرمافزار MODBUS وجود ندارد. در نتیجه، به پروتکلهای لایه پایینتر برای حفظ تمامیت بستگی دارد.
عدم تایید هویت : هیچ تایید هویتی در هیچ سطح از پروتکل MODBUS وجود ندارد. در برخی فرامین برنامه نویسی که به صورت مستند درنیامده اند ممکن است استثنا وجود داشته باشد.
قاب بندی ساده : فریم های MODBUS / TCP از طریق اتصالات TCP ایجاد شده ارسال میشوند. در حالی که این اتصالات معمولا قابلاعتماد هستند، اما دارای یک عیب قابلتوجه هستند، که در ادامه به آن اشاره خواهد شد. اتصال TCP قابل اعتماد تر از UDP است، اما کاملا تضمین نیست.
عدم ساختار نشست : مانند بسیاری از پروتکلهای درخواست / پاسخ ( به عنوان مثال SNMP ،HTTP، و غیره ) MODBUS / TCP شامل تراکنش های کوتاهمدت است که در آن، Master یک درخواست برای Salveای که منجر به یک اقدام واحد میشود را آغاز میکند. هنگامی که با عدم تایید هویت و تعداد توالی اولیه TCP ( ISN ) در بسیاری از وسایل تعبیهشده ترکیب میشود، برای حمله کنندگان امکان تزریق دستورها بدون اطلاع از نشست موجود امکانپذیر میشود.
این آسیبپذیری ها به یک حملهکننده اجازه میدهد تا فعالیت شناسایی را در شبکه مورد هدف انجام دهد. اولین آسیبپذیری که در این زمینه وجود دارد، چون یک دستگاه Salve SCADA MODBUS ممکن است پاسخ Exception به عملکرد غیر قانونی را برای پرس و جوها که حاوی یک کد کاربردی پشتیبانی نشده است، بازگرداند. یک مهاجم غیرمجاز از راه دور میتواند با ارسال کدهای عملکرد دستکاری شده برای انجام شناسایی در شبکه هدف، از این آسیبپذیری سواستفاده کند.
علاوه بر حالت قبل یک آسیبپذیری ناشی از چندین پاسخ غیر قانونی چندگانه ایجاد شده برای پرس و جوها میباشد که حاوی یک آدرس Salve غیر قانونی هستند. یک مهاجم غیرمجاز از راه دور میتواند با ارسال پرس و جوهایی که حاوی آدرس های نامعتبر به شبکه هدف قرار گرفته و جمع آوری اطلاعات در مورد میزبانهای شبکه از پیامهای برگشت یافته، از این آسیب پذیری سوء استفاده کند.
آسیبپذیری دیگر ناشی از عدم وجود کنترلهای امنیتی کافی در پیادهسازی پروتکل MODBUS / TCP است. مشخصات پروتکل شامل یک مکانیسم تایید اعتبار برای تایید ارتباط بین Master و دستگاههای Salve نشده است. این عیب میتواند به مهاجم غیرمجاز اجازه دهد که دستورهای دلخواه را به هر Salve از طریق یک Master MODBUS صادر کند.
پروتکل MODBUS / TCP حاوی یک آسیبپذیری دیگر است که میتواند به حملهکننده اجازه دهد تا شرایط ( DoS ) سرویس را در یک سیستم هدفمند ایجاد کند.
این آسیبپذیری تاثیر گذار ناشی از خطای پیادهسازی در پروتکل در هنگام پردازش درخواست ورودی گسسته و پیغامهای پاسخ است.
یک مهاجم غیرمجاز از راه دور میتواند با ارسال پارامترهای درخواست یا پاسخ که حاوی مقادیر مخرب برای گزینه فیلد داده است به سیستمی که MODBUS / TCP آسیب پذیر در آن پیاده سازی شده باشد، از این آسیب پذیری سوء استفاده کند. پردازش این پیامها میتواند شرایط DoS را در سیستم آسیبپذیر ایجاد کند.
یک حمله دیگر به Modbus میتواند بسته TCP باشد که از حداکثر طول تجاوز میکند.
Modbus TCP پروتکلی است که معمولا در شبکههای Scada و DCS برای کنترل فرآیند استفاده می شود. MODBUS اندازه PDU را تا ۲۵۳ بایت محدود میکند تا اجازه دهد بسته از طریق خط سریال، رابط RS – ۴۸۵ ارسال شود. Modbus TCP یک Protocol برنامه کاربردی ۷ بایتی ( MBAP ) را به PDU ارسال میکند و PDU MBAP در یک بسته TCP به صورت کپسوله دراورده شدهاست. این حد حداکثر اندازه بسته قانونی را تعیین میکند.
یک حملهکننده یک بسته ویژه را بیش از ۲۶۰ بایت ایجاد میکند و آن را به کلاینت و سرور میفرستد. اگر کلاینت و یا سرور به طور نادرست برنامهریزی شده باشند، این میتواند به یک سرریز بافر موفق یا حمله انکار سرویس منجر شود.

حمله به سیستمهای IoT با استفاده از Modbus
سادهترین حمله در برابر Modbus این است که ترافیک را در یک شبکه شنود کنید، دستگاه Modbus را پیدا کنید و سپس فرمانهای مخرب برای دستگاههای Modbus را صادر کنید.
Modbus / TCP هیچ ویژگی امنیتی یا رمزنگاری ندارد، بنابراین میتوان از Wireshark برای جمعآوری اطلاعات که در شبکه هستند و پورت Modbus استفاده کنید.
محتوای آن بستهها را بخوانید. از آنجا که Modbus رمزنگاری نشده و به هیچ وجه ایمن نیست، بستههای اطلاعاتی در حالت متن ساده منتقل می شوند. Wireshark به شما اجازه میدهد به راحتی ببینید چه چیزی در داخل این بستهها قرار دارد. در این حالت، ما به دنبال آدرسهای BMS و آدرس IP دستگاه دریافتکننده Modbus نگاه میکنیم. پس از آن ما کدهای عملکرد را میبینیم و با تمام این دادهها، شناسایی دستگاه Modbus و یافتن نقشه Modbus برای شناسایی فرمانهای کنترلی آن آسان میشود.
از دیدگاه نفوذ – زمانی که دستگاه و فرمانهای کنترل آن را از طریق Modbus شناسایی کردیم، هیچ محدودیتی برای این که چه کاری را میتوان برای دستگاه انجام داد وجود ندارد. شما میتوانید به سادگی دستورها را شروع کنید، انگار که سیستم BMS هستید.
امن کردن آسیب پذیریهای SCADA MODBUS
SCADA ،CIS ،ICS و سیستمهای مشابه مبتنی بر MODBUS همیشه هدف بسیاری از انواع حملات سایبری بودهاند به همین دلیل این سیستمها بیشتر از پیش آسیبپذیر میشوند. پروتکل ارتباطی MODBUS یک استاندارد ارتباطی گسترده در زمینه زیرساختهای حیاتی است. یک راهحل مناسب برای محفاظت از زیرساختها می تواند امن سازی ارتباطات MODBUS باشد در این حالت سیستمهای SCADA را میتوان قابل اعتماد تر جلوه داد.