Domanda:
Computer aziendali per sviluppatori competenti, come gestirli?
grochmal
2016-08-30 20:19:49 UTC
view on stackexchange narkive permalink

Questo è un follow-up su C'è un motivo legittimo per cui dovrei essere obbligato a utilizzare il computer della mia azienda. Soprattutto perché vedo un problema enorme in un paio di situazioni specifiche.

Se fossi stato in una posizione di ingegnere della sicurezza per un'organizzazione, metterei sicuramente una politica in base alla quale devono essere utilizzati solo i computer aziendali. Ciò ha senso e protegge non solo i dati aziendali ma anche la responsabilità dei dipendenti.

Tuttavia, c'è un caso in cui una tale politica mi infastidisce: uno sviluppatore competente (non sto parlando di un junior sviluppatore, sto parlando di uno sviluppatore di livello medio-alto) avrà potenzialmente sulla sua macchina da lavoro:

  • 17 motori di database;
  • 20 container docker;
  • 10 macchine virtuali di prova (diciamo usando qualcosa come qemu) .

Questo è uno scenario molto comune nelle startup e post-startup (una startup che è riuscito a sopravvivere diversi anni). Inoltre, questo sviluppatore cambierà i suoi container docker e le sue macchine virtuali ogni settimana, poiché probabilmente testerà nuove tecnologie.

Richiedere a questo sviluppatore di fare riferimento all'ingegnere della sicurezza per installare nuovo software ogni volta è completamente impraticabile . Inoltre, poiché un'azienda avrebbe più di uno di questi sviluppatori, utilizzare i tipici computer gestiti dall'azienda per tutti comporta degli svantaggi:

  • Mantenere i computer di, diciamo, sei tali sviluppatori sono un lavoro a tempo pieno per un ingegnere della sicurezza competente.
  • Il manager di quegli sviluppatori sarà terribilmente arrabbiato perché ciò che il suo team sta facendo per il 50% del loro tempo di lavoro è aspettare l'ingegnere della sicurezza .

D'altra parte, consentire agli sviluppatori di usare le macchine liberamente è pericoloso: un container docker o una macchina virtuale canaglia e hai un insider. Direi anche che i computer di questi sviluppatori sono più pericolosi di quelli di un utente comune (ad esempio, un manager con un software per fogli di calcolo).


Come crei politiche sensate per sviluppatori competenti?

Ecco alcune altre soluzioni a cui ho potuto pensare (o visto in passato), la maggior parte delle quali erano piuttosto scadenti :

  1. Non consentire l'accesso a Internet dalle macchine di sviluppo:

    • È necessario l'accesso a Internet per leggere la documentazione;
    • È necessario accedere ai repository, spesso presenti su Internet.
  2. Fornisci agli sviluppatori due computer, uno per Internet e uno per le macchine di sviluppo:

    • Reclami sulla perdita di produttività: digitare Alt + 2 per ottenere il browser è più veloce che passare a un altro computer;
    • L'accesso al repository è macchinoso: scarica in un posto, copia nell'altro .
    • Incoraggia lo sviluppatore a aggirare la sicurezza e creare una connessione basata su USB tra le due macchine, in modo che possa lavorare da un singolo computer (visto che è successo più di una volta).
  3. Sposta lo sviluppo sui server (cioè non lo sviluppo su macchine da scrivania):

      Questo sta solo spostando lo stesso problema più in profondità, ora il contenitore canaglia è sul server;
  4. Probabilmente peggio che permettere allo sviluppatore di fare ciò che vuole sulla sua macchina.

Deve esserci un modo migliore.

Correlati: [Rischi legati alla concessione di diritti di amministratore agli sviluppatori sui propri PC] (https://security.stackexchange.com/questions/14967/risks-of-giving-developers-admin-rights-to-their-own-pcs)
Correlati a Stack Overflow: [Gli sviluppatori dovrebbero disporre delle autorizzazioni di amministratore sul proprio PC] (https://stackoverflow.com/questions/701214/should-developers-have-administrator-permissions-on-their-pc)
Onestamente trovo che non dare agli sviluppatori la propria macchina con accesso amministratore completo sia completamente illogico, e la maggior parte dei grandi sembra capirlo.Certamente non lavorerei per un'azienda che non lo ha fatto.Basta non assumere persone completamente incompetenti.
È il peggior ingegnere della sicurezza di cui abbia mai sentito parlare.Sembra più una frenetica stagnola.Spero che questo sia solo un esempio estremo che non sta realmente accadendo ora.In effetti, la sicurezza a scapito dell'usabilità non è sicurezza.Intralciare il business, il talento, non è sicurezza.Guarda nella triade della CIA, in particolare, la parte "accessibilità".
Buona fortuna a trovare sviluppatori disposti a lavorare su un computer che non possono amministrare.
Di cosa si tratta "alt + 2"?
@HC_ Cambiare finestre come `Alt` +` Tab` fa, ma indicizzate per indirizzare una determinata finestra.Su Windows, "Win" + "2" farebbero lo stesso.
@MarkBuffalo - Sfortunatamente, ho trovato una carta stagnola così frenetica in due posti in cui ho lavorato.E sì, non sono rimasto lì a lungo.Il lato negativo è che le politiche completamente illogiche (ad esempio, dare agli sviluppatori gli stessi computer del team di vendita e spostare lo sviluppo sui server. Stessa sottorete dei server di produzione!) Sono là fuori e sono fortemente difese dalle persone che le hanno realizzate.
@HC_ - Bergi ha detto quasi tutto.Ma vorrei aggiungere che qualcosa come `alt + 2` (o più spesso` winkey + 2`) viene usato per preparare i gestori di finestre per cambiare desktop.E (probabilmente) le persone difendono i gestori di finestre di piastrellatura come più produttivi.
Un grande spazio non controllato per container e VM è necessariamente per portare a termine qualsiasi sviluppo;ed è una ragionevole alternativa al pieno controllo della macchina host.La navigazione web contenuta è generalmente accettabile.Dove hai sviluppatori che vogliono il pieno controllo della macchina è dove gli IDE in esecuzione nei container sono troppo complicati o nelle VM troppo lente. L'idea di avere solo binari autorizzati per l'esecuzione e l'apertura delle porte è l'opposto di ciò di cui uno sviluppatore ha bisogno.È qui che la richiesta di controllo (spesso confusa con la sicurezza) crea una situazione impossibile.
Ho rifiutato un'offerta di lavoro dopo aver scoperto che l'azienda non consentiva agli sviluppatori l'accesso a Internet.Quando una parte enorme della tua giornata è "Ricercare perché la cosa x ha fatto o non ha fatto l'azione y", non avere Internet è un ostacolo ridicolo.
I servizi e le reti critici dovrebbero essere progettati per proteggersi dalle minacce.Qualsiasi gestione di una macchina per sviluppatori significherebbe * proteggere la macchina stessa, * non proteggere altri sistemi * da essa. * Ma gli sviluppatori avranno molto più successo se possono facilmente abbattere e ricostruire il loro ambiente automaticamente, quindi le loro macchine non dovrebbero 'non serve troppa attenzione.
Avere accesso fisico a un computer più l'accesso in tempo reale garantisce virtualmente che detto sviluppatore competente avrà i diritti di amministratore locale entro 5 minuti, se lo desiderano.Questo è il teatro della sicurezza.
Non hai mai sentito parlare di Active Directory o dei controlli di dominio, OP?
Imo: inseriscili in una rete separata con una regola di rete specifica.
Con la propria scatola
Tredici risposte:
paj28
2016-08-30 21:06:16 UTC
view on stackexchange narkive permalink

Sviluppo e produzione separati

È pratica normale concedere agli sviluppatori i diritti di amministratore / root locale sulla loro workstation. Tuttavia, gli sviluppatori dovrebbero avere accesso solo agli ambienti di sviluppo e non avere mai accesso ai dati in tempo reale. Gli amministratori di sistema, che hanno accesso alla produzione, dovrebbero disporre di workstation molto più controllate. Idealmente, le workstation sys-admin non dovrebbero avere accesso a Internet, sebbene ciò sia raro nella pratica.

Una variazione che ho visto è che gli sviluppatori hanno una build aziendale bloccata, ma possono fare quello che vogliono all'interno di virtual macchine. Tuttavia, questo può essere fastidioso per gli sviluppatori, poiché le VM hanno prestazioni ridotte e i vantaggi in termini di sicurezza non sono così grandi. Quindi è più comune vedere sviluppatori semplicemente avere pieno accesso alla propria workstation.

Utilizziamo e consigliamo un approccio che utilizzi ciò che chiamiamo PAW (workstation ad accesso privilegiato) o SAW (workstation ad accesso protetto). Gli utenti che necessitano dell'accesso al prodotto hanno una workstation / laptop per l'uso quotidiano e ilaccesso alla produzione.
@Xander Mi piace questa configurazione, anche se diventa piuttosto costosa a seconda delle dimensioni del team.
@Xander - quindi sei un esempio reale di questo approccio "raro nella pratica".Bravo!Posso chiederti in che settore ti trovi?L'ho visto principalmente in fornitori governativi e aerospaziale.
@paj28 Lavoro per Microsoft.E sì, non solo lo insegniamo, ma lo abbiamo anche implementato completamente qui.:-)
Mi chiedo.Cosa succede se il lavoro di sviluppo viene eseguito dalle stesse persone del lavoro dell'amministratore di sistema (un altro scenario comune nelle startup).Immagino che ogni sviluppatore dovrebbe avere un PAW e uno SAW.
Cosa succede se l'organizzazione in questione desidera proteggere il proprio codice sorgente dalla fuga di notizie, così come i dati?Non puoi impedire agli sviluppatori di accedere al codice.
@JonathanPullano - In tal caso sono necessari controlli più forti.Ci sono alcune informazioni su [questa domanda] (http://security.stackexchange.com/q/128249/31625).La maggior parte delle organizzazioni accetta il rischio che gli addetti ai lavori rubino il codice sorgente, poiché il sovraccarico di questo tipo di controlli è significativo.
Come definisci qui "produzione"?La macchina del project manager è "produzione"?E gli altri reparti non di sviluppo nella stessa azienda?
@jpmc26 - Il punto chiave è se l'ambiente contiene dati utente in tempo reale.La macchina del project manager includerà messaggi di posta elettronica interni e documenti riservati, ma meno sensibili dei dati dell'utente.Di solito direi che i project manager non sono in produzione.Altri reparti, come l'assistenza clienti, avranno accesso ai dati in tempo reale e li considererei produzione.
@JonathanPullano: Non esiste un modo pratico per impedire a un determinato sviluppatore di abbandonare il codice sorgente.Dovresti interrompere tutti gli accessi a Internet e persino eseguire ricerche a raggi X (dentro e fuori) per evitare che le unità vengano contrabbandate.Dovresti disabilitare tutte le stampe - e guardare i bidoni della spazzatura, ecc. Successivamente, dovresti vietare tutti i modi di scattare foto;il che significa niente telefoni, fotocamere, ecc. mentre si utilizzano anche videocamere per monitorare attivamente ciò che tutti stanno facendo.Ciò creerebbe un ambiente in cui pochi sviluppatori sarebbero disposti a lavorare.
@NotMe, che sarebbe un perfetto esempio di una soluzione meccanica a un problema umano, né funzionerebbe dal momento che le persone possono memorizzare le informazioni e [non farà scattare la radiografia] (https://xkcd.com/294/).L'unica vera soluzione sarebbe quella di avere una conoscenza e una comprensione totale (capacità di prevedere con precisione) il comportamento onesto e l'integrità delle persone.Qualsiasi altra cosa sarebbe (in realtà, è) un "hack" o una "soluzione alternativa" fatta a causa della mancata comprensione della mente umana.
A meno che non si pratichino rigorose revisioni del codice, una macchina per sviluppatori compromessa potrebbe essere utilizzata per introdurre una falla di sicurezza nel software, che può quindi essere utilizzata per compromettere il sistema di produzione.
@CodesInChaos: questo è un problema indipendentemente dall'accesso dell'amministratore.Sono d'accordo che la revisione del codice sia la soluzione
coteyr
2016-08-31 20:32:15 UTC
view on stackexchange narkive permalink

Quindi questa risposta viene dal punto di vista di uno sviluppatore. Tienilo a mente.

Primo, non avere i diritti di "amministratore locale" sulla mia macchina è un segno che dovrei cercare un lavoro altrove. È quasi impossibile scrivere codice, armeggiare con cose e mantenere una toolchain se devi chiedere il permesso ogni volta che devi aggiornare (o testare) una nuova dipendenza o uno strumento. Quindi, ecco i livelli di autorizzazione che richiedo . Tieni presente che di solito sono piuttosto in alto sulla scala per così dire.

  • Amministratore totale e completo sulla mia macchina locale
  • Amministratore totale e completo su tutto l'hardware di sviluppo e test
  • Un certo livello di accesso amministrativo alla produzione server (questo diventa complicato, non ho bisogno o voglio tutto, ma ho bisogno di abbastanza per diagnosticare e risolvere i problemi che si verificano in produzione, e abbastanza per distribuire effettivamente il codice (supponendo che io sia quello che deve supervisionare la distribuzione del codice). Di solito questo livello di accesso si evolve nel tempo, ma inizia con i file di log.

Meno di quello e puoi trovare un nuovo sviluppatore.

Detto questo, lì è un grande rischio connesso a quel livello di accesso. Quindi quello che normalmente consiglio è una rete separata. Metti tutte le "cose" di sviluppo nella sua rete. Il suo AD, il suo file hosting, tutto suo e non lasciare mai parla con la rete di produzione. (Ma lascialo uscire su Internet)

Sì, questo significa hardware duplicato (o VPS) ma ne hai comunque bisogno per i test. Sì, significa un po 'più di overh ead durante l'aggiornamento o l'amministrazione, ma di nuovo, è necessario per i test. Hai anche bisogno di un posto dove vedere "Cosa succede al software X se aggiorno il server AD?" Guarda che hai un'intera rete di macchine di prova pronte per quel tipo di prova.

Quello che ho implementato con successo (con l'aiuto di un buon team IT) è una VLAN separata per tutte le "cose" di sviluppo e un singolo host VPS a cui lo sviluppatore ha pieno accesso, per fare ciò che vuole. Su quell'host c'è un server AD configurato dall'IT per assomigliare a una versione più piccola del server AD dell'azienda. Quindi una serie di documenti e linee guida per ciò che, ad esempio, un server web dovrebbe eseguire. Cosa dovrebbe funzionare un server DNS, cosa dovrebbe funzionare un server xyz. Quindi, parte dello "sviluppo" è installare e configurare quei VPS per il nostro uso. Tutto su quella VLAN è totalmente isolato dalla produzione e considerato esterno all'azienda. Infine viene creata una serie di "punch through" per le risorse a cui avevamo bisogno di accedere (come la posta elettronica). Normalmente questo veniva gestito come se fossimo esterni e l'elenco di questi strumenti era molto piccolo.

Risposta fantastica, sono metà sviluppatore la maggior parte del tempo, quindi posso sicuramente identificarmi.Vorrei solo provare a spingere per hardware separato, le VLAN possono essere configurate male (e spesso lo sono).IEEE 802.1Q ha un paio di difetti che consentono [il salto di VLAN] (https://en.wikipedia.org/wiki/VLAN_hopping).Naturalmente, la maggior parte degli switch oggi disabilita il trunking sulle porte non necessarie, ma a volte qualcuno lo lascia acceso quando si cambiano i cavi, ma nulla sembra sbagliato poiché la VLAN funziona.
Spiacenti, non puoi avere "Un certo livello di accesso amministrativo ai server di produzione".Il meglio che ti permetterò di avere è che vai su un WebEx (ecc.) Con me o fai surf sulla mia scrivania, e tu mi dici cosa vuoi, poi te lo do. Gli sviluppatori non possono toccare i server di QA o di produzione.Tu ci dai il codice agli amministratori, lo distribuiamo al QA, quindi lascia che i tester lo superino prima di apportare una modifica alla produzione.Se lascio che uno sviluppatore tocchi uno dei miei server QA o Prod, è probabile che apporti modifiche non documentate che non posso replicare.
Il motivo per cui questo si estende al QA è che l'ambiente QA deve rispecchiare l'ambiente Prod il più fedelmente possibile, in modo che qualsiasi ASS | U | ME-zioni hardcoded che funzionano bene in Dev ma si interromperanno in Prod si interromperanno _first_ nel QAcosì posso dirti di sistemare quel pasticcio e riprovare prima che arrivi a Prod ..
La filosofia di Monty è la chiave per mantenere un ambiente di produzione incontaminato.La parola chiave che ha usato era "replicare" - spesso, gli sviluppatori (lo so: sono stato afflitto dallo sviluppo per oltre dieci anni e vengo lentamente curato per la condizione, anche se occasionalmente ricaduto) scopriranno che è rotto e lo risolveranno.Sì, l'hanno risolto!Ma come l'hai * risolto *?Cos'altro hai rotto?Nuh-uh.Rimettersi in piedi al più presto ci costerà di più che riportarci indietro con un piano di cambiamento definito.Certo, queste pratiche sono solo tangenzialmente legate alla "sicurezza", ma sono comunque molto importanti.
@corsiKa Posso sostenere che la separazione dei ruoli _è_ una questione di sicurezza.Solo perché lo sviluppatore non è un malintenzionato non significa che non possa arrecare danni ai miei server di produzione sulla stessa scala (o peggiore) di quell'attaccante.Il punto centrale è che impone un vero trasferimento di conoscenza da dev ad admin.Non può "solo sapere cosa fare";deve documentarlo per iscritto in modo che qualsiasi membro del mio team possa leggere "cosa fare".
Questo.In qualità di sviluppatore, installo e disinstallo software ogni giorno, a volte ogni ora.Se devo aspettare che qualcuno mi dica che va bene per me, andrò da qualche altra parte.Se togli il controllo della mia macchina, andrò da qualche altra parte.Consulto per aziende con postazioni di lavoro ad alto attrito.In genere, gli sviluppatori hanno un morale basso e quelli decenti sono impegnati a lucidare i loro CV.
Credo che la specifica PCI-DSS dica che gli sviluppatori non hanno accesso alla produzione.Avevamo un team separato che accedeva alla produzione e ripristinava le modifiche nella base di codice.Se ti trovi in un ambiente PCI-DSS (elaborazione di pagamenti con carte di credito, ad esempio), probabilmente non potresti ottenere l'accesso ai prodotti.
@lsd PCI richiede che gli sviluppatori non ottengano l'accesso amministrativo alla produzione, ma PCI-DSS v3.2, Req 6.4.2 afferma che uno sviluppatore può "avere un account separato con accesso a livello di utente all'ambiente di produzione".
@MontyHarder Vorrei anche fare un ulteriore passo avanti e dire che qualsiasi modifica alla produzione dovrebbe avvenire attraverso un sistema di distribuzione completamente automatizzato che richiede l'approvazione di almeno uno sviluppatore senior e un amministratore di sistema.La distribuzione manuale del codice porta sempre a problemi a un certo punto.
Ah, semplicemente non abbiamo dato loro l'accesso.I registri sono stati raccolti in splunk, quindi hanno avuto modo di esaminare tutti i registri.
Non sono sicuro che una VLAN ti offra un isolamento molto sicuro.Gli sviluppatori hanno bisogno della propria LAN ...
@Isd: I ragazzi del PCI-DSS mi avrebbero maledetto.Sono lo sviluppatore principale * e * l'amministratore di sistema PROD.
Ray
2016-09-01 11:07:22 UTC
view on stackexchange narkive permalink

Dal punto di vista di uno sviluppatore:

Il tuo compito è prevenire il cambiamento (bug noti e vulnerabilità sono meglio di sconosciuti, giusto?), ma il mio è cambiare le cose. Questo ci mette in un vicolo cieco. Il mio lavoro è creare / cambiare le cose. Se la tua politica lo impedisce, allora, come qualsiasi altro ostacolo, una parte del mio lavoro è trovare un modo per aggirarlo.

Quale pensi sia più un pericolo, uno sviluppatore a cui hai concesso l'accesso alle cose di cui ha bisogno per fare il suo lavoro, o uno che ha ottenuto quell'accesso imparando come aggirare tutte le tue misure difensive? E perché la tua azienda paga te e i tuoi sviluppatori per combattere questa guerra gli uni contro gli altri quando dovresti lavorare insieme?

La semplice risposta è: dai agli sviluppatori l'accesso a ciò di cui hanno bisogno per svolgere il loro lavoro. E parla con loro. Potrebbero verificarsi rare condizioni (reverse engineering della camera bianca con importanti conseguenze legali o gestione di dati governativi classificati top-secret) in cui è necessaria una politica più complicata. Ma per la maggior parte, non è un grosso problema. Se inizi una guerra e rendi i tuoi sviluppatori nemici, se ne andranno o diventeranno molto più pericolosi che se lavorassi con loro.

Le misure ragionevoli includono non consentire dump del database di produzione sui laptop di sviluppo (solo testare database con dati fasulli). In questo modo, se il laptop viene rubato, nessun dato riservato viene perso. Ma se lo sviluppatore ha bisogno di eseguire il debug, deve comunque accedere alle copie del database di produzione da qualche parte in un ambiente controllato.

Limitare l'accesso a Internet è ridicolo. Potresti anche richiedere a tutti i tuoi sviluppatori di scrivere il loro codice su carta con una penna d'oca e inchiostro.

Parla con i tuoi sviluppatori, trova un modo per dare loro ciò di cui hanno bisogno per svolgere il loro lavoro mantenendo il sicurezza di cui hai bisogno per mantenere al sicuro i dati importanti. I dettagli dipenderanno dalla tua azienda e dai dati con cui hai a che fare. Ma non è probabile che richieda misure draconiane.

Tranne che è il Business che definisce il tuo ruolo e limita i tuoi strumenti in base alle loro esigenze e obiettivi.Se vogliono che tu usi carta e penna, allora è la loro chiamata.
@schroeder - e se vuoi trovare un altro lavoro, allora questa è la tua chiamata.
Questo è un buon punto.
@schroeder True.Le aziende hanno il diritto di essere stupide quanto vogliono, ma le aziende stupide non dovrebbero aspettarsi altro che sviluppatori stupidi e un sacco di software guasto.
Se un laptop rubato è un problema, il disco non dovrebbe essere crittografato?
@Andy sì, la crittografia del disco è assolutamente un'altra buona misura sensata.
Lucas Kauffman
2016-08-30 20:31:02 UTC
view on stackexchange narkive permalink

Un tecnico della sicurezza non effettua la manutenzione dei computer, questo è ciò che fa il service desk. Nel tuo caso gli richiederai di installare tre strumenti:

  • un hypervisor
  • docker
  • software di database

Da lì può aggiungere e rimuovere macchine per lo sviluppo quanto vuole (non dovrebbe richiedere l'intervento di un tecnico specializzato). Per quanto riguarda il tuo "contenitore canaglia". In generale, non distribuisci contenitori su un altro server, distribuisci file Docker che estraggono codice da un repository di codice o scarichi un binario firmato di codice compilato (che è ancora più sicuro).

In termini di canaglia posso solo immaginare un attaccante che ottiene l'accesso e aggiunge altro codice. Questo è il motivo per cui è necessario che la sicurezza sia incorporata in ogni fase dell'SDLC per garantire che tutto il codice sia almeno rivisto o passato attraverso un altro sviluppatore prima di spingerlo su per l'albero. Inoltre, puoi anche integrare scanner di codici per eseguire automaticamente la scansione di matrici di codice sospette o vulnerabili.

Sul terzo punto, in realtà dipende. Aziende come Riot Games stanno facendo esattamente questo. Hanno scoperto che limitare gli individui intelligenti li porterà a eludere i controlli. Così hanno deciso di utilizzare regole semplici e una formazione di sensibilizzazione efficace per assicurarsi di mantenere la sicurezza nella parte posteriore della loro mente e hanno concesso pieni privilegi amministrativi. Distribuirono piccole carte che indicavano cosa avrebbero dovuto prendersi cura e fare attenzione.

Devo dire che mi piace * davvero * l'idea di fornire formazione invece di bloccare i computer.I bravi sviluppatori sono interessati alla tecnologia e una buona formazione su come le minacce alla sicurezza possono influenzare le loro macchine potrebbe essere la cosa giusta per catturare il loro interesse.La parte difficile è come costruire questa formazione, di certo non può essere la stessa formazione fornita ad altre parti dell'azienda.
Hai una citazione per il tuo commento di Riot Games?Ho il sospetto che sarà nel loro blog di ingegneria
Binari firmati per i contenitori?Haha, mi chiedo quante persone lo stiano facendo in pratica.Scommetto che la maggior parte dei contenitori comporta il download di uno script di shell da un sito Web di terze parti casuale su HTTP di testo normale per configurare una sorta di confusione node.js di nuova concezione.
@DanPantry parte del discorso che hanno tenuto a Brucon
@MattiVirkkunen Meglio ancora, copia / incolla da SO.
@MattiVirkkunen suona come una battuta di * [Hitler usa Docker] (https://www.youtube.com/watch?v=PivpCKEiQOQ) *."Chi diavolo usa i contenitori pubblici di DockerHub? Per quanto ne sai, sono stati creati da hacker russi! Potresti anche` curl | sudo bash` "
Martijn Heemels
2016-09-02 02:21:53 UTC
view on stackexchange narkive permalink

Diamo ai nostri sviluppatori l'accesso come amministratore sui loro computer e facciamo loro sapere quali sono le regole. La maggior parte esegue Linux, ma abbiamo anche alcuni sviluppatori su Windows. Sanno tutti come memorizzare i loro documenti, progetti, ecc. Sulle nostre condivisioni di file (che hanno autorizzazioni più specifiche) e inviare il loro codice sorgente al nostro server Git.

Sanno anche che non passerò molto tempo per risolvere un problema con il loro sistema operativo. Se il loro computer non funziona correttamente, spesso lo cancelleremo e reinstalleremo il sistema operativo. Le applicazioni e le impostazioni comuni vengono installate automaticamente tramite Puppet e dovranno fare il resto da soli. La maggior parte di loro ha un repository Git con dotfile (le impostazioni e le preferenze per il loro ambiente).

Il tempo che perdono in questo caso è una motivazione sufficiente per la maggior parte di loro. A loro piace portare a termine il lavoro, invece di giocherellare con la riparazione del loro sistema operativo. Se perdono un lavoro importante perché è stato archiviato solo localmente, verranno disapprovati dai colleghi e dal capo.

Non blocciamo alcun sito web o applicazione (ad eccezione di un filtro anti-malware basato su DNS ) ma hanno alcune regole della politica aziendale su cose come il software illegale. Facciamo affidamento sulla pressione dei pari per la maggior parte delle cose. Le persone che trascorrono il loro tempo su Facebook non sono produttive e non durano a lungo. Gran parte delle nostre norme si basano su un sistema di riconoscimento e sembra funzionare bene.

Vorrei che più persone avessero così tanta fiducia nei loro sviluppatori, poiché la fiducia è una relazione bilaterale.Naturalmente, ciò richiede un ottimo processo di assunzione, semplicemente non puoi permetterti di assumere uno sviluppatore incompetente.Inoltre, dovresti ** sempre ** mirare ad assumere solo sviluppatori competenti.
James_pic
2016-09-01 18:03:01 UTC
view on stackexchange narkive permalink

Questo dipende fondamentalmente dal contesto. Considera le seguenti due configurazioni, entrambe riscontrate in natura:

  • Gli sviluppatori lavorano su macchine che possiedono o hanno accesso completo, inclusa l'installazione dei propri sistemi operativi. Non ci sono restrizioni su come scrivono l'applicazione. Hanno accesso SSH ai sistemi di produzione ogni volta che sono connessi alla rete, VPN inclusa.
  • Tutto lo sviluppo viene svolto in un laboratorio di sviluppo con air gap, in cui gli sviluppatori non sono autorizzati a introdurre dispositivi elettronici. Tutti i computer hanno tutto il software consentito preinstallato. Gli elementi distribuibili vengono consegnati in modo sicuro su supporto fisico a un altro team, che è responsabile della distribuzione.

Entrambe queste configurazioni erano appropriate nel contesto, tenendo conto delle minacce che l'organizzazione doveva affrontare e delle esigenze del progetto.

Qui c'è un compromesso fondamentale. Ogni allontanamento dalla prima possibilità, verso la seconda, riduce la produttività. Chiunque abbia il controllo sull'applicazione si trova in una posizione di fiducia. Tutto ciò di cui non ti puoi fidare è qualcosa di cui dovrai fare a meno o creare un processo di consegna che qualcun altro lo faccia. Non puoi revocare la fiducia senza ridurre la produttività.

mgjk
2016-08-30 22:08:58 UTC
view on stackexchange narkive permalink

Dipende dal tipo di software che stai sviluppando e dalle dimensioni della tua organizzazione.

Per la workstation di un singolo sviluppatore rockstar in una piccola azienda, utilizzerei un'eccezione di sicurezza a livello esecutivo. I rischi (incluso il fastidio dell'IT, dei dirigenti e degli altri sviluppatori) dovrebbero essere discussi, ma alla fine, se la rockstar non ottiene ciò che vuole, probabilmente si trasferirà in un'altra azienda. Questi ragazzi non tollerano l'attrito, se lo incontrano, possono facilmente trovare posti più interessanti in cui lavorare.

Uno scenario più tipico di una uber-workstation è avere un cluster di sviluppo in cui le operazioni gestiscono la vita e morte delle VM, l'ambiente viene monitorato con IDS / IPS e l'accesso a Internet (sul cluster di sviluppo) è limitato ma aperto all'occorrenza. ad esempio, per la documentazione ... niente di sbagliato nell'inserire nella whitelist ogni fonte tecnologica correlata al tuo sforzo di sviluppo. Gli sviluppatori non possono comunque inserire il codice volenti o nolenti. Devono documentare le loro fonti e verificare le licenze strane.

Se riesci a ottenere l'orecchio della rockstar, può aiutarti a spingere i requisiti a operatori e dirigenti e ad architettare il cluster e i processi e istruire i team di sviluppo sulla necessità.

Se c'è un budget e lo sviluppatore è riluttante ... allora IMHO, non hai a che fare con una rockstar, ma una diva e le loro lamentele dovrebbero essere portate fino a quel rischio esecutivo signoff.

La parte difficile diventa gestire la durata della macchina e assicurarsi che i ripensamenti degli sviluppatori non diventino sistemi di produzione per sviluppatori "simili alle operazioni". Ma è molto più semplice delle VM sulle workstation degli sviluppatori.

* "niente di sbagliato nell'inserire nella whitelist ogni fonte tecnologica correlata al tuo impegno di sviluppo" * ... Passeresti tutto il tuo tempo ad aggiungere siti web alla whitelist, fino a quando lo sviluppatore non decide di trovare un posto dove ci siano meno attriti.
Dai alla tua rockstar un account amministratore separato da utilizzare esclusivamente per amministrare la sua workstation.In questo modo è isolato dall'account che usa per navigare in SE (e Dio sa quali altri siti, alcuni dei quali potrebbero contenere malware).
@LucasTrzesniewski - Se uno sviluppatore non può essere disturbato a documentare le fonti del proprio codice, sono felice di vederlo andare.I bravi sviluppatori con cui ho lavorato tendono a preferire sapere che i loro colleghi non stanno estraendo roba da repository git casuali con storie dubbie e licenze non pubblicate.BTW, * sto * parlando di piattaforme di sviluppo qui, non della loro workstation.
Oh, capisco cosa intendi ora, ho inteso "fonte" come qualsiasi sito web relativo allo sviluppo (documenti, blog, altre risorse) ... La tua posizione ha molto più senso per me ora.Forse dovresti modificare quella frase per chiarire l'intento.
Detto questo, gli sviluppatori tendono a utilizzare * molte * librerie per qualsiasi progetto non banale e (questo è importante) devono provare ancora più librerie prima di scegliere quelle che useranno alla fine.Sono favorevole all'aver definito e rivisto chiaramente le dipendenze del codice, ma l'accesso alle risorse di sviluppo caso per caso sarebbe un * importante * PITA e un impedimento al ciclo di sviluppo.
È strano accedere ai documenti, ai blog, ecc. * Dal * cluster di sviluppo perché gli sviluppatori di solito non usano l'accesso GUI a quelle macchine.La loro postazione di lavoro è una storia diversa.Di solito do loro pieno accesso e proibisco loro di rimuovere determinati controlli aziendali come strumenti di controllo delle licenze, antivirus, ecc. (Se necessario) tramite la politica aziendale e la formazione.Dovrebbero trasferire la libreria veramente scadente e non attendibile su una VM locale nella sandbox prima ancora di metterla nel cluster di sviluppo.Se non sono sicuri di farlo, non dovrebbero valutarlo da soli.
"Gli sviluppatori di solito non usano l'accesso GUI a queste macchine" Questo vale solo nel mondo Linux.
Gli sviluppatori "rockstar" sono una piaga.Se qualcuno è così a testa alta da non poter lavorare con restrizioni / limiti ragionevoli posti su di lui, beh ... indovina cosa richiede lavorare in una squadra?
Tim X
2016-09-02 08:44:29 UTC
view on stackexchange narkive permalink

Questa domanda solleva una serie di domande e sfide interessanti. Come qualcuno che ha lavorato come sviluppatore per molti anni e poi è passato alla sicurezza, posso apprezzare molti degli argomenti e dei punti di vista espressi nelle risposte e nei commenti. Sfortunatamente, non esiste una risposta definitiva perché la soluzione corretta dipende dal contesto, dall'esposizione al rischio e dalla propensione al rischio dell'organizzazione.

La sicurezza non è qualcosa che puoi misurare in termini assoluti. Ogni volta che vieni ad una persona di sicurezza acrossa che parla costantemente in termini assoluti e insiste sull'applicazione di politiche specifiche indipendentemente da qualsiasi altra cosa sia inesperta o incompetente. Il ruolo dell'ingegnere della sicurezza è quello di facilitare i processi aziendali, non di ostacolarli e di garantire che le decisioni aziendali siano prese informate dai rischi per la sicurezza pertinenti. Un buon ingegnere della sicurezza saprà che qualsiasi politica che impedisca al personale di svolgere il proprio lavoro fallirà inevitabilmente. Il personale troverà il modo di aggirare la politica. Il più delle volte, questi work-around saranno ancora meno sicuri. È responsabilità del responsabile della sicurezza comprendere i vari ruoli all'interno dell'organizzazione e garantire che le politiche siano strutturate in modo tale da non solo supportare ciò che il ruolo richiede, ma incoraggiare buone pratiche e scoraggiare quelle cattive. Questo può essere difficile, soprattutto nelle grandi organizzazioni. Allo stesso tempo, gli sviluppatori e gli altri all'interno dell'organizzazione devono anche riconoscere che potrebbero non avere tutte le informazioni rilevanti per capire perché sono necessarie determinate politiche. Troppo spesso, gli sviluppatori e altri vedono l'ingegnere della sicurezza come un ostacolo o un burocrate interferente che non capisce di cosa ha bisogno per portare a termine il proprio lavoro.

Il più delle volte, il modo per affrontare questi problemi è attraverso la comunicazione. Ho avuto spesso sviluppatori che sono venuti da me frustrati perché alcune politiche che considerano inutili si stanno intromettendo. Una volta che ci siamo seduti e discutiamo del problema, una serie di cose tipicamente accadono;

  • Lo sviluppatore ha interpretato male la politica o ha letto in essa presupposti errati e ha dato l'impressione che la politica prevenga qualcosa che non fa. Ciò si tradurrà spesso in una revisione della politica per migliorare la chiarezza
  • Il tecnico della sicurezza viene a conoscenza di un requisito aziendale legittimo che deve essere soddisfatto in modo da mantenere adeguati controlli di sicurezza. Ciò si tradurrà probabilmente in una revisione della politica.
  • Lo sviluppatore viene a conoscenza di altri requisiti o rischi che inizialmente non gli erano evidenti. Ciò spesso porta lo sviluppatore a identificare soluzioni alternative per soddisfare i propri requisiti
  • Viene identificato un problema che non può essere risolto in modo soddisfacente per nessuna delle parti in un modo che rientra nella propensione al rischio accettata dell'organizzazione (ovvero livelli di rischio accettati ). Questa situazione si tradurrà in genere nel problema che viene inoltrato al livello esecutivo per una decisione. La difficoltà di fare ciò dipenderà dalle dimensioni e dalla struttura dell'organizzazione. Una volta presa la decisione, sia lo sviluppatore che il tecnico della sicurezza devono lavorare entro i parametri impostati dal dirigente per trovare la migliore soluzione possibile.

Ci sono state numerose risposte critiche delle politiche che hanno un impatto negativo sul loro livello di produttività. Sebbene qualsiasi sviluppatore dovrebbe sollevare tali preoccupazioni, alla fine della giornata, deve accettare qualsiasi decisione presa dal dirigente o cercare un datore di lavoro alternativo. Presumere che tu sappia meglio o che tu abbia qualche diritto speciale di ignorare la politica è arrogante e pericoloso sia per te che per il tuo datore di lavoro. Se sei convinto di avere ragione, dovresti riuscire a convincere la direzione. Se non puoi, o non sei bravo come pensi, non hai capacità di comunicazione adeguate per presentare un argomento convincente, non possiedi tutte le informazioni o stai lavorando per un datore di lavoro incompetente. Dopo 35 anni nel settore e nonostante quello che Dilbert può indurti a pensare, quest'ultimo non è così comune come potresti aspettarti. La fonte più comune di conflitto in quest'area è dovuta alla scarsa comunicazione e alla mancanza di informazioni.

Un errore comune tra gli sviluppatori (e uno di cui sono stato colpevole) è concentrarsi così tanto sul tuo compito o obiettivo specifico che ti manca l'immagine più grande che i team leader, i manager e il dirigente devono anche gestire. Ambienti in cui agli sviluppatori è stata concessa molta libertà e fiducia, il che ha portato a livelli elevati di produttività, ma ha portato ad altri problemi: la situazione in cui uno sviluppatore chiave ha lasciato o è ammalato per un lungo periodo di tempo e nessuno può riprendere funziona perché è tutto sul loro desktop configurato e gestito in modo univoco o sta tentando di eseguire il debug di un problema difficile che non può essere facilmente riprodotto a causa della mancanza di impostazioni / configurazioni standard, o di gestire un'eventuale violazione della sicurezza dovuta a uno sviluppatore che ha lasciato accidentalmente alcuni servizi in esecuzione che erano in fase di sviluppo e mancavano controlli di sicurezza standard. Lo sviluppatore Beinga focalizzato su un dominio o una tecnologia specifica non garantisce anche la competenza in tutto il resto. Alcuni dei migliori sviluppatori con cui abbia mai lavorato sono stati tra i peggiori quando si tratta di sicurezza e / o gestione del loro ambiente. Ciò è probabilmente in parte dovuto alla focalizzazione su un problema specifico e più probabilmente semplicemente a causa della capacità. Nessuno di noi ha la capacità di attraversare tutto e dobbiamo riconoscere che a volte è importante fare riferimento a coloro che sono specializzati in aree in cui non siamo.

L'ambiente in evoluzione

Uno dei motivi principali per le politiche che limitano ciò che può essere fatto sul desktop è dovuto al presupposto sottostante che i desktop all'interno della rete locale hanno un livello di fiducia più elevato di desktop fuori dalla rete. Tradizionalmente, si trovano all'interno del firewall e altro perimetro difese e avere accesso alle risorse informative. Ciò significa che rappresentano un rischio più elevato e quindi necessitano di più controlli di sicurezza. Altre ragioni per politiche / pratiche restrittive includono la standardizzazione degli ambienti, che può ridurre i costi di supporto e aumentare la coerenza (il che era particolarmente vero quando c'erano più applicazioni in cui dipendevano dalla piattaforma / dal sistema operativo - ricorda tutte quelle applicazioni orribili che richiedevano AtiveX o una versione specifica di IE).

La crescita delle macchine virtuali e dei container, dei servizi cloud e dei servizi IT di base e la maggiore capacità di rete si traducono in una serie di cambiamenti che probabilmente renderanno irrilevanti molti dei problemi sollevati in questo thread. In particolare, il passaggio alle reti zero-trust probabilmente vedrà cambiamenti significativi. In una rete zero trust, i dispositivi all'interno della rete non sono visti come dotati di uno speciale livello aggiuntivo di fiducia rispetto ai dispositivi esterni alla rete. Non ti viene fornita la possibilità di accedere alle risorse semplicemente perché hai l'indirizzo IP corretto. Invece, la fiducia si basa più sulla combinazione di informazioni sull'utente e sul dispositivo. La policy che determina a cosa puoi accedere è determinata dalle tue credenziali e dal dispositivo da cui ti connetti. La posizione in cui si trova quel dispositivo è irrilevante. Questo è anche un modello che si adatta molto meglio alla crescita del BYOD e alla maggiore mobilità della forza lavoro e alla crescente domanda di assumere personale in base alle capacità / abilità e alla posizione geografica.

Una volta rimosso il livello di "fiducia" associato al dispositivo, non è necessario controllare ciò che è possibile applicare al dispositivo. Potresti ancora richiedere dispositivi per supportare profili specifici, ad esempio puoi rifiutare di consentire a chiunque di accedere alle tue risorse se il suo dispositivo esegue Windows XPetc. Tuttavia, sei meno preoccupato per il dispositivo. Allo stesso modo, non dovrai lavorare tanto direttamente sul dispositivo. In una certa misura, il dispositivo lo sarà più simile a un thin client. Utilizzerai VM e container ospitati in remoto. Questo di per sé non risolverà tutti i problemi e potrebbe essere visto come il semplice spostamento di alcuni di essi dal desktop locale alla VM o al contenitore remoto. Tuttavia, una volta combinato questo con varie orchestrazioni in stile DevOps, molti dei motivi per cui gli sviluppatori potrebbero aver bisogno di privilegi avanzati vengono rimossi. Ad esempio, non è possibile richiedere alcun accesso ai sistemi di produzione. La promozione del nuovo codice verrà gestita attraverso un sistema di integrazione continua orchestrato e quando sarà necessario eseguire il debug di un problema, verrà fornita una VM o un contenitore che è un clone esatto del sistema di produzione.

Nessuna di queste modifiche lo farà. risolvono magicamente qualsiasi cosa, ma forniranno una gamma più ampia di strumenti e soluzioni più flessibili con potenzialmente meno complessità. La riduzione della complessità renderà la gestione della sicurezza molto più semplice. Una gestione più semplice della sicurezza porterà a restrizioni o impedimenti meno involontari o non necessari allo svolgimento delle mansioni lavorative. Tuttavia, alla fine della giornata, i requisiti chiave sono

  • Il riconoscimento da parte di tutti che una taglia non va bene per tutti. Tutto deve essere valutato nel contesto dell'organizzazione.
  • Disponibilità a mettere al primo posto le esigenze dell'organizzazione.
  • Buona comunicazione bidirezionale.
  • Disponibilità per tutte le parti a lavorare verso soluzioni reciprocamente accettabili e
  • Disponibilità per tutte le parti a scendere a compromessi
  • Disponibilità a lavorare all'interno del sistema e adattare il flusso di lavoro o modalità preferita di fare le cose per adattarle ai requisiti dell'organizzazione
E non iniziamo nemmeno a capire quanto siano importanti le reti zero-trust quando i dispositivi IoT sono in circolazione.Quella "tazza che twitta" è spesso così mal costruita da infrangere ogni ragionevole misura di sicurezza.Mi chiedo solo come verranno gestite le * informazioni sull'utente e sul dispositivo * per dare accesso a un sistema.Fingerprinting passivo (simile al PF di openBSD forse?)
Sì, l'IoT è una preoccupazione ed è sicuramente qualcosa che accelererà il passaggio alle reti zero-trust.La sfida è l'autenticazione dell'utente: come possiamo renderla utilizzabile e sicura ed evitare "vasi di miele" di dati preziosi.Una sorta di input biometrico quasi certo.Authn è il Santo Graal per le TIC allo stesso modo in cui lo stoccaggio di energia lo è per l'energia solare.Una volta che avremo rotto quelle noci, molto cambierà.
Lucas
2016-09-21 21:42:52 UTC
view on stackexchange narkive permalink

Sono anche uno sviluppatore e questa è la mia opinione:

Il problema è peggiore di quanto pensi

Non c'è cucchiaio

Lo sviluppo non riguarda Software. Lo sviluppo riguarda la creazione o il miglioramento di prodotti, servizi e processi. Il software è un ingranaggio importante ma non è l'unico. I bravi sviluppatori definiranno i processi in senso più ampio per sapere quali componenti software creare e quale processo umano, logistico e di gestione del rischio proporre. Non ha alcun senso sviluppare un sistema software che dipenda da processi umani, logistici e cartacei che non vengono implementati.

Non ci sono regole per lo sviluppo perché lo sviluppo sta definendo le regole. Questo è ciò che rende lo sviluppo l'ambiente peggiore da proteggere.

Ma questo non significa che alcuni controlli non dovrebbero essere stabiliti. Al contrario, molti controlli dovrebbero essere impostati dallo stesso team di sviluppo.

Processo di progettazione

Ci sono aziende che sostengono la separazione tra business e tecnologia in un processo dall'alto verso il basso. Questo è in realtà molto popolare perché suggerisce che gli uomini d'affari senza conoscenze tecniche dovrebbero essere in cima. I pigri lo adorano . Ma in ingegneria un design top-down semplicemente non funziona. Feyman (1985) ha scritto un bell'articolo a riguardo nella commissione presidenziale che ha analizzato l'esplosione del Challenger. Fondamentalmente l'ingegnerizzazione dei processi top-down alla fine distrugge l'azienda. E la mia esperienza di mercato rafforza questa comprensione.

L'esplosione del Challenger è un ottimo esempio. I dirigenti della Nasa testimoniano davanti alla telecamera su una commissione d'inchiesta di aver sviluppato una gomma che può rimanere flessibile sotto i 60 gradi sotto lo zero. Cosa che è stata contraddetta da un semplice esperimento fisico di scuola superiore fatto da uno dei commissari (mettere il componente in gomma in acqua ghiacciata pressato da una pinza). Questo è stato un ottimo esempio perché questo componente in gomma doveva essere flessibile affinché il booster non esplodesse; poiché aveva bisogno delle temperature estive per farlo, il booster funzionava solo in estate. Una caratteristica di un singolo componente definisce una caratteristica visibile dell'intero prodotto che è molto limitante.

L'ingegneria dovrebbe avvenire dal basso verso l'alto perché è necessario conoscere i limiti e le debolezze di ogni componente per elaborare processi per mitigarli . Il più delle volte, i processi di mitigazione non sono software e incideranno sul costo del prodotto. Ciò significa che le caratteristiche e le limitazioni dei singoli componenti definiranno le caratteristiche dei prodotti, servizi e processi.

I processi top-down sono fondamentalmente interrotti. Molte aziende che adottano questa filosofia sulla carta hanno ancora un certo successo di mercato. Ma quando si scende e si studiano i loro progetti più grandi e di maggior successo, si scopre che sono stati condotti al di fuori delle normali regole aziendali. I maggiori successi si ottengono quando una persona che ha una profonda conoscenza ingegneristica e una visione del mercato è informalmente autorizzata. Poiché ciò avviene in modo informale, la direzione ritiene che il processo dall'alto verso il basso funzioni. Dicono che tutte le altre squadre sono incompetenti. Chiudere un occhio sul fatto che lo schema iniziale del progetto quando è uscito dalla "fase superiore" è stato completamente ignorato e non descrive i prodotti, i servizi e i processi realizzati.

Il tuo manager può definire che progetterai un dispositivo di teletrasporto entro la fine del mese perché ha concluso che ciò consentirà un elevato profitto nel settore dei viaggi ... ma ciò non lo realizzerà. I progetti dall'alto verso il basso sono così, stabiliscono aspettative che non sono tecnologicamente valide.

Non fraintendetemi, è bello vedere il problema da molti punti di vista. Bottom-up, Top-down, SWOT e altro sono salutari per l'analisi, ma il vero sforzo di ingegneria è dal basso verso l'alto. Non esiste un vero obiettivo senza la fattibilità tecnica.

Sicurezza nello sviluppo

Dobbiamo ricordare che gli sviluppatori di software cambieranno regolarmente il software aziendale e, in questo modo, potranno: cambiare ciò che appare sullo schermo di chiunque, inviare e-mail automatizzate a chiunque, inclusi loro stessi, o aprire backdoor per fare ciò che vogliono. Ciò significa che un criminale assunto come sviluppatore può arrecare danni significativi all'azienda.

Peggio ancora, ci sono molte aziende che non impongono la provenienza di un repository di codice sorgente e quindi lo sviluppatore assunto può fornire un binario diverso dalla sorgente fornita. Ciò consente agli sviluppatori criminali di dirottare i sistemi aziendali, se non vengono assunti, le cose smetteranno di funzionare presto.

Per me la sicurezza dello sviluppo dovrebbe concentrarsi su:

  • Controllo della versione del codice sorgente : per garantire che il codice sorgente e i componenti di terze parti necessari siano archiviati in un luogo sicuro.
  • Divisione strategica del lavoro : junior e temporanea gli sviluppatori devono avere un accesso limitato al codice sorgente e ai dati. Hanno solo bisogno di accedere ai componenti che stanno cambiando per evitare che uno sviluppatore junior sia in grado di comprendere il funzionamento interno di tutti i sistemi ed essere in grado di sfruttarlo.
  • Fidati degli sviluppatori principali : gli sviluppatori senior / core dovranno sapere tutto, avere accesso a tutto, pianificare e distribuire le attività e diagnosticare problemi gravi. Questo nucleo deve avere accesso a tutto, sia nello sviluppo che nella produzione. Sono i tuoi partner nello sviluppo delle politiche di sicurezza. Dobbiamo accettare che gli sviluppatori principali siano i proprietari dell'azienda. Il mio vecchio capo diceva: "siamo fortunati che Lucas sia dalla nostra parte, dall'altra ci distruggerebbe". Gli sviluppatori principali possono causare molti danni se lo desiderano e non esistono firewall e controlli di produzione che possano impedirlo.
  • Separa l'ambiente tramite firewall : separa la tua rete di sviluppo, da la tua rete di test, dalla tua rete di produzione. Su un'azienda ho definito la rete 10.1. come sviluppo, 10.2. come test e 10.3. come produzione. Le reti 10.2 e 10.3 ricevono codice solo tramite il CVS aziendale e le creano automaticamente su comando admin. Sebbene fosse una piccola startup e io fossi nella produzione e nei team di sviluppo, ho fatto alcune burocrazie per evitare i miei errori (gli sviluppatori possono essere i tuoi migliori alleati). Ho anche cambiato i colori del terminale in base alla rete: quando mi collegavo a un server di produzione lo sfondo del terminale era rosso, il test era giallo e lo sviluppo verde. Poiché tutti i miei server utilizzavano la stessa configurazione, era facile confonderli se il prompt era aperto. In base alla mia esperienza, la maggior parte dei problemi deriva da software mal testato e nuove installazioni di software. Per essere chiari: dove ti trovi è una potente funzionalità di sicurezza secondo me. Non ha nulla a che fare con l'accesso, ma è la sicurezza.
  • Assumere un esperto sviluppatore di test : l'aspetto chiave del test è disporre di grandi quantità di buoni dati simulati che siano significativi per i problemi che l'azienda deve affrontare. Le simulazioni Monte-Carlo sono utili per generare set di dati di grandi dimensioni che hanno un significato per altri sviluppatori e possono portare a software e processi più forti e resilienti. Per me non ci sono errori di "produzione", la colpa è sempre dello sviluppatore. Le attività di manutenzione e gli imprevisti devono essere scritti. Il software deve essere resiliente.
  • Revisione del codice sorgente : chiedi alle persone di rivedere il codice sorgente prima di accettare la modifica. Tutti i progetti dovrebbero essere ramificati sul controllo del codice sorgente e l'unione dovrebbe essere rivista. La revisione del codice sorgente dovrebbe preoccuparsi solo del rilevamento del malware, dell'escalation degli accessi, dei profili di accesso e di una buona spiegazione di cosa significa e dovrebbe fare il codice sorgente. La qualità del codice sarà assicurata dal test, non dalla revisione del codice sorgente. Puoi vederlo in azione nella maggior parte dei progetti open source.
  • I test delle policy di test sono molto più una cultura aziendale che un framework. Alcune aziende adottano framework di mercato, eseguono alcuni test, ma la qualità del loro codice è pessima. Ciò accade perché hai bisogno di persone in grado di progettare test significativi. In realtà lo sviluppo deve diventare test driven. Non conosco altro modo sicuro di sviluppo. E una cosa curiosa è che anche gli esseri umani, gli acquisti e le consulenze devono essere testati. I fornitori spesso affermano che i loro prodotti funzionano in modo impeccabile, ma non ho ancora trovato un prodotto impeccabile.
  • Le norme non hanno senso se non vengono monitorate . Una società che conosco ha una burocrazia secondo cui ogni tabella di database dovrebbe avere una descrizione a livello di attributo. Il 95% degli attributi è descritto come "il $ {nome attributo} di $ {nome tabella}". Non spiega cosa sia realmente l'attributo, quali valori possono contenere e cose del genere.
  • Retribuzione e ambiente di lavoro adeguati . Per avere buoni sviluppatori, sia per abilità che per personalità, devi avere buone politiche di compensazione. Il denaro è importante, ovviamente, ma non è sufficiente. Devi anche avere prospettiva / stabilità, vero riconoscimento e un buon ambiente di lavoro. Ad esempio, invece in un ufficio di sviluppo a New York dove le persone vivono in piccoli appartamenti, puoi scegliere una città più piccola dove lo stesso compenso consente una casa più grande e una maggiore vicinanza al lavoro. Computer più grandi, buoni laboratori sono anche un vantaggio per gli appassionati di tecnologia.
  • Sicurezza dei dati molte attività richiedono dati di produzione sensibili e dovrebbero essere accessibili in un laboratorio speciale. A meno che le informazioni non siano pubbliche o non sensibili, forse la migliore politica è mettere i laboratori in buoni quartieri con accesso fisico controllato. Consentire l'inserimento solo di alcuni dati simulati su laptop personali e componenti non sensibili. È possibile. Ad esempio, ho sviluppato un archivio di dati di 4,5 miliardi di record con accesso pesante per un'azienda. L'ho fatto a casa mia e non ho utilizzato assolutamente dati aziendali a tal fine. Quando ho inviato il codice, ha funzionato come previsto al primo tentativo. Oltre ai guasti hardware e alla migrazione degli ambienti di produzione, abbiamo il 100% di disponibilità in 10 anni. Il rischio che lo sviluppatore porti con sé il codice sorgente non è rilevante. Questo particolare sistema mi ha richiesto 3 mesi per sviluppare, gran parte di questo tempo è stato per capire i limiti delle prestazioni dei componenti. Questa ora è conoscenza dentro la mia testa. Anche senza il codice sorgente posso sviluppare nuovamente questa soluzione in circa una settimana.
  • I registri efficaci sono importanti per conoscere tutti coloro che hanno fatto qualcosa. La cosa migliore qui è che i log siano generati da un framework, registrando per schermate dettagliate di breve durata, per tempi di accesso e attività più lunghi e ancora più lunghi i log aziendali. I miei sistemi critici registrano ogni volta che si accede a una schermata (incluso il design dello schermo). Alcune delle risorse critiche dovrebbero essere registrate da un trigger sul database stesso e le tabelle o le risorse critiche dovrebbero essere contrassegnate per il controllo del codice sorgente.
    - Lo screening del log è difficile da eseguire manualmente. Scopri come creare filtri sui log per vedere le cose critiche. Un filtro molto utile è incrociare i rapporti sui reclami con l'accesso e le attività degli utenti. Se hai registri abbastanza buoni vedrai delle coincidenze. Ad esempio: prima di un problema l'utente1 effettua sempre l'accesso.

Informazioni sul mancato accesso alla produzione

Le regole che richiedono agli sviluppatori di non accedere ai sistemi di produzione poiché gli utenti sono lì per evitare che gli sviluppatori sottoporre il codice per mostrare al proprio utente le informazioni privilegiate. Penso che questa sia una misura di sicurezza molto, molto debole e facile da rilevare nell'audit del codice sorgente. Esistono diversi modi per aggirare il problema:

  • uno sviluppatore più un dipendente poco retribuito;
  • si invia un'e-mail;
  • apre back-door nel sistema.

L'audit del codice sorgente alla ricerca di backdoor, escalation di accesso e malware sembra più produttivo. Permette di identificare i cattivi sviluppatori quando stanno testando i loro exploit e di licenziarli. Ovviamente uno sviluppatore esperto può nascondere un exploit in bella vista, quindi è importante usare linguaggi e nomi di variabili chiari e chiari. Ricorrere a soluzioni strane solo nei punti documentati delle applicazioni che richiedono prestazioni speciali o offuscamento. Ad esempio, 1 << 4 è uguale a 1 * 16. Ciò avrebbe senso solo se il linguaggio non esegue questa ottimizzazione da solo e il punto in cui si verifica è un collo di bottiglia delle prestazioni. Linguaggi troppo simbolici fanno male proprio per questa stessa ragione. Il codice sorgente dovrebbe essere leggibile da qualsiasi smanettone.

Il problema è peggiore di quanto pensi

I danni più semplici e peggiori che uno sviluppatore può causare non sono legati all'installazione dello strumento. Anche se l'ambiente di sviluppo è gestito, farà poca differenza se l'azienda non dispone di firewall potenti, repository di codice sorgente, build basati esclusivamente sui repository di codice sorgente e revisione del codice.

È stato un grande sforzo scriverlo (+1 per impegno), ma devo sostenere che sei fortunato perché parlo correntemente il portoghese.Ho visto questo tipo di errori di concordanza più e più volte, probabilmente ho risolto la maggior parte di essi.La risposta inizia abbastanza bene ma poi va in discesa con il materiale del codice sorgente, e poi migliora un po 'alla fine.Tuttavia, soprattutto, hai dimenticato il problema principale per cui le persone usano i computer forniti dall'azienda: cosa succede se uno sviluppatore ottiene un trojan?Le sottoreti 10.1, 10.2, 10.3 non ti proteggeranno sicuramente da un aggressore competente in quello scenario.
Grazie Grochmal.Succede anche in portoghese, le mie prime bozze tendono a creare confusione in alcune parti perché le scrivo troppo velocemente.Grazie per la modifica.
La separazione di rete deve avere esattamente le stesse configurazioni in entrambe le reti ad eccezione del secondo numero dell'IP.La prevedibilità consente migliori regole del firewall e migliori script per spostare le cose intorno.L'ordinamento aiuta contro i trojan nelle reti di test e di produzione se combinato con i server Linux e le politiche per evitare componenti esterni.
Un trojan non è un rischio specifico per lo sviluppo, se lo sviluppatore ha accesso alle schermate della tua applicazione, un trojan lo avrà.Come qualsiasi altro utente.Per mitigare il rischio di trojan effettuo personalmente la ricerca dei componenti all'interno di una VM.
TTT
2016-08-31 22:39:05 UTC
view on stackexchange narkive permalink

In qualità di consulente ho lavorato per molte aziende diverse, e solo 2 di loro non concedevano agli sviluppatori l'accesso amministrativo alle loro macchine; una era una piccola azienda, l'altra era un'azienda molto grande.

Nella piccola azienda ho richiesto l'accesso come amministratore, ho spiegato il motivo per circa 60 secondi e l'ho ricevuto subito.

Alla grande azienda ho richiesto l'accesso come amministratore e mi è stato detto che anche se sono d'accordo che dovrei averlo, la politica aziendale lo vieta e non possono cambiarlo. Quindi uno dei ragazzi IT è venuto e ha creato un account di amministratore locale sulla mia macchina e mi ha fatto impostare la password. Da quel momento in poi, ogni volta che avevo bisogno di essere un amministratore, potevo accedere alla macchina come amministratore locale, o semplicemente usare runas per avviare Visual Studio o qualsiasi servizio / applicazione di cui avevo bisogno per eseguire con un utente amministratore (IIS, ad esempio). Non è molto peggio che scegliere il built in "Esegui come amministratore"; è solo leggermente più lento, anche se fortunatamente non viene visualizzato troppo spesso.

Questa è chiaramente una soluzione "lettera della legge" progettata per ingannare i creatori di regole idiote.La buona notizia è che puoi portare a termine il lavoro, la cattiva è che se gli idioti acquisiscono un indizio, qualcuno viene licenziato.
Per breve tempo ho avuto un lavoro in cui non avevi alcun accesso amministrativo al tuo computer.Per installare qualsiasi software, dovevi inserire un ticket, sperare che fosse nell'elenco approvato o giustificarlo in qualche modo se non lo era, quindi attendere che il loro team di sicurezza accedesse in remoto e lo installasse per te.
Ho sentito voci credibili su un ambiente in cui la procedura standard in devops era quella di acquistare immediatamente più RAM e quindi P2V l'immagine del sistema originale al suo interno.La macchina interna viene utilizzata solo per la posta elettronica aziendale;tutto il resto è sulla macchina esterna.Hanno fatto passare i cavi tra i cubicoli per la loro LAN.
Ivan
2016-08-31 21:56:54 UTC
view on stackexchange narkive permalink

Ricorda che il problema di sicurezza più grande qui è l'esfiltrazione di IP, non il malware. Si spera che tu abbia IDS / IPS in atto per gestire quest'ultimo, il che dovrebbe renderlo un non problema.

Puoi cavartela dando accesso amministratore alle apparecchiature di sviluppo, a condizione che tu abbia in atto quanto segue:

  • Anti-eDLP (rete, USB, ecc.)
  • IDS / IPS
  • Proxy aziendale autenticato da MITM NTLM attraverso il quale si forzano tutte le connessioni e si monitorano per violazioni DLP
  • Nega tutto il software di virtualizzazione sui desktop. Se hai bisogno di una VM, eseguine il provisioning da un cloud gestito in cui tutte le VM eseguono la stessa immagine obsoleta e standardizzata con gli strumenti di cui sopra.
  • Blocca l'accesso ai repository software esterni a livello di rete (questo paralizza pip, git, maven, apt, yast, zypper e tutto il resto)
  • Blocca l'accesso a github, codeplex e tutti gli altri 150 siti di code-sharing a livello di rete
  • Blocca l'accesso a tutti i 9000+ siti di condivisione di file a livello di rete
  • Blocca l'accesso al P2P ... ecc ...

Il mio datore di lavoro fa tutto questo e altro ancora. Parecchi colleghi finiscono comunque per sviluppare la propria attrezzatura personale dopo l'orario di lavoro a casa e lanciarla indietro oltre la recinzione attraverso canali laterali solo per aggirare l'infrastruttura paralizzata. Personalmente preferirei passare le mie serate a bere e sognare di overdose di tranquillanti per cani piuttosto che sprecare altre 20 ore non documentate facendo qualcosa che mi farebbe comunque licenziare.

Consideriamo l'informatica (e per estensione, l'ingegneria del software ) una scienza. Gli esperimenti scientifici vengono condotti in condizioni sterili per tenere sotto controllo le variabili. Non è scientifico svilupparsi in un ambiente paralizzato in cui le cose non si comportano come previsto a causa di fattori ambientali. Posso dirti per esperienza che non ottieni software ben progettato ... tutto ciò che è sviluppato internamente è guasto, il che porta a una maggiore spesa per soluzioni di terze parti.

Gli sviluppatori devono assolutamente disporre di un ambiente sterile in cui sviluppare. Non posso dirti quante volte i vari controlli di sicurezza hanno introdotto i gremlin nell'architettura di sviluppo e produzione, quindi un ambiente di sviluppo gestito, sterile e basato su cloud è davvero il unico modo per andare. "Ha funzionato in laboratorio, il problema deve essere qualcosa di esterno."

Devi solo assicurarti che le VM che consenti loro di eseguire il provisioning non siano anemiche e devi automatizzare il processo di provisioning come OpenStack o AWS in modo che gli sviluppatori non stiano aspettando giorni per soddisfare le esigenze di scalabilità. Averli tutti gestiti centralmente offre una grande quantità di controllo di auditing e, francamente, offre agli sviluppatori prestazioni migliori di quelle che otterrebbero comunque con le proprie apparecchiature.

Santo cielo, quelle regole del datore di lavoro sono folli.
@Dan Pantry Sì, non sto scherzando ... Vorrei poter dire che è perché lavoro in un posto alla moda come l'NSA ma no, siamo solo sull'orlo arrugginito dell'innovazione.
Tyler Durden
2016-09-02 23:52:05 UTC
view on stackexchange narkive permalink

Sono un fan dell'opzione n. 2: avere computer separati.

Consentire alle macchine aziendali con informazioni proprietarie di essere connesse a Internet apre la porta agli hacker. Inoltre, rende molto più facile per i dipendenti esfiltrare i dati aziendali per scopi illegittimi.

Se il dipendente deve utilizzare una macchina speciale per accedere alle risorse Internet, crea un percorso controllato per l'infiltrazione e l'esfiltrazione dei dati che è molto sicuro. Inoltre, scoraggia i dipendenti dal navigare pigramente sul Web o perdere tempo sui forum Internet, come sto facendo ora.

Drunken Code Monkey
2016-09-05 09:44:54 UTC
view on stackexchange narkive permalink

In qualità di amministratore, questo problema viene risolto completamente e completamente tramite un approccio SaaS. Virtualizza tutti i tuoi diversi ambienti, mettili su un server rack appropriato per il numero di client e configura alcuni accessi remoti (RDP, Servizi terminal o altro ...). Ora tutto è sul server e hai solo uno di ogni ambiente da mantenere per tutti.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...