Câu chuyện đầy thú vị về trình tải độc hại Ya Sharp

Iworld.com.vn gửi tới độc giả Câu chuyện  đầy thú vị về  trình tải độc hại Ya Sharp

Giới thiệu

Bộ tải CyaX-Sharp dựa trên DotNet, còn được gọi là ReZer0, được biết là phát tán phần mềm độc hại hàng hóa, chẳng hạn như AgentTesla. Trong những năm gần đây, trình tải này đã được tham chiếu nhiều lần, vì nó được sử dụng trong các chiến dịch trên toàn cầu. Câu chuyện về CyaX-Sharp rất thú vị, và chúng ta học được qua việc cung cấp thông tin chi tiết về sử dụng trình tải. Ngoài ra, nó làm nổi bật điều chúng ta muốn biết hoạt động bên trong của trình tải.

Blog này được chia thành nhiều phân đoạn, bắt đầu bằng lời nói đầu ngắn gọn về mức độ phù hợp của trình tải trong các báo cáo. Sau đó, nguồn gốc của tên bộ nạp được khám phá. Tiếp theo, các khả năng của trình tải được thảo luận, cũng như việc trích xuất tự động tải trọng, được nhúng từ trình tải. Cuối cùng, phân tích hàng loạt 513 mẫu bộ nạp duy nhất sẽ được thảo luận.

Trình tải và Hệ thống bảo mật

Để che giấu phần mềm độc hại, các tác nhân thường sử dụng trình tải. Mục đích của bộ tải, như tên gọi của nó, là tải và chạy tải trọng, từ đó bắt đầu giai đoạn tiếp theo trong quy trình. Có thể có nhiều bộ tải được thực hiện tuần tự, giống như búp bê Matryoshka của Nga, trong đó búp bê nhỏ nhất, ẩn bên trong nhiều con khác, là tải trọng cuối cùng. “Con búp bê nhỏ nhất” thường chứa các khả năng chính của phần mềm độc hại, chẳng hạn như đánh cắp thông tin xác thực, mã hóa tệp hoặc cung cấp quyền truy cập từ xa cho tác nhân.

Trong khi có rất nhiều nghiên cứu về các hành động của tải trọng cuối cùng, các giai đoạn trước đó cũng thú vị và phù hợp. Mặc dù các giai đoạn trước đó không chứa các khả năng của phần mềm độc hại cuối cùng được tải, nhưng chúng cung cấp thông tin chi tiết về các bước được thực hiện, để che giấu phần mềm độc hại. Các bài viết khác thường đề cập đến các khả năng của trình tải một cách ngắn gọn. Nhưng bài viết này nói về các hệ thống bảo mật phát hiện chi tiết và kiểm tra chuyên sâu các khả năng của trình tải.

Theo các phương pháp bảo mật tốt nhất, các tổ chức nên tự bảo vệ mình ở mọi bước trên đường đi, thay vì chỉ tập trung vào phạm vi bên ngoài. Các mô hình mối đe dọa này thường được gọi là mô hình củ hành và mô hình trứng. Vỏ cứng của quả trứng rất khó vỡ, nhưng một khi bên trong, kẻ tấn công có thể tự do đi lang thang. Mô hình củ hành chống lại kẻ tấn công từng lớp, do cách tiếp cận nhiều nên biết được hành vi của tải trọng cuối cùng rất hữu ích, để phát hiện và chặn phần mềm độc hại và lý tưởng nhất là phần mềm độc hại sẽ được phát hiện sớm nhất có thể.

Bài viết này tập trung vào một họ trình tải cụ thể, nhưng theo nghĩa rộng hơn. Các cấu hình ưu tiên của các tác nhân rất hữu ích, để hiểu cách bộ tải sử dụng trong nhiều cuộc tấn công khác nhau.

Cái tên khó hiểu của phần mềm độc hại

Một bài viết gần đây của Karsten Hahn của G Data, cung cấp một cái nhìn sâu hơn về cách đặt tên không rõ ràng của phần mềm độc hại. Tên của bộ nạp này cũng không rõ ràng, vì nó được biết đến với một số tên. Các mẫu thường được đặt tên, dựa trên các đặc điểm khác biệt trong chúng. Tên CyaX-Sharp được đặt theo chuỗi lặp lại trong các mẫu. Tuy nhiên, đây chính là lý do tại sao nó cũng được đặt tên là ReZer0.

Khi xem xét các tên được sử dụng nhiều nhất trong 513 mẫu thu được, 92 sử dụng CyaX-Sharp, trong khi 215 sử dụng ReZer0. Điều này có thể khiến bộ nạp sẽ được đặt tên là ReZer0, thay vì CyaX-Sharp. Tuy nhiên khi nhìn vào các tên mẫu theo thời gian và trong biểu đồ bên dưới, để hiểu lý do tại sao CyaX-Sharp được đặt tên thay cho ReZer0. Và ReZer0 chỉ được giới thiệu 8 tháng sau khi mẫu CyaX-Sharp đầu tiên được phát hiện. Dựa trên điều này, McAfee gọi bộ nạp này là CyaX-Sharp.

Trong cài đặt, người ta sẽ tìm thấy V2 hoặc V4. Đây không phải là tham chiếu về phiên bản của trình tải, mà là phiên bản DotNet Framework được nhắm mục tiêu. Trong tập mẫu, 62% mẫu chạy trên V4, còn 38%  chạy trên V2.

Kỹ thuật của người tạo trình tải độc hại

Mỗi phiên bản của bộ tải chứa tất cả các khả năng cốt lõi, có thể được thực thi hoặc không được thực thi trong thời gian chạy, dựa trên cấu hình của bộ tải. Các cấu hình thô được lưu trữ trong một chuỗi, sử dụng hai đường dẫn làm giá trị phân định. Sau đó, chuỗi được chuyển đổi thành một mảng chuỗi, bằng cách sử dụng dấu phân cách. Dựa trên các giá trị tại các chỉ số cụ thể, một số khả năng nhất định được bật. Ảnh chụp màn hình bên dưới lần lượt hiển thị giá trị cấu hình và một số chỉ số được sử dụng trong một mẫu (SHA-256: a15be1bd758d3cb61928ced6cdb1b9fa39643d2db272909037d5426748f3e7a4).

Trình tải có thể trì hoãn việc thực thi, bằng cách ẩn đi trong một số giây nhất định, sử dụng mutex để đảm bảo nó chưa chạy, hiển thị hộp thông báo tùy chỉnh, tự duy trì như một tác vụ đã lên lịch hoặc thực thi một trọng tải nhất định trong một số cách. Tải trọng có thể được tải xuống từ một vị trí bên ngoài, sau đó nó được khởi động. Ngoài ra, tải trọng được nhúng bên trong trình tải, có thể được chạy. Điều này có thể được thực hiện trực tiếp từ bộ nhớ của trình tải, với sự trợ giúp của các câu lệnh phản hồi hoặc bằng cách làm rỗng một File mới được tạo. Lưu đồ bên dưới hình dung quá trình này ( Lưu ý rằng đường chấm có nghĩa là bước được liên kết có thể bị bỏ qua, tùy thuộc vào cấu hình của trình tải ).

Quy trình rỗng

Quy trình mới được tạo như sau: MSBuild.exe, vbc.exe, RegSvcs.exe hoặc một phiên bản mới của trình tải. Đoạn mã làm rỗng dường như được lấy từ GitHub của NYAN-x-CAT, vì vòng lặp (For) bắt đầu phương pháp làm rỗng quy trình, có trong cả trình tải và kho lưu trữ được liên kết. Cách xử lý lỗi không phải là một phương pháp chuẩn hóa, khiến cho mối liên kết giữa các đoạn mã có sẵn rất dễ xảy ra. Hình ảnh đầu tiên bên dưới hiển thị mã gốc từ kho lưu trữ, trong khi hình ảnh thứ hai hiển thị mã từ trình tải (SHA-256: a15be1bd758d3cb61928ced6cdb1b9fa39643d2db272909037d5426748f3e7a4)

Thay đổi theo thời gian

Mặc dù bộ nạp đã thay đổi theo thời gian, nó vẫn giữ nguyên cấu trúc cốt lõi. Các phiên bản sau đã giới thiệu những thay đổi nhỏ, đối với các tính năng hiện có. Dưới đây, các phiên bản trình tải khác nhau sẽ được mô tả, trong đó độ dài của mảng chuỗi chứa cấu hình của trình tải được sử dụng, để xác định các phiên bản khác nhau. Biểu đồ hiển thị mức tăng và giảm cho từng phiên bản.

Có hai điểm khác biệt đáng chú ý trong các phiên bản, trong đó kích thước của mảng cấu hình lớn hơn 29. Một số mẫu cụ thể có mã hơi khác khi so sánh, nhưng tôi không cho rằng những khác biệt này đủ lớn cho một phiên bản mới.

Thứ nhất, khả năng kích hoạt hoặc vô hiệu hóa việc thực thi mẫu bị trì hoãn. Nếu được bật, quá trình thực thi sẽ bị trì hoãn, do bị ẩn trong một số giây được xác định trước. Trong config_29, chức năng trì hoãn luôn được bật. Khoảng thời gian trì hoãn dựa trên đối tượng System.Random, được khởi tạo bằng cách sử dụng cấu trúc lõi mặc định. Với các giới hạn dưới và trên là 45,000 và 60,000, dẫn đến giá trị nằm giữa các giới hạn này bằng với số mili giây, việc thực thi sẽ bị trì hoãn.

Thứ hai, tính năng hiển thị thông báo tùy chỉnh trong lời nhắc đã được thêm vào. Tệp cấu hình chứa tiêu đề, văn bản, kiểu nút và kiểu biểu tượng của hộp thông báo. Lời nhắc có thể được sử dụng để hiển thị thông báo lỗi giả cho nạn nhân, thông báo này sẽ có vẻ hợp pháp, ví dụ: 43d334c125968f73b71f3e9f15f96911a94e590c80955e0612a297c4a792ca07, thông báo này sử dụng “Bạn không có phần mềm thích hợp để xem tài liệu này”

Tải trọng và trích xuất cấu hình

Để tự động trích xuất tải trọng và cấu hình của một trình tải nhất định, người ta có thể tạo lại cơ chế giải mã bằng ngôn ngữ lựa chọn, lấy dữ liệu được mã hóa từ trình tải và giải mã nó. Nhược điểm ở đây là cần phải có một bản sao chính xác của cơ chế giải mã. Nếu khóa được thay đổi hoặc sử dụng một thuật toán hơi khác, thì bản sao cũng cần phản ánh những thay đổi đó. Để tránh đối phó với phương pháp giải mã, có thể thực hiện một cách tiếp cận khác.

Trình tải này sử dụng nhầm các biến tĩnh, để lưu trữ cấu hình và trọng tải đã được giải mã. Tóm lại, các biến này được khởi tạo trước khi thực thi chức năng chính của trình tải. Như vậy, có thể phản ánh giá trị của hai biến được đề cập. Dữ liệu được trích xuất từ ​​513 mẫu trong tập hợp, sẽ được thảo luận trong phần tiếp theo.

Kết quả phân tích BULK

Bộ hoàn chỉnh bao gồm 513 mẫu, tất cả đều được tìm thấy bằng cách sử dụng một quy tắc Yara duy nhất. Quy tắc tập trung vào tài nguyên nhúng được sử dụng, để duy trì trình tải như một tác vụ, đã lên lịch trên hệ thống của nạn nhân. Trong một số trường hợp, quy tắc Yara sẽ không khớp với một mẫu, vì tài nguyên nhúng bị xáo trộn bằng ConfuserEx (một ví dụ là SHA-256 0427ebb4d26dfc456351aab28040a244c883077145b7b529b93621636663a812). Để giải mã, người ta có thể sử dụng fork de4dot-cex của ViRb3 của de4dot. Quy tắc Yara sẽ khớp với mã nhị phân được giải mã. Biểu đồ bên dưới cho thấy số lượng mẫu duy nhất theo thời gian.

Các ngày dựa trên ngày được nhìn thấy đầu tiên của VirusTotal. Giá trị ngày này không cần phải đại diện cho ngày phần mềm độc hại, được phân phối lần đầu tiên. Tuy nhiên, khi nói về phần mềm độc hại hàng hóa được phân phối hàng loạt, thì ngày tháng là đủ đáng tin cậy.

Bộ mẫu đã được sử dụng nhỏ hơn tổng số bộ tải trong tự nhiên. Trình tải này thường không phải là giai đoạn đầu tiên, mà là giai đoạn trong bộ nhớ được khởi chạy bởi một trình tải khác. Trên thực tế, tập hợp mẫu là đủ lớn cho nghiên cứu này, nhưng cần lưu ý rằng có nhiều mẫu trình tải duy nhất cho phạm vi ngày nhất định hơn, được sử dụng trong báo cáo này.

Sẽ rất hữu ích nếu biết các khả năng của một mẫu đơn lẻ là gì, nhưng lĩnh vực quan tâm chính của nghiên cứu này, là dựa trên việc phân tích tất cả các mẫu trong tập hợp. Một số tính năng sẽ được thảo luận, cùng với suy nghĩ về chúng. Trong phần này, tất cả các tỷ lệ phần trăm đề cập đến tổng số 513, trừ khi có quy định khác.

Sử dụng rộng rãi

Việc sử dụng bộ nạp là phổ biến, không có mối tương quan trực tiếp đối với một nhóm hoặc khu vực địa lý cụ thể. Mặc dù một số báo cáo đề cập đến một tác nhân cụ thể sử dụng hoặc tạo trình tải này, thực tế là ít nhất một trình tạo đã bị rò rỉ,  khiến việc phân bổ cho một hoặc nhiều tác nhân trở nên khó khăn. Cùng với nhiều ngành được nhắm mục tiêu, cũng như các khu vực được nhắm mục tiêu theo địa lý rộng, có vẻ như một số tác nhân sử dụng trình tải này. Mục tiêu của nghiên cứu này không phải là đi sâu vào các tác nhân sử dụng bộ tải này, mà là để xem xét bộ mẫu nói chung. Phụ lục A cung cấp một danh sách không đầy đủ các bài báo công khai (ít nhất) đề cập đến trình tải này, theo thứ tự thời gian giảm dần.

Phương pháp thực thi

Hai tùy chọn để khởi chạy tải trọng, phản xạ hoặc thông qua làm rỗng File, rất khác nhau về cách sử dụng: 90% tất cả các trình tải sử dụng làm rỗng, trong khi chỉ 10% mẫu được khởi chạy thông qua phản xạ. Các phiên bản cũ hơn của trình tải đôi khi được sử dụng, để tải một cách phản xạ một bộ đếm đã được giải mã từ các tài nguyên của trình tải, sau đó sẽ khởi chạy tải trọng, thông qua quá trình rỗng. Các số liệu dưới đây không phản ánh điều này, có nghĩa là tỷ lệ phần trăm thực tế của các lần ra mắt trực tiếp có thể thấp hơn một chút so với hiện tại. Chi tiết có thể được xem trong biểu đồ bên dưới.

Lưu ý rằng cơ chế tải phản chiếu sẽ mặc định cho quá trình làm rỗng một phiên bản mới của trình tải, nếu có bất kỳ ngoại lệ nào được đưa ra. Chỉ các tệp dựa trên DotNet mới có thể được tải phản chiếu, có nghĩa là các tệp khác được thực thi theo cách này, sẽ được tải bằng cách sử dụng phiên bản rỗng của trình tải.

Persistence và Mutexes

Phương pháp kiên trì, sử dụng tác vụ đã lên lịch để khởi động bộ nạp sau khi máy tính khởi động, được 54% bộ nạp sử dụng. Điều này không có nghĩa là 46% mẫu khác không được lưu lại trên máy của nạn nhân, vì một giai đoạn khác cũng có thể cung cấp để duy trì. Đáng chú ý là ngày trong nhiệm vụ đã lên lịch, ví dụ về nhiệm vụ đã lên lịch vào thời gian: 2014-10-25T14: 27: 44.8929027 ( 2500 ngày trước ). Nếu bất kỳ hệ thống nào trong một tổ chức gặp phải một yêu cầu đã lên lịch với ngày chính xác này, điều khôn ngoan là xác minh nguồn gốc của nó, cũng như tệp thực thi mà nó nhắm tới.

Một phần ba trong số tất cả các trình tải được định cấu hình, để tránh chạy khi một phiên bản đã hoạt động bằng mutex. Tương tự như cơ chế tồn tại, mutex có thể xuất hiện ở một giai đoạn khác, mặc dù điều này không nhất thiết phải như vậy. Các mutexes quan sát được dường như chỉ bao gồm các chữ cái trong bảng chữ cái không có dấu, hoặc [a-zA-Z] + khi được viết dưới dạng một biểu thức chính quy.

Thực thi trì hoãn

Thực thi trì hoãn được sử dụng bởi gần 37% mẫu, khoảng một nửa trong số đó là config_29, có nghĩa là cài đặt này không thể định cấu hình khi tạo mẫu. Các mẫu mà quá trình thực thi bị trì hoãn có thể được định cấu hình, bằng gần 19% tổng số. Trung bình, độ trễ 4 giây được sử dụng. Độ trễ quan sát được cao nhất là 600 giây. Biểu đồ bên dưới cho thấy khoảng thời gian trễ và tần suất.

Lưu ý rằng một trình tải đã được định cấu hình để có độ trễ 0 giây, về cơ bản không làm chậm quá trình thực thi. Trong hầu hết các trường hợp, thời gian trễ là một giá trị có thể chia cho năm.

Kiểm tra môi trường

Trước khi khởi chạy tải trọng, trình tải có thể thực hiện một số kiểm tra. Một môi trường ảo có thể được phát hiện. Khoảng 10% mẫu kiểm tra sự hiện diện của máy ảo, trong khi khoảng 11% kiểm tra xem nó có được thực thi hay không. Khoảng 8% trong số 513 mẫu kiểm tra sự hiện diện của cả hai, trước khi tiếp tục thực hiện. Nói cách khác, 88% mẫu thử phát hiện máy ảo cũng đã cố gắng phát hiện. Ngược lại, 74% mẫu đã cố gắng phát hiện xem chúng có được thực thi trên máy ảo hay không.

Tùy chọn vô hiệu hóa Windows Defender chủ yếu xuất hiện trong các mẫu trước đó, đó là lý do tại sao chỉ có 15% số người cố gắng vô hiệu hóa nó.

Nhóm tải trọng

Mục tiêu cuối cùng của bộ nạp là thực hiện giai đoạn tiếp theo trên máy của nạn nhân. Biết loại phần mềm độc hại nào họ thường bị loại bỏ, có thể giúp tìm ra điểm yếu lớn nhất trong các biện pháp phòng thủ của tổ chức bạn. Biểu đồ dưới đây cung cấp thông tin chi tiết về các nhóm trình tải, được quan sát nhiều nhất. Phân đoạn có tên khác chứa tất cả các mẫu, chẳng hạn như trình đánh cắp RedLine, Azorult hoặc keylogger MrFireMan ít được biết đến hơn.

Tỷ lệ phần trăm trong biểu đồ dựa trên tổng số 447 trọng tải, vì 66 trọng tải là trùng lặp. Nói cách khác, 66 trong số các trình tải duy nhất đã giảm tải trọng. Trong tất cả các nhóm, AgentTesla là đáng chú ý nhất, cả về tần suất và số lượng trùng lặp. Trong số 66 bản sao, 48 bản có liên quan đến AgentTesla.

Khả năng sử dụng

Hai chức năng của trình tải hầu như không được sử dụng là hộp thông báo và tải xuống tải trọng từ xa. Mức sử dụng của cả hai lần lượt là 1,3% và 0,8%. Tất cả các tải trọng từ xa cũng chứa một trọng tải được nhúng, mặc dù một trong bốn bộ tải tìm nạp từ xa không chứa URL, để tải xuống tải trọng từ xa từ đó. Tệp bên ngoài có thể được sử dụng như một mô đun bổ sung cho giai đoạn tiếp theo, một trọng tải độc hại riêng biệt hoặc nó có thể được sử dụng, để vô hiệu hóa một số cơ chế bảo vệ nhất định trên thiết bị của nạn nhân.

Kết luận

Các công ty sử dụng mô hình bảo mật nhiều lớp ( mô hình củ hành ) nói trên, được hưởng lợi rất nhiều từ việc phân tích bộ nạp và các phát hiện nội bộ có thể được cải thiện với các chi tiết được cung cấp. Điều này ngăn chặn quá trình thực thi của phần mềm độc hại, như được hiển thị trong sơ đồ phát hiện của McAfee bên dưới.

Các kỹ thuật mà bộ tải này sử dụng thường bị lạm dụng, có nghĩa là việc phát hiện một kỹ thuật như làm rỗng File, cũng sẽ ngăn chặn việc thực thi thành công nhiều họ phần mềm độc hại khác. McAfee’s Endpoint Security (ENS) và Endpoint Detection & Response (EDR) phát hiện bộ tải CyaX-Sharp mỗi bước, bao gồm cả các kỹ thuật phổ biến mà nó sử dụng. Do đó, khách hàng được bảo vệ trước vô số nhóm trình tải độc hại, dựa trên tính năng của phần mềm bảo mật.

Hàm Hashes

Các hàm Hashes được đề cập trong blog này, được liệt kê bên dưới, theo thứ tự xuất hiện và Hàm SHA-1 và SSDeep cũng được bao gồm. Bạn có thể tìm thấy danh sách đầy đủ các hàm cho tất cả 513 mẫu và tải trọng.

Mẫu 1

SHA-256: a15be1bd758d3cb61928ced6cdb1b9fa39643d2db272909037d5426748f3e7a4

SHA-1: 14b1a50c94c2751901f0584ec9953277c91c8fff

SSDeep: 12.288: sT2BzlxlBrB7d1THL1KEZ0M4p + b6m0yn1MX8Xs1ax + XdjD3ka: O2zBrB7dlHxv0M4p + b50yn6MXsSovUa

Mẫu 2

SHA-256: 43d334c125968f73b71f3e9f15f96911a94e590c80955e0612a297c4a792ca07

SHA-1: d6dae3588a2a6ff124f693d9e23393c1c6bcef05

SSDeep:24.576:EyOxMKD09DLjhXKCfJIS7fGVZsjUDoX4h/Xh6EkRlVMd3P4eEL8PrZzgo0AqKx/6:EyycPJvTGVijUDlhfEEIUvEL8PrZx0AQ

Mẫu 3

SHA-256: 0427ebb4d26dfc456351aab28040a244c883077145b7b529b93621636663a812

SHA-1: 8d0bfb0026505e551a1d9e7409d01f42e7c8bf40

SSDeep: 1229fELVEVESV9kjgE: pOIzG9

Trân trọng cám ơn quý độc giả./.

Bài đọc tham khảo thêm cho bạn

Biên dịch: Lê Toản – Iworld.com.vn