TỔNG QUAN
Với AmCache, trong một tình huống ứng phó sự cố, nó có thể là chìa khóa để xác định các sự kiện xóa dấu vết (ví dụ mã độc tống tiền tự động xóa chính nó), cho phép các nhà phân tích tìm kiếm các mẫu do kẻ tấn công để lại, chẳng hạn như tên tệp và đường dẫn. Hơn nữa, AmCache lưu trữ các hàm băm SHA-1 của các tệp đã thực thi, cho phép các chuyên gia bảo mật tìm kiếm các nguồn cấp dữ liệu tình báo mối đe dọa công khai, chẳng hạn như OpenTIP, VirusTotal và tạo các tập luật để chặn cùng tệp này trên các hệ thống khác trên mạng
Bằng chứng thực thi về cơ bản rất quan trọng trong điều tra số và ứng phó sự cố, vì nó giúp các nhà điều tra tái hiện lại cách hệ thống được sử dụng trong quá trình xâm nhập. Các tính năng như Prefetch, ShimCache và UserAssist cung cấp manh mối về những gì đã được thực thi. AmCache cũng là một phương pháp để chứng minh việc thực thi, lưu trữ metadata cho biết sự hiện diện và thực thi của tệp, ngay cả khi tệp đã bị xóa hoặc sửa đổi. Một lợi thế của AmCache so với các bằng chứng số Windows khác, là nó lưu trữ hàm băm tệp, điều này cực kỳ hữu ích cho các nhà phân tích, vì nó có thể được sử dụng để tìm kiếm các tệp độc hại trên mạng, tăng khả năng xác định, ngăn chặn và loại bỏ hoàn toàn mối đe dọa.
GIỚI THIỆU VỀ AMCACHE
Application Activity Cache (AmCache) được giới thiệu lần đầu tiên trong Windows 7 và được tận dụng tối đa trong Windows 8 trở lên. Mục đích của nó là thay thế bộ nhớ đệm cũ RecentFileCache.bcf trong các hệ thống mới hơn. Không giống như phiên bản tiền nhiệm, AmCache bao gồm thông tin điều tra số có giá trị về việc thực thi chương trình, các tệp nhị phân đã thực thi và driver đã tải.
AmCache được lưu trữ dưới dạng tệp registry hive có tên Amcache.hve trong thư mục C:\Windows\AppCompat\Programs. Metadata được lưu trữ trong tệp này bao gồm đường dẫn tệp, dữ liệu nhà xuất bản, timestamp biên dịch, kích thước tệp và hàm băm SHA-1.
Điều quan trọng cần lưu ý là định dạng AmCache không phụ thuộc vào phiên bản hệ điều hành, mà phụ thuộc vào phiên bản thư viện (DLL) chịu trách nhiệm điền vào bộ nhớ đệm. Theo cách này, ngay cả các hệ thống Windows với các mức bản vá khác nhau cũng có thể có những khác biệt nhỏ về cấu trúc của các tệp AmCache. Các thư viện đã biết được sử dụng để điền vào bộ nhớ đệm này được lưu trữ %WinDir%\System32 với các tên sau: aecache.dll, aeevts.dll, aeinv.dll, aelupsvc.dll, aepdu.dll, aepic.dll.
Cần lưu ý rằng AmCache có những đặc điểm và hạn chế riêng: Chỉ tính toán hàm băm SHA-1 trên 31.457.280 byte đầu tiên (khoảng 31 MB) của mỗi tệp thực thi, do đó việc so sánh hàm băm được lưu trữ trực tuyến của nó có thể không thành công đối với các tệp vượt quá kích thước này. Hơn nữa, Amcache.hve không phải là log thực thi thực sự, nó ghi lại các tệp trong các thư mục được quét bằng Microsoft Compatibility Appraiser. Trong cùng thư mục, chúng ta có thể tìm thấy các tệp LOG bổ sung được sử dụng để đảm bảo Amcache.hve có tính nhất quán và hoạt động phục hồi: C:\Windows\AppCompat\Programs\Amcache.hve.*LOG1; C:\Windows\AppCompat\Programs\Amcache.hve.*LOG2. Tệp Amcache.hve có thể được thu thập từ hệ thống phân tích điều tra số bằng các công cụ như Aralez, Velociraptor hoặc Kape.
CẤU TRÚC AMCACHE.HVE
Tệp Amcache.hvel là một tổ hợp Windows Registry ở định dạng REGF, nó chứa nhiều khóa con lưu trữ các lớp dữ liệu riêng biệt. Một trình phân tích cú pháp Python đơn giản có thể được triển khai để lặp lại Amcache.hve và hiển thị các khóa của nó.
Hình 1. Khóa AmCache
Theo Kaspersky, các khóa cần quan tâm nhất là InventoryApplicationFile, InventoryApplication, InventoryDriverBinary, và InventoryApplicationShortcut, được mô tả chi tiết trong các tiểu mục sau:
InventoryApplicationFile
Khóa InventoryApplicationFile rất cần thiết để theo dõi mọi tệp thực thi được phát hiện trên hệ thống. Với khóa này, mỗi tệp thực thi được biểu diễn bằng một khóa con có tên duy nhất, lưu trữ metadata chính sau:
- ProgramId: Một mã băm duy nhất được tạo từ tên nhị phân, phiên bản, nhà xuất bản và ngôn ngữ, với một số số 0 được thêm vào đầu mã băm.
- FileID: Băm SHA-1 của tệp, với bốn số 0 được thêm vào đầu băm.
- LowerCaseLongPath: Đường dẫn chữ thường đầy đủ đến tệp thực thi.
- Name: tên cơ sở của tệp không có thông tin đường dẫn.
- OriginalFileName: Tên tệp gốc được chỉ định trong tài nguyên phiên bản của header PE, cho biết tên do nhà phát triển chỉ định tại thời điểm được build.
- Publisher: Thường được sử dụng để xác minh xem nguồn nhị phân có hợp lệ hay không. Đối với phần mềm độc hại, khóa con này thường để trống.
- Version: Phiên bản build hoặc phát hành cụ thể của tệp thực thi.
- BinaryType: Chỉ ra liệu tệp thực thi là tệp nhị phân 32 bit hay 64 bit.
- ProductName: Mô tả sản phẩm phần mềm.
- LinkDate: Timestamp biên dịch được trích xuất từ header PE.
- Size: Kích thước tệp tính bằng byte.
- IsOsComponent: Cờ boolean chỉ định tệp thực thi có phải là thành phần hệ điều hành tích hợp hay ứng dụng/thư viện của bên thứ ba không.
Với một số điều chỉnh đối với trình phân tích cú pháp Python gốc, hoàn toàn có thể đọc thông tin được lưu trữ trong khóa này.
Hình 2. Khóa con InventoryApplicationFile
Chúng ta cũng có thể sử dụng các công cụ như Registry Explorer để xem cùng dữ liệu bằng đồ họa:
Hình 3. InventoryApplicationFile được kiểm tra thông qua Registry Explorer
Như đã đề cập trước đó, AmCache chỉ tính toán hàm băm SHA-1 trên 31.457.280 byte đầu tiên. Để chứng minh điều này, các nhà nghiên cứu đã thực hiện một thử nghiệm nhỏ, trong đó họ đã thu được một tệp nhị phân nhỏ hơn 31 MB (Aralez) và một tệp lớn hơn giá trị này (một phiên bản tùy chỉnh của Velociraptor). Trong trường hợp đầu tiên, hàm băm SHA-1 của toàn bộ tệp nhị phân được lưu trữ trong AmCache.
Hình 4. Kịch bản lưu trữ AmCache SHA-1 đầu tiên
Đối với kịch bản thứ hai, các nhà nghiên cứu sử dụng tiện ích dd để trích xuất 31 MB đầu tiên của tệp nhị phân Velociraptor.
Hình 5. Tệp nhị phân bị lược bỏ
Khi kiểm tra mục Velociraptor trên AmCache, các nhà nghiên cứu phát hiện ra rằng nó thực sự lưu trữ hàm băm SHA-1 chỉ được tính cho 31.457.280 byte đầu tiên của tệp nhị phân. Điều thú vị là giá trị Size biểu thị kích thước thực tế của tệp gốc. Do đó, việc chỉ dựa vào hàm băm tệp được lưu trữ trên AmCache để truy vấn các cổng thông tin tình báo về mối đe dọa có thể là không đủ khi xử lý các tệp lớn. Vì vậy, các nhà nghiên cứu cần kiểm tra xem kích thước tệp trong bản ghi có lớn hơn 31.457.280 byte hay không, trước khi tìm kiếm trên các cổng thông tin tình báo về mối đe dọa.
Hình 6. Kịch bản lưu trữ AmCache SHA-1 thứ hai
Ngoài ra, kẻ tấn công có thể lợi dụng đặc điểm này để cố tình tạo ra các tệp nhị phân độc hại lớn. Bằng cách này, ngay cả khi các nhà điều tra phát hiện ra rằng mã độc đã được thực thi/hiện diện trên hệ thống Windows, hàm băm SHA-1 thực tế của tệp nhị phân vẫn sẽ không được biết đến, gây khó khăn cho việc theo dõi nó trên mạng và thu thập dữ liệu từ các cơ sở dữ liệu công cộng như VirusTotal.
Giả sử bạn đang tìm kiếm một mối đe dọa nội bộ tiềm ẩn. Người dùng phủ nhận việc chạy bất kỳ chương trình đáng ngờ nào và mọi phần mềm đáng ngờ đều đã được xóa an toàn khỏi ổ đĩa. Tuy nhiên, trong InventoryApplicationFile, bạn tìm thấy bản ghi winscp.exe trong thư mục Download của người dùng. Mặc dù tệp đã biến mất, cho thấy công cụ này đã có trên máy và có thể đã được sử dụng để chuyển tệp trước khi bị xóa. Trong quá trình ứng phó sự cố, các nhà nghiên cứu đã thấy những trường hợp tương tự, trong đó khóa này tỏ ra khá hữu ích.
InventoryApplication
Khóa InventoryApplication ghi lại chi tiết về các ứng dụng đã được cài đặt trước đó trên hệ thống. Không giống như InventoryApplicationFile, ghi lại mọi tệp thực thi gặp phải, InventoryApplication tập trung vào các tệp có bản ghi cài đặt. Mỗi mục nhập được đặt tên theo ProgramId duy nhất, cho phép liên kết trực tiếp đến khóa InventoryApplicationFile tương ứng. Ngoài ra, InventoryApplicationcòn có các khóa con sau:
- InstallDate: Chuỗi string cho biết thời gian hệ điều hành lần đầu tiên ghi lại hoặc nhận dạng ứng dụng.
- MsiInstallDate: Chỉ hiển thị nếu được cài đặt thông qua Windows Installer (MSI); hiển thị thời gian chính xác gói MSI được áp dụng.
- UninstallString: Dòng lệnh được sử dụng để xóa ứng dụng.
- Language: Mã định danh ngôn ngữ số do nhà phát triển đặt (LCID).
- Publisher: Tên của nhà xuất bản hoặc nhà cung cấp phần mềm.
- ManifestPath: Đường dẫn tệp đến manifest cài đặt được sử dụng bởi các ứng dụng UWP hoặc AppX/MSIX.
Hình 7. Khóa con InventoryApplication
Khi ProgramId xuất hiện và cả bên dưới InventoryApplicationFile, điều đó xác nhận rằng tệp thực thi không chỉ hiện diện mà đã được cài đặt chính thức. Sự khác biệt này giúp chúng ta phân biệt các bản sao hoặc các bản thực thi tạm thời với phần mềm đã cài đặt.
Hình 8. Minh họa ProgramId của phần mềm WinRAR bên dưới InventoryApplicationFile
Khi tìm kiếm ProgramId, các nhà nghiên cứu tìm thấy kết quả trùng khớp chính xác bên dưới InventoryApplication. Điều này xác nhận rằng WinRAR thực sự đã được cài đặt trên hệ thống.
Một chi tiết thú vị khác, InventoryApplication chứa một khóa con có tên LastScanTime. Đây là một tác vụ được lên lịch để khởi chạy tệp nhị phân compattelrunner.exe và thông tin trong khóa này chỉ được cập nhật khi tác vụ đó được thực thi. Do đó, phần mềm được cài đặt kể từ lần chạy gần nhất của Appraiser có thể không xuất hiện tại đây. Giá trị LastScanTime được lưu trữ ở định dạng Windows FileTime.
Hình 9. Thông tin InventoryApplication LastScanTime
Giả sử trong quá trình ứng phó sự cố, bạn tìm thấy AnyDesk trong khóa InventoryApplication (mặc dù ứng dụng không còn được cài đặt nữa). Điều này có nghĩa là kẻ tấn công có thể đã sử dụng khóa này để truy cập từ xa và sau đó xóa nó để che giấu dấu vết. Ngay cả khi bị xóa khỏi ổ đĩa, khóa này vẫn chứng minh rằng nó đã tồn tại. Các nhà nghiên cứu đã phát hiện tình huống này trong các trường hợp thực tế nhiều hơn một lần.
InventoryDriverBinary
Khóa InventoryDriverBinary ghi lại mọi driver chế độ kernel mà hệ thống đã tải, cung cấp metadata cần thiết để phát hiện các driver đáng ngờ hoặc độc hại. Trong khóa này, mỗi driver được lưu trong một khóa con có tên duy nhất và bao gồm:
- FileID: Băm SHA-1 của nhị phân driver, với bốn số 0 được thêm vào đầu mã băm.
- LowerCaseLongPath: Đường dẫn tệp chữ thường đầy đủ đến driver trên đĩa.
- DigitalSignature: Chi tiết chứng chỉ ký số. Chữ ký hợp lệ, đáng tin cậy giúp xác nhận tính xác thực của driver.
- LastModified: Timestamp sửa đổi cuối cùng của tệp từ metadata của hệ thống tệp, cho biết thời điểm nhị phân driver được thay đổi gần đây nhất trên đĩa.
Do driver Windows chạy ở mức đặc quyền cao nhất, chúng thường bị phần mềm độc hại khai thác. Ví dụ, một nghiên cứu trước đây do Kaspersky thực hiện cho thấy kẻ tấn công đang khai thác các driver dễ bị tấn công để vô hiệu hóa các quy trình EDR. Khi xử lý sự cố an ninh mạng, các nhà điều tra sẽ đối chiếu hàm băm mật mã, đường dẫn tệp, trạng thái chữ ký và timestamp sửa đổi của từng driver. Điều này có thể giúp xác minh xem tệp nhị phân có khớp với phiên bản ký số đã biết hay không, phát hiện bất kỳ hành vi giả mạo nào bằng cách phát hiện ngày sửa đổi bất ngờ và đánh dấu các driver chưa được ký hoặc có tên bất thường để phân tích sâu hơn.
Hình 10. Kiểm tra InventoryDriverBinary
Ngoài InventoryDriverBinary, AmCache còn cung cấp khóa InventoryApplicationDriver, giúp theo dõi tất cả driver đã được cài đặt bởi các ứng dụng cụ thể. Khóa này bao gồm hai mục:
- DriverServiceName: Xác định tên của dịch vụ được liên kết với driver đã cài đặt.
- ProgramIds: Liệt kê các mã định danh chương trình (tương ứng với các tên khóa bên dưới InventoryApplication) chịu trách nhiệm cài đặt driver.
Trong Hình 11, khóa ProgramIds có thể được sử dụng để theo dõi chương trình liên quan sử dụng driver này.
Hình 11. Kiểm tra thông tin chương trình theo ProgramIds
Nếu hệ thống bị xâm nhập do lạm dụng driver dễ bị tấn công, bạn có thể sử dụng khóa registry InventoryDriverBinary để xác nhận sự hiện diện của nó. Ngay cả khi driver đã bị xóa hoặc ẩn, những dấu vết còn sót lại trong khóa này vẫn có thể tiết lộ rằng nó đã từng được tải, giúp xác định các xâm nhập ở cấp độ kernel và hỗ trợ tái tạo dòng thời gian trong quá trình điều tra.
InventoryApplicationShortcut
Khóa này chứa các mục nhập cho các tệp .lnk (shortcut) có trong các thư mục như Start Menu hoặc Desktop. Trong mỗi phím shortcut, ShortcutPath cung cấp đường dẫn tuyệt đối đến tệp LNK tại thời điểm phát hiện. Đường dẫn ShortcutTargetPath hiển thị vị trí shortcut trỏ đến. Chúng ta cũng có thể tìm kiếm ProgramId trong khóa InventoryApplication, bằng cách sử dụng ShortcutProgramId (tương tự như những gì chúng ta đã làm với driver).
Hình 12. Khóa InventoryApplicationShortcut
Bạn phát hiện một chương trình đáng ngờ đã bị xóa khỏi máy tính, nhưng người dùng khẳng định họ chưa bao giờ chạy nó. InventoryApplicationShortcut cho thấy một lối tắt đến chương trình đó đã có trên màn hình nền của họ và được truy cập gần đây. Với bằng chứng bổ sung, chẳng hạn như từ phân tích Prefetch, bạn có thể xác nhận việc thực thi phần mềm.
AmCache-EvilHunter
Amcache.hve là một bằng chứng điều tra số rất quan trọng. Tuy nhiên, các nhà nghiên cứu không tìm thấy công cụ nào có thể phân tích hiệu quả nội dung của nó, đồng thời cung cấp thông tin tình báo về mối đe dọa cho nhà phân tích. Vì vậy, Kaspersky đã phát triển AmCache-EvilHunter, một công cụ dòng lệnh để phân tích registry Amcache.hve, xác định bằng chứng thực thi, các tệp thực thi đáng ngờ và tích hợp các tra cứu Kaspersky OpenTIP và VirusTotal để nâng cao thông tin tình báo về mối đe dọa.
AmCache-EvilHunter có khả năng xử lý tệp Amcache.hve và lọc bản ghi theo phạm vi ngày (với các tùy chọn --start và --end). Bạn cũng có thể tìm kiếm bản ghi bằng từ khóa ( --search), điều này rất hữu ích khi tìm kiếm các quy ước đặt tên đã biết mà kẻ tấn công áp dụng. Kết quả có thể được lưu ở định dạng CSV ( --csv) hoặc JSON ( --json).
Hình ảnh bên dưới hiển thị ví dụ về việc thực thi AmCache-EvilHunter với các tùy chọn cơ bản này bằng cách sử dụng lệnh sau: “amcache-evilhunter -i Amcache.hve --start 2025-06-19 --end 2025-06-19 --csv output.csv”. Đầu ra chứa tất cả các ứng dụng có trên máy vào ngày 19/6/2025. Cột cuối cùng chứa thông tin cho biết tệp có phải là thành phần của hệ điều hành hay không.
Hình 13. Cách sử dụng cơ bản của AmCache-EvilHunter
Hình 14. Kết quả CSV
KẾT LUẬN
Amcache.hve là nền tảng của công nghệ điều tra số trên Windows, thu thập metadata phong phú, chẳng hạn như đường dẫn đầy đủ, hàm băm SHA-1, timestamp biên dịch, chi tiết nhà xuất bản và phiên bản, cho mọi tệp thực thi xuất hiện trên hệ thống. Mặc dù không đóng vai trò là log thực thi chính thức, nhưng điểm mạnh của nó nằm ở việc ghi lại sự hiện diện và đường dẫn của tệp, khiến AmCache trở nên vô cùng hữu ích trong việc phát hiện các tệp nhị phân bất thường, xác minh độ tin cậy thông qua tra cứu hàm băm so với nguồn cấp dữ liệu tình báo mối đe dọa và đối chiếu các giá trị LinkDate với các chiến dịch tấn công đã biết.
Để khai thác hết tiềm năng điều tra của nó, các nhà phân tích nên kết hợp dữ liệu AmCache với các tính năng khác (ví dụ log sự kiện Prefetch hay ShimCache) để xác nhận việc thực thi thực tế và xây dựng các mốc thời gian chính xác. Việc so sánh InventoryApplicationFile với InventoryApplication sẽ cho thấy liệu một tệp chỉ bị xóa hay được cài đặt chính thức, cùng với việc xác định các bản ghi driver bất ngờ có thể phát hiện các rootkit ẩn và cơ chế tồn tại dai dẳng. Khả năng tận dụng các trình phân tích cú pháp như AmCache-EvilHunter và tham chiếu chéo với VirusTotal hoặc cơ sở dữ liệu mối đe dọa độc quyền, cho phép tạo IOC và ứng phó sự cố mạnh mẽ, biến phân tích AmCache thành một kỹ năng điều tra số cần thiết khá cùng quan trọng cho các chuyên gia bảo mật.