Chủ Nhật, 30 tháng 11, 2014

Phần mềm độc hại bí mật trong cuộc tấn công Liên minh châu Âu có gốc gác từ tình báo Mỹ và Anh (Phần 2 và hết)


By Morgan Marquis-Boire, Claudio Guarnieri, and Ryan Gallagher, 11/25/2014
Bài được đưa lên Internet ngày: 25/11/2014

Lời người dịch: Lại một SIÊU SIÊU SIÊU phần mềm độc hại nữa dành riêng cho Windows, được cho là do các cơ quan an ninh và tình báo NSA - Mỹ và GCHQ - Anh cùng tạo ra, đánh vào các hệ thống mạng của hãng viễn thông Bỉ Belgacom và Liên minh châu Âu, có tên là Regin. “Ronald Prins, một chuyên gia an ninh của hãng Fox IT được thuê để loại bỏ phần mềm độc hại đó khỏi các mạng của Belgacom, đã nói cho Intercept rằng đó là “phần mềm độc hại tinh vi phức tạp nhất” mà anh ta từng nghiên cứu”. “Phần mềm độc hại đó ăn cắp dữ liệu từ các hệ thống bị lây nhiễm và tự ngụy trang nó như là phần mềm hợp pháp của Microsoft, cũng đã được xác định trong các hệ thống máy tính của Liên minh châu Âu mà đã bị ngắm đích để Cơ quan An ninh Quốc gia Mỹ (NSA) giám sát”. Để tải về phần mềm độc hại đó, nháy vào đây. Xem thêm: Chương trình gián điệp của NSA trên không gian mạng.
Cài cắm giấu giếm
Điều tra của Intercept đã phát hiện một mẫu được tải lên VirusTotal hôm 14/03/2012 mà trình bày đầu đề đặc biệt 0xfedcbafe, nó là một dấu hiệu rằng nó có thể được một trình điều khiển của Regin tải lên và nó dường như cung cấp chứng năng giấu giếm cho bộ công cụ đó.

Hình này chỉ các byte ngay đầu của mẫu theo yêu cầu, chỉ ra đầu đề đặc biệt 0xfedcbafe ở ngay đầu.

Để truy cập thông tin được lưu trong bộ nhớ của máy tính, các chương trình sử dụng các đối tượng mà tham chiếu tới các vị trí đặc biệt trong bộ nhớ, được gọi là các con trỏ. Tệp nhị phân này có vài con trỏ như vậy được khởi tạo, nó làm rõ thêm giả thiết rằng tệp đó đã bị bỏ khỏi bộ nhớ trong quá trình một phân tích pháp lý một hệ thống bị tổn thương.
Mẫu có hàm băm SHA256 sau:
fe1419e9dde6d479bd7cda27edd39fafdab2668d498931931a2769b370727129
Mẫu này đưa ra ý nghĩa về sự phức tạp của các tác nhân và độ dài của sự đề phòng mà chúng đã thực hiện để hoạt động càng giấu giếm bao nhiêu càng tốt.
Khi một trình điều khiển nhân Windows cần phân bổ bộ nhớ để lưu trữ vài dạng dữ liệu, nó tạo ra cái gọi là các vùng (pools) của nhân. Các phân bổ bộ nhớ như vậy có các đầu đề và thẻ tag đặc thù được sử dụng để nhận diện dạng các đối tượng có trong khối đó. Ví dụ các thẻ tag như vậy có thể là Proc, Thrd hoặc File, tương ứng chỉ rằng khối được đưa ra có thể có một cấu trúc đối tượng tiến trình, luồng hoặc tệp.
Khi thực hiện phân tích pháp lý bộ nhớ một máy tính, là phổ biến để sử dụng một kỹ thuật được gọi là quét vùng để phân tích cú pháp bộ nhớ của nhân, đánh số các vùng nhân như vậy, nhận diện dạng nội dung và trích xuất nó.
Hệt như các trình điều khiển trình tải Regin, trình điều khiển này sử dụng lặp đi lặp lại thẻ tag “Ddk” chung với ExAllocatePoolWithTag() khi phân bổ tất cả các vùng của nhân:


Hình này chỉ sự sử dụng thẻ tag “ddk” khi phân bổ bộ nhó với hàm ExAllocatePoolWIthTag() của Windows

Thẻ tag chung đó được sử dụng khắp hệ điều hành khi một thẻ phù hợp không được chỉ định. Điều này làm cho khó khăn hơn đối với phân tích pháp lý để tìm ra bất kỳ thông tin hữu ích nào khi tiến hành quét vùng, vì tất cả các phân bổ bộ nhớ của nó sẽ trộng với nhiều vùng chung khác.
Hơn nữa, khi giải phóng bộ nhớ bằng việc sử dụng ExFreePool(), trình điều khiển vô hiệu hóa nội dung, có khả năng để tránh các dấu vết để sót lại trong bộ nhớ của các vùng đó.
Trình điều khiển cũng gồm các thủ tục để kiểm tra các xây dựng đặc thù của nhân Windows đang được sử dụng, bao gồm cả các phiên bản rất cũ như Windows NT4 Terminal Server và Windows 2000, và áp dụng các hành vi của nó một cách tương ứng.
Các trình điều khiển nhân Windows vận hành trong các mức ưu tiên khác nhau, từ mức thấp nhất PASSIVE_LEVEL cho tới mức cao nhất HIGH_LEVEL. Mức này được bộ vi xử lý sử dụng để biết dịch vụ nào trao quyền ưu tiên thực thi và để chắc chắn rằng hệ thống không cố phân bổ các tài nguyên được sử dụng mà có thể gây ra sự đổ vỡ.
Trình điều khiển Regin này định kỳ kiểm tra IRQL (Interrupt Request Level) hiện hành được thiết lập về PASSIVE_LEVEL bằng việc sử dụng hàm KeGetCurrentIrql() trong nhiều phần của mã, có thể để vận hành càng âm thầm có thể càng tốt và ngăn cản sự lộn xộn có thể của IRQL. Kỹ thuật này là một ví dụ khác về mức độ ngăn chặn mà các lập trình viên chọn khi thiết kế khung công việc phần mềm độc hại này.
Dựa vào sự thực thi của thủ tục bỏ tải (nằm ở 0xFDEFA04A), trình điều khiển đó thực hiện một tuần tự dài các bước để loại bỏ các dấu vết và các chế tác còn sót lại.
Ví dụ của Belgacom
Trong một cuộc phỏng vấn được tạp chí Bỉ MondiaalNiews đưa ra, Fabrice Clément, người đứng đầu về an ninh của Belgacom, nói rằng hãng lần đầu tiên đã nhận diện cuộc tấn công vào ngày 21/06/2013.
Trong một cuộc phỏng vấn y hệt Clément nói rằng các máy tính bị các tin tặc nhắm đích bao gồm các máy trạm của các nhân viên cũng như các máy chủ thư điện tử.
Các tuyên bố khẳng định thời điểm và các kỹ thuật được sử dụng trong cuộc tấn công.
từ các mẫu Regin được nhận diện trước đó, Intercept đã phát triển các chữ ký độc nhất có thể nhận diện được bộ công cụ này. Một tệp lưu trữ nén với một mẫu được nhận diện như là Rgin/Prax đã được tìm thấy trong VirusTotal, một website tự do, trực tuyến cho phép mọi người gửi các tệp sẽ được vài sản phẩm chống virus quét lên. Tệp nén đó đã được gửi lên hôm 21/06/2013 lúc 07:58:37 UTC từ Bỉ, ngày mà Clément đã nhận diện ra. Các nguồn tin thân cận với sự việc thâm nhập trái phép vào Belgacom đã nói cho Intercept rằng mẫu này đã được một người quản trị hệ thống ở công ty đó tải lên, người đã phát hiện ra phần mềm độc hại và đã tải nó lên trong một nỗ lực để nghiên cứu xem nó là dạng phần mềm độc hại nào.
Tệp lưu trữ đó bao gồm: