È un sistema di controllo hash dei file sicuro al 100% e non bypassabile / falso?

2

Sto costruendo un open source distribuito (e in parte non in linea replicato, poiché si presume che la rete sia instabile) CMS e uno dei "lavori" del core system saranno raggruppare tutti i file e generare un hash univoco da loro.

Questo hash speciale verrà verificato con un vero hash per vedere se corrispondono, in modo da garantire che nessuno modifichi la fonte maliziosamente.

Se entrambe le corrispondenze hash possono tranquillamente andare avanti con il processo e in particolare con la replica, se non viene trovata alcuna corrispondenza, otteniamo l'ip / proxy / tor-node e blocciamo i successivi tentativi di unione.

Ok, aggiungiamo un contesto ...

Supponiamo di avere una cartella chiamata "cmsfiles" e all'interno abbiamo i file: app.py, dbconn.py, users.py, reputation.py, node_list.py, blacklist.py ecc ..

C'è John, il fondatore di un portale chiamato "Ultime notizie". Ha un vero e proprio hash ("originalhash") ed è nella "lista dei nodi", quindi è un punto di riferimento da controllare.

Ora, Dan che è interessato al portale vuole unirsi a esso per avere il suo accordo di partecipazione (sia esso discussioni o qualsiasi altra cosa) .. così scarica e installa (lascia che sia python + sharq Sqlite) il software suggerito dal portale di sola lettura.

Ora, quando visita di nuovo il portale, viene visualizzato un messaggio che dice qualcosa come "Stiamo controllando l'integrità prima di allineare entrambe le macchine, tenerti stretto e aspettare" .. quello che succede in sottofondo è che le macchine di John vengono contattate (dalla lista degli indirizzi della lista dei nodi) che poi continua a raggruppare tutti i file macchina di Dan in "cmsfiles" in un singolo hash e confrontarli con quelli genuini ... se entrambi gli hash corrispondono, la macchina di Dan viene aggiunta alla lista node_list e la sua il database viene scaricato / aggiornato e segue quindi il "treno" di John.

Passano due giorni dall'ingresso di Dan ..

Arriva un altro tizio chiamato "Jack", ma con intenzioni malevole, mentre modifica il file "reputation.py" in modo da superare la limitazione di 120 punti per votare.

Vede la stessa cosa di Dan ma sullo sfondo succede qualcosa di poco diverso ..

Quando la macchina di John o Dan controlla l'hash, scoprono che non corrisponde al richiedente, quindi o la macchina di John o Dan continua a buttarlo fuori dalla rete mettendolo nella lista "blacklist.py".

nota: se Jack modificasse manualmente gli indirizzi nell'elenco per provare a convalidare la sua macchina, sarebbe da solo e avrebbe appena creato il proprio portale senza alcun danno per gli altri portali già esistenti

Ciò di cui non sono sicuro è se questo può essere considerato un sistema sicuro e che nessuno può simulare / bypassare l'hash in qualche modo. O forse se sto facendo male e dovrebbe essere fatto in un modo diverso?

P.S. È stato in parte ispirato al funzionamento interno di Bitcoin e Osiris sps.

    
posta gw0 13.03.2014 - 19:16
fonte

3 risposte

4

Se ti capisco correttamente, ti stai chiedendo se il processo che hai descritto ponga il carico di sicurezza sull'algoritmo di hash, da qui la domanda su quanto siano buoni algoritmi di hash. Gli algoritmi ben controllati (come da SHA1 a 3 ) dovrebbero essere molto buoni, in quanto la creazione di una collisione dovrebbe essere estremamente difficile.

Tuttavia, leggendo il tuo processo, penso che il punto debole si trovi altrove.

  1. Che cosa impedisce agli utenti malintenzionati di mentire sul loro risultato hash?
  2. Per evitare il numero 1, è possibile che i file degli utenti vengano caricati e sottoposti a hash sul server (creando una serie di problemi). In tal caso, come impedisci all'utente malintenzionato di inviare i file che ti aspetti di vedere mentre esegui i file modificati?

Strumenti come MITMproxy rendono questo trucco molto più accessibile di quanto fosse in passato. Probabilmente scoprirai che Stackoverflow è anche molto bravo a notare problemi generici di processo / flusso di lavoro come questo.

    
risposta data 13.03.2014 - 20:50
fonte
1

Stai trascurando un enorme componente qui. La connessione tra i punti. Puoi dare uno schiaffo a dire SHA512 e non farebbe differenza se il filo fosse visibile tra i punti.

YourServer --> world
World --> Yourserver

Che significa

Dan --> connects to --> YourServer

Come viene eseguita questa connessione sul lato rete dell'equazione? SSL, VPN, ecc.

Inoltre non stai prendendo in considerazione le intrusioni basate sull'host. Ad esempio, immagina Dan è uno studente universitario e siamo nello stesso dormitorio. A seconda dell'architettura di rete di Dan (di cui non avrai il controllo), cosa mi impedisce di annusare la rete, prendere il suo token e tornare da te come lui? (Rappresentazione). Posso assicurarti che, dal punto di vista NAT, vedrai solo un indirizzo IP.

Ora, che dire dell'intrusione basata sull'host, in cui dico che sono riuscito a mettere in funzione la sua macchina e sto trasmettendo dati attraverso la sua macchina. (Simile a ciò che gli autori di malware fanno per rubare dati / sniff / log di battitura). Ci sono molte cose da considerare

    
risposta data 13.03.2014 - 21:23
fonte
0

Il tallone d'Achille in questo caso è che il calcolo dell'hashsum richiede la cooperazione della macchina degli attaccanti. L'utente malintenzionato potrebbe avere due versioni dell'applicazione: una autentica e l'altra modificata. Non c'è modo di impedirgli di presentare la copia originale per il controllo dell'integrità, ma di usare la versione modificata per collegarsi effettivamente alla rete e interagire con essa.

Quando sviluppi un sistema distribuito, non ti puoi fidare che i sistemi di terze parti eseguano correttamente qualsiasi cosa . Devi sviluppare il tuo netcode basandoti sul presupposto che ogni partecipante ha violato il proprio nodo oltre il riconoscimento e che non c'è nulla che tu possa fare contro di esso. La sicurezza del sistema deve essere integrata nel protocollo. Eventuali limitazioni, come richiedere 120 reputazione per votare, devono essere applicate da altri nodi, non dal nodo stesso.

    
risposta data 14.03.2014 - 16:06
fonte

Leggi altre domande sui tag