敵を知る
競技に含まれるトピック: ・Windowsシステム管理 ・Linuxシステム管理 ・パケット解析 ・ネットワークモニタリング ・継続的モニタリング ・ログ分析 ・暗号 ・ステガノグラフィー
読んだ
ネット記事
www.slideshare.net
書籍
暗号技術のすべて
50P(7%)まで
カエサル暗号、スキュタレー暗号、転置式暗号まで
セキュリティコンテストチャレンジブック
87P(34%)まで
バイナリ解析入門まで
覚えたこと
バイナリファイルの扱い方
fileコマンドを使って、どのようなファイルなのかの情報を取得する
使うコマンド第一位らしい。
その他よく使うもの
stringコマンド
hexdumpコマンド
objdumpコマンド
IDA ProのようなCUIが使えない場合とかに使う。
たぶんpwnとかで使う。
シェルのっとり。
Format String Exploitの文脈でのFormat String Bugの略。
高速な関数実行が可能になる。
NASM
GAS
Intel構文(結果が左に入る)
AT&T構文
lea(アドレス計算後、ロード)
Load Effective Addressの略。add(足し算)
- sub(引き算)
- imul(掛け算)
- idev(割り算)
- jmp(call + ret)
ループなどに使う。ラベルを引数(右の値)にとる。
jmpは行ったっきり、callしてから飛んだ先でretするとjump元に戻れる。
無条件分岐というらしい。
逆の意味は条件分岐で、jz, jnzコマンドがある。
- cmp
比較するコマンド
- je(jne)
jump if equalの略。
jl(jump if less)
jg(jump if greater)
jge(jump if greater or equal)
push, call
関数(命令)を実行するときに合わせて使う。
pushする際はスタックを意識して後ろから入れていく。
- rax
関数の戻り値として使うレジスタ。32bitの場合はeax。
レジスタにはほかにrbx, rcx, rdx(ここまで64bit), eax(raxの下位32bit), ax(raxの下位16bit), ah(axの上位8bit), al(axの下位8bit), rdi(関数の第一引数), rip(次に実行する命令のアドレス), rbp(スタックのベースポインタ), rsp(スタックのトップポインタ)がある。
覚えるポイントとしては
- 64bit
r * x
- 32bit
e * x
- 16bit
* x
- 上位8bit
* l
- 下位8bit
* h
その他、ebp(アドレスのベースポインタ), esp(アドレスのスタックポインタ), EFLAGS, ...
浮動少数点用のレジスタに128bitもある。
- コンパイラ言語
Cとか。
以下のようなソースコードをコンパイルするとオブジェクトコードができる。
オブジェクトコードはCPUが実際に読むコード。
オブジェクトコードを逆アセンブルすると、アセンブリ言語になって人間が少しは読める言語になる。
- IDA Pro
逆アセンブルするためのツールで有償。
IDA FreeはIDA Proの古いバージョンでx86アーキとかならこれで問題ない。
IDA Demoは評価版という位置付けで30分で落ちる。Freeとの違いは各種OSのバイナリファイルに対応していること。
- readif
ELFファイルの情報を表示するためのLinuxコマンド。
- 解凍コマンド
unzip, tar zxvf ファイル名, gzip -d ファイル名(gunzip ファイル名), xz -d ファイル名
- トレーサ(Linuxコマンド)
strace(システムトレーサ), ltrace(ライブラリトレーサ)
- プロセスメモリエディタ
うさみみハリケーン
名前がかわいい。
やったこと
環境構築
メモ
画像自体にflagがあったりする場合もあるのでCUIの仮装環境ではなく、GUIにする。
ペネトレーションテスト用にKali LinuxのGUI版を構築する。
今までUbuntu使ってたからKaliがDebian系でよかった。
読んでない
pwnの話なので時間あったらやる。
kanataさん
pwnで有名人らしい。