Tapjacking
基本情報
タップジャッキングは、悪意のあるアプリケーションが被害者アプリケーションの上に配置され、被害者アプリケーションでアクションを実行しているかのように見せかけるように設計されたユーザーインターフェースを持つ攻撃です。 実際には、ユーザーが被害者アプリケーションでアクションを実行していることを知らないようにしています。
検出
この攻撃に対して脆弱なアプリを検出するためには、Androidマニフェストでエクスポートされたアクティビティを検索する必要があります(インテントフィルターを持つアクティビティはデフォルトで自動的にエクスポートされます)。エクスポートされたアクティビティを見つけたら、それらがどの権限を必要とするかを確認してください。なぜなら、悪意のあるアプリケーションもその権限が必要になるからです。
保護
Android 12(API 31,32)およびそれ以降
このソースによると**、Android 12(API 31および30)以降では、Androidによってタップジャッキング攻撃が自動的に防止されます。したがって、アプリケーションが脆弱であっても、それを悪用することはできません。
filterTouchesWhenObscured
filterTouchesWhenObscured
**android:filterTouchesWhenObscured
がtrue
**に設定されている場合、View
は別の可視ウィンドウによって覆われているときにタッチを受け取りません。
setFilterTouchesWhenObscured
setFilterTouchesWhenObscured
属性**setFilterTouchesWhenObscured
がtrueに設定されている場合、Androidバージョンが低い場合でもこの脆弱性の悪用を防ぐことができます。
たとえば、true
に設定されている場合、ボタンは覆われている場合に自動的に無効に**なります。
Exploitation
Tapjacking-ExportedActivity
最新のAndroidアプリケーションは、攻撃されたアプリケーションのエクスポートされたアクティビティの前に呼び出すタップジャッキング攻撃を実行するもので、こちらで見つけることができます。
READMEの手順に従って使用してください。
FloatingWindowApp
他のアクティビティの上に配置してクリックジャッキング攻撃を実行するために使用できるFloatingWindowAppを実装した例のプロジェクトは、こちらにあります(少し古いですが、APKをビルドする際は幸運を祈ります)。
Qark
このプロジェクトは現在メンテナンスされておらず、この機能は正常に機能しなくなっています
潜在的なTapjackingの脆弱性をテストするために悪意のあるアプリケーションを作成するために、--exploit-apk
--sdk-path /Users/username/Library/Android/sdk
パラメータを使用してqarkを使用できます。
開発者は、ビューが他のビューによって覆われている場合にタッチイベントを受信しないように選択できるため、緩和策は比較的簡単です。Android Developer’s Referenceを使用して:
時には、ユーザーの完全な知識と同意を得て行われていることをアプリケーションが確認できることが重要です。たとえば、許可リクエストの承認、購入の実行、広告のクリックなどです。残念ながら、悪意のあるアプリケーションは、意図しないビューの目的を隠してユーザーにこれらのアクションを実行させようとするかもしれません。その対処法として、フレームワークは、感度の高い機能へのアクセスを提供するビューのセキュリティを向上させるために使用できるタッチフィルタリングメカニズムを提供します。
タッチフィルタリングを有効にするには、
setFilterTouchesWhenObscured(boolean)
を呼び出すか、android:filterTouchesWhenObscuredレイアウト属性をtrueに設定します。有効にすると、フレームワークは、ビューのウィンドウが他の可視ウィンドウによって覆われているときに受信されたタッチを破棄します。その結果、ビューは、トースト、ダイアログ、または他のウィンドウがビューのウィンドウの上に表示されているときにタッチを受信しません。
Last updated