Tapjacking

Reading time: 8 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

基本情報

Tapjackingは、悪意のある アプリケーションが起動し、被害者アプリケーションの上に位置する攻撃です。被害者アプリが視覚的に隠されると、そのユーザーインターフェースはユーザーを騙してそれに対話させるように設計されており、同時にその対話を被害者アプリに渡します。
実際には、ユーザーが実際に被害者アプリでアクションを実行していることを知らないようにしています

検出

この攻撃に対して脆弱なアプリを検出するには、androidマニフェスト内のエクスポートされたアクティビティを検索する必要があります(インテントフィルターを持つアクティビティはデフォルトで自動的にエクスポートされることに注意してください)。エクスポートされたアクティビティを見つけたら、それらが何らかの権限を必要とするか確認してください。これは、悪意のあるアプリケーションもその権限を必要とするためです

アプリの最小SDKバージョンを確認することもできます。AndroidManifest.xmlファイル内のandroid:minSdkVersionの値を確認してください。値が30未満の場合、そのアプリはTapjackingに対して脆弱です。

保護

Android 12 (API 31,32) 以降

この情報源によると**、**Tapjacking攻撃はAndroid 12 (API 31 & 30) 以降で自動的に防止されます。したがって、アプリケーションが脆弱であっても、それを悪用することはできません

filterTouchesWhenObscured

**android:filterTouchesWhenObscuredtrue**に設定されている場合、Viewは別の可視ウィンドウによってウィンドウが隠されているときにタッチを受け取ることはありません。

setFilterTouchesWhenObscured

属性**setFilterTouchesWhenObscuredがtrueに設定されている場合、Androidバージョンが低い場合でもこの脆弱性の悪用を防ぐことができます。
例えば、
trueに設定されている場合、ボタンは隠されている場合に自動的に無効化される**ことがあります:

xml
<Button android:text="Button"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:filterTouchesWhenObscured="true">
</Button>

利用

Tapjacking-ExportedActivity

最も最近のAndroidアプリケーションでTapjacking攻撃を実行するもの(+ 攻撃対象アプリケーションのエクスポートされたアクティビティの前に呼び出すこと)が見つかるのは: https://github.com/carlospolop/Tapjacking-ExportedActivity

READMEの指示に従って使用してください

FloatingWindowApp

FloatingWindowAppを実装した例のプロジェクトは、他のアクティビティの上に置いてクリックジャッキング攻撃を実行するために使用できるもので、FloatingWindowAppに見つかります(少し古いので、apkのビルドに幸運を祈ります)。

Qark

caution

このプロジェクトは現在メンテナンスされていないようで、この機能は正しく動作していないようです

--exploit-apk --sdk-path /Users/username/Library/Android/sdk パラメータを使用してqarkを使用すると、可能なTapjacking脆弱性をテストするための悪意のあるアプリケーションを作成できます。\

緩和策は比較的簡単で、開発者は別のビューに覆われているときにタッチイベントを受け取らないことを選択できます。Android Developer’s Referenceを使用して:

時には、アプリケーションがユーザーの完全な知識と同意のもとでアクションが実行されていることを確認することが不可欠です。たとえば、権限リクエストを承認したり、購入を行ったり、広告をクリックしたりする場合です。残念ながら、悪意のあるアプリケーションは、ビューの意図された目的を隠すことによって、ユーザーを騙してこれらのアクションを無意識に実行させようとする可能性があります。これに対する対策として、フレームワークは、機密機能へのアクセスを提供するビューのセキュリティを向上させるために使用できるタッチフィルタリングメカニズムを提供します。

タッチフィルタリングを有効にするには、setFilterTouchesWhenObscured(boolean)を呼び出すか、android:filterTouchesWhenObscuredレイアウト属性をtrueに設定します。有効にすると、フレームワークは、ビューのウィンドウが別の可視ウィンドウによって覆われているときに受信したタッチを破棄します。その結果、トースト、ダイアログ、または他のウィンドウがビューのウィンドウの上に表示されるとき、ビューはタッチを受け取らなくなります。

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする