基礎知識 Android アーキテクチャ
カーネル カーネル層
脆弱性は非常に有害であり、汎用性が高い
ドライバーは数多く、複雑であり、多数のドライバーが存在する可能性があります。脆弱性
ライブラリ システム ランタイム ライブラリ層
システム ミドルウェアの形式で提供されるランタイム ライブラリ
includes libc、WebKit、SQLite など。
AndroidRunTime
Dalvik 仮想マシンとカーネル ライブラリ
FrameWork アプリケーション フレームワークレイヤー
一連のサービスと API インターフェイスを提供します
アクティビティ マネージャー
コンテンツ プロバイダー
ビュー
エクスプローラー
通知マネージャー
アプリケーション アプリケーション層
ホーム画面 ホーム、連絡先 連絡先、電話 電話、ブラウザ ブラウザ
アプリケーション フレームワーク層の API を使用して開発者によって実装されるプログラム
アクティビティ アクティビティ
一般的な Android アプリの脆弱性 (OWASP モバイル トップ 10) プラットフォームの不適切な使用
プラットフォーム機能の悪用、またはプラットフォームの使用失敗プラットフォームのセキュリティ制御を使用します。インテントの悪用、権限の悪用など。
リスク
は非常に広範囲であり、モバイル プラットフォーム上のさまざまなサービスに関係する可能性があります
iOS システムでは、パスワード データがキー チェーンではなくローカル ファイルに保存されるため、擬似暗号化されたバックアップ データから読み取られてしまいます。
Android システムでは、パスワードが不適切に使用されます。インテントにより、悪意のあるユーザーがインテントのコンテンツをハイジャックして変更することになります。元のプロセスの ID 権限を使用してアクションを実行します。
安全でないデータ ストレージ
##データ ファイルまたはディレクトリ
#クリア テキスト ストレージ
#MODE_PRIVATE
data/データパッケージ名/database/*.db
##内部ストレージ
data/データ/プログラム登録/ファイル/*
/ mnt/sdcard/*
各ファイルを参照し、 /data/data/package 名ディレクトリの下にあるディレクトリを確認し、他のユーザーが読み取り可能なファイルがあるかどうかを確認します。 File
openFileOutput、getSharedPrefreences、openOrCreateDatabase およびその他の関数のモード パラメーターは MODE_PRIVATE(0x0000)
データ通信の脆弱性
# #LAN スニッフィング、悪意のある公衆 WIFI、悪意のあるプロキシ サービス、DNS ハイジャックなどを通じてクリア テキスト通信をキャプチャします。中間者攻撃を生成するその他の手段
##弱い SSL 証明書の検証
return があるかどうかを確認します。 void
#Fiddler プロキシを有効にしてリモート アクセスを許可します。ホストがプロキシに接続します
Xp、Patch、その他の方法によってバイパスされる可能性があります
コンポーネント露出の脆弱性
Android:exported は 4 つの主要コンポーネントに共通の属性で、他のアプリケーションが現在のコンポーネントを呼び出すことがサポートされているかどうかを示すために使用されます。
インテント フィルターがある場合、デフォルト値は true、それ以外の場合、デフォルト値は false
エクスポートされたエクスポートされたもののアクセス許可制御コンポーネント
認証のバイパス
アクティビティは公開された後に第三者によって呼び出され、ログイン/する可能性があります。パスワードを使用せずにパスワードをリセットする
機密情報の漏洩
recviver は、公開された後に第三者に公開され、デバッグやその他の情報が閲覧される可能性がある に含まれる機密情報 特権プログラムは、高特権プログラムによって公開されたコンポーネントを呼び出すことにより、高特権のアクションを実行します。
##マイニング方法
drozer のアタックサーフェス ツールを使用してセキュリティ評価を実行します
弱い暗号化の脆弱性
パスワードのハード コーディング
AES/DES の弱い暗号化
ECB モードは分析またはリプレイ攻撃に対して脆弱ですドメイン管理がされていないstrict
setAllowUniversalAccessFromFileURLs (リモート開示につながる)
##パスワードを平文で保存
ユーザーが WebViEW に入力したユーザー名とパスワードを保存することを選択すると、それらはアプリ ディレクトリの data.db に平文で保存されます
#動的分析
デバッグ モード分析
パケットキャプチャ解析データとインターフェース
##-
##Marvin にはフロントエンド Web インターフェイス、導入トラブルが含まれています
Inspeckage Xused プラグイン
[Java] プレーン テキスト ビュー コードをコピー
または私の github: https://github.com/MaxSecret/AppVulnerability/tree/master/WebViewFileDemo1
次のコードの主な違いは、今回ロードされる Attack_file です。 html
private Uri mUri;
//文字列 mUrl2 = "file:///android_asset/html/test.html";
protected void onCreate(Bundle SavedInstanceState) {
setContentView(R.layout.activity_main);
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) {
//ここで必要な機能
return super.onJsAlert(view, url, message, result);
}
});
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 "このテキストは Java レイヤーから返されます。 js text = " text;
}
public void onImageClick(String url, int width, int height) {
final String str = "onImageClick: text = " url " width = " width "高さ = "高さ;
Log.i("leehong2", str);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), str, Toast .LENGTH_LONG).show();
}
});
}
}
}
ここでは webView.getSettings().setAllowFileAccessFromFileURLs(true) を示し、ファイル ファイルを JavaScript 経由でアクセスできることを示しています。
我们再来看 Attack_file.html の代番号:' <本文> <スクリプト> function stoneFile() { var file = "file:///mnt/sdcard/233.txt"; var xmlHttpReq = new XMLHttpRequest(); xmlHttpReq.onreadystatechange = function(){ if(xmlHttpReq.readyState == 4){ alert(xmlHttpReq.responseText); } } xmlHttpReq.open("GET", file); xmlHttpReq.send(null); } stealFile();