「セキュリティエンジニアでもないのにCTFやる意味あるん?」「あるで。」
はじめに
はじめまして、SHIFT産業流通・通信サービス部のチルダいわしと申します。本記事のタイトルが関西弁ですが、大阪第1拠点の社員です。インフラ案件の経験はありますが、セキュリティエンジニアではありません。
セキュリティエンジニアでもないのにCTFやる意味あるん?
弊社は社内でのイベントや検定が盛んで、この秋はセキュリティエンジニアの運動会とでもいうべきCTFが実施されました。私は出られるイベントには乗っかるタイプです。そして実はDB開発案件やLinuxの経験があったので、最初はインフラ枠として入社しています(電気機械工業が盛んな関西ではLinux経験のあるエンジニアはそこまで珍しくないとの印象です)。なので「いけるやろ」と調子に乗って参加しました。
CTF(Capture The Flag)とは、もともと欧米にある騎馬戦や棒倒しのような陣取りゲームを指します。マッチョでフィジカルです。転じて今では、情報セキュリティの技術や知識を使って、主にFLAG{××}という形式で示されたフラッグと呼ばれるメッセージを探すゲームもそう呼ばれます。ギークでインテリジェントです。主にコンテスト形式で、いかに多くのFLAGを見つけられたか、いかに点数の高いFLAGを見つけられたかで総合点を競います。弊社のCTFもコンテスト形式でした。例えば以下のような問題が今回出題されました。
解析対象のファイルをダウンロードして展開しました。
サクラエディタで見比べてもよくわかりません。
ですので次の解法を見てみましょう。
解法 ① ファイル比較ツールで2ファイルの差分比較をします。 ファイル比較ツールのWinMergeを先にインストールしておくと、フォルダ上で2つのファイルを選択して右クリックした時に「WinMerge」というコマンドが出てくるので選択します。技術ブログらしいこと言うてるね。
② 差分のある個所を確認します。
差分のある個所を抜粋すると
hoge.txt側
hoge2.txt側
違いといえばアンダーバーの数くらいですが、fl@g{WeAreX!!!}という文字列があります。おそらくこの” WeAreX!!!”がFLAGです。
この問題は比較的簡単ですが、他にも以下のようなスキルが試されます。
OSINT(Open Source Intelligence):公開されている情報ソースから必要な情報を収集して、ソースファイルを解析する
文字コードの変換
電子透かしの解読
拡張子が不明・または不適切なファイルを適切なファイル形式で開く
隠しページ探し(昔の個人ホームページでよくあったやつです)
エクセルファイル内でマスキングされたパスワードの読解
幸い、今回の社内CTFでは出題文に解法の指示があり、点数の消費の引き換えに得られるヒントがありました。それどころか、はじめてインフラ系・セキュリティ系の解析ツールを使う人向けの入門編問題や、基本的なファイル操作や文字コードの知識を駆使すれば解ける問題までありました。
さらに、2週間以上の開催期間中に解答すればよいので、スケジュール調整ができれば知らない技術もじっくり学べます。 ですので、セキュリティ系の知識があまりなくても気楽に参加できました。間違った回答を解答欄に入力するとエラーメッセージが出る仕様なのも、初心者にはありがたかったです。
さて、先ほど自分はインフラ枠で入社したとお伝えしましたが、その割に微妙な点数でした。入社以来インフラ関係の案件をほぼしておらず、解答にかけた期間も3日以内と少なめだったとはいえ、「WireShark(パケット解析ツール)懐い~」「アクセスログ読むの懐い~」と調子に乗っていた人間とは思えませんでした。
そして開催期間が終わってから微妙な点数ゆえの虚しさから思いました。 「セキュリティエンジニアでもないのにCTFやる意味あるん?」 さて、皆さんどう思われます?
「カーネルの悲劇」からわかるセキュリティ系じゃないエンジニアがCTFをやる意味
今回は基本的なファイル操作での凡ミスや雑な作業で時間とヒント表示用の得点を浪費していました。時間の浪費がなければ他の問題を解く時間ができたはずです。また、ヒント表示のために得点も消費しなかったはずです。「は?なんでこんなミスしたん?」の凡ミスが乱舞する凡ミス仮面舞踏会でした。
象徴的なのはワールドカップのあれでも、阪神タ○ガースにかけられた呪いでもなく、「カーネルの悲劇」です。
このような問題がありました。
となるとgrep検索ですね、Linuxユーザーの基本ですね。
(今回不要な文字列を削除してお見せしています。)
“Next Grep Key Word is karnel at May 23.”とあるので、5月23日の”karnel”ログだけを抽出すればいいはずでした。「”kernel”をgrep検索やろ。楽勝やん。」と私は高をくくっていました。しかし、いくらkernelでのgrep検索結果を解析しても正解にたどり着けません。気づけば開始から30分経過しています。
そこでいやいやながら得点を消費してヒントを見たのですが、私がやっている通りgrep検索を利用する旨しか書かれていません。私だけgrepコマンドの機能が異なるパラレルワールドにでもいたのでしょうか?少し絶望的になりながら問題文を最初から読みました。grep検索すべきは”karnel”でした。次は5分足らずで正解にたどり着きました。
典型的なひっかけ問題でした。”kernel”のスペルという中途半端な知識に溺れると、ゴールを見失います。そういや「手入力ではタイポするからコピペしろ」とLinux案件時代に叱られたことがありました。今回も”karnel”をコピペすれば済む話です。泣いてもどうにもならへんけど泣いていい?
虚しくて悔しかったですね。基本のファイル操作での凡ミスだからです。他にも、フォルダ内の並べ替え機能を使えばすぐに見つかったのに、横着して目視確認したから目的のファイルが見つからないとか…会社の技術ブログで書いて恥ずかしくないの?逆に言うと、 ファイル操作系のCTFの一部は「基本的なファイル操作を凡ミスなく効果的に行えているか?」の確認 にもなります。
CTFの一部は「基本的なファイル操作を凡ミスなく効果的に行えているか?」の確認
前述のように、CTFではエンジニアなら誰でも使うであろうファイル操作の技術が問われることがあります。
例えばフォルダ内のファイルソートやファイルの差分比較はセキュリティエンジニアでなくても当たり前にします。文字化けした文字列を読めるようにデコードすることもあるでしょう。grep検索はサクラエディタや秀丸のユーザーなら覚えた方がいいです。
今回のCTFは当たり前にできると思っていたファイル操作への意識を見直す機会になりました。CSVファイルを条件反射的にExcelで開いて「文字化けしてるやん!」と逆ギレしてないでしょうか?zipファイルを解凍せずに開こうとして、「ファイル壊れとる!」と騒いでないでしょうか?今回の反省は普段の業務に生かしていきたいです。せっかくやったからには転んでもただでは起きたくありません。
いやしかし、ゲームだからましでしたね。 仕事で凡ミスがある方が嫌です。 個人でミスなく作業を進められるようになるのがベストですが、詰まっている時は誰かに頼ってもいいのです。 だからこそ、第三者視点や専門家の意見をヒントにするという選択肢があります。という訳で、弊社の品質管理サービスの外注をご検討くださいませ。
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/