Sebbene la risposta di Kyle Fennell sia molto valida, vorrei offrire una ragione per spiegare perché si consiglia di progettare in modo sicuro le applicazioni interne.
Un gran numero di gli attacchi coinvolgono attori interni
Esistono molte versioni differenti di questo fattoide. "Il 50% di tutti gli attacchi riusciti inizia internamente", "Due terzi di tutte le violazioni dei dati coinvolgono attori interni", ecc.
Una statistica che ho trovato è stata DBIR 2019 di Verizon, in che affermano:
Il 34% [delle violazioni dei dati analizzate] ha coinvolto attori interni
Qualunque sia il numero esatto, una quantità significativa di attacchi coinvolge attori interni. Pertanto, basare il tuo modello di minaccia su "è interno, quindi è sicuro" è una cattiva idea .
Secure Software Development non solo previene gli abusi, ma anche l'uso improprio
- Abuso: l'utente fa qualcosa di dannoso per il proprio guadagno
- Uso improprio: l'utente fa qualcosa di dannoso perché non saperne di più
Il motivo per cui parlo di un uso improprio è perché non tutto ciò che danneggia l'azienda è fatto intenzionalmente. A volte le persone commettono errori e, se le persone commettono errori, è bene che le macchine impediscano che tali errori abbiano conseguenze diffuse.
Immagina un'applicazione in cui tutti gli utenti possono fare tutto (perché l'impostazione delle autorizzazioni richiede molto tempo , non è stato pensato durante lo sviluppo, ecc.). Un utente commette un errore e cancella tutto. Ciò porta l'intero reparto a un punto morto, mentre l'IT subisce un attacco di cuore e si precipita nella sala server con il backup della scorsa settimana.
Ora immagina la stessa applicazione, ma con un sistema di autorizzazioni ben definito. L'utente tenta accidentalmente di eliminare tutto, ma elimina solo le attività assegnate. Il loro lavoro si interrompe e l'IT unisce i dati del backup della scorsa settimana con i dati correnti. Due dipendenti non potrebbero svolgere alcun lavoro produttivo oggi, invece di 30. Questa è una vittoria per te.
"Interno" non significa esente da malintenzionati
Alcune aziende sono tecnicamente un'unica azienda con più squadre, ma sono fratturate in modo tale che le squadre competono tra loro, piuttosto che lavorare insieme. Potresti pensare che ciò non accada, ma Microsoft è stato così per molto tempo.
Immagina di scrivere un'applicazione che deve essere utilizzata internamente da tutti i team. Riesci a immaginare cosa accadrebbe una volta che un dipendente capisce che potresti bloccare altri dipendenti per 30 minuti eseguendo uno script che ha creato? I dipendenti di "quell'altro team" verrebbero costantemente esclusi dall'applicazione. L'help desk sarebbe occupato per la 5 a volta di questa settimana cercando di capire perché a volte le persone resterebbero escluse dall'applicazione.
Potresti pensare che questo sia inverosimile , ma saresti sorpreso di quanto alcune persone si spingerebbero per ottenere quel dolce dolce bonus alla fine dell'anno per avere prestazioni migliori rispetto a "l'altra squadra".
"Interno" non rimane "Interno"
Ora, nel 2020, la tua applicazione verrà utilizzata solo da un piccolo gruppo di persone. Nel 2029, l'applicazione verrà utilizzata internamente da alcune persone, da alcuni fornitori e anche da alcuni appaltatori. E se uno dei tuoi fornitori scoprisse un difetto nella tua applicazione? E se vedessero che uno dei loro concorrenti ha condizioni molto migliori?
Questa è una situazione in cui non vorresti trovarti e che avresti potuto evitare.
Riutilizzo del codice dall'applicazione "interna"
Scrivi un'applicazione interna che esegue alcune operazioni di accesso al database. Funziona bene per anni e nessuno si è mai lamentato. Ora devi scrivere un'applicazione che accede agli stessi dati, ma esternamente. "Facile!", Pensa il programmatore alle prime armi. "Riutilizzerò semplicemente il codice che già esiste."
E ora sei bloccato con un'applicazione esterna in cui puoi eseguire iniezioni SQL. Perché all'improvviso, il codice che è stato creato "solo per uso interno", senza giochi di parole, viene utilizzato esternamente. Evitatelo mettendo a posto il codice interno in primo luogo.
Sarà sufficiente seguire OWASP?
La risposta a questa domanda è un'altra domanda "Basta per cosa?". All'inizio può sembrare nitido, ma illustra il problema. Che cosa vuoi proteggere esattamente?
Definisci un modello di minaccia per la tua applicazione, che includa chi pensi possa essere una minaccia per la tua applicazione in che modo, quindi trova le soluzioni per queste singole minacce. OWASP Top 10 potrebbe essere sufficiente per te, o potrebbe non esserlo.