Hệ thống truyền thông công nghiệp với tính chất mở, tích hợp nhiều thiết bị với nhiều giao thức truyền thông khác nhau trên cùng một hệ thống điều khiển. Tiếp theo phần 1 bài báo cáo nghiên cứu về mã độc Industroyer/CrashOverride, trong phần 2 này chúng tôi sẽ đi sâu phân tích các Payload của mã độc này nhắm mục tiêu vào các giao thức truyền thông công nghiệp, các thiết bị công nghiệp cụ thể là các giao thức IEC 60870-5-101, IEC 60870-5-104, OPC DA và IEC 61850, thiết bị Relay bảo vệ SIPROTEC của Siemens.
- Thành phần 101 payload.
Thành phần payload này có filename là 101.dll (được đặt theo tên giao thức IEC 60870-5-101). Giao thức IEC 60870-5-101 là một chuẩn truyền thông nối tiếp được sử dụng để giao tiếp giữa các hệ thống điều khiển công nghiệp và các thiết bị RTU.
Thành phần 101 payload cho phép truyền thông với các thiết bị RTU hoặc bất kỳ thiết bị nào hỗ trợ giao thức IEC101. Khi được thực thi, thành phần này sẽ phân tích các tham số cấu hình được lưu trong file .ini của nó. Một số tham số cấu hình như: Tên tiến trình, tên thiết bị Windows, số phạm vi địa chỉ của đối tượng thông tin (IOA ranges), giá trị đầu cuối cho phạm vi IOA( IOA là địa chỉ đối tượng thông tin dùng để xác định một phần tử dữ liệu trong một thiết bị).
Tên tiến trình (process name): tên tiến trình được chỉ định trong file cấu hình (.ini) là của một ứng dụng mà kẻ tấn công nghi ngờ chạy trên máy nạn nhân. Đây phải là ứng dụng mà máy nạn nhân dùng để truyền thông nối tiếp với các thiết bị RTU.
Thành phần 101 payload cố gắng dừng tiến trình được chỉ định và bắt đầu giao tiếp với các thiết bị được chỉ định, thông qua các hàm Windows API “Createfile”, “Writefile” và “Readfile”.
Hình 1: File cấu hình cho 101 payload.
Cổng COM đầu tiên trong file cấu hình được dùng để truyền thông thực, cổng số 2 và 3 chỉ được tạo để ngăn các tiến trình khác truy cập. Do đó thành phần 101 payload có thể chiếm và duy trì quyền kiểm soát thiết bị RTU.
Thành phần này lặp lại qua tất cả các IOA trong khoảng IOA đã xác định. Đối với mỗi IOA, nó xây dựng hai gói “chọn và thực thi” rồi gửi chúng đến thiết bị RTU. Gói đầu tiên sử dụng lệnh đơn (C_SC_NA_1) và gói còn lại sử dụng lệnh kép (C_DC_NA_1). Mục đích chính của thành phần 101 payload là thay đổi trạng thái ON/OFF của IOA. Cụ thể, đầu tiên thành phần này cố gắng chuyển IOA sang trạng thái OFF, sau đó chuyển trạng thái thành ON và cuối cùng OFF một lần nữa.
Hình 2: Ví dụ một gói tin 101 payload.
- Thành phần 104 payload
Thành phần này có tên tệp là 104.ini – được đặt tên theo chuẩn IEC – 104. Đây là một giao thức mở rộng của IEC – 101 để truyền qua mạng TCP/IP.Khi được thực thi, thành phần 104 payload sẽ đọc file cấu hình thông qua đường dẫn được cung cấp trong thành phần Launcher.Trong file 104.ini chứa phần STATION kèm theo là các thuộc tính cấu hình cho hoạt động của 104 payload. Trong một file cấu hình có thể chứa nhiều STATION. Các thuộc tính được cấu hình trong file 104.ini:
Khi chạy file 104.ini, thành phần 104 payload tạo ra một luồng xử lý cho mỗi phần STATION có trong file này. Trong mỗi luồng như vậy, 104 payload sẽ cố gắng giao tiếp với địa chỉ IP được chỉ định bằng giao thức IEC104. Nếu thuộc tính stop_comm_service được bật, 104 payload sẽ cố gắng dừng hoạt động của các tiến trình hợp pháp giao tiếp với thiết bị bằng giao thức IEC104 trước khi thực hiện kết nối. Theo mặc định, 104 payload dừng quá trình có tên D2MultiCommService.exe hoặc tên quá trình được chỉ định trong cấu hình của nó.
Ý tưởng đằng sau 104 payload tương đối đơn giản. Thành phần này sẽ kết nối với IP được chỉ định và gửi các gói có địa chỉ ASDU trong file cấu hình của nó. Mục đích của bước này là tương tác với một IOA dạng lệnh đơn (single command type). Trong file cấu hình, thuộc tính operation chỉ định cách các IOA dạng lệnh đơn được lặp lại. Ở lần đầu tiên, thuộc tính operation được đặt thành range. Chế độ này được sử dụng để thăm dò các IOA có trong thiết bị mục tiêu. Kẻ tấn công phải sử dụng cách thăm dò này vì trong giao thức IEC104 không hỗ trợ truy vấn thông tin đó.
Chế độ “range mode” có hai giai đoạn. Trong giai đoạn đầu tiên, với khoảng (range) IOA có trong tệp cấu hình, 104 payload kết nối với địa chỉ IP đích và bắt đầu lặp lại qua các IOA trong khoảng. Với mỗi IOA, 104 payload sẽ gửi các gói “select and execute” để chuyển trạng thái và xác nhận xem IOA có thuộc dạng lệnh đơn hay không. Khi đã lặp lại tất cả các IOA có trong phạm vi, 104 payload chuyển sang giai đoạn thứ hai của chế độ range. Nếu thuộc tính uselog được bật, 104 payload bắt đầu ghi những lần thành công vào nhật ký.
Phần còn lại của giai đoạn thứ hai là một vòng lặp vô hạn sử dụng các IOA thuộc dạng lệnh đơn đã được phát hiện trước đó. Trong vòng lặp, 104 payload liên tục gửi các gói “select and execute”. Ngoài ra, nếu thuộc tính change được bật, payload sẽ chuyển trạng thái Bật / Tắt giữa các bước lặp.
Hình 3: Minh họa file nhật ký được tạo bởi 104 payload.
Trong file nhật ký có hiển thị các IOA được lặp lại từ 10 – 15 và khi phát hiện các IOA thuộc dạng lệnh đơn, các IOA này sau đó sẽ được sử dụng. Thuộc tính change đã được bật, vì vậy giữa các bước lặp, giá trị Switch sẽ được chuyển từ On sang Off và ghi vào nhật ký.
Chế độ hoạt động thứ hai là chế độ “shift mode”. Chế độ này rất giống với chế độ “range”. Kẻ tấn công định nghĩa trong tệp cấu hình một loạt các IOA và giá trị shift. Khi 104 payload được kích hoạt, nó sẽ thực hiện các bước giống như ở chế độ range. Tuy nhiên, sau khi lặp lại tất cả IOA trong phạm vi, nó bắt đầu lặp qua phạm vi mới. Phạm vi mới được tính bằng cách thêm các giá trị shift vào các giá trị phạm vi mặc định.
Chế độ hoạt động thứ ba là chế độ “sequence mode”. Nó được sử dụng khi đã biết tất cả các IOA thuộc kiểu lệnh đơn của thiết bị mục tiêu. 104 payload ngay lập tức thực hiện một vòng lặp vô hạn, gửi các gói “select and execute” đến các IOA được xác định trong tệp cấu hình. Bên cạnh khả năng ghi nhật ký, 104 payload có thể xuất thông tin debug tới bảng điều khiển console như trong Hình 11.
Hình 4: Bảng điều khiển console của 104 payload.
- Thành phần 61850 payload
Không giống như các thành phần 101 payload và 104 payload, thành phần này có thể xác định mục tiêu thông qua kiểm tra mạng hoặc qua file cấu hình, bao gồm tệp thực thi có tên 61850.exe và DLL 61850.dll. Nó được đặt tên theo tiêu chuẩn IEC 61850. Giao thức này rất phức tạp nhưng 61850 payload chỉ sử dụng một phần nhỏ của giao thức để tạo ra hiệu ứng gián đoạn của nó.
Sau khi được thực thi, 61850.dll đọc tệp cấu hình có đường dẫn được cung cấp bởi thành phần Launcher. Phiên bản độc lập mặc định đọc cấu hình của nó từ file i.ini. Tệp cấu hình dự kiến sẽ chứa danh sách địa chỉ IP của các thiết bị giao tiếp thông qua giao thức IEC 61850.
Nếu không có tệp cấu hình, thành phần này sẽ liệt kê tất cả network adapters được kết nối để xác định TCP / IP subnet masks của chúng. Sau đó, 61850 payload liệt kê tất cả các địa chỉ IP có thể có cho mỗi mặt nạ mạng con này và cố gắng kết nối với cổng 102 trên mỗi địa chỉ đó. Do đó, thành phần này có khả năng tự động phát hiện các thiết bị liên quan trong mạng. Ngược lại, nếu có tệp cấu hình và chứa địa chỉ IP đích, thành phần này sẽ kết nối với cổng 102 trên các địa chỉ IP đó và trên các địa chỉ IP được phát hiện tự động. Ngoài ra 61850 payload tạo ra một tệp nhật ký về các hoạt động của nó chứa địa chỉ IP, miền MMS, các biến được đặt tên và trạng thái nút (On/Off) của các mục tiêu.
- Thành phần OPC DA payload
Thành phần tải trọng OPC DA triển khai một client cho giao thức được mô tả trong OPC Data Access. OPC (OLE for Process Control) là một tiêu chuẩn phần mềm dựa trên các công nghệ của Microsoft như OLE, COM và DCOM. Phần truy cập dữ liệ DA cho phép trao đổi dữ liệu thời gian thực giữa các thành phần phân tán dựa trên mô hình client – server.Thành phần này tồn tại độc lập giống như thành phần 61850 payload với tên file là OPC.exe và một DLL có tên OPCClientDemo.dll. Nó triển khai cả chức năng của 61850 payload và OPC DA.
Thành phần OPC DA payload không yêu cầu tệp cấu hình. Sau khi được thực thi bởi kẻ tấn công, nó liệt kê tất cả các OPC server bằng phương thức “ICatInformation::EnumClassesOfCategories” với “CATID_OPCDAServer20” và “IOPCServer::GetStatus”. Tiếp theo thành phần này sử dụng giao diện “IOPCBrowseServerAddressSpace” để liệt kê tất cả các items trên server.
Hình 5: Ví dụ tên của OPC items.
Ở bước cuối cùng, OPC DA payload cố gắng thay đổi trạng thái của các OPC items được phát hiện sử dụng giao diện IOPCSyncIO bằng cách ghi giá trị 0x01 hai lần.
Hình 6: Phần mở rộng mục tiêu của Data Wiper.
- Công cụ mở rộng: Từ chối dịch vụ (DoS)
Vũ khí này được sử dụng để chống lại các Relay bảo vệ SIPROTEC của Siemens. Đây là các thiết bị cung cấp khả năng bảo vệ, đo lường và tự động hóa tích hợp cho các trạm biến áp. Nó khai thác lỗ hổng CVE-2015-5374 để khiến thiết bị không phản hồi.
Hình 7: Thiết bị SIPROTEC của Siemens.
Khi lỗ hổng này được khai thác, thiết bị mục tiêu sẽ ngừng phản hồi bất kỳ yêu cầu nào cho đến khi được khởi động lại bằng cách thủ công. Để khai thác lỗ hổng này, kẻ tấn công đã mã hóa cứng địa chỉ IP của thiết bị vào công cụ này. Khi thực thi, công cụ này sẽ gửi các gói UDP có độ dài 18byte đến cổng 50000 của địa chỉ IP mục tiêu.
Hình 8: Nội dung gói tin UDP được sử dụng khi khai thác CVE-2015-5374.
- Tổng kết
Phần mềm độc hại Industroyer có khả năng tùy biến cao, nhắm mục tiêu đến các giao thức truyền thông công nghiệp, các hệ thống điều khiển và các thiết bị công nghiệp.
Nhờ khả năng tồn tại lâu dài trong hệ thống và cung cấp thông tin có giá trị để điều chỉnh các thành phần payload có cấu hình cao, kẻ tấn công có thể điều chỉnh phần mềm độc hại với mọi môi trường, điều này khiến nó trở nên cực kỳ nguy hiểm. Và hơn hết, phần mềm này sử dụng chính những chức năng hợp pháp của các giao thức truyền thông công nghiệp để thực hiện mục đích phá hoại. Điều này cho thấy một khoảng trống lớn về bảo mật trong môi trường OT, đây sẽ là một hồi chuông cảnh tỉnh về an ninh của các hệ thống cơ sở hạ tầng quan trọng trên khắp thế giới.
Tài liệu tham khảo
[1] WIN32/INDUSTROYER A new threat for industrial control systems https://www.welivesecurity.com/wp-content/uploads/2017/06/Win32_Industroyer.pdf
[2] VB2018 paper: Anatomy of an attack: detecting and defeating CRASHOVERRIDE
[3] Siemens SIPROTEC Denial-of-Service Vulnerability https://us-cert.cisa.gov/ics/advisories/ICSA-15-202-01
[4] IEC 60870-5-101 Transmission Protocols https://en.wikipedia.org/wiki/IEC_60870-5
[5] IEC 60870-5-104 Transmission Protocols
https://en.wikipedia.org/wiki/IEC_60870-5
[6] IEC 61850
https://en.wikipedia.org/wiki/IEC_61850
[7] CRASHOVERRIDE Analyzing the Threat to Electric Grid Operations
https://www.dragos.com/wp-content/uploads/CrashOverride-01.pdf