MWSCup 2021 課題1

ヒント
Q1（悪性トラフィック解析）• Drive-by Download攻撃のトラフィックの特徴とは？
•一般的にどのようなチェーンで行われるのか•

異質なトラフィックを探し、そこから流れを遡る• JavaScriptにおける動的なコード実行を追う•

愚直に実行するのではなく、適度に内容を理解し、「適切に動くように動かす」›

攻撃対象のプラットフォームを想像する• 最新の攻撃事例を探す•

ホットな攻撃手法は詳細な解析記事が公開されている›

重要な脆弱性についてはJPCERT/CCなどが注意喚起している© 2021 NTT All Rights Reserved

ヒント
Q1（悪性トラフィック解析）• Fiddlerがフリーズする•

巨大なデータをFiddlerでプレビューしようとすると、落ちることがある•

SyntaxViewではなく、TextViewやRawで表示すると比較的マシ•

どうしても落ちる場合は、sazファイルをzipとして展開して、直接中のコンテンツを見ることもできる© 2021 NTT All Rights ReservedヒントQ2（PowerShellスクリプト解析）• 問題の要求は？
•Q2.1, 2.4 : ファイルを暗号化するスクリプトを解析し、与えられたファイルを復号する。

•

Q2.2, 2.3 : 特定環境でのみ動作するスクリプトを解析し、環境を適切に設定する。

• 難読化・解析妨害のテクニックを理解する•

e.g. Q2.2 「環境に応じて異なるURLに対してアクセス」•

実直にコードを読み解くだけでも問題は解けるが、コードから解析妨害・環境検知の技術を学んでほしい。

•

難読化コードの解析をサポートするツールもあるが、最後は手を動かしながら解析することが必要。

•

実際の攻撃では未知の手法が用いられるケースもある。
そのような場合でも自分で調査し、解析できるようになってほしい。

© 2021 NTT All Rights Reserved

問題担当
• 主担当
•

NTTセキュリティ・ジャパン株式会社 小池倫太郎

• 作問者
•

NTTセキュリティ・ジャパン株式会社 高井一•

NTTセキュリティ・ジャパン株式会社 澤部祐太

• レビュアー
•nao_sec メンバー一同© 2021 NTT All Rights Reserved

事前連絡© 2021 NTT All Rights Reservedこれまでの傾向
D3M/Augmaに関するDrive-by Download攻撃を扱ったもの• 大きく分けて3つほどに分けられる
1.

pcapやsazを使って、Drive-by Download攻撃を解析する

2.

Drive-by Download攻撃で使われるような難読なスクリプトを解析する

3.

Drive-by Download攻撃を観測する• 2019年は 1. saz解析、2020年は 2. JavaScript解析• 2021年はどうしようかな？

© 2021 NTT All Rights Reserved昨年のアンケート結果「去年までのようトラフィックを解析する問題と、今年のようなスクリプトを解析する問題だと、どちらのほうが解きやすかったですか？」• スクリプトのほうが易しいし、復習もしやすい• 解析に専念できるので、今後も今回のようなスクリプト解析の問題が良い• 実際の攻撃の流れを見ながら解析できたので、去年までのトラフィック解析が良い• 両方を組み合わせることで、より理解が深まるのではないかじゃあどっちも出します！！！
© 2021 NTT All Rights Reserved

課題概要
今年の課題1は2部構成
1. 悪性トラフィック解析•

従来どおりDrive-by Download攻撃の一連の流れを解析する問題•

攻撃トラフィックの特定、前後関係の把握、難読なスクリプトの解析、Exploitの理解

2. PowerShellスクリプト解析•

昨今のサイバー攻撃において、特に悪用事例が多いPowerShellスクリプトを解析する問題•

PowerShell特有の様々な難読化・解析妨害を対処していく© 2021 NTT All Rights Reserved注意事項• 問題ファイルおよびインフラが悪性判定される恐れがあります•

アンチウイルスソフト等に検知される可能性があります›

悪性っぽく見えるようなコンテンツを作っていますが、実際には無害です• 問題ファイルはデータセットなどと同様に扱いにご注意ください•

外部サービス等へ投稿しないでください• 何か質問等あれば Slack-MWS #cup2021 まで© 2021 NTT All Rights Reserved競技中の解説はここまで© 2021 NTT All Rights Reserved

MWSCup 2021 課題1 解説回答について
90807060504030201001.1© 2021 NTT All Rights Reserved

1.2

1.3

1.4

2.1

2.2

2.3

2.4

Q1 （8点）
Q1.1~4はDrive-by Download攻撃を仕掛ける悪性トラフィックに関する問題です。ユー
ザがWebブラウザを操作していたとき、悪意のあるコードを読み込んでしまい、マルウェ
アと思われるDLLファイルが実行されました。mwscup2021_q1-1.sazをダウンロードし、それぞれの問題に回答してください。mwscup2021_q1-1.sazを開くためのパスワードはmws!drive-by@infected です。
※ 本設問で利用するトラフィックデータは作問者によって作成されたデータであり、実際の攻撃で用いられたものではありません。DLLファイルはマルウェアではなく、ダミーファイルです。

© 2021 NTT All Rights Reserved

Q1.1 （2点）
DLLファイルを実行しようとするJavaScriptコードを含んでいる通信はどれですか？その通信の通信先ドメインを MWSCup{ドメイン} の形式で回答してください。例えば、
http://example.com/test.html に悪意のあるJavaScriptコードが含まれていた場合、回答は MWSCup{example.com} となります。

© 2021 NTT All Rights Reserved

Q1.1 （2点）
悪性トラフィックを探すには？

• Drive-by Download攻撃特有のトラフィックチェーンに着目？
•

イマドキのDrive-by Download攻撃はSWFやJARを（ほとんど）使わない›

どんな脆弱性を使う？

https://nao-sec.org/2021/04/exploit-kit-still-sharpens-a-sword.html© 2021 NTT All Rights Reserved

Q1.1 （2点）
悪性トラフィックを探すには？

• 一般的ではないトラフィックを探す•

Content-Type›application/vnd.ms-cab-compressed という見慣れないContent-Type»[3444], [3445]© 2021 NTT All Rights Reserved

Q1.1 （2点）
悪性トラフィックを探すには？

• 一般的ではないトラフィックを探す
•

プロセス名
›

www.secretgraffiti.com はPowerShellから通信が発生している»[3447]© 2021 NTT All Rights Reserved

Q1.1 （2点）
悪性トラフィックを探すには？

• 一般的ではないトラフィックを探す•[3444], [3445], [3447]は極めて近い範囲にあり、とりあえずSuspiciousであるとして周辺を見る© 2021 NTT All Rights Reserved

Q1.1 （2点）
前後関係を追う• [3444]と[3445]は同一ドメインに対する通信であり、同様のドメインに対する通信として他にも[3442]がある• [3442]は[3441]からリダイレクトによって到達している• [3441]は[3440]からリダイレクトによって到達している• [3440]は[3436]からリダイレクトによって到達している• [3436]は[3433]によってiframeとして読み込まれている> いわゆるDrive-by Download攻撃のようなリダイレクトチェーンに見える© 2021 NTT All Rights Reserved

Q1.1 （2点）
前後関係を追う• 必要なデータのみを取り出す•

wiki.augma.orgが入口サイト（改ざん？）•

pop.plasticregret.com -> redir.plasticregret.com -> app.bluetds.comをリダイレクト•

cdn.cabinek.com が攻撃の本体•

www.secretgraffiti.com はPost-Exploitトラフィック？

© 2021 NTT All Rights Reserved

Q1.1 （2点）
[3442]を見てみる• 明らかに怪しいJavaScriptコード

Flag is MWSCup{cdn.cabinek.com}© 2021 NTT All Rights Reserved

Q1.2 （2点）
DLLファイルを実行しようとするJavaScriptコードには、AES-128-CBCでデータを復号する処理が存在します。復号に使用した暗号鍵を MWSCup{16進数} の形式で回答してください。例えば、暗号鍵が b529ee9440e427b8 である場合、回答はMWSCup{b529ee9440e427b8} となります。

© 2021 NTT All Rights Reserved

Q1.2 （2点）
[3442]を解析していく• 実はMWSCup 2020 課題1で出題した問題の組み合わせ•

解説スライドはこちら›

https://www.iwsec.org/mws/files/MWSCup2020_c1.pdf•

基本的にはevalを追っていくだけ•

AESをデコードする際に登場する解析妨害コード›攻撃された環境はInternet Explorer»›

プロセス名やUser-Agentを見れば分かる

Internet Explorerとそれ以外のブラウザに存在する実装差異© 2021 NTT All Rights Reserved

Q1.2 （2点）

Flag is MWSCup{fdaa292aa7384a52}© 2021 NTT All Rights Reserved

Q1.3 （2点）
実行されたDLLファイルのファイル名はなんですか？回答は MWSCup{ファイル名} の形式で入力してください。ファイルパスではなく、ファイル名を回答してください。例えば、ファイル名が malware.dll である場合、回答は MWSCup{malware.dll} となります。

© 2021 NTT All Rights Reserved

Q1.3 （2点）
[3442]を解析していく• 攻撃コードっぽいデータ•[3444]と[3445]のURLがあり、[3442]によって発生しているトラフィックであることが確定•

ClassIDの先頭 “edbc374c” などでググると、CVE-2021-40444に関連していることが分かる© 2021 NTT All Rights Reserved

Q1.3 （2点）https://www.jpcert.or.jp/at/2021/at210038.html© 2021 NTT All Rights Reserved

Q1.3 （2点）
CVE-2021-40444• https://github.com/klezVirus/CVE-2021-40444• いくつかのテクニックを組み合わせて悪用することで発生するRCE
1.

CABファイルをダウンロード

2.

パストラバーサルし、任意の場所へ任意のファイルを書き込み

3.

任意のファイルを実行© 2021 NTT All Rights Reserved

Q1.3 （2点）
CVE-2021-40444•

今回は2つのCABファイル•

KB5005565.cab›•runner.inf»

DLLファイルっぽい»実行されたのはこっち

CbsPersist_2021092108498.cab›

main.inf»

PowerShellコードっぽい

Flag is MWSCup{runner.inf}© 2021 NTT All Rights Reserved

Q1.4 （2点）
DLLファイルが実行されたことによって発生したと考えられる通信のURLはどれですか？回答は MWSCup{URL} の形式で答えてください。例えば、
http://example.com/test.html にJavaScriptコードが含まれていた場合、回答はMWSCup{http://example.com/test.html} となります。

© 2021 NTT All Rights Reserved

Q1.4 （2点）
runner.infを調べてみる• Ghidraなどで読み込めば挙動を理解することは容易• Stringsなどでも十分挙動を推測できる•

main.infをmain.ps1にリネームし、PowerShellで実行してそう© 2021 NTT All Rights Reserved

Q1.4 （2点）
main.infを調べる• 極めて単純なPowerShellコード• Invoke-WebRequest•

http://www.secretgraffiti.com/go›

最初に予想していたトラフィックチェーンと一致する

Flag is MWSCup{http://www.secretgraffiti.com/go}© 2021 NTT All Rights ReservedQ2 （12点）
Q2はPowerShellスクリプトを解析する問題です。

➢ 難読化・解析妨害されたPowerShellスクリプトを解析できるかどうかを問う問題。
➢ 単に問題を解くだけでなく、難読化・解析妨害のテクニックや解析手法について理解して欲しいという気持ちがあります。
➢ 問題の難易度としては以下のような想定でした。
➢ Q2.1: 難読化も解析妨害もなくて、PowerShellの文法が分かれば解けるレベル。簡単。
➢ Q2.2, Q2.3: 難読化・解析妨害されたPowerShellスクリプトの解析をしたことあれば、解けるレベル。これくらいの難読化されたスクリプトは攻撃でも使用されるので、解けなかった人は後で復習して欲しいです。
➢ Q2.4: チーム間の点数差をつけるために、ちょっとひねったCTFっぽい問題になっています。
この問題は解けなくても、実務ではそこまで困らないかなという感じです。

© 2021 NTT All Rights Reserved

Q2.1 undo flag （2点）
このPowerShellコードは、同じディレクトリにあるflag.txtを暗号化し、flag.cryptedとして出力します。 与えられたPowerShellコード及びflag.cryptedを元にflag.txtを復元してください。
復元するとMWSCup{.....}という形式の文字列が得られるので、その文字列を回答してください。

なお、復元すると回答する文字列以外に3種類のURLが得られます。 それらは問題2から問題4に関するファイルのダウンロードURLです。

© 2021 NTT All Rights Reserved

Q2.1 （2点）
関数abcと関数defの処理が理解できれば、問題解けそう$a = Get-Content flag.txt$e = @();“flag.txt”というファイルを読み込み、読み込んだデータを変数$aに格納

これは処理に不要な変数なんですが、消し忘れました……

foreach ($b in $a) {$aには読み込んだデータが一行ずつ配列で格納されていて、foreach文でloop回している。

$b = ([System.Text.Encoding]::Default).GetBytes($b)

一行分のデータをバイト型にキャストし、$bに格納$c = abc $b

引数に$bを指定して関数abcを実行し、戻り値を$cに格納$d = def $c

引数に$cを指定して関数defを実行し、戻り値を$dに格納$d = [Convert]::ToBase64String($d)
Add-Content flag.encrypted -value $d$dをBase64に変換して、結果を$dに格納
一行分のデータをflag.encryptedに書き込む(追記モード)}

Fig.) 問題コード(一部抜粋)© 2021 NTT All Rights Reserved

Q2.1 （2点）
➢ 関数abcは元の値に3を足してmod256する関数➢ 関数defは0x29でXORする関数
function abc($inn) {function def($inn) {$dd = @();

$aaa = @();for ( $i = $inn.Length-1; $i -ge 0; $i--) {for( $i = 0; $i -lt $inn.Length; $i++ ) {$dd += ($inn[$i] + 3) % 256
元の値に3を足して、}
mod256する関数
return $dd;}© 2021 NTT All Rights Reserved$aaa += ($inn[$i] -bxor 0x29)}
return $aaa;}

0x29でXORしている

Q2.1 （2点）
解法例
$a = Get-Content flag.encryptedfunction abc($inn) {foreach ($b in $a) {$c = [System.Convert]::FromBase64String($b)

function def($inn) {$dd = @();

$aaa = @();for ( $i = $inn.Length-1; $i -ge 0; $i--) {for( $i = 0; $i -lt $inn.Length; $i++ ) {$d = def $c$d = $inn[$i]$e = abc $d$d += 256}$e = [System.Text.Encoding]::Default.GetString($e);$dd += ($d - 3) % 256

return $aaa;

Write-Host $e}}

return $dd;}

答え MWSCup{he11o_p0wershe11_w0r1d_!!!!!}© 2021 NTT All Rights Reserved$aaa += ($inn[$i] -bxor 0x29)}

Q2.2 png-shell （2点）
このPowerShellコードは環境に応じて異なるURLに対してアクセスします。 それらのURLの内、いずれか一つのURLにアクセスするとフラグが取得できるので、そのフラグを回答してください。 フラグはMWSCup{.....}という形式のフラグです。

問題ファイル: https://mwscup2021.nao-sec.org/q2_ein3098nhva_3i2ovnU)3oskd.zip© 2021 NTT All Rights Reserved

Q2.2 （2点）
➢ q2.pngという画像ファイルを読み込んでいる。
➢ ぱっと見では、URLに対してアクセスようなコードは見当たらない。
sal a New-Object;Add-Type -A System.Drawing;$g=a System.Drawing.Bitmap(".¥q2.png");$o=a Byte[] 2352;(0..27)|%{foreach($x in(0..27)){$p=$g.GetPixel($x,$_);$o[($_*28+$x)*3]=$p.B;$o[($_*28+$x)*3+1]=$p.G;$o[($_*28+$x)*3+2]=$p.R}};$g.Dispose();IEX([System.Text.Encoding]::ASCII.GetString($o[0..1731]))Fig.) 問題コード© 2021 NTT All Rights Reserved

IEXという関数を呼び出している

Q2.2 （2点）
IEXとは?

➢ PowerShellに標準で実装されている組み込み関数。
➢ 引数で与えられた文字列をPowerShellスクリプトとして解釈し、実行する。
➢ JavaScriptでいう、eval関数のようなもの。

➢ PowerShellスクリプトを難読化する際、頻繁に利用される。

PS C:¥Users¥admin> IEX("Write-Host 'hogehoge';")hogehogeFig.) IEXの使用例© 2021 NTT All Rights Reserved

Q2.2 （2点）
➢ IEXに引数で渡している文字列を標準出力に表示して、どんなコードが実行されている確認してみる。
sal a New-Object;Add-Type -A System.Drawing;$g=a System.Drawing.Bitmap(".¥q2.png");$o=a Byte[] 2352;(0..27)|%{foreach($x in(0..27)){$p=$g.GetPixel($x,$_);$o[($_*28+$x)*3]=$p.B;$o[($_*28+$x)*3+1]=$p.G;$o[($_*28+$x)*3+2]=$p.R}};$g.Dispose();Write-Host ([System.Text.Encoding]::ASCII.GetString($o[0..1731]))Fig.) 問題コード(一部変更)© 2021 NTT All Rights Reserved

IEXをWrite-Hostに変更

Q2.2 （2点）
IEXにより実行されるコード➢ (Get-Culture).lcidの値によってアクセス先のURLが変わることが分かる。
➢ lcidの値を全て試せば、フラグが取得できるURLが判明する。

答え MWSCup{l0vel1ve_n1sh1k1n0_mak1_t0ut1_https://www.lovelive-anime.jp/}© 2021 NTT All Rights Reserved

Q2.2 （2点）
Invoke-PSImage➢ 今回のコードはInvoke-PSImageというツールを使って、生成しています。
➢ https://github.com/peewpw/Invoke-PSImage➢ Invoke-PSImageは過去に攻撃に悪用された事例があります。
➢ https://ascii.jp/elem/000/001/615/1615152/➢ https://cyware.com/news/new-malware-strain-abuses-github-and-imgur-e29bc6f6© 2021 NTT All Rights Reserved

Q2.3 shell-in-shell-in-shell （4点）
この難読化されたPowershellコードを解析し、フラグを取得してください。

回答するのはMWSCup{.....}という形式のフラグです。

問題ファイル: https://mwscup2021.nao-sec.org/q3_9420dmvae-3wfalkj..efiewlsei3.zip© 2021 NTT All Rights Reserved

Q2.3 （4点）
コードの概要➢ IEXを使って次のコードを実行している。
➢ IEXで実行されるコードはAESで暗号化されており、 復号するにはIVとKEYが必要。
➢ IVは解除されたコードに書いてあるものをそのまま使えば良い。($IVという変数に格納される)➢ KEYは実行した端末から収集した情報から計算されるSHA256値。($keyという変数に格納される)➢ KEYを生成する処理を読み、正しいSHA256値を生成できればOK。

© 2021 NTT All Rights Reserved

Q2.3 （4点）
KEYの生成処理はそのままでは読めない程難読化されています……….

© 2021 NTT All Rights Reserved

Q2.3 （4点）
Script-logging機能➢ Windows標準の機能で、実行されたPowerShellスクリプトを記録してくれる。
➢ 最終的に難読化が解除された後のスクリプトまで記録されている場合がある。
➢ Windows10以降に搭載されていて、下記の方法で有効にできる。
➢ (Home Editionでは不可)グループポリシーから有効にする(※1)➢ (Home Editionでも可)レジストリを設定する➢

Registry Hive: HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER➢

Registry Path: SOFTWARE¥Policies¥Microsoft¥Windows¥PowerShell¥ScriptBlockLogging➢

Value Name: EnableScriptLogging➢Value Type: REG_DWORD➢Value: 1(有効), 0(無効)(※1) https://docs.microsoft.com/ja-jp/powershell/scripting/windows-powershell/wmf/whats-new/script-logging?view=powershell-7.1© 2021 NTT All Rights Reserved

Q2.3 （4点）
難読化する前のコードはこんな感じです。

https://drive.google.com/file/d/12n7TgGROPmwU4siMIHX9qVyE_8nvzqM/view?usp=sharing© 2021 NTT All Rights Reserved

Q2.3 （4点）
難読化を解除したKEYを生成する処理➢ $asdと$SSSSがSHA256を生成する時のシードになっている。
➢ $asdは実行した環境に応じて値が変わる。
➢ $SSSSはこのPowerShellスクリプトブロックの一部で、固定の値➢ $asdに正しい値が設定されればOK。

© 2021 NTT All Rights Reserved

Q2.3 （4点）
$asdに正しい値を設定するには?

➢ 関数dwoiは解析回避のテクニックが使わており、Script-loggingが無効な場合のみ正しい値を返す。

© 2021 NTT All Rights Reserved

Q2.3 （4点）
$asdに正しい値を設定するには?

➢ よくあるデバッガー検知のテクニックで、起動してから4秒以内なら正しい値を返す。
➢ 環境変数COMPUTERNAMEに”MWS_”が含まれていれば、正しい値を返す。

© 2021 NTT All Rights Reserved

Q2.3 （4点）
次に実行されるコードを見ると、まだ難読化されています………….(><)
ただ、AESで暗号化されていて、KEYが取得できれば復号できるという構造は同じです。

© 2021 NTT All Rights Reserved

Q2.3 （4点）
同じようにScript-Loggingしても、下記コードにより途中までしかログに残りません。

なので、下記コードに該当する部分を消してから、 Script-Loggingします。

© 2021 NTT All Rights Reserved

Q2.3 （4点）
難読化する前のコードはこんな感じです。

https://drive.google.com/file/d/1eBCny3G5korKhwcN8ntfPOd4_rmAGS9C/view?usp=sharing© 2021 NTT All Rights Reserved

Q2.3 （4点）
AESの正しいKEYを取得するには?

➢ VM検知をした場合、正しい値にならないようになっている。

© 2021 NTT All Rights Reserved

Q2.3 （4点）
AESの正しいKEYを取得するには?

➢ これもVM検知で、ディスク容量が200GBより大きい場合に、正しい値になる。

© 2021 NTT All Rights Reserved

Q2.3 （4点）
AESの正しいKEYを取得するには?

➢ ドメインにMWSが含まれていれば、正しい値になる。
➢ BIOSの製造元に”MWS INC.”が含まれていれば、正しい値になる。

© 2021 NTT All Rights Reserved

Q2.3 （4点）
あとはここまで説明してきたように設定して、q3.ps1を実行すればOK。

➢ 環境変数COMPUTERNAMEに”MWS_”を含むように設定する。
➢ Script-loggingを無効にする。
➢ 上記以外は下記スクリプトをImport-Moduleする。

© 2021 NTT All Rights Reserved

Q2.3 （4点）

© 2021 NTT All Rights Reserved

Q2.3 （4点）
Invoke-Obfuscation➢ 今回コードを難読化するのに使用したツールで、PowerShellスクリプトを難読化するツールとして有名なツールです。
➢ GitHub - danielbohannon/Invoke-Obfuscation: PowerShell Obfuscator© 2021 NTT All Rights Reserved

Q2.4 undo flag revenge （4点）
このPowerShellコードは、同じディレクトリにあるflag.txtを暗号化し、flag.cryptedとして出力します。 与えられたPowerShellコード及びflag.cryptedを元にflag.txtを復元してください。
回答するのは復元したflag.txtに含まれるMWSCup{.....}という形式のフラグです。

© 2021 NTT All Rights Reserved

Q2.4 undo flag revenge （4点）
難読化されている部分があるので、まずは難読化を解除します。

© 2021 NTT All Rights Reserved

Q2.4 undo flag revenge （4点）
PsDecode➢ 難読化されたPowerShellスクリプトを読み易くするツールです。
➢ 全ての手法に対応しているわけではないが、文字列結合等一般的な手法には対応しています。
➢ https://github.com/R3MRUM/PSDecode© 2021 NTT All Rights Reserved

Q2.4 undo flag revenge （4点）
難読化を解除すると、下記のような処理をしていることがわかります。

➢ flag.txtを読み込み、変数$eeeeeeeに格納する。
➢ RC4の暗号鍵を生成し、変数$a32siele2に格納する。
➢ カスタムされたRC4でflag.txtを暗号化し、Base64変換したデータをflag.cryptedとして出力する。
以下の2つができれば、問題解けそう➢ 暗号鍵を正しく生成する。
➢ RC4のカスタムされている内容を理解する。
© 2021 NTT All Rights Reserved

Q2.4 （4点）
難読化する前のコードはこんな感じです。

https://drive.google.com/file/d/19USiWrJZp_fjtc_FT_ANzhO_p5WlVAmZ/view?usp=sharing© 2021 NTT All Rights Reserved

Q2.4 undo flag revenge （4点）
暗号鍵の生成処理は以下のようになっています。

➢ 関数bbbbbに以下の引数を渡して、戻り値を変数$clsdasleiに格納する。
➢ 第1引数: "OInv;asdijoe8vznowseokm82lnvIe8923_mws20211026_“➢ 第2引数: (Get-Date).ToFileTime()➢ 変数$PSCultureと変数$clsdasleiを文字列”_”で連結する。
下記の2つが分かればOK➢ (Get-Date).ToFileTime()の値➢ 変数$PSCultureの値© 2021 NTT All Rights Reserved

Q2.4 undo flag revenge （4点）
(Get-Date).ToFileTime()➢ 現在時刻をFileTime形式に変換した値が取得できます。
➢ FileTimeは64bit値である。
➢ Contains a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601
(UTC).
➢ https://docs.microsoft.com/ja-jp/windows/win32/api/minwinbase/ns-minwinbase-filetime© 2021 NTT All Rights Reserved

Q2.4 undo flag revenge （4点）
関数bbbbbに着目してみる➢ 第1引数で渡した文字列を変換テーブルに従って変換する関数。
➢ 第2引数(FileTime)の値が分かれば、どの文字列に変換されるか分かる。
➢ 第2引数の値は推測不可であり、64bit値(≒1016)を全探索するのは処理に時間がかかり過ぎて厳しい。

第1引数は$ioio
第2引数は$popo© 2021 NTT All Rights Reserved

modしているQ2.4 undo flag revenge （4点）
関数bbbbbに着目してみる➢ 文字列の変換処理を見ると、配列$tiakiの長さでmodをとっていることが分かる。
➢ 配列$tiakiの長さは12000なので、第2引数の値は分からなくても0-11999までの値を全探索すればOK。

第1引数は$ioio
第2引数は$popo© 2021 NTT All Rights Reserved

modしているQ2.4 undo flag revenge （4点）
変数$PSCultureとは?

➢ 自動変数と呼ばれるもので、PowerShellが標準で設定している変数です。
➢ $PSCultureには(get-culture).nameの値が格納される。
➢ 詳細は下記URLを参照してください。
➢ https://docs.microsoft.com/jajp/powershell/module/microsoft.powershell.core/about/about_automatic_variables?view=powershell7.1© 2021 NTT All Rights Reserved

Q2.4 undo flag revenge （4点）
では$PSCultureにどんな値が設定されていればいいのか?

➢ (get-culture).lcidの値が0x404かどうか判定し、0x404でない場合は処理が途中で終了するコードが見つかる。
➢ lcidの値が0x404になる場合の、(get-culture).nameの値が$PSCultureに設定されいればOK。

© 2021 NTT All Rights Reserved

Q2.4 undo flag revenge （4点）
RC4のカスタム内容➢ 処理の最後で下記のような処理をしている。
➢ 255-(通常のRC4で計算される値)➢ 復元するときは上記の逆の計算をすればOK

通常のRC4で計算される値© 2021 NTT All Rights Reserved

Q2.4 undo flag revenge （4点）
solverの実装例➢ https://drive.google.com/file/d/14KSRKVDfgsqaNyk7NiaGIM2IVkdq9xL/view?usp=sharing

答え MWSCup{Y0u__ar5_p0wershe11_master_mayumura.tetetetetetetetetete.club}© 2021 NTT All Rights Reserved

まとめ
2021年はDrive-by + PowerShell• Drive-byは一般的なチェーン•

よくある特徴をもとに探し出すことが可能•

難読化・解析妨害も過去に出題したものばかり• PowerShell問•攻撃に使用されるPowerShellスクリプトは、難読化・解析回避されている場合が多いです。
できなった人は解説スライドを見て、理解して欲しいです。

•特に、IEXとScript-loggingだけは覚えて帰って欲しいです。

© 2021 NTT All Rights Reserved