例えば関数ポインタのようにBuffer Overflowに対して影響を受けやすい何らかデータが動的確保された領域にあるならば、Heap-based Buffer OverflowはStack-based Buffer Overflowと同じくらい攻撃されやすいと考えられる。しかし、メモリレイアウトはアプリケーションごとに異なるため、リモートからの攻撃者にはそれが本当に攻撃可能かどうかが判らない。そのためHeap-based Buffer Overflowへの攻撃はそれほど実践的でないとも言えるが, 大変興味深いものなので焦点を当ててみよう。任意のコード実行のためにプログラムカウンタを得るというものは攻撃者の目的のひとつであり、攻撃者はそれを"write-what-where primitive"(任意の箇所への任意のデータを書き込み)により実現することがある。Unlink Attackという直接的な"write-what-where primitive"を実現する古典的な攻撃手法があったが、現在では緩和策が施されたことで使えなくなっている。そのため、Exploit書きはmalloc()の戻り値をほぼ任意のアドレスに固定させることで間接的な"write-what-where primitive"を実現する手法を考えた。間接的な"write-what-where primitive"を有するHeap ExploitationテクニックにはMalloc Maleficarum(Phantasmal Phantasmagoria氏による攻撃手法とその論文)などがある。そのうちのいくつかは既に修正されているが, 未だに有効なものもある。今回は最新のGLIBCでも有効であり, 間接的"write-what-where primitive"を有する新たな攻撃手法として"House of Einherjar"を提案したいと思う。
--- 松隈 大樹Hiroki Matsukuma
サイバーディフェンス研究所の新米分析官であり、CTFチームTokyoWesternsのメンバーでもある。学生時代は国立東京工業高等専門学校というところで電子工学を学び, 趣味が高じてCTFに打ち込んでいたりした。アプリケーションをpwnする瞬間やカッコイイ音楽を聴いてるときが一番キテおり、おいしいものをひとと食べることも好む。最近はmalloc()の実装や組み込みシステムに対する攻撃など、やはりpwnに関することに興味をもっている.