Přeskočit na hlavní obsah

Nahrávání souborů

  • Nahrávání souborů se stává stále důležitější součástí každé aplikace
  • Může jít o nahrávání profilových obrázků, fotografií, životopisů, videí atd.
  • Aplikace by měla být schopna odrazit falešné a škodlivé soubory, aby byli její uživatelé v bezpečí
  1. Povolte pouze bezpečná a kritická extensions daných souborů
  2. Zajistěte, aby byla použita validace vstupu
  3. Ověřte typ souboru, nevěřte content-type hlavičce, protože ji lze podvrhnout
  4. Změňte název souboru na název vygenerovaný aplikací
  5. Nastavte limit pro délku názvu, omezte počet povolených znaků
  6. Omezte velikost souboru
  7. Povolte nahrávání pouze autorizovaným uživatelům
  8. Uložte soubory na jiný server, pokud to není možné, uložte je mimo webroot
    1. Použijte mapování jmen souborů (someIdfile.ext) v případě veřejného přístupu k souborům
  9. Analyzujte soubor antivirovým programem nebo jej spusťte v sandboxu - tím ověříte, že neobsahuje škodlivá data
  10. Zajistěte, aby byly všechny používané knihovny bezpečně nakonfigurovány a aktualizovány
  11. Ochraňte nahrávání souborů před CSRF útoky

Hrozby spojené s nahráváním souborů

Škodlivé soubory

  • Zneužití zranitelnosti v analyzátoru souborů nebo modulu pro zpracování souborů (např. ImageTrick exploit, XXE)
  • Použití souboru pro phishing (kariérní formulář)
  • Posílání obrovských souborů (ZIP, XML souborů - billion laughs attack) tak, aby zaplnily úložiště, což stěžuje dostupnost serveru
  • Přepsání existujícího souboru v systému
  • Využití aktivního obsahu na klientovi (XSS, CSRF) v případě, že jsou soubory veřejně přístupné

Vyhledávání veřejných souborů

  • Zveřejnění jiných souborů
  • Zahájení DoS útoku vyžadováním velkého množství souborů - požadavky jsou malé, ale odpovědi mnohem větší
  • Získání obsahu souborů, které jsou považovány za nezákonné, urážlivé nebo nebezpečné (osobní a citlivé údaje, data chráněná autorskými právy, atd.)

Zabezpečení nahrávání souborů

  1. Zaveďte in-depth způsob obrany, aby byl proces nahrávání obtížnější a splňoval potřeby a požadavky služby
  • Doporučuje se použítí více technik, protože žádná technika samostatně nestačí k zabezpečení služby

Validujte extension

  1. Zajistěte, aby validace proběhla po dekódování názvu souboru a aby byl nastaven správný filtr, který zabrání obcházení
    • double extension - .jpg.png, kde se snadno obejde regex \.jpg
    • null bytes - .php%00.jpg, kde se .jpg zkrátí a novou příponou se stane .php
    • obecně špatného regexu, který není otestován a zkontrolován
      1. Nevytvářejte vlastní logiku, pokud nemáte dostatečné znalosti této problematiky
  • Více informací naleznete v cheat sheetu o validaci vstupu

Seznam povolených extensions

  1. Zajistěte používání kritických extensions
  2. Nepovolujte nepotřebné extensions
  3. Povolte například jeden typ obrázku, který je dohodnutý tak, aby odpovídal požadavkům organizace
    • Nebo nahrávání CV pouze ve formátu docx a pdf
  4. Zajistěte použití nejméně škodlivých a rizikových typů souborů na základě potřeb aplikace

Blokujte extensions

  1. Identifikujte pro vás potenciálně škodlivé typy souborů a zablokujte jejich přípony

Validujte Content-Type

  • Content-type zadává uživatel a jako takovému mu nelze důvěřovat - je možné jej podvrhnout
  • Z hlediska bezpečnosti však poskytuje rychlou kontrolu, která zabrání neúmyslně nahrát soubory s nesprávným typem
  • Dále je možné kontrolovat MIME type
  • To lze provést pomocí seznamu povolených nebo zakázaných položek

Validujte file signature

  1. Ověřte podpis signature souboru a porovnejte ji s očekávaným souborem
  • Tato funkce by se neměla používat samostatně, protože ji lze snadno obejít

Sanitizujte název souboru

  • Názvy souborů mohou systém ohrozit několika způsoby
    • Použitím nepřijatelných znaků
    • Použitím speciálních názvů souborů
  1. Vytvořte náhodný řetězec jako název souboru (UUID, GUID), případně název řádně zvalidujte
  2. Zohledněte limity délky názvů souborů, protože systémy, kam se soubory ukládají mají vlastní limity
  3. Zvažte následující, pokud vyžadujete uživatelsky definované názvy souborů
    1. Zaveďte maximální délku
    2. Omezte znaky na povolenou podmnožinu (alfanumerické, pomlčky, mezery, tečky)
      1. Blokujte nebezpečné znaky, pokud to není možné

Validujte obsah souboru

  • Obsah souborů může obsahovat škodlivá, nevhodná nebo nezákonná data
  1. Použijte speciální validaci obsahu souboru na základě očekávaného typu
    • Obrázky
      1. Použijte techniku přepisování obrázků
      2. Zničte jakýkoliv druh škodlivého obsahu vloženého do obrázku
    • Microsoft dokumenty
      1. Ověřte nahraný dokument pomocí nástroje Apache POI
    • ZIP soubory
      • Nedoporučují se, protože mohou obsahovat všechny typy souborů a vektory útoku, které se na ně vztahují
  2. Umožněte uživatelům nahlašování nelegálního obsahu a jiná zneužití u služeb poskytujících nahrávání souborů
  3. Proveďte ruční kontrolu souborů v sandbox prostředí před jejich zveřejněním
  4. Přidejte do procesu automatizaci
    • Některé služby (např. Virus Total) poskytují API pro kontrolu souborů podle známých hashů škodlivých souborů
    • Některé frameworky mohou ověřovat typ na základě raw obsahu
  5. Dávejte pozor na hrozby úniku dat a shromažďování informací veřejnými službami

Úložiště souborů

  1. Volte umístění na základě bezpečnostních a obchodních požadavků
  2. Ukládejte soubory na jiném serveru (dojde k úplnému oddělení povinností mezi aplikací a hostitelem)
  3. Ukládejte soubory mimo webroot
    • Soubory můžete uložit do webrootu, ale musíte jim nastavit pouze oprávnění k zápisu
  4. Nastavte kontroly (IP adresy, oprávněný uživatel atd.) v případě, je-li vyžadován přístup pro čtení
  • Jednou z dalších technik je ukládání souborů do databáze
  • Někdy se používá pro automatické zálohovací procesy
  • To se doporučuje pouze v případě, je-li v týmu DBA a že se postup ukáže jako lepší oproti ukládání na filesystem
  • Některé soubory jsou po náhrání odeslány emailem nebo jinak zpracovány - nejsou uloženy na serveru
    1. Proveďte veškerá bezpečnostní opatření z tohoto dokumentu, než s nimi provedete jakékoli akce

Uživatelská oprávnění

  1. Ověřte uživatele před tím, než začne nahrávat soubory
    • Autentizace
      • Uživatel by měl být registrován nebo jinak identifikován, aby bylo možné nastavit omezení a limity pro jeho možnosti nahrávání
    • Autorizace
      • Uživatel by měl mít příslušná oprávnění k přístupu k souborům nebo jejich úpravě

Filesystem oprávnění

  1. Nastavte oprávnění souborů podle principu nejnižšího oprávnění (least privilege)
  2. Zajistěte, aby čtení souborů bylo přístupné pouze povoleným uživatelům systému
  3. Nastavte požadované režimy pro soubor
    1. Zkontrolujte soubor před spuštěním, je-li vyžadováno, aby bylo zajištěno, že nejsou k dispozici žádná makra nebo skryté skripty

Nastavte upload a download limity

  1. Nastavte vhodné limity pro upload, aby byla chráněna kapacita úložiště
  2. Nastavte limity velikosti souboru a zohledněte provedení dekomprese pokud bude systém soubory extrahovat nebo zpracovávat
  3. Nastavte vhodné limity požadavků i pro stahování souborů, aby byl server chráněn proti DoS útokům