Khôi phục File Bị Xóa: Thử Thách Forensics CTF
Giới thiệu
Trong thử thách CTF (Capture The Flag) lần này, chúng ta sẽ khám phá một tình huống thú vị liên quan đến khôi phục dữ liệu từ một USB drive, nơi mà một file đã bị xóa. Mục tiêu cuối cùng là xác định danh tính chủ sở hữu file đó thông qua metadata của nó. Thử thách này không chỉ giúp bạn hiểu sâu hơn về các kỹ thuật forensics mà còn rèn luyện kỹ năng phân tích dữ liệu. Hãy cùng nhau tìm hiểu và thực hiện từng bước để giải quyết thử thách này!
Mục tiêu của thử thách
- Tên thử thách: File đã bị xóa
- Điểm số: 5
- Độ khó: Validasi 11471, tỷ lệ thành công 4%
- Mô tả: Bạn sẽ giúp người em họ của mình tìm ra chủ sở hữu của USB drive mà họ đã tìm thấy tại thư viện.
- Checksum SHA256: cd9f4ada5e2a97ec6def6555476524712760e3d8ee99c26ec2f11682a1194778
- File được cung cấp: ch39.gz
Nội dung giải pháp
Bước 1: Hiểu thử thách
Đây là một thử thách forensics liên quan đến việc phân tích một image của USB drive mà file đã bị xóa. Mục tiêu là khôi phục file đã xóa và xác định chủ sở hữu từ metadata. Định dạng của flag sẽ là firstname_lastname.
Bước 2: Giải nén file
File được cung cấp là ch39.gz, một file nén sử dụng gzip. Chúng ta sẽ giải nén nó để lấy ch39, một archive tar POSIX.
bash
gunzip ch39.gz
tar -xvf ch39
Sau khi thực hiện lệnh trên, chúng ta sẽ có được file usb.image, một image filesystem FAT16 với nhãn DOS/MBR có dung lượng 32 MB.
Bước 3: Phân tích image filesystem
Image này là một filesystem FAT16. Chúng ta cần mount nó để kiểm tra nội dung bên trong.
bash
mkdir -p /tmp/usb_mount
sudo mount -t vfat -o loop usb.image /tmp/usb_mount
ls -la /tmp/usb_mount
Khi thực hiện lệnh này, chúng ta thấy thư mục được mount là trống rỗng, điều này cho thấy rằng file đã bị xóa và không còn hiển thị trên filesystem.
Bước 4: Khôi phục file đã xóa
Để khôi phục file đã xóa, chúng ta cần kiểm tra các mục trong thư mục gốc (root) của image FAT16. Thư mục gốc bắt đầu từ sector 132 (sau 4 sector dự phòng và 128 sector FAT).
Chúng ta sẽ trích xuất thư mục gốc (32 sector, 16384 byte):
bash
dd if=usb.image bs=512 skip=132 count=32 | hexdump -C
Phân tích hexdump cho thấy:
- Nhãn volume là "USB".
- Mục file đã xóa (byte đầu tiên là 0xE5) với tên ngắn là "NONUME.PNG" và tên dài là "anonymous.png".
- Kích thước file: 246.320 byte.
- Cluster đầu tiên: 3 (số thứ tự cluster FAT16).
Bước 5: Trích xuất file đã xóa
Khu vực dữ liệu bắt đầu từ sector 164. Cluster 3 bắt đầu từ sector 168 (164 + (3-2)*4).
Chúng ta sẽ trích xuất dữ liệu file (482 sector để bao gồm 246.320 byte):
bash
dd if=usb.image bs=512 skip=168 count=482 of=anonymous.png
Kiểm tra file đã khôi phục:
bash
file anonymous.png
# Kết quả: PNG image data, 400 x 300, 8-bit/color RGB, non-interlaced
Bước 6: Phân tích file đã khôi phục
File này là một hình ảnh PNG. Chúng ta sẽ trích xuất chuỗi để tìm metadata:
bash
strings anonymous.png | sed -n '/xpacket begin/,/xpacket end/p'
Metadata XMP cho thấy người tạo:
xml
<?xpacket begin='
' id='W5M0MpCehiHzreSzNTczkc9d'?>
<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 11.88'>
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
<rdf:Description rdf:about=''
xmlns:dc='http://purl.org/dc/elements/1.1/'>
<dc:creator>
<rdf:Seq>
<rdf:li>Javier Turcot</rdf:li>
</rdf:Seq>
</dc:creator>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end='r'?>
Người tạo là Javier Turcot, được xác định là chủ sở hữu.
Bước 7: Xác định flag
Danh tính của chủ sở hữu là Javier Turcot. Flag sẽ là javier_turcot (chữ thường với dấu gạch dưới như đã quy định).
Những bài học chính
- Cấu trúc filesystem FAT16: sector boot, bảng FAT, thư mục gốc, khu vực dữ liệu.
- File đã xóa trong FAT: được đánh dấu bằng 0xE5 trong mục thư mục, dữ liệu vẫn còn cho đến khi bị ghi đè.
- Khôi phục dữ liệu forensics: Sử dụng
ddđể trích xuất dữ liệu thô, phân tích các mục thư mục một cách thủ công. - Trích xuất metadata: File PNG có thể chứa metadata XMP với thông tin của người tạo.
- Công cụ sử dụng:
gunzip,tar,mount,dd,hexdump,file,strings.
Kiểm tra
- Tính toàn vẹn của file: Hình ảnh và PNG đã được trích xuất phù hợp với định dạng mong đợi.
- Định dạng flag: Phù hợp với yêu cầu
firstname_lastname.
Flag: javier_turcot
Thực hành tốt nhất
- Luôn kiểm tra tính toàn vẹn của file sau khi khôi phục.
- Sử dụng các công cụ forensics chuyên dụng để phân tích sâu hơn nếu cần.
Những cạm bẫy thường gặp
- Nhầm lẫn giữa các định dạng file có thể dẫn đến việc không tìm ra metadata.
- Không kiểm tra các sector khác có thể dẫn đến mất dữ liệu quan trọng.
Mẹo hiệu suất
- Sử dụng lệnh
ddvới các tùy chọn hợp lý để tối ưu hóa tốc độ trích xuất dữ liệu.
Giải quyết sự cố
- Nếu không thể mount image, hãy kiểm tra định dạng và tính toàn vẹn của file trước.
Câu hỏi thường gặp (FAQ)
- Tôi có thể khôi phục file bị xóa từ các định dạng filesystem khác không?
Có, nhưng quy trình sẽ khác nhau tùy thuộc vào loại filesystem. - Công cụ nào tốt nhất để phân tích file PNG?
ExifToollà một trong những công cụ tốt nhất cho việc này.
Kết luận
Khôi phục file đã xóa là một kỹ năng quan trọng trong lĩnh vực an ninh mạng và forensics. Thông qua thử thách này, bạn đã học được cách sử dụng các công cụ và kỹ thuật để phân tích và khôi phục dữ liệu. Hãy tiếp tục rèn luyện kỹ năng của mình và tham gia vào các thử thách khác để nâng cao hiểu biết của bạn trong lĩnh vực này. Đừng quên chia sẻ bài viết này với những người bạn cùng đam mê công nghệ!