たくろぐ!

世界一のチラ裏

【Day2】俺はセキュリティエンジニアになるぞ、ジョジョー!!!!

敵を知る

www.nri-secure.co.jp

競技に含まれるトピック:
 ・Windowsシステム管理
 ・Linuxシステム管理
 ・パケット解析
 ・ネットワークモニタリング
 ・継続的モニタリング
 ・ログ分析
 ・暗号
 ・ステガノグラフィー

読んだ

ネット記事

www.jtp.co.jp

www.slideshare.net

www.nicovideo.jp

www.fenet.jp

書籍

暗号技術のすべて

50P(7%)まで

カエサル暗号、スキュタレー暗号、転置式暗号まで

セキュリティコンテストチャレンジブック

87P(34%)まで

バイナリ解析入門まで

覚えたこと

バイナリファイルの扱い方

fileコマンドを使って、どのようなファイルなのかの情報を取得する

使うコマンド第一位らしい。

その他よく使うもの

  • stringコマンド

  • hexdumpコマンド

  • objdumpコマンド

IDA ProのようなCUIが使えない場合とかに使う。

  • gdbコマンド

  • socatコマンド

  • BOF

たぶんpwnとかで使う。

シェルのっとり。

Format String Exploitの文脈でのFormat String Bugの略。

高速な関数実行が可能になる。

NASM
GAS
Intel構文(結果が左に入る)
AT&T構文

  • mov(右オペランドを左オペランドに移動(実質的にはコピー))

  • lea(アドレス計算後、ロード)
    Load Effective Addressの略。

  • add(足し算)

  • sub(引き算)
  • imul(掛け算)
  • idev(割り算)
  • jmp(call + ret)

ループなどに使う。ラベルを引数(右の値)にとる。

jmpは行ったっきり、callしてから飛んだ先でretするとjump元に戻れる。

無条件分岐というらしい。

逆の意味は条件分岐で、jz, jnzコマンドがある。

  • cmp

比較するコマンド

  • je(jne)

jump if equalの略。

ZEレジスタ、CD?レジスタを見るようにする?

  • 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(ライブラリトレーサ)

  • プロセスメモリエディタ

うさみみハリケーン

名前がかわいい。

やったこと

環境構築

github.com

メモ

画像自体にflagがあったりする場合もあるのでCUIの仮装環境ではなく、GUIにする。

ペネトレーションテスト用にKali LinuxGUI版を構築する。

その他、Python3とgccとかのCコンパイラ入れる?

今までUbuntu使ってたからKaliがDebian系でよかった。

github.com

読んでない

pwnの話なので時間あったらやる。

ptr-yudai.hatenablog.com

kanataさん

pwnで有名人らしい。