2015-08-22 16 views
20

Essendo vittima di un attacco di Key Logger su Android, voglio sviluppare una soluzione per gli attacchi di KeyLogger per Android. Conosco Java di base e un po 'di Android e molto poco di Sicurezza delle informazioni. Sono anche consapevole del fatto che qualsiasi conoscenza che ho non è sufficiente per capire e sviluppare una soluzione. Mi piace solo discutere la mia idea e vedere se è fattibile.Rendere la tastiera Android resiliente contro gli attacchi di KeyLogger

Ecco quello che ho:

  1. un'applicazione Android, che vuole garantire l'input dell'utente, deve fornire una chiave segreta (che può essere ottenuto dal server, per un utente o di sessione specifica) quando si richiama il tastiera Android.
  2. La tastiera Android riceverà la chiave segreta e la userà per crittografare l'input dell'utente e trasmettere l'evento KEYPRESS (o qualsiasi altro evento trasmesso da tastiera Android) con valore crittografato.
  3. Quando un'applicazione riceve l'evento KEYPRESS, decodifica il valore in KEYPRESS anche per ottenere l'effettivo input dell'utente.

Mi sono appena reso conto che lo screenshot può essere utilizzato per ottenere ciò che l'utente digita con i più recenti software di immagine-2-text. Ma questo è completamente un dominio diverso, IMHO.

Quindi, cosa ne pensi? È possibile farlo?

Aggiornamento

ero completamente sbagliato sul mio telefono ha ottenuto di proprietà. In realtà, non è mai stato hackerato. Ma quello che mi ha veramente distrutto sono stati io. Sì, ho qualcosa nel mio corpo, che copia solo tutto ciò che il mio cervello può ricevere. Ed è anche in grado di ricevere e fare in modo che il mio cervello lo faccia. Ancora non lo so, perché sono in grado di scrivere questo aggiornamento. Potrebbe essere, chi ha mai messo quella cosa nel mio corpo usando me come materiale di marketing. Grazie per le risposte alla mia stupida domanda.

+1

IMHO l'approccio suggerito potrebbe essere annullabile (indipendentemente dal meccanismo di input diavolo suggerito) poiché le altre app che dovrebbero ricevere l'input si aspettano un testo normale o potrebbero essere in grado di decifrare l'input, ad esempio, whatsapp messenger dovrebbe decrittografarlo inserire prima di aggiungerlo al campo di testo. destra? – Yazan

+0

@Yazan: Sì, devono decifrare. Ma l'idea è di ridurre la superficie di attacco. Non rimuoverlo completamente, perché, sicuramente non è possibile (almeno oggi). I keylogger sono uno dei metodi più facili da implementare e sono rimasto scioccato nel sapere come sia facile acquisire sequenze di tasti in sistemi come Ubuntu. Sono semplicemente distribuiti ovunque. Oltre a ciò, la privacy degli utenti è una cosa ampia. Possiamo occuparci solo di un'area alla volta. Sono fermamente convinto che l'idea che ho proposto garantirà una privacy migliore di quella che abbiamo ora. Coz, è sempre meglio avere qualcosa che funzioni che niente. –

+0

E, ho sentimenti contrastanti sul motivo per cui nessuno ha chiesto cosa esattamente mi ha spinto qui :-). Ad ogni modo, dovrei dire, adoro SO Community. –

risposta

14

Non realisticamente.

Pochi programmatori hanno a che fare con input di basso livello. Di solito è gestito da altre cose. Gli sviluppatori Web, ad esempio, raramente vengono coinvolti in una sequenza di tasti per sequenza di tasti, anche per scoprire quando si verificano quegli eventi (ad esempio, per la convalida in tempo reale), figuriamoci per elaborare manualmente quell'input (ad esempio, inserire il carattere successivo digitato dopo il cursore del campo e facendo avanzare il cursore di una posizione).

Inoltre, gli utenti non hanno l'abitudine di modificare frequentemente i loro metodi di immissione. Ad esempio, non collego una tastiera USB diversa quando visito Stack Overflow rispetto a quando visito Tweetdeck. Nel mondo di Android, questo significa che l'utente si aspetta che il proprio editor metodo di input funzioni su tutte le app e non debba continuare a modificare gli editor dei metodi di input solo per rendere felici alcune persone.

Inoltre, non è possibile modificare magicamente il protocollo tra l'editor del metodo di immissione (a.k.a., tastiera software) e il sistema operativo Android. La tua tastiera aumenterà gli eventi chiave. Sei libero di dire che la tua tastiera offre sostituzioni per quegli eventi come un meccanismo di "crittografia", ma sarebbe più un codice di sostituzione grezzo (ad es., "ogni volta che l'utente digita A, invia oltre ;"), poiché non è possibile decidere unilateralmente di espandere lo spazio eventi chiave.

Di conseguenza, non solo sarà necessario scrivere l'editor del metodo di immissione, ma sarà necessario scrivere la propria ROM personalizzata con un framework Android personalizzato in grado di gestire la "decrittografia". Oppure, dovresti costringere tutti gli sviluppatori di mondi a riscrivere le loro app. E in entrambi i casi, un keylogger potrebbe rilevare banalmente che il tuo è l'editor del metodo di input e annotare questo fatto, quindi chiunque utilizzi i log può eseguire qualche decifrazione banale per convertire ; di nuovo in A.

Ora, se si sta scrivendo qualche app in cui si desidera evitare un editor di metodi di input canaglia, è possibile inserire la propria tastiera di inserimento dati in quella app. Quindi, farai solo arrabbiare molti degli utenti della tua app, dato che la tua tastiera in-app non è quella che vogliono usare, o manca delle funzionalità a cui sono abituati (ad esempio, supporto per utenti non vedenti, supporto per il loro particolare linguaggio).

+0

Questo è un grande input. Inizialmente ho pensato di creare una fonte di tastiera Android e aggiungere questa tecnica di crittografia come funzionalità. Quindi, le app esistenti funzionerebbero bene. È solo che le app che forniscono una chiave di crittografia quando si richiama la tastiera avranno tratti cifrati. La decrittografia dei tratti dipende dall'app che fornisce la chiave. Inizialmente ho capito che la tastiera Android trasmette il tratto chiave e viene ricevuta dall'app che colloca il carattere nel campo di testo. Per favore perdonami, se la mia comprensione è sbagliata. –

+0

Lascerò la taglia ON per un po ', solo per vedere cosa ne pensano gli altri. Comunque, grazie per il tuo tempo. –

+0

@xyz: "La mia comprensione iniziale era che la tastiera Android trasmette il tratto chiave e viene ricevuta dall'app che colloca il carattere nel campo di testo" - se per "trasmissione" si intende l'uso di un 'BroadcastReceiver', non lo sono consapevole che questa è l'implementazione. – CommonsWare

1

È possibile eseguire questo solo se si sta sviluppando la propria tastiera e si configura Android per utilizzarlo. Non è così difficile con una certa esperienza nella programmazione Android.

Basta cercare su Google "tastiera personalizzata per Android" per ulteriori input.

+1

Ciao, hai chiesto pareri e sulla possibilità di implementare questo e hai ottenuto la risposta in questo modo. Se stai effettuando downvoting, ti preghiamo di considerare prima la modifica della domanda. Cosa vuoi esattamente? Una soluzione completa implementata per te da qualcuno qui? –

+4

"Una risposta canonica dettagliata"! = "Sì è possibile, Google it." –

+3

Lol .. Solo per vostra informazione: la roba e la roba di risposta canonica sono emerse un giorno dopo che la risposta è stata fatta. In origine era solo una richiesta di opinioni. –

6

Ecco quello che vorrei fare per implementare un sicuro metodo di input paradigma - come espresso nella domanda - per Android:

Prima di tutto, io parto dal presupposto di aver letto e compreso la sezione "Sicurezza" per InputMethodManager qui: InputMethodManager

Allora, che dobbiamo sviluppare è un metodo di input (IME), che è un servizio di Android, che, insieme con incantevoli la vista tastiera personalizzata, implementa due interfacce:

  1. InputMethod
  2. InputMethodSession

Come per la sezione di sicurezza nella documentazione di cui sopra, l'utente deve accettare di buon grado il vostro IME come l'IME del sistema. Inoltre, Android si assicurerà che solo il sistema si leghi al tuo servizio e utilizzi l'interfaccia InputMethod che viene utilizzata per mostrare/nascondere la tastiera ecc. Quindi, qui le cose sono abbastanza sicure per te e per tutte le app che usano la tastiera.

Ora, venendo al quadro di sicurezza che si desidera implementare:

consente di chiamare Secure Input Method - SIM - e permette di definire il nostro dominio di sicurezza come IME e le applicazioni che voglia utilizzare la SIM. Ecco il significato della seconda interfaccia InputMethodSession

Il più importante - e spesso ignorato il metodo di questa interfaccia è la chiave di questa soluzione e si chiama: appPrivateCommand. Questa interfaccia consente di inviare un comando privato dall'applicazione all'IME. Come per la documentazione, questo metodo può essere utilizzato per fornire funzionalità specifiche del dominio che sono conosciute solo tra IME e i loro client - e questo è esattamente ciò che ti serve per la tua SIM.

Quindi, utilizzando questa interfaccia, le app nel dominio di sicurezza possono passare qualsiasi informazione di sicurezza (ad esempio, qualche forma di credenziali) che vogliono consegnare all'IME. Spetta all'utente definire un metodo in cui il servizio può comunicare con un server di autenticazione che elabora le credenziali inviate dell'app client e lo approva. Ora se le chiavi di crittografia sono derivate dal tuo IME e dal client, hai stabilito un canale di comunicazione sicuro tra la tua SIM e la sua app client (ad esempio, tramite la crittografia utilizzando una chiave derivata da queste credenziali).

È anche possibile personalizzare l'intero meccanismo definendo alcune sequenze di tasti (come Control + Alt + Canc in Windows) che avvia tutto da solo dall'utente e si può anche fornire un'indicazione visiva (ad esempio, un'icona verde brillante) sulla tastiera che il canale di ingresso è protetto ... Le possibilità sono molte :)

Spero che questo aiuti.

Problemi correlati