Giải mã chiến dịch tấn công mạng gần đây của nhóm tin tặc Triều Tiên Lazarus
Tổng quan
Lazarus hay còn gọi là Hidden Cobra hoặc TEMP.Hermit, là nhóm tin tặc hoạt động có liên kết với Cộng hòa Dân chủ Nhân dân Triều Tiên.
Khi điều tra sâu hơn, các nhà nghiên cứu phát hiện ra rằng nhà cung cấp phát triển phần mềm bị khai thác trước đó đã trở thành nạn nhân của Lazarus nhiều lần. Vi phạm này cho thấy một tác nhân đe dọa dai dẳng có mục tiêu là đánh cắp mã nguồn có giá trị hoặc giả mạo chuỗi cung ứng phần mềm và chúng tiếp tục khai thác các lỗ hổng trong phần mềm của công ty trong khi nhắm mục tiêu vào các nhà sản xuất phần mềm khác.
Hình 1. Dòng thời gian lây nhiễm
Các tin tặc đã thể hiện mức độ tinh vi cao, sử dụng các kỹ thuật lẩn tránh tiên tiến và sử dụng phần mềm độc hại SIGNBT để kiểm soát nạn nhân. Ngoài ra, phần mềm độc hại khác được tìm thấy trong bộ nhớ bao gồm LPEClient, một công cụ nổi tiếng của Lazarus với chức năng phân phối payload mà trước đây đã được quan sát thấy trong các cuộc tấn công vào các công ty quốc phòng và ngành công nghiệp tiền điện tử.
LPEClient được sử dụng trong cuộc tấn công này được quan sát thấy đang thực hiện một loạt các cuộc tấn công có chủ đích liên quan đến nhóm Lazarus.
Trình tải SIGNBT
Vào giữa tháng 7/2023, các nhà nghiên cứu đã phát hiện một loạt cuộc tấn công nhằm vào một số nạn nhân vốn là mục tiêu thông qua phần mềm bảo mật hợp pháp được thiết kế để mã hóa thông tin liên lạc trên web bằng chứng chỉ số.
Phương pháp chính xác mà phần mềm này bị khai thác để phát tán phần mềm độc hại vẫn còn chưa rõ ràng. Tuy nhiên, Kaspersky đã xác định hoạt động sau khai thác trong các quy trình của phần mềm hợp pháp.
Trong một trường hợp, khi kiểm tra bộ nhớ của phần mềm bảo mật bị xâm nhập từ hệ thống của nạn nhân, các nhà nghiên cứu đã phát hiện ra sự hiện diện của phần mềm độc hại SIGNBT cùng với shellcode. Shellcode này chịu trách nhiệm khởi chạy tệp thực thi Windows trực tiếp trong bộ nhớ.
Tin tặc sử dụng nhiều chiến thuật khác nhau để thiết lập và duy trì tính ổn định trên các hệ thống bị xâm nhập. Chúng bao gồm việc tạo một tệp có tên ualapi.dll trong thư mục hệ thống, tệp này được tiến trình spoolsv.exe tải tự động mỗi lần khởi động hệ thống.
Ngoài ra, trong một số trường hợp, các mục registry đã được ghi lại để thực thi các tệp hợp pháp, đảm bảo hơn nữa cơ chế kiên trì linh hoạt.
Hình 2. Phương pháp tải payload cuối cùng
Tận dụng tiến trình spoolsv.exe cho mục đích chiếm quyền điều khiển là một chiến lược lâu dài của Lazarus. Tự động tải tệp ualapi.dll sau mỗi lần khởi động lại không phải là một kỹ thuật mới đối với nhóm tin tặc này. Trước đây, các nhà nghiên cứu đã từng thấy các chiến thuật tương tự được phần mềm độc hại Gopuram sử dụng.
Tệp ualapi.dll độc hại được phát triển bằng mã nguồn công khai có tên Shareaza Torrent Wizard. Nó tuân theo cách tiếp cận điển hình của nhóm Lazarus là sử dụng mã nguồn công cộng làm nền tảng và đưa các chức năng độc hại cụ thể vào đó.
Trình tải này có quy trình xác minh nạn nhân. Nó truy xuất thông tin Machine GUID của nạn nhân bằng cách đọc nó từ Windows Registry và sau đó so sánh với giá trị Machine GUID được nhúng. Để truy cập giá trị được nhúng này, phần mềm độc hại sẽ định vị chuỗi “43 EB 8C BD 1D 98 3D 14” và đọc giá trị DWORD ngay sau đó. Sau đó, phần mềm độc hại sẽ đọc payload từ đường dẫn tệp được mã hóa cứng và tiếp tục các hoạt động độc hại của nó. Đường dẫn payload: C:\Windows\system32\config\systemprofile\appdata\Local\tw-100a-a00-e14d9.tmp.
Quá trình tải sẽ truy xuất 32 byte đầu tiên từ tw-100a-a00-e14d9.tmp và sử dụng dữ liệu này làm khóa giải mã AES để giải mã các nội dung còn lại. Sau khi được giải mã, payload, một tệp thực thi Windows được xác định là SIGNBT, sẽ được tải trực tiếp vào bộ nhớ. Trong trường hợp này, payload được tải cũng đọc tệp cấu hình từ cùng một đường dẫn, nhưng có tên tệp hơi khác. Tệp cấu hình: C:\Windows\system32\config\systemprofile\appdata\Local\tw-100b-a00-e14d9.tmp.
Bên trong tệp này là một chuỗi được mã hóa base64, phản ánh cách tiếp cận được sử dụng trong phương thức phần mềm độc hại SIGNBT trước đó. Trong đó, 32 ký tự đầu tiên của chuỗi này đóng vai trò là khóa giải mã AES, trong khi dữ liệu tiếp theo chứa thông tin cấu hình được phần mềm độc hại sử dụng.
Dữ liệu cấu hình được giải mã này bao gồm các chi tiết như ba địa chỉ của máy chủ chỉ huy và kiểm soát (C2), khoảng thời gian thiết bị không hoạt động, thông tin phiên bản, mục tiêu được giám sát và nhiều thông số quan trọng khác đối với hoạt động của phần mềm độc hại.
Các tiền tố hoạt động của SIGNBT
Phần lớn các phiên bản SIGNBT được khởi chạy thông qua trình tải phần mềm độc hại hoạt động trong bộ nhớ. Sau khi thực thi, phần mềm độc hại bắt đầu liên lạc với máy chủ C2 bằng cách gửi đèn hiệu (Beacon) sau khi khởi tạo dữ liệu cấu hình của nó.
Trong giao tiếp C2, phần mềm độc hại sử dụng các chuỗi đặc biệt bắt đầu bằng SIGNBT. Ngoài ra, nó sử dụng các tiền tố khác nhau ở mỗi giai đoạn hoạt động của C2 để xác minh và duy trì hoạt động.
SIGNBT sử dụng quy trình gồm nhiều bước để tạo giá trị 24 byte cho nhiều mục đích khác nhau. Đầu tiên, nó tạo ra giá trị này với các thành phần sau:
- 8 byte giá trị được mã hóa cứng (SIGNBTLG): đây là phần cố định của giá trị và dùng để xác thực tính hợp pháp của kết nối của máy khách.
- 8 byte từ hàm băm MD5 của tên máy chủ: 8 byte đầu tiên của hàm băm MD5 tên máy tính của nạn nhân được bao gồm, giúp phân biệt từng nạn nhân.
- 8 byte mã định danh được tạo ngẫu nhiên: 8 byte khác được tạo ngẫu nhiên, có thể được sử dụng cho mã định danh phiên.
Sau khi tạo giá trị 24 byte này, SIGNBT sẽ tạo thêm 24 byte dữ liệu ngẫu nhiên. Hai bộ 24 byte này sau đó được XOR cùng nhau bằng cách sử dụng khóa 24 byte được tạo ngẫu nhiên khác. Sau đó, cả giá trị kết quả và khóa 24 byte đều được mã hóa bằng base64. Cuối cùng, các giá trị được mã hóa này được kết hợp với ba hoặc bảy tên tham số HTTP được tạo ngẫu nhiên.
Trong tất cả các thông tin liên lạc C2 trong tương lai, SIGNBT sử dụng cấu trúc tương tự, khiến việc phát hiện và phân tích thông tin liên lạc của nó trở nên khó khăn hơn.
Hình 3. Cấu trúc dữ liệu HTTP POST
SIGNBT sử dụng cơ chế xác thực dữ liệu phản hồi nhận được từ máy chủ C2. Cụ thể, nó kiểm tra xem liệu dữ liệu phản hồi có chứa tập lệnh HTML được mã hóa cứng hay không.
Trong quá trình xác thực, SIGNBT giải mã 12 byte đầu tiên từ máy chủ C2 bằng base64, thay thế khoảng trắng bằng dấu cộng để tạo chuỗi bảy ký tự. Quá trình này sau đó được lặp lại với 12 byte tiếp theo. Bảy ký tự đầu tiên của mỗi bộ sau đó được XOR và so sánh với chuỗi “success”. Quy trình lặp đi lặp lại này được áp dụng cho mọi chuỗi giao tiếp HTTP để xác minh rằng phản hồi phù hợp với tiêu chí “success” dự kiến.
Tiếp theo, phần mềm độc hại này gửi các yêu cầu HTTP với tiêu đề SIGNBTKE và nếu nhận được thông báo “success” từ máy chủ C2, nó sẽ kích hoạt chức năng getInfo trong lớp CCBrush.
Chức năng này thu thập nhiều thông tin khác nhau về máy tính của nạn nhân, chẳng hạn như tên máy tính, chi tiết hệ điều hành, thời gian hoạt động của hệ thống, thông tin CPU, múi giờ, trạng thái mạng, dữ liệu cấu hình phần mềm độc hại,...
Sau khi gửi thông tin dành riêng cho hệ thống này, SIGNBT sẽ gửi một yêu cầu HTTP khác có tiền tố SIGNBTGC, lần này sử dụng tham số HTTP được nhúng được chọn ngẫu nhiên từ danh sách 100 tên tham số có thể có.
Dữ liệu nhận được từ máy chủ C2 được giải mã bằng AES với khóa giải mã thu được từ yêu cầu HTTP SIGNBTLG. Nếu dữ liệu được giải mã là “keep”, SIGNBT sẽ phản hồi bằng thông báo “OK” bằng tiền tố SIGNBTSR, cho biết giao tiếp thành công.
Nếu có vấn đề, SIGNBT sẽ sử dụng tiền tố SIGNBTFI để truyền tải bản chất của vấn đề hoặc lỗi giao tiếp. Tóm lại, quá trình giao tiếp C2 có thể được mô tả như Hình 4:
Hình 4. Quá trình giao tiếp C2
Nếu dữ liệu được gửi không bằng “keep”, cho biết cần có hướng dẫn hoặc hành động cụ thể, thì phần mềm độc hại sẽ tiếp tục gọi lớp và chức năng tương ứng. SIGNBT được trang bị một bộ chức năng mở rộng được thiết kế để kiểm soát hệ thống của nạn nhân.
Để thực hiện các chức năng này, SIGNBT nhận hướng dẫn từ máy chủ C2 dưới dạng tên lớp, tên hàm và mọi tham số cần thiết. Sau đó, nó thực thi chức năng liên quan được nhúng trong cơ sở mã của phần mềm độc hại.
Tên của mỗi lệnh cửa sau rất đơn giản, thực hiện các lệnh Windows thường được sử dụng như: ping, netstat và systeminfo. Điều quan trọng cần lưu ý là backdoor có khả năng nhúng một payload bổ sung để thực thi tự động, có tên nội bộ là “deploy”. Chức năng này nhận đường dẫn tệp thông qua các đối số dòng lệnh được giải mã bằng AES.
Dựa trên phân tích, rõ ràng là hành vi xâm phạm ban đầu của kẻ tấn công đối với nạn nhân liên quan đến việc khai thác các lỗ hổng trong quá trình khai thác phần mềm. Sau đó, chúng tiến hành triển khai phần mềm độc hại SIGNBT bằng kỹ thuật DLL side-loading.
Hơn nữa, kẻ tấn công đã sử dụng khả năng “deploy” của backdoor để nhúng một payload bổ sung nhằm thực thi tự động. Cuộc tấn công này thể hiện mức độ tinh vi cao và nỗ lực có chủ ý nhằm xâm nhập và duy trì quyền kiểm soát hệ thống của nạn nhân.
Phần mềm độc hại LPEClient
Với cách thức tấn công như trên, các tin tặc sẽ triển khai thêm phần mềm độc hại vào bộ nhớ của nạn nhân. Đáng chú ý, các biến thể phần mềm độc hại mới được phát tán này chủ yếu chỉ thực thi trong bộ nhớ của hệ thống.
Theo chia sẻ của Kaspersky, các nhà nghiên cứu quan sát thấy kẻ tấn công cũng đã sử dụng các công cụ như LPEClient trong các chiến dịch của Lazarus.
Hình 5. Payload bổ sung do SIGNBT phân phối
Phần mềm độc hại LPEClient không phải là mới và đã được phát hiện lần đầu tiên vào năm 2020. Nó được thiết kế để thu thập thông tin nạn nhân và tải xuống các payload bổ sung từ máy chủ từ xa để chạy trong bộ nhớ.
Hiện tại, LPEClient sử dụng các kỹ thuật tiên tiến để cải thiện khả năng tàng hình và tránh bị phát hiện. Điều này cho thấy nỗ lực không ngừng của các tác nhân đe dọa nhằm tăng cường độ tinh vi và hiệu quả của phần mềm độc hại của chúng.
Kết nối với các chiến dịch khác
LPEClient là một trong những chủng phần mềm độc hại được sử dụng trong cuộc tấn công này của Lazarus, luôn đóng vai trò là vectơ lây nhiễm ban đầu, tạo điều kiện thuận lợi cho việc phân phối các payload bổ sung.
Trong một khoảng thời gian dài, các chiến dịch của Lazarus thường nhắm mục tiêu vào các lĩnh vực quốc phòng và hạt nhân. Trong một sự cố gần đây, kẻ tấn công đã xâm phạm nạn nhân bằng cách phân phối LPEClient thông qua ứng dụng VNC (Virtual Network Computing) hoặc Putty bị Trojan hóa để lây nhiễm trung gian.
Một chiến dịch khác nhắm vào ngành công nghiệp tiền điện tử được phát hiện vào tháng 7/2023, kẻ tấn công đã tận dụng phần mềm độc hại Gopuram, liên quan đến cuộc tấn công chuỗi cung ứng 3CX. Điều thú vị là kẻ tấn công cũng sử dụng phần mềm độc hại LPEClient trong trường hợp này.
Các chiến dịch này được cho là do Lazarus thực hiện vào năm 2023 minh họa các vectơ lây nhiễm ban đầu và chuỗi lây nhiễm khác nhau, nhưng chúng luôn dựa vào phần mềm độc hại LPEClient để phân phối payload cuối cùng.
Hình 6. Chuỗi lây nhiễm của các chiến dịch gần đây được cho là của Lazarus
Kết luận
Lazarus vẫn là nhóm tin tặc hoạt động rất linh hoạt trong bối cảnh an ninh mạng ngày nay, chúng đã thể hiện sự hiểu biết sâu sắc về môi trường hệ thống mạng, tinh chỉnh các chiến thuật và phương thức tấn công trong đó bao gồm việc khai thác các lỗ hổng phần mềm. Cách tiếp cận này cho phép chúng phát tán phần mềm độc hại một cách hiệu quả sau khi đạt được các đợt lây nhiễm ban đầu.
Hồng Đạt