Tiếp theo loạt bài viết về bảo mật cho môi trường OT, chúng tôi sẽ tổng hợp các báo cáo nghiên cứu về mã độc Industroyer/CrashOverride, là thủ phạm tấn công và gây ra sự cố mất điện một phần thủ đô Kiev (Ukraine) vào 12/2016, gây ra thiệt hại nghiêm trọng. Industroyer/CrashOverride Malware là một loại mã độc trong môi trường OT, với mức độ tinh vi và khả năng nhắm mục tiêu là chưa từng có. Nó có khả năng khai thác điểm yếu của các giao thức truyền thông công nghiệp phổ biến và lỗ hổng CVE-2015-5374 của thiết bị Siemens SIPROTEC 4 & SIPROTEC Compact. Bài viết sẽ chia làm 2 phần. Phần 1 chúng tôi phân tích cách thức quy trình thâm nhập, cấu trúc và các Payload như Backdoor, Launcher, Data Wiper,… của mã độc. Phần 2 phân tích các Payload nhắm 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 OPC DA, IEC 60870-5-101, IEC 60870-5-104 và IEC 61850, thiết bị Relay bảo vệ Siemens SIPROTEC.
- Đánh giá chung
Industroyer được cho là phần mềm độc hại đầu tiên được thiết kế và triển khai với mục đích cụ thể là gây hại và làm gián đoạn mạng SCADA/ICS. Các báo cáo chỉ ra rằng phần mềm có khả năng sử dụng các giao thức ICS phổ biến bao gồm: OPC DA, IEC 60870-5-101, IEC 60870-5-104 và IEC 61850. Các giao thức này được thiết kế để giám sát và điều khiển thiết bị từ xa, thường dùng ở Hoa Kỳ và Châu Âu. Tuy nhiên, điểm đáng chú ý nhất của Industroyer là khả năng dễ dàng mở rộng để hỗ trợ các giao thức khác, chẳng hạn DNP3, …
- Quy trình thâm nhập và tấn công
Hình 1: Quá trình xâm nhập và tấn công của Industroyer.
Hiện nay, vẫn chưa thể xác định chính xác cách mà malware này thâm nhập vào hệ thống lưới điện có vẻ như không có lỗ hổng. Tuy nhiên một vài giả thiết được đưa ra rằng có kẻ nội gián tiếp tay hoặc một nhân viên bị tấn công email phishing. Các báo cáo thiên về giả thiết một cuộc tấn công lừa đảo email nhắm vào các nhân viên.
Sau khi thâm nhập được vào hệ thống, malware không thực hiện tấn công ngay mà hoạt động nhẹ nhàng trong nền để quản trị viên không phát hiện ra và âm thầm khám phá mạng cục bộ và hệ thống điều khiển.
Malware thực hiện kết nối đến máy chủ C&C (Control&Command) từ xa sử dụng HTTPS và nhận lệnh từ kẻ tấn công. Lúc này kẻ tấn công có được khả năng điều khiển từ xa và tấn công vào hệ thống SCADA thông qua trạm điều khiển. Ước tính từ thời điểm cài đặt (bước 2) đến thời điểm phá hoại (bước 7) là khoảng 6 tháng.
- Cấu trúc của malware
Hình 2: Thành phần chính của Industroyer.
Industroyer được thiết kế theo kiểu module gồm các thành phần:
- Main Backdoor: Dùng để kiểm soát tất cả các thành phần khác của malware. Ngoài ra còn tạo kết nối đến máy chủ C&C và nhận lệnh từ kẻ tấn công.
- Additional Backdoor: Backdoor dự phòng trong trường hợp Main Backdoor bị phát hiện.
- Additional Tools: Các công cụ tấn công mở rộng, ở đây là Port scanner tool và DoS tool.
- Launcher: Tệp thực thi có nhiệm vụ khởi chạy các thành phần Payload và thành phần xóa dữ liệu Data Wiper. Launcher chứa thời gian kích hoạt vụ tấn công (các mẫu phân tích có 2 ngày là 17/12/16 và 20/12/16).
- Data Wiper: Thành phần xóa dữ liệu, được sử dụng ở phần cuối cuộc tấn công để ẩn dấu vết và gây khó khăn cho việc khôi phục.
- Các module Payload: Nhắm mục tiêu vào các giao thức cụ thể như OPC DA, IEC 60870-5-101, IEC 60870-5-104 và IEC 61850. Các module này cho phép “giao tiếp” trực tiếp với các thiết bị hỗ trợ các giao thức trên.
3.1. Main Backdoor
Thành phần này có nhiệm vụ tạo kết nối đến máy chủ C&C thông qua HTTPS và nhận lệnh từ kẻ tấn công. Tất cả các mẫu malware được phân tích đều mã hóa cứng để sử dụng chung một địa chỉ Proxy nằm trong mạng nội bộ. Điều này cho thấy malware được thiết kế để sử dụng cho một tổ chức cụ thể. Hầu hết các máy chủ C&C được kết nối với Main Backdoor đều sử dụng phần mềm Tor[1]. Một số địa chỉ máy chủ C&C:
195.16.88.6
46.28.200.132
188.42.253.43
5.39.218.152
93.115.27.57
Phần lớn các địa chỉ IP này là các nút nằm trong mạng Tor
Main Backdoor cho phép kẻ tấn công thiết lập thời gian hoạt động trong ngày khiến việc phát hiện tấn công chỉ dựa vào lưu lượng mạng trở nên khó khăn hơn. Tuy nhiên tất cả các mẫu phân tích hiện nay đều đặt là 24/24.
Hình 3: Dịch ngược code của Main Backdoor xuất hiện kiểm tra time_of_day.
Sau khi kết nối thành công đến C&C Server, Main Backdoor sẽ gửi dữ liệu thông qua POST-Request. Các dữ liệu được gửi bao gồm:
- Chuỗi số GUID (globally unique identifier) cho cấu hình phần cứng, thông qua hàm “GetCurrentHwProfile”
- Phiên bản malware hiện tại: 1.1e
- Hardcoded-ID của mẫu: được hacker sử dụng làm mã nhận dạng cho máy bị nhiễm. Các giá trị ID trên tất cả các mẫu được phân tích là: DEF, DEF-C, DEF-WS, DEF-EP, DC-2-TEMP, DC-2, CES-McA-TEMP, CES, SRV_WSUS, SRV_DC-2, SCE-WSUS01.
- Kết quả của lệnh đã nhận trước đó.
Danh sách các lệnh được thành phần main backdoor hỗ trợ là:
Một khi kẻ tấn công có được quyền admin, chúng có thể nâng cấp backdoor để thực hiện dưới dạng chương trình Windows service. Để làm điều đó, kẻ tấn công chọn một Windows service hiện có, không quan trọng và thay đổi giá trị ImagePath Registry của nó bằng đường dẫn nhị phân của backdoor. Lúc này, Main Backdoor hoạt động như một Windows service. Tuy nhiên có một vài khác biệt so với Main Backdoor ban đầu như: phiên bản backdoor đổi từ 1.1e thành 1.1s và code assembly xuất hiện các lệnh “rác”.
Hình 4: Code assembly của Main Backdoor đã bị xáo trộn.
3.2. Additional Backdoor
Additional Backdoor cung cấp cơ chế thay thế cho phép kẻ tấn công lấy lại quyền truy cập vào mạng mục tiêu trong trường hợp Main Backdoor bị phát hiện/vô hiệu hóa. Đây là một phiên bản trojan của Windows Notepad, khởi chạy cùng ứng dụng nhưng không làm thay đổi hoạt động bình thường của nó. Sau khi chiếm được quyền admin, kẻ tấn công có thể thay thế ứng dụng notepad nguyên bản theo cách thủ công.
Mã độc được chèn vào rất khó để hiểu, nhưng sau khi code được giải mã, nó sẽ kết nối với máy chủ C&C từ xa, khác với máy chủ C&C trước đó được kết nối với Main Backdoor và sau đó tải xuống một payload. Payload có dạng Shellcode được tải trực tiếp vào bộ nhớ và được thực thi. Ngoài ra, mã độc còn giải mã chương trình Windows Notepad nguyên bản (được lưu ở cuối tệp) sau đó thực thi nó. Nhờ vậy Windows Notepad vẫn hoạt động bình thường.
Hình 5: So sánh giữa mã assembly của Windows Notepad nguyên bản (trái) và khi đã nhiễm mã độc (phải).
3.3. Thành phần Launcher
Thành phần này là một file thực thi riêng biệt chịu trách nhiệm khởi chạy các thành phần Payload và thành phần Data Wiper. Nó có khả năng lên lịch phát động tấn công. Thời điểm tấn công được phát hiện trong các mẫu phân tích là 17/12/2016 và 20/12/2016.
Khi đến thời điểm đã thiết lập, thành phần này tạo ra hai luồng thực thi (thread). Luồng thứ nhất cố gắng tải payload DLL, trong khi luồng còn lại đợi 1-2 giờ và tải thành phần Data wiper. Mức độ ưu tiên cho cả hai luồng được đặt thành THREAD_PRIORITY_HIGHEST để được chia sẻ nhiều tài nguyên CPU.
Tên của payload DLL được cấp bởi kẻ tấn công thông qua lệnh số 4 (Execute a Shell command) của Main Backdoor. Thành phần Data wiper có tên là haslo.dat. Các dòng lệnh mong muốn có dạng: %LAUNCHER%.exe %WORKING_DIRECTORY% % PAYLOAD% .dll % CONFIGURATION% .ini
Trong đó:
- %LAUNCHER%.exe: Tên file của thành phần Launcher.
- %WORKING_DIRECTORY%: Thư mục chứa file payload DLL và file configuration.
- % PAYLOAD%.dll %: Tên file payload.
- % CONFIGURATION%.ini: File chứa tham số cấu hình cho thành phần payload được chỉ định. Đường dẫn đến file này được cung cấp cho payload DLL thông qua thành phần Launcher.
Các thành phần Payload và Data wiper là các tệp DLL tiêu chuẩn của Windows. Để được load bởi thành phần Launcher, chúng phải xuất một hàm có tên Crash như hình dưới.
Hình 6: Ví dụ payload DLL có tên “Crash101.dll” và hàm “Crash”.
Hình 7: Luồng thực thi của thành phần Launcher.
3.4. Thành phần Data Wiper
Data Wiper là thành phần xóa dữ liệu, dùng ở giai đoạn cuối của cuộc tấn công giúp kẻ tấn công che giấu dấu vết và gây khó khăn trong việc khôi phục hệ thống. Thành phần này có tên tệp là haslo.dat hoặc haslo.exe, được thực thi bởi thành phần Launcher hoặc hoạt động như một công cụ độc lập.
Khi được thực thi, thành phần này liệt kê tất cả các key trong Registry các dịch vụ Windows:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services.
Nó cố gắng đặt giá trị registry ImagePath với một chuỗi trống trong mỗi mục được tìm thấy. Thao tác này sẽ làm cho hệ điều hành không thể khởi động được.
Bước tiếp theo là xóa nội dung tệp. Thành phần này liệt kê các tệp có phần mở rộng cụ thể (hình 13) trên tất cả các ổ đĩa từ C: \ đến Z: \ nhưng bỏ qua các tệp trong thư mục con có tên chứa “Windows”. Nó ghi đè nội dung tệp với dữ liệu vô nghĩa hai lần để thực hiện triệt để. Lần đầu tiên khi tìm thấy tệp trên ổ đĩa. Nếu không thành công, thành phần Data Wiper sẽ thực hiện lần thứ hai sau khi dừng tất cả các quy trình ngoại trừ quy trình hệ thống quan trọng.
Cuối cùng, thành phần này cố gắng dừng toàn bộ các quy trình (bao gồm cả quy trình hệ thống quan trọng) ngoại trừ chính nó, dẫn đến hệ thống bị treo và không thể phản hồi.
Hình 8: Phần mở rộng mục tiêu của Data Wiper.
3.5. Công cụ mở rộng: Quét cổng (port scanner)
Công cụ này cho phép kẻ tấn công lập bản đồ mạng và dò tìm các máy tính có liên quan. Thay vì sử dụng công cụ có sẵn, chúng xây dựng một công cụ quét cổng tùy chỉnh. Như hình dưới, kẻ tấn công có thể xác định một loạt các địa chỉ IP và các cổng mạng.
Hình 9: Công cụ quét cổng.
4.Tiểu kết
Industroyer là phần mềm độc hại có khả năng tùy biến cao. Nó có thể được sử dụng để tấn công bất kỳ hệ thống điều khiển công nghiệp nào bằng cách sử dụng một số giao thức truyền thông công nghiệp phổ biến, một số thành phần được thiết kế để nhắm đến mục tiêu phần cứng cụ thể. Trong phần tiếp theo chúng tôi sẽ đi sâu phân tích về cách mà Industroyer/CrashOverride Malware sử dụng các giao thức truyền thông công nghiệp để tấn công phá hoại các hệ thống điều khiển công nghiệp, các thiết bị công nghiệp.
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