Sviluppa la sicurezza prima o come fase successiva?

4

La domanda Pensi attivamente alla sicurezza durante la codifica? chiede informazioni sulla sicurezza durante la programmazione.

Ovviamente, uno sviluppatore deve pensare alla sicurezza durante la codifica - SQL injection, password security, ecc.

Tuttavia, per quanto riguarda la sicurezza reale e completa, in particolare i problemi difficili che potrebbero non essere immediatamente evidenti, dovrei preoccuparmi di affrontarli durante il processo di sviluppo, o dovrebbe essere un passo avanti in seguito lo sviluppo?

Stavo ascoltando un podcast su Sicurezza ora e hanno menzionato come molti dei problemi di sicurezza rilevati in Flash era perché quando Flash era stato sviluppato per la prima volta non era stato progettato pensando alla sicurezza (perché non ne aveva bisogno), quindi Flash ha al suo interno importanti falle nella sicurezza.

So che nessuno vorrebbe essere in disaccordo attivo con "pensare innanzitutto alla sicurezza" come best practice, ma molte aziende non seguono le migliori pratiche. Quindi, qual è l'approccio corretto per bilanciare tra la necessità di ottenere il prodotto fatto e lo sviluppo in modo sicuro?

    
posta MattyD 27.06.2011 - 02:08
fonte

4 risposte

12

Al lavoro abbiamo una lista di cose semplici / standard che non dovremmo fare. Come query non parametrizzate e simili. Dobbiamo rivedere il nostro codice e dovremmo chiedere a qualcun altro di revisionarlo per accertarci che nessuno dei no-nos sia implementato. Dopo averlo passato un paio di volte, non puoi fare a meno di pensare alla sicurezza mentre fai il codice. Secondo me, dovresti codificare per sicurezza mentre codi per funzionalità. Tutto il tempo. Poche eccezioni.

    
risposta data 27.06.2011 - 02:21
fonte
6

In primo luogo con qualsiasi applicazione che sarà disponibile al pubblico o in esecuzione su macchine rivolte al pubblico, cerco di progettare per sicurezza all'inizio. Quali rischi può potenzialmente esporre questa applicazione? Come possono essere mitigati? Qual è l'esito peggiore che potrebbe derivare da un compromesso di sicurezza di questa applicazione e cosa si può fare per minimizzare il dolore di quel risultato?

Se si progetta di essere sicuro fin dall'inizio, è necessario pensarci meno quando si sta effettivamente digitando. Naturalmente ci sono delle pratiche che devi seguire per prevenire gli attacchi più comuni, ma se l'applicazione è strutturata per comportarsi in un modo più sicuro fin dall'inizio, sarà molto più facile mantenere la sicurezza del codice più tardi.

    
risposta data 27.06.2011 - 12:17
fonte
3

La sicurezza è come le prestazioni.

Non puoi ottenere una bomboletta di sicurezza e cospargerla sopra il software più tardi.

Quando le persone progettano prodotti e non pensano ai titoli hai problemi.

  • sicurezza
  • affidabilità
  • sostenibilità
  • prestazioni (scalabilità)

Ora, quando pensi che la sicurezza non sia un requisito, è necessario chiedersi: dove si trova il software utilizzato. Se la risposta non è su una cartuccia ROM su una macchina senza supporto esterno o connessione di rete, allora l'analisi dei requisiti è un po 'carente.

Se un cliente esegue il software, si aspetterebbe che il software non esponga gli altri dati a furti o danni. Potrebbero anche ragionevolmente aspettarsi che il loro computer e la loro rete non vengano utilizzati da qualche botnet ostile a causa di problemi di sicurezza nel tuo prodotto.

Questa aspettativa di sicurezza è probabilmente appropriata per quasi tutti i software. Il linguaggio che ho usato è intenzionalmente legalizzato, poiché stiamo parlando di problemi che un cliente potrebbe tentare di fare causa a te o al tuo datore di lavoro.

Se qualcuno può pensare ad un software che può essere insicuro in anticipo, puoi commentare?

    
risposta data 28.06.2011 - 02:07
fonte
1

Esistono due tipi di problemi di sicurezza:

  • Problemi localizzati, come l'overflow del buffer derivante da una mancanza di controllo dei limiti dell'array o di iniezioni SQL derivanti da query confuse con stringhe. Questi possono essere risolti usando buoni strumenti di programmazione (i sistemi di tipo buono ne cattureranno molti). Una volta trovati, possono essere riparati facilmente; ma quando ce n'è uno di solito ce ne sono molti simili.
  • Problemi di progettazione profondi, come non segregare abbastanza le autorizzazioni o impegnarsi in protocolli che perdono. Ottenere questi giusti richiede una pianificazione intelligente. Una volta trovati, sono spesso un incubo da risolvere, perché è necessario riscrivere grandi quantità di codice o introdurre incompatibilità maggiori.

Non progettare per la sicurezza è come costruire una casa di paglia. Funziona fino a quando arriva il grande lupo cattivo, e poi perdi. Ciò non significa che tu debba sempre progettare per la sicurezza, non è sempre richiesto il wolfproofness. Ma non trasformi una casa di paglia in una casa di mattoni fissando la sicurezza; è una casa completamente diversa. Allo stesso modo, se non si progetta per la sicurezza dal primo giorno, la protezione sarà più una riprogettazione completa di un'evoluzione della luce.

    
risposta data 01.07.2011 - 00:55
fonte

Leggi altre domande sui tag