Builder vs. Breaker: gli sviluppatori fanno buoni tester di penne e viceversa

4

Gli sviluppatori fanno necessariamente buoni tester e penetratori di penetrazione viceversa?

Il motivo per cui lo chiedo è che trovo di avere molto più talento per capire come un software esistente funziona e può essere manipolato rispetto a quello che sto progettando e sviluppando personalmente.

Posso programmare e dire che ho un livello intermedio di esperienza, ma ho difficoltà a passare dall'idea al progetto finito. Sono molto più motivato e mi sento molto più in uno stato mentale di flusso quando provo per decodificare come funziona qualcosa che ho di fronte a me.

Penso che sia la stessa idea di uno scrittore o pittore che parla di quell'ansia di guardare una pagina vuota. Mi sembra che quando si lavora all'indietro da un software esistente ci siano già dei vincoli e dei contesti che mi danno qualcosa da collegare mentalmente. Mentre nello sviluppo di software che la "pagina vuota" e tutti i possibili modi di progettare e implementare qualcosa, mi fanno girare la mente e analizzare ogni possibilità.

Ho visto questo discusso nei circoli della sicurezza come costruttori contro i demolitori. L'idea che alcune persone siano semplicemente cablate per costruire cose con i tratti che favoriscono questo e altri per sottolineare cosa c'è che non va.

Nella tua esperienza questa è una cosa reale o solo una falsa dicotomia?

Quanto sono essenziali le capacità di sviluppo per i test di penetrazione?

Mi piace davvero imparare come vengono implementate le cose e non sono timido a leggere la fonte per capirlo. Mi piace scrivere script e strumenti più piccoli che hanno uno scopo specifico, ma sono molto pieni di progetti di programmazione con molte astrazioni di architettura. Trovo che finisca spesso per perdere interesse e slancio.

Quanto dovrei lasciarmi preoccupare se il mio obiettivo è il test delle penne piuttosto che una posizione di sviluppo effettiva?

    
posta MTLPhil 15.01.2014 - 00:17
fonte

2 risposte

8

In generale, per essere un buon pentestatore devi padroneggiare alcune delle abilità richieste per essere un buon programmatore. Una solida esperienza di sviluppo sui possibili errori di programmazione è molto utile, poiché un sacco di pentesting riguarda la ricerca di casi d'angolo che il programmatore non ha pensato - cioè bug. Ciò vale in entrambi i casi: un buon sviluppatore dovrebbe avere alcune capacità di pentesting perché fare codice robusto implica prendersi cura di condizioni anomale, il tipo di cose che il penttor (e potenziali attaccanti) tentano di attivare.

Ci sono aspetti dello sviluppo del software che non aiutano direttamente il pentesting; in particolare abilità strutturali come sapere come progettare un'API semplice, scorrevole ed estensibile, o essere bravo a documentare il codice.

Ci sono aspetti del pentesting che non aiutano direttamente lo sviluppo, ad es. tutto ciò che equivale a ingegneria sociale.

Per quanto riguarda i tratti psicologici, direi che non si tratta in realtà di costruire contro rottura; almeno non su essere bravi a costruire o distruggere. Si tratta più di divertirsi durante la costruzione o la rottura. Pentesting può essere frustrante, soprattutto se si è sul lato "creativo" delle persone, perché si trascorre tutto il giorno a gestire codici mal scritti e si sa che sapere si potrebbe fare molto meglio, ma non è il tuo lavoro. D'altra parte, un'intrusione riuscita in un server apparentemente robusto è intellettualmente gratificante; Pentesting è una battaglia di ingegno, in cui si combatte contro la mente degli sviluppatori, mentre lo sviluppo è una battaglia contro le leggi della fisica, che a volte può essere scoraggiante. Sviluppo o pentesting, puoi farlo per un lungo periodo solo se trovi l'attività piacevole.

Alessandro Magno era uno sviluppatore; Machiavelli era un pentester. Genghis Khan era entrambi.

    
risposta data 15.01.2014 - 00:42
fonte
4

L'Orso ha già dato una grande risposta, ma lasciatemi tentare di rispondere a questa domanda dal punto di vista di un pentito che lavora come sviluppatore.

Ci sono molti aspetti del test di penetrazione. Conosco alcuni pentesters che sono assolutamente straordinari a livello di sistema e di sicurezza a livello di rete, mentre altri sono focalizzati principalmente sulla sicurezza delle applicazioni. Nella mia esperienza, il primo di solito proviene da un supporto desktop / ingegnere di rete / background di amministratori di sistema. Questi ultimi, il più delle volte, provengono da uno sfondo di sviluppo. * Questo, per me, è stato raccontato in molti modi. Come indicato nell'altra risposta, un tester di penetrazione con uno sfondo di sviluppo è solitamente bravo a trovare difetti nel software, specialmente se hanno trascorso molto tempo nel settore - ci vuole solo un po 'di allenamento per pensare come un hacker per trovare difetti di sicurezza nel codice e nelle applicazioni. Questi ragazzi saranno anche bravi a rivedere il codice per problemi di sicurezza e a trovare soluzioni eleganti per questi difetti che uno sviluppatore altrimenti inesperto potrebbe non essere in grado di implementare.

L'altro vantaggio che le persone con la sicurezza delle applicazioni e, in generale, i penetration tester hanno con uno sfondo di sviluppo è la capacità di sviluppare i propri strumenti quando stanno testando il codice. A un certo punto, avrai a disposizione strumenti pratici per fare il tuo lavoro e dovrai hackerare il codice di qualcuno o scrivere il tuo codice per fare quello che vuoi. Mentre ho visto persone con abilità di base in Python, gli strumenti più eleganti e ben realizzati provengono da persone con uno sfondo di sviluppo classico.

Detto questo, ho visto anche alcuni sviluppatori di exploit e tecnici di reverse engineering che, pur essendo bravi a scrivere codice, non vogliono davvero farlo. Ma sono incredibili in quello che fanno e la loro conoscenza come sviluppatore rende più facile per loro invertire il codice, analizzare il malware o persino scrivere il proprio malware.

Alla fine della giornata, nella mia esperienza personale, sapere come scrivere e leggere il codice è di fondamentale importanza, soprattutto se sei interessato a entrare nella sicurezza delle applicazioni. Capire come funzionano le applicazioni ha sicuramente reso più facile per me interrompere le applicazioni.

Per riassumere, se sei bravo nella scrittura del codice, hai un vantaggio su molte persone nel campo - un sacco di buoni tipi di sicurezza delle applicazioni che conosco assolutamente suck scrivendo buon codice. Se sei più interessato a hackerare altre applicazioni per fare ciò che vuoi che facciano, continua a farlo. Se scrivere un codice da un foglio di carta bianca ti spaventa ... beh, prova a lavorarci sopra e ad acquisire sicurezza, perché non è difficile una volta acquisita esperienza. È tutto un processo di apprendimento, quindi continua ad imparare!

    
risposta data 15.01.2014 - 02:34
fonte

Leggi altre domande sui tag