2006-01-01から1年間の記事一覧
b2con 2006の発表資料を置きました。 "Hello, binary world!" (PDF, アニメなし) ご来場頂いた皆様、主催者の皆様、どうもありがとうございました。わたし自身もとても楽しめました。IRCの様子が会場でも見られたのはよかったと思います*1。他のスピーカーの…
先日書いた、適当にELFなバイナリを吐くプログラムに関して、ある人に「スタックを使うためにはプログラムヘッダに何か書かないといけないのか?と聞かれました」。えーっと、不要です*1。カーネルが勝手に確保してくれます。確保量というか最大サイズは、se…
計算機プログラムの構造と解釈 の問題を、Schemeで一問一問解いてゆくのが流行りな2006年でした(師走気分)。このSICPをHaskellやCleanで解いている方はいますが、意外にもC++で解いている人が見当たらないので(注: あたりまえ)、C++のテンプレートはさっ…
こちらの記事(Binary HacksのHack #25の軽い補足)は、「インラインアセンブラをちょっとだけ使って、gccに小さなhello worldバイナリを出力させる」というお話でした。一方、小さいHello Worldが欲しかったら、gccにELF実行バイナリを出力させるのではなく、…
Binary Hacks に、「インラインアセンブラをちょっとだけ使って、gccに小さなhello worldバイナリを出力させる」というネタを書きました(Hack #25: glibcを使わないでHello Worldを書く)。その補足という訳でもないのですが、先日shinh先生と焼肉など食べて…
これは便利。bashでも使えます。 % echo $((0x12)) 18 % $((0x12)) zsh: command not found: 18Binary Hacksの校正フェストの際に教えてもらいました。知らなかった〜。さっそく愛用しています。
shinhさんの「ふとイヤなコードを思いつきました」にインスパイヤされてみました。...といいたいところなのですがあまりよいものはできず。 // なかなかポータブルなハローワールド main() { char _[0x40000000]; char __[0x40000000]; char ___[0x40000000]…
諸事情あって、ふと前に読んだドキュメントに書いてあった細かいことが気になった。いやいつも細かいけど。 const char* const p = "ABC";より const char q[] = "ABC";のほうがいいのか?的な話。後者の方が良いらしいので、確認するととともに、すぐになん…
独り言です。(慣れないkernelの)コードをざーっと調べて、あまりまじめには検証しないで書いてます。FC5限定なので細かい記述の賞味期間はあと30日くらいでしょうか。 ASLR 私の使っているFC5のkernel/glibcには、一般にASLR(address space layout randomiza…
最初のいちばんオーソドックスな奴、一応解説としてbacktraceを貼っておきます。 % gdb ./a.out (gdb) b x if main>0 Breakpoint 1 at 0x80483ba: file iyara.c, line 1. (gdb) r Breakpoint 1, x () at iyara.c:1 1 main;__attribute((constructor,destruct…
shinhさんの「ふとイヤなコードを思いつきました」にインスパイヤされてみました。 % cat iyana.c #include <stdio.h> #include <stdlib.h> int main; __attribute__((constructor, destructor)) static void x() { if (main) puts("world!"); else exit(main = puts("hello"));</stdlib.h></stdio.h>…
小ネタ。MSの中の人のblogをなんとなく眺めていたら、 Address Space Layout Randomization in Windows Vista - Function Pointer Obfuscation http://blogs.msdn.com/michael_howard/archive/2006/05/26/608315.aspx Protecting against Pointer Subterfuge…
(あとで書く..と思う) Exec-Shield時代のスタンダードな攻撃だけど、日本語の資料が見当たらない(ので書く) NXでもシェル起動は簡単 Phrack Magazineの記事はおもしろい バイナリ中の任意の addl; ret; を "間借り" して、複数のcallをchainする話 都合の…
最近のエントリの総まとめ。適当なネットワークデーモンなどを手動でmakeする際におすすめのgccのオプション。ソフトウェアにbuffer overflowをはじめとするありがちな欠陥があった場合でも、攻撃者にプロセスを乗っ取られないよう、コンパイラやカーネルで…
これの続きです。さて、 NXあり (exec-shield) ASLRあり (exec-shield-randomize) SSPあり PIEあり RELROなし FORTIFY_SOURCEなし という条件で、 format string bug を利用して、PIEなバイナリが貼り付けられたアドレスを知り format string bug を利用して…
GCCは4.1以降からデフォルトでSSP(a.k.a. ProPolice)というスタック保護の仕組みが搭載されています*1。この仕組みを使うと、スタック上に確保した配列のオーバーフローを実行時に検出できます。 % gcc -fstack-protector-all ssp_test.c % ./a.out *** stac…
書き終わる前に休日が終わってしまいました。あとで埋めます。 昨日に続き、リハビリです。
これの続きです。 GOT overwrite でも .dtors overwrite でもなんでもいいんですけど、main関数で直接メモリを4バイト書き換えるのではなくて、ちゃんと(?) format string bug を悪用した書き換えを試してみます。リハビリです。format string bug の解説は…
これの続き。 前に書いたGOT overwriteとほぼ同じ手口なんですが、.dtorsセクションに登録されている(関数の)アドレスを書き換えて、お好きな関数を呼ぶという攻撃方法があります。.dtor overwrite とか呼ばれてます。この手口を、 NXあり ASLRあり RELRO…
前に書いたrelro記事の補足です。ld -z relro すると (.got 以外は) どこがreadonlyになるのか、について。 これは、readelf -S でセクション一覧を表示して、/proc//maps の出力とセクションのアドレスを見比べる方法で知ることができますが、elfutilsを使…
プログラムを書くのと一緒で、攻撃方法についても定期的に手を動かさないと忘れるので、休日使ってリハビリしてまーす(趣味)。
mozdev.org に、The Single UNIX Specification, Version 3*1 を検索するためのプラグインがありました。Windowsはもちろん、FC5(x86_64)のfirefoxでも無事動きました。 (デフォルトで)firefoxのウィンドウの右上にある検索窓からSUSv3全体を検索できるって…
GOT overwrite? "GOT overwrite" という、(ここでは特にLinuxの)プログラムに対する攻撃方法があります。攻撃が成功すると、そのプロセスの権限での任意コード実行等、深刻な被害を受けます。最近のGNU ld(リンカ)のオプションを用いると、この攻撃から身を…
書くのが2日遅れになってしまいましたが、ふつケル写経会、第4回目も参加。3章の練習問題から4章の終わりまで。RubyCocoaの藤本さんとペアで写本しました(ありがとうございました、理解が進みました)。この進捗具合だと、結構早い時期に読み終わってしまう…
IPAからテクニカルエンジニア(情報セキュリティ)の合格証書が送られてきました。Webで成績を調べたら、745-625-715点とのこと。午後Iがギリギリだけど(想定外...)、他は上位5%以内でした。2001年の情報セキュリティアドミニストレータ試験も新設後初回試験…
(こちらの記事の続き)
(こちらの記事の続き、おまけです) 「分岐しないソート」の、VC++向けのコードをGCC+Linux向けに修正してみました。
分岐しない4要素のソート、GCC/Linux/x86,x86_64,arm版 こちらに、「分岐しないソート」という記事があります。短いので読んでいただくほうがよいと思いますが、文章&アセンブリ言語のコードの内容を要約すると、 4要素のソートは、頑張れば5回の比較と5回…
小ネタ2。 GCCで複数行からなるインラインアセンブラを書くとき、 __asm__ ("movl %0,r9\n\t" "movl %1,r10\n\t" "call _foo" :: "g" (from), "g" (to) : "r9", "r10");のように \n\t 区切りで書くひとと、\n\t のかわりにセミコロン区切りで書く*1ひとがい…
昨日は はてな を見学させていただき、今日はふつける写経会に参加。両方とも刺激的でした。id:mizuno_takaaki さん、あまの id:beakmark さん、どうもありがとうございました。