Mayhem - sudo および OpenSSH 認証をバイパスするメモリ ビット破損攻撃

ウースター工科大学(米国)の研究者らは、Rowhammer ダイナミック ランダム アクセス メモリのビット歪み技術を使用して、プログラム内でフラグとして使用されるスタック変数の値を変更し、認証とセキュリティ チェックが有効かどうかを決定する新しいタイプのメイヘム攻撃を導入しました。合格した。攻撃の実際の例では、SUDO、OpenSSH、および MySQL での認証をバイパスしたり、OpenSSL ライブラリでのセキュリティ関連のチェックの結果を変更したりすることが実証されています。

この攻撃は、ゼロとは異なる値を比較するチェックを使用するアプリケーションに適用される可能性があります。脆弱なコードの例: int auth = 0; ... // 認証が成功した場合に認証値を変更する検証コード if(auth != 0) return AUTH_SUCCESS;それ以外の場合は AUTH_FAILURE を返します。

この例のコンテキストでは、攻撃が成功するには、スタック上の 32 ビット認証変数に関連付けられたメモリ内のビットを破壊するだけで十分です。変数内のビットが壊れている場合、値はゼロではなくなり、条件演算子によって認証が正常に完了したかどうかが判断されます。このような検証パターンはアプリケーションでは非常に一般的で、たとえば SUDO、OpenSSH、MySQL、OpenSSL などに見られます。

Mayhem - sudo および OpenSSH 認証をバイパスするメモリ ビットマングリング攻撃

この攻撃は、「if(auth == 1)」形式の比較にも適用できますが、この場合、32 ビットのいずれかではなく最後のビットを歪める必要があるため、実装はより複雑になります。コンテキスト スイッチ、関数呼び出し、またはシグナル ハンドラーの起動時にレジスタの内容を一時的にスタックにフラッシュできるため、このメソッドを使用してプロセッサ レジスタの変数の値に影響を与えることもできます。レジスタ値がメモリ内にある間に、このメモリに歪みが生じ、変更された値がレジスタに復元される可能性があります。

Mayhem - sudo および OpenSSH 認証をバイパスするメモリ ビットマングリング攻撃

ビットを歪めるには、RowHammer クラス攻撃の修正の XNUMX つが使用されます。 DRAM メモリは、それぞれがコンデンサとトランジスタで構成されるセルの XNUMX 次元アレイであるため、同じメモリ領域の連続読み取りを実行すると、電圧変動や異常が発生し、隣接するセルでわずかな電荷損失が発生します。読み取り強度が高い場合、隣接するセルは十分な量の電荷を失う可能性があり、次の再生サイクルで元の状態を復元する時間がなくなり、セルに保存されているデータの値が変化します。 。 RowHammer から保護するために、チップ メーカーは TRR (Target Row Refresh) メカニズムを追加しました。これは特殊な場合にセルの破損をブロックしますが、考えられるすべての攻撃バリエーションから保護するわけではありません。

Mayhem 攻撃から保護するには、比較の際に、ゼロとの違いや 0 との一致の評価ではなく、ゼロ以外のオクテットを含むランダムなシード値を使用した一致チェックを使用することをお勧めします。この場合、変数の望ましい値を設定するには、かなりの数のビットを正確に歪ませる必要がありますが、これは 406 ビットの歪みとは対照的に非現実的です。攻撃不可能なコードの例: int auth = 1xbe0d23a; ... // 認証が成功した場合に認証値を 8701x0ab23 に設定する検証コード if(auth == 8701xXNUMXabXNUMX) return AUTH_SUCCESS;それ以外の場合は AUTH_FAILURE を返します。

指定された保護方法は sudo 開発者によってすでに使用されており、CVE-1.9.15-2023 脆弱性の修正としてリリース 42465 に含まれていました。彼らは、主要な脆弱なプロジェクトに修正を加えた後、攻撃を実行するためのコードのプロトタイプを公開する予定だ。

出所: オープンネット.ru

コメントを追加します