Quanta esperienza di sicurezza ha bisogno un programmatore di applicazioni generico per sviluppare eticamente il software? [chiuso]

8

Sono curioso di questo. Ho visto questo thread:

Perché non dovremmo eseguire il rollover?

e questa risposta:

link

che conteneva questo commento, che aveva il secondo più alto numero di voti e che non può essere ignorato:

"The biggest problem I notice among beginning coders, is that they don't take security risks seriously. If I mention what kind of weaknesses some system has, the common response is rolling their eyes... The attacks are real and do happen, and if you can't even apply proper security at school then how's your application supposed to fare when it's live for hundreds of customers? :/ The only way to convince them is usually providing examples, and best of all a live demo. So if you have examples... I think it'd be a nice addition!"

Questo mi fa meraviglia, quindi. Il contesto di questa discussione riguardava il "rolling del proprio" software o algoritmo crittografico e perché questa è generalmente una cattiva idea a causa delle numerose vulnerabilità di sicurezza che si possono creare senza la competenza adeguata (e sembrava esserci essere un'aria strong che questo non si applica solo alla creazione dei propri cifrari di per sé ma anche implementando codici esistenti e controllati nel proprio codice) che possono rendere considerevolmente il prodotto meno sicuro di quanto dovrebbe essere o pubblicizzare. E la preoccupazione è, ovviamente, eminentemente ragionevole. Inoltre, la quantità di esperienza richiesta è apparentemente abbastanza grande - secondo una storia che ho sentito su questo molto, molto tempo fa, qualcuno ha detto una volta (penso fosse Bruce Schneier?) Che non avrebbero (approssimativo) "fiducia in nessuno cripto scritto da chiunque non avesse "guadagnato le proprie ossa" spendendo un sacco di codici rompentisi ".

Il problema, tuttavia, è che mentre capisco questo riguardo al software crittografico , il commento sopra solleva un punto che suggerisce che questo porta implicazioni che sono ampiamente più generali in quanto i problemi di sicurezza si applicano al software all , e quindi lo sviluppatore di qualsiasi software deve tenere conto della sicurezza indipendentemente da cosa sia, anche se è non esplicitamente crittografico o noi non scriviamo parti crittograficamente esplicite (ad esempio, consideriamo quanto spesso un buffer exploit si apre su vari software generici come i browser web e alcuni cracker lo colpiscono per infliggere danno, esp rubare informazioni e / o denaro). Sembra che, intuitivamente, vi sia un obbligo etico di base da parte di qualsiasi sviluppatore di software che sta per rilasciare il codice che verrà usato dal pubblico più ampio, per assicurati che soddisfi alcuni "ragionevoli" standard di sicurezza, anche se non è specificamente codice "sicurezza" . Se uno rilascia il codice uno sa può essere insicuro, allora si agisce in un modo che ancora, molto ragionevolmente , potrebbe essere interpretato come contenente una negligenza non etica.

Ed è qui che sono preoccupato. Perché, in definitiva, dal momento che non puoi semplicemente avere tutto software "pre-creato" - come allora quale sarebbe il punto di sviluppo di qualsiasi software - dovrai tirare almeno QUALCUNO di sicurezza- incorporare codice da solo . Devi devi eseguire il rollover , piaccia o no, e ciò significa che richiede expertise . Quindi la domanda è: se seguiamo il detto di non "lanciare il proprio" in quanto si applica al codice di sicurezza specificamente come la crittografia, MA dobbiamo il nostro codice come parte dello sviluppo di applicazioni ALL , quindi quanta esperienza in sicurezza ci serve come programmatore generale di applicazioni per soddisfare questo limite etico intuitivo? Sembra che l'importo debba essere "più di zero" ma (si spera!) "Inferiore a quello di un esperto di sicurezza informatica" del calibro che sviluppa gli algoritmi di crittografia attuali (come AES, ecc.) Che diventano standard mondiali. Ma qual è l'importo e qual è la fine di tale spettro più vicino e cos'è esattamente necessario per impararlo?

    
posta The_Sympathizer 03.12.2018 - 08:02
fonte

4 risposte

0

Questa è una domanda interessante. All'inizio, come sviluppatori di software, creiamo codice (che significa applicazioni) per uno scopo di business specifico. Quindi un buon programmatore dovrebbe essere in grado di immergersi nei domini aziendali e trasformare i requisiti funzionali in codice funzionante.

Ma il software è complesso e ci sono dozzine di requisiti tecnici / non funzionali di cui uno sviluppatore dovrebbe essere a conoscenza, ad esempio prestazioni, stabilità, interfaccia utente, sicurezza e così via.

Penso che non sia possibile essere un "esperto" in ogni ambito tecnico. Ma - e penso che sia questo il punto - se tu o la tua azienda volete creare software "professionale", dovrebbe esserci almeno un esperto per ogni dominio tecnico. Parlando di sicurezza, dovrebbe esserci almeno un ingegnere della sicurezza che può fare revisioni del codice, test di penetrazione interna e così via. Mentre si fanno queste cose in cooperazione con lo sviluppatore che ha scritto il codice, dovrebbe esserci una sorta di trasferimento di conoscenze tra l'esperto e il "novizio". In questo modo, ogni sviluppatore dovrebbe guadagnare una conoscenza di base nel tempo.

Le sfide per l'azienda sono: a) sensibilizzare tutti gli sviluppatori per questi argomenti in modo che non "roteando gli occhi" quando si tratta di tali cose eb) stabilire un processo di sviluppo software / lifecyle in cui sono inclusi questi argomenti.

    
risposta data 03.12.2018 - 10:55
fonte
0

Secondo me, in teoria gli sviluppatori dovrebbero almeno conoscere le basi della sicurezza delle informazioni, in modo che possano almeno evitare gli errori più evidenti e avere una base di conoscenze su cui possono costruire. Questo in pratica significa che, ad esempio, un web dev deve sapere quale sia l'XSS e che può essere evitato con l'igienizzazione dell'output. Non hanno bisogno di essere esperti di XSS e conoscono a memoria ogni trucco del "checche XSS". Devono solo capire che si tratta di un problema, perché è un problema e che cosa comporta la soluzione.

Come risultato della conoscenza di cosa XSS è:

  • Gli sviluppatori possono almeno cercare informazioni su XSS, leggere, chiedere, saperne di più;
  • Faranno degli errori ma è meno probabile che costruiscano qualcosa di così oltraggiosamente insicuro da essere inspiegabile senza una completa riscrittura; I bug di sicurezza verranno risolti più facilmente;
  • Possono capire di cosa sta parlando un ricercatore della sicurezza quando viene segnalato un problema; Possono decidere di saperne di più o chiedere aiuto;

Senza alcune conoscenze di base sulla sicurezza delle informazioni, i punti di cui sopra non sarebbero possibili. Ovviamente i principianti non sanno nulla e impareranno le basi nel tempo, spesso da altri sviluppatori, anche online (partecipando a comunità, partecipando a progetti open-source, ecc.).

Ma non sono sicuro di cosa abbia a che fare con "l'etica". Potresti pensare che la costruzione di software oltraggiosamente insicuri debba essere considerata non etica, ma puoi dire che l'ignoranza è eticamente sbagliata? Non ne sono sicuro. Costruire un software molto insicuro è decisamente poco professionale. D'altra parte, se ci pensate, un sacco di software viene fornito con una licenza in cui dicono che è "fornito così com'è", senza alcuna garanzia. Lol!

    
risposta data 04.12.2018 - 01:30
fonte
-1

Iniziamo con il problema dell'eticità e precisiamo che sarà sempre soggetto all'opinione e non può essere assoluto per definizione (secondo la maggior parte dei filosofi). Tuttavia, penso che sia una domanda molto interessante e proverò a far luce su di essa.

Assunzione - Conoscenza ed etica

Quello che penso sia un punto di vista interessante, è che avere esperienza non ti rende un programmatore "etico". Prendiamo ad esempio lo scandalo delle emissioni di Volkswagen. Apparentemente i programmatori erano abbastanza abili nel realizzare software sicuro. Sono così abili nel fatto che sono riusciti a ingannare il software altrui per assicurarsi che le loro macchine abbiano superato alcuni test. La maggior parte delle persone lo troverebbe immorale.

Fai male di proposito

Conosco i programmatori che devono premere il codice anche quando sanno che contiene bug di sicurezza. Lo hanno riferito ai manager, ma hanno lo stile di Dilbert "il cliente non paga per quello". Qui, a mio parere, il gestore è in colpa. Sanno che stanno spingendo un codice insicuro, ma a loro non importa, e il programmatore sta facendo il suo lavoro. Tuttavia, è un dibattito interessante: che dire dello scandalo delle emissioni di Volkswagen? Puoi dare la colpa ai programmatori?

Il modello di minaccia

Quindi, se un bambino scrive un sito Web per il tuo negozio di fiori e ha una vulnerabilità di Cross-Site Scripting? È molto importante notare che il tipo di applicazione è importante. Se stai scrivendo un software di controllo per una centrale elettrica, hai bisogno di un livello più alto di esperienza di sicurezza di un bambino che scrive un modulo PHP per il suo negozio locale.

Il campo

Uno sviluppatore web che crea applicazioni con determinati requisiti, come avere un back-end sicuro, ha bisogno di conoscere i vettori di attacco di base conosciuti, come SQL-injection. Tuttavia, può anche essere vista come una mancanza del "sistema educativo", che in questo caso è l'informazione diffusa su Internet, per non menzionare questa proprietà come un requisito. È bello vedere che molte lingue e framework hanno ora una sezione 'sicurezza' nel loro manuale.

Team e onestà

Come hai detto tu; nessuno conosce tutte queste cose. Ecco perché la maggior parte dei progetti richiede ai team di persone di sviluppare software. C'è un architetto, un tester, un gruppo di sviluppatori, ecc. I progettisti dell'applicazione devono assicurarsi che i requisiti di sicurezza siano chiariti. Se è possibile utilizzare una libreria TLS di base sarebbe fantastico. Se è necessaria una conoscenza più specifica, il team deve essere in grado di determinare se la conoscenza è - o non è - disponibile nel team. Qui sarebbe - secondo me - etico dello sviluppatore ammettere che non sa come implementare in sicurezza certe cose. Il project manager può quindi impegnarsi ad avere qualche parte esterna o un esperto di sicurezza a controllarlo.

Il punto

Lo sviluppatore deve ammettere che non sa come implementare qualcosa secondo alcuni standard di sicurezza. Qui è dove penso che l'eticità e la conoscenza arrivino. Ha bisogno di sapere che non conosce . Lui o lei ha bisogno di sapere semplicemente qualcosa come "rotolare la tua cripto è un rompicoglioni". "Se dovessi creare una cosa del genere, avremmo bisogno di un esperto di sicurezza per venire a ricontrollare". Ma poi finisci con altre domande: come fai a sapere quello che non sai? Chi dice che l'esperto di sicurezza ne sa abbastanza per avere un livello di sicurezza "etico"?

Questa non è una domanda con una risposta assoluta.

    
risposta data 04.12.2018 - 00:41
fonte
-2

Zero: hanno bisogno di 0 conoscenze sulla sicurezza per svilupparsi eticamente.

La sicurezza non è un lavoro degli sviluppatori: la costruzione di un widget per l'azienda in un arco di tempo e sotto il budget è. Se hanno conoscenza della sicurezza che è un bonus per qualsiasi datore di lavoro ma la conoscenza prevista in quell'area è zero, non è il loro lavoro. Database, strutture, modelli di design sono il loro pane e burro - non puoi sapere tutto.

Hanno bisogno della conoscenza del dominio su ciò che stanno costruendo, quindi se stanno costruendo un controllo per l'autenticazione - devono capire l'autenticazione o avere accesso a una risorsa che lo fa. Questo è molto simile se uno sviluppatore sta costruendo su un dispositivo mobile o usando il framework X - devono capirlo per usarlo correttamente.

Il nostro compito è di aiutarli con ciò che producono - se possiamo educare e aumentare le loro conoscenze dal nostro dominio, eccellente. No, non tutte le squadre avranno una risorsa di sicurezza, ma non avranno nemmeno una risorsa di rete o una risorsa di database.

Eticamente non hanno bisogno di conoscenze sulla sicurezza.

    
risposta data 03.12.2018 - 21:08
fonte

Leggi altre domande sui tag