Cosa prendere in considerazione durante la convalida del caricamento del file

1

Uno dei principali meccanismi di sicurezza per il software applicativo è la convalida dell'input, che può proteggere l'integrità del sistema e contrastare gli attacchi di iniezione e denial of service più comuni.

La maggior parte di Internet può essere d'accordo sul fatto che le istruzioni preparate possono essere validate contro SQLi e che le librerie di disinfezione (che non sono vulnerabili) abbinate alla codifica dell'output possono mitigare l'XSS. Tuttavia, ho trovato che i consigli per la convalida dei caricamenti di file sono spesso deprecati e / o ambigui.

Fornire un contesto per il nostro sistema:

  • Funziona su IIS 10 (Windows Server 2016), che ospita un'applicazione .NET.
  • L'applicazione ha un endpoint che sta contattando un servizio esterno, dal quale riceve immagini.

Per i controlli di protezione, disponiamo di HTTPS con autenticazione reciproca (basato su una configurazione avanzata di TLS 1.2) e disponiamo di una whitelist di indirizzi IP consentiti per i nostri endpoint da contattare (ridondanti con il controllo dei certificati, ma miriamo alla difesa- in profondità). Ora, quando si tratta del caricamento del file, stiamo attualmente esaminando le seguenti convalide:

  • Whitelist di numeri magici - Attualmente abbiamo il controllo magico dei numeri e non siamo sicuri di quanto sia facile falsificare questo valore. Aggiungere le convalide per le estensioni o MIME aggiungere qualcosa a questo passaggio?
  • Dimensione del file e controllo della lunghezza del nome del file - limitiamo la dimensione di questi dati per evitare il DoS.
  • Indipendentemente dal nome dell'immagine originale, viene rinominato in base alla convenzione interna del sistema, in teoria per evitare attacchi di iniezione attraverso il nome.
  • L'immagine viene scansionata da un antivirus prima di ogni ulteriore manipolazione.

La nostra catena di validazione manca di passaggi importanti? Dato che lavoriamo con le immagini, ho sentito parlare della loro ricodifica per rimuovere gli attacchi, ma non sono stato in grado di trovare alcun dettaglio su questo argomento.

    
posta Nikola Luburić 19.12.2018 - 09:52
fonte

1 risposta

0

Penso che non ti manchi qualcosa, e secondo me non c'è modo di testimoniare che un'immagine sia pulita al 100% a meno che tu non la analizzi a mano, direi aggiungendo la convalida MIME (sia lato client che lato server ) è un passo da compiere prima di convalidare contro il numero magico, questo eliminerà alcuni script kiddies:)

Ora se vuoi veramente ridurre la superficie di attacco, puoi prima ricodificare l'immagine in un formato semplice / scarso / banale , in un ambiente in modalità sandbox con un privilegio minimo e nessun accesso a syscalls non necessari. Una volta ottenuto il file ri-codificato, puoi ricodificarlo nuovamente in un formato più comune (png / jpeg ..) In questa fase puoi fidarti dell'input dato dal tuo sistema, e usare stream o forse memorystream per convertire la tua immagine (prova a prendere tutto!)

    
risposta data 19.12.2018 - 11:32
fonte

Leggi altre domande sui tag