🎫

Active Directory&kerberos認証 調査レポート in Flatt Security 応募課題

2023/09/06に公開

はじめに

この記事は、Flatt Security サマーインターン in 2023 に参加した際に、Active Directory と kerberos 認証について調査した際のレポートです。
このレポートをサマーインターンの応募課題として提出しました。
もともとは参加体験記の記事に含める予定でしたが、長くなりすぎたため、別記事として投稿することにしました。
読みやすいように、独自でセクションを分けています。

間違い等あれば、コメントで教えていただけると幸いです。

Active Directory 概要

私が現在興味を持っている技術は、Active Directory ならびに kerberos 認証です。
Active Directory 自体は Microsoft によって開発されたディレクトリサービスシステムです。

ディレクトリサービス

まず、ディレクトリサービスシステムについて解説します。
大量のワークステーションを企業や学校等の組織が管理する場合、個々のマシンに一つずつユーザ認証を制定したり、ユーザの権限を管理したり、その組織内で何を行えるかを制限するポリシーを制定することは非常に困難です。
それに対応するために、ユーザの認証や権限管理を一元的に行うシステムがディレクトリサービスシステムです。
Windows 95 以降、ユーザ用のワークステーションとして劇的に普及した Windows は、企業や学校等の組織で業務用途においても使われるようになりましたが、そのような管理組織の下で使われるようになってから、ユーザの認証や権限管理を一元的に行うシステムに対するニーズが高まっていきました。
そこで Windows NT では、それを達成するために NT ドメインと呼ばれるネットワークを構築することで、ユーザおよびワークステーションの認証や権限管理をドメインコントローラという中心マシンで一元的に行うことができるようになりました。
その後、様々な利便性の向上が図られ、Windows 2000 Server では Active Directory というシステムが導入されました。

kerberos 認証

この Active Directory において、デファクトスタンダードとなっている認証プロトコルが kerberos 認証です。
ちなみに、Active Directory のドメインコントローラは DNS の役割も担うことが多く、ドメインと関連した動作も多くなっています。

構成要素

続いて、Active Directory の簡単な構成要素について解説します。

ドメインコントローラ

ドメインコントローラは、Active Directory の中心となるマシンです。
中心となるマシンであるため、ドメインコントローラには Active Directory のディレクトリデータベースが構築されています。
また、ドメインコントローラは kerberos 認証の認証局となっており、ユーザの認証を行います。
後述するグループポリシーの適用や、ユーザの権限管理もドメインコントローラが行います。

ユーザ

ユーザは、ドメインコントローラによって認証されたユーザです。

グループ

グループとは、ユーザをまとめたものです。
グループを作成することで、ユーザの権限管理を効率的に行うことができます。

OU

OU とは、組織単位と呼ばれるもので、ユーザやグループをまとめたものです。
OU を作成することで、ユーザの権限管理を効率的に行うことができます。
使い分けとして、OU は組織単位であり、グループはユーザの権限管理のための単位であるということが挙げられます。

グループポリシー

グループポリシーとは、グループに対する権限管理のためのポリシーです。
グループポリシーを利用することで、ユーザの権限管理を効率的に行うことができます。

kerberos 認証

次に、kerberos 認証について解説します。
kerberos 認証は、ユーザの認証を行うための認証プロトコルです。
基本的には OIDC や SAML といった、IdP に対する認証プロトコルと同じようなものです。

認証フロー

まず kerberos 認証に対応したサービスにアクセスしたユーザは、KDC(Key Distribution Center)と呼ばれる認証局の内部にある AS(Authentication Server)に対して、資格情報を送信します。
このとき、ユーザは入力したパスワードを NTLM ハッシュに変換して送信しています。
KDC は、資格情報を受け取ると、認証を行い、認証に成功した場合は TGT(Ticket Granting Ticket)と呼ばれるチケットを発行します。
このチケットは、認証が成功したことを示すチケットであり、有効期限が定められています。
これが、OIDC 認証や SAML 認証における認可トークンに相当します。
そして、ユーザは TGT を受け取ると、次は KDC 内部の TGS(Ticket Granting Server)に対して TGT を送信します。
TGS は、TGT を受け取ると、そのチケットが有効であるかを確認してから、サービスチケットを発行します。
このチケットは、ユーザがアクセスしようとしているサービスに対する認証を行うためのチケットであり、有効期限が定められています。これが、OIDC 認証や SAML 認証におけるアクセストークンに相当します。
このサービスチケットを入手することで、ユーザは Active Directory 以下で管理されているファイルサーバ等のリソースにアクセスできるようになります。
また、ユーザは KDC サーバに問い合わせを行う際に、サービスの識別子である SPN(Service Principal Name)をセットして送信します。

Active Directory に対する攻撃手法

最後に、Active Directory の攻撃手法や、侵害の事例について解説します。

以下に、主な攻撃手法を示します。

kerberoasting 攻撃

kerberoasting 攻撃とは、サービスチケットからツール等を用いてアカウントのパスワードをブルートフォースし、クラックする攻撃です。
ユーザは任意のサービスを利用したいとき、KDC 内部の TGS に対して TGT を送信することで、サービスチケットを発行してもらいます。そして、このサービスチケットはサービスに対応するサービスアカウントの NTLM ハッシュで暗号化されています。しかし、ハッシュといっても総当たり攻撃を行うことで、パスワードを導き出すことができます。このパスワードを導き出すことで、対象のサービスのパスワードを入手したり、権限昇格を行ったりすることができます。
また、内部でブルートフォースを行っているだけであるため、ログイン試行が発生しないという特徴があります。

パス・ザ・チケット攻撃

パスザチケット攻撃には、攻撃者がチケットを偽装して認証を通す攻撃です。
大きく分けてゴールデンチケット攻撃とシルバーチケット攻撃の二種類が存在します。
シルバーチケット攻撃については、先ほどkerberoasting 攻撃で説明した攻撃手法です。
ここでは、ゴールデンチケット攻撃についての解説を行います。
kerberos 認証で TGT を手にいれた場合、任意のサービスチケットを発行できることに着目し、偽装した TGT (ゴールデンチケット)を利用して任意のサービスにアクセスすることを目指します。
偽装チケットを作成するためには、まず攻撃者はドメインコントローラを掌握し、ドメインコントローラに存在する KRBTGT アカウント(kerberos サービスを扱う特殊なアカウント)の NTLM ハッシュを入手する必要があります。
そして、この NTLM ハッシュを用いて、任意の TGT を作成することができます。このとき、平文のパスワードは不要です。
このようにして、任意のサービスに対するサービスチケットを作成することができます。
攻撃と言いましたが、実際にはドメインコントローラを掌握することが前提となる手法です。
つまり、永続化の目的が強いといえます。

現実の侵害事例

以上のような Active Directory に起因する攻撃手法は、実際にランサムウェアの侵害事例においても多く見られます。
Kerberoast 攻撃がランサムウェアの侵害に利用された例として、以下の記事で Conti グループがこの攻撃を利用しているといった報告が存在します。
https://threatpost.com/conti-ransomware-gang-has-full-log4shell-attack-chain/177173/
また、このパターンでは、脆弱なルータに存在する Web アプリケーション脆弱性でルータを侵害した後、ドメインコントローラを目指して内部展開するという手法が多く見受けられ、こういった点からも Web アプリケーション脆弱性と密接に関係しています。
このような Active Directory ですが、実際には数十年単位で運用されていたりするケースも多く、セキュリティ的に非常に厳しい状況にある場合も少なくありません。

  • XP の時代から存在することも多く、数十年前の構造のままであることも少なくない
  • ローカルなネットワークであるため、外部からの攻撃に対しては比較的安全であると考えられがち
  • そもそも巨大で複雑であるため、整備されないことが多い
  • その前に Windows システムが複雑すぎる
  • インフラをつかさどっているため、障害があると大きな影響が出る
  • 攻撃者からすると大量のリソースがあり、被害が大きいため格好の的
  • さらに、企業は資金を持っていることが多く、恐喝に対して資金を支払う可能性が高い

これらの状態が重なり、悲惨な状況となってる場合も少なくありません。

まとめ

これからのセキュリティを考えるにおいて、Active Directory のセキュリティは非常に重要なポイントとなります。
ランサムウェア攻撃が活発化してきた今、Active Directory のセキュリティを考えることは必須と言えます。

GitHubで編集を提案

Discussion