# Android Task Hijacking {{#include ../../banners/hacktricks-training.md}} ## タスク、バックスタックとフォアグラウンドアクティビティ Androidにおいて、**タスク**はユーザーが特定の作業を完了するために対話するアクティビティのセットであり、**バックスタック**内に整理されています。このスタックはアクティビティが開かれた時に基づいて順序付けられ、最も最近のアクティビティが最上部に表示され、**フォアグラウンドアクティビティ**となります。どの瞬間でも、このアクティビティだけが画面に表示され、**フォアグラウンドタスク**の一部となります。 アクティビティの遷移の簡単な内訳は以下の通りです: - **アクティビティ 1** はフォアグラウンドの唯一のアクティビティとして開始されます。 - **アクティビティ 2** を起動すると、**アクティビティ 1** がバックスタックに押し出され、**アクティビティ 2** がフォアグラウンドに表示されます。 - **アクティビティ 3** を開始すると、**アクティビティ 1** と **アクティビティ 2** がスタックのさらに後ろに移動し、**アクティビティ 3** が前面に出ます。 - **アクティビティ 3** を閉じると、**アクティビティ 2** が再びフォアグラウンドに戻り、Androidの効率的なタスクナビゲーションメカニズムを示します。 ![https://developer.android.com/images/fundamentals/diagram_backstack.png](<../../images/image (698).png>) ## タスクアフィニティ攻撃 ### タスクアフィニティと起動モードの概要 Androidアプリケーションにおいて、**タスクアフィニティ**はアクティビティの好ましいタスクを指定し、通常はアプリのパッケージ名に一致します。この設定は、攻撃を示すための概念実証(PoC)アプリを作成する際に重要です。 ### 起動モード `launchMode`属性は、タスク内のアクティビティインスタンスの処理を指示します。**singleTask**モードはこの攻撃にとって重要であり、既存のアクティビティインスタンスとタスクアフィニティの一致に基づいて3つのシナリオを指示します。この脆弱性は、攻撃者のアプリがターゲットアプリのタスクアフィニティを模倣する能力に依存し、Androidシステムを誤導して攻撃者のアプリを起動させることにあります。 ### 詳細な攻撃手順 1. **悪意のあるアプリのインストール**: 被害者は攻撃者のアプリをデバイスにインストールします。 2. **初期アクティベーション**: 被害者は最初に悪意のあるアプリを開き、攻撃の準備をします。 3. **ターゲットアプリの起動試行**: 被害者はターゲットアプリを開こうとします。 4. **ハイジャックの実行**: 一致するタスクアフィニティにより、悪意のあるアプリがターゲットアプリの代わりに起動されます。 5. **欺瞞**: 悪意のあるアプリはターゲットアプリに似た偽のログイン画面を表示し、ユーザーを騙して機密情報を入力させます。 この攻撃の実践的な実装については、GitHubのTask Hijacking Strandhoggリポジトリを参照してください: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg)。 ### 予防策 このような攻撃を防ぐために、開発者は`taskAffinity`を空の文字列に設定し、`singleInstance`起動モードを選択することで、他のアプリからの隔離を確保できます。`onBackPressed()`関数をカスタマイズすることで、タスクハイジャックに対する追加の保護を提供します。 ## **参考文献** - [**https://blog.dixitaditya.com/android-task-hijacking/**](https://blog.dixitaditya.com/android-task-hijacking/) - [**https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html**](https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html) {{#include ../../banners/hacktricks-training.md}}