PSA: SELinux を許可に設定して何かをインストールする場合は注意してください

文書化されていない Android 機能により、任意のアプリが寛容な SELinux 環境で root アクセスを取得できるようになります。 さらに詳しく知りたい方は続きをお読みください。

Android モッディングの世界では、root アクセスがすべての基礎であるとみなされる傾向があります。 これにより、ユーザーは自分のデバイスを完全に制御し、標準構成では常に利用できない機能を追加できるようになります。 しかし、「大いなる力には大いなる責任が伴う」と言われるように、自分が何をしようとしているのかを理解していない限り、Android のセキュリティ モデルを回避するのは賢明ではありません。 私たちのフォーラムに参加しているベテランの Android 愛好家なら、おそらくデバイスにバックドアが存在する可能性があることに気づいているでしょう。 最新のセキュリティを備えた最新の Android バージョン上で、信頼できる root 対応 MOD を実行している可能性が高くなります。 パッチ。 そうは言っても、機能しているように見える限り、どのような root 調整をインストールしてもあまり気にしない人を何人か知っているかもしれません。 SELinux が許可に設定されている場合にのみ動作する大量の MOD が今でも見つかるのはこのためです。そのため、ユーザーはセキュリティ上の脅威に対して非常に脆弱になります。

SELinuxとは

SELinux、または セキュリティ強化された Linuxは、セキュリティ ポリシーへのアクセスと管理のために特別に設計された Linux カーネル セキュリティ モジュールです。 もともと Android 4.3 Jelly Bean で導入され、Android 以降はデフォルトとして Enforcing モードに設定されていました。 4.4 KitKat、SELinux は、アクセス制御権限を強制し、権限昇格を防止するのに役立ちます 攻撃します。 一言で言えば、SELinux は、悪意を持って root アクセスを取得することを目的としたアプリや脆弱性など、デバイスに対する不正な制御のハードルとして機能します。 SELinux をデフォルトで「強制」に設定することは、通常のユーザーをこのような攻撃から保護する重要な方法の 1 つです。

Permissive SELinux が推奨されない理由

繰り返しになりますが、Android デバイスで root アクセスを実現する一般的な方法では、必ずしも SELinux ステータスを変更する必要はありません。 SELinux モードを「Enforcing」から「Permissive」に移行すると、デバイス上の主要なセキュリティ機能の 1 つが意図的に無効になります。 ユーザーは、特殊なカスタム カーネルをインストールするか、既存のブート イメージのパラメータを変更することにより、明示的にこの動作を許可する必要があります。 適切な SELinux ポリシーを欠いてコーディングが不十分な MOD は、通常、エンドユーザーに寛容な SELinux への移行を強いることになり、実質的に攻撃対象領域が拡大します。 まさに開発者そのものです vvb2060 彼らが証明したとき 概念実証の権限昇格メソッドを公開しました ここで、制御を獲得するための唯一の要件は、寛容な SELinux です。

マギカに入る

ユーザーが SELinux を許可に設定した Android 10 (以降) を実行している自分のデバイスで完全な root アクセスを取得するのは、驚くほど簡単です。 do: インストールを押すだけで、「Magica」が自動的にサービスの root アクセスを取得し、Magisk をブートにインストールします。 画像。 これは、単にデバイスを調整するよりもはるかに広い範囲のものです。 XDA 上級認定開発者および Magisk メンテナーによると トップジョンウ、マルウェアを含む任意のアプリ、 同意や許可なしにデバイスを永久にルート化できる PoCを活用して。

Magica が何を悪用しているのか技術レベルで疑問に思っている場合は、topjohnwu が次のように説明しています。 Redditの投稿:

「SELinux がブート中に許可されている場合、zygote はこれを認識し、seccomp syscall フィルターを無効にします。 これにより、基本的に、サードパーティのプロセスで許可されるシステム コールの制限が解除されます。

Android 10 以降には、「App Zygote」と呼ばれる新しい「文書化されていない」機能があり、サードパーティのアプリが「分離サービス」用に独自の Zygote を生成できるようになります (これもほぼ文書化されていません)。 「App Zygote」と「分離サービス」はどちらも Chrome/Webview* 用に設計された特別な機能です。 App Zygote プロセスは特別な権限で実行され、seccomp を無効にすると、setuid 0 を呼び出して権限を昇格し、root アクセスを取得できます。

これは、通常のルート ソリューション (Magisk など) が提供するものと比較すると、まだ何らかの制限がありますが、UID=0 の場合、Android の多くのセキュリティ対策は完全に無効になります。 たとえば、ブート イメージにパッチを適用するために使用するのに十分です。つまり、「実際の」root 権限を取得するために、変更された Magisk などのマルウェアを挿入するために使用できることを意味します。

更新: UID=0 自体は何ができるのですか? Android のフレームワーク内では、要求プロセスの UID が 0 の場合、ほとんどすべてのサービスにブラインド グリーン ライトが表示されます。 これは、このルート プロセスが Android 固有の API (ActivityManager など) を使用して大量のものを操作できることを意味します。」

※開発者によると アビラックス, これら 2 つの機能は、より一般的には「複数の分離されたプロセス間でリソースとメモリを共有するために」設計されています。

結論

寛容な SELinux 環境では、マルウェアの標的となったユーザーに取り返しのつかない被害が及ぶ可能性があることを考慮し、絶対に必要な場合を除き、すべてのユーザーが強制を継続することを強くお勧めします。 概念実証エクスプロイトを入手できたのは幸運だっただけですが、何人のマルウェア作成者がこの攻撃経路についてすでに知っているかはわかりません。 結局のところ、被害者は、自分のデバイスが侵害された状態に気付かないままになることになります。 エクスプロイトが積極的に使用されているのを目撃します。永続的なルートを持つ不正アプリの場合、これを達成するのは難しくありません。 アクセス。