Mã độc Industroyer2: Bài phân tích IEC 104 Payload của Nozomi Networks

Phòng thí nghiệm mạng Nozomi | 27 tháng 4 năm 2022

Industroyer2, công cụ APT mới nhất mà nhóm tin tặc Sandworm sử dụng để nhắm mục tiêu vào lưới điện Ukraine. Như cái tên do ESET đặt ra, mẫu này có nhiều điểm tương đồng với người tiền nhiệm Industroyer, được sử dụng trong vụ tấn công khét tiếng vào tháng 12 năm 2016 vào lưới điện của Ukraine. Trong blog này, chúng tôi sẽ tổng hợp các phân tích, đánh giá và so sánh hai mẫu malware để chỉ ra những điểm tương đồng, giúp hiểu rõ hơn về ý đồ của kẻ tấn công.

Trước khi trình bày điểm giống và khác của hai mẫu malware, chúng ta sẽ cùng tìm hiểu về nhiệm vụ chính của Industroyer2, đó là thao túng địa chỉ đối tượng thông tin trong gói tin IEC-104 (IOA – Information Object Address).

Không giống như Industroyer, nhắm mục tiêu chủ yếu thông qua các thư viện liên kết động (DLL) của từng giao thức IEC-101, IEC-104, IEC 61850 và OPC DA (tức là101.dll, 104.dll, 61850.dll, OPC.exe và OPCClientDemo.dll) , phần mềm độc hại có tên Industroyer2 là một tệp thực thi độc lập chỉ nhắm mục tiêu đến IEC-104.

Trong quá trình phân tích, các nhà nghiên cứu đến từ Nozomi Networks đã phát hiện ra điều bất thường trong phần mềm độc hại: các tác giả không bận tâm đến việc che giấu hoạt động của mã độc, cũng như không thực hiện bất kỳ hình thức obfuscate nào. Phần core của mã độc bao gồm cấu hình, gồm các thông số khác được mô tả bên dưới, chứa danh sách các IOAs bị nhắm mục tiêu được mã hóa cứng (dấu hiệu cho thấy kẻ tấn công hiểu rất rõ về mục tiêu mà chúng nhắm đến). Cấu hình này không được bảo vệ trong file thực thi, thay vào đó nó được nhúng dưới dạng một chuỗi Unicode thông thường.

Sự thiếu quan tâm đến việc ẩn mình trên endpoint cho thấy rằng kẻ tấn công đã có hiểu biết khá đầy đủ về các biện pháp bảo mật được triển khai trong môi trường mục tiêu. Đồng thời, danh sách IOA được mã hóa cứng chỉ ra hai điều:

  1. Các nhà điều hành đã hiểu rõ về môi trường Công nghệ Vận hành (OT);
  2. Mẫu Industroyer2 được thiết kế để thực thi trong một môi trường đặc quyền với quyền truy cập trực tiếp vào các thiết bị đích.

Cửa sổ giữa quyền truy cập ban đầu và thời điểm Industroyer2 được khởi chạy là không xác định. Tuy nhiên, chúng ta có thể giả định rằng khoảng cách giữa truy cập và tấn công là trong vòng vài ngày chứ không phải vài giờ, dựa trên hoạt động độc hại.

Phân tích của Nozomi Networks Labs về Industroyer2 cho thấy rằng các tác nhân đe dọa có hiểu biết khá đầy đủ về các biện pháp bảo mật được triển khai trong môi trường mục tiêu.

Cấu hình IEC-104

Mẫu mà chúng tôi đã phân tích chứa các cấu hình được mã hóa cứng cho ba trạm khác nhau. Đối với mỗi trạm, cấu hình bao gồm:

  1. Header cấu hình trạm: Tiêu đề để định cấu hình tương tác trạm
  2. IOA Config Format: Bảng chứa nhiều IOA và các tham số tương ứng của chúng

Header cấu hình trạm

Cấu hình cho một trong các trạm sử dụng header sau: 10.xyz 2404 3 0 1 1 PService_PPD.exe 1 “D: \ OIK \ DevCounter” 0 1 0 0 1 0 0 44

Trong đó:

          10.xyz → Địa chỉ IP cục bộ của trạm được điều khiển

          2404  → Cổng trạm điều khiển

          3       → địa chỉ ASDU

          0       → Chế độ hoạt động. Nếu được đặt thành 0, bảng mã cứng của IOA sẽ được sử dụng. Nếu được đặt thành 1, hai đối số cần tuân theo việc chỉ định số IOA bắt đầu và kết thúc, sau đó được sử dụng để đặt một dải IOA để lặp qua.

          1        → Chuyển đổi yêu cầu 9 agrs:

  1. a) 1 → Boolean, các giá trị được chấp nhận: 0, 1
  2. b) PService_PPD.exe → Tên process bị kill
  3. c) 1 → Kiểm soát nếu việc đổi tên tệp, 0 (bỏ qua đổi tên), 1 (đổi tên)
  4. d) “D: \ OIK \ DevCounter” → Thư mục nơi tệp thực thi được nhắm mục tiêu được lưu trữ để kill và đổi tên
  5. e) 0 → Thời gian sleep tính bằng phút, được thực hiện trước khi bắt đầu tương tác với trạm
  6. f) 1 → Thời gian ngủ tính bằng giây
  7. g) 0 → Thời gian ngủ tính bằng giây
  8. h) 0 → Thời gian ngủ tính bằng giây
  9. i) 1 → Boolean, các giá trị được chấp nhận: 0, 1

           0          → Nếu được set, nó sẽ tương tác lại với từng IOA, đảo ngược SCO / DCO, ON / OFF

          44     → Số lượng header sau IOA

IOA Config Format

Hình 1 . Cấu hình IOA.

160921 1 0 1 1 2

  •           160921 → Địa chỉ IOA
  •           1             → Đặt lệnh đơn hoặc lệnh kép, 0 (Đôi), 1 (Đơn)
  •           0           → Đặt SCO / DCO Select / Execute, 0 (Execute), 1 (Select)
  •           1             → Đặt SCO / DCO On / Off, 0 (Tắt), 1 (Bật)
  •           1             → Ưu tiên
  •           2            → IOA entry index trong danh sách cấu hình

Hoạt động

Hình 2 . Hoạt động tương tác bằng IEC 104.

Sau khi terminate PServiceControl.exe, dựa trên cấu hình,  PService_PPD.exe sau đó được đổi tên với .MZ, mẫu bắt đầu tương tác IEC 104 (Hình 2).

Traffics được gửi từ mẫu độc hại đến trạm biến áp có tiền tố là MASTER – >> SLV trong debuger của mẫu và ngược lại. Sự tương tác bắt đầu với một chuỗi các TESTFR frame: TESTFR act được gửi từ mẫu độc hại, sau đó được một TESTFR con frame xác nhận. TESTFR frame được sử dụng để kiểm tra xem có sự cố kết nối giữa hai nút hay không.

Gói tin tiếp theo được gửi đến trạm nhận STARTDT act, là một yêu cầu kích hoạt truyền dữ liệu, frame phản hồi mong đợi là STARTDT con.  Sau khi truyền dữ liệu được bật, theo sau nó là interrogation command(C_IC_NA_1).

Bước tiếp theo mà mẫu thực hiện là lặp lại danh sách mã hóa cứng của IOA trên mỗi trạm và gửi các loại frames C_SC_NA_1 or C_DC_NA_1, tùy thuộc vào từng cấu hình của IOA. Ngoài việc chỉ định IOA được sử dụng với single / double command như đã nêu trong cấu hình ở trên, có thể chỉ định các bit được sử dụng để điều khiển Single / Double (SCO / DCO), ON / OFF và Select / Execute.

Industroyer vs Industroyer2: Phân tích song song

Mẫu Industroyer2 với sha256: d69665f56ddef7ad4e71971f06432e59f1510a7194386e5f0e8926aea7b88e00 có rất nhiều điểm tương đồng với mẫu 104.dll của Industroyer và sha256: 7907dd95c1d36cf3dc842a1bd804f0db511a0f68f4b3d382c23a3c974a383cad.

Ảnh chụp màn hình sau (Hình 3) trình bày một ví dụ về những điểm tương đồng với sự so sánh của main thread đã được dịch ngược của cả hai mẫu. Ở phía bên trái là mẫu Industroyer từ năm 2016 còn phía bên phải là mẫu Industroyer2 từ năm 2022.

Hình 3 . So sánh kỹ thuật Industroyer (trái) và Industroyer2 (phải) về main thread được dịch ngược của cả hai mẫu.

Chức năng “process killing” mà Industroyer thực hiện trong main thread, trong Industroyer2 đã được đưa vào thread cuối cùng sinh ra main thread. Tuy nhiên, điều nổi bật nhất là việc sử dụng cấu trúc mà đã được đổi tên thành “main_config” lưu trữ dữ liệu toàn cục được sử dụng trong suốt quá trình thực thi ở cả 2 mẫu. Cấu trúc “main_config” như được tìm thấy trong Industroyer2 đã được cập nhật để chứa các trường bổ sung, nhưng nó có chung “blueprint” của Industroyer.

Ảnh chụp màn hình sau (Hình 4) chứa mã đã được dịch ngược chịu trách nhiệm tạo frame STARTDT. Sự tương đồng giữa hai mẫu lại một lần nữa được quan sát thấy, với cấu trúc “main_config” được chuyển như một đối số từ hàm này sang hàm khác.

Hình 4 . So sánh kỹ thuật Industroyer (trái) và Industroyer2 (phải) của mã dịch ngược tạo khung STARTDT.

Các nhà nghiên cứu từ Nozomi Networks kết luận rằng tác nhân đe dọa không muốn tàng hình và không quan tâm đến việc làm xáo trộn hoạt động của phần mềm độc hại hoặc những điểm tương đồng giữa Industroyer và Industroyer2.

Khuyến nghị

Dưới đây là một số cách các công ty có thể tăng cường khả năng bảo vệ của họ:

  • Vệ sinh hệ thống mạng cơ bản:đặt lại mật khẩu, kiểm tra truy cập mạng và truy cập của nhân viên và nhà cung cấp, đặc quyền, quét mạng để tìm bất kỳ cổng nào đang mở và đóng / bảo mật chúng, v.v.
  • Sử dụng các quy tắc YARAđể tìm kiếm và tạo cảnh báo về hoạt động phần mềm độc hại liên quan
  • Sử dụng các công cụ phát hiện bất thườngđể phát hiện bất kỳ thay đổi hoặc biến thể nào đối với phần mềm độc hại, cũng như bất kỳ hoạt động bất thường nào xảy ra trong môi trường OT
  • Sử dụng tường lửa tự độngkết hợp với công cụ phát hiện bất thường để ngăn chặn các lệnh tấn công trong tương lai
  • Truy tìm mối đe dọa đối với hoạt động đáng ngờ trong mạng của bạn: điều này có thể giúp phát hiện sớm những kẻ tấn công

Tuan Anh Nguyen tổng hợp.