皆様、こんにちは。
ライターの『Lightbells』でございます。
私の住んでいる地方では本格的な寒波の襲来ということで、最低気温が-9℃になりました。
寒がりの私にとってはもう最悪で、毎朝震えながらコタツに潜り込んでいます。
さて、そんなどうでもいいことはこのあたりに放っておいて、今回の本題に入りましょう。
今回は、コンピュータセキュリティに関するコンテスト『CTF(Capture The Flag)』について記事を書きたいと思います。
『セキュリティはWordPressを使っているから大丈夫!』と思っている皆さん、本当に大丈夫ですか?
例えWordPressを使っていたとしても、弱いパスワードや、安直なパスワードを使っていればセキュリティを突破される可能性があります。
CTFを通してセキュリティ意識を高めましょう!
目次
サーバーやブログの管理者にこそCTFをおすすめしたい。
クラッキング対策におすすめ CTFとは?
まず、恒例の解説から入ります。
CTFとは、もともと野外での旗取り合戦を指す言葉で、日本語では『騎馬戦』に近いニュアンスを持ったものです。
その『旗取り合戦』をコンピュータセキュリティ分野ではコンピュータ同士で行います。
それが今回おすすめしている『CTF』です。
ニュースでは、『ハッキングコンテスト』などと言われています。
下の3方式が一般的に行われているCTFです。
- 意図的に脆弱性をもたせられたシステムに対して攻撃し、そのシステム上のFlag(旗)と呼ばれるデータ(文字列・ファイルetc..)を盗みとること(Attack)、また自分のシステムにある脆弱性を修正し、敵チームからFlagを盗み取られないように防衛すること(Defense)で点数が入る攻防戦方式(Attack/Defence style)
- 攻防戦方式のようにサーバーが与えられることはありませんが、運営側の用意したサーバーに対し攻撃し、相手サーバーのFlagを盗み出すと同時に自分たちのFlagをサーバーに書き込むことで点数が入る変則型攻防戦(King of the Hill)
- 問題が与えられ、対象のシステムからFlagを盗み出すか、問題に回答することで点数が入るクイズ形式(jeopardy style)
(参考:CTFのススメ)
今回の記事では、難易度の高い攻防戦方式ではなく、クイズ形式や変則型攻防戦に近い常設型のCTFサイトを紹介させていただきます。
なぜCTFはクラッキング対策に効果的なのか?
なぜ私がCTFをおすすめするのか不思議に思う方もいらっしゃるかもしれません。
その理由は、『CTFは非常に広い出題範囲を持ち、また実際の攻撃を知ることができるから』です。
問題の分野
- リバースエンジニアリング
Binaryとも呼ばれる。基本的にはシリアルキーのクラッキングなどと同じ技術を用いてフラッグ(旗に相当するファイルの内容)を奪取することで得点となる。- Forensics
HDDやUSBメモリや物理メモリのイメージファイルを解析し、その中からフラッグを奪取することで得点となる。- Pwnable
プログラムの脆弱性を突き、不正侵入・不正昇格をすることで得点となる。
基本的な部分はBinaryと同じ(攻撃対象の解析)だが、脆弱性の発見及び脆弱性を攻略するExploitコードを記述する技術が必要である。
サーバ内のフラッグを奪取することで得点となる。- Web
ウェブアプリケーションの脆弱性を突いて(XSS・SQLインジェクション・OSコマンドインジェクションなど)サーバ内に侵入し、フラッグを奪取することで得点となる。- Network
ネットワークのパケットを解析し、その中からフラッグを奪取することで得点となる。
ネットワークの基礎的な知識と、それぞれのプロトコルに関する深い知識が要求される。- Miscellaneous
上記ジャンルに分類できない、またはセキュリティ関係の雑学やパズルなどの問題が出題される。(Wikipediaより引用)
以上のように非常に広い範囲が出題されるため、コンピュータセキュリティに対する理解を深めやすい特徴があるCTFをオススメしています。
更に私達が攻撃を仕掛ける側となるので、身近なところに思わぬセキュリティーリスクが隠れていることが分かります。
どんな問題が出るの?
多くのCTFはレベルが分かれており、レベルに応じて必要とされる知識量も変動します。
例えば、簡単な問題の例を挙げましょう。
Q.以下の文章よりフラグを見つけ出せ! (分野:暗号史)
Jrypbzr gb PGS Jbeyq. Guvf ceboyrz vf irel rnfl. Pna lbh fbyir? Synt vf SYNTy7v3pcw6y. Vafreg na haqrefpber vzzrqvngryl nsgre SYNT.
暗号をかじった事のある人ならばピンと来ることでしょう。
それでは問題を解説していきたいと思います。
この問題を見ると、『.』や『?』などの記号はそのままで、文章のような雰囲気が感じ取れると思います。
そのことから記号がそのままで、一見して意味の無い文字列に見えるようにする暗号であることが分かります。
また、ヒントが全くないことから、専門的な知識が必要な問題ではありません。
以上のことを鑑みて、この問題は暗号の中で最もシンプルな『シーザー暗号』ではないかと推測することが出来ます。
次に、シーザー暗号だと仮定した場合、その場合何文字ずらせば意味のある文字列になるかを導き出す必要があります。
地道に『Jrypbzr』を一文字ずつずらして行き、『Kszqcas』(1文字)→『Ltardbt』(2文字)→……→『Welcome』(13文字)と導き出す方法もありますが、非常に面倒ですね!
そこで、Google検索で『Caeser Cipher』(シーザー暗号)と検索してみましょう。
すると何やら『Caesar cipher decryption tool』なるものが出てきました。
説明を読むとキーを推測してくれるモードがあるようです。
ということで、そのモードを使用すると、ROT13で暗号化されていることがわかり、暗号が解読できました。
Welcome to CTF World. This problem is very easy. Can you solve? Flag is FLAGl7i3cpj6l. Insert an underscore immediately after FLAG.
これが暗号の解読結果です。
指示通り『FLAG』の直後に『_(Underscore)』を挿入し、Flagは『FLAG_l7i3cpij6l』となります。
これがクイズ形式のCTFです。
攻防戦方式は実際にCTFサイトの問題を解いていただいたほうがわかりやすいと思いますので、サイトのご紹介と、Lv.1の解説を行っていきたいと思います。
まず、下記サイトにアクセスし、任意のニックネームを入力し、登録してください。
すると、認証画面が表示されますので、この認証を突破することが目標となります。
Lv.1ならば、少しWebについてかじったことのある方は速攻で解くことができるはずです。
それでは解き方を説明していきたいと思います。
まず、変則型攻防戦方式のCTFチャレンジサイトでは、ソースコードに大きなヒントが隠されていることが少なくありませんので、兎にも角にもソースコードを表示したいと思います。
ところが、ソースコードを表示しようとすると『右クリックは禁止』なるメッセージが……
ますますソースコードが怪しくなってきました。
そこで、Chromeに標準で搭載されている『Chrome Developer Tools』を使用してソースコードを覗いてみましょう。
本来はWeb開発者が自らのサイトをデバッグするためのツール群ですが、今回はソースコードを除くために使用したいと思います。
『F12』キーを押すと右半分に『Elements』やら『Console』なるタブがあるやたら怪しげなウィンドウが広がります。

開発者向けオプション
左上隅の□の中にマウスポインターがあるボタンを押すと、ページ内でクリックしたところのソースを表示してくれるモードになりますので、その状態で入力欄をクリックしてみてください。

CDTのInspector
右側のソースが自動的にinputタグまで展開されます。
ここでソースに注目!
|
1 2 3 |
<!-- reminder --> <!-- id: admin --> <!-- password: nimdadmin --> |
……なんと、このソースを書いた人は右クリック禁止にしたことで安心して、あろうことがソース内にユーザー名とパスワードをメモしたままにしておいたようです。そんな馬鹿な。
半分罠を疑いながらIDとPasswordに打ち込むと……
なんと突破出来てしまいました。
流石にここまでずさんなパスワード管理をしている管理者さんは居ませんね。
このように意外と簡単な問題からCTFに入門することができます。
おすすめCTF入門サイトの紹介と解説
1.8946
全体的に初心者向けの内容となっています。
Webセキュリティーをかじっている方ならば簡単に解ける問題がほとんどだと思います。
本格的なCTF問題というよりは、クイズ問題という風味が強いかもしれません。
CTFを始めたばかりの入門者におすすめのサイトです。
8946のアカウントがなくても、Twitterなどのソーシャルアカウントでもログインすることができるので『ちょっとCTFを初めて見たい』という方にも最適なサイトです。
また、他のCTFサイトと同じようにランキング機能があり、他の人と競い合って技術を延ばすことが出来ます。
2.akictf
上記のサイトとは違い、問題が英語で出題されること、問題の難易度も上昇していることから、CTFの入門サイトとは言いがたいと思います。
しかし、問題の分野が明記されていて、どんな方向から問題にアプローチすれば良いのかわかりやすいため、解きやすいと思います。
あくまで私見ですが、Web・暗号関係の問題が多いという印象を受けます。
入門レベルでは満足できなくなってきた方におすすめしたいと思います。
3.ksnctf
今回紹介するサイトの中では最も難しいサイトだと思います。
問題の分野も、たくさんの分野をまたがって出題されるものが多く、マルチな能力とそれを組み合わあせて問題を攻略する発想力が必要とされます。
ただ、結構ネタに走っているところもあるので((ᒧᆞωᆞ).ᒧうー=-!!(/ᆞωᆞ/).にゃーが良い例)それを楽しむことができる人ならば、楽しく問題を解くことも出来ます。
CTFに慣れてきて、楽しむことができるようになった上級者の方におすすめします。
まとめ
今回の記事ではブログのクラッキング対策のため、CTFをご紹介いたしました。
『彼を知り己を知れば百戦殆うからず』と孫氏が言っているとおり、ブログのセキュリティー向上・クラッキング対策の為には、敵(つまりクラッカー)の考え方を知る必要があります。
CTFなどを通して攻撃者の目線から物事を見るようになれば、自ずと弱点も見えてくることでしょう。
かくいう私も、以前からWebサービスで使いまわしていたパスワードに対し、ふと思い立って辞書攻撃してみたところ、日本語辞書に合致するキーワードがあったらしく、2分ほどで特定されてしまいました。
私のセキュリティー意識の低さが明るみに出てしまったわけですが、私自身は強固なつもりでパスワードを設定しておりましたので、結構なショックでした。
このように、自分はセキュリティーに気を使っているつもりであっても、攻撃者にとっては『容易に突破できてしまうパスワードであること』が往々にしてあります。
この記事を読んだ方が、少しでもセキュリティーに対する意識を向上させてくださることを願っています。
最後まで記事をご覧いただきありがとうございました。
また別の記事でお会いしましょう。
Happy IT Life!



