この章では「インテントスキームURL攻撃リスク」について学びますが、ネット記事で紹介されるリスクも同様と言えるので、本記事ではこのリスクの発生とその対策をわかりやすく解説します。
1. 脆弱性の原則
インテント スキーム URL (インテント プロトコル URL) を使用すると、Web ページを通じてインテントを送信して、アプリ アプリケーションを開始できます。攻撃者は特別な形式で URL を構築して、システムにインテントを直接送信したり、アプリ アプリケーションのアクティビティ コンポーネントを起動したり、異常なデータを送信したりすることで、アプリケーションの機密情報が漏洩したり、アプリケーションがクラッシュしたりする可能性があります。
上記の脆弱性の説明からわかるように、通过web页面发送intent来启动App应用
この操作をパスしないとリスクが発生します过滤和校验
。上記のテキストを分解してみましょう。
(1)web页面:
一般に、検出された APP、つまり を指します被检测APP有浏览器功能,并支持Intent Scheme协议,相当于被检测APP是一个桥梁
。当然若是APP使用了Intent.parseUri方法,并且uri来自于外部输入的话,就算没有浏览器功能,也可能产生此漏洞
(2)启动App应用:
通常、APP の公開されたアクティビティ コンポーネントが開始されます。
総括する:Intent Scheme URLs攻击风险,一般会和其它漏洞进行综合利用,比如:Intent Scheme URLs攻击 + Activity组件暴露 = 可产生拒绝服务漏洞(APP崩溃)、WebView相关漏洞(加载恶意页面、远程代码执行等)、APP静默下载安装等。若被检测APP存在intent scheme URLs漏洞,这就会导致手机设备内的任意APP若存在可关联的漏洞,那么就可以通过Intent Scheme URLs漏洞进行恶意攻击
2. 事前知識
脆弱性の原因は、脆弱性の原理によって知ることができるので、この脆弱性に関するいくつかの知識を理解しましょう。
(1) インテント スキーム プロトコル:
インテント プロトコルを使用して、指定されたアプリのページにロードされた URI 形式でジャンプします。ブラウザ (WebView) 。通常、Intent.parseUri(String uri, int flags) メソッドを使用してインテントを構築します。2 番目のパラメータの値は、Scheme プロトコルの構築方法に影響を与えますが、これはおおよそ次のとおりです:
a.Intent.URI_INTENT_SCHEME:
よく使用される、URI 形式は似ています: scheme://host:port/path
b. Intent.URI_ANDROID_APP_SCHEME:
URI 形式は似ています: android-app://{package_id}[/{scheme}[/{host}[/{path}]]][#Intent;{...}]
c.Intent.URI_ALLOW_UNSAFE:
一般に使用されず、あまり安全ではありません
(2) android.intent.category.BROWSABLE:
android.intent.category.BROWSABL
ブラウザが特定の条件下で APP アクティビティを開くことを許可することを意味します。例:
<activity
android:name=".MainActivity"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<!--协议部分,随便设置 test://aaa.com:8088/from?type=abcd -->
<data android:scheme="test"
android:host="aaa.com"
android:path="/from"
android:port="8088"/>
</intent-filter>
</activity>
を渡しIntent.parseUri("test://aaa.com:8088/from?type=abcd",Intent.URI_INTENT_SCHEME)
、開始するインテントを構築しますMainActivity
3. 検出方法
step1:
グローバル コードをスキャンして、Intent.parseUri
step2:
URI が外部入力からのものでIntent.parseUri
メソッドを使用しているかどうかを確認します。その後、取得したインテントを厳密にフィルタリングして、インテントに少なくともaddCategory(“android.intent.category.BROWSABLE”),setComponent(null),setSelector(null)
3 つの戦略が含まれているかどうかを判断する必要があります。URI がコード内にハードコーディングされている場合は、この URI の脆弱性テストを実行します。
step3:
集計結果
4. 修理方法
1. この方法を使用する場合Intent.parseUri
、取得したインテントは厳密にフィルタリングする必要があります。インテントには少なくともaddCategory(“android.intent.category.BROWSABLE”),setComponent(null),setSelector(null)
3 つのストラテジ
が含まれます。 2. 外部ソースからのインテントは厳密にフィルタリングする必要があり、ホワイトリストも設定できます。
asjhan for Android reverse