OnePlus 3/3T ブートローダーの脆弱性により、Fastboot で SELinux が Permissive モードに変更される

click fraud protection

OnePlus 3/3T ブートローダーの深刻な脆弱性により、攻撃者は SELinux の状態を Enforcing から Permissive に切り替えることができます。 さらに詳しく知りたい方は続きをお読みください。

ワンプラス3 そしてその ワンプラス 3T は現在購入できる最高の携帯電話の 1 つです。 2017 年の次期フラッグシップ製品はまだ消費者に公開されていませんが、それらが発表されていない場合、 OnePlus 3/3T は現実世界のパフォーマンスを支配します お手頃な価格で。

しかし、デバイスを公平に評価するのであれば、 OnePlus の最善の努力にもかかわらず、OnePlus 3/3T には欠点がないわけではないことを認識する必要があります。 たとえば、以前に次のようなセキュリティ問題について報告しました。 OnePlus から IMEI の詳細が漏洩 携帯電話でアップデートをチェックするときに、ネットワーク経由でアクセスできます。 そして今、リストに追加すべき別のセキュリティ問題があり、これはより危険な影響をもたらす可能性があります。

OnePlus 3/3T のブートローダーの脆弱性により、悪意のある攻撃への扉が開かれます。 IBM X-Force Application Security Research Team の Roee Hay によって発見されたもので、 IBM X-Force Exchangeプラットフォームで公開、この脆弱性により、攻撃者はデバイス上の SELinux 状態を操作し、それによってデバイスを寛容モードに切り替えることができます。 攻撃者に必要なのは、 物理的なアクセスのいずれか デバイスに、または ADB 接続へのリモート アクセス デバイスに。

SELinux、または Security-Enhanced Linux は、セキュリティ ポリシーへのアクセスと管理を可能にする Linux カーネル セキュリティ モジュールです。 SELinux は Android 4.3 以降 Android に導入され、次のように設定されました。 強制する Android 4.4 以降、モードがデフォルトとして設定されています。 この必須のアクセス制御システムは、既存のアクセス制御権限を強制し、権限昇格攻撃を防止するのに役立ちます。 これは、悪意を持って root アクセスを取得することを目的としたアプリや脆弱性など、デバイスの不正な制御に対するハードルとして機能します。 SELinux を次のように設定する

強制する Android のデフォルトでは、このような攻撃から一般ユーザーを保護するための最初のステップとして機能します。

この脆弱性が悪用するのはかなり簡単です。実際、一般的な悪用とはどのようなものかを想像するよりも、OnePlus 側の大きな見落としのようです。 まず、攻撃者は OnePlus 3/3T を「ファストブート」モードで再起動します。物理的にアクセスできる場合は、起動中にボリュームを上げるボタンを押すだけですが、そうでない場合は、ADB コマンドを発行できます。 adb reboot bootloader デバイスに。 デバイスの fastboot モードは USB インターフェイスを公開するため、ロックされたデバイス上でセキュリティに依存するコマンドを完了することはできません。 ただし、OnePlus 3/3T では、単に fastboot oem selinux permissive fastboot インターフェイスを介したコマンドにより、SELinux モードが 強制する寛容.

fastboot oem selinux permissive
...
OKAY[ 0.045s]
finished. totaltime: 0.047s

...

OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $

問題をさらに複雑にしているのは、OnePlus 3 と 3T には、デバイスの現在の SELinux 状態について言及するためのエントリが「バージョン情報画面」に存在しないことです。 被害者は、エクスプロイトが積極的に使用されているのを目撃しなかった場合、デバイスが侵害された状態に気付かないままになります。 「バージョン情報画面」に SELinux 状態のエントリが存在しないのは、Android 6.0 ベースのオープン ベータ リリースと Android 7.0 公式 ROM の両方にありません。

SELinux の状態を Permissive に切り替えるアプリがいくつか存在します。 SELinuxModeChanger 応用。 この方法で SELinux を切り替えると、再起動しても状態が維持されません。 ただし、できます スクリプトを利用する を維持するために 寛容 ハードリブート後の SELinux の状態。 これらの方法は両方とも root アクセスを必要とします。これは、ユーザーがさらされているリスクについてすでに知っていることを意味します。 ただし、SELinux モードを次のように変更する場合の主な違いは、 寛容 上記の脆弱性を利用することは、単に ハードリブートしても持続する、そうなります root アクセスを必要とせずに.

現時点では、この脆弱性に対する救済策は存在しません。


アップデート:

私たちが手を差し伸べたのは、 スルタンクスダOnePlus デバイス用の最も有名なカスタム ROM 開発者の 1 人である彼が、この問題についてさらに詳しく知るのに役立つかどうかを確認してくれました。 彼はすぐにコードを調べてルート ソースを見つけました。次のようなものを見つけました。

「fastboot oem selinux」の方法 " コマンドが機能するのは、Linux の起動時にカーネル コマンド ラインに追加の引数を追加することです。 追加の引数は「androidboot.selinux=」の形式で指定します。"、 どこ 「寛容」になることができます。 ここでおかしなことになります。「androidboot." カーネル コマンド ラインの引数は Android の init によって解析されます。 通常の Android 実稼働ビルド (「ユーザー」ビルド) では、「androidboot.selinux」引数は完全に無視され、selinux が常に強制的に適用されます。 したがって、このバグは 2 つの問題で構成されています。

  1. ユーザーは、通常はエンジニアリング/デバッグ ROM ビルドに対して selinux を許可するフラグをブートローダーに渡すことができます。
  2. OnePlus は、実稼働 ROM ビルドでも「androidboot.selinux」フラグを尊重するために Android の init を変更しました

ここでは、実稼働ビルドの「androidboot.selinux」フラグを無視するように Android の init が設定されています。 https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7

ソース コード内の ALLOW_DISABLE_SELINUX フラグは、ユーザーデバッグおよびエンジニアリング ビルドの場合にのみ 1 に設定されます。

(ROM は実稼働 (ユーザー) モードでビルドしているため、この影響を受けません)

したがって、「androidboot.selinux」は私のROMでは単純に無視されます。「fastboot oem selinux」 " コマンドも、CAF のパブリック ブートローダー ソースにはそのようなコマンドが存在しないため、OnePlus が作成したもののようです。 思いつく限り、ロックされていないブートローダーを使用しているユーザーのためにこれを修正する方法は 4 つあります。

  1. ブートローダーを 16 進数編集して、文字列「selinux」のすべてのインスタンスを別のもの (「sclinux」など) に変更し、フラグが Android の init によって認識されないようにします。
  2. OxygenOS の Android init バイナリを 16 進編集して、「androidboot.selinux」のすべてのインスタンスを 何か違うもの (「androidboot.sclinux」など) なので、Android init は認識しません。 androidboot.selinux フラグ
  3. Android の init から「androidboot.selinux」フラグを隠すために、SafetyNet バイパスと同様のハックをカーネル コマンド ライン ドライバーに追加します。

舞台裏で何が起こっているのかを解明するために時間と労力を費やしてくれた Sultanxda に感謝します。 また、OnePlus にも連絡を取りました。OnePlus は状況を認識しており、この問題を調査中です。


OnePlus が深刻な問題を公的に認識し、修正に向けた計画が透明であることを願っています。