La sicurezza sfrutta una fatalità? [chiuso]

0

Lo chiedo qui e non sul sito di sicurezza perché questa è una domanda su "architettura software" e "metodologie di sviluppo", che sono entrambe coperte dalle FAQ.

EDIT : sto parlando di exploit del software root / admin puramente remoto. Non parliamo di personale interno che irrompe fisicamente in laboratori / aziende / case / reti / macchine.

Ogni volta che c'è un blog o un articolo su un nuovo exploit di sicurezza ci sono un sacco di persone che scrivono fondamentalmente: "Nessun software sarà mai sicuro, ogni singolo software là fuori può essere sfruttato. tempo e finirà per sfruttare qualsiasi software di alto profilo. " Questa è una costante. Questi tipi di commenti vengono sempre modificati come pazzi e la maggior parte delle persone sembra accettarlo come un dato di fatto.

E mi chiedo davvero: è possibile utilizzare qualsiasi architettura software e metodologie di sviluppo per trovare un software sicuro o c'è qualcosa di tecnico che ci impedisce di scrivere sistemi / programmi / sistemi operativi / server sicuri?

Più ci penso, più non capisco perché non potremmo, tecnicamente, creare software sicuro al 100%. Fino in fondo dal sistema operativo e poi su: browser, plug-in ...

Nota che non sono interessato a una discussione qui: voglio sapere se tecnicamente c'è qualcosa o no che può impedire, ad esempio, un sistema operativo, di essere scritto in modo sicuro al 100% e perché è così.

Ora, se non c'è nulla tecnicamente che ci impedisca di scrivere un sistema operativo sicuro al 100% e di scrivere un server sicuro al 100%, perché non è stato fatto? Significa che la nostra architettura e le metodologie di sviluppo (e gli strumenti?) Sono profondamente errate?

    
posta Cedric Martin 26.01.2013 - 02:31
fonte

4 risposte

6

No, significa che il mondo non è sicuro. Il software, come qualsiasi altro sforzo umano, può essere violato, aggirato o fatto in altro modo. La questione non è se possiamo renderlo al 100% ma se la sicurezza sul posto rallenterà l'aggressore / lo infastidirà abbastanza da farlo temporaneamente o economicamente irrealizzabile per lui a disturbare mentre non rendendolo economicamente o temporalmente irrealizzabile per noi.

Il software non è perfetto perché gli esseri umani non sono perfetti.

    
risposta data 26.01.2013 - 02:41
fonte
4

È la complessità che ti porta: è abbastanza semplice costruire un sistema semplice al 100% a prova di errore. Il problema è che tale sistema non sarebbe molto utile. Non appena inizi a accumulare complessità, inizi a creare problemi.

Anche la più semplice applicazione web richiede l'interazione di molte parti. Ecco una lista semplificata:

  • Il sistema operativo del client
  • Il browser sul client
  • La libreria I / O di rete sul client
  • L'infrastruttura di rete del provider Internet client
  • L'infrastruttura di rete sulla strada verso il provider Internet del tuo server
  • L'infrastruttura di rete del provider Internet del server
  • Il sistema operativo del server
  • Il server delle applicazioni
  • La libreria I / O di rete sul server
  • La tua applicazione server

Se vai più a fondo, ottieni più componenti: parser XML, renderer HTML, librerie di elaborazione immagini, librerie di crittografia, librerie client di database, server RDBMS, librerie I / O su disco, librerie di espressioni regolari, librerie per l'interazione con terze parti componenti e così via.

Ora arriva la parte peggiore: un problema di sicurezza in uno qualsiasi dei tuoi livelli multipli rende il sistema globale insicuro. Lasciare che un componente si spezzi e l'intero sistema scenda. Diciamo che ognuno dei tuoi numerosi componenti è affidabile al 99,9% - questo è tra "molto buono" e "incredibile". Supponiamo che il tuo sistema sia composto da trenta componenti così affidabili. L'affidabilità complessiva del tuo sistema è quindi 0.999 ^ 30 o circa 97%. Un buon attaccante prenderebbe queste probabilità in un batter d'occhio!

Quindi la risposta alla tua domanda è che un sistema sufficientemente complesso contiene il proprio annullamento. Puoi ridurre notevolmente il rischio diminuendo la complessità, ma anche l'utilità del tuo sistema verrebbe meno.

    
risposta data 26.01.2013 - 03:51
fonte
1

Il 90% degli accessi non autorizzati proviene da persone all'interno della rete. Ragionieri scontenti, segretari annoiati, management centrale eccessivamente ambizioso ... Anche se rendi la tecnologia sicura al 100%, c'è ancora gente di cui preoccuparsi.

    
risposta data 26.01.2013 - 02:53
fonte
-2

Ho letto di più e mi sono reso conto che in realtà c'è qualche speranza. Ho modificato la domanda per far notare che stavo parlando solo di exploit puramente software, non di persone che puntavano una pistola alla tua testa e ti costringevano a dare i tuoi dati.

In questo momento c'è, in produzione (e apparentemente già usato in molti dispositivi: decine di milioni se non centinaia di milioni), un micro-kernel che è stato formalmente provato immune da:

  • buffer overflow / overruns
  • perdite di memoria
  • nessuna eccezione di puntatore nullo
  • nessun overflow aritmetico

In altre parole: è impossibile per un exploit di sicurezza accadere usando uno dei precedenti perché è stato matematicamente provato (usando un dimostratore automatico di teoremi) che è, ad esempio, impossibile attivare un buffer overflow in quel microkernel.

Questo è il primo del suo genere e mostra che c'è una via d'uscita. Apparentemente è un'area di ricerca molto attiva e sono pronto a scommettere che ne vedremo di più in futuro.

Le implicazioni sono enormi: nessun processo di userland può compiere un'escalation di privilegi che porta al controllo del microkernel.

Certamente esistono ancora altri modi per piratare il sistema fin da ora: in questo momento è solo il micro-kernel (e, parzialmente, il compilatore) che si è dimostrato resistente a questi vettori di attacco. Potrebbero esserci altri vettori di attacco che non sono ancora stati testati ma ancora ...

Dimostra che, tecnicamente, è totalmente possibile non solo creare un sistema operativo che è immune agli exploit del software, ma che, inoltre, è possibile dimostrare matematicamente che la protezione in atto non è sfruttabile.

Mi aspetto che questa area di ricerca ottenga sempre più trazione.

(*) Il dimostratore di teoremi di Isabelle / HOL ha scoperto 160 bug (che sono stati tutti corretti) nelle 7500 linee di C e 600 linee di assemblaggio nel microkernel seL4, che ora è garantito rendere impossibile, ad esempio, avere un buffer overflow (un tipico vettore di attacco) o un'eccezione di puntatore nullo nel microkernel seL4.

    
risposta data 26.01.2013 - 14:50
fonte

Leggi altre domande sui tag