演算子
5.演算子
キャンプから帰ってきて、自室で最初に見たものは、避妊具の箱だった・・・・。リヨと一緒に顔を真っ赤にする。母が置いたものだろう。
これは、手を出して良いという母からのサインなのだろうか。いや違う。手を出すなら節度を持って、ということだろう。いや、それ以外にどう解釈すれば良いというのか。蓋の裏には「リヨちゃんか、マツリカちゃんどちらかを必ず幸せにすること。」と付箋が張ってあった。
この時には、親戚気分から抜け出せないリヨよりは、恋人気分になれるマツリカのほうが会っていて楽しかった。しかしリヨが宣言した。
「私、学校で家庭科部に入って料理を勉強するから。あと、行儀作法についても勉強する。マツリカちゃんみたいに上品になる。だからテル君の家に来るのは週に1回にする。」なにか心境の変化があったのか、一方的に宣言して家に帰ってしまった。
お土産にもらったハムを少しつまみながら、将来のことを考える。大手SIerに行くのが良いか、小さいが有能なエンジニアが多数居るベンチャー企業に入るか、思い切って起業してみるか。まあ高2で考えても、高3の時には状況は変わっているだろう。今は情報処理系の大学に入ることを考えたら良いか。そんなことを考えて居たら、放課後にパソコン同好会のクオラ部長が部室で宣言した。
「2つのお知らせがあります。伊賀茉莉花ちゃんが新入部員になります。皆仲良くね!」
「新しく入る伊賀茉莉花です。よろしくおねがいします。」
「おお!よろしくおねがいします伊賀先輩。ただその・・・・。」ミツルが不穏な声でささやく。
「ドアの向こう側に、伊賀先輩に続いてパソコン同好会に入りたくて多くの人が待ってるんですよ。部長どうします?」
「テル君、どうするか考えなさい。」部長が丸投げしてきた。ガヤの声から20人位は居るだろうか。そんな人数にパソコンを教えていたらやりたいことができない。即決で入部拒否を決めた。しかし、校則で入部拒否は難しかったはず。どうすれば良いだろう。とりあえず、マツリカ以外の新入部員候補には「奇数の完全数は存在するか?を証明しなさい。」とお題を出して、解いた人をパソコン同好会に入れるという方法で、入部を制限することにした。
「もうひとつのお知らせは、部員が4人になったことで、チームとしてCTF大会に参加できるようになりました。このため、4人チームでCTF大会に参加します。」
なんとCTF対価参加宣言である。CTF大会にはチームワークが求められるのだが、果たして大丈夫なのだろうか。
まずはCTF練習に必要な機材を揃えて、ネットワーク接続する。そしてチームの役割を決める。一例としては、脆弱性突破担当、バイナリ解析担当、画像音声担当、ネットワーク担当等である。出題される内容によっては、この担当はフレキシブルに変えられることが望まれる。試しに3人には簡単な問題を解いてもらう。
結果は3人共、「問題が理解できない。」だった。道は険しい。
「部長、この状態で参加するんですか。」
「全部テル君が何とかしてくれると思ってた。」
「相手は4人チームで分担して解析してきますから、私一人ではスピードが遅いですよ。」
「それもテル君がなんとかしてくれると思ってた。」
「私みたいなのが4人チームで組んでくると思ってください。」
「ぐぬぬ。でもパソコン同好会で競技会に出たかったのよ。」
「確かにパソコン同好会に甲子園みたいな競技って、CTFとハッカソンくらいですね。」
「ハッカソンは皆がプログラミングできないと厳しいし、CTFなら良いかなって。」
「部長もいろいろと考えてくれていたんですね。」
「そりゃあね。部長だし。何か実績作りたいと思ったのよ。」
「CTFはビギナー向けじゃないと、俺も解けないですよ。」
「えっCTFってそんなに難しいの?」
「日本のCTFは良く知らないですけど、海外のCTFは難しいですよ。」
「うーん、無理かぁ。でも申し込んじゃったしなぁ。」
「えっマツリカが入部する前からですか?」
「ほほう、名前呼びかぁ。恋は進展してるのね。」
「うっ・・・・。」マツリカと見合って赤面する。
「申し込んだCTFは最低人数が無い大会だったから、3人でも行けるかなーって思ってた。」
「勝利条件は、ポイント制ですか?」
「10問解いたらOKみたい。特にポイントとかは無いみたいね。」
「じゃあ簡単かもしれませんね。いつ開催ですか?」
「来週土曜日!」
「急すぎますよ・・・・。わかりました。一応皆に最低限覚えて欲しいコマンド一覧を出しておきます。」
「助かるわ。ありがとう。」
「ミツルも覚えておいて欲しい。後で3次元サイトのURL送っておくから。」
「わっかりました!」
「伊賀さんは、情報分析をお願い。」
「わ、わかりました。」
「部長は全体指揮をお願いします。」
「わかったわ。」
「ではこのフォーメーションで来週水曜まで練習しましょう。練習問題をいくつか用意します。」4人でCTFの練習問題を解いていく。最初は全く解けなかったが、ミツルは少しコツをつかんだようだった。マツリカはファイル形式の癖を少し覚えてくれた。部長はCTFの過去問をネットで調べて教えてくれた。なんとかチームとして機能しそうな予感がした。
師匠に会った時に、CTF出場を伝える。
「まあ、良いんじゃないかな。如何わしい団体の主催ではないし、大丈夫だろう、」
「師匠、如何わしい団体がCTFを開催してるんですか?」
「開催してるよ。」
「その如何わしい団体のCTFに参加したらどうなるんですか?」
「自らの額に、バカの烙印を押すことになる。」
「競技会の選択から競技は始まっているんですね。」
「ダークウェブを覗いた君ならわかると思うけど、世の中は悪意に満ちているからね。」
「だから、邪悪になるな、と言われているんですか。」
「世の中はほとんどが邪悪だよ。邪悪な世界で、邪悪になるな、と言うのは、とても難しいんだ。」
「ほとんどが邪悪な世界で、邪悪になるな、ですか。」
「テル君はまだハッカーの入り口に入ったところだ。その言葉の意味は、暫く経てば、わかるさ。」
CTF大会は、土曜の午前から開催だった。高校生に配慮した結果の開催らしい。しかし、午後3時までの開催のため、考える時間は少なく、問題は簡単なものが予想された。もしかしたらいけるかもしれない。そんな考えが頭をよぎったが、出場チームは12校あり、いずれも過去にCTF大会に参加したことのある強者揃いのようだった。うちの日々野高校はパソコン「同好会」、他の高校は全てパソコン「部」だった。理科準備室で古いPCを相手にしている我が同好会との差は明らかだと思われた。我が高校は日比野高校なのだが、やけにカメラマンがカメラを向けてくる。
「部長、ちょっと・・・・。」
「どうしたのテル君。」
「出場校12校のうち、女性はうちの2人だけです。」
「CTFが男だらけの大会だったなんて知らなかったわ。」
「部長と伊賀さんはカメラ映えするので、ものすごく写りますよ。顔を映さないようにマスク買ってきましょうか。」
「それはいい。カメラマンは一人みたいだから、言ってお願いしてくる。顔を映さないようにって。」
「お願いします。」部長がカメラマンと話している。カメラマンはOKしてくれたようだった。部長がこちらにOKマークを見せてくれる。女性のプライバシーは尊重してくれるようで良かった。しかし、他の高校の参加者がマツリカに声をかけてくる。
「俺は垂井工の伊方って言うんだ。よろしく。」
「俺は金子井の穂積といいます。こんな美人がCTFに参加するなんて初めてだよ。」
マツリカは目立つのは仕方がない。マツリカは少し笑いながら、「もう少しで大会ですよ。」と、やんわり断っている。もうすぐ開催宣言のため、おとなしくなるだろう。
時間が来たので、開催宣言を聞く。このCTFはセキュリティベンダがスポンサーになっていた。次に、著名なハッカーであり今回の審判である優木章さんから、実際の開催方法を聞く。
・PCを各1台に配布。全ての学校に同じ環境が設定されている。IPとホスト名のみ別。
・PC内に仮想マシンがインストールされており、仮想マシンの中に問題がある。
・PCに接続するためのIDとパスワードは与えられている。但し一般ユーザのみ。
・今回はPCの横にGoogle Homeがある。Google Homeを使って問題を解いても良い。
・問題を1問解いたら1ポイント、10ポイントで勝利。
・持参したPCは、有線接続なら問題用PCに接続可能。HUBは接続済み。
・10問を解いた時間が一番速い高校が勝利。3位までを表彰する。
AIスピーカーであるGoogle Homeがあるのが謎だが、問題に関係しているのだろう。12校、皆が開始の合図を待つ。
「では開始!」
参加者は一斉にHUBにLANケーブルを挿し、接続を開始する。仮想マシンはLinuxだった。接続のIDとパスワードは予め与えられているため、すぐに仮想マシンに接続する。接続した先には、「overflow」と記載されたファイルが1個あるだけだった。ディレクトリ移動しようとするが、移動もできない。コマンドも殆ど使えない状態だった。Perl、Pythonは利用可能。なるほど、オーバーフロー問題からスタートか。
オーバーフローとは、プログラムの与えられた容量をわざと溢れさせて、溢れさせた後にプログラムを実行させるハッキングだ。他の高校は、overflowファイルを自分のPCにダウンロードして、逆アセンブルし、オーバーフローの値を探ろうとしている。私はオーバーフローの値は少ないと読んで、強引にオーバーフローの値を探るコマンドを投入し続けた。32バイト目以降にプログラムコードを投入すると、目の前のランプが光った。
「おっと、日比野高校、開始1分でフラッグ1を突破しました。」他校の生徒がどよめく。
「テル君、何したの?」マツリカも驚いて聞いてくるが、時間がない。
「後で説明するから、ちょっと待ってて。」
次は他のコマンドを利用するためにPATHを通す作業に入る。コマンドをオーバーフローさせながら、/sbin、/usr/sbin、/usr/local/sbin、/usr/local/bin、/usr/bin、/bin、にPATHを通す。通した後、一般ユーザを作成する。作成したところでランプが着いた。
「おっと、もうフラッグ2を突破だ。日比野高校は速い。」
作成した一般ユーザのIDととパスワードを紙に書いて、他の3人に渡す。今は紙に書くしかない。再ログインしたあと、ディレクトリ構造で見えたものは、問題番号3~10までのディレクトリだった。問題番号3に、4人で入る。中身はpassと書かれたファイルがあった。中身はJavaScriptとhtmlだ。中身は難読化されている。
「部長、ミツル、マツリカ、このファイルをダウンロードして、Webブラウザで実行して。」
「わかったわ。」「わかった。」「わかりました。」3人がダウンロードして実行すると、パスワード画面が現れた。
「2人は思いつくパスワードを入れ続けて。ミツルは辞書攻撃。」
辞書攻撃とは、一般ユーザが設定したことのあるパスワードの辞書を用意して、そのリストでパスワードを打ち込み続ける攻撃だ。辞書にはどこかのWebサービスやネットワークサービスで、平文でパスワードが漏れた時のものが入っている。一般ユーザが設定したことのあるパスワードのため、文字数が少ないものなら、簡単に破ることができる。その間に私はWeb Developer Toolsを開き、Flagを取れるパスワードを解析する。Web Developer ToolsはWebプログラミングの開発用ツールで、プログラムにバグが無いかを調べるツールだ。難読化されているが、開発プログラムのため、プログラムをわかりやすく表示してくれる機能がある。数分経つと、他の高校もフラッグ1、フラッグ2を取って横並びになった。ツールで調べるとパスワードが判明した。判明したパスワード「YZ191TV」を与えてLinuxコンソール場で実行すると、目の前のランプが点灯した。
「日比野高校、フラッグ3を突破しました。」さらにどよめきが起こる。
「ミツルは、他の問題が解けるか、大体で良いから見てみて。部長とマツリカはフラッグ4に行きましょう。」
「わかったわ。」フラッグ4は、「onsei」と書かれたファイルだった。中身はバイナリファイル。名前をそのまま信じるなら音声ファイルだ。音声をダウンロードして、手元のPCで再生してみる。しかしまったく聞き取れない。少なくとも英語やフランス語では無いようだ。逆再生してみたら、更に訳がわからない音声になった。
「あ、ここでGoogle Homeを使うのかも。」部長が指摘した。なるほど、Google Homeに聞いて、日本語訳してもらうのか。しかし、何語かわからなければ、Google Homeに訳してもらえない。何度か聞いていて、マツリカが閃いた。
「この発音、中東のニュースで聞いたことがあります。」確かに中東っぽい。中東でGoogleに訳してもらえそうな言語は・・ペルシャ語だ。小声で部長とマツリカに伝える。
「部長、マツリカ、この発音を正しく覚えて、ペルシャ語を日本語に訳してもらって。」
「ええ~難しいよ。ペルシャ語なんて喋ったことない。」
「全員わからないので、耳コピで何度も問いかけるしか無いですね。」私はペルシャ語の文法ページを参考にしようと思ったが、発音がないので文字化できない。ネット上で解くのは難しい。
「ちなみに大声で語りかけると他校にばれるから、小声でね。」
「テル君、難しすぎるよ。」
部長とマツリカでとにかく何度も何度も小声で問いかけると、Google Homeが反応してくれた。
「私の血圧は、82~116です。」
「やった、通じたよマツリカちゃん!」
「AIって凄いですね!私も買ってみようかな。」目的を見失っている。
つまり、フラッグ4のディレクトリに82_116というファイルを作れば良いのかなと思いファイルを作成すると、ランプが点灯した。
「日比野高校、フラッグ4も突破。順番に解いていっている割には早いですね。」
「確かにそうですね。普通は解けるものから解いていくものなのですが、順番に解いていって30分経たずにフラッグ4まで解かれるとは思いませんでした。問題が簡単すぎましたかね。」優木さんが解説を入れる。
他校のフラッグ取得音が無くなったので、うちの高校が1歩リードしていることになる。続いてフラッグ5のディレクトリに移動する。ミツルが先回りしていたので、簡単に説明してくれる。
「フラッグ5はパスワード付Zip圧縮なんだけど、Zipファイルが壊れていて、取り出せない。Zipファイルを修復することが課題みたいです。」Zipファイルのメタ情報を見てみると、CRC(巡回冗長検査)のデータと、修復するべき2バイトの値が表示された。このCRCに合うように、Zipファイルを修復する必要がある。2バイトをファイルのどこに入れたら良いのかを解くためにプログラムを作成して回す。ファイル自体の容量はとても小さいため、すぐに解けた。次はZipの解凍パスワードだ。パスワードをZipに投げ続けるプログラムをミツルに回してもらう。パスワード解析はランダムと辞書攻撃を同時に実行してもらった。
フラッグ5用プログラムを回している間にフラッグ6に取り掛かる。フラッグ6はwget.logとkotaeという2つのファイルがあった。kotaeファイルは0バイトなので、このファイルに答えを記載するとクリアのようだ。wgetのログには、127.0.0.1に接続しようとしてエラーとなっているログが表示されていた。netstatで空いているポートを確認するが、80番は空いていない。Apache、nginxはインストールされていないので、Webサーバではないようだ。何をしろと言うのだろう。ポートは、SSH(22)とSMTP(25)が空いている。SSHは今接続しているシェル、SMTPは電子メールが使用するポートなのだが・・・・。あ、SSRFか。wgetのオプションに「127.0.0.1:25」と指定して実行すると、メールが取得できた。このメールの内容を添付して、kotaeに記載すると、ランプが点灯した。
「日比野高校、フラッグ6を取りました。この調子たと昼前までには全部解かれてしまう勢いです。」
「やばいかもしれません。」優木さんが困った顔をしている。
ここまで、日比野高校パソコン同好会がリードしている。後続は現れない。
「テル君、さっきから何やってるのか全然わからないんだけど。」部長が会場の雰囲気に飲まれている。いつも強気の部長なのに、珍しい光景だ。
「大丈夫です。チームで解くことに意味があるんです。さっきは音声を解読してくれたじゃないですか。あまり弱気にならず、周りに気を配ってください。」
「大会なのに、全員が黙々とPCに向かってキーボードを叩いているの、地味な光景よね。」他校の生徒が何人か聞いていたようで、少しダメージを受ける音が聞こえた。
「その調子で行きましょう。」
「テル君、私はどうしたら良いの?」マツリカが不安そうな顔をしている。
「すぐに仕事を渡す。PCを準備していて。」
フラッグ7のディレクトリにあったファイルは画像とkotaeというゼロバイトのファイルだった。ダウンロードした画像はモナリザの絵だった。メタデータ情報は無し。ステガノグラフィだとすぐに解る。マツリカに画像をダウンロードしてもらい、Windowsのステガノグラフィ解析ツールを回してもらう。使い方をマツリカに説明する。
「ツールにチェックボックスがあるだろう。このチェックボックスを順番にON、OFFして、1個だけのパターンを全部試して。終わったら、チェックボックスを2個のパターンして、全パターン試して。それでも無かったらチェックボックスを3つに増やすんだ。」
「全パターンって、大変だね。」
「主催者側の時間稼ぎだ。予想では、チェックボックス3個までのパターンまで行かない。競技終了は午後3時、その後表彰式をして4時半には解散だ。CTFは時間がかかる問題なら、1日以上競技を行うこともあるんだ。気にせずゆっくり進めて良いよ。」
「わかった。やってみる。」マツリカが作業に入る。
フラッグ8は、また音声ファイルだ。ダウンロードしたが、全く何を言っているのかわからない。というより、言葉が不自然に聞こえる。恐らく逆再生と思われるので、逆再生してみたところ、言語らしきものは聞き取れた。しかし、何を言っているのか全くわからない。これもGoogle Homeで聞き出す問題だと思うが、何語かわからない。
「部長、Googleで翻訳可能な言語をリストアップしてください。」
「わかったわ。」部長がGoogle翻訳を検索して、言語をリストアップする。
「YouTubeで翻訳可能な言語を検索して、似た言語っぽいのを教えてください。」
「ええ!?全部聞くの?」部長が驚く。
「動画を見るのは触りだけで良いです。何語に近いかわかれば、なんとかなります。」
「大変だけど、やってみるわ。」部長が作業に入って暫く経ったところで、昼食となった。
昼食は、なんとマツリカが全員分用意してくれた。楽しく昼食を食べていると、他校の生徒が話しかけてきた。
「やあ、すごく進んでいるね。」開始前に話しかけてきた垂井工の伊方だった。部長、ミツル、マツリカは気軽に談笑している。金子井の穂積も来た。
「こんなに凄いとは知らなかったよ。」
「いえいえ、そんな事は。殆どテ・・・・真金さんのおかげです。」マツリカが照れている。更に他校の生徒が来て暫く談笑したあと、他校の生徒は主催者側の優木さんに話しかけている。
「すいません。言うのを忘れてましたけど、今のでフラッグをいくつか取られました。」
「えっ。」3人がギョッとする。
「ソーシャル・エンジニアリングと言って、他のチームや、今他校の生徒が話しているみたいに主催者側に話しかけて、問題のヒントを聞くのも競技の中に入っています。PC画面も見られました。」
「使ってるツールとかがバレちゃったってこと?それって紳士的じゃないでしょう。」部長が少し怒った顔をする。
「CTFでは、他校と話すことも、他校のPC画面を見るのも、競技のうちなんです。」
「なんだか納得できないなあ。」ミツルも納得できない顔をしている。
「うちも他校のPC画面を見に行っても良いですよ。たぶん見せてくれないでしょうけど。」
「そういう事は早く言ってよ。」
「すいません部長。完全に忘れてました。私もCTFに出るのは初めてですし。」本当に言うのを忘れていた。
「ごめんなさいテル君、そんな競技とは知らなかった。」
「気にする必要は無いよ。うちが一番進んでるし。普通に昼食を食べて、午後も頑張ろう。弁当美味しいよ。土曜日なのにありがとう。」
「4人全員同じメニューでごめんなさい。」
「4人全部別のメニューにしたら大変でしょう。省エネは大事よ。」部長がフォローを入れる。他校との談笑が終わったら、優木さんが少しこちらを見ている。気にせずフラッグ9に入る。
フラッグ9はダイスロールのプログラムだった。ジャンケンに1000回勝つとクリアと書かれている。1000回勝ち続けることは不可能なので、プログラムの中身を書き換えて、1000回自動的に勝つプログラムにすると、フラッグ取得となる。プログラムを逆アセンブラにかけて、アセンブラを読みながら昼食を取る。どこか分かりづらいので、コードを全部見て、ジャンケンが実行されている部分を探る。
昼食が終わった頃に、他校が他のフラッグや、フラッグ5を解いた音がした。主催者側の優木さんと話していた高校だ。ということは、優木章か、優木章+生年月日(もしくは生年月日+優木章)、名前は、ローマ字、日本語、英語のパターンである可能性が高い。優木章の生年月日をネットで調べ、ミツルに伝えて、他のウインドウでパスワードを解いてもらう。解凍パスワードは日本語で「優木章+和暦の生年月日」で解凍できた。解凍したファイルをフラッグ5のディレクトリにアップロードすると、うちの机のランプが点灯した。
「これで日比野高校はフラッグ1~6を殆ど順番に解きました。」
「ただ他校も追い上げています。まだわかりませんよ。」優木さんが盛り上げるための解説を入れる。
「ミツルは、フラッグ10を見ておいて。」
「見てるんですが、これ、たぶん暗号化ストレージの解析なんじゃないかと。」
「暗号ストレージ解析は難しそうだ。フラッグ9を解いたらフラッグ10に行くよ。」
「テル君、フラッグ7でメッセージが出たよ。」マツリカが喜ぶ。メッセージを見ると
「イロ イッカイズツ」というメッセージが英語で現れた。
「マツリカ、赤、緑、青を1個ずつ使うようだ。他のパターンの検索はやめて、1個ずつ使うパターンを順番に試して。」
「わかった。」マツリカは慣れたようで、手早く色を3個並べて、1個1個ずらしていく。すると、特定のパターンでFlagが表示された。
「やった!」
「じゃあ、そのFlagを見せて。kotaeに書くから。」PCを見ながら、答えを書いていくと、目の前のランプが点灯した。
「日比野高校、フラッグ7を取りました。凄いスピードです。」
「チーム全員で解いているようですし、連携が良いですね。」
他校はフラッグ5まで解いている高校が2校、あとはフラッグ4で詰まっているようだ。フラッグ8の状況を部長に聞く。
「何語かわかりそうですか。」
「うーん、わからない。ヨーロッパ圏では無いだろうということくらいしかわからないわ。」
「フラッグ4はペルシャ語でしたね。じゃあフラッグ7は場所が近いのかも。」
「ということは、インドのヒンディー語かも。」
「ヒンディー語を訳すように、Google Homeに語りかけてください。なるべく小声で。」
「発音難しすぎるわよ。」
「ゆっくり発音すれば、AIスピーカーなら聞き取ってくれます。伊賀さんもお願い。」部長とマツリカは小声でGoogle Homeに呼びかけ続ける。
その間に、フラッグ9のダイスロールの解析を行う。コードそのものは少ないが、難読化が行われているようで、読みにくい。勝敗の判断と思われる部分を変更して、エラー、また変更と作業を繰り返し、問題の部分を絞っていく。気がつくと、他校の生徒が1人ずつ、遠巻きにうちの高校を見守るようになった。これで音声問題は全ての高校に解かれるだろう。
昼食から1時間のところで、フラッグ9は解けた。あとは何を押しても勝ちになるため、キーボードの1を1000回叩く。するとフラッグが表示され、クリアとなった。
「日比野高校、フラッグ9をクリア。残りはフラッグ8とフラッグ10です。」
と言っている間に、フラッグ8が日本語化できた。
「その鳥は公園に良く居ます。が訳語らしいよ。」部長が疲れた顔で教えてくれた。何だろう。鳩?と思いkotaeファイルに鳩と書いたが、ランプは点かない。そこで、自分のPCからGoogleにアクセスし、鳩をヒンディー語に翻訳。「कबूतर」をkotaeファイルに記載すると、ランプが点灯した。
「これで日比野高校がフラッグ8をクリア。日比野高校、残りはフラッグ10のみです。」
ラストスパートだが、残り1時間だ。ミツルと協力してフラッグ10を取りに行く。フラッグ10のディレクトリには「cipher」という名前の更に別のディレクトリがある。cipherのディレクトリに移ってもファイルは無し。mountコマンドで確認すると、確かにcipherディレクトリにHDDのパーティションがマウントされている。マウントはext3。どのレベルで暗号化されているのだろう。
「真金さん、何かお手伝いできることはありますか?」マツリカが聞いてくる。
「うーん、頼むのに気が引ける。」
「何よ、言いなさいよ。」部長がけしかけてくる。
「この大会って、部長と伊賀さんしか、女性居ないですよね。」
「わかってるわよ。」
「周りの学校を回って、話しかけて、情報を収集してもらえると助かります。高い確率で、他校の作業スピードが落ちます。」
「色仕掛けってこと!?それならマツリカちゃんがいればなんとかなるか。」
「話すだけで良いです。写真は取られないように。」
「OK。やってみるわ。」部長とマツリカが遠巻きに他校を見ると、他校も思わず反応してしまう。作戦は成功のようだ。この間に、ミツルと相談する。
「暗号化するとしたら、そんなに難しいものじゃないと思うんだ。作業時間が少ないし。」
「確かにそうですね。でも、何も見えないんですよ。」暗号化ストレージかと思い、/etc/crypttabファイルを探したが、見つからず。難しい。逆に考えてみよう。制限時間が5時間のCTFに、暗号ストレージ問題はふさわしくない。簡単に解ける暗号か、もしくは暗号では無い可能性がある。そう考えていると、他校がフラッグを次々と取り出した。
「他校も日比野高校に負けじとフラッグを取っています。」
他校の中にはCTF大会の常連優勝校が居る。垂井工だ。フラッグを立て続けに取って、、日比野高校に迫っている。終了30分前には、フラッグ9を取り、日比野高校に並んだ。
「さあ、日比野高校と垂井工の2校の一騎打ちとなりました。」
「最後の問題は流石に難しいかな。」疑問型なのか。
ミツルと一緒に暗号を解いていく。しかし暗号ファイルがないと解く手がかりが無い。
「真金先輩、一旦アンマウントして、別の形式でマウントしてみてはどうでしょう。」
「わかった。やってみよう。但し、変な形式でマウント後に書き込むと暗号ファイルが壊れるかもしれないから、慎重にね。」
念の為、部長、マツリカを問題の端末からログアウトしておく。アンマウント、マウントオプションを変更してマウントを繰り返すが、ファイルは現れない。悩んでいる時に、部長とマツリカが帰ってきた。
「どんな感じ?こっちはナンパだらけだったわ。情報収集はできなかった。」
「明日一緒に秋葉原に行きませんか?って言われました。どう答えたら良いんでしょう。」
「カップルでアキバのどこに行くつもりだったんだろう。とりあえず嫌なら断って良いよ。」
「フラッグ10はどんな感じ?」
「難航しています。抜かれるかもしれません。」
「ここまで来たのなら、優勝して帰りたい。」
「相手も強豪なので、なんとも言えないです。」
「テル君、頑張って!」
時間は残り10分を切った。暗号化解読の糸口は見えない。周りの学校を見渡す。もしやと思い、アンマウント後のcipherディレクトリを検索すると、ファイルが存在した。このファイルの中にFlagがテキスト文で存在していた。このファイルをフラッグ10にコピーするところで、垂井工のランプが着いた。
「おーっと、最後に垂井工が日比野高校を抜いてトップ。1秒置いて日比野高校!僅差で垂井工が優勝です!おめでとうございます垂井工!惜しかった日比野高校。あと一歩及びませんでした。」
「こんなに僅差になるとは思いませんでした。面白い大会でした。」優木さんが解説を入れる。大会は3位まで完了したところで時間切れとなった。
表彰式には垂井工が表彰され、クリスタル製の優勝トロフィーと賞状が伊方に授与された。続いて日比野高校の部長に小さなクリスタル製トロフィーと賞状が授与される。3位には盾と賞状が授与された。続いて、閉会宣言、その後解散となった。
帰りの電車の中でスマホを見る。来ていたネットメディアは1社だけだった。「セキュリティCTFコンテストで垂井工が優勝。初出場の日比野高が準優勝。」写真は優勝校の伊方が大きく出ていた。セキュリティコンテスト主催のホームページでも学校名が出ただけで、部長、マツリカの写真は出なかった。これで一安心だ、
「次は優勝よね。もっと皆でCTFの問題を解きましょう!」部長が息巻いている。
「これで、パソコン同好会に実績ができましたね。あと1名部員を確保すれば、部に昇格できますね。」
「そうよ。部員を1名増やすわ。そして私は初代部長になるの。」
「本格的なCTFはもっと数学的に難しい問題だらけなので、数学に強い人が入ってくれたら良いですね。」
「えっあれで簡単なほうだったの?」
「長丁場になると、RSAの暗号を解くとか、数学的な知識を要求する問題が出ますよ。」
「じゃあ数学も頑張らないと。」
「まあ、皆で数学を頑張りましょう。」
「最後の引っ掛け問題はずるいですよ。」ミツルが少し不満そうだ。
「俺は楽しかったよ。チーム全員で問題を解けたし。」
「AIスピーカーの問題は面白かったですね。」マツリカは問題を解けて満足そうだ。
「ペルシャ語やヒンディー語なんてわからないわよ。」部長も不満そうな顔をしている。
「AIスピーカー普及のためスポンサーになっていたのかもしれませんね。」
CTFのことを語りながら、電車を乗り換えて、自宅に向かう。ミツル、部長が途中の駅で降りて、マツリカと2人きりになった。
「テル君、今日は本当にありがとう。」
「俺のスキルはCTFくらいしか使えないなと思ったよ。」
「そんな事無い。そんな事無いよ。私を助けてくれたじゃない。」
「どちらにしろ、偏ったスキルだ。」
「テル君は将来何になるの?セキュリティの専門家?」
「セキュリティベンダに就職かな。」
「普通の会社員?」
「そう、普通の会社員。」
「セキュリティの専門家って職業は無いの?」
「日本では無いね。」
「そうなんだ。有名になって、本とか沢山出す人になるのかと思った。」
「そうなるためには、もっと頑張らないと。」
「一緒に頑張ろうね。」
「そうだね。一緒に頑張ろう。」
マツリカを家の玄関まで送ったあと、自宅に戻る。今日は疲れた、寝ようと思ったら、Twitterからダイレクトメッセージが来た。
「今日の主催者側に居た優木です。ちょっと良いですか。」そういえば、出場届けにTwitterのアカウント記入欄に記載したなと思いながら、返事をした。
「真金です。何でしょうか。」
「今日のCTF大会、どうして手を抜いたんだい?」
「何のことでしょう。」
「ソーシャル・エンジニアリングを知りながら行わず逆に敵に情報を教えていたね。」
「部員に言うのを忘れていました。」
「その場で遮ることはできたはずだよ。」
「そう言えばそうでしたね。うっかりしていました。」
「更に言うと、優勝の時のタイム、優勝校から1秒後に2位だった。」
「すごい偶然です。惜しかったです。」
「偶然で、1秒後にはならないだろう。」
「私は他校のPCをハッキングしたりはしていませんよ。」
「それはしていないだろう。無線LANの電波は監視していたからね。」
「じゃあ1秒後に2位にはできないでしょう。」
「最後のフラッグ10を解く瞬間、垂井工の伊方君を見ていたね。ENTERを押した直後を待って、わざと遅れてフラッグ10を解いたように見えたよ。」
「私は目が良くありません。タイミングがたまたまそうなっただけです。」
「じゃあ、そういう事にしておこう。」
「そういう事も何も、事実ですから。次は頑張ります。」
「真金君はダークウェブに所縁のあるハッカーなのかな。」
「ダークウェブに入ったことはありますが、情報を何も見つけられませんでした。優木さんはダークウェブに入るんですか?」
「入っているかどうかは答えられないな。」
「表のハッカーがダークウェブに接続するなんて、調査以外では、有り得ないと思っています。」
「調査ねえ。まあそういう事にしておいてくれると助かる。」
「ダークウェブについて何か情報をお持ちでしたら、教えて頂けると嬉しいです。」
「禁則事項になるので、それは勘弁して欲しい。このログをスナップショットして晒されたら、大変な騒ぎになる。」
「そんな事をしないと思われたから、ダークウェブの話をしてきたのだと思いました。」
「それはそうなんだけどね。ダークウェブはとても危険な場所だ。できれば近づかないことをお勧めするよ。」
「助言ありがとうございます。」会話が終了した。優木さんからダークウェブの話を振ってくるとは思わなかった。何か目立ったことをしたのかな?と思ったが、思い当たらないので就寝した。
翌日はアキバに行ってジャンク屋に寄ったあと、ツカサ師匠と合流して喫茶店で話す。
「CTF大変だったろう。結果は見たよ。まずはおめでとう。」
「ありがとうございます。」
「あえて2位になるのは大変だ。葛藤があっただろう。」
「チームの皆が頑張っているのに、わざと2位になるのには正直抵抗がありました。」
「テル君のパソコン同好会の部長は女性だ。そして伊賀さんも女性だ。そして数週間前まではダークウェブのユーザに狙われていたんだ。苦しい決断だったろうが、現状では良い選択だよ。写真が出てしまうとまずいことになるからね。」
「主催者側のハッカーの優木さんには感づかれてしまいました。」
「わざと2位になったことを?」
「はい。Twitterで指摘されましたが、適当にごまかしました。」
「まあ、表のハッカーにバレても何も起きないだろう。」
「あの、ハッカーに表とか裏とか、あるんですか?」
「白と黒は無いけど、表と裏はあるよ。表のハッカーは本を出したり、勉強会を開催したり、セキュリティコンテストの審判や解説をしたりするね。裏は、一切表に出てこない。」
「優木さんにはダークウェブに所縁のあるハッカーじゃないかと指摘されました。」
「じゃあ優木さんもこの前のTorルータ事件について知っていたのかもね。表のハッカーも情報収集のアンテナを高くしてダークウェブの事件を探ったりするから。まあ、表の顔があるハッカーはむやみにダークウェブには入ってこないから大丈夫だよ。」
「表と裏の顔があるハッカーも居るんですか。」
「眼の前に居るじゃないか。それに優木さんも、そうかもしれないよ。」
「なるほど。SIerのSEは表の顔なんですね。」
「英語ではカバーと言うんだ。裏の顔を、表のカバーで隠すという意味さ。警察の潜入捜査はアンダーカバーと言われる。オフィシャルなカバーを持っている人は、007のジェームズ・ボンドのような人さ。オフィシャルではないカバーを持っている人は、ノン・オフィシャル・カバーと言われる。ノン・オフィシャル・カバーは。更に深く犯罪組織に潜入している人だよ。全く表に出てこない。」
「スパイ映画みたいですね。」
「スパイ映画が現実のスパイ活動を参考に作劇しているからね。」
「日本ではネットでスパイ活動をしてる人が居るんですか?」
「日本のネットでの活動は、なんとも言えないね。有名なのは内閣情報調査室(内調)くらいじゃないかな。人間が人間をスパイ活動することをヒューミントと呼ぶんだ。アメリカではCIAが管轄している。機械で人間をスパイ活動することをシギントと呼ぶんだけど、アメリカではNSAが管轄している。ネットでの活動を監視しているアメリカの組織はNSAになるね。日本にもネットを監視している人員は居るんだろうけど、ダークウェブまで潜ってくる日本の犯罪組織が居ないと、内調もダークウェブに潜ってこないだろう。」
「ダークウェブって、日本の犯罪組織も潜ってこない領域なんですか。」
「日本の犯罪者は居るには居るけど、どうだろうね。犯罪組織には近づかないようにしているから、良くわからないな。実態は永遠にわからないんじゃないかな。テル君がわざと近づかない限り、犯罪者も寄ってこないから、今は大丈夫だよ。」
「今は大丈夫、ですか。」
「もしテル君がハッカーとして有名になったら、表からか、裏からか、いつの日かメッセンジャーが来るよ。その時のためにネットに限らず、情報が事実か嘘かを見抜く特訓は必要だね。意識はしておいて欲しい。」
「こういう話をするために、今も妨害電波を出しているんですか。」
「そりゃそうさ。」ツカサ師匠は気軽に答えたが、いつも周囲に目を配っている理由がわかった気がした。ダークウェブは、混沌の深海なのだ。




