Voglio nascondere il traffico che un'applicazione fa sulla rete locale, far sembrare che la rete sia completamente silenziosa per il sistema e altri software di monitoraggio.
È fattibile? Come potrei ottenere questo?
In un sistema operativo tipico, l'invio e la ricezione a basso livello di frame ethernet viene eseguito da un driver specifico e un altro layer del sistema operativo può fornire una copia di ciascun frame in entrata e in uscita a qualsiasi applicazione (privilegiata) che richiede loro. Il software di monitoraggio è quel tipo di applicazione. Quindi, se vuoi essere in grado di inviare e ricevere frame senza software di monitoraggio installato localmente per rendertene conto, devi avere collegare il tuo codice nel kernel del SO, sia come driver personalizzato per il interfaccia ethernet o nel livello immediatamente sopra.
Naturalmente, se puoi farlo, allora hai il controllo completo della macchina, che pone la domanda: perché non devi solo disattivare o disinstallare il software di monitoraggio in quel caso?
Inoltre, gestire i frame in arrivo può essere complesso: dovresti riconoscere quali frame sono per la tua applicazione e non per altre applicazioni nella macchina. Se vuoi gestire qualcosa di così complesso come una TCP connessione, presto ti ritroverai ad implementare il tuo stack TCP / IP nel tuo driver personalizzato. Questo è un esercizio di programmazione molto pedagogico ...
Questo serve per evitare il rilevamento da parte delle applicazioni di monitoraggio locali . Per le applicazioni remote , in esecuzione su altre macchine, non puoi evitare di vedere i tuoi pacchetti. Puoi rendere opachi i pacchetti attraverso la crittografia: il software di monitoraggio vedrebbe pacchetti dall'aspetto di pesce, ma non sarebbe in grado di forzarne il contenuto.
Per rendere le tue comunicazioni davvero poco appariscenti, dovresti fare steganografia : mascherare i tuoi dati come dati dall'aspetto innocente. Ad esempio, potresti aprire una connessione HTTPS a https://www.google.com/
: è abbastanza innocente, tutti lo fanno tutto il giorno. Poiché si tratta di HTTPS, le connessioni al server di Google iniziano con un handshake SSL; e un handshake SSL inizia con un messaggio ClientHello
che include 28 byte casuali dal client (che fa parte del protocollo SSL / TLS ). La tua applicazione potrebbe sostituire questi 28 byte casuali con la crittografia di un messaggio da 28 byte; un complice, spiando la connessione Internet, vedrebbe questi 28 byte (il ClientHello
viene inviato in chiaro) e decrittografare il messaggio. Il software di monitoraggio e il server di Google vedrebbero solo 28 byte apparentemente casuali in un punto in cui sono previsti 28 byte casuali.
La larghezza di banda offerta dalla steganografia è quasi sempre abissalmente bassa; ed è difficile fare bene.
Avresti bisogno di un driver a livello di kernel che possa sovvertire lo stack di rete. In pratica, sarà piuttosto difficile da fare. Richiederebbe effettivamente un rootkit poiché generalmente lo stack IP sul tuo computer (parte del sistema operativo) gestisce tutto il traffico per conto delle app e dovresti ignorarlo.
Devi utilizzare cavi e apparecchiature esistenti o hai la libertà di installare hardware personalizzato tra i due endpoint o di evitare la rete?
Ad esempio, è possibile eseguire apparecchiature wireless da 900 mhz, che è più lento del più comune wifi 802.11a / b / g / n, ma a malapena qualcuno lo usa più, quindi sarà meno probabile che venga intercettato. Puoi anche eseguire Ethernet su cavi elettrici ( powerline Ethernet / homeplug ) o persino eseguire connessioni di rete cavi telefonici con l'hardware giusto.
Se stai provando a fare qualcosa su due stazioni che fanno già parte di una rete ethernet, la soluzione migliore sarebbe utilizzare un tipo di canale nascosto / nascosto nelle comunicazioni normali, come il cronometraggio o l'inserimento di messaggi nelle intestazioni.
Se si desidera solo nascondere l'attività di rete dalla stazione locale (ad esempio, una botnet che nasconde la sua presenza, ma senza preoccuparsi del traffico di rete), si utilizzerà un rootkit per bloccare il processo e le connessioni segnalate dal sistema operativo, o potresti semplicemente provare a sostituire programmi chiave come netstat e lsof che riporta sull'attività di rete.