#前置き
はじめてQiitaに記事を投稿します。
某大学で計算機科学を専攻している大学生です。
###どうして記事を書くの?
プログラミングに初めて触れたのは大学1年生。
C言語による初めての "Hello, world!" から月日が経ち、その時感じたワクワクすらもはや古い記憶となってしまいました。
これまで様々な言語に手を出し、サービス開発に挑戦しようかと意気込んだ時期もありました。
しかし、自分自身が素晴らしいと感じるアイデアに出会えず、モチベーションを保つこともままならず・・・。
そうしてくすぶっていた私ですが、立ち寄った書店で面白そうなものを見つけました。
それがCTFです。
かねてよりセキュリティやホワイトハッカーといった単語に興味をひかれていたのです。
これを機に勉強してみよう、備忘録、頭の整理としてQiitaに投稿してみよう。
そんな甘い気持ちで書かせていただきました。
なにぶん素人ですので誤った認識をそのまま書いていることがあるかもしれません。
そのような記述がありましたらご指摘いただけると幸いです。
#CTFってなに?
非常に前置きが長くなりました。
wikipediaからです。
キャプチャー・ザ・フラッグ(Capture The Flag、略称: CTF)は、互いに相手陣地の旗を奪い合う騎馬戦や棒倒しに似た野外ゲームのことである。また、そこから派生して、ファーストパーソン・シューティングゲームなどのeスポーツや、コンピュータセキュリティなどの分野でも用いられている。特に、コンピュータセキュリティにおけるCTFは、しばしば「ハッカーコンテスト」などと意訳されて報じられる
かっこいい。
ジャンルとして以下のようなものがあるようです。
Reverse engineering
実行ファイルなどのバイナリコード(機械語)を解析、アセンブリに変換したりする
Forensics
HDDや物理メモリなどのイメージファイルを解析する
Pwnable
プログラムの脆弱性を突く
Web
Webアプリケーションの脆弱性を突く
Network
ネットワークのパケットを解析する
Crypto
暗号系
Miscellaneous
その他諸々
ざっと並べただけですがやっぱりかっこいいです。
様々な知識が得られそうです。
#どうやって勉強しようか
書籍やサイト、勉強会など様々なもので勉強できるようですが、私はCpawCTFやksnctfというサイトを利用して勉強しようと考えました。ハードルが低いからです。
いわゆる常設CTFというものらしいです。
どうやらCpawCTFの方が難易度が低いらしいということで、そちらから先に進めることにします。
##さっそくチャレンジ
level1の最初の問題から順番に進めていきます。
##環境
MacOS High Sierra 10.13.4
このCpawCTFの答えの形式は"cpaw{hogehoge}"という形になるようです。
今後もこのような形式のflagを探していくことになります。
次はQ2かと思いきやQ6でした。
Q2~Q5はどこへ行ったのでしょうか。
早速暗号の問題です。
が、それはもう丁寧に説明が書いてあります。猿でもわかります。
この例は簡単ですが、一般的な単一換字式暗号は文字同士の対応を不規則にするようです。
さらに無意味な文字を散りばめることも応用としてあるとのこと。そうなると解読はかなり難しくなるのでしょう。
「とりあえずダウンロードして開けばいいでしょ」
これが素人の私の発想でした。
開けません。
ヒントにしたがってファイルの種類を調べるコマンドを実行します。
いわゆるCUI(Character/Console User Interface)というものに馴染みがないため、ヒントにあるコマンド1つとっても知りませんでした。知らないものはすぐ検索です。
その結果,
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=663a3e0e5a079fddd0de92474688cd6812d3b550, not stripped
このようなメッセージが返ってきました。
・・・。
色々調べた結果、このファイルはELF(Executable and Linking Format)という形式のバイナリファイルであり、Linux上で実行できるらしいということが分かりました。
バイナリファイルということはこの中は0と1しか書いていないのでしょうか。
それはそれとして、MacのOSはLinuxベースなのでしょうか。
試しにexec_meを実行してみます。
./exec_me
=>Permission denied
せっかく実行するための./exec_meコマンドを調べたのに、まず許可がない、と。
どうやら
```と入力すると許可が与えられるようです。
**chmod**は"change mode"の略。
うしろの3つの数字は順番に**所有者・所有グループ・その他**を表しており、数字の意味は
**4**(読み取りを許可) + **2**(書き込みを許可) + **1**(実行を許可) = **7**
ということで、全ての人?に対しそのファイルの実行まで許可してしまうコマンドということらしいです。
考えなしに777連打は危ないということですよね・・・
さて、ファイルの実行を許可してからもう一度実行してみます。
```./exec_me: cannot execute binary file
実行できませんでした。
調べてみるとMac OSはUNIXをベースにしたOSだとか。Linuxとは別物なんですね。
ということはLinuxベースのOSを使える環境を用意する必要があるようです。
そんなことよりLinuxとUNIXの違いが気になったので、少し脱線して調べることにしました。
##LinuxとUNIX
調べてみると、それぞれ以下のような特徴があることがわかりました。
###UNIX
- 米AT&T社開発
- 最も古いOS
- カリフォルニア大学バークレー校で実装されたBSD系のUNIXと合わせて現代も幅広く使われている
- Mac OS Xもその1つ
- 大型計算機やネットワークサーバーのOSとしてよく使用されている
###Linux
- フィンランドの大学生のリーナス・トーバルズ開発
- UNIXを参考にして作られた
- オープンソース
- 機能的に優れているらしい
- 動作が軽快・安定
- ネットワークなどの設定・管理が簡単
うーん。調べてはみたものの、実感できないので「へ〜」といった感じです。
色々あるOSもその源流を辿ればUNIXに行き着き、UNIXがインターネットの根幹を支えているらしいです。
すごいです、UNIX。
##再び、Q7
そんなすごいUNIXの流れを汲む私のMac OSですが、問題となっているELFファイルを開くことはできないようです。
どうしようもないのでLinux系のOSを実行できる環境を用意します。
###人生初、Ubuntuを使う
Linuxを調べている時に、UbuntuというLinuxの派生系みたいなもの(ディストリビューション)があることを見つけました。
無料で使えるLinux系のOSとのことでこれを使うことに決めました。
Ubuntuを動かす下地としての仮想環境を用意してから、Ubuntuをインストールしなければいけないとのことです。
仮想環境の用意からUbuntuのインストールまで、こちらのサイトを参考にさせていただきました。
結果、私のPCでも無事にUbuntuが使えました!
問題のELFファイルに関しては、同じコマンドで実行したらあっさりとflagが出てきました。
#CTFおもろい
今回初めてCTFというものにチャレンジしてみました。
簡単な換字式暗号とLinux上でのファイルの実行しかしていないですが。
期せずしてLinuxとUNIXの違いを調べる脱線も発生しましたが、そんなことを繰り返せばこれを解き終わる頃には結構な知識ついてるんじゃない?と期待してしまいます。
ガンガン進めます。