2004-06-01から1ヶ月間の記事一覧

FC2のexec-shield (2)

スタック上に置かれたコードの実行不許可についてはきちんと効いているのだろうか。こちらも確認してみました。背景となる技術については Shudo's Note さんの5/17の記事などを参照していただくとして、結論のみ。デフォルトでばっちり効いています!。こち…

FC2のexec-shield (1)

Fedora Core 2 のkernelには、exec-shield という、セキュリティ強化のパッチが組み込まれています。インストール直後の状態で、それがちゃんと機能しているか調べてみました。 まずその(1)、アドレススペースのrandomize機能です。これはデフォルトでばっち…

strict aliasing

C++

GCC-3.5には -Wstrict-aliasing=2 というオプションが指定できる模様。これで、以前に書いた-fstrict-aliasingにまつわる不具合をコンパイル時に検出できるようになるかもしれない。

Microsoft Threat Modeling Tool

適宜覚書さんより 本日付けで Threat Modeling Tool の新版、v1.0.1637.18511 がリリースされた。Windows用のバイナリが無料ダウンロード可能。 Threat Modeling とは、Microsoftがセキュリティ欠陥のないソフトウェアを作成するために、ソフトウェアの設計…

CMMI翻訳版

今年の4月にIPAによって公開された、CMMI-SE/SW/IPPD/SS 公式日本語翻訳版 Version 1.1 をダウンロードして印刷した。明日からの通勤のお供にするのだ。 以前にITProの記事で見て以来楽しみにしていたもので、やっと読む時間が取れた。 いや〜最近のIPAの活…

晩御飯 (銀座・Nataraj)

晩御飯は菜食インド料理店のNataraj 銀座店で。僕のおすすめはパニール・マカンワラとサイ・バジ。二人で9600円なり。

DVD-Rドライブ購入

仕事帰りに秋葉原に寄ってDVD-Rドライブ購入。LG電子のGSA-4120Bにしてみた。リテール品で税込12880円。太陽誘電の8倍速DVD-Rメディアを買い込んだ後、秋葉原でDさんと合流し、銀座へ移動して晩御飯。 帰宅してから早速DVDドライブを装着。装着したマシンのO…

PointGuard

YLUG Kernel読書会のバッファオーバフロー防止技術の回なんかでも話題に上がっていた、PointGuardって結局リリースされないんでしょうか。一番面白そうだと思ったヤツなんだけどなぁ〜。

off-by-one error でreturn addressが上書きされるまで

Phrack Magazine (http://phrack.org/phrack/55/P55-08) の off-by-one exploit を読みました。要約しておきます。 void func(const char* sm) { char buffer[256]; for(int i=0; iこのような、1バイトだけオーバーフローするbugのあるコードを書いてしまい…

SAFECode Project

米澤研 SurveyBBSによると、SAFECode Projectというのがあるらしい。 Control-Cの話。いわゆる安全なC。メモリ安全性を100%静的に保証する。プログラムにセマンティクス制限を課す。動的メモリ確保とかポインタや配列の使い方に関して。文脈は組み込み。Cプ…

SELinux

とあるきっかけで参加させて頂いた勉強会+オフ会で、SELinuxの方とお話する機会に恵まれた。私なんぞが言うまでもないけれども、これからのOSの方向性はこれでキマリだな!と感じた。すぐにでも使い始めたい魅力に溢れている。 ネックは、誰もが思うことだろ…

晩御飯

駒澤大学のピキヌーまででかけてカレー。相方はカントリー、私はチキン。初めて頼んだプーケットビールは、味が薄めでやや物足りなかった。 帰宅してからベルギービール Poperings Hommel bier で物足りなさを解消。これは先週の地ビールフェア@恵比寿で買っ…

Linux Memory Overcommit

かなり昔ですが、或日さんのSolaris8におけるmemory over commitの話題に触発され、Linuxの場合について調べた事があります。正しさは保証しませんが当時のメモを貼っておきます。 memory overcommit? メモリ資源の非常に限られた環境でLinuxを使用している…

Threat Modeling, The Shellcoder's handbook ほか

セキュリティ関連書籍をいろいろ購入 Threat Modeling (Microsoft Professional) The Shellcoder's Handbook: Discovering and Exploiting Security Holes Exploiting Software: How to Break Code (Addison-Wesley Software Security) "Thraet Modeling" が…

UNIXの規格について

いままで漠然と、「UNIXの規格について調べるときにはSUSv3を見る」ことにしていましたが、それでOKなのかちょっと調べてみました。結論としては、ここ 今や ISO/IEC 9945:2002 IEEE Std 1003.1-2001 (POSIX) Single UNIX Specification Version 3 (SUSv3) …

Fedora Core2

SELinuxを使ってみたく、FC2を入れてみた。現在、マシンにはRedHat9がインストールされているが、そこに上書きする。 UDMA100の古めのHDDが壱発(hde)、SiI3112のSATAカードにもう弐発(hda,hdc)、合計参発のHDDがついている。hda,hdc は /dev/md0 (RAID1) と…

(続き) 2ちゃんねる、GCCスレより

ふーむ。-fcall-saved-XXX ってのは知らなかったな。「(calling conventionを)普通CPUメーカーが決める」という件についてはそうですね。x86についても「IA-32 インテル(R)アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル 上巻」の6章、「プロシ…

The history of calling conventions

MSの中の人のblogとして著名な、"The Old New Thing" の2004年1月の記事に、calling convention関係のものが5つある。あとで必ず読まねば。

Threadのスタック

Linuxでpthread_create()をすると、生成されたスレッドにはそれ固有のスタック領域が割り当てられる。具体的にどのように割り当てられるのかを調査。 stack smash 対策を考える1場合、スタックの割り付け方を知っていると多少有益かもしれないので[securiy]…

マルチスレッドと共有変数 (続き) -- 補足 (3)

C++

シグナルハンドラからアクセスするグローバル変数は、ちゃんと volatile sig_atomic_t 型にしないとダメですよ!(追記 2006/1/20) またも書き忘れ。longjmp, _longjmp, siglongjmpで戻ってきた後に触りたい自動変数もvolatileつけないとだめですYO!

マルチスレッドと共有変数 (続き) -- 補足 (2)

C++

Singletonを実装する時などで、いわゆる "double checked locking" を使うなんて場合は、memory sync な関数を使わない部分が出てくるでしょうから、volatile やら コンパイラ固有のメモリバリア手法やらをキッチリ使わないとダメですよ〜。多分。 参考: The…

マルチスレッドと共有変数 (続き) -- 補足 (1)

C++

SUSv3をひっぱりだすのが大げさという場合は、comp.programming.threads FAQ の、 Q.56: Why don't I need to declare shared variables VOLATILE? Q.118: Memory barriers for synchonization あたりを読んでもらうと良いです。特にQ.56ですね。 あと、以上…

マルチスレッドと共有変数 (続き) -- およびvolatile修飾の必要性

C++

複数のスレッドで変数を共有し、さらにその変数に対してread/writeの両方のオペレーションが行われるとき、その変数の操作は、上で書いたとおり、 read/writeともにmutexで保護するべき volatile修飾だけで済ませるのはNG mutexで保護するならvolatile修飾は…

マルチスレッドと共有変数 - volatile?なにそれ。

C++

複数のスレッドから共有する変数(典型的にはグローバル変数)を操作する際、どんな注意事項があるか?という話題です。プラットフォームはPOSIXを仮定します。pthreadのお話です。 まず、一口に「複数のスレッドで変数を共有」といっても、おおまかにいって次…

(続き) 仮想関数のインライン化

散々言われている事とは思うけども、仮想関数もインライン展開の対象に なる ので要注意です。 値オブジェクトのメソッドが呼ばれている場合は実行時に動的束縛する必要がないからインライン化できます。Foo::bar() が仮想関数として、 Foo f; f.bar(); はイ…

(続き) ctor/dtorに関する注意

コンストラクタ、デストラクタをコンパイラに自動生成させる場合、当然かもしれませんがそれらはインライン化されます。インライン化というか何も処理が発生しないというか。 しかしもちろん、 [foo.h] class Foo { public: Foo(); ~Foo(); }; [foo.cpp] Foo…

関数のインライン化基準

C++/C99言語では、"inline"キーワードが正式にサポートされており、コンパイラに対して関数を「インライン化してほしい」と要求することができます。しかし、良く知られていることですがこれはあくまでヒントなので、コンパイラの気分次第でインライン化が起…

valgrind

C++

とりあえず、次のオプションで落ち着いている。 valgrind -v --num-callers=100 --leak-check=yes \ --leak-resolution=high --error-limit=no \ --workaround-gcc296-bugs=yes 最後のは太古のg++使用時のみ。誰かARMやMIPSに移植してくれないかなぁ・・。

type punning と strict aliasing

/.JのGCC-3.4リリースの話題を追っていたら、GCC3では-O2で-fstrict-aliasingが有効だから注意せよというポスト(http://slashdot.jp/comments.pl?sid=175355&cid=537217)があった。strict aliasing については、Radium Software Developmentさんが詳しい。こ…

コンパイル時に文字列リテラルに指定のアルゴリズムによる計算を施し、整数に変換するには?

頭の体操です。 int main(void) { return CompileTimeHash("abcdefghijklmnopqrstu"); }が、 mov $12345, %eax のような形にコンパイルされればOKとします(最適化をかけて即値になればOK)。テンプレートの再帰を使うことになると思いますが、再帰がunrollさ…