タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

gccとsecurityに関するhibomaのブックマーク (5)

  • 補足3: .dtors overwrite をちゃんとformat string bugでやってみるか (別名 -D_FORTIFY_SOURCE=2 のすすめ) - memologue

    これの続きです。 GOT overwrite でも .dtors overwrite でもなんでもいいんですけど、main関数で直接メモリを4バイト書き換えるのではなくて、ちゃんと(?) format string bug を悪用した書き換えを試してみます。リハビリです。format string bug の解説は、ここが秀逸だと思います(特に4章以降)。条件は前と同じで、 NXあり ASLRあり RELROなし PIEなし です。まず、次のような関数(vuln)を準備します。 static void vuln(const char* s) { printf(s); // <-- exploitable }で、この関数をまずは次のように呼んでみます。 vuln("0x%08x\n" "0x%08x\n" "0x%08x\n" "0x%08x\n" "0x%08x\n");printf関数に

    補足3: .dtors overwrite をちゃんとformat string bugでやってみるか (別名 -D_FORTIFY_SOURCE=2 のすすめ) - memologue
    hiboma
    hiboma 2010/01/10
    D_FORTIFY_SOURCE と .dtors overwrite と format string bug
  • 補足2: .dtors overwrite について - memologue

    これの続き。 前に書いたGOT overwriteとほぼ同じ手口なんですが、.dtorsセクションに登録されている(関数の)アドレスを書き換えて、お好きな関数を呼ぶという攻撃方法があります。.dtor overwrite とか呼ばれてます。この手口を、 NXあり ASLRあり RELROなし PIEなし という条件下で試してみます。 #include <stdio.h> #include <stdlib.h> __attribute__((destructor)) static void dtor_fn() { puts("good bye!"); } static void my_dtor_fn(void) { puts("HEHE"); } int main(int argc, char** argv) { if (argc > 1) { unsigned int* got_addr

    補足2: .dtors overwrite について - memologue
    hiboma
    hiboma 2010/01/10
    .dtors overwrite
  • 補足: ld -z relro でどこがreadonlyになるのか (とelfutilsについて) - memologue

    前に書いたrelro記事の補足です。ld -z relro すると (.got 以外は) どこがreadonlyになるのか、について。 これは、readelf -S でセクション一覧を表示して、/proc//maps の出力とセクションのアドレスを見比べる方法で知ることができますが、elfutilsを使えばもっと簡単です。elfutilsの説明は、http://people.redhat.com/drepper/ の左側、"ELF" のところをクリックしていただき、"elfutils" という記事を探して読んでもらえばわかりますが、要するにUlrich Drepperさんの手による、binutilsのreplacementですね。ELFに特化している分、出力がより親切だったり読みやすかったりします。Fedoraには標準で含まれています。見当たらなければ、 # yum install elf

    補足: ld -z relro でどこがreadonlyになるのか (とelfutilsについて) - memologue
  • ld -z relro で GOT overwrite attack から身を守る - memologue

    GOT overwrite? "GOT overwrite" という、(ここでは特にLinuxの)プログラムに対する攻撃方法があります。攻撃が成功すると、そのプロセスの権限での任意コード実行等、深刻な被害を受けます。最近のGNU ld(リンカ)のオプションを用いると、この攻撃から身を守ることができるそうですので、紹介します。 最初にまとめ (こまかいことはあとで) GOT overwrite から身を守るには、gccでプログラムをリンクするときに、 -Wl,-z,now,-z,relro をつけるだけです。起動時間が遅くなるというトレードオフがありますが、GOTがreadonlyになります。GOTがreadonlyなら、GOT overwrite attack を受けたときに、プロセスがSEGVしてくれますので、安全性が高まります。プロセスのメモリマップを確認すると、きちんと w が落ちて

    ld -z relro で GOT overwrite attack から身を守る - memologue
    hiboma
    hiboma 2010/01/10
    GOT overwrite attack
  • 結局どうすりゃいいのさ (攻撃されないCFLAGS/LDFLAGS) - memologue

    最近のエントリの総まとめ。適当なネットワークデーモンなどを手動でmakeする際におすすめのgccのオプション。ソフトウェアにbuffer overflowをはじめとするありがちな欠陥があった場合でも、攻撃者にプロセスを乗っ取られないよう、コンパイラやカーネルで精一杯防御するためのCFLAGSとLDFLAGS。とりあえずFedora5以降を想定しています。 # 2006/6現在で私が把握しているものです。どんどん変化(進化)しますのでご注意。特にFedoraは。。 # 自分でフォローしたい場合、Hardened Gentooのページや、Fedoraのここは役立つと思います 基 上記のように、「多少遅くなってもセキュアなバイナリ希望」という場合、もともとのCFLAGS/LDFLAGSに加えて、 CFLAGS=-fstack-protector-all -O2 -fno-strict-alia

    結局どうすりゃいいのさ (攻撃されないCFLAGS/LDFLAGS) - memologue
  • 1