Khắc tệp (File Carving)
1. Tổng quan
A. Định nghĩa
Khắc tệp (File Carving) là kỹ thuật thu thập chứng cứ của điều tra số (digital forensics), khôi phục tệp từ dữ liệu thô (raw data) của phương tiện lưu trữ dựa trên các đặc trưng riêng của tệp (chữ ký·cấu trúc bên trong) mà không phụ thuộc vào siêu dữ liệu của hệ thống tệp (thông tin vị trí·kích thước·tên tệp).
Lý do file carving trở thành vũ khí mạnh trong điều tra số nằm ở chỗ 'dù hệ thống tệp bị xóa, vẫn làm sống lại tệp từ các mảnh dữ liệu'. Để hiểu điều này, trước hết cần xem hệ điều hành quản lý tệp như thế nào. Khi ta mở một tệp, thực chất siêu dữ liệu do hệ thống tệp duy trì (MFT của NTFS, inode của ext4 v.v.) cho biết “tệp này được lưu từ khối số bao nhiêu trên đĩa, trải dài bao nhiêu byte”. Hệ thống tệp đi theo 'chỉ mục' là siêu dữ liệu này để gom các khối dữ liệu rải rác, lắp ráp và hiển thị thành một tệp.
Nhưng chính ở đây ẩn chứa manh mối quyết định của điều tra số. Khi xóa tệp hoặc định dạng nhanh (quick format) phương tiện, vì lý do hiệu năng, hệ thống thường chỉ xóa siêu dữ liệu (chỉ mục) hoặc đổi thành dấu 'có thể sử dụng', còn giữ nguyên các khối dữ liệu thực tế. Từ góc nhìn của hệ thống tệp đó là 'tệp không tồn tại', nhưng bản thân dữ liệu vật lý vẫn còn nguyên trên đĩa cho đến khi dữ liệu mới ghi đè lên vị trí đó. File carving khai thác chính khe hở (gap) này. Chỉ mục đã mất nên không thể đi theo chỉ mục, nhưng lấy trực tiếp dấu bắt đầu (header) và dấu kết thúc (footer) mà mỗi tệp có riêng, cùng cấu trúc bên trong làm manh mối để tìm và cắt (carve) tệp ra khỏi luồng byte thô.
Ví dụ kinh điển nhất là ảnh JPEG. Mọi tệp JPEG bắt đầu bằng chuỗi FF D8 FF (SOI, Start Of Image) và kết thúc bằng FF D9 (EOI, End Of Image). Do đó khi quét toàn bộ đĩa theo từng byte, gặp FF D8 FF thì coi đó là điểm bắt đầu tệp, và cắt đến FF D9 xuất hiện đầu tiên sau đó thành một tệp thì có thể khôi phục ảnh đã xóa. Như vậy file carving trở thành phương tiện cốt lõi tìm chứng cứ từ phương tiện bị xóa·hỏng·định dạng, và đóng vai trò quyết định trong việc làm sống lại ảnh·tài liệu·video mà nghi phạm đã xóa tại hiện trường vụ án. [[digital-forensics]]
B. Bối cảnh xuất hiện và đặc trưng
Có hai thực tế đằng sau việc file carving phát triển thành một kỹ thuật độc lập. Thứ nhất, sự phổ biến của chống điều tra số (anti-forensic). Kẻ cố tiêu hủy chứng cứ tìm cách xóa dấu vết bằng cách xóa tệp hoặc định dạng đĩa, và khi đó các công cụ khôi phục thông thường dựa trên hệ thống tệp (undelete) trở nên vô dụng nếu siêu dữ liệu cũng bị hỏng theo. Chỉ carving không phụ thuộc hệ thống tệp mới vượt qua được tình huống này. Thứ hai, giá trị chứng cứ của dữ liệu còn sót lại trong vùng chưa cấp phát (unallocated space) và không gian slack (slack space). Trên đĩa tồn tại vùng rộng lớn hiện chưa được cấp cho tệp nào, và do đặc tính cấp phát theo cluster, còn có phần không gian thừa giữa cuối tệp và ranh giới cluster; ở đây thường còn sót các mảnh của tệp cũ.
Đặc trưng của file carving được tóm tắt thành ba điểm. Độc lập với hệ thống tệp — hoạt động bất kể loại hệ thống tệp như FAT·NTFS·ext4, thậm chí cả khi bản thân hệ thống tệp bị hỏng. Dựa trên dữ liệu thô — căn cứ vào mẫu byte vật lý chứ không phải cấu trúc logic. Và dễ tổn thương trước phân mảnh (fragmentation) — nếu tệp không được lưu liên tục trên đĩa mà rải thành nhiều mảnh, dữ liệu của tệp khác chen vào giữa header và footer khiến khôi phục chính xác trở nên khó. Vấn đề phân mảnh này là bài toán khó nhất của file carving, và là lý do nhiều kỹ thuật nâng cao ra đời.
2. Các loại file carving (4 kỹ thuật)
File carving được chia thành bốn kỹ thuật chính tùy theo lấy gì làm manh mối. Dưới đây là cấu trúc phân loại tổng thể.
flowchart TB
FC["File carving"] --> H["Dựa trên header/footer<br/>(signature-based)"]
FC --> S["Dựa trên cấu trúc tệp<br/>(structure-based)"]
FC --> C["Dựa trên nội dung<br/>(content-based)"]
FC --> F["Dựa trên ghép mảnh<br/>(fragment recovery)"]
H --> H1["Nhận diện ranh giới bằng magic number"]
S --> S1["Kiểm chứng định dạng bên trong"]
C --> C1["Phân tích entropy·thống kê"]
F --> F1["Lắp ráp lại các mảnh rải rác"]
style FC fill:#e8f0fe,stroke:#2f6fed,stroke-width:2px
A. Kỹ thuật dựa trên header/footer (Signature-based)
Đây là cách cơ bản và được dùng rộng rãi nhất. Kỹ thuật này có cơ sở dữ liệu các chữ ký (magic number) riêng được định sẵn cho từng loại tệp, quét phương tiện lưu trữ từ đầu đến cuối và cắt vùng nằm giữa mẫu header và mẫu footer. Tiêu biểu là FF D8 FFFF D9 của JPEG đã thấy ở trên, 89 50 4E 47 (‰PNG) của PNG, 25 50 44 46 (%PDF)%%EOF của PDF, 50 4B 03 04 (PK) của ZIP.
Ưu điểm của cách này là đơn giản, nhanh, và chỉ cần biết chữ ký là có thể thử với bất kỳ tệp nào. Tuy nhiên có hai hạn chế căn bản. Thứ nhất, với định dạng tệp không có footer (ví dụ: một số tệp văn bản·thực thi) khó phán đoán cắt đến đâu, nếu dùng cách cắt đến kích thước tối đa định sẵn thì dữ liệu không cần thiết bị dính vào phía sau. Thứ hai và nghiêm trọng hơn, nếu tệp không được lưu liên tục mà bị phân mảnh thì dữ liệu không liên quan chen vào giữa header và footer làm tệp khôi phục bị hỏng. Vì vậy cách dựa trên header/footer chỉ đáng tin cậy với tệp không phân mảnh (contiguous).
B. Kỹ thuật dựa trên cấu trúc tệp (Structure-based)
Để bổ khuyết hạn chế của header/footer, đây là kỹ thuật chủ động khai thác thông tin định dạng và cấu trúc bên trong tệp. Nhiều định dạng tệp chứa trong header các thông tin meta như kích thước tệp, offset của các phần bên trong, cấu trúc chunk. Ví dụ PNG gồm nhiều chunk và mỗi chunk có trường độ dài và checksum CRC. Carving dựa trên cấu trúc đọc thông tin này để tính kích thước thực của tệp, kiểm chứng tính hợp lệ của chunk và xác nhận checksum có khớp không, qua đó nâng mạnh độ chính xác của khôi phục.
Giá trị cốt lõi của kỹ thuật này nằm ở kiểm chứng (validation). Không chỉ dừng ở việc cắt byte mà còn đối chiếu với đặc tả định dạng để xác nhận “kết quả cắt ra có thực sự là tệp hợp lệ không”, nên giảm được dương tính giả (false positive) và có thể xử lý phần nào tệp bị phân mảnh. Tuy nhiên phải hiện thực parser cấu trúc riêng cho từng định dạng tệp nên gánh nặng phát triển lớn, và có ràng buộc là không áp dụng được cho tệp có định dạng chưa biết.
C. Kỹ thuật dựa trên nội dung (Content-based)
Khi không có hoặc bị hỏng chữ ký hay cấu trúc tường minh, đây là kỹ thuật phân tích chính đặc tính nội dung của dữ liệu. Tiêu biểu là phân tích entropy. Dữ liệu mã hóa·nén có entropy cao (gần ngẫu nhiên), văn bản thông thường có entropy thấp, và dữ liệu thuộc định dạng cụ thể thể hiện phân phối thống kê riêng. Dựa trên các thống kê·mẫu ký tự·phân phối byte như vậy để ước đoán loại vùng dữ liệu và xác định ranh giới.
Kỹ thuật dựa trên nội dung có điểm mạnh là có thể ước lượng loại dữ liệu đại khái ngay cả khi chữ ký bị hủy hoại, nhưng độ chính xác tương đối thấp và dựa vào ước đoán nên thường được dùng song song như hỗ trợ cho kỹ thuật khác. Gần đây, các nghiên cứu dùng học máy để phân loại loại tệp của mảnh (fragment) đang được tiến hành sôi nổi trong phạm trù này.
D. Kỹ thuật dựa trên ghép mảnh (phân mảnh) (Fragment Recovery Carving)
Đây là kỹ thuật tiên tiến nhất, xử lý trực diện phân mảnh — bài toán khó nhất của file carving. Khi một tệp được lưu rải rác ở nhiều vùng không liên tục trên đĩa, sau khi tìm điểm bắt đầu bằng header phải lắp ráp lại (reassembly) các mảnh rải rác theo đúng thứ tự. Khi đó, để phán đoán mảnh nào thuộc tệp nào và nối theo thứ tự nào, người ta đánh giá tổng hợp kiểm chứng cấu trúc·độ tương đồng nội dung·tính liên tục giữa các mảnh (ví dụ: tính liên tục điểm ảnh của hình).
Bài toán này mang tính bùng nổ tổ hợp (combinatorial explosion) nên chi phí tính toán lớn. Các kỹ thuật xử lý hiệu quả trường hợp phổ biến tệp bị chia làm hai mảnh như 'bifragment gap carving' do Garfinkel đề xuất, hoặc cách dùng bộ giải mã (decoder) của định dạng tệp để kiểm chứng tính hợp lệ của các ứng viên lắp ráp, đang được nghiên cứu·áp dụng. Trong thực tế, vì khó lắp ráp tự động hoàn hảo nên thường được dùng kết hợp với rà soát thủ công của nhà phân tích.
| Kỹ thuật | Manh mối | Điểm mạnh | Hạn chế |
|---|---|---|---|
| Dựa trên header/footer | Magic number (chữ ký) | Đơn giản·nhanh, phổ dụng | Yếu trước phân mảnh·tệp không có footer |
| Dựa trên cấu trúc tệp | Định dạng bên trong·kích thước·checksum | Kiểm chứng giúp chính xác↑, dương tính giả↓ | Cần parser cho từng định dạng |
| Dựa trên nội dung | Entropy·thống kê·mẫu | Ước đoán được cả khi chữ ký bị hủy | Độ chính xác thấp, mang tính hỗ trợ |
| Dựa trên ghép mảnh | Tính liên tục·độ tương đồng giữa các mảnh | Khôi phục tệp phân mảnh | Chi phí tính toán lớn, khó tự động hoàn toàn |
3. Quy trình thực hiện file carving
Công việc carving thực tế không đơn thuần là chạy công cụ mà là quy trình tiến hành từng bước trong khi giữ vững tính toàn vẹn của chứng cứ. Dưới đây là luồng chuẩn từ thu giữ phương tiện đến kiểm chứng chứng cứ.
flowchart TB
A["Thu giữ phương tiện<br/>(quản lý nguồn điện·chống ghi)"] --> B["Tạo ảnh theo từng bit<br/>(forensic image)"]
B --> C["Kiểm chứng hash<br/>bản gốc-bản sao (SHA-256)"]
C --> D["Quét chữ ký<br/>(phát hiện header/footer)"]
D --> E{"Có phân<br/>mảnh không?"}
E -->|Lưu liên tục| F["Trích xuất·cắt đơn giản"]
E -->|Phân mảnh| G["Kiểm chứng cấu trúc·lắp ráp mảnh"]
F --> H["Kiểm chứng tệp khôi phục<br/>(hợp lệ định dạng·loại dương tính giả)"]
G --> H
H --> I["Lập hồ sơ chứng cứ<br/>(chain of custody)"]
style C fill:#e8f0fe,stroke:#2f6fed,stroke-width:2px
style H fill:#e8f0fe,stroke:#2f6fed,stroke-width:2px
Trong quy trình này có hai bước đặc biệt được nhấn mạnh. Thứ nhất là kiểm chứng hash (C màu xanh ở trên): trước khi carving, xác nhận giá trị hash của bản gốc và bản sao khớp nhau, qua đó bảo đảm mọi phân tích sau đó đều thực hiện trên dữ liệu đồng nhất với bản gốc. Thứ hai là kiểm chứng tệp khôi phục (H): đối chiếu với đặc tả định dạng để xác nhận kết quả cắt ra có thực sự là tệp hợp lệ mở được không, và lọc bỏ dương tính giả do chữ ký trùng hợp ngẫu nhiên. Chỉ khi vượt qua hai cửa ải này thì kết quả khôi phục mới có độ tin cậy như chứng cứ.
4. Ứng dụng, công cụ, hạn chế
File carving được dùng trong nhiều khía cạnh của điều tra số. Thứ nhất, khôi phục tệp mà nghi phạm cố ý xóa. Nhiều trường hợp được báo cáo trong đó ảnh·tài liệu bị xóa được carving làm sống lại và trở thành chứng cứ quyết định trong các vụ án bóc lột tình dục trẻ em hay rò rỉ bí mật doanh nghiệp. Thứ hai, thu thập chứng cứ còn sót trong vùng chưa cấp phát·không gian slack. Thứ ba, khôi phục dữ liệu từ phương tiện có hệ thống tệp bị hỏng (hư hỏng vật lý, ransomware v.v.).
Các công cụ mã nguồn mở tiêu biểu gồm Foremost (do Văn phòng Điều tra Đặc biệt Không quân Mỹ phát triển), Scalpel (công cụ phái sinh cải thiện hiệu năng của Foremost), và PhotoRec chuyên khôi phục ảnh đã xóa. Chúng định nghĩa chữ ký trong tệp cấu hình để carving nhiều định dạng tệp, và các công cụ điều tra số tích hợp thương mại (EnCase, FTK, X-Ways) cũng tích hợp chức năng carving.
Hạn chế cũng rõ ràng. Khi dữ liệu đã bị ghi đè (overwrite) thì về vật lý không thể khôi phục (lệnh TRIM của SSD xóa vật lý dữ liệu ngay khi xóa, khiến khôi phục khó khăn), và khi phân mảnh nặng hoặc có mã hóa thì khôi phục bị hạn chế lớn. Ngoài ra có thể xảy ra dương tính giả, nhầm dữ liệu trùng hợp ngẫu nhiên với mẫu chữ ký là tệp, nên bắt buộc phải kiểm chứng kết quả khôi phục.
5. Chuyên sâu — môi trường SSD·TRIM, vấn đề toàn vẹn và xu hướng mới nhất
Kỹ thuật file carving đang đối mặt với thách thức mới theo sự thay đổi của phương tiện lưu trữ. Thời HDD trước đây, dữ liệu bị xóa còn lại lâu cho đến khi bị ghi đè nên tỷ lệ thành công của carving cao. Tuy nhiên sự phổ biến của SSD đã thay đổi cục diện. SSD dùng lệnh TRIM để quản lý hiệu năng và tuổi thọ, lệnh này khi tệp bị xóa sẽ lập tức làm trống vật lý các khối tương ứng ở chế độ nền (garbage collection). Kết quả là chỉ sau thời gian ngắn kể từ khi xóa, dữ liệu biến mất hoàn toàn, nhiều trường hợp không thể khôi phục bằng carving truyền thống. Điều này càng nâng cao tầm quan trọng của quy trình ngắt nguồn ngay khi phát hiện phương tiện và nhanh chóng tạo ảnh trong điều tra số.
Một vấn đề chuyên sâu khác là tính toàn vẹn và chuỗi lưu giữ (chain of custody). Để dữ liệu khôi phục bằng carving được công nhận là chứng cứ tại tòa, phải chứng minh phương tiện gốc được thu giữ không thay đổi. Để làm vậy, dùng thiết bị chống ghi (write blocker) bảo vệ bản gốc, tạo bản sao theo từng bit (forensic image) rồi xác nhận giá trị hash (MD5/SHA-256) của bản gốc và bản sao khớp nhau. Mọi công việc carving được thực hiện trên bản sao đã kiểm chứng này, và ghi lại quá trình khôi phục cùng người phụ trách·thời điểm để bảo đảm độ tin cậy của chứng cứ. Nếu quy trình toàn vẹn không được tuân thủ thì dù khôi phục được tệp quan trọng đến đâu cũng có thể mất năng lực chứng cứ.
Về xu hướng mới nhất, phân loại mảnh dựa trên học máy đang được chú ý. Các nghiên cứu dùng học sâu để xác định loại tệp của mảnh (fragment) không có chữ ký nhằm nâng độ chính xác lắp ráp đang sôi nổi. Ngoài ra, phương tiện đối tượng đang đa dạng hóa như carving trong môi trường đám mây·ảo hóa, carving bộ nhớ flash của điện thoại thông minh·thiết bị IoT; về mặt tiêu chuẩn quốc tế, ISO/IEC 27037 (nhận diện·thu thập·thu giữ·bảo quản chứng cứ) quy định quy trình xử lý chứng cứ số được tham chiếu như tiêu chuẩn độ tin cậy cho các hoạt động điều tra số bao gồm carving.
6. Các điểm cần xem xét và hàm ý
Khi áp dụng file carving vào điều tra·kiểm toán thực tế, từ góc độ Kỹ sư chuyên nghiệp (Professional Engineer) cần xem xét tổng hợp các điểm sau.
Ứng phó phân mảnh là cốt lõi kỹ thuật. Nếu tệp được lưu rải thành nhiều mảnh thì chỉ dựa vào header/footer không thể khôi phục chính xác. Do đó phải song hành các kỹ thuật kiểm chứng cấu trúc tệp·phân tích nội dung·lắp ráp mảnh, và tùy tình huống dùng chéo nhiều công cụ để cùng nâng tỷ lệ thành công và độ chính xác khôi phục.
Bảo đảm tính toàn vẹn và chuỗi lưu giữ là tiền đề của hiệu lực pháp lý. Dù khôi phục tinh xảo đến đâu, không có tính chính đáng về thủ tục thì không dùng làm chứng cứ được. Phải tuân thủ nghiêm ngặt tính toàn vẹn và chain of custody thông qua dùng thiết bị chống ghi, tạo ảnh theo từng bit, kiểm chứng đồng nhất bản gốc-bản sao dựa trên hash và ghi lại lịch sử công việc. [[file-slack]]
Phải ứng phó chủ động với thay đổi đặc tính phương tiện. TRIM của SSD xóa ngay dữ liệu bị xóa, nên tính nhanh chóng ở thời điểm thu giữ phương tiện và quản lý nguồn điện quyết định thành công khôi phục. Phải vượt ra ngoài cách tiếp cận truyền thống lấy HDD làm trung tâm, chuẩn bị chiến lược thu thập·phân tích phù hợp đặc tính riêng của SSD·flash·đám mây.
Cần phân tích phức hợp để chuẩn bị trước chống điều tra số·mã hóa. Đối đầu với các kỹ thuật chống điều tra số như xóa hoàn toàn (wiping)·mã hóa·giấu dữ liệu (steganography), chỉ file carving là có hạn chế. Cần cách tiếp cận đa chiều kết hợp với các kỹ thuật khác như điều tra bộ nhớ·điều tra mạng·phân tích log để bảo đảm năng lực chứng cứ. [[anti-forensic]]
Phải có hệ thống quản lý dương tính giả và kiểm chứng. Dương tính giả do chữ ký trùng hợp ngẫu nhiên là khó tránh, nên phải chuẩn hóa quy trình kiểm chứng kết quả khôi phục bằng đặc tả định dạng·hash·rà soát thủ công để ngăn chấp nhận chứng cứ sai.
Tài liệu tham khảo
- Simson Garfinkel, "Carving contiguous and fragmented files with fast object validation", DFRWS, https://www.dfrws.org/
- ForensicsWiki, "File Carving", https://forensics.wiki/file_carving/
- CGSecurity, "PhotoRec", https://www.cgsecurity.org/wiki/PhotoRec
- ISO/IEC 27037, Guidelines for identification, collection, acquisition and preservation of digital evidence
Tóm tắt một câu: File carving là kỹ thuật điều tra số khôi phục tệp bằng chữ ký·cấu trúc của dữ liệu thô mà không cần siêu dữ liệu hệ thống tệp, gồm 4 kỹ thuật header/footer·cấu trúc tệp·nội dung·ghép mảnh, được dùng để khôi phục phương tiện bị xóa·định dạng, trong đó then chốt là ứng phó phân mảnh·bảo đảm toàn vẹn·ứng phó môi trường SSD TRIM.