Detektor typu MIME

Dalej

Rozszerzenia plików kłamią – każdy może zmienić nazwę pliku malware.exe na photo.jpg. Niezawodnym sposobem ustalenia, czym plik jest naprawdę, jest odczytanie jego pierwszych kilku bajtów, w których większość formatów umieszcza podpis (tzw. „magiczną liczbę“) identyfikujący format niezależnie od jego nazwy. Ten detektor odczytuje podpis każdego przesłanego pliku i zwraca kanoniczny typ MIME oraz najpowszechniejsze przypisanie rozszerzenia, umożliwiając weryfikację, czy przesłany plik odpowiada temu, co twierdzi klient.

Jak funkcjonuje wykrywanie MIME

  1. 1

    Upuść plik

    Dowolnej wielkości; czytane są wyłącznie pierwsze 4–16 KB.

  2. 2

    Odczytaj magiczne bajty

    Większość formatów rozpoczyna się od znanego podpisu.

  3. 3

    Porównanie z bazą danych podpisów

    Detektor stosuje te same zasady co `file(1)` / libmagic.

  4. 4

    Zwróć MIME oraz rozszerzenie

    Pokazuje typ multimediów według RFC 6838, kanoniczne rozszerzenie oraz czytelną etykietę.

Przykładowe podpisy

Format Pierwsze bajty (w postaci szesnastkowej) 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 (lub konkretne)
gzip 1F 8B 08 application/gzip
MP4 (ISO BMFF) 00 00 00 XX 66 74 79 70 video/mp4
MP3 49 44 33 lub FF FB audio/mpeg
FLAC 66 4C 61 43 audio/flac
WAV 52 49 46 46 ... 57 41 56 45 audio/wav
ELF (binarny plik Linuxa) 7F 45 4C 46 application/x-executable
Windows PE (exe) 4D 5A application/x-msdownload

Dlaczego rozszerzenia nie wystarczają

– Bezpieczeństwo: Przesłany plik resume.pdf, który w rzeczywistości jest plikiem .exe, omija proste filtry rozszerzeń. Rozwiązaniem jest wykrywanie formatu MIME po stronie serwera. – Niezgodność typu treści. Przeglądarka może wysłać niewłaściwy format MIME podczas przesyłania; odczytanie magicznych bajtów pokazuje, jakie są rzeczywiste dane. – Odtworzone kopie zapasowe. Rozszerzenia mogą czasem zostać utracone lub usunięte; analiza treści umożliwia identyfikację każdego pliku.

Rodzina oparta na formacie ZIP

Wiele współczesnych formatów w istocie stanowi archiwa ZIP – zaczynają się od sygnatury PK\x03\x04, tak jak każde archiwum ZIP:

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

  • OpenDocument: .odt, .ods, .odp. – EPUB: .epub. – Pakiet APK dla Androida: .apk. – Java JAR: .jar.

Aby je odróżnić, detektor sprawdza zawartość pliku ZIP w poszukiwaniu pliku manifestu ([Content_Types].xml dla OOXML, mimetype dla ODF/EPUB).

Przydatne kombinacje

  • Pierwsze 512 bajtów obejmują większość podpisów formatowych.
  • Pierwsze 4 KB obejmują formaty oparte na ZIP, w których plik manifest znajduje się w większym miejscu w strukturze pliku.
  • Pierwsze 16 KB obejmuje przypadki skrajne, takie jak niektóre kontenery multimedialne.

Nie jest doskonałe

  • Pliki tekstowe typu „plain text“ nie zawierają bajtów magicznych. Detektor przywraca się do metody heurystycznej (czy jest to poprawny format UTF-8? Czy przypomina JSON lub XML?).
  • Zaszyfrowane lub zasłonięte pliki mogą wyglądać jak przypadkowe bajty bez rozpoznawalnego podpisu. – Niejednoznaczność formatu: zarówno audio/wav, jak i video/avi zaczynają się od RIFF; detektor sprawdza drugi identyfikator (WAVE w porównaniu z AVI po czterech bajtach).

Najczęściej zadawane pytania

Nie. Proces wykrywania odbywa się w Twojej przeglądarce – czytane są tylko pierwsze kilka KB danych, które są porównywane z bazą podpisów po stronie klienta. Nic nie opuszcza Twojego urządzenia.

Ponieważ OOXML, ODF, EPUB i JAR wszystkie rozpoczynają się od podpisu ZIP, detektor sprawdza zawartość pliku w celu wykrycia manifestu specyficznego dla danego formatu i zwraca odpowiedni kod MIME (application/vnd.openxmlformats-...).

Wykrywa naiwne zmiany nazw – plik .exe, zmieniony na .jpg, zostanie rozpoznany jako wykonywalny dzięki swoim magicznym bajtom. Doświadczeni atakujący osadzają ładunki wewnątrz prawdziwych plików multimedialnych lub używają plików poliglotowych odpowiadających kilku podpisom; takie metody omijają proste mechanizmy wykrywania.

Tekst prosty nie zawiera bajtów magicznych. Detektor wykorzystuje kryteria heurystyczne: czy jest to ważny format UTF-8? ważny format JSON? deklaracja XML? struktura CSV? W przeciwnym przypadku przyjmuje standardowy kod text/plain.

Baza danych podpisów jest podobna (wywodzi się z zasad biblioteki libmagic w systemie Unix). Wyniki powinny być identyczne dla powszechnych formatów; dla nietypowych lub dostosowanych formatów mogą wystąpić różnice.

Powiązane narzędzia

Narzędzie jest dostępne w innych językach