Reading Time: 1 minutes
今年8月にマイクロソフトが公表した、Active Directoryの重大な脆弱性(CVE-2020-1472)は、組織内のWindowsドメイン内に存在するドメインコントローラ―やすべてのコンピューターを攻撃者が完全に掌握できるという点で、最も脅威度の高い特権昇格のバグとして波紋を呼んでいます。
「Zerologon」と名付けられたこの脆弱性が悪用されれば、正規な要求を得なくとも、攻撃者へドメインコントローラ―の特権アクセスを与えてしまいます。この攻撃は、ユーザーの認証情報を必要としません。つまり、攻撃者はWindowsドメインネットワークに侵入するだけで良いのです。
★Zerologonとは?
Zerologonとは、Netlogonにおける脆弱性です。Netlogonとは、ドメインに参加しているコンピューターのID検証をドメインコントローラ―に対して行う認証プロトコルです。
Zerologonと呼ばれるこの危険な脆弱性には、共通脆弱性評価システム(CVSS)の10段階の深刻度において、最高レベルの10が割り当てられました。先述の通り、攻撃者はただ内部ネットワークにつながっているだけで、簡単にドメインコントローラ―の管理者権限を奪取できてしまいます。
★脆弱性の詳細
どのようにしてこの脆弱性が悪用されるかについて知る前に、まずNetlogonの仕組みについて理解しておかなければなりません。
プロトコルでは、RPC(Remote Procedure Call )のような認証スキームは使用されません。その代わりに、ドメインに参加しているクライアントとそのドメインコントローラーサーバーとの接続で使用され、互いの共通鍵(またはチャレンジ値)を用いて互いを認証しあう仕組み(カスタマイズされたチャレンジ/レスポンス認証方式)が採用されています。
図1
★認証プロセスのステップ
- クライアントチャレンジ(ランダムな8バイト列)がクライアントから送信される
- サーバーチャレンジ(ランダムな8バイト列)がサーバーから応答する
- 秘密情報(ハッシュ化されたクライアントコンピューターのアカウントパスワード)とそのチャレンジ(ランダムなデータ列)から、共有セッション鍵が算出される
- クライアントとサーバーが、事前に算出されたセッション鍵とチャレンジを使用して、それぞれにクライアントとサーバーの資格情報を発行する
- セッション鍵を伴う資格情報が、ユーザーの認証に使用される
★脆弱性はどこから発生するのか?
この脆弱性は、Netlogon認証プロセスで使われるAES暗号化アルゴリズムの欠陥によるものです。前述の認証プロセスのステップ4でも記載していますが、クライアントとサーバーは、資格情報を生成するためにAES-CFB8という暗号化方式を用います。
そのすべてが「ComputeNetlogonCredential」関数に実装されています。AES-CFB8暗号化方式は、これまで危険にさらされた状態で実装されており、これが今回の脆弱性を生み出す結果に至ったと考えられています。
ComputeNetlogonCredential関数は、8 バイト列のチャレンジ入力を受け取って(前述の認証プロセスのステップ1、2参照)セッション鍵により変換し、クライアント側の資格情報を生成します(前述の認証プロセスのステップ4参照)。
8バイト列のクライアント側の認証情報は、初期化ベクトル(IV)と呼ばれるランダムな16バイト列に付加されます。
AES暗号化方式は、IVに適応されます。AES処理された16バイト列の中の最初の1バイトを取得し、次のプレーンテキストのバイトと XOR処理を行います。プレーンテキスト(以下図2の青色の8バイト)のすべてのバイトが暗号化されるまでこれらの処理を繰り返します。
★問題はどこにあるのか?
AES-CFB8の安全性は、IVがランダムに生成されることを根拠としています。しかし、残念ながらComputeNetlogonCredential関数はこのIVを16バイトの0からなる固定値として定義しています。この場合、256分の1の確率ですべて0の暗号文が返されることとなります(暗号化処理前と同じ)。以下図2をご覧ください。
図2
★「Zero(0)」logon攻撃
- NetrServerReqChallengeコールでチャレンジ値を交換したあと、クライアントはNetrServerAuthentication 3コールを実行して自身を認証する
- コールにはClientCredentialというパラメーターがあり、前のコールで送信されたクライアント・チャレンジにComputeNetlogonCredential関数を適用することによって計算される
- チャレンジには任意の値を設定可能なため、8つの「0」を指定することもできる。この場合、256回の試行のうち、一回は8つの「0」で構成されたClientCredentialとなる以下図3が攻撃時の図となります。
図3
コンピューターの場合、不正なアクセス試行によってアカウントがロックされることがないため、成功するまで何度も(平均256回の)認証を試すことができてしまいます。これにより、たった数秒で成りすましが成立すると言われています。また、この手法であればドメイン内のどのコンピューターでもログイン可能です。
また、同じ方法でNetrServerPasswordSet 2コールを利用すれば、どのシステムのパスワードでも変更ができてしまいます。
★「Zerologon」攻撃を防ぐには
– できるだけ早く、該当するマイクロソフト社のセキュリティパッチを適応してください。
– このスクリプトを使用して、すべてのドメインコントローラーにパッチが適応されているかどうかをチェックしてください。
その際、スクリプト実行者が権限のあるユーザーであることを必ず確認し、悪意ある攻撃者がパッチ未適用のメインコントローラーを発見するための手段とならないよう、十分注意してください。
– 非Windowsのデバイスも、脆弱なNetlogonセキュアチャネル接続を使用しているかもしれません。このような接続は、脆弱なNetlogonセキュアチャネル接続を許してしまうようなドメインコントローラーにおけるグループポリシー設定によって制御・統括されている場合があります。これは、権限のあるデバイスのみにその接続を許すものです。
従って、常にグループポリシーの変更を監視してください。悪意あるアカウントやグループがこのグループポリシーに追加されれば、攻撃権限を与えてしまう結果となります。
★監視すべきイベントID
- ログオンの試みが成功したことを示すイベントID 4624、およびログオンタイプ3(ネットワークログオン)であることを示すイベントID4742(TargetUsernameが「ANONYMOUS LOGON」)
ログオンの試みが成功したことを示すログオンタイプが3(ネットワークログオン)のイベントID4624、およびそれに続くTargetUsernameが「ANONYMOUS LOGON」であるイベントID4742 -
Netlogonセキュアチャネル接続が確立された際に生成されるイベントID 5829
★ネットワーク深層部へのアクセス権奪取や特権昇格のためにオープンソースのツールが利用される場合
- 資格情報がローカルメモリー(LSASS.exe)からダンプされる(漏洩する)
【検知手段】sysmon EventID=10で、TargetImage=*lsass.exe (GrantedAccess=0x1010 か GrantedAccess=0x1410) -
ドメインユーザーのハッシュ化されたパスワードにアクセスするために、MimikatzがNetlogonと共に利用される
【検知手段】sysmon EventID=7 で、ImageLoaded=*WinSCard.dll | *cryptdll.dll | *hid.dll | *samlib.dll | *vaultcli.dllの場合
★Zerologon攻撃を検知できるツール ManageEngine「Log360」のご紹介
ManageEnigneが提供するSIEMツール「Log360」は、ネットワークセキュリティをオールインワンで保護できるソリューションです。
Log360に備わったリアルタイムでのコリレーションエンジンは、不審なセキュリティイベントを相関分析し、Zerologon攻撃の指標となるものかをチェックします。そして、攻撃や疑いのある試み・操作を検知した際は、管理者へリアルタイムでアラートを発報します。
さらに、Log360はこのような攻撃に対し、自動で対処が可能です。例えば、攻撃の疑いがかかったユーザーのセッションを強制終了させたり、デバイス自体をシャットダウンさせたり、カスタマイズされた特定のアクションに対してスクリプトを実行させることもできます。
Log360の無料評価版はこちらからダウンロードできますので、ぜひお試しください!
★コンピューターへのパッチ適用を自動化できるツール ManageEngine「Patch Manager Plus」のご紹介
同じくManageEngineが提供する脆弱性対策パッチ管理ツール「Patch Manager Plus」を活用すれば、コンピューター毎のパッチ適用状況を瞬時に把握し、必要なパッチが未適用となっている対象については自動適用を行えます。
また、パッチ情報を自動収集するデータベースが付属していますので、使用中のアプリケーションやOSの脆弱性情報を集めるために、JVNなどを定期的に確認する必要がありません。
Patch Manager Plusの無料評価版はこちらからダウンロードできますので、ぜひお試しください!
*本記事は、ManageEngineの英語版ブログ記事”Domain controller patch alert! Vulnerabilities grants domain admin access in 10 seconds“を元に加筆・修正したものです。
フィードバックフォーム
当サイトで検証してほしいこと、記事にしてほしい題材などありましたら、以下のフィードバックフォームよりお気軽にお知らせください。