lufeの備忘録

学んだことをてきとーに。

CODEBLUE2022の「防衛を考え直す-Active Directoryでのリスクの数値化」のレポートと感想

Active Directory(AD)は、企業ネットワークのバックボーンとして広く採用されている。そのため、ADを乗っ取ることは組織全体をコントロールすることを意味する。しかし、ADを悪利用しようとする敵対者のニュースが後を絶たない。われわれの研究によると、これは防御側と攻撃側の間に大きなギャップを生じさせていることが分かった。AD環境における潜在的な攻撃ベクトルが見えないと、防御者は何を防御すべきかの手がかりを得られない。防御者が環境中の潜在的な攻撃ベクトルを認識していたとしても、効果的なリスク低減はもちろん、作業の優先順位をつけるためにリスクの重大性を理解しなければ、防御を実施することは困難な場合が多い。 上記の課題を克服するため、われわれはまず、ADにおいての知識の範囲内ですべての攻撃ベクトルを評価し、防御者に可視性を提供する。そして、その評価に基づき、攻撃ベクトルや経路のリスク定量化を行うために、Active Directoryを対象とした実用的なリスクモデルを提案する。このモデルでは、組織内のさまざまなタイプのシナリオで無理なく利用できるよう、柔軟性を考慮したリスクファクターを定義している。本講演では、リスクモデルを深く掘り下げた後、攻撃ベクトルと攻撃経路をどのようにモデルに適用し、リスクを定量化できるかを紹介する。 本講演では、聴講者は、潜在的な攻撃を早期に発見するために、攻撃ベクトルを列挙することで、すぐに行動を起こすことができる。また、攻撃経路を列挙した後、リスク定量化モデルを適用し、防御作業の優先順位付けを行うことが可能だ。また、リスクモデルに基づく戦略を共有することで、効果的かつ包括的な方法でリスク全体を低減することもできる。 登壇者 マース・チェン、デクスター・チェン


レポート

Active Directoryリスクの数値化をすることによってどのような利益をもたらすのかなどの説明をする。

Active Directoryの概要

セキュリティに課題や解説作

AD(Active Directory)はMicrosoftが開発した中央集権型のユーザとコンピュータリソースを管理するシステムであり、LDAP(Lightweight Directory Access Protocol)やKerberosやDNSも含んでいる。 ADは会社の環境では不可欠なものであり、いろいろなデバイスと繫がっているということ。 例えばSSO(Single Sign-On)やメールアクセスや内部のサイトとの認証がある。

ADのサービスは以下に示すサービスなどがある。 - DS (Domain Services) ADのサーバの役割を担っており、管理者がネットワークからのリソースやアプリケーションデータに関する情報を分散データベースに管理・保存吸えるようにするサービスであり、ログオンで認証を行い、ディレクトリリソースへのアクセスを制御するといったセキュリティの統合を行うサービス。 - FS (Federation Services) セキュリティや企業の境界を超えてデジタルIDと認証の権利を安全に共有し、IDを連携することとアクセス管理を行うサービス。 - CS (Certificate Services) 電子文書や電子メールの暗号化、電子署名に使用されるPKI(Public Key Infrastructure)を作成・管理するサービス。 - RMS (Rights Management Services) 機密文書や電子メールを保護するサービスであり、従来のfirewallやACLs(Access Controll Lists)とは異なり、暗号化と保護した状態はファイルがどこに転送されたりしても持続的に行われる。

上記の中でも今回は攻撃を最も受けているAD DSについて話していく。 以下のサイトから参照すると、ADを使っていないところは少なく、Azure ADやADを利用していることがわかる。ほとんどの企業ではAD DSが中心であり、多くの脆弱性が存在するということを攻撃者はわかっている。 https://futurecio.tech/one-identity-reveals-barriers-to-zero-trust-framework-adoption/

Lockbitと呼ばれるランサムウェアではGPO(Group Policy Object)を使用して、ランサムウェアを拡散することを行った。

ここで、なぜADは攻撃されやすいのかと、攻撃を検知、対策することが難しいのだろうか。 - Misconfiguration ADの設定は複雑であり、たくさんある。そのためデフォルトの状態であることがおおい。 設定ミスは時間をかけてチェックしなければならない。 - Techniques Implementation 攻撃されたときに実際に行わなければいけないことの選択肢が多すぎるということ。 攻撃を検知すると言っても多くのテクニックが存在し、サービスが存在するため、どれを使っていいのかが難しい。 - secure AD 安全性を確保するために対応する緩和策を見つけることができるが、100%実施することが難しい。 - Attack Pathes 脆弱性が多く存在していて、その脆弱性に対応するための重大度などを決めるのが難しい。それをどこから直していけばいいのかといった目星をつけることが難しい。

すなわち、私達は攻撃を検知することや防御する方法については知っているが、攻撃経路や攻撃ベクトルをどのように優先的に対策していくべきかを考えることが難しい。これによって時間をかけないと抑制できるようにならない。

上記の問題に対して我々はリスク数値化モデルを使用することによって優先順位をつけることができ行動することができるのではないかと考えた。

Active Directoryのリスクの数値化の詳細

  • Attack Vector ADの機能を悪用した攻撃手法
  • Threat Source 評価対象についてのあるアクセス権を持つ攻撃者について
  • Likelihood 攻撃者が攻撃を開始し、影響を与える確率
  • Impact 攻撃が成功した場合に想定される被害

Likelihood = (Thread Initiation ✕ Thread Occurrence) +- Predisposing Condition

  • T.I.(Thread Initiation) 攻撃者が攻撃を開始する確率 権利を持つアカウントやドメイン内のアカウントのカバレッジ率が攻撃を開始する権利を持っており、このカバレッジ率は攻撃者が攻撃を開始できるアカウントのいずれかを制御しているかどうかの不確実性を反映する役割を果たしている。
  • T.O.(Thread Occurrence) 攻撃が成功する確率 ここで攻撃の最初ができたとしてもそれが最終的な攻撃が成功するとは限らない。
  • P.C.(Presposing Condition) 環境において脅威の発生に影響を与える値

Impactではどの権限が取得されたことなどのわかりやすい形で数値化する。

よってRiskはLikelihood ✕ Impactと定義する。

潜在的攻撃のリスクの数値化

実際の評価を以下に示す。

Kerberoasting攻撃

事例としてKerberoasting攻撃について話す。 ドメインアカウントにSPN(Service Principal Name)を設定すると、有効なTGT(Ticket Granting Ticket)を持つすべてのドメインユーザーがサービスチケットを要求することができ、サービスチケットの一部は、サービスアカウントのパスワードハッシュで暗号化されており、攻撃者はパスワードのブルートフォース(総当り)をすることができる。これに加え、 評価するために、デフォルトのドメイン環境設定のまま、ドメイン全体に対して、カーバオーストのリスクアセスメントを実施。 SPNを設定したドメインユーザや、パスワードの複雑さ(7文字)と更新期間(42日)はデフォルト設定、サービスチケットの暗号化アルゴリズムRC4の有効化にした状態で始める。 先程の評価値から考えると、すべてのドメインユーザが攻撃を行うことができるため、T.I.は100%であり、危険度5のVery Highに位置し、T.O.は有効期間内内にパスワードが解読されたかどうかで判断する。ここでRC4を2080tiでハッシュレートを計算した結果64%であることがわかり、危険度は3のMiddleに位置することがわかった。 次に、P.C.については、アカウントのパスワードを変えなかったことで+5p, デフォルトではoffのDESアルゴリズムを有効化していたことで+5pとなるが、RC4暗号を無効化することで-5p, AES暗号アルゴリズムを有効化することで-2p, 組織でpasswordの安全管理をすることで弱いパスワードが存在しない状態を作ることで-1pと行った感じで計算する。

ここで先程示した計算式に乗っとって計算すると、基本的なインパクトは15でHighで、RC4が有効なため、+5pして、Domain Administratorがクラッキングされた場合は、20でVery Highになり、MSSQL Service Accountの場合は12でMiddleとなる。

例えばRC4の暗号化アルゴリズムを無効化することでAdministratorがクラッキングされたときの影響度は15でHighとなる。

ACLの乱用

ADではすべての情報はDO(Domain Object)として保存・管理されており、各DOはドメインアカウントにアクセス権を与えることができる。これによって、攻撃者はアクセス権を悪用することによって横展開することができるようになる。 ACLには2つの種類があり、Generic RightsとObject-Specific Rightsが存在する。 Generic Rightsは書き込み権限などであり、オブジェクト固有の権限を含むドメインオブジェクトを完全に制御することができる権限であり、Object-Specific Rightsはドメインオブジェクト固有のものであり、限定的な権限である。

この攻撃が有効的なのはほとんどの場合設定ミスによって起きるものである。 しかし、ドメインオブジェクトの種類によってACLの乱用方法については異なる。

  • User Account
    • パスワードの強制変更
    • SPNの有効化によるKerberoasting攻撃の実施
    • as-reporoastingの事前認証の無効化
    • PKINITを用いたKerberos認証の証明書を設定する
  • Computer Account
    • リソースベースの制約付きの代表設定をする
    • ローカル管理者パスワードを取得する
    • PKINITを用いたKerberos認証の証明書を設定する
  • Domain Group
    • ドメイングループから付与される権限を持つメンバーを追加する
  • Organizational Unit
    • Organizational Unitオブジェクトに含まれる継承フラグを指定したACLを作成する。
  • Group Policy Object
    • 新規にポリシー設定を行い、アカウントに権限を与える。
  • Domain Object
    • DCSync攻撃を行う。
  • Certificate Template Object
    • 脆弱なテンプレートを設定して悪用できるようにする。

評価するために、デフォルトのドメイン環境設定のままで、{dexter,administrator}@corp.localという2つのアカウントと、ACLを{User-Force-Change-Password, GeneralAll}を有効にした状態で行う。 ここからAD DOは他のアカウントに特定の権限を付与しており、攻撃者はその権限が与えられたアカウントを乗っ取り、DOを制御するためにアカウントを悪用をする。

評価すると、T.I.についてはACLが付与されたアカウントのカバレッジ率に起因する。ACLがUser-Force-Change-Passwordの場合は25%以下であり、重要度は2でLowに位置され、T.O.については、一度ACLが設定されてしまった場合は、攻撃者が権限乱用することができるため、成功率は100%であるため、重大度は5のVery Highになる。すなわち、Likelihoodは10のMiddleである。 ここで攻撃の成功率に影響を与えるのは防衛機構のみであり、防衛機能があった場合P.C.は-2pとなり、アクセス権を奪われたアカウントによって影響度が異なる。

次に、ACLがGenericAllの場合は、可能性が100%であり、重要度は5でVery Highに位置され、T.O.については、一度ACLが設定されてしまった場合は、攻撃者が権限乱用することができるため、成功率は100%であるため、重大度は5のVery Highになる。すなわち、Likelihoodは25のVery Highである。 今回はDomain ObjectのGeneral User Accountが乗っ取られた場合は影響度は2のLowとなり、Riskとしては10のMiddleとなった。

次は、Domain Groupの30%のアカウントが保持しているACLがGenericAllの場合は、重要度は3でMiddleに位置され、T.O.については、一度ACLが設定されてしまった場合は、攻撃者が権限乱用することができるため、成功率は100%であるため、重大度は5のVery Highになる。すなわち、Likelihoodは15のHighである。 Domain ObjectのAdministratorが乗っ取られた場合は影響度は5のVery Highとなり、Riskとしては20のVery Highとなった。

先程の評価値から考えると、すべてのドメインユーザが攻撃を行うことができるため、T.I.は100%であり、危険度5のVery Highに位置し、T.O.は有効期間内内にパスワードが解読されたかどうかで判断する。ここでRC4を2080tiでハッシュレートを計算した結果64%であることがわかり、危険度は3のMiddleに位置することがわかった。 次に、P.C.については、アカウントのパスワードを変えなかったことで+5p, デフォルトではoffのDESアルゴリズムを有効化していたことで+5pとなるが、RC4暗号を無効化することで-5p, AES暗号アルゴリズムを有効化することで-2p, 組織でpasswordの安全管理をすることで弱いパスワードが存在しない状態を作ることで-1pと行った感じで計算する。

繊細的攻撃の道ずじのリスクの数値化

攻撃経路に対しての数値化を行いたい。 各攻撃が可能な権利を持つアカウント数を収集し、アカウントの重複を排除する。 最も大きな影響を与える攻撃や、ドメインアクセスの攻撃経路も確認する。 ここについても先程のRiskの計算と同じ式を適用できる。

攻撃経路の定量化では、経路に応じて評価していく。 以下の数を取得して判断する。 - Local Admin counts Administrator groupに所属しているアカウントの数 - Logon Session コンピュータシステムに対してリモートアクセスできるアカウントの数 - ACL Abuse Domain ObjectからACLの権限を付与されているアカウントの数 - DCSync Domain Replication権限を持っているアカウントの数

他の評価の指標として、ドメイン内で、サーバーのローカル管理者権限を持つユーザーを取得し、アクセスしているログオンセッションの数を計算する。そのログインしているユーザの中で他のユーザーに対してGenericAllの権限を持つユーザーのの数を計算し、そのユーザの中でDCSyncを実行する権限を持つユーザの数を取得するといったこと。

事例として、150のアカウントの中で35のユーザが60のコンピュータに足してLocal Administrator権限を持っている場合、T.I.の重要度は3でありMiddleとすることができ、Impactについてはサーバのコンピュータなので3であり、Middle. Logon Session Dumpされた場合は、30のコンピュータの中で40のlogon sessionあった場合はT.I.の重要度は3でMiddle.Impactについては通常のdomain userになるだけで、administratorにはならないため、重要度は2でLow. のように行っていく。

この中から先程の4つの経路で一番高いところから対策していくべきである。

緩和策

  • 攻撃経路の無効化 攻撃経路を可能にする設定を削除する SPN設定の設定を見直す
  • 可能性を低下させる 攻撃するために使用される特権を付与されたアカウントを減らす ネストしているグループが存在するため、不要なアカウントが入っていないか注意深くチェックする。
  • 検出メカニズムの強化 特定の攻撃イベントに対しての検出を強くする。 Advanced Audit PolicyやSecure Access Controller ListをDomain Objectで使用する

感想

設定ミスでの脆弱性は、一度設定したらいいだろうと思って見直さないことがおおいと感じました。実際に自分で使っているツールなどの設定をいちいち確認するしていないということ。せめて新しい方が入ってきて設定の説明をしたりや、不具合ができたときなどに見るぐらい。ADのすべての設定をチェックするツール等があれば便利になりそうだなって思いました。(ありそう。)