Kerberos に起因する Windows の脆弱性「Orpheus’ Lyre (オルフェウスの竪琴)」

2017.07.31

他の脆弱性よりも大々的に報道される脆弱性は、数か月に 1 度発生します。


大きく取り上げられる理由として、極めて深刻な脆弱性であるために多くのユーザーが影響を受けること、あるいは、ソフォスが呼ぶところの BWAIN (Bug With An Impressive Name: 印象的な名前を持つバグ) であるが故に注目が集まることが挙げられます (BWAIN は多くの場合、「Heartbleed」のようなキャッチーな名前が付けられ、専用の Web サイトやロゴが作成されます)。


この 2 つの理由が組み合わさっている場合もあります。


最新の BWAIN は、Orpheus’ Lyre(リンク先:英語) (「オルフェウスの竪琴」の意、以下、OL) という美しい名前が付けられた認証に関する脆弱性です。


OL には独自の Web サイトとロゴだけでなくテーマ曲まであり、OL のサイトにアクセスするとこの曲が自動再生されます (ちなみにテーマ曲のタイトルは「クロコダイルの涙」です)。


OL は Kerberos と呼ばれる非常に古いネットワーク認証システムに存在するセキュリティホールです。Kerberos は、Windows でログオンやアクセスコントロールに広く使用されていることで知られています。


Kerberos について


ざっくり言うと、Kerberos はチケットベースの認証システムです。


たとえば、クライアント X がサーバー Y にアクセスする場合、クライアント X はサーバー Y と直接ネゴシエートするのではなく、まず Kerberos サーバーにアクセスして「アクセスチケット」を要求します。こうすることで、認証プロセスの一元管理が実現します。


Kerberos を使用すると、パスワードリストの格納、管理、検証を実行するための数十台から数百台のサーバーが不要になります。パスワードリストに関するタスクは、非常に失敗しやすく、不整合、構成ミス、セキュリティホールの発生を招く可能性があります。


Kerberos の概念は列車のチケット (切符) の仕組みによく似ています。プラットフォームの改札の役割は、決済に応じることでも、切符を発行することでも、お釣りを渡すことでも、利用可能なオプションの選択をサポートすることでもありません。改札の役割は、乗客が券売機または窓口で購入した切符を確認することです。


Kerberos のチケットには強力な暗号が用いられているので、少なくとも理論上は発行後のチケットのハッキングや改ざんは不可能です。


攻撃者がセキュリティチケットのデータフィールドを検出されない方法で改ざんできる場合、チケットの有効期限を延長したり、別のユーザーになりすましたり、別のサーバーで有効なチケットに切り替えたり、クライアントを騙して本物のサーバーではなく不正なサーバーを信頼させたりする可能性があります。


Kerberos で繰り返し使用されるデータ


おそらく、現在のようにサイバー犯罪が問題になる前の 1980 年代に設計されたことが原因ですが、Kerberos は自身が生成したアクセスチケットに格納されるすべてのデータを暗号化していません。


Kerberos チケットのデータフィールドの一部は、平文で 1 回、暗号化された形式でもう 1 回、計 2 回出現します。


厳密に言えば、この種のデータ冗長性は必ずしも必要でもなければ、望ましいものでもありませんが、役立つことがない訳でもありません。これは、列車の切符に (文字が多少滲んでいたとしても) 目的地と日付が印刷されていれば他のチケットと見分けることができますが、厳密な確認が必要な場合には切符にエンコードされた一意の識別番号をチェックするのと同じことです。


この後の展開はもうお分かりでしょう。


OL の脆弱性を発見した研究者たちは、広く使用されている複数の Kerberos の実装において、プログラミングに一貫性がないことに気付きました。


このソフトウェアには、アクセスチケットで暗号化されていないハッキング可能なサーバー名に依存してしまっている箇所がありました。


これは、ロンドン中心部を出発した列車で切符を確認する検札係のようなものです。乗客の切符には EALING BROADWAY が目的地だとはっきり印刷されているのにもかかわらず、乗客が EDINBURGH まで有効だと言い張るのを信じてしまうのと同じです (エジンバラ駅はスコットランドにあり、イーリングブロードウェイ駅までの 50 倍以上距離があり、約 15 倍の運賃がかかります。)


OL の脆弱性を発見した研究者たちによると、ネットワーク上の攻撃者は正規の Kerberos の応答を改ざんして、パッチが未適用のクライアントコンピュータを不正なサーバーに誘導する可能性があります。


列車に例えるならば、攻撃者は検出されない方法で Kerberos のチケットに変更を加えて、本来の目的地である EALING BROADWAY で降りるのではなく、EDINBURGH まで旅をするようにクライアントコンピュータを説得しているようなものです。


脆弱性の修正


Heimdal と呼ばれる Kerberos のオープンソース実装では、驚くほど単純なパッチ(リンク先:英語)について次のように説明しています。


_krb5_extract_ticket() では、チケットに格納されている暗号化されていないバージョンではなく、enc_part に格納されている暗号化されたバージョンから KDC-REP サービス名を取得する必要があります。暗号化されていないバージョンを使用すると、サーバーの偽装などの攻撃が成功する可能性があります。



つまり、Kerberos 認証サーバーから送信された応答から情報を抽出する際には、改ざん対策が施されたデータフィールドのみを使用する、という意味です。暗号化されていない Kerberos データは、検出されることなく変更が可能であるため信頼できませんので、無視してください。


対策


Kerberos の Windows 実装は脆弱でしたが、Microsoft の 2017 年 7 月のセキュリティ情報 CVE-2017-8495(リンク先:英語) で修正されているので、必ず最新の Windows パッチをインストールしてください


Samba(リンク先:英語) ネットワークソフトウェアや FreeBSD のさまざまな Linux ディストリビューションのようなオープンソース実装にはすでにパッチが適用されていますので、影響を受けるオープンソースの Kerberos コンポーネントにできるだけ早くアップデートを適用してください


OL の発見者が指摘しているように、パッチが適用されていないサーバーに対するクライアントによる攻撃でこの脆弱性が悪用されることはありません。その代わり、パッチが適用されていないクライアントが不正なサーバーによって悪用される危険性があります。


つまり、サーバーにパッチを適用するだけで、他のすべてのコンピュータを放置していてはセキュリティ対策は不十分です。


なお、暗号化を計画している場合は、全データの暗号化を検討してください。全データを暗号化しておくことで、後になって暗号化しておかなかったデータについて心配する必要がなくなります。


もしも Kerberos がサーバー名を暗号化して 1 回だけ格納していたとしたら、この脆弱性を引き起こしたエラーが発生することはなかったはずです。


引用元

おすすめの記事はこちら