Việc bảo vệ các hệ thống điều khiển công nghiệp và môi trường OT khỏi các cuộc tấn công từ xa trở nên quan trọng hơn bao giờ hết, đặc biệt là với các lỗ hổng như CVE-2017-14469 và hiện tại là CVE-2021-22659 nhắm vào Bộ điều khiển Micrologix 1400 được sử dụng rộng rãi của Rockwell Automation. Sinh viên từ OPSWAT Chương trình Học bổng đã thử nghiệm lỗ hổng này trong môi trường được kiểm soát, nhấn mạnh nhu cầu về bảo mật.
Trong blog này, chúng tôi sẽ khám phá cách các sinh viên chứng minh kẻ tấn công có thể khai thác lỗ hổng để khiến hệ thống bị sập và cách thiếu xác thực đầu vào phù hợp có thể được sử dụng để phá vỡ hoạt động của PLC.
PLC là gì? Giải thích về Rockwell Automation Micrologix 1400
PLC (Bộ điều khiển logic lập trình) là máy tính công nghiệp được thiết kế để tự động hóa các quy trình bằng cách điều khiển máy móc và các hoạt động công nghiệp khác. Nó hoạt động trong môi trường khắc nghiệt và được lập trình để thực hiện các nhiệm vụ cụ thể dựa trên đầu vào cảm biến. Bộ điều khiển MicroLogix 1400 của Rockwell Automation là PLC nhỏ gọn và dạng mô-đun thường được sử dụng trong các ứng dụng vừa và nhỏ. Được biết đến với hiệu quả về chi phí và tính linh hoạt, nó hỗ trợ nhiều giao thức truyền thông khác nhau và cung cấp các tùy chọn I/O kỹ thuật số và tương tự để giao tiếp với các thiết bị.
Lập trình thường được thực hiện bằng phần mềm Rockwell Automation thông qua logic bậc thang, cho phép người dùng tạo chuỗi điều khiển. MicroLogix 1400 linh hoạt, phù hợp với các tác vụ như điều khiển máy móc và tự động hóa quy trình. Tính mô-đun của nó cho phép người dùng mở rộng và tùy chỉnh hệ thống dựa trên các yêu cầu ứng dụng cụ thể.
Giới thiệu về CVE-2021-22659
Vào tháng 1 năm 2021, Rockwell Automation đã nhận được báo cáo từ Parul Sindhwad và Tiến sĩ Faruk Kazi của COE-CNDS tại Viện Công nghệ Veermata Jijabai (VJTI), Ấn Độ, liên quan đến lỗ hổng bảo mật trong bộ điều khiển MicroLogix™ 1400. Họ đã xác định được một lỗ hổng bảo mật trong phiên bản 21.6 trở về trước cho phép kẻ tấn công từ xa không xác thực gửi một gói Modbus được thiết kế đặc biệt, cho phép kẻ tấn công truy xuất hoặc sửa đổi các giá trị ngẫu nhiên trong sổ đăng ký. Nếu khai thác thành công, điều này có thể dẫn đến tràn bộ đệm, dẫn đến tình trạng từ chối dịch vụ. Đèn LED LỖI sẽ nhấp nháy ĐỎ và có thể mất liên lạc. Việc khôi phục sau tình trạng từ chối dịch vụ yêu cầu người dùng phải xóa lỗi.
NVD đánh giá lỗ hổng bảo mật này ở mức độ nghiêm trọng Cao .
Các giai đoạn tấn công
Một kẻ tấn công từ xa, không được xác thực có quyền truy cập mạng vào PLC MicroLogix 1400 dễ bị tấn công có thể gửi một gói tin được thiết kế đặc biệt để sửa đổi các giá trị trong sổ đăng ký. Điều này có khả năng gây ra tình trạng từ chối dịch vụ cho thiết bị, dẫn đến hỏng hệ thống và ngừng hoạt động. Một sự cố như vậy có thể làm gián đoạn đáng kể hoạt động sản xuất và các hoạt động kinh doanh khác của tổ chức.
Giao thức Modbus
Được Modicon phát triển vào năm 1979, giao thức Modbus là một cấu trúc nhắn tin được thiết kế để thiết lập giao tiếp máy khách-máy chủ giữa các thiết bị thông minh. Ban đầu được thiết kế để sử dụng với PLC của Modicon, kể từ đó đã trở thành một giao thức truyền thông tiêu chuẩn để truyền thông giữa các thiết bị điện tử công nghiệp.
Có các giao thức Modbus cho Ethernet (Modbus TCP) và các đường truyền nối tiếp (Modbus RTU và Modbus ASCII). Modbus RTU (Remote Terminal Unit) truyền trực tiếp dữ liệu ở dạng nhị phân thông qua giao tiếp nối tiếp, và Modbus TCP (Transmission Control Protocol) nhúng dữ liệu giao thức Modbus vào các gói TCP để truyền qua mạng TCP/IP.
Cấu trúc tin nhắn Modbus
Modbus là giao thức yêu cầu-phản hồi trong đó máy khách truyền yêu cầu đến thiết bị Modbus và sau đó thiết bị sẽ phản hồi.
Một thông điệp Modbus được gửi từ thiết bị chính đến thiết bị phụ chứa địa chỉ của thiết bị phụ, “lệnh” (ví dụ “đọc thanh ghi” hoặc “ghi thanh ghi”), dữ liệu và tổng kiểm tra (LRC hoặc CRC).
Địa chỉ dữ liệu được sử dụng trong các thông báo truy vấn Modbus khi đọc hoặc sửa đổi dữ liệu. Modbus định nghĩa bốn Kiểu dữ liệu: Coil, Input Status, Input Register và Holding Register. Hai trong số chúng lưu trữ các giá trị bật-tắt (1 bit) được gọi là Coils và Discrete Inputs, và hai lưu trữ các giá trị số dưới dạng các từ 16 bit được gọi là Registers. Mỗi loại chỉ đọc hoặc đọc/ghi.
Kiểu dữ liệu | Truy cập | Sự miêu tả |
Xôn xao | Đọc-ghi | Đầu ra một bit. |
Đầu vào rời rạc | Chỉ đọc | Đầu vào bit đơn. |
Đăng ký đầu vào | Chỉ đọc | Thanh ghi đầu vào 16 bit. |
Giữ sổ đăng ký | Đọc-ghi | Thanh ghi đầu ra 16 bit. |
Có ba loại mã chức năng Modbus:
- Mã chức năng công cộng – Từ 1 đến 127, ngoại trừ các mã do người dùng xác định.
- Mã chức năng do người dùng xác định – có hai phạm vi từ 65 đến 72 và từ 100 đến 110.
- Mã chức năng dành riêng – Được một số công ty sử dụng cho các sản phẩm cũ và không có sẵn để sử dụng công khai.
Kiểu chức năng | Tên hàm | Mã chức năng | ||
Truy cập dữ liệu | Truy cập bit | Đầu vào rời rạc vật lý | Đọc đầu vào rời rạc | 2 |
Bit bên trong hoặc cuộn dây vật lý | Đọc cuộn dây Viết Cuộn Dây Đơn Viết nhiều cuộn dây | 1 5 15 | ||
Truy cập 16-bit | Thanh ghi đầu vào vật lý | Đọc thanh ghi đầu vào | 4 | |
Thanh ghi nội bộ hoặc thanh ghi đầu ra vật lý | Đọc nhiều sổ đăng ký nắm giữ Viết sổ đăng ký nắm giữ đơn lẻ Viết nhiều thanh ghi giữ Đọc/Ghi Nhiều Thanh Ghi Mặt nạ Viết Đăng ký Đọc hàng đợi FIFO | 3 6 16 23 22 24 | ||
Truy cập hồ sơ tập tin | Đọc bản ghi tập tin Ghi Bản Ghi Tệp | 20 21 | ||
Chẩn đoán | Đọc trạng thái ngoại lệ Chẩn đoán Nhận sự kiện Com Counter Nhận Nhật ký sự kiện Com Báo cáo ID nô lệ Đọc Nhận dạng Thiết bị | 7 8 11 12 17 43 | ||
Khác | Giao diện đóng gói vận chuyển | 43 |
Kiểu chức năng: Truy cập dữ liệu Loại phụ: Truy cập bit Thể loại: Đầu vào rời rạc vật lý Tên hàm: Đọc đầu vào rời rạc Mã chức năng: 2 |
Kiểu chức năng: Truy cập dữ liệu Loại phụ: Truy cập bit Thể loại: Bit nội bộ hoặc Cuộn dây vật lý Tên chức năng: Đọc cuộn dây Mã chức năng: 1 |
Kiểu chức năng: Truy cập dữ liệu Loại phụ: Truy cập bit Thể loại: Bit nội bộ hoặc Cuộn dây vật lý Tên hàm: Write Single Coil Mã chức năng: 5 |
Kiểu chức năng: Truy cập dữ liệu Loại phụ: Truy cập bit Thể loại: Bit nội bộ hoặc Cuộn dây vật lý Tên chức năng: Viết nhiều cuộn dây Mã chức năng: 15 |
Kiểu chức năng: Truy cập dữ liệu Loại phụ: Truy cập 16 bit Thể loại: Thanh ghi đầu vào vật lý Tên chức năng: Đọc thanh ghi đầu vào Mã chức năng: 4 |
Kiểu chức năng: Truy cập dữ liệu Loại phụ: Truy cập 16 bit Thể loại: Thanh ghi nội bộ hoặc Thanh ghi đầu ra vật lý Tên chức năng: Đọc nhiều thanh ghi giữ Mã chức năng: 3 |
Kiểu chức năng: Truy cập dữ liệu Loại phụ: Truy cập 16 bit Thể loại: Thanh ghi nội bộ hoặc Thanh ghi đầu ra vật lý Tên hàm: Write Single Holding Register Mã chức năng: 6 |
Kiểu chức năng: Truy cập dữ liệu Loại phụ: Truy cập 16 bit Thể loại: Thanh ghi nội bộ hoặc Thanh ghi đầu ra vật lý Tên hàm: Ghi nhiều thanh ghi giữ Mã chức năng: 16 |
Kiểu chức năng: Truy cập dữ liệu Loại phụ: Truy cập 16 bit Thể loại: Thanh ghi nội bộ hoặc Thanh ghi đầu ra vật lý Tên chức năng: Đọc/Ghi nhiều thanh ghi Mã chức năng: 23 |
Kiểu chức năng: Truy cập dữ liệu Loại phụ: Truy cập 16 bit Thể loại: Thanh ghi nội bộ hoặc Thanh ghi đầu ra vật lý Tên hàm: Mask Write Register Mã chức năng: 22 |
Kiểu chức năng: Truy cập dữ liệu Loại phụ: Truy cập 16 bit Thể loại: Thanh ghi nội bộ hoặc Thanh ghi đầu ra vật lý Tên hàm: Đọc hàng đợi FIFO Mã chức năng: 24 |
Kiểu chức năng: Truy cập dữ liệu Loại phụ: Truy cập bản ghi tệp Tên chức năng: Đọc bản ghi tập tin Mã chức năng: 20 |
Kiểu chức năng: Truy cập dữ liệu Loại phụ: Truy cập bản ghi tệp Tên hàm: Ghi bản ghi tệp Mã chức năng: 21 |
Loại chức năng: Chẩn đoán Tên hàm: Đọc trạng thái ngoại lệ Mã chức năng: 7 |
Loại chức năng: Chẩn đoán Tên chức năng: Chẩn đoán Mã chức năng: 8 |
Loại chức năng: Chẩn đoán Tên hàm: Get Com Event Counter Mã chức năng: 11 |
Loại chức năng: Chẩn đoán Tên hàm: Get Com Event Log Mã chức năng: 12 |
Loại chức năng: Chẩn đoán Tên chức năng: Báo cáo ID Slave Mã chức năng: 17 |
Loại chức năng: Chẩn đoán Tên chức năng: Đọc nhận dạng thiết bị Mã chức năng: 43 |
Loại chức năng: Khác Tên hàm: Encapsulated Interface Transport Mã chức năng: 43 |
Khai thác
Phân tích lỗ hổng bảo mật
Thông qua phân tích, chúng tôi OPSWAT Các nghiên cứu sinh sau đại học phát hiện ra rằng trong quá trình giao tiếp Modbus TCP, giao thức này thiếu xác thực và mã hóa cho các gói tin được truyền đi. Ngoài ra, xác thực đầu vào trong PLC MicroLogix 1400 không được triển khai đúng cách. Do đó, kẻ tấn công từ xa có thể phân tích gói tin Modbus TCP thông qua việc đánh hơi gói tin và gửi bất kỳ yêu cầu nào đến PLC mà không cần xác thực thông qua giao thức Modbus TCP. Do thiết bị PLC MicroLogix 1400 thiếu xác thực đầu vào, kẻ tấn công được xác thực từ xa có thể gửi một số lượng lớn các gói tin có giá trị ngẫu nhiên, có khả năng khiến PLC bị sập.
Đăng ký ghi đè
Ban đầu, chúng tôi đã cố gắng nắm bắt các gói tin Modbus TCP được sử dụng để đọc hoặc ghi các thanh ghi trên PLC. Để thực hiện điều này, chúng tôi đã kiểm tra các gói tin được tạo ra bởi một ứng dụng có tên là Modbus Poll, ứng dụng này hỗ trợ việc đọc và ghi các thanh ghi trên MicroLogix 1400 PLC.
Bằng cách sử dụng Wireshark để thu thập tất cả các gói tin từ giao diện mạng, chúng ta có thể xác định gói tin Modbus TCP để ghi vào một thanh ghi duy nhất:
Dựa trên cấu trúc của các gói tin đã đánh hơi, chúng tôi đã phát triển một tập lệnh Python đơn giản để gửi các gói tin TCP yêu cầu ghi một thanh ghi vào PLC mục tiêu. Trong trường hợp này, địa chỉ IP của PLC là 192.168.93.89 .
Sổ đăng ký của PLC đã bị thay đổi sau khi nhận được gói tin độc hại chưa xác thực của chúng tôi.

Trong Micro Logix 1400, hầu hết các lệnh toán học sử dụng ba tham số: Nguồn A, Nguồn B và Điểm đến
Các giá trị cho Nguồn A và Nguồn B có thể đến từ hai thanh ghi 16 bit có tên là N13:3 và N13:4. Hơn nữa, các giá trị trong các thanh ghi 16 bit này, chẳng hạn như N13:3 và N13:4, bị giới hạn trong phạm vi từ -32.768 đến +32.767. Nếu các giá trị của N13:3 và N13:4 lớn, kết quả của lệnh khớp lệnh có thể vượt quá phạm vi tối đa của kiểu dữ liệu, có khả năng khiến PLC bị sập. Do đó, để gây ra sự cố trong PLC, cần phải ghi các giá trị ngẫu nhiên lớn vào tất cả các thanh ghi, bao gồm cả N13:3 và N13:4. Để đạt được điều này, chúng tôi đã sửa đổi tập lệnh Python của mình như sau:
Mô phỏng cuộc tấn công
Để mô phỏng một cuộc tấn công trong thế giới thực, chúng tôi OPSWAT Các nghiên cứu sinh sau đại học đã cố gắng gây ra sự cố trong PLC MicroLogix 1400 nằm ở OPSWAT CIP Labs cho rằng cả kẻ tấn công và PLC đều nằm trên cùng một mạng và có thể giao tiếp với nhau.
Trong trạng thái hoạt động bình thường của MicroLogix 1400 PLC tại OPSWAT Trong phòng thí nghiệm, khi PLC ở chế độ CHẠY TỪ XA, tất cả các giá trị thanh ghi đều hợp lệ và nằm trong phạm vi được chỉ định cho kiểu dữ liệu của chúng, cho biết chương trình của người dùng đang hoạt động chính xác.
Khi thực thi tập lệnh Python của chúng tôi, nhiều gói tin Modbus TCP sẽ được gửi đến PLC, yêu cầu ghi các giá trị ngẫu nhiên lớn vào tất cả các thanh ghi mà không cần xác thực:
Sau khi nhận được các yêu cầu gói tin độc hại này, giá trị của tất cả các thanh ghi, bao gồm N13:3 và N13:4, được đặt thành 16.990. Kết quả của thao tác ADD trên các thanh ghi N13:3 và N13:4 vượt quá phạm vi hợp lệ của thanh ghi 16 bit. Sự cố này gây ra tràn số nguyên, dẫn đến lỗi và làm gián đoạn hoạt động của PLC, như được chỉ ra bởi trạng thái FAULTED.
Của chúng tôi OPSWAT Các nghiên cứu sinh đã thành công trong việc phá hỏng PLC MicroLogix 1400 bằng cách khai thác lỗ hổng CVE-2021-22659.
Khắc phục
Đối mặt với các lỗ hổng như CVE-2021-22659, việc khắc phục toàn diện là rất quan trọng để bảo vệ các hệ thống OT và mạng vật lý. Dưới đây là một số chiến lược chính có thể được sử dụng để ngăn chặn sự lây lan của các cuộc tấn công:
- Phát hiện các CVE đã biết: Thường xuyên quét mạng để tìm các lỗ hổng như CVE-2021-22659.
- Theo dõi các hành vi bất thường: Đánh dấu sự gia tăng bất thường về tần suất giao tiếp với PLC Micrologix 1400, điều này có thể gợi ý về một cuộc tấn công đang diễn ra nhằm truyền dữ liệu trái phép.
- Xác định kết nối thiết bị mới: Hệ thống sẽ phát hiện khi có thiết bị mới kết nối với PLC.
- Phân đoạn mạng: Việc cô lập các thiết bị bị ảnh hưởng có thể giúp ngăn chặn sự lây lan của các cuộc tấn công, do đó giảm thiểu tác động.
OPSWAT 'S MetaDefender OT Security giải quyết những nhu cầu này bằng cách phát hiện CVE, liên tục giám sát mạng để tìm ra hành vi bất thường và xác định các kết nối trái phép. Sử dụng AI, nó học các mẫu lưu lượng bình thường, thiết lập hành vi cơ bản và triển khai các chính sách để cảnh báo các bất thường. Điều này cho phép phản hồi tức thời, có thông tin đối với các mối đe dọa tiềm ẩn.
Trong trường hợp tấn công khai thác CVE-2021-22659, MetaDefender OT Security tích hợp với MetaDefender Industrial Firewall để chặn các liên lạc đáng ngờ dựa trên các quy tắc đã đặt. Tường lửa sử dụng AI để tìm hiểu các mẫu lưu lượng thường xuyên và thực thi các chính sách để ngăn chặn các kết nối trái phép.
Bằng cách kết hợp các khả năng phát hiện, cảnh báo và phân đoạn mạng này, MetaDefender OT Security trở thành cơ chế phòng thủ lý tưởng cho môi trường công nghiệp, giảm đáng kể rủi ro và tác động của các mối đe dọa mạng trong môi trường công nghệ vận hành.
Khám phá cách OPSWAT Nền tảng an ninh mạng chuyên sâu có thể nâng cao và hoàn thiện thế trận của bạn. Hãy trao đổi với chuyên gia ngay hôm nay để được dùng thử miễn phí.