Skip to main content

Command Palette

Search for a command to run...

HollowGraph: Tin tặc biến Microsoft 365 thành công cụ điều khiển mã độc

Updated
21 min readView as Markdown
HollowGraph: Tin tặc biến Microsoft 365 thành công cụ điều khiển mã độc

Tổng quan chiến dịch

Các chuyên gia bảo mật hàng đầu thế giới vừa công bố HOLLOWGRAPH, một malware Windows được gán độ tin cậy cao vào Cavern, backdoor framework mà Check Point từng liên hệ với gián điệp gốc Iran. Điểm đáng chú ý nằm ở cách nó liên lạc: toàn bộ command-and-control chạy qua Microsoft Graph API, dùng calendar(lịch) của một mailbox Microsoft 365 đã bị xâm nhập làm nơi trao đổi lệnh và dữ liệu đánh cắp, thay vì gọi thẳng về máy chủ của kẻ tấn công. Đây không phải lỗi phần mềm cần patch, mà là lạm dụng một tài khoản và một API hợp pháp theo cách bất thường. Vì không có patch để triển khai, hành động ưu tiên ngay là rà soát log kiểm toán Microsoft 365 và Entra ID để tìm ứng dụng OAuth và hoạt động lịch bất thường, thay vì chờ bản vá từ Microsoft.

Thông tin chiến dịch

Thuộc tính Chi tiết
Tên malware HOLLOWGRAPH (Group-IB đặt tên)
Threat actor Chưa xác định danh tính cụ thể. Liên kết với Cavern framework ở mức high confidence; khả năng liên hệ Lyceum (subgroup của OilRig) ở mức low confidence
Cụm liên quan Cavern Manticore (theo Check Point Research), có overlap kỹ thuật với MuddyWater và Lyceum
Thời gian hoạt động quan sát được Ít nhất từ 3/6/2026 đến 9/7/2026
Loại tấn công Cyber espionage, C2 qua lạm dụng dịch vụ SaaS hợp pháp
Target sector Không được công bố cụ thể trong báo cáo Group-IB; hoạt động Cavern Manticore rộng hơn tập trung vào IT provider và chính phủ
Target region Israel
Công cụ chính HOLLOWGRAPH (.NET NativeAOT DLL), một component trong bộ công cụ Cavern
C2 infrastructure Microsoft Graph API qua mailbox Microsoft 365 bị xâm nhập, kết hợp DNS tunneling qua cloudlanecdn[.]com
Impact Exfiltration dữ liệu, duy trì truy cập dài hạn qua danh tính ứng dụng hợp lệ (không phải ransomware)
Nguồn phát hiện Group-IB Threat Intelligence

Timeline sự kiện

Thời điểm Sự kiện
Đầu năm 2026 Check Point Research bắt đầu theo dõi cụm Cavern Manticore nhắm vào tổ chức Israel
3/6/2026 Communication đầu tiên được Group-IB ghi nhận giữa một nạn nhân và attacker qua HOLLOWGRAPH
Giữa 6/2026 đến đầu 7/2026 Cửa sổ hoạt động chính của các implant còn active
9/7/2026 Communication gần nhất được ghi nhận trong dữ liệu Group-IB phân tích
Tháng 7/2026 Check Point công bố báo cáo Cavern Manticore, mô tả framework C2 modular gốc
20/7/2026 Group-IB công bố báo cáo HOLLOWGRAPH, chính thức liên kết component này với Cavern framework

Attack chain: Lịch M365 như một dead-drop hai chiều

HOLLOWGRAPH chỉ hiểu đúng hai lệnh, get và send, và cả hai đều chạy hoàn toàn qua hạ tầng Microsoft đáng tin cậy chứ không bao giờ gọi trực tiếp về máy chủ do kẻ tấn công sở hữu để lấy payload. Thiết kế này loại bỏ gần như toàn bộ giá trị của network monitoring truyền thống, vốn được xây để gắn cờ kết nối tới hạ tầng lạ, vì "máy chủ C2" ở đây chính là cloud của Microsoft.

Giai đoạn 1: Thiết lập chỗ đứng qua mailbox đã xâm nhập

Trước khi HOLLOWGRAPH có thể hoạt động, kẻ tấn công cần quyền truy cập vào một ứng dụng Entra ID (Azure AD) với client credentials hợp lệ, cùng quyền truy cập vào một mailbox Microsoft 365 cụ thể. Group-IB không công bố chi tiết về vector initial access dẫn tới bước này, nên đây là điểm cần lưu ý: [NEEDS VERIFICATION: cơ chế initial access và cách kẻ tấn công có được client credentials ban đầu chưa được Group-IB công bố công khai]. Những gì được xác nhận là kết quả cuối: một bộ bốn giá trị, tenant ID, client ID, client secret, và địa chỉ mailbox mục tiêu, được nhúng cứng trong binary và ghi ra đĩa dưới dạng logAzure.txt ngay khi thực thi, giả dạng một file log thông thường để không gây chú ý khi lọt vào tầm mắt của quản trị viên hệ thống.

Giai đoạn 2: Nhận lệnh qua get, dead-drop chiều đọc

Khi cần chờ chỉ thị, HOLLOWGRAPH truy vấn endpoint calendarView của mailbox mục tiêu, nhưng không quét toàn bộ lịch. Nó giới hạn tìm kiếm vào đúng một khung giờ cố định, ngày 13/5/2050 từ 22:00 đến 23:00 UTC, và lọc theo subject chứa chuỗi "Event ID: ". Việc chọn một ngày xa tương lai không phải ngẫu nhiên: nó gần như đảm bảo chủ mailbox thật sự sẽ không bao giờ cuộn lịch tới đó, trong khi vẫn giữ nguyên hành vi API hoàn toàn bình thường ở tầng network. Sau khi tìm thấy event khớp, malware tải các attachment đặt tên theo mẫu File{n}.txt, rồi giải mã bằng RSA private key nhúng sẵn trong cấu hình. Dữ liệu giải mã được trả về cho loader dưới dạng chuỗi wide string, có thể là một chỉ thị thực thi hoặc một self-command nội bộ của framework.

Giai đoạn 3: Gửi dữ liệu qua send, dead-drop chiều ghi

Chiều ngược lại hoạt động tương tự nhưng đảo vai trò. HOLLOWGRAPH mã hóa file cần đánh cắp bằng RSA public key của phía C2 server, tạo một calendar event mới cũng với subject ban đầu chỉ là một GUID ngẫu nhiên và cùng khung giờ 2050, rồi tải dữ liệu đã mã hóa lên dưới dạng một hoặc nhiều attachment File{n}.txt. Bước cuối là một lời gọi PATCH đổi subject của event thành định dạng Boss{..}ID{..}, một tín hiệu để phía vận hành viên nhận ra đây là event chứa dữ liệu đã sẵn sàng, phân biệt với các placeholder GUID chưa hoàn tất.

Sơ đồ 1. Luồng liên lạc hai chiều của HOLLOWGRAPH qua lịch Microsoft 365

Giai đoạn 4: Duy trì sự sống qua kênh DNS độc lập

Kênh Graph API chỉ hoạt động được chừng nào client credentials còn hợp lệ. HOLLOWGRAPH giải quyết điểm yếu này bằng một kênh phụ hoàn toàn tách biệt: DNS tunneling qua các truy vấn AAAA (IPv6) tới domain cloudlanecdn[.]com, dùng để làm mới cả bốn trường thông tin xác thực, tenant ID, client ID, client secret, và địa chỉ mailbox, ghi thẳng kết quả trở lại logAzure.txt. Vì kênh này không phụ thuộc vào token Graph API còn sống hay không, nó cho phép attacker cập nhật thông tin xác thực ngay cả khi kênh chính đã bị gián đoạn, miễn là domain C2 vẫn còn được resolve. Đây chính là mắt xích khiến hai kênh liên lạc của HOLLOWGRAPH trở thành một cặp bổ trợ cho nhau thay vì hai thành phần độc lập không liên quan.

Phân tích kỹ thuật chi tiết

Cấu trúc lệnh và task ID

Loader gọi HOLLOWGRAPH bằng một chuỗi wide-character duy nhất theo định dạng cố định:

<command>_;;_<arg0>_,_<arg1>_,_<arg2>

Thành phần ngoài được tách bằng chuỗi _;;_, các argument bên trong tách bằng _,_. Một task identifier dài 7 ký tự được sinh từ argument đầu vào và dùng để gắn nhãn cho toàn bộ phiên trao đổi C2 tương ứng, cả ở phía Graph API lẫn phía DNS. Cách thiết kế command syntax theo khuôn cố định này, tách biệt rõ giữa lệnh và tham số bằng delimiter riêng, là dấu vân tay quan trọng nhất giúp Group-IB liên kết HOLLOWGRAPH với framework Cavern, như phần dưới sẽ phân tích kỹ hơn.

Mã hóa lai: hai cặp khóa RSA cho hai chiều dữ liệu

Toàn bộ payload trao đổi qua Graph API được bảo vệ bằng lược đồ lai kết hợp RSA-OAEP và AES-256-GCM. Điểm đáng chú ý ở đây không phải bản thân thuật toán, đây là lựa chọn tiêu chuẩn công nghiệp, mà ở việc tách riêng cặp khóa theo chiều: một public key RSA 2048-bit dùng để mã hóa dữ liệu exfiltrate trước khi gửi đi, và một private key RSA 2048-bit riêng biệt dùng để giải mã lệnh nhận về. Nhờ tách biệt này, việc thu được một khóa không đồng nghĩa với việc đọc được cả hai chiều giao tiếp. Muốn giải mã hoàn toàn một phiên trao đổi, nhà phân tích buộc phải có cả cặp khóa, một trở ngại đáng kể khi chỉ thu hồi được binary từ một endpoint bị nhiễm.

Cấu hình nhúng cứng: logAzure.txt

Cấu hình HOLLOWGRAPH được nhúng cứng trong binary và ghi ra đĩa ngay khi thực thi, ngụy trang dưới tên một file log thông thường.

Trường Giá trị
Microsoft Entra ID Client ID 76[Removed]a0a
Microsoft Entra ID Tenant ID f3a[Removed]fb
Microsoft Entra ID Client Secret HO[Removed]bP7
Mailbox bị xâm nhập [Removed]@[Removed][.]co[.]il
C2 DNS domain cloudlanecdn[.]com, dùng cho DNS tunneling để refresh credential
RSA public key (C2 server) Khóa công khai RSA 2048-bit, dùng mã hóa dữ liệu exfiltrate
RSA private key (agent) Khóa riêng RSA 2048-bit, dùng giải mã lệnh từ operator

Bảng 1. Cấu trúc cấu hình nhúng cứng của HOLLOWGRAPH, tái dựng từ dữ liệu Group-IB công bố (các giá trị nhạy cảm đã được ẩn theo báo cáo gốc).

Việc chọn tên logAzure.txt không phải tình cờ. Với một quản trị viên rà soát nhanh thư mục ứng dụng, tên file gợi liên tưởng tới log hoạt động Azure thông thường, đủ để trôi qua một lượt kiểm tra bằng mắt mà không cần thêm bất kỳ kỹ thuật ẩn file nào phức tạp hơn.

Cơ chế DNS tunneling chi tiết

Kênh làm mới credential dùng hai loại truy vấn AAAA riêng biệt, phân biệt bằng nhãn con trong subdomain.

Truy vấn độ dài:  {random}.{7charTaskID}.{fieldIndex}.p.cloudlanecdn[.]com
Truy vấn dữ liệu: {random}.{7charTaskID}.{fieldIndex}.{byteOffset}.q.cloudlanecdn[.]com

{taskID}      = task ID 7 ký tự lấy từ lệnh đang xử lý
{fieldIndex}  = 0 đến 3, tương ứng 4 trường credential cần refresh
{byteOffset}  = offset byte đang chạy, tăng 14 đơn vị mỗi chunk

Toàn bộ truy vấn dùng record AAAA và được resolve qua thư viện DnsClient.NET. Với truy vấn dạng .p. (viết tắt "prime"), 2 byte đầu của địa chỉ IPv6 trả về được diễn giải như một giá trị uint16 big-endian, cho biết tổng độ dài dữ liệu sắp nhận. Với truy vấn dạng .q., mỗi địa chỉ IPv6 16 byte trả về mang theo 14 byte payload thực dụng. Malware ghép các chunk 14 byte này lại, decode UTF-8, rồi ghi giá trị hoàn chỉnh vào đúng trường cấu hình tương ứng trong logAzure.txt.

Sơ đồ 2. Cơ chế truy vấn hai bước của kênh DNS tunneling dùng để refresh credential Entra ID.

Kỹ thuật này nhắm khá chính xác vào một khoảng trống giám sát phổ biến. Phần lớn tổ chức theo dõi DNS ở mức thô, chặn theo danh sách domain xấu đã biết hoặc theo dõi volume truy vấn tổng thể, nhưng ít nơi phân tích entropy hay độ dài của từng label trong subdomain, đặc biệt với record AAAA vốn ít được chú ý hơn A hay TXT. Bản thân Group-IB cũng lưu ý rằng kênh DNS này hoàn toàn không được mã hóa, một điểm hai mặt: dễ giải mã hơn cho nhà phân tích nếu bắt được traffic, nhưng cũng nghĩa là attacker đặt cược vào việc kênh này sẽ không bị soi kỹ, chứ không phải vào độ khó phá mã của nó.

Liên kết với Cavern Framework

Dựa vào ba mảnh bằng chứng kỹ thuật để gán HOLLOWGRAPH vào framework Cavern với độ tin cậy cao. Thứ nhất, định dạng lệnh mà HOLLOWGRAPH sử dụng, <command>_;;_<arg0>_,_<arg1>_,_<arg2>, khớp chính xác với cú pháp lệnh đã biết của Cavern. Thứ hai, trong số các lệnh mà attacker gửi tới thực tế có chuỗi base64 MzU=, giải mã ra 003, một self-command dùng để bật tắt debug logging trong framework Cavern. Thứ ba, cấu trúc tasking từ phía C2 server cũng khớp định dạng JSON đặc trưng của Cavern, ví dụ {"cid": "oXhLaJ0ZvtPb9XB", "type": "self", "cmd": "003_;;__,_"}.

Nhật ký giải mã công bố minh họa rõ điều này:

[ OK ] file0_2.txt      RSA=OAEP-SHA256 AES-256  63B  ::  '{"cid": "oXhLaJ0ZvtPb9XB", "type": "self", "cmd": "003_;;__,_"}'
[ OK ] file0_3.txt      RSA=OAEP-SHA256 AES-256  4B  ::  'MzU='
[ OK ] file0_4.txt      RSA=OAEP-SHA256 AES-256  4B  ::  'MzU='
[ OK ] file0_5.txt      RSA=OAEP-SHA256 AES-256  63B  ::  '{"cid": "2tJw0IXauKqltnp", "type": "self", "cmd": "003_;;__,_"}'
[ OK ] file0_6.txt      RSA=OAEP-SHA256 AES-256  63B  ::  '{"cid": "alXBCzcDl8hBuNE", "type": "self", "cmd": "003_;;__,_"}'
[ OK ] file0_7.txt      RSA=OAEP-SHA256 AES-256  4B  ::  'MzU='

Ba mảnh bằng chứng này không riêng lẻ mang tính quyết định, nhưng cộng dồn lại tạo thành một mẫu hình khó giải thích bằng trùng hợp: một component hoàn toàn khác về chức năng (C2 qua calendar, thay vì các module post-exploitation mà Cavern vốn được biết đến) nhưng lại chia sẻ chính xác cùng cú pháp lệnh, cùng bộ self-command, và cùng cấu trúc JSON tasking.

MITRE ATT&CK Mapping

Tactic Technique ID Technique Name Triển khai trong chiến dịch
Command and Control T1102.002 Web Service: Bidirectional Communication Lịch mailbox M365 dùng làm dead-drop hai chiều, nhận lệnh qua get và gửi dữ liệu qua send
Command and Control T1071.001 Application Layer Protocol: Web Protocols Toàn bộ trao đổi Graph API chạy qua HTTPS REST tới các endpoint calendarView, events, attachments
Command and Control T1071.004 Application Layer Protocol: DNS Kênh phụ dùng truy vấn AAAA tới cloudlanecdn[.]com để refresh credential Entra ID
Command and Control T1573.001 / T1573.002 Encrypted Channel: Symmetric / Asymmetric Cryptography Mã hóa lai AES-256-GCM kết hợp RSA-OAEP, hai cặp khóa RSA riêng cho từng chiều dữ liệu
Command and Control T1132.001 Data Encoding: Standard Encoding Attachment File{n}.txt encode base64; self-command MzU= cũng ở dạng base64
Command and Control T1008 Fallback Channels Kênh DNS hoạt động độc lập với kênh Graph, cho phép duy trì khả năng cập nhật credential ngay cả khi kênh chính gián đoạn
Defense Evasion T1036.005 Masquerading: Match Legitimate Name or Location Cấu hình ghi ra đĩa dưới tên logAzure.txt, giả dạng file log hệ thống
Defense Evasion / Lateral Movement T1550.001 Use Alternate Authentication Material: Application Access Token Xác thực Graph API bằng client credentials (tenant ID, client ID, client secret) của một ứng dụng Entra ID thay vì token người dùng
Exfiltration T1567.002 Exfiltration Over Web Service: Exfiltration to Cloud Storage Dữ liệu đánh cắp được tải lên dưới dạng attachment calendar event, tận dụng chính hạ tầng lưu trữ của Microsoft 365
Initial Access Chưa xác định Không áp dụng [NEEDS VERIFICATION: Group-IB không công bố vector initial access hay cách kẻ tấn công có được client credentials ban đầu]

Detection

Vì đây không phải lỗ hổng có thể patch, toàn bộ chiến lược detection phải xoay quanh identity và hành vi ứng dụng, không phải network perimeter.

Rà soát calendar event bất thường qua Graph API

Tín hiệu đáng tin cậy nhất nằm ngay trong chính hành vi mà HOLLOWGRAPH buộc phải thực hiện: tạo event ở một ngày không ai đặt lịch thật, gắn attachment theo mẫu tên cố định. False positive rate của pattern này gần như bằng không trong môi trường doanh nghiệp bình thường.

# Yêu cầu: đã Connect-MgGraph với scope Calendars.Read
Connect-MgGraph -Scopes "Calendars.Read","AuditLog.Read.All"

# Hunt: calendar event đặt lịch vào năm 2050 trên toàn bộ mailbox nghi ngờ
Get-MgUserEvent -UserId "<mailbox-can-nghi>" `
    -Filter "start/dateTime ge '2050-01-01T00:00:00'" |
    Select-Object Subject, Start, End, CreatedDateTime, HasAttachments |
    Format-Table -AutoSize

Rà soát audit log cho hoạt động calendar do ứng dụng thực hiện

Một tín hiệu bổ trợ quan trọng khác: các thao tác tạo, sửa, đổi tên event nếu do một application identity thực hiện thay vì một người dùng thật, đặc biệt khi đi kèm việc tạo attachment ngay sau đó.

# Exchange Online PowerShell, yêu cầu quyền View-Only Audit Logs
Search-UnifiedAuditLog -StartDate (Get-Date).AddDays(-90) -EndDate (Get-Date) `
    -RecordType ExchangeItem -Operations "Create","Update" |
    Where-Object { $_.AuditData -match '"AppId"' } |
    Select-Object CreationDate, UserIds, Operations, AuditData |
    Format-List

Hunt file artifact trên endpoint

# Trên fleet Windows, tìm file cấu hình đặc trưng của HOLLOWGRAPH
# (chạy qua EDR remote query hoặc PowerShell remoting)
Get-ChildItem -Path C:\ -Filter "logAzure.txt" -Recurse -ErrorAction SilentlyContinue

Phát hiện DNS tunneling qua entropy và tần suất truy vấn

Theo Plight at the end of the tunnel, Elastic ghi nhận rằng entropy cao, số lượng subdomain lớn, và kích thước gói tin lớn từng được xem là chỉ dấu đáng tin cậy cho DNS tunneling, nhưng cách tiếp cận đơn lẻ đó hiện tạo ra khối lượng false positive không thể quản lý được nếu áp dụng cứng nhắc trên toàn bộ traffic DNS doanh nghiệp. Vì vậy, thay vì chỉ dựa vào một ngưỡng entropy, nên kết hợp với baseline theo từng host và loại record truy vấn.

import math
from collections import Counter

def shannon_entropy(s: str) -> float:
    counts = Counter(s)
    length = len(s)
    return -sum((c / length) * math.log2(c / length) for c in counts.values())

# Áp dụng cho từng label con trong subdomain của mỗi truy vấn AAAA
# Ngưỡng tham khảo: entropy > 3.5-4.0 bit/ký tự kèm khối lượng truy vấn bất thường
# tới cùng một apex domain trong thời gian ngắn là dấu hiệu đáng điều tra thêm
def flag_suspicious(subdomain: str, query_count_last_hour: int) -> bool:
    ent = shannon_entropy(subdomain)
    return ent > 3.7 and query_count_last_hour > 50

Với riêng chiến dịch này, có một chỉ dấu cụ thể hơn nhiều so với entropy chung chung: nhãn con .p..q. ngay trước domain gốc, kết hợp task ID 7 ký tự phía trước đó.

# Suricata rule concept, chỉ để hunt, không phải blocking rule production-ready
alert dns any any -> any any (msg:"Nghi ngờ DNS tunneling pattern HOLLOWGRAPH toi cloudlanecdn[.]com";
    dns.query; content:"cloudlanecdn.com"; nocase;
    pcre:"/\.[0-9]\.[pq]\.cloudlanecdn\.com$/i";
    sid:9000001; rev:1;)

Nhận định

Không có CVSS nào để tranh luận trong trường hợp này, và đó chính là vấn đề đáng nói. Cả một quy trình vulnerability management quen thuộc, scan, vá, xác minh lại, hoàn toàn vô nghĩa trước một kỹ thuật không dựa vào lỗ hổng mà dựa vào một ứng dụng OAuth đã có sẵn quyền hợp lệ. Đội ngũ bảo mật quen chờ patch Tuesday sẽ không có gì để chờ ở đây. Đòn bẩy duy nhất nằm ở governance danh tính và giám sát hành vi ứng dụng, một lĩnh vực mà phần lớn tổ chức đầu tư ít hơn nhiều so với network security hay endpoint protection.

Có một hệ quả thực tế mà báo cáo gốc không nói thẳng ra nhưng đáng để đội ứng phó sự cố cân nhắc kỹ: chỉ xoay client secret của ứng dụng Entra ID đang bị lạm dụng không chắc đã giết chết implant. Vì kênh DNS refresh credential hoạt động độc lập với token Graph còn sống hay không, kẻ tấn công vẫn có thể đẩy một bộ credential mới qua chính domain cloudlanecdn[.]com mà họ kiểm soát, miễn là domain đó chưa bị sinkhole. Containment thật sự đòi hỏi xóa hẳn đối tượng ứng dụng đó khỏi Entra ID, thu hồi mọi refresh token liên quan, và chặn domain C2 ở tầng DNS resolver, chứ không dừng ở bước rotate secret đơn thuần.

Tỷ lệ 3 trên 12 implant còn active cũng đáng suy nghĩ hơn là một con số thống kê đơn thuần. Một chiến dịch cơ hội thường cố gắng kích hoạt càng nhiều implant càng tốt để tối đa hóa cơ hội thu hoạch dữ liệu ở đâu đó. Việc vận hành viên chỉ chọn tương tác với một phần tư số hệ thống đã triển khai cho thấy họ có danh sách mục tiêu cụ thể từ trước, và đang thực hiện đúng theo danh sách đó thay vì rải mạng chờ cá cắn câu. Với lịch sử targeting IT provider và khu vực chính phủ của các cụm Iran-nexus tại Israel mà Check Point từng ghi nhận, cách vận hành có kỷ luật này phù hợp với một mục tiêu tình báo dài hạn hơn là tội phạm tài chính.

Cuối cùng, dù toàn bộ chỉ dấu hiện tại chỉ về Israel, kỹ thuật này không có gì đặc thù cho Israel cả. Bất kỳ tenant Microsoft 365 nào có một mailbox bị xâm nhập và một ứng dụng Entra ID bị chiếm dụng hoặc tạo giả đều có thể trở thành nạn nhân của đúng mô hình này. Với mức độ phổ biến của Microsoft 365 trong doanh nghiệp Việt Nam và khu vực Đông Nam Á, việc coi đây là "vấn đề của khu vực khác" là một cách đọc sai lệch báo cáo. Câu hỏi đáng đặt ra không phải "chúng tôi có bị nhắm tới chưa" mà là "chúng tôi có khả năng phát hiện nếu điều này xảy ra trong tenant của mình hay không".

Khuyến nghị

  • Chặn và sinkhole domain cloudlanecdn[.]com tại DNS resolver và firewall, đồng thời rà lại log DNS lịch sử để tìm mọi truy vấn từng khớp domain này.

  • Chạy ngay script hunt calendar event 2050 (đã nêu ở phần Detection) trên toàn bộ mailbox, ưu tiên các mailbox có quyền truy cập cao hoặc thuộc lãnh đạo, IT, R&D.

  • Quét fleet endpoint tìm file logAzure.txt qua EDR hoặc PowerShell remoting.

  • Nếu phát hiện dấu hiệu nhiễm: cô lập host, nhưng không dừng lại ở việc rotate client secret của ứng dụng Entra ID liên quan, xóa hẳn app registration đó và thu hồi toàn bộ refresh token.

  • Triển khai rule phát hiện DNS tunneling dựa trên entropy và tần suất truy vấn AAAA, hunt lại 90 ngày log DNS đã lưu trữ.

  • Audit toàn bộ Enterprise Application và App Registration trong Entra ID dùng client-credentials grant, đặc biệt các app có scope Calendars.ReadWrite hoặc Mail.Read, rà theo thời điểm tạo và tần suất gọi API bất thường.

  • Bật cảnh báo cho sự kiện Directory Audit liên quan tới việc thêm client secret mới hoặc chỉnh sửa mục Certificates & secrets nằm ngoài khung giờ thay đổi đã lên kế hoạch.

  • Cấu hình Conditional Access giới hạn phạm vi IP hoặc điều kiện xác thực cho các app-only call tới Graph API.

  • Đầu tư năng lực giám sát hành vi ứng dụng trên SaaS, không chỉ giám sát người dùng, thông qua CASB hoặc các giải pháp dạng Microsoft Defender for Cloud Apps, có baseline riêng cho application identity.

  • Cập nhật threat model của tổ chức để coi "ứng dụng OAuth bị chiếm dụng" là một lớp sự cố riêng biệt, có playbook ứng phó riêng, song song với playbook cho tài khoản người dùng bị chiếm dụng.

  • Thiết lập chính sách bắt buộc về thời hạn và luân chuyển client secret, kèm giám sát tự động, nhằm thu hẹp cửa sổ khai thác cho các kỹ thuật kiểu credential-refresh như HOLLOWGRAPH.

Indicators of Compromise

# Domain (defanged) — C2 dùng cho DNS tunneling refresh credential
cloudlanecdn[.]com

# File Hash — SHA256, mẫu liên quan HOLLOWGRAPH / Cavern framework
75e51774b8f79e5f256eaae639635f911b3e744d4774fd6068dd980255621509
f3f3006f8304788251b153d53b305322b8acab0c66ec816b8d9f101bcc851da3
b3d0f6e4e3be395fd7cf9e8101c89963d77216578cbb117a6ac9bc3564485eff

# Host artifact
logAzure.txt   # File cấu hình giả dạng log, chứa Entra ID credential và RSA key

# Behavioral IOC — Calendar
Calendar event ngày 2050-05-13, khung giờ 22:00-23:00 UTC
Subject dạng "Event ID: <7 ký tự>", "Boss{..}ID{..}", hoặc chỉ là một GUID trần
Attachment đặt tên theo mẫu File{n}.txt

# Behavioral IOC — DNS
Truy vấn AAAA dạng {random}.{taskID}.{fieldIndex}.p.cloudlanecdn[.]com
Truy vấn AAAA dạng {random}.{taskID}.{fieldIndex}.{offset}.q.cloudlanecdn[.]com

Nguồn tham khảo:

More from this blog

F

FPT IS Security

981 posts

Dedicated to providing insightful articles on cybersecurity threat intelligence, aimed at empowering individuals and organizations to navigate the digital landscape safely.