アイジア

CTF, 情報セキュリティの学んだことメモ

ファイル実行時のセキュリティ機構まとめ

どれがどれだかよくわからなくなるのでメモ。

①ASLR

実行時のスタック・ヒープ・共有ライブラリなどのアドレスをランダム化します。アドレスが予測できなくなるので攻撃は難しくなります。これを無効にするには「sudo sysctl -w kernel.randomize_va_space=0」を実行します。

DEP

実行する必要のない(スタックやヒープ領域やbss領域のデータ)の実行を禁止します。データ領域にシェルコードなんかが埋め込まれていて、参照できたとしても実行できずにエラーになります。 しかしreturn-to-libc攻撃などは防止できません。gccの場合「gcc -z execstack」を付与することでDEPが無効になります。

③PIE(位置独立コード)

メモリ内のどこに置かれても実行できるようになります。

④RELRO(RELocation ReadOnly)

メモリ上の領域に読み込み専用の属性をつけます。「Full RELRO」となっている場合、GOT overwriteができません。

SSP(canary)

canaryと呼ばれるランダムなデータをスタックに挿入することで、関数実行時にスタックバッファオーバーフローを検知できます。gccの場合「gcc -fno-stack-protector」を付与することでSSPが無効になります。

⑤ascii-armor

コードを0x00から始まるアドレスに置くことでreturn-to-libcやformat string attackをしづらくなります。