ファイル実行時のセキュリティ機構まとめ
どれがどれだかよくわからなくなるのでメモ。
①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をしづらくなります。