Come faccio a sapere che il malware sul computer client non modifica i dati trasmessi alla mia webapp?

2

Sto lavorando su un'applicazione web e ho avuto un'idea di una nuova funzionalità che vorrei aggiungere. La funzione include il recupero dei dati dall'utente sul proprio sistema aperto e la ricezione sul mio server. Per ragioni di concetto, presumo che il mio server sia sicuro al 100% ed è sorvegliato da un milione di warlock di livello 80 e dal mio cane bassotto Kevin. Quindi la nostra parte non può essere compromessa ed è totalmente sicura per questa domanda.

L'utente va a dire una biblioteca e usa il computer lì. Da quel computer richiedono una pagina web dal nostro server. Quindi in questa pagina web inseriscono alcuni dati. Questi dati vengono quindi inviati al mio server ed elaborati. La mia preoccupazione è come posso verificare che cosa l'utente ha digitato dalla tastiera usando le dita è ciò che realmente è stato inviato al mio server.

Diciamo che l'utente HTTPS serve i miei contenuti, quindi in teoria questi dati non possono essere letti / modificati mentre sono in transito. Ma cosa succede se il macchinario di una biblioteca pubblica, il giorno prima, ha colpito Todd compromettendo il computer inserendo del codice maligno all'interno del browser Web che modifica in modo segreto e discreto i dati inviati al server. Quindi il nostro utente digita la parola "PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS" e vede questo essere digitato sullo schermo. Poi preme send, ma quando lo fa il codice dannoso nel browser modifica i dati per cambiare i dati in "ToddIsAwesome" e mostra all'utente che il loro messaggio è stato inviato con i dati che ritiene sia stato inviato, ma in realtà i dati sono stato modificato e il server riceve i dati dall'utente, ma non i dati che l'utente desiderava inviare. Esistono tecniche per verificare questo tipo di cose? L'utente non deve inviare i dati da un sito Web, può anche essere installato il software su un computer. La mia preoccupazione principale è di ottenere i dati che l'utente intende inviare e di rilevare se la modifica si è verificata dal momento in cui l'utente digita qualcosa nel momento in cui il server riceve la richiesta.

    
posta user2924127 19.05.2016 - 19:35
fonte

2 risposte

2

Risposta breve è: non puoi.

Tutto ciò che il tuo server vede è ciò che invia il computer alla libreria. Quali programmi o processi su quel computer che ha generato i dati è impossibile per te sapere. Dal punto di vista dei server, potrebbe essere un pidgeon con un telegrafo come utente legittimo.

Il fatto che l'utente abbia inserito una password non lo attenua. L'autenticazione di due fattori con un cellulare non lo attenua. Il malware sul computer potrebbe collegarsi al browser e modificare le richieste HTTP dopo aver inserito la / e password / i.

C'è una piccola cosa che puoi fare, però. Chiedi all'utente di firmare digitalmente parte del messaggio su un altro computer rispetto al computer della biblioteca, quindi inserisci la firma digitale nella webapp sul computer della biblioteca. Questo potrebbe essere il suo cellulare o un prodotto come digipass . Dal momento che quel computer è fuori dalla portata di qualsiasi malware sul computer della biblioteca, è sicuro. Il retro è che l'utente dovrà inserire il messaggio che sta firmando su quel dispositivo - non molto pratico per i messaggi lunghi. Ho visto le banche utilizzare questo per firmare l'importo in un trasferimento, ma non l'account a cui è stato trasferito perché sarebbe ostico all'utente.

Questa è solo una soluzione parziale che vale solo lo sforzo per obiettivi di alto valore come la banca. La soluzione più semplice è semplicemente quella di insegnare ai tuoi utenti a non effettuare transazioni sensibili da un computer pubblico.

    
risposta data 19.05.2016 - 20:32
fonte
1

Non c'è davvero modo di convalidare l'input se il computer dell'utente è compromesso. Ci sono troppe variabili.

Quando il tuo browser invia un modulo, assomiglia a qualcosa di simile prima che venga crittografato e inviato al server:


POST /login.php HTTP/1.1
Host: www.example.com
User-Agent: mycoolbrowser
Content-Length: 34
Content-Type: application/x-www-form-urlencoded

username=Bob&password=bobspassword

Niente di complicato. Qui non c'è nulla che il browser non possa fabbricare. E se Todd ha compromesso il computer, può fare quello che vuole. Può persino sostituire il browser con un sosia che fa quello che vuole. Ad esempio, se utilizzo Google Chrome, è possibile sostituirlo con Chromium, aggiungere il suo codice dannoso (relativamente semplice dal momento che è open source) e cambiare l'icona.

Ora, se Todd si dimentica di cambiare la stringa User-Agent e l'utente afferma di utilizzare Google Chrome, potresti rilevare la disparità. O se il modulo consente solo input numerici e il browser invia parole, è possibile rilevare la disparità. O se la casella di immissione del modulo è stata convalidata lato client per contenere 45 caratteri e il browser invia 13 caratteri, potresti rilevare disparità.

Vieni a pensarci, Todd non deve nemmeno compromettere direttamente il browser; potrebbe semplicemente attivare un plug-in del browser che legge l'html, rileva l'input del modulo e lo modifica.

Ci sono davvero troppe variabili. Potresti essere in grado di rilevare qualcosa negli scenari specifici molto , ma non c'è davvero nulla che tu possa fare nel caso generale. Non esiste la sicurezza del lato client.

    
risposta data 19.05.2016 - 20:30
fonte

Leggi altre domande sui tag