GhostTree & GhostBranch: Lạm dụng NTFS Junction đệ quy để vô hiệu hóa EDR Folder Scan

Tóm tắt
Chỉ với hai dòng lệnh và không cần quyền admin, một người dùng bình thường có thể tạo ra số lượng đường dẫn file hợp lệ gần như vô hạn trên Windows — đủ để khiến công cụ quét đệ quy, bao gồm cả EDR, chạy mãi không bao giờ kết thúc. Varonis Threat Labs gọi kỹ thuật này là GhostTree, cùng biến thể đơn giản hơn là GhostBranch.
Bản chất là lạm dụng NTFS junction trỏ ngược về thư mục cha của chính nó, tạo vòng lặp đệ quy. Một file mã độc đặt trong thư mục đó sẽ nằm yên không bị kiểm tra, vì tiến trình quét bị "kẹt" trong vòng lặp và không bao giờ đến lượt quét file. Varonis đã kiểm chứng kỹ thuật này né được folder scan của Windows Defender. Vấn đề được báo cho Microsoft và đã được vá, dù ban đầu Microsoft đóng ticket với lý do "bypass Defender không vượt qua ranh giới bảo mật".
Điểm đáng chú ý: kỹ thuật không khai thác bug nào, mà tận dụng một tính năng hợp lệ của NTFS — bất kỳ ai có quyền ghi vào thư mục đều dùng được, không cần đặc quyền.
NTFS Junction hoạt động thế nào
Junction (và symbolic link) là các tính năng nâng cao của NTFS, dùng để chuyển hướng một thư mục sang một thư mục khác — phục vụ mục đích hợp lệ như tương thích ngược với ứng dụng legacy hoặc tổ chức lại file mà không di chuyển vật lý. Về mặt kỹ thuật, junction là một dạng reparse point: OS coi đường dẫn đi qua junction như thư mục thật.
Tạo một junction chỉ cần quyền ghi và một lệnh CMD duy nhất:
mklink /J C:\LinkToFolder C:\TargetFolder
Mọi ứng dụng truy cập qua LinkToFolder sẽ thấy nội dung của TargetFolder như thể nằm cục bộ.
Một ràng buộc quan trọng: Windows truyền thống giới hạn độ dài đường dẫn ở 260 ký tự (MAX_PATH). Có thể nâng lên tối đa 32.767 ký tự bằng registry key, nhưng phần lớn ứng dụng và tiện ích không xử lý được đường dẫn vượt 260. Chính giới hạn này quyết định vòng lặp đệ quy có thể sâu đến đâu và sinh ra bao nhiêu đường dẫn.
GhostBranch — biến thể đơn giản
Cấu trúc xuất phát:
C:\Parent\program.exe
Chạy lệnh trỏ thư mục con ngược về chính thư mục cha:
mklink /J C:\Parent\Child C:\Parent
Lúc này Child chứa toàn bộ nội dung của Parent, kể cả chính nó. Hệ quả là vô số đường dẫn hợp lệ cùng trỏ về một file:
C:\Parent\Child\program.exe
C:\Parent\Child\Child\program.exe
C:\Parent\Child\Child\Child\Child\program.exe
Để tối đa số thư mục trong giới hạn 260 ký tự, có thể dùng thư mục một ký tự (ví dụ P) ngay dưới ổ C: và file thực thi tên 1.exe:
C:\P\1.exe
C:\P\P\1.exe
C:\P\P\P\...\1.exe
Cấu hình này cho khoảng 126 cấu trúc thư mục khác nhau.
GhostTree — leo thang theo cấp số nhân
GhostTree mở rộng ý tưởng bằng cách tạo nhiều thư mục con thay vì một. Ví dụ hai junction P và B, cả hai cùng loop về thư mục cha:
mklink /J C:\Parent\Child1 C:\Parent
mklink /J C:\Parent\Child2 C:\Parent
Giờ mỗi cấp trong đường dẫn có thể rẽ qua một trong hai nhánh, tạo thành cấu trúc cây nhị phân:
C:\B\1.exe
C:\P\B\1.exe
C:\P\B\P\B\...\1.exe
Độ sâu tối đa vẫn quanh 126 cấp, nhưng vì mỗi cấp có thể là P hoặc B, tổng số đường dẫn khác nhau bùng nổ:
2^126 ≈ 8.5 × 10^37
Để dễ hình dung, con số này lớn hơn nhiều so với số hạt cát trên Trái Đất (8.5 × 10¹⁸) hay số nguyên tử trong cơ thể người (10²⁷).
Vì sao EDR bị qua mặt
Cơ chế tấn công gọn đến mức nguy hiểm: kẻ tấn công đặt malware vào thư mục cha, dựng cấu trúc GhostTree, và thư mục đó trở nên không thể quét hết. Lệnh dir đệ quy hay engine quét folder của EDR sẽ đi theo vòng lặp và treo vô tận — file độc nằm cùng thư mục không bao giờ đến lượt được kiểm tra. Varonis đã test thành công với Windows Defender.
Đây là lời nhắc rằng quét endpoint chỉ là một lớp phòng thủ. Bất kỳ tiến trình duyệt cây thư mục nào không có cơ chế phát hiện vòng lặp (loop detection) hoặc giới hạn độ sâu đều có thể bị biến thành điểm mù.
Nhận định
Điều khiến GhostTree đáng chú ý không phải độ phức tạp — nó tầm thường về mặt kỹ thuật — mà là việc nó biến một tính năng "vô hại" của hệ điều hành thành công cụ né tránh, và việc Microsoft ban đầu không xem đây là vấn đề an ninh. Lập luận "bypass Defender không vượt qua ranh giới bảo mật" về mặt mô hình mối đe dọa thì có lý, nhưng với đội phòng thủ vận hành thực tế, một thư mục mà engine quét không bao giờ hoàn tất chính là một điểm mù có thể vũ khí hóa.
Đáng chú ý là Microsoft vẫn âm thầm vá lỗi này. Tuy nhiên, vấn đề cốt lõi — việc các công cụ duyệt thư mục đệ quy xử lý reparse point thiếu an toàn — là mô hình lỗi tái diễn, không chỉ giới hạn ở một engine quét. Reparse point đã từng bị lạm dụng cho nhiều mục đích (privilege escalation, sandbox escape), và GhostTree là một biến tấu mới của cùng một lớp vấn đề: tin tưởng mù quáng vào cấu trúc thư mục do người dùng kiểm soát.
Khuyến nghị
Cập nhật bản vá Windows/Defender mới nhất — Microsoft đã khắc phục kỹ thuật này.
Giám sát hành vi tạo junction/reparse point bất thường ở data layer; trên endpoint có thể tận dụng Sysmon FileCreate (Event ID 11) để bắt sự kiện tạo junction.
Cảnh báo trên các cấu trúc thư mục đệ quy bất thường không tồn tại trong vận hành bình thường (ví dụ thư mục con trùng tên cha lặp nhiều cấp).
Không phụ thuộc vào folder scanning đơn lẻ — kết hợp giám sát hành vi và telemetry truy cập file để bắt phần mà scanner bỏ sót.





