Hack The Box Sherlocks - OpTinselTrace-2 Writeup

https://app.hackthebox.com/sherlocks/OpTinselTrace-2
Hack The Box Sherlocksとは

Sherlock Scenario

It seems our precious technology has been leaked to the threat actor. Our head Elf, PixelPepermint, seems to think that there were some hard-coded sensitive URLs within the technology sent. Please audit our Sparky Cloud logs and confirm if anything was stolen! PS - Santa likes his answers in UTC...
私たちの貴重な技術が攻撃者に流出したようです。私たちの頭のエルフである PixelPepermint は、送信されたテクノロジー内にハードコーディングされた機密 URL がいくつかあったと考えているようです。 Sparky Cloud のログを監査して、何かが盗まれたかどうかを確認してください。 PS - サンタさんは UTC での答えを好みます...

2023年のSherlocksクリスマスイベント問題の2問目。
AWSのCloudTrailのログデータが与えられるのでクラウドのフォレンジックを進めていく。

Tasks

Task 1

What is the MD5 sum of the binary the Threat Actor found the S3 bucket location in?
脅威アクターが S3 バケットの場所を見つけたバイナリの MD5 合計はいくらですか?

他のTaskを全部解いて、一番最後に解けた。
脅威アクターはどこかからS3バケットの場所を見つけたようで、S3バケットの場所とは後述するpapa-noel.s3.eu-west-3.amazonaws.comのこと。
VirusTotalでpapa-noel.s3.eu-west-3.amazonaws.comを検索してみる。

https://www.virustotal.com/gui/domain/papa-noel.s3.eu-west-3.amazonaws.com/relations

ありますね。ここのRelationsを見てみると関連づけられているELFファイルがあった!

https://www.virustotal.com/gui/file/b15b02994c1c454571f877f9a0b99d06231f7b33f90bcca911e8845ab1ab5e55/details

ほー、よくできてる。
ここのMD5ハッシュを送ると正答。
62d5c1f1f9020c98f97d8085b9456b05

Task 2

What time did the Threat Actor begin their automated retrieval of the contents of our exposed S3 bucket?
脅威アクターは、公開された S3 バケットの内容の自動取得を開始したのはいつですか?

papa-noel.s3.eu-west-3.amazonaws.comのファイルアクセスを元に判定する。
ブラウザからアクセスした場合は favicon.icoへのアクセスを伴うのでそれが無ければ自動で取得されていると判断できる。
時間差も考慮すると.gitフォルダのファイルをダウンロードし始めたタイミングが答え。

2023-11-29T08:24:07Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/COMMIT_EDITMSG'}
2023-11-29T08:24:07Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/config'}
2023-11-29T08:24:07Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/description'}
2023-11-29T08:24:07Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/HEAD'}
2023-11-29T08:24:07Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/hooks/applypatch-msg.sample'}
2023-11-29T08:24:08Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/hooks/commit-msg.sample'}
2023-11-29T08:24:08Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/hooks/fsmonitor-watchman.sample'}
2023-11-29T08:24:08Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/hooks/post-update.sample'}
2023-11-29T08:24:08Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/hooks/pre-applypatch.sample'}
2023-11-29T08:24:09Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/hooks/pre-commit.sample'}
2023-11-29T08:24:09Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/hooks/pre-merge-commit.sample'}
2023-11-29T08:24:09Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/hooks/pre-push.sample'}
2023-11-29T08:24:09Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/hooks/pre-rebase.sample'}
2023-11-29T08:24:09Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/hooks/pre-receive.sample'}
2023-11-29T08:24:10Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/hooks/prepare-commit-msg.sample'}
2023-11-29T08:24:10Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/hooks/push-to-checkout.sample'}
2023-11-29T08:24:10Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/hooks/update.sample'}
2023-11-29T08:24:10Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/index'}
2023-11-29T08:24:10Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/info/exclude'}
2023-11-29T08:24:11Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/logs/HEAD'}
2023-11-29T08:24:11Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/logs/refs/heads/master'}
2023-11-29T08:24:11Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/objects/38/938fa8723c40cedfb7819340563c81961d7712'}
2023-11-29T08:24:11Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/objects/5d/24a8f411fc931b54fb9a4b58b6b55f1016c34d'}
2023-11-29T08:24:12Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/objects/62/13ad5b238260339ce346bf8f9063a8559c538a'}
2023-11-29T08:24:12Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/objects/69/a6bf0c5763a8cfc8d52d123e29986441869eab'}
2023-11-29T08:24:12Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/objects/6e/e67e3c147c7b310ea95271f07165056a84a1aa'}
2023-11-29T08:24:12Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/objects/8f/3ebb72ee80ee21f35e64ff2040ffbfb8d78d90'}
2023-11-29T08:24:13Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/objects/99/9775de5661604d8b3e7b5929d1fd1818db40ac'}
2023-11-29T08:24:13Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/objects/99/dbe4b3d52641ecb95dc3361bc7c324ba20f8e1'}
2023-11-29T08:24:13Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/objects/a9/2e975c8c52221d5c1c371d5595f65eb13f8be5'}
2023-11-29T08:24:13Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/objects/d5/4035991ea077b39062f858dfab56ea4fc1eb32'}
2023-11-29T08:24:13Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/objects/da/4d9a7c2824a50b8615b0149da53df83e812529'}
2023-11-29T08:24:14Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/backup.py'}
2023-11-29T08:24:14Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/check.js'}
2023-11-29T08:24:14Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/objects/f1/3ae004942c081e8a345a35bc4c1a006fb9a9d6'}
2023-11-29T08:24:14Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/objects/ff/46564b94ef03aca8f76224d3286e7e608276e4'}
2023-11-29T08:24:14Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/refs/heads/master'}
2023-11-29T08:24:15Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/claus.py'}
2023-11-29T08:24:15Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/disk.ps'}
2023-11-29T08:24:15Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/organise.rb'}
2023-11-29T08:24:15Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/santa_journey_log.csv'}
2023-11-29T08:24:16Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/update.sh'}
2023-11-29T08:24:16Z | {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'santa-list.csv'}

より2023-11-29 08:24:07が答え。

Task 3

What time did the Threat Actor complete their automated retrieval of the contents of our exposed S3 bucket?
脅威アクターが公開された S3 バケットの内容の自動取得を完了したのは何時ですか?

Task 2から分かる。2023-11-29 08:24:16が答え。

Task 4

Based on the Threat Actor's user agent - what scripting language did the TA likely utilise to retrieve the files?
脅威アクターのユーザー エージェントに基づいて、TA はファイルを取得するためにどのようなスクリプト言語を使用したと考えられますか?

Task 2の最初の通信の生ログを見てみよう。

{'eventVersion': '1.09', 'userIdentity': {'type': 'AWSAccount', 'principalId': '', 'accountId': 'anonymous'}, 'eventTime': '2023-11-29T08:24:07Z', 'eventSource': 's3.amazonaws.com', 'eventName': 'GetObject', 'awsRegion': 'eu-west-3', 'sourceIPAddress': '191.101.31.57', 'userAgent': '[python-requests/2.25.1]', 'requestParameters': {'bucketName': 'papa-noel', 'Host': 'papa-noel.s3.eu-west-3.amazonaws.com', 'key': 'NPoleScripts/.git/COMMIT_EDITMSG'}, 'responseElements': None, 'additionalEventData': {'aclRequired': 'Yes', 'CipherSuite': 'ECDHE-RSA-AES128-GCM-SHA256', 'bytesTransferredIn': 0, 'x-amz-id-2': 'EsErRevx2JN0jURB8pmZvZjvJyuO/JbQ+BowMNaus+9jaxwOH3jzC47Js5RRvdaNAbEn0G9Gqws=', 'bytesTransferredOut': 397}, 'requestID': 'CJECCNWQM7CK7DMX', 'eventID': '8510333e-e806-4548-bb4a-a5458d2a6743', 'readOnly': True, 'resources': [{'type': 'AWS::S3::Object', 'ARN': 'arn:aws:s3:::papa-noel/NPoleScripts/.git/COMMIT_EDITMSG'}, {'accountId': '949622803460', 'type': 'AWS::S3::Bucket', 'ARN': 'arn:aws:s3:::papa-noel'}], 'eventType': 'AwsApiCall', 'managementEvent': False, 'recipientAccountId': '949622803460', 'sharedEventID': 'da15e9f6-0264-4ba6-88f6-2030701bcb3c', 'eventCategory': 'Data', 'tlsDetails': {'tlsVersion': 'TLSv1.2', 'cipherSuite': 'ECDHE-RSA-AES128-GCM-SHA256', 'clientProvidedHostHeader': 'papa-noel.s3.eu-west-3.amazonaws.com'}}

User-Agentにpython-requests/2.25.1が使われているのでpythonでダウンロードされたことが分かる。pythonが正答。

Task 5

Which file did the Threat Actor locate some hard coded credentials within?
脅威アクターはどのファイル内でハードコードされた認証情報を見つけましたか?

ディレクトリリスティングされているS3からファイルを全部ダウンロードしてくる。
.gitフォルダが再構築できるので、git log -pでログを見てみよう。

commit a92e975c8c52221d5c1c371d5595f65eb13f8be5 (HEAD -> master)
Author: Author Name <[email protected]>
Date:   Tue Nov 28 09:42:16 2023 +0000

    Removed the sparkly creds from the script! How silly of me! Sometimes I'm about as useful as a screen saver on Santa's Sleigh!!!!!!

diff --git a/claus.py b/claus.py
index 6ee67e3..38938fa 100644
--- a/claus.py
+++ b/claus.py
@@ -5,9 +5,7 @@ import csv
 import boto3
 from botocore.exceptions import NoCredentialsError, ClientError

-# AWS Credentials -  Should probably come up with a safer way to store these elf lolz!
-AWS_ACCESS_KEY = 'â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– '
-AWS_SECRET_KEY = 'â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– '
+# Removed keys for safer method
 BUCKET_NAME = 'north-pole-private'
 REGION_NAME = 'eu-west-2'

認証情報が消されていた。これですね。claus.py

Task 6

Please detail all confirmed malicious IP addresses. (Ascending Order)
確認されたすべての悪意のある IP アドレスの詳細を記載してください。 (昇順)

とりあえずIPアドレスを列挙してみて、どういうアクセスがあるか見てみよう。

109.205.185.126 golangからarn:aws:s3:::papa-noelに対してイベントが1つだけ残っている。意図不明
138.199.59.46 arn:aws:s3:::papa-noelに対して何かしているが意図不明
191.101.31.26 arn:aws:s3:::papa-noelに対して何かしているが意図不明
191.101.31.57 arn:aws:s3:::papa-noelに対してディレクトリリスティングと、ファイル取得をしている。悪性有り
195.181.170.226 arn:aws:s3:::papa-noelに対して何かしているが意図不明
3.236.115.9 arn:aws:s3:::papa-noelに対して何かしているが意図不明(slackにリンクを張った?)
3.236.226.247 arn:aws:s3:::papa-noelに対して何かしているが意図不明(slackにリンクを張った?)
45.133.193.41 arn:aws:s3:::north-pole-privateに対してアクセスがある。Task 7以降の設問から悪性有りと分かる
45.148.104.164 arn:aws:s3:::papa-noelに対して何かしているが意図不明
86.5.206.121 大量にログが残っているが、2023-11-28以前の操作であり、ログの量からしても所有者のIPアドレスと推察できる

ということで45.133.193.41, 191.101.31.57が答え。

Task 7

We are extremely concerned the TA managed to compromise our private S3 bucket, which contains an important VPN file. Please confirm the name of this VPN file and the time it was retrieved by the TA.
私たちは、TA が重要な VPN ファイルを含む私たちのプライベート S3 バケットを侵害したことを非常に懸念しています。この VPN ファイルの名前と、TA によって取得された時刻を確認してください。

eventSource == "s3.amazonaws.com" and eventName == "GetObject"の条件でログを漁るとbytesparkle.ovpnというのが見つかる。

{'eventVersion': '1.09', 'userIdentity': {'type': 'IAMUser', 'principalId': 'AIDA52GPOBQCODESVPGAQ', 'arn': 'arn:aws:iam::949622803460:user/elfadmin', 'accountId': '949622803460', 'accessKeyId': 'AKIA52GPOBQCBTZ6NJXM', 'userName': 'elfadmin'}, 'eventTime': '2023-11-29T10:16:53Z', 'eventSource': 's3.amazonaws.com', 'eventName': 'GetObject', 'awsRegion': 'eu-west-2', 'sourceIPAddress': '45.133.193.41', 'userAgent': '[aws-cli/2.12.0 Python/3.11.5 Linux/6.1.0-kali9-amd64 source/x86_64.kali.2023 prompt/off command/s3.sync]', 'requestParameters': {'bucketName': 'north-pole-private', 'Host': 'north-pole-private.s3.eu-west-2.amazonaws.com', 'key': 'bytesparkle.ovpn'}, 'responseElements': None, 'additionalEventData': {'SignatureVersion': 'SigV4', 'CipherSuite': 'ECDHE-RSA-AES128-GCM-SHA256', 'bytesTransferredIn': 0, 'AuthenticationMethod': 'AuthHeader', 'x-amz-id-2': 'bW43GrgXgIHi7X277fPbnOt7T/eahMosjOIYUlJISlJyNMOUR8WJKQJX3rzps55aZ3sdek7gNX4=', 'bytesTransferredOut': 273}, 'requestID': 'DGARSWVSE9EAKMA7', 'eventID': '34e39afe-659e-438f-831c-ea354a4c19ea', 'readOnly': True, 'resources': [{'type': 'AWS::S3::Object', 'ARN': 'arn:aws:s3:::north-pole-private/bytesparkle.ovpn'}, {'accountId': '949622803460', 'type': 'AWS::S3::Bucket', 'ARN': 'arn:aws:s3:::north-pole-private'}], 'eventType': 'AwsApiCall', 'managementEvent': False, 'recipientAccountId': '949622803460', 'eventCategory': 'Data', 'tlsDetails': {'tlsVersion': 'TLSv1.2', 'cipherSuite': 'ECDHE-RSA-AES128-GCM-SHA256', 'clientProvidedHostHeader': 'north-pole-private.s3.eu-west-2.amazonaws.com'}}

bytesparkle.ovpn, 2023-11-29 10:16:53が正解。

Task 8

Please confirm the username of the compromised AWS account?
侵害された AWS アカウントのユーザー名を確認してください?

Task 7で使われたユーザー名を答える。
elfadmin

Task 9

Based on the analysis completed Santa Claus has asked for some advice. What is the ARN of the S3 Bucket that requires locking down?
完了した分析に基づいて、サンタクロースはいくつかのアドバイスを求めました。ロックダウンが必要な S3 バケットの ARN は何ですか?

ディレクトリリスティングされていたS3バケットのARNを答えると正答。
arn:aws:s3:::papa-noel