[Video] – Khai thác điểm yếu bảo mật của giao thức Modbus TCP
Sau khi ra loạt bài về những điểm yếu của các giao thức truyền thông công nghiệp, chúng tôi tiếp tục triển khai các thử nghiệm thực tế để chứng minh nguy hiểm luôn rình rập các hệ thống sử dụng những giao thức đó. Bài viết này mô tả thử nghiệm khai thác điểm yếu bảo mật của giao thức Modbus – TCP.
1. Modbus – TCP và điểm yếu của giao thức này.
Modbus là giao thức truyền thông do Modicon xuất bản năm 1979 để sử dụng với các bộ điều khiển PLC (Programmable Logic Controllers). Nó khá đơn giản, dễ triển khai và bảo trì so với các tiêu chuẩn khác và có ít hạn chế (ngoài hạn chế về kích thước gói dữ liệu và định dạng dữ liệu truyền). Ngoài ra, nó công khai và hoàn toàn miễn phí. Đó là những lý do khiến Modbus trở thành giao thức truyền thông nổi tiếng và khá phổ biến. Modbus thường được sử dụng để kết nối máy tính giám sát nhà máy / hệ thống với thiết bị đầu cuối từ xa (RTU) trong hệ thống Kiểm soát Giám sát và Thu thập Dữ liệu (SCADA) trong ngành điện lực. [1]
Modbus có rất nhiều phiên bản, tuy nhiên trong bài viết này chúng tôi thực hiện với Modbus – TCP. Đây là một biến thể được dùng để truyền thông qua mạng TCP/IP.
Các điểm yếu bảo mật chính trong giao thức này có thể kể đến như:
· Không được mã hóa.
· Không xác thực.
· Khung đơn giản.
Chi tiết về các điểm yếu bảo mật khác của giao thức chúng tôi đã có bài phân tích đầy đủ hơn, các bạn quan tâm có thể click vào đọc.
2. Các thiết bị phần cứng sử dụng trong thử nghiệm
Để dễ dàng quan sát kết quả của cuộc tấn công, chúng tôi xây dựng một hệ thống điều khiển đơn giản, sử dụng 2 PLC (1 master và 1 slave) sử dụng Modbus TCP để truyền nhận lệnh/dữ liệu điều khiển và hiển thị ra các đèn tương ứng.
Hình 1: Mô hình hệ thống điều khiển đơn giản, sử dụng Modbus TCP.
Hệ thống trên gồm 2 PLC Siemens S7-1200 với địa chỉ IP và địa chỉ MAC như hình, vận hành như sau:
PLC 1 (Master) | PLC 2 (Slave) |
Lấy tín hiệu điều khiển vật lý từ công tắc, gửi đi dưới dạng gói tin. | Đọc gói tin điều khiển từ Master để bật đèn chấp hành tương ứng. |
Gửi lệnh yêu cầu phản hồi trạng thái đèn chấp hành. | Lấy trạng thái các đèn chấp hành và gửi phản hồi cho Master dưới dạng gói tin. |
Nhận dữ liệu phản hồi từ Slave và hiển thị lên đèn trạng thái tương ứng |
Việc tấn công được thực hiện trên phần cứng sử dụng module Arduino Nano – Ethernet Shield.
Hình 2: module Arduino Nano + Ethernet Shield.
3. Tiến hành thử nghiệm tấn công
Cuộc tấn công thử nghiệm được chia làm 5 phase:
· Quét địa chỉ của các thiết bị trong mạng.
· Giả mạo địa chỉ và nghe lén (MITM).
· Phân tích các gói tin điều khiển thu được.
· Chỉnh sửa lệnh điều khiển.
· Kết thúc cuộc tấn công.
3.1. Phase 1: Quét địa chỉ của các thiết bị trong mạng
Đầu tiên, chúng tôi thực hiện rà quét địa chỉ của các thiết bị hiện có trong mạng, trong trường hợp này là các PLC. Dải địa chỉ quét được giới hạn trong khoảng (192.168.0.0 – 192.168.0.255) để đỡ mất thời gian chờ.
Hình 3: Module tấn công đã phát hiện được địa chỉ của 2 PLC.
Các thiết bị trong mạng (2 PLC Siemens) đã phản hồi địa chỉ của mình tới module tấn công, các địa chỉ này sẽ được lưu lại để phục vụ cho các hành động tiếp theo.
3.2. Phase 2: Giả mạo địa chỉ và nghe lén
Sau khi đã phát hiện cặp địa chỉ của 2 PLC, chúng tôi tiến hành gửi các gói tin giả mạo địa chỉ đến 2 thiết bị này. Mục tiêu của bước này là khiến cho 2 PLC hiểu nhầm địa chỉ đích để gửi tin.
Hình 4: Giả mạo địa chỉ.
Ngay sau khi giả mạo thành công địa chỉ, các gói tin giữa 2 PLC đã được chuyển tiếp qua module tấn công. Các gói tin này được lưu lại dưới dạng file hex dump để phục vụ cho việc tìm hiểu và phân tích về hệ thống trong Phase tiếp theo.
Hình 5: Các gói tin đã gửi qua địa chỉ MAC “lạ”.
Hình 6: Dữ liệu của các gói tin được module tấn công export dưới dạng hex dump.
Sau bước này, chúng tôi đã thu thập được một lượng lớn các gói tin giữa 2 thiết bị trên. Bước tiếp theo sẽ tiến hành phân tích xem bên trong đó chứa những gì.
3.3. Phase 3: Tìm hiểu và phân tích về hệ thống dựa trên các gói tin thu được
Các gói tin thu được sẽ lưu dưới dạng hex dump khá khó đọc, tuy nhiên chúng ta đã có một công cụ rất đắc lực – Wireshark.
Hình 7: File hex dump thu được từ việc nghe lén.
Hình 8: Kết quả sau khi import file hex dump vào Wireshark.
Từ giao diện wireshark có thể thấy rất nhiều gói tin Modbus TCP được ghi lại. Phân tích các gói tin này cùng với hoạt động thực tế đã phân loại được các lệnh điều khiển tương ứng với từng hành động như sau:
Phần data của lệnh Write query (Fcode =16) và Read reply (Fcode =03) chứa dữ liệu của thanh ghi đầu tiên dùng để bật tắt đèn tương ứng.
Giá trị thanh ghi đầu tiên | Hành động |
0x0000 | Tắt tất cả các đèn |
0x8000 | Bật đèn số 1 |
0x4000 | Bật đèn số 2 |
0x2000 | Bật đèn số 3 |
0xC000 | Bật đèn 1 và đèn 2 |
0x6000 | Bật đèn 2 và đèn 3 |
0xA000 | Bật đèn 1 và đèn 3 |
0xE000 | Bật cả 3 đèn |
Qua đây, chúng tôi đã có thể biết được phần dữ liệu quan trọng đối với hoạt động bình thường của hệ thống, từ đó đưa ra kịch bản tấn công như ý.
3.4. Phase 4: Chỉnh sửa lệnh điều khiển
Dựa vào những thông tin đã có phía trên, chúng tôi tiến hành thay đổi giá trị thanh ghi Modbus đầu tiên trong gói tin nhận được để hệ thống vận hành sai nhưng phía đèn hiển thị vẫn bình thường.
>> Kết quả phần này được show ở video cuối bài viết.
Trạng thái của hệ thống khi bị tấn công: đèn chấp hành phía Slave bật tắt liên tục, trong khi đèn hiển thị phía Master hoàn toàn đúng như trạng thái công tắc. Trong thực tế, điều này rất nguy hiểm nếu phòng điều khiển nằm tách biệt với dây chuyền sản xuất, nhân viên vận hành dựa vào bảng điều khiển sẽ không hề hay biết trạng thái thực tế của hệ thống, có thể gây ra hậu quả khôn lường.
3.5. Phase 5: Kết thúc tấn công
Sau khi cuộc tấn công xảy ra, chúng tôi thực hiện bước cuối cùng nhằm trả lại trạng thái bình thường cho hệ thống nhằm che giấu cuộc tấn công và gây sự lúng túng cho nhân viên bảo trì.
Kết quả phần này cũng được show ở video đính kèm.
4. Giải pháp khuyến nghị
Cuối cùng là một vài khuyến nghị chúng tôi đưa ra để phòng ngừa những vụ tấn công tương tự.
· Sử dụng các giao thức truyền thông bảo mật hơn, có thể thay thế bằng phiên bản Modbus Secure – một bản nâng cấp phần bảo mật của giao thức Modbus.
· Kiểm soát chặt chẽ những người được tiếp xúc với hệ thống.
·
Tác giả