ctf超入門 (for 第12回セキュリティさくら)

117
こわくない CTF入門 @kikuchan98 for 第12回セキュリティさくら

Upload: kikuchan98

Post on 14-Jul-2015

3.699 views

Category:

Technology


5 download

TRANSCRIPT

こわくない

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を通じて、広範囲の高い技術と知識を手に入れることができる● ノウハウの塊● 情報の高速道路に乗れる

というわけで

やってみよう

問題1

問題1

問題1

問題1

問題1

問題1

問題1

問題1

問題1

解けた?

で、何?

この問題は…

で、何?

この問題は…● 重要な情報が欠落している

で、何?

この問題は…● 重要な情報が欠落している● そのままでは読めない

で、何?

この問題は…● 重要な情報が欠落している● そのままでは読めない● 知識があれば復元可能

おk?

じゃあこれは?

問題2

実は

この問題も…● 重要な情報が欠落している● そのままでは読めない● 知識があれば復元可能

復元可能!

どうするか?

仕様

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" でググる!

問題3 (暗号)

問題3 (暗号)

じゃあこれは?

問題4 (暗号)

問題4 (暗号)

一方…

ステガノグラフィとは

● 解読方法を知らない人には解読できない

●別の情報に見える

問題5 (ステガノ)

問題5 (ステガノ)

問題5 (ステガノ)

問題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)

情報の秘匿

● 暗号化●難読化, アンパック● ステガノグラフィ

痕跡の情報

● デバッグ情報● ログファイル●ヒストリーファイル● タイムライン解析