Linuxカーネルで危険な0day脆弱性が検出されました

イスラエルのセキュリティ会社Perception Pointの専門家 、識別子CVE-2016-0728のLinuxカーネルに危険な0day脆弱性の発見を報告しました。 この脆弱性のタイプはローカル権限エスカレーション(LPE)であり、カーネルバージョン3.8以降を使用するLinuxのすべてのバージョンと変更を対象としています。 推測するのは難しくありません。その助けにより、攻撃者はシステムの特権を最大ルートレベルに上げることができます。 このエクスプロイトは、攻撃者がシステムにリモートアクセスし、実行するために起動した後にシステムで使用される可能性があります。 また、悪意のあるプログラムがシステムで最大の権限を取得するために使用することもできます。







AndroidもLinuxカーネルに基づいています。 したがって、これらのバージョンのLinuxカーネルを使用するAndroidのバージョンもこの脆弱性の影響を受けます。 これは、Android KitKat(4.4-4.4.4)以降のバージョンに適用されます。



脆弱性CVE-2016-0728は、キーリングと呼ばれるLinuxカーネルサブシステムに存在します。これにより、OSのアプリケーションとシステムコンポーネントは、暗号化キーなど、メモリに保存された暗号データ​​を安全に処理できます。 より正確には、この脆弱性はカーネル関数join_session_keyringにあり、アプリケーションはAPI keyctlを使用して呼び出すことができ、定数KEYCTL_JOIN_SESSION_KEYRINGを示します。 キーリングが同じプロセスからのオブジェクトの使用に再度接続された後、関数はそのための参照カウンターを増やし、終了する前にそれを減らすことを忘れます(参照リーク)。 したがって、すでに作成されたキーリングオブジェクトに対して識別子KEYCTL_JOIN_SESSION_KEYRINGを指定してkeyctl関数を何度も呼び出すと、その参照カウンターが常に増加します。



脆弱性の悪用は、参照カウント(キーリングオブジェクトの使用フィールド)を可能な限り最大の値だけ増やして、既に削除できることをカーネルに通知することで実現されます。 フィールド自体は符号付き整数(int)として解釈されるため、このためには最上位ビットを設定する必要があります。 カーネルがオブジェクトのメモリを解放し、アプリケーションへのポインターが残った後、エクスプロイトは同じアドレスで別のオブジェクトを選択し、その内容を目的のポインターで満たし、キーリングオブジェクトのポインターの1つを介して呼び出しを引き起こし、コードの実行につながりますエクスプロイトによって提供されたアドレス。





図 この脆弱性に対する成功したPoCの結果(パーセプションポイントデータ)。



Perception Pointは、脆弱なカーネルでLinuxを実行している数千万台のPCとサーバー、およびすべてのAndroidデバイスの66%が脆弱であると推定しています。 同社は、この脆弱性が2012年以降、つまり約4年間カーネルに存在していることを示しています。 カーネルモードコード(マイクロプロセッサの観点から最大の特権を持つ)がユーザーモードの仮想メモリページにアクセスすることを防ぐSMEPやSMAPなどのセキュリティテクノロジでは、エクスプロイトコードが適切に機能しません。



OSの適切なパッチをリリース直後にインストールすることをお勧めします。



All Articles