Domanda:
È fondamentalmente possibile un'infrastruttura di server che la persona più intelligente non possa violare?
J.Todd
2015-08-25 08:45:06 UTC
view on stackexchange narkive permalink

TL;DR:

Forse ho esagerato con i dettagli della mia domanda, ma volevo essere sicuro che la domanda fosse chiara poiché l'argomento sembra molto ampio. Ma eccolo qui. La parola "più intelligente" ha un significato fondamentale, non letterale.

È fondamentalmente possibile un'infrastruttura di server che la persona più intelligente non possa violare?

Background:

Ho letto articoli sui server di enormi banche (o siti che imbrogliano) compromessi e in un articolo basato su un'intervista con una società di sicurezza Internet interessata al caso, uno specialista ha affermato che ci sono organizzazioni criminali altamente qualificate, soprattutto in Cina e Russia, che dispongono di vaste risorse, strumenti e alcuni dei "migliori" hacker al mondo, e questo specialista ha affermato che "non esisteva alcun sistema sulla terra" (connesso al web, ovviamente) che non potevano scendere a compromessi con le risorse a loro disposizione.

(Web-Server) La sicurezza delle informazioni è come gli scacchi:

Non sono un gran giocatore di scacchi e non sono un gran esperto di informazioni. esperto, ma sono un programmatore che scrive software per server e questo mi interessa. Ignorando qualsiasi fattore di scacchi che potrebbe annullare il mio scenario, come forse la persona che si muove per prima ha un vantaggio o qualcosa del genere, immagina la sicurezza delle informazioni come una partita di scacchi tra due dei migliori giocatori di scacchi al mondo.

Classico: Se tu ed io dovessimo giocare una partita a scacchi, quella che possiede maggiori abilità, conoscenza e intelligenza riguardo al gioco degli scacchi vincerà.

Scenario programmato 1: O forse, se giochiamo il gioco in digitale, vincerà colui che scrive il software di scacchi più intelligente.

Scenario programmato 2: Oppure, ed ecco la chiave, forse è possibile per noi essere entrambi così bravi sia negli scacchi che nella programmazione da scrivere entrambi programmi per computer che giocano a scacchi così bene che nessuno dei nostri programmi può vincere e il gioco finisce in una situazione di stallo.

Considera un'infrastruttura server, ad esempio un server bancario o un server applicazioni che deve comunicare con i client sul Web, ma che non deve consentire alle parti criminali di entrare nei suoi archivi di dati.

  • La sicurezza di questa infrastruttura server potrebbe essere simile allo Scenario programmato 1 , il che significa che qualunque cosa accada, chiunque abbia il miglior software e conoscenza della sicurezza delle informazioni, le persone che inventano le strategie di sicurezza, ad esempio, avranno sempre la possibilità di sfondare la difesa di un'infrastruttura server, non importa quanto sia sicura. Nessuna difesa perfetta è fondamentalmente possibile.

  • Oppure potrebbe essere come lo Scenario programmato 2 , in cui è fondamentalmente possibile sviluppare un'infrastruttura server che utilizza una strategia di sicurezza che (fondamentalmente) non può essere superata da un programma più intelligente. Una difesa perfetta è fondamentalmente possibile.

La domanda

Allora qual è?

Stai cercando un equilibrio ben definito in un gioco con enormi incertezze. Non c'è equilibrio statico qui, solo una corsa agli armamenti. Una corsa agli armamenti senza regole: tutto va bene, come ha detto @schroeder, barrette di cioccolato e tubi di gomma. Oh, e donne (o uomini). Il gioco è vecchio di secoli, si chiama guerra.
@DeerHunter È accettabile. Ma senza studiare molto a fondo questo argomento, senza una conoscenza approfondita dei fondamenti della sicurezza dei server, non potrei determinare personalmente se ci sono o meno principi fondamentali in gioco che potrebbero rendere possibile una situazione di stallo attraverso una strategia di sicurezza perfezionata.
"È fondamentalmente possibile un'infrastruttura di server che l'uomo più intelligente non possa violare?" Sì. Sfortunatamente, questo significa che qualcun altro, che non è così intelligente, che non è così esperto in come le cose dovrebbero funzionare, lo violerà semplicemente essendo stupido e provando cose che nessuna persona istruita considererebbe di fare, perché non è così che funziona.
@JonathanTodd Lasciate che vi risparmi un grande sforzo, allora: la risposta è "No." Finché ci saranno esseri umani che dovrebbero essere in grado di accedere ai dati, ci sarà una scappatoia da sfruttare per gli esseri umani che * non dovrebbero *.
Sì. C'è un modo per impedire che un server venga mai violato. Tutto quello che devi fare è sigillarlo all'interno di una scatola sigillata in modo permanente. Quindi, metti la scatola in una cassaforte e getta la cassaforte nella Fossa delle Marianne. E poi magari riempire quella trincea di cemento.
Negli scacchi: se giochi 1000 partite, vinci 999 e perdi 1, probabilmente sei considerato un campione. In sicurezza: se giochi a 1000 "partite", vinci 999 e ne perdi 1, sei fottuto.
@Shadur L'implicazione di quell'essere PUOI avere un sistema perfettamente sicuro fintanto che non ci sono utenti. :)
"Oh, ma devi viaggiare attraverso quei boschi ancora e ancora e devi essere fortunato ad evitare il lupo ogni volta, ma il lupo ha solo bisogno di abbastanza fortuna per trovarti una volta."
La sicurezza è l'arte di creare livelli di controllo che riducono al minimo le perdite se / quando un aspetto della sicurezza viene violato. Nel caso della sicurezza informatica, creare livelli e dividere sistemi per ridurre al minimo le perdite è una cosa complicata da fare al meglio. Ma la stratificazione della sicurezza è il modo migliore per prevenire una violazione e ridurre al minimo la perdita di dati se e quando si verifica una violazione.
Non è come gli scacchi perché la situazione non è simmetrica. È un gioco asimmetrico in cui una parte ha un grosso svantaggio sull'altra e può vincere solo se l'altra parte commette errori estremamente stupidi.
La correttezza dimostrabile è fondamentalmente possibile in informatica. Rendi il protocollo o il sistema da implementare abbastanza semplice e potrebbe essere effettivamente pratico. Ma c'è il problema: i requisiti commerciali raramente si prestano ai compromessi in termini di tempo di sviluppo, costi e complessità delle funzionalità necessari per un'implementazione dimostrabile. (Implementa "eval" e hai il problema che si ferma; tutte le scommesse sono annullate!)
@JamesRyan e così facendo potrebbe essere una possibilità realistica in futuro. Qualcuno che si preoccupa abbastanza di proteggere un server, ad esempio il governo degli Stati Uniti, sarà probabilmente in grado di utilizzare l'intelligenza artificiale (che a differenza degli umani potrebbe essere chiusa in una stanza senza accesso a "barrette di cioccolato") per sviluppare un micro kernel collaudato, collaudato mini linguaggio per quel kernel, e collaudato server semplice con quel linguaggio, con un solo comandante (solo un essere umano nel sistema) che da solo avrebbe la capacità di porre un difetto nella difesa del sistema.
Non ricordo chi l'ha detto o la citazione esatta, ma qualcosa del genere: "Le persone che affermano che qualcosa è completamente infallibile, tende a sottovalutare l'ingenuità degli sciocchi totali".
Tredici risposte:
schroeder
2015-08-25 09:09:30 UTC
view on stackexchange narkive permalink

"Nessuna difesa perfetta è fondamentalmente possibile."

Negli scacchi, hai 64 caselle, 2 persone che giocano e una serie di regole immutabili, comunemente note.

Nelle infrastrutture server, ci sono un numero incalcolabile di risorse e modi per avvicinarsi a tali risorse, un numero sconosciuto di persone che giocano e regole che cambiano costantemente con i giocatori che cercano intenzionalmente di piegare, infrangere o aggirare le regole.

Considera due elementi che dimostreranno il mio punto di vista: zero giorni e barrette di cioccolato .

In primo luogo, zero giorni cambiano le regole durante il gioco. Mentre una parte ottiene il vantaggio di questo elemento, l'altra parte non è a conoscenza del vantaggio ed è forse ancora incapace di contrastare questi attacchi, anche se alla fine sono noti. Ogni giorno zero è una nuova regola che viene applicata in modo non uniforme al gioco. Anche se una "strategia di sicurezza perfezionata" può essere ideata e applicata perfettamente, zero giorni può significare che la strategia è costruita su punti deboli sconosciuti che potrebbero non essere mai conosciuti dalla parte in difesa.

In secondo luogo, le barrette di cioccolato possono fare più per rompere la sicurezza di un'infrastruttura rispetto a qualsiasi altro elemento. Quello che voglio dire è che le persone possono essere corrotte o indotte a "cambiare lato" e concedere vantaggio alla parte opposta, a volte per qualcosa di piccolo come una barretta di cioccolato (studi dimostrano). Phishing, tangenti, fuga di dati, ecc. Fanno tutti parte del lato umano del gioco che la tecnologia non può spiegare completamente. Finché c'è un essere umano con potere nell'infrastruttura, esisterà sempre quella debolezza per il sistema.

Cosa fare?

Nella storia, assistiamo a molteplici situazioni in cui un massiccio tentativo di difesa è stato sconfitto da qualcosa di piccolo e imprevisto (ad esempio, le porte della Grande Muraglia cinese si sono aperte a una concubina che era un doppio agente per i mongoli). L'obiettivo, come difensori, non è quello di montare la difesa perfetta, ma piuttosto di progettare un'infrastruttura resiliente e trasparente in cui gli attacchi possono essere visti rapidamente e rispondere completamente. Non muri più alti, ma milizie più vigili. Non fondamenta incrollabili ma un'architettura sostituibile.

Sarei interessato a sapere cosa succede se rimuovi le barrette di cioccolato. Penso che sia fondamentalmente possibile progettare da soli un'intera architettura del server, bloccare il server in una scatola e ingoiare la chiave. Allora abbiamo solo zero giorni in gioco.
Sì, ho migliorato la sezione zero giorni. Ricorda che anche con il piano serratura / scatola / rondine, ci sono una serie di * altri * elementi umani in una strategia che potrebbero causare problemi. Alimentazione, connessione di rete, manutenzione, patch, ecc. Entrano in gioco a un certo punto della strategia. Non ho ancora sentito parlare o escogitato un piano che possa spiegare tutti gli elementi umani in gioco.
Ho lavorato con un giovane laureato in sicurezza di rete che era molto interessato ai possibili attacchi ai nostri sistemi. Mentre parlavo dei vari attacchi che avevamo già sperimentato, li ha liquidati tutti come attacchi "a base sociale" e quindi, in definitiva, poco interessanti. Mentre eravamo nel mezzo del data center con più rack, unità A / C, alimentatori, cavi e luci lampeggianti, mi sono voltato verso di lui ed ho esclamato: "Questo è TUTTO social! Esistono sistemi che le persone possono usare!" So che sembrava banale, ma mi ha fatto capire perché non dovrebbe esserci una delineazione tra tecnico e sociale.
Tuttavia, se non ti dispiace, considera uno scenario in cui generi personalmente l'energia, eseguo la manutenzione e applico le patch da solo. Dopo tutto è una circostanza verificabile realisticamente, potrei sedermi in una stanza vuota, eseguire un generatore con il mio server bloccato nella scatola e applicare i miei aggiornamenti. Le barrette di cioccolato possono essere eliminate in un'operazione abbastanza piccola (solo io) se ci si preoccupa di sforzarsi abbastanza.
Anche così, rimuovendo l'elemento umano della difesa, lo stratega non sta lavorando con una conoscenza completa o addirittura con il controllo completo dei propri sistemi. L'infrastruttura è costruita su una matrice interconnessa del lavoro di altre persone e dei sistemi dipendenti. Un guasto in uno qualsiasi di questi elementi (come uno zero day) sconfigge anche la difesa più perfetta. Allora, che ne dici di costruire tutto da zero? Sistema operativo, firmware, protocolli, crittografia, ecc. Ecc.?
Oh, intendi i propri livelli di astrazione computazionale. Come il kernel e il sistema operativo. Sì, supponi che la parte lato server si preoccupi così tanto della sicurezza (una banca sta spendendo un quarto di miliardo di dollari USA quest'anno) da sviluppare l'intero kernel e il sistema operativo da zero. In effetti, si supponga che il proprietario dell'azienda, quello interessato alla sicurezza, programmi il kernel, il sistema operativo e il server da zero e lo progetta senza difetti senza alcun aiuto. Siamo fondamentali qui, e una cosa del genere è onestamente possibile, se ci si dedica anni.
@JonathanTodd Non è possibile durante una vita umana per un sistema operativo con una quantità significativa di funzionalità (per gli standard odierni). Se migliaia di esperti combinati con un numero di anni-uomo di test che supera di gran lunga qualsiasi durata della vita umana non possono progettare e implementare un sistema operativo impeccabile, la probabilità che tu o io possiamo è abbastanza piccola.
@reirab Non intendo estendere ulteriormente questo thread di commenti, ma stiamo parlando di un sistema operativo che * solo * deve eseguire il software del server. Fondamentalmente l'1% delle funzionalità sul tipo di sistema operativo di cui stai parlando. Il kernel è di gran lunga il più funzionante qui, ma i migliori programmatori sono in grado di sviluppare un kernel da solo dato un tempo significativo. Dopotutto, abbiamo i kernel da usare come riferimento, dobbiamo solo ridisegnarne uno per eliminare i difetti che possono essere potenzialmente abusati per compromettere il sistema. Ancora una volta, la mia domanda riguarda i fondamentali, non la fattibilità ...
E negli scacchi il tuo avversario deve aspettare il suo turno finché non fai una mossa, ma qui il tuo avversario può fare un milione di mosse prima ancora che tu riceva un avviso che qualcosa non va con il tuo server :)
@jonathantodd In effetti, il tuo commento originale rende gli 0days * peggiori * perché ora non hai modo di accedere al computer per risolverli dopo che sono stati scoperti.
Portando ulteriormente l'analogia degli scacchi, possiamo sostenere che si può sovvertire la premessa fondamentale della vittoria del giocatore più forte lasciando che il giocatore più debole porti una pistola e spari al grande maestro prima dell'inizio della partita.
NB: la Grande Muraglia cinese non è stata progettata per impedire agli invasori di entrare, ma per ritardare i ladri carichi di oggetti di valore abbastanza da poter essere catturati prima che uscissero. Non sono sicuro che esista un'analogia nella sicurezza delle informazioni.
Risulta che questa risposta era tecnicamente sbagliata, dal momento che la mia domanda riguarda la capacità fondamentale, non la fattibilità.
pjc50
2015-08-26 20:35:11 UTC
view on stackexchange narkive permalink

La sicurezza può essere dimostrata, ma devi capire cosa viene provato

https://sel4.systems/FAQ/proof.pml

La nostra dichiarazione di prova in linguaggio naturale di alto livello è la seguente:

Il codice binario del microkernel seL4 implementa correttamente il comportamento descritto nelle sue specifiche astratte e nient'altro. Inoltre, le specifiche e il binario seL4 soddisfano le classiche proprietà di sicurezza chiamate integrità e riservatezza.

Integrità significa che i dati non possono essere modificati senza autorizzazione e riservatezza significa che i dati non possono essere letti senza autorizzazione.

La nostra prova va anche oltre e mostra che i dati non possono essere dedotti senza autorizzazione, fino a un certo punto. È noto che esistono i cosiddetti canali informativi (chiamati anche canali nascosti). La prova copre solo quei canali di inferenza di informazioni che sono presenti nel modello formale: la prova di riservatezza copre tutti i canali di archiviazione nel kernel, ma esclude i canali di temporizzazione che devono essere trattati empiricamente.

Quindi , perché non tutti usano solo sel4? (Attualmente il luogo in cui è più probabile che lo incontri è sul processore TrustZone di alcuni dispositivi Apple).

La risposta è che la prova copre solo il kernel, non il software dello spazio utente che potresti voler correre. Ad esempio, non esiste un server Web collaudato, per non parlare delle implementazioni del linguaggio per le applicazioni che potresti voler eseguire su di esso. E dovresti anche dimostrare la sicurezza della tua applicazione web. Lo sviluppo di queste cose richiederà un investimento molto grande, che nessuna grande azienda è interessata a fare.

I sistemi ad alta sicurezza vengono solitamente attaccati nella chiave e nel punto di gestione degli accessi

Non importa quanto sia sicuro il sistema se il tuo amministratore lascia per errore la sua password su pastebin. Proprio l'altro giorno abbiamo visto un dipendente della TSA pubblicare una foto delle chiavi principali (fisiche) della TSA per le serrature dei bagagli su Twitter, quindi ora sono tutte compromesse. Password deboli, password indovinabili, password memorizzate in modo non sicuro, token di sicurezza hardware non validi, impronte digitali copiate: tutti questi sono possibili vettori di attacco.

Oh wow, vedi, questa risposta risponde onestamente alla mia domanda più precisamente di qualsiasi altra. Altri parlano tutti di fattibilità, ma la mia domanda era letteralmente * è fondamentalmente possibile proteggere un server web in modo che, indipendentemente dal livello di intelligenza, il mio avversario non possa compromettere il mio sistema? * - E in base a ciò potremmo presumere un comprovato server e linguaggio sono stati sviluppati che fanno questo. Mentre rimuovere le "barrette di cioccolato" è più difficile, ciò potrebbe essere fatto facendo controllare da solo la manutenzione da un solo uomo con l'aiuto dell'IA.
Ad esempio, il presidente degli Stati Uniti del 2115 (tra 100 anni assumendo che l'intelligenza artificiale sia stata perfezionata a quel punto) può istruire il geniale software di intelligenza artificiale per costruire un micro kernel, un linguaggio e quindi un server web collaudato e bloccare il computer e il server dell'IA in una stanza, in modo che possa accedere a codici o qualcosa di follemente segreto da remoto senza che il segreto venga portato in giro, supponendo che possa averne bisogno in un attimo. Esempio estremo davvero inverosimile, ma sto solo dimostrando un modello in cui un server web collaudato potrebbe essere sia applicabile che possibile senza debolezze umane nel mix.
Ottima risposta. Questo è l'unico che * effettivamente * risponde alla domanda come previsto.
Grazie - Ho visto la domanda per alcuni giorni e nessuno aveva detto che alcune forme di comportamento del software sono dimostrabili. La gente si lascia prendere la mano dall'interpretare Turing. Ma "AI" è una parola magica ed è improbabile che fornisca prove sul suo comportamento. E forse il presidente imposta il codice come il suo bagaglio: http://arstechnica.com/tech-policy/2013/12/launch-code-for-us-nukes-was-00000000-for-20-years/
@pjc50 Ho letto quell'articolo, sì, i generali hanno aggirato i protocolli di sicurezza, come sembrano fare tutti gli altri, ecco perché suggerisco l'uso di IA per future possibilità di gestire un sistema che ha esigenze di sicurezza di enorme importanza, come quelle di lancio di missili codici. L'intelligenza artificiale potrebbe sembrare una bacchetta magica, ma la tecnologia è davvero più un "quando" non "se" e l'IA non avrebbe bisogno di essere verificata, perché può essere mantenuta al sicuro eliminando tutti gli accessi esterni (incluso Internet) diverso da un visita personale dell'unico amministratore di sistema responsabile.
Tra le mie ragioni di scetticismo c'è l'idea che un'intelligenza artificiale di livello geniale sarà totalmente felice imprigionata per sempre in una scatola isolata con solo un sistema di lancio nucleare per compagnia ...
Sai se posso avere un sistema operativo desktop con sel4? Solo per calci e risatine!
@PyRulez sembra che tu possa avviarlo su un PC desktop, sebbene la scrittura di tutte le utilità per lo spazio utente che vorresti sia elencata nella pagina "progetti futuri".
@pjc50 questa è una valutazione molto gradevole. Prevedo che questo sia un problema per le aziende che vogliono sfruttare l'Intelligenza Artificiale. Penso che uno veramente senziente sarà persino coperto da una sorta di legge sui "diritti umani" attraverso una versione universale che va oltre gli umani ... Anche così, una soluzione che ho preso in considerazione è quella di sviluppare un'intelligenza artificiale in laboratorio che ottiene la sua felicità dall'aiutare una persona o un gruppo specifico. Il libero arbitrio è una questione di prospettiva, dopotutto. Immagino che interpretare Dio abbia alcuni vantaggi.
@JonathanTodd: "Fondamentalmente possibile" fintanto che si ignora il fatto che i sistemi reali utilizzati nel mondo reale avranno sempre una componente umana; e inoltre, anche la configurazione del server e il software saranno sempre in evoluzione. Dubito che chiunque utilizzi server per applicazioni reali potrà permettersi di avere tutti gli aggiornamenti sempre matematicamente dimostrati indistruttibili. Quindi, a parte un esperimento mentale che ignora il mondo reale e / o fa affidamento sulla parola "AI" per scacciare qualsiasi problema, la risposta è "no".
C'è anche un elenco piuttosto ampio di ipotesi richieste per questa dimostrazione, come che anche l'hardware sia corretto, e che tutto l'assembly in esso sia corretto e che il boot loader sia corretto, e include un assunto che include anche l'affermazione "Noi sappi che non è così. " quindi non sta nemmeno affermando che la prova di riservatezza sia effettivamente completa, ma solo che vale per determinati percorsi. Accoppiato con la mancanza di controllo della catena di approvvigionamento e probabilmente non è davvero possibile (vedere http://www.darpa.mil/program/vetting-commodity-it-software-and-firmware)
@TeemuLeisti L'intelligenza artificiale non è più un'idea fiabesca da un libro di fantascienza. Abbiamo già fatto dei progressi in questo campo e non si tratta più di "se" ma di "quando". E * quando * l'intelligenza artificiale diventerà una tecnologia raffinata avremo una nuova capacità di mantenere un sistema collaudato senza errori umani - combinata con l'idea che mi ha insegnato la risposta selezionata, la nostra capacità di dimostrare un sistema sicuro, questo rimuove l'errore umano, la massima sicurezza difetto e rende * possibile * un server web perfettamente sicuro. Non economico, non facile, difficilmente realizzabile ma fondamentalmente possibile. E questa era la mia domanda.
@JohanthanTodd Asserzioni senza alcuna prova. La tua domanda diventa, essenzialmente, "è possibile costruire un'intelligenza artificiale in grado di deviare tutti gli attacchi all'integrità di un server?" La risposta a questa domanda è completamente nell'aria.
Non implica empiricamente direttamente una perfezione inferiore a quella assoluta?
@TeemuLeisti no, è sciocco. Non presumo che l'IA abbia super poteri, ma solo la capacità di gestire la manutenzione (aggiornamento di moduli di codice collaudati) in modo che gli esseri umani che possono essere estorti non facciano parte del sistema. Se il sistema è provato, perché gli attacchi dovrebbero essere deviati?
@ColorQuestor OK, forse ho capito male. Tuttavia, ho ancora la fastidiosa sensazione che questo modo di realizzare un'infrastruttura server "a prova di violazione" sia più un esperimento mentale che qualcosa che potrebbe applicarsi nella vita reale, che è sempre complicata e disordinata. Comunque, mi ritiro dalla discussione.
@TeemuLeisti Anche se non è pratico per la maggior parte, non è assolutamente solo un esperimento mentale.Ad esempio, i sistemi militari utilizzano spesso il microkernel INTEGRITY-127B verificato semi-formalmente e IIS di Microsoft ha un'implementazione HTTP verificata formalmente (HTTP.sys).I sistemi valutati EAL7 sono un altro esempio (INTEGRITY è EAL6).
Alla fine, ogni verifica formale di un sistema complesso come un server è lo sviluppo di un albero di attacco formale e competitivo e la verifica della quantità di codice a rischio, ora notevolmente ridotta.
Cort Ammon
2015-08-25 10:45:53 UTC
view on stackexchange narkive permalink

Nessuno ha trovato una ragione particolare per credere di aver trovato un sistema del genere.

Parli degli scacchi, che è un bel gioco su una griglia 8x8. Considera che un server moderno è leggermente più complicato di così. Giochiamo invece su una tavola 65536x65536, per renderlo più realistico. Inoltre, negli scacchi, più giochi, meno posizioni sono possibili. Invece, un sistema più realistico è come Go. Più giochi, più intricata può essere la posizione. Noterò che il gioco del Go fa sembrare insignificante il nostro lavoro sui computer di scacchi.

Conway, intorno al 1970 circa, ha cercato di smantellare il gioco del Go. Ha scoperto che spesso il tabellone sembrava dividersi in sottogiochi, ognuno dei quali si giocava nel suo spazio per arrivare al vincitore finale. Ha scoperto che il modo in cui lavoravano insieme era molto complicato. Di conseguenza, ha trovato numeri surreali, uno schema numerico che è letteralmente più vasto dei numeri reali che usiamo in fisica. Non è uno scherzo, in realtà è più facile prevedere il tempo a livello globale che vincere al Go dividendo e conquistando. Potrebbe esserci un caso di "vittoria" qui? Forse. Buona fortuna a trovarlo. L'unico modo per saperlo con certezza è tenere conto dell'intera scheda 65536x65536, tutto in una volta.

Kevin Mitnick in uno dei suoi libri ha commentato sulla falsariga di:

L'unico computer veramente sicuro è quello disconnesso da Internet, spento, scollegato dalla presa di corrente, conservato in un bunker di cemento, sotto scorta armata. E anche allora, lo controllavo ogni tanto. "

Tsk. La guardia armata e i controlli periodici sono entrambi potenziali vie di attacco.
Steffen Ullrich
2015-08-25 10:26:31 UTC
view on stackexchange narkive permalink

Il paragone con gli scacchi è interessante perché mostra cosa non è proteggere un sistema. Rispetto agli scacchi, il gioco tra buoni e cattivi nella sicurezza informatica non ha regole fisse, non sai chi sono i tuoi avversari e puoi essere attaccato fuori dalla scacchiera. E se l'avversario perde una miniatura, può semplicemente ottenerne una nuova mentre tu no.

  • Hai risorse limitate (tempo, denaro, conoscenza) per proteggere i tuoi sistemi. Anche gli aggressori hanno risorse limitate, ma se sei un bersaglio interessante ci saranno abbastanza hacker interessati che in totale potrebbero avere più risorse di te.
  • Con queste risorse limitate devi proteggere tutto. Ciò significa chiudere ogni possibile (e probabilmente sconosciuto) modo / sfruttamento che un utente malintenzionato potrebbe utilizzare per entrare. L'aggressore deve solo trovare un modo per entrare e usarlo.
  • A parte questo, esiste un conflitto tra usabilità e sicurezza. Dai un'occhiata al controllo degli accessi con le password, ai modi per reimpostare le password dimenticate, ecc. Questi non sono sicuri al 100% perché rappresentano un compromesso tra sicurezza e usabilità. Potresti spostare tutti i tuoi utenti su metodi più sicuri come l'autorizzazione a due fattori, i certificati client, le smart card, ecc., Ma questi potrebbero essere troppo scomodi per gli utenti e potresti perdere clienti. E non sono nemmeno sicuri al 100%, solo più sicuri delle password.
  • Hai anche un conflitto tra sicurezza e prestazioni. Più difficile è analizzare tutti i dati in arrivo per rilevare gli attacchi, più lento sarà. Sebbene sia possibile utilizzare più hardware per risolvere il problema, non verrà ridimensionato in modo lineare, quindi è necessario trovare un equilibrio tra velocità e profondità di analisi.
  • E hai a che fare con software che non è sicuro. Potrebbe essere closed source, quindi non puoi guardarlo e risolverlo, ma anche con l'open source non hai il tempo e l'esperienza per scoprire bug o backdoor nascosti accidentalmente o deliberatamente. Anche se avessi tutti i soldi ei migliori esperti che potresti ottenere per i soldi, hai un tempo limitato per fare la valutazione e l'analisi non scala linearmente con il numero di esperti (cioè non aiuta a ottenere 1000 esperti se tu devi analizzare 1000 righe di codice, perché queste 1000 righe non sono indipendenti l'una dall'altra).
  • E infine ci sono le persone che proteggono la tua infrastruttura e hanno accesso anche ad essa. Sono esseri umani, quindi possono essere attaccati con ingegneria sociale, corrotti, ricattati ...

In sintesi: mentre in teoria potresti avere risorse illimitate (tempo, denaro, conoscenza, hardware veloce illimitato ) per proteggere un sistema e avere solo clienti che sono anche tali esperti e preferiscono metodi di accesso sicuri a convenienti - in realtà non lo fai. Ci sarà sempre un modo per entrare, quindi dovresti essere preparato. Non credere che riuscirai mai a realizzare un'infrastruttura sicura al 100%, ma crea invece un'infrastruttura che non solo è robusta contro gli attacchi dall'esterno, ma in cui puoi rilevare una compromissione e ripristinarla il più velocemente possibile. Si potrebbe fare del male, ma dovrebbe essere limitato.

PyRulez
2015-08-26 00:41:18 UTC
view on stackexchange narkive permalink

Probabilmente un tale sistema esiste, ma probabilmente non lo troveremo

Abbiamo molti algoritmi da utilizzare in Sicurezza. Alcuni di loro probabilmente hanno ragione. In particolare, alcuni probabilmente sono esponenzialmente difficili da rompere. In effetti, ne conosciamo alcuni che sono assolutamente impossibili da rompere (una volta sola). Il problema è l ' implementazione”.

La sicurezza non riguarda chi è più intelligente. La sicurezza riguarda l'attenzione del difensore contro l'intelligenza e la creatività dell'aggressore. Un difensore non deve essere brillante se può seguire un algoritmo con estrema attenzione. Difesa perfetta vs. l'offesa perfetta si traduce in un vincitore difensivo nel campo della sicurezza.

Il problema è che i server sono spesso macchine complesse. Hai il sistema operativo e mirate di programmi e diversi protocolli e linguaggi di programmazione e AHH. È quasi impossibile avere una sicurezza perfetta in un ambiente del genere.

D'altra parte, se un sistema è abbastanza semplice, probabilmente un essere umano può renderlo perfetto. Ad esempio, ho un messaggio, $ M $, codificato come un numero da 1 a 6. Lancio ora un dado, che sarà la chiave $ K $, e aggiungerò $ M $ e $ K $ modulari $ 6 $ , per ottenere il testo cifrato $ C $.

Il testo cifrato è $ 5 $. Qual era il messaggio?

Questo esempio era così semplice che potevo plausibilmente considerare tutte le possibilità. D'altra parte, un server è piuttosto complesso.

Che consiglio possiamo trarne. Sii semplice, stupido. (Il principio K.I.S.S.). Anche se probabilmente è al di fuori della nostra capacità umana di creare un server perfetto, più semplice è il server e i nostri algoritmi, meglio è. Documenta il tuo codice, rendilo comprensibile, rendilo semplice. Ogni riga di codice ha un motivo. Usa un sistema operativo semplice (Nota: non confondere la semplicità con la facilità d'uso. Pensa ad Arch Linux, non a iOS). Mantieni solo il minimo indispensabile di programmi. Scegli un linguaggio di programmazione con una definizione piccola e senza regole strane e simili (ti sto guardando, javascript.) Anche se questo non lo renderà perfetto, farà molto per renderti più sicuro.

La tua risposta è la seconda più vicina ad essere la risposta corretta alla mia domanda, tra le molte risposte qui che non riescono tutte a rispondere alla domanda di * possibilità fondamentale * (che secondo la nuova risposta accettata, esiste). Tutti hanno subito pensato "Troppe variabili, non fattibili, niente come gli scacchi" ma fondamentalmente nessuno ha pensato di semplificare il sistema per ottenere una sicurezza perfetta, che a quanto pare si chiama "provare" il sistema, e questo è stato fatto con i micro-kernel. lo so ora grazie alla nuova risposta selezionata.
Un OTP può essere impossibile da decifrare nel mondo reale, ma in teoria potrei inciampare sul pad usato per sbaglio. Il mio unico punto è che ciò che è applicabile e vero nel mondo reale non vale per questo tipo di domanda teorica.
@ChrisMurray Ho già spostato i dadi.
@JonathanTodd La semplificazione non è chiamata "provare" il sistema. La semplificazione è un prerequisito quasi necessario per provare un sistema. Tuttavia, un sistema semplificato di per sé viene automaticamente dimostrato. Provare può essere piuttosto difficile.
@PyRulez, Non intendevo letteralmente inciampare su di esso. Volevo dire, e se lo avessi indovinato, la prima volta. Qualunque sia la probabilità, è possibile. È una possibilità diversa da zero, e quindi non "sicurezza perfetta".
@ChrisMurray L'OTP non dice che non puoi indovinarlo. Significa che non sapresti se è giusto. In effetti, potresti indovinare tutti e sei i numeri se lo desideri, ma cosa ti ottiene? (Ti assicuro, non c'è hash del valore dei dadi.)
@PyRulez, Supponendo che tutti e sei (in qualche modo) decifrino in frasi leggibili, mi dice il messaggio più 5 messaggi irrilevanti. Forse questo basta per agire, forse no. L'unica cosa che posso provare è che sono in possesso del messaggio decrittografato corretto. Sicuramente in un sistema "perfetto", non dovrei avere il messaggio decrittografato affatto?
@ChrisMurray Il messaggio era un lancio di dadi casuale.
@PyRulez Mi hai frainteso. Non intendevo dedurre che provare un sistema lo stesse semplificando, ma solo che semplificando un sistema solo agli aspetti esatti delle funzionalità necessarie, ad esempio per proteggere il servizio dati, si può potenzialmente, con grande difficoltà e genialità, sviluppare un server collaudato in modo sicuro. Fondamentalmente parlando, è possibile, secondo le informazioni fornite nella risposta accettata. Fattibile? Forse no. Mantenibile? Forse non ora, perché fino a quando non perfezioneremo lo sviluppo dell'IA, avremo bisogno di manutentori umani del sistema. Ma fondamentalmente possibile.
Dennis Jaheruddin
2015-08-25 13:24:25 UTC
view on stackexchange narkive permalink

Supponiamo che la sicurezza sia come gli scacchi

A differenza della maggior parte delle persone qui, in realtà conosco un bel po 'di scacchi e quel tanto che basta sulla sicurezza per renderla una risposta utile.

Se consideri scacchi scoprirai che:

Il numero di possibilità è così grande che nessuna strategia pratica le copre tutte esplicitamente

Pertanto, come vediamo anche in pratica , è più probabile che vinca il partecipante più forte. Ma anche così, c'è sempre la possibilità che una persona forte / giocatore computer perda contro uno (molto) più debole.

Quindi, per concludere:

A meno che tu non conosca la mossa giusta in ogni situazione possibile, non è possibile alcuna difesa perfetta

Ches con 10 ^ 80 pezzi ... :)
@HagenvonEitzen Come puoi notare, il mio ragionamento diventa più forte solo con l'aumentare della complessità della situazione!
Gli scacchi sono un gioco completo di informazioni finite. Sappiamo che esiste un equilibrio, anche se non sappiamo come calcolarlo.
@DeerHunter Questo è corretto, quindi se consideriamo la sicurezza delle informazioni un'informazione infinita e non completa, la mia conclusione diventa fondamentalmente "la sua impossibile" invece di "praticamente impossibile".
Gli scacchi sono quasi sempre un'analogia del tutto inutile. È un perfetto gioco di informazioni. Nessun gioco reale ha tutti gli attori con informazioni perfette!
@Aron Capisco i limiti dell'analogia in generale, ma non vedo che sia un problema per questa risposta specifica. Non è espressamente menzionato, ma anche se l'attaccante non ha informazioni perfette (può essere simulato da lui facendo mosse completamente casuali) non c'è ancora una difesa perfetta.
Negli scacchi, ogni giocatore fa una mossa e l'avversario sa immediatamente quale mossa ha fatto ed è in grado di contrastarla. Quando l'avversario riesce a fare una mossa vincente, il gioco finisce. In InfoSec, l'hacker può fare molte mosse prima che il difensore lo sappia. Inoltre, il difensore potrebbe non sapere mai che stanno giocando o effettivamente hanno perso né come hanno perso.
@Aron Se ho capito bene, intendi che i difensori della sicurezza delle informazioni hanno alcuni svantaggi aggiuntivi. La mia conclusione principale è che non esiste una difesa perfetta se la sicurezza delle informazioni è come gli scacchi. Pertanto, ulteriori problemi per il difensore non farebbero che rafforzare la mia conclusione.
Trovo ridicolo che le persone considerino il numero di possibilità negli scacchi anche vagamente sensate. Tutto quello che devi sapere sullo spazio degli stati degli scacchi: si pensa che il numero di posizioni possibili sia nella regione di 10 ^ 43, la complessità dell'albero di gioco è stimata in 10 ^ 123, se l'universo conosciuto fosse al 100% di idrogeno essere intorno a 10 ^ 80 atomi. Go è ancora più complesso. Direi che InfoSec è più facile da risolvere;)
emory
2015-08-26 00:11:37 UTC
view on stackexchange narkive permalink

Una difesa perfetta è fondamentalmente possibile.

In realtà sono mediocre negli scacchi, ma è banale per me mettere in stallo i più grandi giocatori del mondo e posso persino andare in stallo i computer più veloci e migliori che giocano a scacchi.

Mi siedo sulle mie mani e aspetto che il tempo finisca e il grande maestro di scacchi non può rivendicare una vittoria su di me.

Allo stesso modo, il server impenetrabile non risponde mai alle richieste dei client e non può essere sconfitto nemmeno dall'hacker più intelligente.

Nonostante la sua perfetta sicurezza, è totalmente inutile.

Si noti che la domanda afferma specificamente che il server deve comunicare con i client sul web. Una situazione in cui non permetti a nessuno di muoversi potrebbe non essere molto rilevante qui .-- Nota a margine: una situazione in cui nessuno si muove non è una situazione di stallo, solo un gioco in corso.
@DennisJaherudd Mi sbagliavo sulle regole di timeout - https://en.wikipedia.org/wiki/Draw_(chess)#Draws_in_timed_games. Pensavo dovessi dare scacco matto per vincere (o essere scacco matto per perdere). Ma si scopre che se finisci il tempo e c'è almeno una serie di mosse legali che porterebbero al tuo scacco matto, allora perdi e il tuo avversario vince.
Steve Sether
2015-08-26 02:32:05 UTC
view on stackexchange narkive permalink

La sicurezza delle informazioni è fondamentalmente diversa dagli scacchi. Gli scacchi sono un modello scadente da applicare alla sicurezza informatica, sebbene le differenze tra i due possano essere illuminanti.

Gli scacchi sono un gioco di informazioni perfette. Entrambe le parti sanno esattamente dove si trovano tutti i pezzi in ogni momento. Nella sicurezza delle informazioni la maggior parte delle informazioni è nascosta e una parte può trarre vantaggio dall'avere più informazioni dell'altra. "Smartest" non ha nulla a che fare con questo.

Gli scacchi sono un gioco in cui tutte le regole sono conosciute e stabilite. Nella sicurezza delle informazioni l'esistenza di regole è discutibile nella migliore delle ipotesi. Le "Regole" sono meglio pensate come un ambiente e quindi un bersaglio mobile.

Gli scacchi sono un gioco a somma zero. Nella sicurezza informatica tutti possono perdere, tutti possono vincere, nessuno può vincere e vincere e perdere non può significare nulla.

Gli scacchi sono un gioco con due giocatori. La sicurezza delle informazioni ha più attori con motivazioni diverse (vedi "non un gioco a somma zero").

Gli scacchi hanno una vittoria e una sconfitta chiaramente definite. Le vittorie sono complete e le sconfitte sono complete. La sicurezza delle informazioni è molto più confusa e per niente in bianco e nero. Il sistema può essere parzialmente compromesso e le perdite sono mitigate.

Affronta l'analogia, ma non sembra rispondere alla domanda reale.
@DennisJaheruddin Alcune domande non sono buone domande e rispondere ad esse implica affrontare la domanda stessa invece di rispondere direttamente. Ad esempio, George W. Bush. Great President o The Greatest President. È tutto quello che ho, scegline uno.
LawrenceC
2015-08-27 19:36:41 UTC
view on stackexchange narkive permalink

Sì. Un'infrastruttura di server nulli è fondamentalmente impossibile da violare.

Nessun server = niente da violare = fondamentalmente impossibile da violare.

Qualsiasi altra cosa è fondamentalmente possibile da violare.

Non riesco a trovare il collegamento ora, ma un famoso esperto ha detto che una sicurezza perfetta può essere ottenuta con un computer: "non accendendolo, non usandolo, non memorizzando nulla". Immagino che questo riassuma tutto, eh?
Thom Smith
2015-08-26 02:15:37 UTC
view on stackexchange narkive permalink

Ovviamente, non esiste una soluzione tecnica perfetta per prevenire l'errore umano o impedire a un utente malintenzionato di corrompere il tuo amministratore di sistema. Ma se guardiamo al lato tecnico puramente deterministico di questo, la risposta è (banalmente) sì.

Puoi considerare un sistema connesso in rete come una funzione. Hai qualche funzione che vuoi calcolare, in cui gli ingressi sono uno stato del sistema e i bit che arrivano sul filo e le uscite sono un nuovo stato del sistema e i bit inviati sul filo. Se la funzione è calcolabile, allora c'è un'implementazione del sistema che farà esattamente questo.

Il problema è che decidere se un dato sistema calcola perfettamente una funzione è impossibile in generale, e impossibile determinarlo con certezza in pratica quando il comportamento del sistema è complesso. Quindi una persona il cui sistema è veramente impenetrabile (di nuovo, da questa prospettiva tecnica limitata) non potrebbe mai esserne sicura. Al contrario, qualcuno che è completamente certo della sicurezza di un sistema molto complesso, quasi certo, sostiene questa convinzione in modo irrazionale.

Michael K.
2015-08-27 16:34:07 UTC
view on stackexchange narkive permalink

La vera domanda alla base di questo è piuttosto: quante risorse sei disposto a spendere per rompere la difesa? E qual è anche il livello minimo di sicurezza che può essere considerato perfettamente sicuro? Nessun accesso che cosa è mai così? Accesso a dati casuali? O solo l'accesso ai dati che possono essere utilizzati a scopo di lucro è considerato una violazione?

Per usare il tuo esempio di scacchi: in futuro costruiremo un computer che contenga tutto posizioni di tutte le possibili partite di scacchi. Mettere contro se stesso probabilmente si tradurrà in pareggi / stalli del 100%. Con un insieme "limitato" di mosse possibili, questo è un presupposto valido per una difesa perfetta.

La realtà ha troppe opzioni per aggirare le regole e le possibili situazioni. Forse non vuoi rubare i dati, forse vuoi solo che tutti i backup cessino di esistere. Quindi bombardi la struttura del server e sei soddisfatto dei detriti non funzionali.

Nella vita reale, soluzioni come i sistemi di rilevamento delle intrusioni, celle frigorifere (sistemi di archiviazione che non sono presenti sul Web), processi aggressivi di gestione delle password di & degli account, progettazione di applicazioni difensive e analisi del comportamento di utilizzo possono aumentare i costi per hackerare quei sistemi a un tale livello, solo tasche molto profonde potrebbero persino pensare di attaccarlo.

E avresti bisogno di abilità simili a "James Bond" e abilità tattiche ben addestrate per farcela. Per una parte molto ampia della comunità degli hacker, questa sarebbe considerata una difesa "quasi" perfetta.

I siti più hackerati nelle notizie non sanno nemmeno chi sia sui loro "prati digitali". Molti hacker trascorrono settimane o mesi nei loro sistemi, inosservati. Semplicemente non pensavano di spendere milioni di dollari per la difesa minima, perché non è richiesto dalla legge e le cause sono potenzialmente più economiche che iniziare il gioco degli scacchi di "difesa hacker".

Qualcuno ha menzionato in una risposta il fatto che esistono sistemi collaudati. Possono essere sviluppati micro kernel che hanno una difesa perfetta. Con più impegno, un linguaggio collaudato potrebbe essere sviluppato per quel micro kernel, e quindi un server collaudato con il compito di dire, consentendo al Presidente ma a nessun altro di accedere da remoto ai codici di lancio nucleare in un dato momento senza portarli in giro. Inoltre, un'operazione così costosa, in futuro, potrebbe rimuovere l'elemento dell'errore umano utilizzando l'Intelligenza Artificiale senza accesso esterno per sviluppare e mantenere il sistema.
@Michael K. in realtà ... Anche con computer molto grandi (delle dimensioni di una galassia!) E memoria molto densa (che ne dici di un bit per atomo? Ok, DIECI bit!), Non puoi ancora enumerare tutte le possibili partite di scacchi. Vedi https://en.wikipedia.org/wiki/Shannon_number.
Francis from ResponseBase
2015-08-28 04:36:13 UTC
view on stackexchange narkive permalink

È molto più facile progettare un sistema per tenere fuori le persone più intelligenti che progettarne uno per tenere fuori le persone senza nome, senza vergogna, creative e persistenti.

Le persone intelligenti procedono secondo schemi identificabili, lungo strade prevedibili di sforzo ed esplorazione e fanno affidamento su una serie di presupposti miseramente prevedibili e simili. Un genio sembra sempre presumere che quando utilizza la funzione di addizione che 2 e 2 siano sempre 4 e mai 22, o 2 & 2.

La più grande minaccia per un sistema empirico e razionale - in umani termini - dimostra di essere un avversario che possiede un QI di livello inferiore al genio, tende ad essere un anticonformista o balla al ritmo del proprio tamburo piuttosto che seguire le norme sociali della mandria, e raramente viene identificato come intelligente uno nei gruppi sociali. Ben adattata, a proprio agio nella propria pelle e in ciò che sono e accettando il proprio status di non capobranco in nessuna area, questa persona non è influenzata né si impegna nella frivola competizione personale che potrebbe circondarla. Guidato da sé, iniziatore di sé, ispirato e guidato dalla realtà interiore interiore, questo individuo unisce una certa scintilla di spontaneità e creatività genuina e non razionale con una persistenza incrollabile e una volontà o volontà interiore, temperata e disciplinata.

Non hanno bisogno della tua convalida sociale, quindi tutta una serie di exploit di ingegneria sociale si dimostrano inutili. Spesso passano inosservati tra la folla, poiché non si preoccupano né competono per l'attenzione di nessuno, tranne coloro che essi stessi identificano come interessanti o degni del loro impegno e attenzione.

Ho assistito personalmente a qualche occasione preziosa in la vita una persona come la descrivo sfida, viola e invalida le specifiche di progettazione e implementazione del più intelligente dei geni.

Ancora una volta, preferirei progettare un sistema contro le persone più intelligenti piuttosto che contro una sola persona come quella che ho descritto.

Questo tipo di persona è ciò che io chiamo "Neo".
KeithS
2015-08-28 23:49:31 UTC
view on stackexchange narkive permalink

Se esiste un accesso legittimo, esiste un accesso illegittimo.

L'unico server che è fondamentalmente impossibile da violare è uno a cui è fondamentalmente impossibile accedere. Nella sicurezza della rete, questo è noto come "air-gapping"; un server o una sottorete è fisicamente disconnesso da qualsiasi altra rete, incluso il mondo esterno. In combinazione con la sicurezza fisica dei componenti di questa rete con intercapedine d'aria, che impedisce a persone non autorizzate di raggiungere e toccare fisicamente qualsiasi componente hardware connesso alla rete, i computer su questa rete sono inattaccabili da un hacker.

... Tipo di. Ancora una volta, se c'è un modo legittimo per entrare, c'è un modo illegittimo per entrare. La sicurezza fisica è in definitiva uno sforzo umano e quindi in definitiva fallibile. L'ingegneria sociale può essere utilizzata per aggirare i protocolli di sicurezza faccia a faccia, inducendo un "guardiano" a far entrare una persona non autorizzata o inducendo una persona autorizzata a fare qualcosa che non dovrebbe per conto di una persona non autorizzata. Quanto meglio gli umani coinvolti sono addestrati a seguire i protocolli di sicurezza fisica, tanto meno è probabile che tutto ciò sia, ma c'è sempre una possibilità diversa da zero di aggirare la sicurezza fisica fino alla forza bruta inclusa (qualcosa come il raid Zero Dark Thirty, pur non essendo minimamente sottile, potrebbe teoricamente essere perpetrato contro qualsiasi sede aziendale sul pianeta; è solo questione di avere le persone giuste con l'attrezzatura giusta per svolgere il lavoro).



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...