Bộ phát hiện loại MIME

Tiếp theo

Các phần mở rộng tệp tin thường không chính xác – bất kỳ ai cũng có thể đổi tên tệp malware.exe thành photo.jpg. Cách đáng tin cậy nhất để xác định thực chất của một tệp là đọc vài byte đầu tiên; hầu hết các định dạng đều đặt một dấu ấn (gọi là “số ma thuật”) để nhận diện định dạng đó, bất kể tên gọi của tệp. Bộ phát hiện này sẽ đọc dấu ấn trong mọi tệp được gửi và trả về loại MIME chuẩn cùng với phần mở rộng phổ biến nhất tương ứng, giúp bạn kiểm chứng xem tệp đã tải lên có đúng như thông tin mà máy khách cung cấp hay không.

Cách thức phát hiện MIME hoạt động như thế nào

  1. 1

    Thả tệp vào

    Bất kỳ kích thước nào cũng được hỗ trợ; chỉ phần đầu tiên từ 4 đến 16 KB mới được đọc.

  2. 2

    Đọc các byte đặc trưng

    Hầu hết các định dạng đều bắt đầu bằng một chữ ký đã biết.

  3. 3

    So sánh với cơ sở dữ liệu đặc trưng

    Bộ dò sử dụng cùng các quy tắc như `file(1)` / libmagic.

  4. 4

    Trả về loại MIME cùng phần mở rộng

    Hiển thị loại phương tiện theo RFC 6838, phần mở rộng chuẩn và nhãn do con người đặt ra.

Các ví dụ về chữ ký

Định dạng Các byte đầu tiên (dưới dạng hex) MIME
JPEG FF D8 FF image/jpeg
PNG 89 50 4E 47 0D 0A 1A 0A image/png
GIF87a 47 49 46 38 37 61 image/gif
GIF89a 47 49 46 38 39 61 image/gif
WebP 52 49 46 46 ... 57 45 42 50 image/webp
PDF 25 50 44 46 (%PDF) application/pdf
ZIP / JAR / ODT / DOCX 50 4B 03 04 application/zip (hoặc cụ thể)
gzip 1F 8B 08 application/gzip
MP4 (ISO BMFF) 00 00 00 XX 66 74 79 70 video/mp4
MP3 49 44 33 hoặc FF FB audio/mpeg
FLAC 66 4C 61 43 audio/flac
WAV 52 49 46 46 ... 57 41 56 45 audio/wav
ELF (tập tin nhị phân Linux) 7F 45 4C 46 application/x-executable
Windows PE (exe) 4D 5A application/x-msdownload

Tại sao các tiện ích mở rộng không đủ

An ninh: Một tệp resume.pdf được tải lên – thực chất là .exe – có thể vượt qua các bộ lọc mở rộng đơn giản. Giải pháp là sử dụng chức năng phát hiện định dạng MIME ở phía máy chủ. – Không phù hợp về loại nội dung (Content-Type). Trình duyệt có thể gửi định dạng MIME không đúng khi tải lên; việc đọc các byte đặc biệt sẽ giúp xác định thực chất dữ liệu đó là gì. – Các bản sao lưu đã khôi phục: Các tiện ích mở rộng đôi khi bị mất hoặc bị loại bỏ; chức năng phân tích nội dung giúp bạn xác định được từng tệp cụ thể là gì.

Gia đình dựa trên ZIP

Hầu hết các định dạng hiện đại thực chất đều là các tệp lưu trữ ZIP; chúng bắt đầu bằng tên PK\x03\x04 giống như mọi tệp ZIP khác.

Office Open XML: .docx, .xlsx, .pptx.

  • OpenDocument: .odt, .ods, .odp.
  • Định dạng EPUB: .epub. – Tập tin APK cho Android: .apk. – Tệp JAR của Java: .jar.

Để phân biệt chúng, thiết bị dò tìm sẽ kiểm tra bên trong tập tin ZIP để tìm tệp manifest ([Content_Types].xml cho định dạng OOXML, mimetype cho định dạng ODF/EPUB).

Các tổ hợp hữu ích

  • 512 byte đầu tiên bao gồm hầu hết các dấu hiệu định dạng.
  • 4 KB đầu tiên bao gồm các định dạng dựa trên ZIP, trong đó tệp manifest nằm ở phần sau của tập tin.
  • 16 KB đầu tiên bao gồm các trường hợp đặc biệt như một số container đa phương tiện.

Không hoàn hảo

  • Các tệp văn bản thông thường không chứa các byte đặc biệt nào; bộ phát hiện sẽ sử dụng các phương pháp suy luận trực giác (ví dụ: liệu tệp có thuộc định dạng UTF-8 hợp lệ hay không, hoặc có dạng giống JSON hay XML hay không).
  • Các tệp được mã hóa hoặc làm mờ có thể trông giống như những byte ngẫu nhiên không mang dấu ấn nhận diện rõ ràng. – Sự mơ hồ về định dạng: Cả audio/wavvideo/avi đều bắt đầu bằng RIFF; bộ phát hiện sẽ kiểm tra mã nhận dạng thứ cấp (WAVE so với AVI xuất hiện sau bốn byte).

Câu hỏi thường gặp

Không. Quá trình phát hiện được thực hiện trực tiếp trong trình duyệt của bạn – chỉ một vài KB đầu tiên được đọc và so sánh với cơ sở dữ liệu chữ ký phía máy khách; không có bất kỳ dữ liệu nào rời khỏi thiết bị của bạn.

Vì OOXML, ODF, EPUB và JAR đều bắt đầu bằng chữ ký ZIP, bộ phát hiện sẽ kiểm tra nội dung để tìm tệp manifest đặc thù cho từng định dạng và trả về định danh MIME cụ thể hơn (application/vnd.openxmlformats-...).

Phương pháp này phát hiện các trường hợp đổi tên đơn giản: ví dụ, một tệp .exe được đổi thành .jpg sẽ vẫn được hiển thị là tệp thực thi dựa trên các byte đặc trưng của nó. Các kẻ tấn công tinh vi thường chèn nội dung độc hại vào các tệp phương tiện thực tế hoặc sử dụng các tệp đa ngôn ngữ phù hợp với nhiều dấu ấn khác nhau; những thủ đoạn này có thể vượt qua các hệ thống phát hiện đơn giản.

Văn bản bình thường không chứa các byte đặc biệt nào. Bộ phát hiện sử dụng các phương pháp xác định dựa trên kinh nghiệm: là UTF-8 hợp lệ? JSON hợp lệ? Tuyên bố XML? Cấu trúc CSV? Nếu không phải trường hợp trên thì sẽ chuyển sang sử dụng mã text/plain.

Cơ sở dữ liệu ký hiệu có cấu trúc tương tự nhau (được xây dựng dựa trên các quy tắc của thư viện libmagic trong Unix). Kết quả sẽ giống nhau đối với các định dạng phổ biến; tuy nhiên, đối với các định dạng phức tạp hoặc tùy chỉnh thì kết quả có thể khác biệt.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác