MWSCup 2025 に参加した。

MWSCupって?

MWS Cupは、マルウェアやそれに関連するサイバー攻撃の解析技術を競うコンテストです。

マルウェアとサイバー攻撃対策研究人材育成ワークショップ 2025(MWS2025)

はじめまして、B4の石橋です。


私は今回、MWS Cup 2025にЯインテリ茶筅R しす''たけなるチームで参加し、総合優勝を頂きました★


MWS CupはCSSで併催されるセキュリティに関するコンテストです。CSSの話はほかの方が書いてくれるので任せるとします。
それで、MWS Cupなのですが、内容としてはハッカソン+CTFのような形式となっています。
今振り返ってみても、なぜ総合優勝できたかよくわかりません。本当にありがとうございます。


そもそもこのチームは、メンバー構成すらもよくわからない人たちで構成されています。表彰式でも司会の方から、どういう集まりなのかを質問されましたが、一言で表すことはできませんでした。
弊研究室からは私と澤井が参加しています。そして、RiSTでの後輩2名(1名は情報理工学部ではない)、情報危機管理コンテストセキュリティキャンプでお会いした静岡大学の方、私と澤井の共通の友人である大阪公立大学の方で構成されています。
詳しく話すとなるとこれよりも複雑な関係性になりますが、一言で表すと混沌です。
チームリーダーを務めていただいた静岡大学の方は質問に対して「セキュリティキャンプで知り合った」と言っていましたが、「混沌です。」と答えたほうが適していたのかもしれません。

また、このチーム名もかなりの問題です。
まずは「Я」です。普通にやったらLaTeXのコンパイルが通りません。「す''」もかなりの問題児です。「ず」ではないのです。「す」にシングルクォートが2つついているのです。競技中に何度かチーム名をファイル名に含める必要があったのですが、だいたいの環境では「'」が特殊な文字になるので、これに対するattentionを常に向ける必要がありました。(実際にやらかしました。)


なぜこのようなチーム名になったのでしょうか?
それは1つの対抗意識からでした。
詳細は省きますが、ЯRやインテリというのは、まさにその対比になっています。また、茶筅もとても重要です。チームメンバーのうち、4名が茶筅が深く関連する地域に思い入れがあるのです。
しずたけの「しず」も「たけ」もとあるキャラクターの名称からとっています。しずxたけです。深い意味はありません。
取ってつけたようですがRは立命要素です。
シングルクォートは...ごめんなさい。シングルクォートを使ったら何か起こるだろうと思って入れただけです。実際に何か起こってしまったので、これは反省点です。

チーム紹介(?)も済んだところで、競技の説明などに移らせていただきます。

最初に立ちはだかったのがハッカソン課題です。
まず何を作るかということから決める必要があったのですが、去年度のハッカソン優勝チームがゲーミフィケーションを行っていたことから、安易に我々もゲームを作ろうという話になりました。この安易な考えは半数のチームが思っていたらしく、今年はハッカソン提出チームのうち、実に半数がゲームを提出していました。大ゲーム時代です。
MWS Cup 2025 Hackathon - YouTube

私たちのチームは当初、MITRE ATT&CKを題材としたカードゲームを作ろうという話で進んでいました。私もWEBアプリケーションとして動作するプロトタイプを作成するなどして、チーム全体がその方向に進んでいると考えていたのですが、ICTSC2025の予選に参加している間に行われたチームミーティングでタワーディフェンスを作ることが決定し、大ちゃぶ台返しを食らいました。結果としてはこれは良い判断だったと思っています。というのも、私たちが考えていたカードゲームという仕組み自体が攻撃者側と防御側に分かれてバトルするというものだったので、対戦相手をどうするかの問題や通信システムどうするかなどの問題がありました。カードゲームのまま続けていたらPacketorioレベルのものは完成しなかったと思います。

その後ゲームエンジン何使うかという話があったり、Godotとgdscriptでやろうという話だったのにいつの間にかrustが加わっていたり、masterブランチが2つに増えたり、設置物の接続情報をグラフで管理しようと主張する派閥と、ほかの開発メンバーが誰もグラフを使えないのでやめた方がいいという派閥に分かれたり、結果として予定が合わず誰もグラフ部分のコードを触れなくなったり、生贄駆動開発なる言葉が生まれたり、3日間で4000件のメッセージが送信されたり59時間に及ぶデスマーチが発生したり...

↑胃が痛くなるスクリーンショットたち

まぁ何が言いたいかといいますと、Packetorioは私たちの魂が籠った知と努力の結晶なのです。


当日について

私は当日DFIR+Offensiveを担当しました。
DFIRは過去問をみつつ、takemaruという名前の(気持ちだけ)hayabusa的ツールを作成し、ログデータから不審な箇所を抽出できるよう準備していました。
チームメンバーから出力結果が見にくいなどの不評は多かったものの、自分としては役に立ったと思っています。機能としては、攻撃ツール固有の文字列検出に加えて、短いファイル名の実行なども検出して報告することができます。

(といっても本番での内容に対して用意していたルールがあまりかすらず微妙な結果しか得られなかったのですが)

例:こんな感じのcsvファイル群が生成される

あとはエンティティ同士を特定の項目でfilteringしてグラフにする機能なども作っていたのですが、当日までに間に合わずお蔵入りになったりもしています。

このtakemaruのおかげで、Offensiveの方の攻撃再現はかなりスムーズに進みました。
というのも、出力されたレポート内に明らかにおかしいログがあり、それについてググったら権限昇格の脆弱性に関する情報が得られたためです。
(初期アクセスの再現で、デスクトップに辞書ファイルがあるなんて思いもせず、ずっとみんな大好きrockyouを試してなぜうまくいかないのか困っていたのは内緒です。)
ログインが成功した後は、先に見つけておいた脆弱性をそのまま使って権限昇格を行いました。変なところで詰まりすぎてここが一番簡単だったまであります。

Offensiveを完走した感想としては、もう少しひねった問題が出ると思っていたので少し物足りなさを感じました。というのも、私が過去に参加したFFRI Security x NFLabs. Cybersecurity Challenge'24のPentestでは結構難しめの問題が出ていたためです。まぁ、何とかなったということで、良いでしょう。

ということでブログが書けずに苦しんでいるもう一人の男にバトンをタッチします。


はじめまして、 B4 の澤井です。最近、脳内の kida先輩(M2)が「ブログも書けないの卒論書けるわけないよね〜」と語りかけてきてきます。(完全に被害妄想で、 kida先輩は優しい方です)
また、上の石橋からは一日おきに







といった具合に DM が飛んできて、刺されるのかな?という感じの緊張感を抱きながら書いております。

自分は表層解析を担当しました。チームに機械学習人材がおらず、余り物を担当する形です。
表層解析は OSINT と機械学習によるマルウェアの分類が出題されますが、

  • OSINT
    今年度からの出題で本当に何が出るのか分からない。
  • マルウェア分類
    例年の Kaggle 形式から変更され、 CTF の 10/100 点問題として解く形式に。(大々的に運営からの告知があったにもかかわらず、競技前日に知りました ← すげーあほ)

という感じで、どう対策すれば良いんだ···状態でした。

ありえないくらい準備不足の自覚はあり、不安で夜は kida先輩が語りかけてくださったのですが、競技中のチームはかなりふざけた雰囲気でとても楽しかったです。自分はこの分野が苦手だったので、普段絶対に使わない筋肉を使った感じがします。実際、常識では考えられないやらかしを何度もしており、それも含めて超面白かったです。もし enjoy 解析部門があったら我がチームの優勝に違いないでしょう。

感謝の意を示すために、来年の MWS Cup への参加を検討されている方向けに色々書きます。基本的に、表層解析の対策はまず 公式の解説 を見るのが良い気がしますが、2025年度の解説に書いていない色々もあるので共有します。

まず、問題の多くは Attempt(試行回数)が指定されており、この問題は3回まで回答を提出できる... などが決まっていました。特に OSINT はこれが厳しく、ほとんどの問題に2回までの提出制限がありました。

今年度の OSINT 問題は Gemini Deep Research などで雑に解けると思いますが、本番は素早く確信を得るのが難しく、自分は解説通り有名ツールで普通に検索しまくるのが正確で速かったです。(相方は Claude と Gemini(GCP) を同時に使っていたらしく、正解の選択肢としては Gemini の出力を採用することが多かったそうです)

並列にタスク投げたり、複数の出力結果から判断させるなどの工夫をすれば、今年度の問題は AI に投げるだけで、本当に誰でも解けるものにされていると思います。一部記述式で判断理由を3つ書けというのもありましたが、 "きちんと情報源を精査しているか確認したかった" とのことで、この辺がちゃんとしていれば、採点的には割と回答が何でも良かったそうです。(自分は結構悩んだ問題で、企業ブログ的なのはセーフか?とかリンクからリンクを辿って解答に行き着いたので3つに絞れと言われると困るなど、色々考慮して最後の方まで解答をひよっていました)

また、AI を使おうとした問題として、マルウェアのハッシュ値16個からそれぞれのファミリを調査して、最も多いものを解答させる問題がありました。これに関してはさすがに人力では時間がかかるので急遽 Deep Research を使いました。 Deep Research はソースのリンクを記述してくれる他、根拠とともに教えて的なプロンプトで、文章としてもまとめてくれるので良かったです。一方、少し脅すと解答が変わったり、調査しきれない不明なハッシュ値は放置して短絡的な解答を述べたりと不安要素が多かったので結局全部確認しました。(初回の検索では、2番めに多い Phobos が最多であると出力されましたが、調査のあたりをつけるにはちょうどよく、判断が不明瞭なものを提示させたりして、確認がスムーズにとれたので、このあたりは役に立ちました。)

今回は準備不足だったこともあり、その場で使うツールをコロコロ変えていましたが、本来は VirusTotal の APIなどでこのような問題は一括調査できるようにしたほうが良さそうだなと思いましたが、今のところ AI + 人力でも十分高速で確実なので参考までに。

全然関係ないですが、相方とマルウェアファミリ名の話をしているとき、ずっと BlueStacks が〜と言っていて、こいつは何言ってるんだと思ったら BlackSuit のことでした。あと隣で MINTIA を食べたり吐いたりしてました。まじウケますね。

BluesStacksのロゴ

機械学習については、チーム名をファイル名に含める必要があるため、 mv でファイル名を変更しようとするとキモイチーム名のせいでカレントディレクトリが破壊されるなどなどのクソバカが重なってなんと、提出が間に合いませんでしたが、ランダムにこねくり回すだけの5分実装でも超精度良かったので、機械学習の事前準備として過去問を参考にする際は、2024以前のものも見たほうが良いと思います。絶対この10点は取れたほうが良いです···傾向的にどんどん簡単になっていて、運営の方的には、親しみづらい機械学習でもチャレンジしてほしい!といった意図が(憶測ですが)感じられたので申し訳ないことをしました。

つらっと10点落としても私が獄門の刑に処されずへらへらしているカスなのは、他にもクソバカやらかしが大量に確認されており、客観的にむしろ良くやったほうだという風潮があるからです本当です。ここには面白すぎてとても書けませんが、本当に愉快なチームで楽しかったです。

結果として一命をとりとめましたが、両分野ともに出題者がその気になれば難しくできる余白が残されており、来年以降はさらに分からないなという所感です。

総合優勝とのことで、ロゴ入りのTシャツがチーム全員に贈呈されました。

Tシャツの肌触りが良くて気に入っています。

こちらは競技前日に kida先輩から奢っていただいたラザニアです。縦型に積まれているのが特徴的ですね。

縦方向に積まれた珍しい形のラザニア
ナイフとフォークでいただくタイプのラザニア。めっちゃ美味しいが、岡山名物とかでは無いらしいです。
縦方向に積まれた珍しい形のラザニア

競技に誘ってくれたチームメイト、一緒に表層解析を解いた相方。ハッカソンで生贄になってくれた虎。経費負担していただいた研究室に CSS 期間中キャリーしていただいた先輩方々···
多くの方に頭が上がりません。総じて奇跡の連続で、貴重な体験ができました。
MWS Cup運営の方々には感謝してもしきれません。特に弊チームからは、参加費交通費宿泊費もろもろ全て自費負担で競技に臨むメンバーもおり、そのくらいの情熱と、そこまでするほど面白いものだったということを伝えたいです。本当に素晴らしいイベントをありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です