Giao thức Modbus và vấn đề bảo mật

 

Bài thứ nhất trong loạt bài về bảo mật trong môi trường OT đã giới thiệu chung về hệ thống điều khiển công nghiệp. Trong bài tiếp theo này, chúng tôi đi vào vấn đề bảo mật của một giao thức lâu đời và phổ biến nhất của môi trường này – giao thức Modbus.

 

  1. Giới thiệu chung về Modbus

1.1.          Modbus là gì

Modbus là một giao thức truyền thông mở được phát triển bởi Modicon (giờ là một phần của Schneider Electric) để kết nối truyền thông các thiết bị với nhau, kết nối với bộ điều khiển. Ban đầu Modbus sử dụng kết nối RS232 nhưng sau đó sử dụng trên cả RS485 và RS422 để đạt chất lượng tốt hơn, tốc độ cao hơn và khoảng cách truyền xa hơn. Trong kết nối Modbus có Master/Slave (Cũng có thể hiểu Server/Client). Một thiết bị Master kết nối được với một hoặc nhiều thiết bị Client. Thường thì thiết bị PLC (Bộ điều khiển khả trình) là Master còn thiết bị trường là Client. Khi một thiết bị Master (PLC) muốn có thông tin từ thiết bị Client thì Master sẽ phát đi một thông điệp yêu cầu đến mọi thiết bị Client, nhưng chỉ có một thiết bị Client được yêu cầu sẽ phản hồi lại. Modbus được sử dụng rộng rãi trong truyền thông công nghiệp, một mạng truyền thông Modbus điển hình được thể hiện trong hình dưới.

Hình 1: Mạng truyền thông Modbus điển hình

          Modbus là giao thức tin nhắn ở lớp ứng dụng (lớp 7) trong mô hình OSI. Nó có thể được sử dụng để kết nối các thiết bị trường như sensor và motor với các bộ điều khiển, máy tính để thu thập, đo lường, giám sát các thông số trạng thái thiết bị và điều khiển các thiết bị đó. Modbus sử dụng để kết nối các thiết bị trường với PLC, PLC với SCADA, giữa các các bộ điều khiển với nhau. Modbus Gateway được sử dụng như bộ chuyển đổi, chuyển tiếp dữ liệu truyền thông.

Modbus là giao thức truyền thông tin nhắn hỏi/trả lời: Mỗi thiết bị được gắn một địa chỉ duy nhất. Mỗi lần yêu cầu hỏi, tất cả các thiết bị có kết nối truyền thông đến đều nhận được yêu cầu nhưng chỉ có duy nhất thiết bị có địa chỉ như trong yêu cầu sẽ phản hồi đáp ứng trả lời.

Hình 2: Yêu cầu và phản hồi thông điệp Modbus

          Trong công nghiệp, giao thức Modbus thường được sử dụng các chuẩn sau: Modbus ASCII, Modbus RTU, Modbus TCP/IP, Modbus TCP/IP Security. Modbus ASCII và Modbus RTU thường được sử dụng ở hiện trường (Fieldbus) với kết nối truyền thông nối tiếp. Modbus TCP/IP sử dụng ở mọi nơi trong mạng truyền thông công nghiệp với kết nối TCP/IP. Modbus TCP/IP Security sử dụng để đảm bảo an toàn thông tin.

Truyền thông Modbus, với truyền thông nối tiếp có 3 lớp (Vật lý, liên kết dữ liệu, ứng dụng), với truyền thông TCP/IP có 4 lớp (Vật lý, liên kết dữ liệu, mạng, ứng dụng).

Hình 3: Tương quan giữa Modbus và mô hình OSI

1.2.          Modbus ASCII và Modbus RTU

–   Modbus ASCII sử dụng kết nối truyền thông nối tiếp, mã hóa Hex

–   Modbus RTU sử dụng kết nối truyền thông nối tiếp, mã hóa nhị phân.

Giao thức Modbus hỗ trợ tối đa 247 thiết bị Slave được kết nối nối tiếp vào Master (không qua các thiết bị chuyển tiếp). Với cổng kết nối RS232, Modbus có khoảng cách truyền tối đa là 200m; với cổng kết nối RS485 khoảng cách này là 1200m.

Kích cỡ tối đa của tin nhắn Modbus là 256 bytes và tuân theo format dưới đây:

Trong đó Additional address chứa địa chỉ của thiết bị cần tương tác, Function code là mã hàm quy định lệnh đó sẽ thực hiện chức năng gì (xem bảng dưới), Data là dữ liệu, Error check dùng để kiểm tra lỗi theo phương pháp CRC (Cyclic Rredundancy Check).

Modbus function code  

Đọc ghi Slave (Master) – địa chỉ cơ bản

0 Thông tin quảng bá đến tất cả các thiết bị
1 Đọc output bits: 1 đến 2000 bits trên yêu cầu
2 Đọc intput bits: 1 đến 2000 bits trên yêu cầu
3 Đọc Holding registers: 1 đến 125 words trên yêu cầu
4 Đọc Input words: 1 đến 125 words trên yêu cầu
5 Ghi 1 Output bit: 1 bit trên yêu cầu
6 Ghi một holding register: 1 word trên yêu cầu
8,9,10,11 Cung cấp các chẩn đoán truyền thông thiết bị Slave
15 Ghi một hoặc nhiều Output bits: 1 đến 1968 bits trên yêu cầu
16 Ghi một hoặc nhiều Holding registers: 1 đến 123 words trên yêu cầu.

Bảng 1 Modbus function code

Các thành phần nêu trên được kết hợp để tạo nên Modbus Frame format gồm một ADU (Application Data Unit) và một PDU (Protocol Data Unit).

ADU: Additional address + PDU + Error check

PDU: Function code + Data

1.3.          Modbus TCP/IP

–         Modbus TCP/IP: Sử dụng truyền thông TCP/IP để gói (wrap up) gói phần Function code và Data của Modbus nối tiếp vào gói tin TCP/IP, cho phép định tuyến việc truyền gói tin, hỗ trợ nhiều thiết bị hơn, đồng thời tăng khoảng cách truyền tin.

–         Modbus TCP/IP sử dụng khối PDU của khung tin nhắn Modbus RTU

Sau đó chèn thêm phần MBAP (Modbus Application Protocol), được khung tin nhắn Modbus TCP/IP

MBAP Header, 7 bytes được thêm vào đầu của khung tin nhắn.

Transaction ID: 2 bytes

Protocol ID: 2 bytes

Length: 2 bytes

UnitID: 1 byte

Có thể hiểu đơn giản Modbus TCP/IP là giao thức Modbus RTU với giao diện TCP chạy trên Ethernet. TCP/IP cung cấp phương tiện truyền cho tin nhắn Modbus TCP/IP. Nói cách khác, TCP/IP cho phép khối dữ liệu nhị phân được trao đổi giữa các máy tính. Chức năng chính của TCP là đảm bảo rằng tất cả các gói dữ liệu được nhận chính xác, trong khi IP đảm bảo rằng các thông điệp được xử lý và định tuyến chính xác. Sự kết hợp TCP/IP chỉ là một giao thức truyền tải và không xác định ý nghĩa của dữ liệu và nội dung dữ liệu. Modbus TCP/IP sử dụng TCP/IP và Ethernet để mang dữ liệu của cấu trúc tin nhắn Modbus giữa các thiết bị tương thích với chuẩn mạng (TCP/IP). Thông điệp Modbus TCP/IP là một giao tiếp Modbus được gói gọn trong TCP/IP Ethernet. Trong thực tế, Modbus TCP nhúng khung dữ liệu Modbus vào khung TCP, đã bỏ đi CRC của Modbus.  Mã CRC của khung tin nhắn Modbus được loại bỏ, địa chỉ khung Modbus được thay thế bởi mã định danh đơn vị trong Modbus TCP/IP và trở thành một phần của tiêu đề giao thức ứng dụng Modbus (MBAP). ADU được nhúng vào trường dữ liệu của khung TCP tiêu chuẩn và được gửi qua TCP port 502. Cổng này được dành riêng cho các ứng dụng Modbus, tất cả các thiết bị Modbus Server và Modbus Client nhận và truyền dữ liệu Modbus thông qua port 502.

1.4.          Modbus TCP/IP Security

Giao thức Modbus/TCP Security là một biến thể tập trung vào bảo mật của giao thức Mobdbus/TCP sử dụng kết hợp TLS (Transport Layer Security). Modbus.org đã đăng ký tên Modbus Security Application Protocol cho giao thức này, port 802 với tổ chức IANA (Internet Asigned Numbers Authority) là MBAP/TLS/TCP.

Giao thức mới giúp cho việc kiểm soát tốt hơn các lỗ hổng thiếu bảo mật, thiếu tính toàn vẹn, thiếu xác thực của giao thức Modbus TCP. Kết hợp TLS và Modbus, cung cấp tính xác thực và tính bảo vệ toàn vẹn, giảm thiểu tính phát lại, Cung cấp sự linh hoạt về mật mã.

Bảo mật lớp vận chuyển, TLS, là một bổ sung cần thiết vì nó cung cấp các cơ chế bảo mật mà Modbus TCP/IP còn thiếu. Khóa MAC trong TLS Header như là khóa để hai thiết bị đầu cuối xác thực nhau. Kích thước dung lượng lượng tin nhắn Modbus cũng được mã hóa trong TLS Header, đảm bảo tính toàn vẹn của dữ liệu. Giao thức TLS kết hợp một chuổi được gọi là TLS Handshake, mã xác thực MAC được gửi đến người nhận thông tin để đảm bảo tính toàn vẹn của dữ liệu, ngăn chặn các cuộc tấn công “Man in the middle”.

TLS giúp giảm thiểu việc thiếu xác thực của giao thức Modbus, ngăn chặn việc đưa ra một yêu cầu tùy ý gửi đến các thiết bị đầu cuối.

1.5.          Cách thức làm việc của Modbus

Thông thường: Mỗi một kết nối sẽ có Server (master) và Client (slave). Trong truyền thông PLC với nhau: một thiết bị đóng vai trò là Server (master), một thiết bị đóng vai trò là Client (Slave). Kết nối giữa 2 thiết bị Modbus sử dụng nền tảng truyền thông TCP/IP như hình

Hình 4: Kết nối giữa 2 thiết bị modbus sử dụng truyền thông TCP/IP

                             ID là địa chỉ định danh thiết bị cần kết nối.

Modbus function là mã hàm cần thực hiện.

Một số giải pháp chuyên dụng kết nối Modbus trong công nghiệp dùng thiết bị hãng Prosoft, hoặc thiết bị hãng Moxa,…

Hình 5: Một giải pháp sử dụng thiết bị Prosoft

          Giải pháp sử dụng thiết bị Prosoft Gateway, model PLX32-EIP-MBTCP-UA. Đầu vào là dữ liệu từ thiết bị điều khiển sử dụng truyền thông Modbus hoặc EtherNet. Đầu ra truyền thông OPC-UA, kết nối với các thiết bị vận hành (HMI, SCADA), quản lý, giám sát (Plant Business System) và các thiết bị điều khiển khác (Other Clients).

Một giải pháp sử dụng Modbus chi tiết hơn ở hình 6, sử dụng thiết bị của MoXa.

Hình 6: Một giải pháp sử dụng thiết bị Moxa

(1) Tín hiệu IO điều khiển thiết bị hiện trường

(2) Thiết bị chuyển đổi Tín hiệu IO/Modbus RTU của Moxa

(3) Thiết bị chuyển đổi Modbus RTU/ Modbus TCP của Moxa

(4) Thiết bị PLC

(5) Hệ thống điều khiển phân tán DCS

Khi lập trình thiết bị PLC sử dụng các khối hàm có sẵn Modbus Client và Modbus Server. Khối lệnh Modbus Client (Modbus Server) dùng để thiết lập kết nối truyền thông giữa Client và Server, gửi yêu cầu và nhận phản hồi.

  1. Các điểm yếu và lỗ hổng bảo mật trong truyền thông Modbus

2.1.          Các lỗ hổng bảo mật

–      Thiếu bảo mật: Tất cả các tin nhắn Modbus được truyền đi dưới dạng văn bản rõ ràng trên phương tiện truyền thông. Bằng một cách nào đó một kẻ tấn công có thể lắp đặt một thiết bị thu phát vào mạng Modbus. Kẻ tấn công có thể đọc được toàn bộ nội dung tin nhắn từ đó thực hiện các hành vi phá hoại.

–      Thiếu tính toàn vẹn: Không kiểm tra được tính toàn vẹn trong giao thức ứng dụng Modbus TCP/IP (vì đã bỏ đi Error Check CRC). Một kẻ tấn công có thể đưa ra các yêu cầu đến Master hoặc Slave, từ đó hoàn toàn có thể đưa vào mạng các tin nhắn không hợp lệ gây ra lỗi mạng.

–      Thiếu xác thực: Không có xác thực ở bất kỳ cấp độ nào của giao thức Modbus. Tất cả các thiết bị Modbus đều không cần xác thực quyền truy cập vào mạng. Một kẻ tấn công nào có thể đưa một thiết bị khác vào mạng Modbus có sẵn mà không cần xác thực.

–      Khung đơn giản: Modbus TCP/IP sử dụng TCP/IP và Ethernet để mang dữ liệu của cấu trúc tin nhắn Modbus giữa các thiết bị tương thích với chuẩn mạng (TCP/IP). Tin nhắn Modbus có kích cỡ giới hạn là 256 byte. Nếu kẻ tấn công đưa vào các tin nhắn lỗi có kích thước vượt quá kích thước cho phép có thể gây nên tình trạng buffer overflow.

–      Hệ thống điều khiển tích hợp nhiều giao thức truyền thông khác nhau được kết nối với Modbus để truyền nhận dữ liệu phục vụ chức năng điều khiển giám sát thiết bị sản xuất. Một kẻ tấn công có thể thông qua giao thức khác để truy cập vào dữ liệu và tín hiệu của thiết bị sử dụng Modbus để thực hiện các hành vi phá hoại.

–      Trong các hệ thống sử dụng Modbus, các trạm điều khiển có chức năng sử dụng giống nhau thường sử dụng chung một thiết kế. Một kẻ tấn công có thể dùng những thông tin có sẵn từ trạm điều khiển này để tấn công vào một trạm điều khiển khác có chức năng lặp lại.

–      Các thiết bị điều khiển, thiết bị mạng… thường có thể truy cập vào, vì tên và mật khẩu truy cập để mặc định của nhà sản xuất. Kẻ tấn công có thể dùng các thông tin để thâm nhập vào mạng Modbus và thực hiện các hành động phá hoại.

–      Số lượng kết nối Modbus cho phép nhiều hơn thực tế sử dụng. Trong thực tế sử dụng người dùng để mặc định cài đặt của nhà sản xuất cho phép số lượng tối đa các thiết bị kết nối, một kẻ tấn công có thể thâm nhập vào, sử dụng các địa chỉ kết nối chưa dùng đến và thực hiện các hành động phá hoại.

–      Hệ thống công nghiệp không thường xuyên được cập nhật hoặc cập nhật chậm hoặc không đồng bộ hóa phần mềm. Kẻ tấn công có thể tận dụng lỗ hổng của các phiên bản cũ, thâm nhập vào hệ thống để thực hiện các hành vi phá hoại. Điều này đúng với mọi giao thức trong môi trường công nghiệp nói chung, không chỉ với riêng Modbus.

2.2.          Một số cách thâm nhập hệ thống SCADA sử dụng Modbus

Để có thể thâm nhập vào hệ thống SCADA sử dụng mạng truyền thông Modbus, thực hiện theo 3 bước sau. Mỗi bước ta có thể sử dụng một trong số các cách được thể hiện bên dưới.

Bước 1: Thâm nhập vào hệ thống SCADA, sử dụng một trong 5 cách sau.

(1)    Truy cập vật lý tới các thiết bị trường từ xa.

(2)    Truy cập vào mạng truyền thông SCADA. (Kết nối vật lý tới mạng truyền thông SCADA, dùng phần mềm hoặc thiết bị chuyên dụng quét và thu thập thông số, lưu lượng mạng,).

(3)    Truy cập vào mạng điều khiển quy trình PCN (Process Control Network).

(4)    Truy cập từ xa tới PCN thông qua mạng IT.

(5)    Truy cập thông qua bên thứ 3 (Thông qua các nhà thầu).

Bước 2: Nhận dạng các thiết bị Modbus, sử dụng một trong 5 cách sau:

(1)    Quan hệ xã hội (Social Engineering)

(2)    Quét cổng TCP 502

(3)    Quét thông điệp Modbus

(4)    Quét phần mềm ứng dụng

(5)    Nghe lén thông tin mạng

Bước 3: Làm tổn hại đến master Modbus

(1)    Tấn công vật lý vào master.

Truy cập vật lý tới master, có thể xác định địa chỉ và mật khẩu nếu có.

(2)    Tấn công mạng vào master, Có thể làm tổn hại bằng một trong 2 cách truy cập:

(2.1) Truy cập được vào mạng Non-Blind

–         Làm tổn hại đến master (Thay đổi địa chỉ ID, thay đổi thông số cài đặt truyền thông, …).

–         Làm tổn hại đến Primary HMI Application (có thể thay đổi thông số cài đặt mạng, thay đổi giao diện ứng dụng, thay đổi hoặc xóa bỏ giao diện điều khiển).

–         Làm tổn hại đến Secondary HMI Application (có thể thay đổi thông số cài đặt mạng, thay đổi giao diện ứng dụng, thay đổi hoặc xóa bỏ giao diện điều khiển).

(2.2) Làm tổn hại Master thông qua Slave hoặc liên kết truyền thông SCADA.

2.3.          Một ví du: Modbus Flooding Attack

Modbus Flooding Attack là cách mà kẻ tấn công đưa các gói tin vào mạng cục bộ, kết nối giao diện người máy và hệ thống điều khiển, làm gián đoạn các hoạt động bình thường của nó. Kẻ tấn công không cố gắng ngăn chặn các gói tin đến hệ thống điều khiển mà chỉ gửi đến một lượng lớn hơn số lượng bình thường.

Giao thức Modbus dễ bị ảnh hưởng bởi kiểu tấn công này bởi vì nó không có cơ chế phát hiện hoặc từ chối các gói tin sai, lớn hơn bình thường. Giao thức Modbus TCP/IP cũng không có cơ chế xác thực, đảm bảo tính toàn vẹn, vì vậy hệ thống có thể chấp nhận các gói tin giả mà kẻ tấn công đưa vào. Phần mềm sau là một công cụ có khả năng tấn công vào hệ thống điều khiển thông qua giao thức Modbus.

Giới thiệu phần mềm TCP Modbus Hacker và cách thức hoạt động:

–      TCP Modbus Hacker là một ứng dụng Java dùng để tấn công theo kiểu gây tràn ngập (flooding attack) vào một mạng điều khiển sử dụng Modbus. Ứng dụng có hai phần chính là đọc và ghi các thanh ghi vào mạng điều khiển. Các thanh ghi này chính là các tín hiệu, dữ liệu điều khiển thiết bị trường như bơm, cảm biến, van, … Phần mềm có khả năng đọc được tất cả các thanh ghi của hệ thống để xác định các thanh ghi đang hoạt động (thu thập dữ liệu hiện trường). Phần mềm cũng cho phép ghi một hoặc nhiều thanh ghi vào hệ thống (đưa vào các lệnh điều khiển), qua đó, kẻ tấn công có thể thu thập được dữ liệu hiện trường và đưa các lệnh điều khiển vào hệ thống điều khiển. Phần mềm cho phép kẻ tấn công thay đổi tốc độ các câu lệnh được đưa vào bằng cách giảm thời gian dừng giữa các lệnh xuống mili giây. Phần mềm cũng cho phép kẻ tấn công có thể tạm dừng hoặc tiếp tục tấn công. Giao diện phần mềm như hình.

Hình 7: Giao diện phần mềm TCP Modbus Hacker

–      Khi kẻ tấn công sử dụng phần mềm TCP Modbus Hacker để tấn công vào hệ thống điều khiển, kẻ tấn công đưa các lệnh điều khiển gửi đến PLC (bộ điều khiển khả trình) trong khi các lệnh điều khiển từ HMI (giao diện người máy) cũng gửi tới PLC. Phần mềm TCP Modbus Hacker cho phép kẻ tấn công có thể gửi các lệnh điều khiển tới bộ điều khiển PLC nhanh hơn các lệnh đến từ HMI. Bộ điều khiển PLC cố gắng thực hiện tất cả các lệnh mà nó nhận được, vì vậy chắc chắn nó sẽ thực hiện các lệnh mà kẻ tấn công đưa vào hệ thống điều khiển. Kết quả kẻ tấn công có thể thực hiện các hành động phá hoại hệ thống điều khiển, làm dừng hệ thống điều khiển.

  1. Kết luận

Giao thức Modbus được sử dụng rộng rãi trong công nghiệp ở mọi cấp độ điều khiển. Modbus là một giao thức truyền thông mở, chứa nhiều lỗ hổng bảo mật. Kẻ tấn công có thể tận dụng các lỗ hổng bảo mật của giao thức Modbus xâm nhập vào các dây chuyền sản xuất để thực hiện các hành động phá hoại có chủ đích gây hiểm họa an toàn sản xuất, cháy nổ, gây dừng máy, giảm chất lượng sản lượng, …thiệt hại lớn cho cả con người và kinh tế.

Do đó cần nghiên cứu triển khai các giải pháp quản lý, khắc phục, giảm thiểu các rủi ro an ninh liên quan đến giao thức Modbus để đảm bảo dây chuyền sản xuất hoạt động liên tục, hiệu quả, an toàn cao cho con người và thiết bị với mục tiêu đảm bảo chất lượng, sản lượng với chi phí sản xuất thấp./.

 

Tài liệu tham khảo

 

  1. http://www.modbus.org/
  2. http://www.simplymodbus.ca/index.html
  3. SCADA MODBUS Protocol Vulnerabilities,

https://www.cyberbit.com/blog/ot-security/scada-modbus-protocol-vulnerabilities/

  1. Hack the Modbus

https://radiflow.com/blog/hack-the-modbus/

  1. https://www.prosoft-technology.com/
  2. https://www.moxa.com/en/
  3. Practical Modbus Flooding Attack and Detection, Sajal Bhatia, Nishchal Kush, Chris Djamaludin, James Akande, Ernest Foo.

https://dl.acm.org/doi/pdf/10.5555/2667510.2667517

  1. NIST Special Publication 800-82, Revision 2 (6/03/2015)
  2. Industrial Network Security: Securing Critical Infrastructure Networks for Smart Grid, SCADA, and Other Industrial Control Systems,  Eric D. Knaap.