深刻なセキュリティ: 旧式の暗号が原因の Samba ログオン バグ

深刻なセキュリティ: 旧式の暗号が原因の Samba ログオン バグ

サンバ簡単に言えば、Microsoft Windows で使用されているネットワーク プロトコルをオープンソースで再実装した、非常に便利で非常に人気のあるプロトコルであり、インターネットワーキング (XNUMX つの異なる種類のネットワークを接続すること) におけるその歴史的な重要性を過小評価することはできません。

1990 年代後半、Microsoft ネットワーキングは不透明で独占的な性質を脱ぎ捨て、CIFS として知られるオープン スタンダードになりました。 一般的なインターネット ファイル システム.

しかし、1990 年代初頭、オーストラリアの学者 Andrew Tridgell が、Unix コンピュータを Windows ネットワークに接続できる互換性のあるシステムを実装することで、それを修正しようと試みたとき、それについて「一般的」または「オープン」なものは何もありませんでした。

当時、このプロトコルは正式に SMB と呼ばれていました。 サーバー メッセージ ブロック (CIFS よりもはるかに頻繁に耳にする名前です) そのため、Andrew Tridgell として知られているように、Tridge は彼のプロジェクトを「SMBserver」と呼んでいました。

しかし、その名前の商品はすでに存在していたため、新しいモニカが必要でした。

それがプロジェクトがとして知られるようになったときです サンバ、形の単語の辞書検索から得られた、楽しく覚えやすい名前 S?M?B?.

実際には、 samba は、アルファベット順でゲートから出てくる最初の単語です。 dict Unix コンピューターで一般的に見られるファイルの後に、かなり不適切な単語が続く scramble そして完全に不適切 scumbag:

重大なセキュリティ: 古い暗号化 PlatoBlockchain Data Intelligence によって引き起こされる Samba ログオンのバグ。垂直検索。あい。

あなたが作るいくつかのバグ、あなたが得るいくつかのバグ

何年にもわたって、Samba プロジェクトは、複雑なソフトウェア プロジェクトが一般的に行うように、独自のバグを導入して修正してきただけでなく、その目標が常に Windows ネットワークとシームレスに連携することであったため、基盤となるプロトコルのバグや欠点も継承してきました。

(悲しいことに、いわゆる バグの互換性 多くの場合、既存のシステムで動作する新しいシステムを構築する際に避けられない部分です。)

2022 年末、これらの「継承された脆弱性」の XNUMX つが発見され、Microsoft に報告されました。 CVE-2022-38023、および 2022 年 XNUMX 月の月例パッチ更新でパッチが適用されます。

このバグにより、攻撃者は、暗号化 MAC (メッセージ認証コード) なりすましや改ざんを防止することを目的としています。

特に、ログオン時にデータを操作することで、狡猾なサイバー犯罪者が特権の昇格 (EoP) 攻撃を仕掛ける可能性があります。

少なくとも理論上は、サーバーをだまして「管理者の資格情報をお持ちですか?」という質問に合格したと思わせることができます。 彼らはそれらの資格情報を持っておらず、偽のデータは暗号化検証に失敗したはずですが、.

暗号のアジリティ

このやや難解なバグについて書くことにしたのは、あなたがそれによって悪用される可能性が非常に高いと考えているからではありません (ただし、サイバーセキュリティに関しては、 絶対とは絶対言うな)、しかしそれは さらに別のリマインダー なぜ 暗号化のアジリティが重要.



まとめて、 古いアルゴリズムを永久に残すには、スキルと意志の両方が必要です。 欠陥があることが判明したらすぐに、他の誰かの問題に発展するまで無期限に放置しないでください。 (その「別の誰か」は、XNUMX年後には私たちであることが判明する可能性があります。)

驚くべきことに、CVE-2022-38023 の脆弱性がそもそも存在していたのは、Windows と Samba の両方が、長い間非推奨だったハッシュ アルゴリズム MD5 に基づく整合性保護のスタイルをサポートしていたためです。

簡単に言えば、Microsoft のバージョンの Kerberos プロトコルを使用したネットワーク認証でも、データの完全性を保護できました (または チェックサム、カジュアルだが厳密には正確ではない専門用語を使用する) 欠陥のある暗号化を使用します。

MD5 は壊れていると見なされるため、これ以上使用しないでください。決心した攻撃者は、同じ MD5 ハッシュで終わる XNUMX つの異なる入力を簡単に思いつくことができます。

ただし、おそらく既にご存じのとおり、暗号化の品質を主張するハッシュの要件の XNUMX つは、これは単純に可能であってはならないということです。

専門用語では、同じハッシュを持つ XNUMX つの入力は、 衝突、そしてそれらをすばやく見つけるのに役立つプログラム的なトリックやショートカットがあるはずはありません.

単純な幸運に勝る衝突を見つける方法はありません。大当たりするまで、変化し続ける入力ファイルを何度も何度も試してください。

衝突の真のコスト

悪用可能な弱点のない信頼できるアルゴリズムを想定すると、出力の X ビットのハッシュには約 2 が必要になると予想されます。X-1 既存のファイルのハッシュと衝突した XNUMX 番目の入力を見つけようとします。

たまたま同じハッシュを持つ 2 つの入力 (コンテンツ、サイズ、または構造に関係なく XNUMX つの任意の入力) を見つけることだけが目的であったとしても、XNUMX つよりわずかに多く必要であると予想されます。X / 2 衝突する前に試行します。

それよりも速く確実に「クラック」できるハッシュ アルゴリズムは、暗号学的に安全ではありません。真に疑似乱数の結果がまったくありません。

衝突生成プロセスをわずかに高速化するだけであり、したがって現在実際の生活で悪用可能なリスクではない場合でも、確率よりも優れたクラッキング手順は、暗号の正確さの主張を弱体化させることにより、基礎となる暗号アルゴリズムへの信頼を破壊することに注意してください。 .

2つある場合X さまざまなハッシュ出力が考えられるため、試行回数の約半分の後に、特定の事前定義されたハッシュを使用して入力を見つける可能性が 50:50 になることを望みます。X/ 2 = 2X-1. 新しい入力を試みるたびに、新しいハッシュが どれか 入力の任意のペアが許可されているため、既に試した以前の入力の。 「この巨大なバケット内の任意の 50 つのファイルで問題ありません」ソートの衝突の場合、可能なハッシュ数の平方根をわずかに上回る 50:2 の確率で成功し、√XNUMXX = 2X / 2. したがって、MD128 などの 5 ビット ハッシュの場合、平均して約 2 をハッシュすることが期待されます。127 特定の出力値に一致するブロック、および 264 ブロックを使用して、衝突する入力の任意のペアを見つけます。

高速な MD5 衝突が簡単に

たまたま、同じ MD5 ハッシュを持つ XNUMX つのまったく異なる無関係な疑似乱数入力を簡単に生成することはできません。

また、MD5 ハッシュからさかのぼって、それを生成した特定の入力について何かを明らかにすることは簡単ではありません。これは、信頼できるハッシュが維持する必要があるもう XNUMX つの暗号上の約束です。

しかし、5 つの同一の入力から始めて、入念に計算された「衝突構築」チャンクのペアを各入力ストリームの同じポイントに慎重に挿入すると、控えめなラップトップでも数秒で確実に MDXNUMX 衝突を作成できます。

たとえば、これは私たちが書いた Lua プログラムで、それぞれ 128 バイトの長さの XNUMX つの異なるセクションに簡単に分割できます。

Lua コメントを開始するテキスト行で終わるコード プレフィックスがあります ( --[== これは、ファイルの実行時に無視されるため (8 行目から 128 行目)、コメントを閉じる 9 バイトのコード サフィックスがあるためです (文字列開始 --]== 12行目)でプログラムを終了します。

プログラマーでなくても、アクティブなコードがソース コード ファイル自体の内容 [14 行目] を読み取ることがわかるでしょう (Lua では、値は arg[0] 5 行目は現在実行しているスクリプト ファイルの名前です)、次にそれを 15 進ダンプ [5 行目] として出力し、その後にその MD17 ハッシュ [XNUMX 行目] を続けます。

重大なセキュリティ: 古い暗号化 PlatoBlockchain Data Intelligence によって引き起こされる Samba ログオンのバグ。垂直検索。あい。

ファイルを実行すると、本質的に自己記述的であり、128 つの XNUMX バイト ブロックが明確になります。

重大なセキュリティ: 古い暗号化 PlatoBlockchain Data Intelligence によって引き起こされる Samba ログオンのバグ。垂直検索。あい。

MD5 の使用 リサーチツール 呼ばれます md5_fastcoll、元々は数学者によって作成されました マーク・スティーブンス 2007 年に彼が暗号学の修士号を取得した際、128 バイトの「MD5 衝突構築」チャンクを XNUMX つ作成し、上記のファイルに示したコメント テキストを置き換えました。

これにより、変更がコメントに限定され、どちらのファイルの実行可能コードにも影響しないため、どちらも以前と同じように機能する XNUMX つのファイルが作成されます。

しかし、それらは数バイト目に見えて異なるため、次のコード diff (の専門用語) のように、完全に異なるハッシュ値を持つ必要があります。 検出された差異のダンプ)が明らかにします。

明確にするために、印刷可能なテキストとして意味をなさない 128 バイトの衝突を作成するチャンクを XNUMX 進数に変換しました。

重大なセキュリティ: 古い暗号化 PlatoBlockchain Data Intelligence によって引き起こされる Samba ログオンのバグ。垂直検索。あい。

ただし、両方を実行すると、同じ MD5 出力が得られるため、ハッシュ衝突を表していることが明確に示されます。

重大なセキュリティ: 古い暗号化 PlatoBlockchain Data Intelligence によって引き起こされる Samba ログオンのバグ。垂直検索。あい。

衝突の複雑さを調査

上記の出力文字列から明らかなように、MD5 は 128 ビットのハッシュです。

したがって、前述のように、約 2 が必要になると予想されます。128/2、または264 あらゆる種類の MD5 衝突を生成するために、平均して試みます。

これは、最小で約 18 京の MD5 ハッシュ ブロックを処理することを意味します。64 = 18,446,744,073,709,551,616。

私たちのラップトップで約 5 ブロック/秒のピーク MD50,000,000 ハッシュ レートが見積もられた場合、これは 10,000 年以上待たなければならないことを意味します。 10,000 つのランダムな (必ずしも有用ではない) 衝突が発生するまで、数週間または数か月待つ必要があります。

しかし、上記の 5 つの顔を持つ Lua ファイルのペアは、完全に同一ではありませんが、まったく同じ MDXNUMX ハッシュを持ち、準備に数秒しかかかりませんでした。

実際、自分で選択した 10 の異なる開始プレフィックスを使用して、10 のファイルに対して 10 の異なる衝突を生成すると、14.9 秒、4.7 秒、2.6 秒、2.1 秒、10.5 秒、2.4 秒、2.0 秒、0.14 秒、8.4 秒、そして0.43秒。

明らかに、MD5 の暗号化の約束は、いわゆる 衝突抵抗 根本的に壊れている…

…明らかに、少なくとも 25 億の係数で、衝突を見つけるまでに予想される平均時間 (上で推定したように数千年) を、量産中に実際に測定した最悪の時間 (14.9 秒) で割った値に基づいています。この記事のためだけに XNUMX の異なる衝突。

認証の欠陥の説明

しかし、CVE-5-2022 での MD38023 の安全でない使用についてはどうでしょうか?

Lua スタイルの疑似コードでは、ログオン時に使用される不完全なメッセージ認証コードが このように計算されます:

重大なセキュリティ: 古い暗号化 PlatoBlockchain Data Intelligence によって引き起こされる Samba ログオンのバグ。垂直検索。あい。

説明: 使用される認証コードは、 hmac.md5() として知られているものを使用して、15行目の関数呼び出し キー付きハッシュ、この場合は HMAC-MD5 です。

HMACという名前はの略です ハッシュベースのメッセージ認証コードを生成するための暗号構造、および -MD5 サフィックスは、内部で使用しているハッシュ アルゴリズムを示します。

HMAC は、メッセージ認証コードを生成するために、XNUMX つだけではなく、基礎となるハッシュの XNUMX つの呼び出しと組み合わせた秘密鍵を使用します。

重大なセキュリティ: 古い暗号化 PlatoBlockchain Data Intelligence によって引き起こされる Samba ログオンのバグ。垂直検索。あい。
上記では、内部で MD5 を使用しているため、このフレーバーのアルゴリズムは HMAC-MD5 と示されています。 2023 年に安全と見なされる代替構造には、暗赤色の段階で SHA-256 または SHA-512 ハッシュ関数を使用する HMAC-SHA-256 および HMAC-SHA-512 が含まれます。

最初にキーの一部のビットが反転され、最初のハッシュが開始される前に、提供されたデータの先頭に追加されます。

これにより、入力データの最初のバイトに達したときのハッシュ関数の内部状態に対して、暗号クラッカーがハッシュ処理で衝突やその他の非ランダムな動作を引き起こそうとするときに、制御が大幅に低下します。

特に、秘密鍵は、攻撃者が自分で選んだメッセージ プレフィックスで開始することを防ぎます。 twohash.lua 上記の例。

次に、最初のハッシュが計算されると、キーは反転された異なるビット セットを持ち、その最初のハッシュ値の前に追加され、この新しい入力データが XNUMX 回目のハッシュされます。

これにより、攻撃者が HMAC 計算の最終部分を操作することも防止できます。特に、ハッシング プロセスの最終段階に攻撃者が独自に選択したサフィックスを追加することを防止できます。

実際、MD5 をまったく使用するべきではありませんが、ランダムに選択されたキーを使用して HMAC-MD5 形式で使用すると、アルゴリズムを破る可能性のある現在の攻撃は確認されていません。

真ん中に穴が

したがって、上記の疑似コードの悪用可能な穴は、 hmac.md5() 関数が使用されます。

代わりに、バグの核心は11行目で、認証したいデータが固定長の文字列に圧縮されています.

.. 普通の古い MD5 を XNUMX 回呼び出すだけでプッシュできます。

つまり、15 行目でどの HMAC 関数を選択したとしても、その最終ステップがどれほど強力で衝突耐性があったとしても、11 行目でハッシュ衝突を引き起こす可能性があります。

簡単に言えば、 chksum() 関数を認証する必要があり、衝突ジェネレーターを使用して、同じ MD5 ハッシュを持つ別のデータ ブロックを見つけることができます…

…11行目は、あなたが終わることを意味します まったく同じ入力値 (変数 signdat 疑似コードで) as-secure-as-you-like の最終 HMAC ステップにプッシュされます。

したがって、最後に強力なキー付きメッセージ ダイジェスト関数を使用している場合でも、偽のデータから派生した MD5 ハッシュを認証している可能性があります。

少ないほうが多いだろう

サンバのように セキュリティ情報 問題をコンパクトに説明します。

[…] の弱点は、安全なチェックサムが次のように計算されることです。 HMAC-MD5(MD5(DATA),KEY)つまり、平文データを知っているアクティブな攻撃者は、選択した別のデータを作成できます。 DATA、同じ MD5 チェックサムを使用して、検出されることなくデータ ストリームに置き換えます。

皮肉なことに、 MD5(DATA) 上記の HMAC 式の一部は、一見すると全体的な「混合」プロセスを増加させるように見えますが、衝突耐性が向上します。

途中で MD5 圧縮がなければ、HMAC-MD5 自体で衝突を見つける必要があります。これは、少なくとも試みていたネットワーク セッションの存続期間内ではなく、ほぼ無制限の政府資金があっても、おそらく 2023 年には不可能です。妥協します。

何がそんなに時間がかかりましたか?

ここまでで、私たちと同じように、なぜこのバグが長い間発見されなかったのか、少なくともパッチが適用されなかったのか疑問に思っていることでしょう。

結局のところ、 RFC 6151、2011年にさかのぼり、重要な響きのタイトルを持っています MD5 Message-Digest および HMAC-MD5 アルゴリズムのセキュリティに関する考慮事項の更新、次のようにアドバイスします(XNUMX年以上後の私たちの強調):

HMAC-MD5 への攻撃は、メッセージ認証コードとして使用された場合、実際的な脆弱性を示していないようです。 したがって、既存のプロトコルから HMAC-MD5 を削除することは緊急ではないかもしれません。 ただし、MD5以降 デジタル署名に使用してはならない、新しいプロトコル設計のために、 HMAC-MD5 を使用した暗号スイートを含めることはできません.

ただし、最近の SMB サーバー プラットフォームの大部分では、ユーザーがログオンしようとしたときに HMAC-MD5 認証がオフになっているため、この安全でないモードをサポートしている SMB クライアントは、一般的にそれを使用したことがないようです (そして、使用した場合、とにかく失敗していたでしょう)。試しました)。

クライアントは暗黙のうちに「保護」されているように見え、安全でないコードは無害であるかのように見えました。

したがって、潜在的な問題は、それに値する注目を集めることはありませんでした.

残念ながら、この種の「仮定によるセキュリティ」は、この安全でないサーバーを受け入れているサーバーに出くわした (または誘惑された) 場合、完全に失敗します。 chksum() ログオン中のアルゴリズム。

この種の「格下げ問題」は新しいものではありません。2015 年に、研究者たちは悪名高い FREAK および ログジャム この攻撃は、意図的にネットワーク クライアントをだまして、いわゆる EXPORT 暗号を使用させました。EXPORT 暗号は、米国政府が奇妙にも前世紀に法律で主張した、意図的に弱体化された暗号化モードでした。

当時私たちが書いたように:

EXPORT キーの長さは、1990 年代にほぼクラック可能になるように選択されましたが、プロセッサ速度の進歩に追いつくために拡張されることはありませんでした。

これは、2000 年頃に米国が輸出用暗号を放棄したためです。

それらは最初からばかげた考えでした。米国企業は、輸出制限のない暗号化ソフトウェアを輸入しただけで、自社のソフトウェア産業に損害を与えました。

もちろん、立法者が道を譲ると、EXPORT暗号スイートは不要になるため、誰もがそれらを使用するのをやめました.

悲しいことに、OpenSSL や Microsoft の SChannel を含む多くの暗号化ツールキットは、それらをサポートするコードを保持していたため、あなた (または、もっと心配なことに、十分な情報に通じた詐欺師) はそれらの使用を止められませんでした.

今回、この破損した MD5-plus-HMAC-MD5 プロセスをまだ使用しているサーバーの主な原因は、NetApp の範囲のようです。 一部の製品 どうやら、この危険なアルゴリズムに依存し続けている (または最近までそうしていた) ようです。

そのため、脆弱なネットワーク ログオン プロセスを使用している可能性があり、おそらく気付かないうちに CVE-2022-38023 のリスクにさらされている可能性があります。

何をするか?

このバグはついに 対処した、少なくともデフォルトでは、Samba の最新リリースでは。

簡単に言えば、 Samba バージョン 4.17.5 XNUMXつのオプションを強制するようになりました reject md5 clients = yes および reject md5 servers = yes.

これは、MD5 アルゴリズムを含むさまざまな SMB ネットワーク プロトコルの暗号化コンポーネント (HMAC-MD5 のように理論​​的には安全であっても) は、暗号化されていることを意味します。 デフォルトで禁止.

本当に必要な場合は、ネットワーク内の特定のサーバーにアクセスするためにそれらをオンに戻すことができます.

インターネット標準が XNUMX 年以上前から公式に推奨していた例外を作成する場合は、必ず確認してください…

…最終的にこれらのデフォルト以外のオプションを永久に廃止する日付を自分で設定すること!

暗号攻撃はますます巧妙かつ高速になっているため、単に「もう使用されていない」古いプロトコルやアルゴリズムに頼らないでください。

それらがまったくない場合、それらを使用することはできず、不安に誘い込もうとしている誰かにだまされてそれらを使用することはできないため、それらをコードから完全に取り除きます。


タイムスタンプ:

より多くの 裸のセキュリティ