Blue Team Level 1 gold coinを獲得しました。
BTL1(Blue Team Level 1)の概要
名前の通りBlue Teamのための資格であって、
- フィッシング攻撃の分析と対応
- デジタル証拠の収集および分析するフォレンジック調査
- SIEMプラットフォーム(splank)を使用して悪意のあるアクティビティの調査
- マルウェア感染を含むログおよびネットワークトラフィック分析
等々の入り口のような実践的なスキルを学ぶことができる。
試験の準備
申し込み
通常価格は、£399です。399ポンドで高いなぁと常々思っていたが、ブラックフライデーのときに100ポンド安かったので買ってみました。
申し込み段階での自身のBlueTeam関連スキル
分かりやすい?ものだけピックアップ
- CTFはForensicsだけを狙って1年半くらい集中していた
- Enisa - Technicalにある無料コンテンツは、全て取り組み済み
- CFReDSのHacking Caseだけは完走
- Autopsy 8-Hour Online Trainingを完走
申し込み後にアクセスできるコンテンツ
購入後に、コンテンツやトレーニングコンテンツごとに用意されたラボ環境へのアクセスは今は4か月可能らしい。自分の場合には、たしか購入時に30日以内にコンテンツアクセスを始めるかどうか選べてすぐに始める方を購入した。その後、買ったまま他のコンテンツで学習していたので放置状態になり3か月くらい経って、そろそろやろうと思ったときにBTLの試験形態やコンテンツが大きく更新され、それに伴ってアクセス期間も3か月伸びていたのでさらに放置して、最後の2週間くらいで頑張りました。
アクセスできる学習コンテンツは、BlueTeamやサイバーセキュリティに関連する基礎知識や実践的なスキルの説明を読むだけのインプット系、そしてインプット系で得た知識を実践するLab環境がある。インプット系は公式の紹介ページにあるようなものを読むだけ。この読み物コンテンツは、特定の分野に偏ったものなので自分の場合には調べてもすぐに出てこないような話が沢山あって面白かったです。
Lab環境は、インプット系の学習コンテンツを読んでいるときに「次はLabに取り組みましょう」というようなときに関連スキルを実践できる。WebブラウザからアクセスするVNC。
Labは画像のように、必要なものが構築された環境(windowsのときもある)にそのときに取り組む問題ファイルが用意されており、ファイルを調査して問題に解答する。ここで仕方がないことだが、Lab環境が用意されている、つまりアクセス先は
London, California, Sydney, Mumbaiでどこもping値が高い。自分の環境では、Californiaが一番マシで80~110のping値でweb vnc経由で環境を触っていた。お察しの通りまあまあ遅延があり偶に接続できなかったりフリーズすることもあるので、そういうのに耐えられない場合、まだ受けない方が良いかもしれません。ちなみに試験も、web vncの環境で調査を行うので同じように遅延に悩まされつつ取り組みました。自分の場合は、アパート備え付けのケーブルテレビのよわよわ回線なので光の良い回線を使っている人々はそんなに酷くないのかもしれません。Lab環境へのアクセスは、起動から6時間、全部合わせて100時間の制限があり時間を使いきった場合には追加(有料)できる。自分の場合はあまり使うことが無かったので94時間ほど残っている。
最初の説明では、「学習コンテンツに取り組まずに試験に取り組むこともできる」とあるが、新たな発見が必ずあるハズでもあるし、せっかくお金払ったのでやはり全部触り切ってから試験に臨むべきです。
申し込み後の追加学習
- LetsDefendにサブスクしてMonitoringに沢山取り組む。
- BTL1を提供してるところと同じところ?が運営しているBlue Team Lab Onlineの無料で取り組めるChallnegesに取り組む。
- CyberDefendersの過去のCTFに取り組む
等々
LetsDefendのMonitoringに沢山取り組んだことで、Phishingの一般的な手口、ありがちなMalicious File形式等が見えてきたのでとても役立った。
自分の場合には試験でmalicious pdfがあり、どんなものか簡易的に確認するためにpdfの構造を知っていたので、このpdfの構造を調べるきっかけになったCyberDefendersのGetPDFに取り組んでおいて良かった。
試験
試験は学習コンテンツにアクセスするページからリクエストすると、5分くらいで始まる。Webカメラの設定や試験官とのコミュニケーション等は無く、本当に気づいたら始まっている。試験時間は24時間、問題は自分のときは20問あり、Lab環境のときと同じような問題形式になっている。試験環境はLab環境と同じような環境にアクセスし、自分の場合には主にphising mailの解析、侵害されたpcのイメージの解析、pcapの解析、splunkに溜まったログからインシデントに関するものの調査を行った。これらの調査により得られた情報から問題に解答する。問題は文章で答えるようなものではなく、一問一答の形式になっている。この問題を通して、インシデントの理解を進めていく。Lab環境と同じように試験環境も先の通りping値が高いので、遅延があっても落ち着いて急にフリーズしても焦らず取り組んだ。
試験では学習コンテンツで学ぶ内容だけでなく、他にも事前知識があった方がやはり取り組みやすい。例えば、
- javascriptは読める
- 学習コンテンツにあったもの以外のAutopsyの機能も難なく利用できる
等々。やはり、BTLが初級編と言っても事前知識は色々とあった方が楽なので学習コンテンツだけで満足せずに、他にも様々なリソースに触れておくべきです。
解答を提出すると、すぐに採点され結果が分かる。このとき70%以上で合格、90%以上(初回試験)でGold Coinに該当する。不合格の場合でも、1回だけは再試験の権利を持っている。
最後に一言
ping値で少しピンチな試験だった。
LetsDefend level 1 alert SOC105 - Requested T.I. URL address event-id 16
Details
EventID: 16
Event Time: Sept. 20, 2020, 10:54 p.m.
Rule: SOC105 - Requested T.I. URL address
Level: Security Analyst
Source Address 172.148.17.47
Source Hostname BillPRD
Destination Address 5.188.0.251
Destination Hostname pssd-ltdgroup.com
Username Mike01
Request URL https[:]//pssd-ltdgroup[.]com
User Agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063
Device Action Allowed
playbook
Analyze Threat Intel Data
URL https[:]//pssd-ltdgroup[.]com/
VirusTotal 9/93: https://www.virustotal.com/gui/url/59da6e4583f0ceeb2b5d3933f883ccad9bfc91cd3bbfc0c4afb37c0eafc9ce48/detection
登録数は少ないが、Avira,Bitdefender,ESET,Fortinet,Sophosといった有名どころに登録されている。
Forcepoint ThreatSeeker elevated exposure Sophos spyware and malware Webroot Phishing and Other Frauds
Hybrid-Analysis: https://www.hybrid-analysis.com/sample/e06dcdb951cbef8ffddd75a9a2d38382d41a4c9ce98569409ab21133c8bfb981?environmentId=100
こちらでも、Maliciousの判定が出ている。
Domain pssd-ltdgroup[.]com
VirusTotal 9/90: https://www.virustotal.com/gui/domain/pssd-ltdgroup.com/relations
ドメインでも検知数はあまり変わらないが、Communicating Filesには明らかにマルウェアが多い。
5.188.0.251
AbuseIPDB: https://www.abuseipdb.com/check/5.188.0.251
登録はあるが、レポートは少ない。
ip-sc: https://ip-sc.net/ja/r/5.188.0.251
SCAMALYTICS: https://scamalytics.com/ip/5.188.0.251
ip-scでは脅威として登録されていないが、SCAMALYTICSではVery high Riskとなっている。
Connection type wireless?
Answer:Malicious
Interaction with TI data
Log
DATE | TYPE | SOURCE ADDRESS | SOURCE PORT | DESTINATION ADDRESS | DESTINATION PORT |
---|---|---|---|---|---|
Sep, 20, 2020, 10:54 PM | Firewall | 172.16.17.47 | 54211 | 5.188.0.251 | 443 |
Sep, 20, 2020, 10:54 PM | Proxy | 172.16.17.47 | 54211 | 5.188.0.251 | 443 |
Main Process: Krankheitsmeldung_092020_07.xlsm Request URL: https://pssd-ltdgroup.com
おや、xlsmからのURLへのアクセスのようだ。
Endpoint
Process History Krankheitsmeldung_092020_07.xlsm MD5:14970ce0a3d03c46a4180db69866d0d1 Path:c:/users/Bill/desktop/Krankheitsmeldung_092020_07.xlsm Size:558.83 KB Username:Bill01 Start Time:20.09.2020 22:51
ちなみに、
14970ce0a3d03c46a4180db69866d0d1 - VirusTotal 45/64: https://www.virustotal.com/gui/file/0e3a83e441951860929c99e24bf19e76fe281c3e1b1f7f3aea49b0a38673f873
Malicious!
Answer:Accessed
Containment
Add Artifacts
Value | Type | Comment |
---|---|---|
https[:]//pssd-ltdgroup[.]com | URL Address | accessed from malicious xlsm file |
14970ce0a3d03c46a4180db69866d0d1 | MD5 Hash | Requested T.I. URL address |
True Positive
End
LetsDefend level 1 alert SOC106 - Found Suspicious File - TI Data event-id 17
Details
EventID: 17
Event Time: Sept. 22, 2020, 11:10 a.m.
Rule: SOC106 - Found Suspicious File - TI Data
Level: Security Analyst
Source Address 172.148.17.150
Source Hostname ChanProd
File Name ChromeSetup.exe
File Hash 1430438f19e3d3e2b375d127c68254ab
File Size 63.65 MB
Device Action Cleaned
Download (Password:infected): 1430438f19e3d3e2b375d127c68254ab.zip
playbook
Check if the malware is quarantined/cleaned
Device Action Cleaned
であるので
Answer: Quarantined
Analyze Malware
まず該当ファイルは、
$ file ChromeSetup.exe ChromeSetup.exe: PE32 executable (GUI) Intel 80386, for MS Windows $ md5sum ChromeSetup.exe 1430438f19e3d3e2b375d127c68254ab ChromeSetup.exe
VirusTotal: https://www.virustotal.com/gui/file/38dbb5166b28e62fbc482646618a55dc8430fa596d98df6f3eed257df0007db0
VTでは、Maliciousとの報告は無い。
ANYRUN: https://app.any.run/tasks/c8dfb3da-52c3-4df4-8c9e-d91bd4b03129/
ANYRUNでは、動作にはMaliciousの判定がある。ただ、公式から配布されているChromeSetupもMaliciousの判定がついているためANYRUNでは判断しづらい。
通信先は、Maliciousとして登録されているものは無いが怪しいロシアのサーバであるとのレポートも見られる。
redirector.gvt1[.]com - VirusTotal: https://www.virustotal.com/gui/domain/redirector.gvt1.com/community
ただ、ベンダーにMaliciousと登録されているものは無いのでMaliciousではないと判断する。
Answer: Non-malicious
Add Artifacts
Value | Type | Comment |
---|---|---|
1430438f19e3d3e2b375d127c68254ab | MD5 Hash | ChromeSetup.exe |
False Positive
End
導入当時は信頼できるものであったも、自動取得するようなセキュリティの情報元は定期的に見直すべきかもしれない。
LetsDefend level 1 alert SOC101 - Phishing Mail Detected event-id 18
Details
EventID: 18
Event Time: Sept. 22, 2020, 3:35 p.m.
Rule: SOC101 - Phishing Mail Detected
Level: Security Analyst
SMTP Address 172.82.128.241
Source Address david@cashbank.com
Destination Address katharine@letsdefend.io
E-mail Subject URGENT! Your bank account may have fallen into the hands of fraudsters!
Device Action Allowed
URGENT! Your bank account may have fallen into the hands of fraudsters! From: david@cashbank.com Sept. 22, 2020, 3:35 p.m. To: katharine@letsdefend.io Sept. 22, 2020, 3:35 p.m. Hi, I'm working in the CASHBANK fraud department. We urgently expect information from you about the following topic. I tried to reach you by phone but I could not reach you because your phone was turned off. We detected suspicious activities in your account. We suspect fraudsters have taken over your credit card. Can you quickly check your attached credit card statement and return to us? Yours truly. Attachments 7299c49dd85069e47d6514ab5e10c264.zip
playbook
Are there attachments or URLs in the email?
Answer: Yes
Analyze Url/Attachment
送信側アドレス
cashbank[.]com
VirusTotal: https://www.virustotal.com/gui/domain/cashbank.com
172.82.128.241
VirusTotal: https://www.virustotal.com/gui/ip-address/172.82.128.241
ドメインもIPもMaliciousとは言えない。
mail Attachments
$ md5sum creditcard 7299c49dd85069e47d6514ab5e10c264 creditcard
これは、LetsDefend level 1 alert SOC107 - Privilege Escalation Detected event-id 19 - 4ensiXで解析したものと同じであった。
Answer: Malicious
Check If Mail Delivered to User?
Device Action Allowed
アラートと以前の調査から、届いた上で実行している。
Answer: Delivered
Check If Someone Opened the Malicios File/URL?
以前の調査から、実行してしまっている。
Answer: Opened
Add Artifacts
Value | Type | Comment |
---|---|---|
david@cashbank.com | E-mail Sender | |
7299c49dd85069e47d6514ab5e10c264 | MD5 Hash | CVE-2017-16995, Privilege Escalation |
End
LetsDefend level 1 alert SOC107 - Privilege Escalation Detected event-id 19
Details
EventID: 19
Event Time: Sept. 22, 2020, 3:40 p.m.
Rule: SOC107 - Privilege Escalation Detected
Level: Security Analyst
Source Address 172.16.15.78
Source Hostname KatharinePRD
File Name creditcard
File Hash 7299c49dd85069e47d6514ab5e10c264
File Size 17K
Device Action Allowed
Download (Password:infected): 7299c49dd85069e47d6514ab5e10c264.zip
playbook
Define Threat Indicator
Answer:Other
Check if the malware is quarantined/cleaned
まず、
Device Action Allowed
から実行されていそうだ。また、EndpointのProcess Historyより
creditcard MD5:7299c49dd85069e47d6514ab5e10c264 Path:/home/katharine/Documents/creditcard Cmdline:/home/katharine/Documents/creditcard
実行が確認できる。
Answer:Not Quarantined
Analyze Malware
creditcard -> 27e56f0f4bbb933a9ef25e0e0c2a4aaae578bdc2623e6bcdf664834e4ce60c9d
ファイル概要
$ file creditcard creditcard: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b363505cb5728e34f1104fe882b2e7b1431ffb76, for GNU/Linux 3.2.0, not stripped $ sha256sum creditcard 27e56f0f4bbb933a9ef25e0e0c2a4aaae578bdc2623e6bcdf664834e4ce60c9d creditcard
VirusTotal 34/61: https://www.virustotal.com/gui/file/27e56f0f4bbb933a9ef25e0e0c2a4aaae578bdc2623e6bcdf664834e4ce60c9d
このプログラムはMaliciousである。ネットワーク通信するものではなさそうであり、CVE-2017-16995に関連するとのレポートがある。
少し中身を見てみる。radare2より、
[0x00001110]> pdf @sym.pwn ; CALL XREF from main @ 0x183a ┌ 343: sym.pwn (); │ ; var int64_t var_28h { > 0xffffffffffffffff} @ rbp-0x28 │ ; var int64_t var_20h { > 0xffffffffffffffff} @ rbp-0x20 │ ; var int64_t var_18h { > 0xffffffffffffffff} @ rbp-0x18 │ ; var int64_t var_10h { > 0xffffffffffffffff} @ rbp-0x10 │ ; var int64_t var_8h { > 0xffffffffffffffff} @ rbp-0x8 │ 0x000016cc 55 push rbp │ 0x000016cd 4889e5 mov rbp, rsp │ 0x000016d0 4883ec30 sub rsp, 0x30 │ 0x000016d4 e808ffffff call sym.__get_fp │ 0x000016d9 488945f8 mov qword [var_8h], rax │ 0x000016dd 48b8ffffffff. movabs rax, 0xffff87ffffffffff │ 0x000016e7 483945f8 cmp qword [var_8h], rax │ ┌─< 0x000016eb 770c ja 0x16f9 │ │ 0x000016ed 488d3d840a00. lea rdi, qword str.bogus_fp ; 0x2178 ; "bogus fp" ; int status │ │ 0x000016f4 e80efdffff call sym.__exit ; void _exit(int status) │ │ ; CODE XREF from sym.pwn @ 0x16eb │ └─> 0x000016f9 488b45f8 mov rax, qword [var_8h] │ 0x000016fd 4889c7 mov rdi, rax ; uint32_t arg1 │ 0x00001700 e8b3ffffff call sym.get_sp │ 0x00001705 488945f0 mov qword [var_10h], rax │ 0x00001709 48b8ffffffff. movabs rax, 0xffff87ffffffffff │ 0x00001713 483945f0 cmp qword [var_10h], rax │ ┌─< 0x00001717 770c ja 0x1725 │ │ 0x00001719 488d3d610a00. lea rdi, qword str.bogus_sp ; 0x2181 ; "bogus sp" ; int status │ │ 0x00001720 e8e2fcffff call sym.__exit ; void _exit(int status) │ │ ; CODE XREF from sym.pwn @ 0x1717 │ └─> 0x00001725 488b45f0 mov rax, qword [var_10h] │ 0x00001729 4889c7 mov rdi, rax ; uint32_t arg1 │ 0x0000172c e8f2feffff call sym.__read │ 0x00001731 488945e8 mov qword [var_18h], rax │ 0x00001735 48b8ffffffff. movabs rax, 0xffff87ffffffffff │ 0x0000173f 483945e8 cmp qword [var_18h], rax │ ┌─< 0x00001743 770c ja 0x1751 │ │ 0x00001745 488d3d3e0a00. lea rdi, qword str.bogus_task_ptr ; 0x218a ; "bogus task ptr" ; int status │ │ 0x0000174c e8b6fcffff call sym.__exit ; void _exit(int status) │ │ ; CODE XREF from sym.pwn @ 0x1743 │ └─> 0x00001751 488b45e8 mov rax, qword [var_18h] │ 0x00001755 4889c6 mov rsi, rax │ 0x00001758 488d3d3a0a00. lea rdi, qword str.task_struct____lx ; 0x2199 ; "task_struct = %lx\n" ; const char *format │ 0x0000175f b800000000 mov eax, 0 │ 0x00001764 e827f9ffff call sym.imp.printf ; int printf(const char *format) │ 0x00001769 488b45e8 mov rax, qword [var_18h] │ 0x0000176d 4805f8050000 add rax, 0x5f8 │ 0x00001773 4889c7 mov rdi, rax ; uint32_t arg1 │ 0x00001776 e8a8feffff call sym.__read │ 0x0000177b 488945e0 mov qword [var_20h], rax │ 0x0000177f 48b8ffffffff. movabs rax, 0xffff87ffffffffff │ 0x00001789 483945e0 cmp qword [var_20h], rax │ ┌─< 0x0000178d 770c ja 0x179b │ │ 0x0000178f 488d3d160a00. lea rdi, qword str.bogus_cred_ptr ; 0x21ac ; "bogus cred ptr" ; int status │ │ 0x00001796 e86cfcffff call sym.__exit ; void _exit(int status) │ │ ; CODE XREF from sym.pwn @ 0x178d │ └─> 0x0000179b 488b45e0 mov rax, qword [var_20h] │ 0x0000179f 4883c004 add rax, 4 │ 0x000017a3 488945d8 mov qword [var_28h], rax │ 0x000017a7 48b8ffffffff. movabs rax, 0xffff87ffffffffff │ 0x000017b1 483945d8 cmp qword [var_28h], rax │ ┌─< 0x000017b5 770c ja 0x17c3 │ │ 0x000017b7 488d3dfd0900. lea rdi, qword str.bogus_uid_ptr ; 0x21bb ; "bogus uid ptr" ; int status │ │ 0x000017be e844fcffff call sym.__exit ; void _exit(int status) │ │ ; CODE XREF from sym.pwn @ 0x17b5 │ └─> 0x000017c3 488b45d8 mov rax, qword [var_28h] │ 0x000017c7 4889c6 mov rsi, rax │ 0x000017ca 488d3df80900. lea rdi, qword str.uidptr____lx ; 0x21c9 ; "uidptr = %lx\n" ; const char *format │ 0x000017d1 b800000000 mov eax, 0 │ 0x000017d6 e8b5f8ffff call sym.imp.printf ; int printf(const char *format) │ 0x000017db 488b45d8 mov rax, qword [var_28h] │ 0x000017df be00000000 mov esi, 0 ; int64_t arg2 │ 0x000017e4 4889c7 mov rdi, rax ; uint32_t arg1 │ 0x000017e7 e883feffff call sym.__write │ 0x000017ec e87ff8ffff call sym.imp.getuid ; uid_t getuid(void) │ 0x000017f1 85c0 test eax, eax │ ┌─< 0x000017f3 7522 jne 0x1817 │ │ 0x000017f5 488d3ddb0900. lea rdi, qword str.spawning_root_shell ; 0x21d7 ; "spawning root shell" ; const char *s │ │ 0x000017fc e83ff8ffff call sym.imp.puts ; int puts(const char *s) │ │ 0x00001801 488d3de30900. lea rdi, qword str.bin_bash ; 0x21eb ; "/bin/bash" ; const char *string │ │ 0x00001808 e873f8ffff call sym.imp.system ; int system(const char *string) │ │ 0x0000180d bf00000000 mov edi, 0 ; int status │ │ 0x00001812 e8c9f8ffff call sym.imp.exit ; void exit(int status) │ │ ; CODE XREF from sym.pwn @ 0x17f3 │ └─> 0x00001817 488d3dd70900. lea rdi, qword str.not_vulnerable ; 0x21f5 ; "not vulnerable?" ; int status └ 0x0000181e e8e4fbffff call sym.__exit ; void _exit(int status)
spawning root shellや/bin/bashという文字列から間違いなくMaliciousであることは分かる。bogus* という文字列がチラホラと見られるため検索すると、
Get Root Privileges Using CVE-2017-16995 | Infinite Script
CVE-2017-16995/exploit-poc-pentest.c at master · gugronnier/CVE-2017-16995 · GitHub
これらに行き着いた。これがおそらく今回のMaliciousなプログラムの基になったものだと思われる。
Answer:Malicious
Check If Someone Requested the C2
Logには5か月あとに、特定のURLへのアクセスがあったが関係性が分からない、MaliciousなURLでなさそうであった。
プログラムを見るとネットワーク通信をしないようなプログラムであると思われるため、アクセスは無さそうだ。
Answer:Not Accessed
Add Artifacts
Value | Type | Comment |
---|---|---|
7299c49dd85069e47d6514ab5e10c264 | MD5 Hash | CVE-2017-16995, Privilege Escalation |
End
いやいや、アクセスは無いですよ。