Java ha una funzionalità chiamata Java Native Interface (JNI) , che consente di chiamare nativo funzione codice macchina dall'interno del bytecode di Java. Questa funzione consente di eseguire efficacemente il codice nativo della macchina da una libreria condivisa nativa, che, nel caso di app Android apk, lo sviluppatore dell'app fornisce all'interno del pacchetto apk.
Il mio dubbio è se questo JNI dovrebbe essere un problema di sicurezza ? Cioè quel codice al di fuori della macchina virtuale Dalvik, il codice nativo diretto potrebbe essere un rischio più elevato per attaccare il sistema, dal momento che il bytecode java attraverso Dalvik?
Il codice nativo è un problema di sicurezza più grande del codice in una macchina virtuale?
Alcuni sfondi
JNI non è l'unico modo per eseguire codice nativo, anche se conveniente perché non si deve eseguire molta copia / incorporamento di un binario da eseguire (cioè dalle risorse di apk a una posizione eseguibile) Comunque anche questo è possibile:
Runtime.getRuntime().exec("/data/data/my.package/my.code.bin").
Ora sono consapevole che, alla fine, nulla è ancora perso, solo perché il codice nativo viene eseguito, ad es. il modello di sicurezza di molti desktop box funziona anche con applicazioni native in esecuzione. In effetti uno è almeno fortunato che Android inserisce le app nel proprio ID utente ID, quindi si potrebbe dire in prima persona che anche in natività uno è più sicuro su Android, che eseguire firefox e chromium con lo stesso me@mybox
utente su alcune desktop box .
Il punto di svolta, che motiva anche la domanda se costituisce un problema di sicurezza, è che il codice nativo mi sembra molto più flessibile per attaccare il sistema tramite systemcall e buffer overrun ecc., che possibile per un attacco occorso dall'apk / apps Base codici Java. Dopotutto anche per cose legittime Dalvik / Java si intromette e viene disabilitato a causa del suo obiettivo di portabilità.
Supponendo che vi sia un rischio associato a JNI e alla chiamata exec, sto sbagliando o Android non dispone di un'impostazione di autorizzazione per quello. Quindi, per valutare la domanda, dovrebbero esserci "extra upvotes" per confermare o rifiutare che Android non abbia le impostazioni di autorizzazione per-per-app per JNI. La mia app per iPod installa almeno con il messaggio:
Do you want to install this application? It does not require any special access?
che sembra indicarmi che non richiederebbe alcun permesso. Eppure so che può eseguire codice nativo e codice nativo JNI.