こわくない
CTF超入門
@kikuchan98
for 第12回セキュリティさくら
CTFとは
Capture The Flag: 旗とり合戦● 攻防戦方式● クイズ方式
CTFとは
Capture The Flag: 旗とり合戦● 攻防戦方式 (今日は割愛…)
● クイズ方式 (入門にオススメ!)
サーバやプログラム、ファイルなどから、フラグという文字列を機密情報になぞらえて奪取する遊び
CTFとは
●情報通信技術を用いた
「知恵の輪」
(by @9GHzさん)(ごめん、当日、間違えてました…)
問題ジャンル
一般的には● Binary (リバースエンジニアリングなど)
● Exploits (シェルコードなど)
● Web● Forensics● Network
など
CTFのすゝめ
何が身につくか:● 情報通信技術(ICT)に関する幅広い技術・知識
● 高度なセキュリティ技術・知識● 問題解決能力 (デバッグ力)
出題範囲が広い
● 暗号理論● 符号理論● 信号処理● 画像処理● 通信技術
出題範囲が広い
● 組み込み技術● Web技術● 公開鍵基盤(PKI)● プログラミング言語● データベース
出題範囲が広い
● オペレーティングシステム● ファイルシステム● API (POSIX, Win32API)● ファイルフォーマット● 符号化
出題範囲が広い
● 脆弱性,バグ● Exploits (Bin術)● 情報の秘匿● ログ解析● ツール● 雑学
だから CTF をやろう
CTFを通じて、広範囲の高い技術と知識を手に入れることができる● ノウハウの塊● 情報の高速道路に乗れる
で、何?
この問題は…● 重要な情報が欠落している
で、何?
この問題は…● 重要な情報が欠落している● そのままでは読めない
で、何?
この問題は…● 重要な情報が欠落している● そのままでは読めない● 知識があれば復元可能
実は
この問題も…● 重要な情報が欠落している● そのままでは読めない● 知識があれば復元可能
仕様
http://en.wikipedia.org/wiki/QR_code
仕様
http://en.wikipedia.org/wiki/QR_code
詳しい手順は…
吉村くんの write-uphttp://eleclog.quitsq.com/2014/01/seccon-ctf-2013-online-forensics-400.html
または
「SECCON 2013 qr」で検索
問題3 (暗号)
●次の暗号文を解読しなさい
Uryyb, jrypbzr gb Frphevgl FNXHEN.Jr ubcr lbh'ir rawblrq gur pbasrerapr.
暗号とは
● 解読方法を知らない人には解読できない
●意味の無い情報に見える
問題3 (暗号)
●次の暗号文を解読しなさい
Uryyb, jrypbzr gb Frphevgl FNXHEN.Jr ubcr lbh'ir rawblrq gur pbasrerapr.
問題3 (暗号)
●次の暗号文を解読しなさい
Uryyb, jrypbzr gb Frphevgl FNXHEN.Jr ubcr lbh'ir rawblrq gur pbasrerapr.
問題3 (暗号)
●次の暗号文を解読しなさい
Uryyb, jrypbzr gb Frphevgl FNXHEN.Jr ubcr lbh'ir rawblrq gur pbasrerapr.
スペース、記号の位置はそのまま?⇒ アルファベットだけが対象?
問題3 (暗号)
●次の暗号文を解読しなさい
Uryyb, jrypbzr gb Frphevgl FNXHEN.Jr ubcr lbh'ir rawblrq gur pbasrerapr.
問題3 (暗号)
●次の暗号文を解読しなさい
Uryyb, jrypbzr gb Frphevgl FNXHEN.Jr ubcr lbh'ir rawblrq gur pbasrerapr.
考える
●記号・スペースがそのまま● 文章そのままの可能性● まずは、換字式暗号を仮定
● 大文字で始まる● とりあえず、英語を仮定
考える
●r が多い● r ⇒ e を仮定する
●‘ir から ’ve を予想● i ⇒ v を仮定● r ⇒ e の仮定と矛盾しない
問題3 (暗号)
● 当てはめる
Uryyb, jrypbzr gb Frphevgl FNXHEN.Jr ubcr lbh'ir rawblrq gur pbasrerapr.
問題3 (暗号)
● 当てはめる
Ueyyb, jeypbze gb Fephevgl FNXHEN.Je ubce lbh've eawbleq gue pbaseeeape.
考える
●gur から the を予想● g ⇒ t, u ⇒ h の仮定● r ⇒ e の仮定と矛盾しない
●gb から to を予想● b ⇒ o の仮定● g ⇒ t の仮定と矛盾しない
考える
● ここまでの対応表● r ⇒ e● i ⇒ v● g ⇒ t● u ⇒ h● b ⇒ o
問題3 (暗号)
● 当てはめる
Heyyo, jeypoze to Fephevtl FNXHEN.Je hoce loh've eawoleq the poaseeeape.
別の角度からも考える
● ASCIIコード(16進数)で考える● 0x72 ⇒ 0x65● 0x69 ⇒ 0x76● 0x67 ⇒ 0x74● 0x75 ⇒ 0x68● 0x62 ⇒ 0x6f
別の角度からも考える
●引いてみる● 0x72 - 0x65 = 0x0d● 0x69 - 0x76 = 0x0d (0xf3)● 0x67 - 0x74 = 0x0d (0xf3)● 0x75 - 0x68 = 0x0d● 0x62 - 0x6f = 0x0d (0xf3)
問題3 (暗号)
● 当てはめる
Heyyo, jeypoze to Fephevtl FNXHEN.Je hoce loh've eawoleq the poaseeeape.
問題3 (暗号)
● 当てはめる
Hello, welcome to Fephevtl FNXHEN.Je hoce loh've eawoleq the poaseeeape.
問題3 (暗号)
● 当てはめる
Hello, welcome to Security SAKURA.Je hoce loh've eawoleq the poaseeeape.
問題3 (暗号)
● 当てはめる
Hello, welcome to Security SAKURA.We hope you'veeawoleq the poaseeeape.
問題3 (暗号)
● 当てはめる
Hello, welcome to Security SAKURA.We hope you'veenjoyed the conference.
問題3 (暗号)
答え●単換字式暗号● アルファベットが、13文字分ずれている
●別名 ROT13
問題3 (暗号)
http://en.wikipedia.org/wiki/ROT13
問題3 (暗号)
別解●見た瞬間、何故か読める●勘で解く
「どうせROT13じゃねぇの?」● 当てずっぽうで色々な古典暗号を試す
問題3 (暗号)
別解● "Uryyb" でググる!
ステガノグラフィとは
● 解読方法を知らない人には解読できない
●別の情報に見える
問題5 (ステガノ)
全部奇数
例)R: 209G: 173B: 151
問題5 (ステガノ)
この辺だけ偶数
例)R: 212G: 140B: 70
プログラム#include <stdio.h>#include <stdlib.h>#include <string.h>
main(){ char buf[1024]; int ch;
fputs(fgets(buf, sizeof(buf), stdin), stdout); fputs(fgets(buf, sizeof(buf), stdin), stdout); fputs(fgets(buf, sizeof(buf), stdin), stdout);
while ((ch = getchar()) != EOF) { putchar((ch & 1) ? ch / 2 : 255); }}
プログラム#include <stdio.h>#include <stdlib.h>#include <string.h>
main(){ char buf[1024]; int ch;
fputs(fgets(buf, sizeof(buf), stdin), stdout); fputs(fgets(buf, sizeof(buf), stdin), stdout); fputs(fgets(buf, sizeof(buf), stdin), stdout);
while ((ch = getchar()) != EOF) { putchar((ch & 1) ? ch / 2 : 255); }}
プログラム#include <stdio.h>#include <stdlib.h>#include <string.h>
main(){ char buf[1024]; int ch;
fputs(fgets(buf, sizeof(buf), stdin), stdout); fputs(fgets(buf, sizeof(buf), stdin), stdout); fputs(fgets(buf, sizeof(buf), stdin), stdout);
while ((ch = getchar()) != EOF) { putchar((ch & 1) ? ch / 2 : 255); }}
奇数のときは、明るさ1/2偶数のときは、白
実行% pngtopnm pizza.png | ./a.out \| pnmquant 256 | ppmtosixel
実行% pngtopnm pizza.png | ./a.out \| pnmquant 256 | ppmtosixel
まとめ
● CTFはICTを活用した知恵の輪● 技術力の向上●腕試し● セキュリティ意識の向上
● PC1台で簡単に遊べる● こわくない
Gunax lbh sbe yvfgravat!
Thnax loh soe yvfgeavat!
Thnnx loh soe yvfgenvnt!
Thank you for listening!
あとがき(追記)
● CTFの出題範囲っぽいものを書き出してみてたけど、本当に多すぎたのでボツ。
次ページ以降に載せてるので、キーワード集とかに使ってみてね。
分類が前のページと違ってるけどキニシナイ。
● 実在のCTFの紹介をするの忘れてた…。
常設では ksnctf や akictf とか。
オフラインだと ctf4b や SECCON といった活動があるよ。
暗号理論
●古典暗号●換字式暗号●転置式暗号
●現代暗号●共通鍵暗号● 公開鍵暗号
暗号理論
● 暗号解読, 攻撃法● 暗号文単独攻撃●既知平文攻撃● サイドチャネル攻撃● バースデー攻撃
符号理論
●圧縮, 伸長● ハフマン符号● LZ法
●誤り検出●チェックサム, CRC●パリティ検査● ハッシュ関数 (MD5, sha1 など)
符号理論
●誤り訂正● リードソロモン, BCH
●疑似乱数●線形合同法 (rand, random)● Mersenne Twister
● エンコード, デコード● Base64, uuencode, BinHex
信号処理
● フーリエ変換●変調, 復調
● AM, FM● PSK● PWM
● フィルター● LPF, HPF
画像処理
● 2値化● エッジ検出● 画像認識
● 文字認識●図形認識●顔認識
通信技術
●無線技術●ネットワーク (プロトコル)
● TCP/IP● HTTP, HTTPS● FTP
組み込み系技術
●電子回路● トランジスタ, LED
● 論理回路● 組み合わせ回路●順序回路
● FPGA● Verilog, VHDL
Web技術
● HTML, CSS, JavaScript● Cookie● HTTP
● Headers (Host, Cookie)● Methods (GET, POST)● Status codes (200, 404, 401)
公開鍵基盤(PKI)
● 暗号スイート●認証局(CA)●証明書, 検証手段● SSL, TLS
プログラミング言語
● C, C++● Python● JavaScript● アセンブラ
● x86, x86_64● arm● sh3, sh4
オペレーティングシステム
UNIX系OS, WindowsなどのOS固有な部分●操作方法, コマンド●特殊なファイルの場所● 文化● ハマりどころ
API
● POSIX● Win32 API● socket
ファイルシステム
● FAT, FAT32, VFAT● FFS● Ext2fs● NTFS● ZFS
ファイルフォーマット
● JPEG, PNG, GIF, BMP● ZIP, LZH, 7z, CAB● EXE, ELF, a.out● WAV● AVI, MP4
データベース
● SQLite● MySQL● PostgreSQL● Oracle● MongoDB
雑学
●モールス信号, 手旗信号●難解言語●パンチカード● 文字コード (闇)● バーコード, 2次元バーコード
各種ツール
● IDA, gdb, binutils● デコンパイラ● Metasploit● tcpdump, wireshark● nc, wget, curl
脆弱性, バグ
● メモリ破壊●パーミッション不備● 入出力の検証, 無害化漏れ●設定不備●設計不備
脆弱性の攻撃手法
●既知のexploits● ディレクトリトラバーサル● バッファオーバーフロー, ROP● Code injection
● SQL injection, Command injection● XSS, CSRF●中間者攻撃(MITM)
情報の秘匿
● 暗号化●難読化, アンパック● ステガノグラフィ
痕跡の情報
● デバッグ情報● ログファイル●ヒストリーファイル● タイムライン解析