LinuxとWindowsのシステムコールを可視化すると… 33
ストーリー by mhatta
そもそもIIS==Apache単体じゃないしな 部門より
そもそもIIS==Apache単体じゃないしな 部門より
joperkings 曰く、
popxpopに 【図解】 LinuxサーバーとWindowsサーバーの違いというエントリがある。 これだけだと何のことか分からないのだが、 元記事のZDNet.comでのRichard Stiennon氏によるブログエントリをさくっと 見ると、一個の静的なhtmlを読み込んだ時のLinux+ApacheとIISでのシステムコールの呼び出しを視覚化していることが分かる。 で、これで何が言いたいのかというと、元記事のタイトル「Why Windows is less secure than Linux」からもバレバレだが、ようはWindowsのほうが 複雑なシステムコールのおかげでbuffer overflow attackに晒されやすい云々ということを言いたいようだ。
ICのblogや18 til i dieあたりを 読めば、この導かれる結論のようなものが意味がないものと分かるのだが、18 til i dieで書かれているように FUDにはもってこいのやりかたではあるだろう。ちなみにRichard Stiennon氏はセキュリティベンダーのFortinet社のChief Marketing Officerで、 その前はずっとガートナー等の調査会社でセキュリティ畑を歩んできた方のようだ。余計なことを言わなければ、 ちょっとこの視覚化はおもしろいのだけどな。
構造の視覚化ツール (スコア:5, 参考になる)
GraphvizでググればGraphvizによるファンクション・コールの視覚化 [ibm.com]とかコード構造を視覚化せよ!!Graphviz & Doxygen [infoseek.co.jp]などといったページがひっかかるので、ぜひこういうのを参考にしてお手元のコード構造などを視覚化してみてはいかがでしょうか。
余談: Ajax/Graphviz [ashitani.jp]なんていうのもあります。
MTA 図示化 (スコア:5, おもしろおかしい)
クライアント -> tcpserver -> qmail-smtpd -> qmail-queue -> qmail-send -> qmail-rspawn -> qmail-remote -> 送信先サーバ
クライアント -> smtpd -> cleanup -> qmgr -> smtp -> 送信先サーバ
qmail や postfix に比べて sendmail の方がシンプルで安全です。間違いない。
Re:MTA 図示化 (スコア:0)
誰か、この前のMS Firefoxのサイトみたいに
sendmailはシンプルで安全ってコラム立ち上げてくれないかなぁ
# apache≒sendmail 、qmail≒IIS djb怒りそうだwww
Re:MTA 図示化 (スコア:1)
そこで一念発起して1.04なり2.0なり作ってください。
Re:MTA 図示化 (スコア:1)
Re:MTA 図示化 (スコア:1)
そのときはぜひ GPL か BSD か MIT か、そういうライセンスに変更してください。
# ライセンスを変更しただけの 1.03 でもいいです;-)
Re:MTA 図示化 (スコア:0)
あの絵だと... (スコア:2, 興味深い)
# あの絵だけだと、結局どれも議論できないという点では一緒か;-p
OOPL か素のCかの違いなんじゃね〜の? (スコア:2, すばらしい洞察)
この差はIISとApacheの差であって、Windows/Linuxの差ではないし。
いずれにせよ、文字ぐらい見えないとつまらないです。
Re:OOPL か素のCかの違いなんじゃね〜の? (スコア:1, おもしろおかしい)
これがもし「シンプルだからマシンパワー要らない」っつー結論だったら、
文字も読めないのに騙されていた自信が有るので、一人反省会。
# 流石にセキュアは飛躍だと分かる。
そもそも”セキュア感”って主観じゃん? (スコア:2, 興味深い)
WindowsもLinuxも同じことを実現してる技術だけど。それにしても、WindowsのGUIとカーネルの抱き合わせ販売は、最も自由競争を妨げている要因な気がするが。
---
TaddyHatty - always @( posedge ↑ or negedge ↓ )
strcpy (スコア:1, すばらしい洞察)
一発アウトなわけだが
何故syscallが少ないと安全そうに見えるのか (スコア:1, 興味深い)
・カーネル空間での処理が少ない(のではないかと思われる)ためクラッシュ時のダメー
ジが最小限で済む可能性が高い(のではないかと思われる)点
・ソースコードがシンプルである(のではないかと思われる)ため問題が見つかっても素
早く確実に対応しやすい(のではないかと思われる)点
前者はプロセスがユーザ空間で要した時間とプロセスからの要求でカーネルが要した時間、
後者はソースコードがないと安全かどうかを考えるには情報不足ですが...
# getsは禁断の呪文
ステップ数 (スコア:0)
そうすると、一つの関数(API、プロシージャ)がある程度複雑な処理を行っていれば、関数コール数は必然的に減るわけです。
主観ですが、素人が書いたコードほど、関数コールの数は少なくて、プロの人が書いたコードほどcallの数は多いと思います。素人なんて、mainの中ですべてをやってしまうようなコードを書く人は多いですからね。一方で、ある程度の経験を積んだ人のコードならば、モジュール分け、関数分けは常識な訳で。
そうすると、関数コール数が少ないから良いというのは少なくとも短絡的な話である気がします。
一方で、賢いコンパイラなら、最近は、インライン化などもやっているはずで、それによって関数コール数が減っているかもしれませんし、なんでしょうね、結局、こんなことしても何も分からないと言うことなんでしょうか。
# 別の話としては、いわゆるDLL地獄といわれるようなWindowsにおいて、関数コール数が死ぬほど多いだろうということは普通に予想がつきますね。
Re:ステップ数 (スコア:1)
曖昧なんじゃなくてあなたがしらないだけ。
> いわゆる関数コールの数ですよね。
ち が う。
一例として、普通の関数コールでは CPU の特権レベルはかわらない。
システムコールではかわる。
# この発言から、即座にこのコメントの投稿者はスレの話題に
# ついていけていないことがわかる。
> 主観ですが、素人が書いたコードほど、関数コールの数は少なくて、
> プロの人が書いたコードほどcallの数は多いと思います。
> 素人なんて、mainの中ですべてをやってしまうようなコードを
> 書く人は多いですからね。一方で、ある程度の経験を積んだ人の
> コードならば、モジュール分け、関数分けは常識な訳で。
モジュール分け、関数分けのことなんて最初から全く問題に
されていない。
Re:ステップ数 (スコア:0)
Windowsであれば、カーネルコール(kernel32.dllによって隠蔽されている部分)のことなんだろうと思ってた。
システムコール?? (スコア:0)
を言うと思うんだけど、この図は見た感じカーネル内部での
呼び出しも入ってるよね。
その場合、まがりなりにも元々はマイクロカーネル風だった NT の方がまるっきり
モノリシックな Linux より関数呼び出しの回数は多くて当然と思うけど。
Re:余計なことを言わなければ (スコア:1, 興味深い)
Re:余計なことを言わなければ (スコア:2, すばらしい洞察)
「安全」と一言で言っても実際にはいろんな「安全」の概念があるわけで,「安全にしようと思うと複雑になる」も「シンプルだから安全」と同じくらいに誤った(というか偏った)話にしか見えないけどなぁ.
経験則から言えば「シンプルな方が安全な面もある」「複雑にしないと実現できない安全性もある」どっちも真じゃないの?
Re:余計なことを言わなければ (スコア:1)
> 側面のみを見ているためであって、実際には安全にしようと思うと
> 複雑な動作になるというのは技術者やエンジニアであれば誰でも分かること。
「安全にしようとすると複雑」⇒「シンプルだと危険」と
思ってるの?
つまり問題の図からは「IIS の方が Apache より安全」という
結論になると思ってるのかどうか聞いてる。
Re:余計なことを言わなければ (スコア:1)
# 安全性どころの問題じゃない。
Re:余計なことを言わなければ (スコア:0)
ただ、件の図を見て、作りとしてどちらがシンプルかってのはよくわかんなかったりするんですけどね。Windowsの方は大量の線が出てる個所がいくつかあるんですけど、そこで一括して処理したあとにdispatchしてんのかなとか。
Re:余計なことを言わなければ (スコア:0)
Re:余計なことを言わなければ (スコア:2, おもしろおかしい)
そうだIISっていうシステムコール作って
インプット
↓
IIS
↓
アウトプット
って図にすれば超シンプルだし超セキュアじゃね?
Re:余計なことを言わなければ (スコア:0)
Re:余計なことを言わなければ (スコア:0)
Re:余計なことを言わなければ (スコア:0)
プログラムが複雑であればバグを含みやすいということになっています。
仕様を満たし安全に単純に動作するプログラムを設計・実装しようとするのが、
本物の技術者やエンジニアではないでしょうか?
KISS (スコア:1)
シンプルな実装ができたとき、嬉しさを感じない?
…もっとも、皆が言うように、どうしても実装を複雑にせざるを得ないケースも少なからずあるけど。
Windows(つかNTOS)は、KISSと対極の立場から出発したような気がしてならない。
Re:KISS(オフトピ) (スコア:0)
発祥はこっちの方が古いよね。
Re:KISS(オフトピ) (スコア:1)
だそうなんで、"Keep it Simple, Stupid"のほうが流石に古いんじゃないかなー。
Re:余計なことを言わなければ (スコア:0)
バグによるトラブル&其れによる危険度って考えれば複雑なもの程増える。
が、保護機能とかに成ってくると、これは保護を行う為の複雑化を含むもの。
そういう時は無為に簡略化すると逆に危険になる(暗号なんか考えれば判りやすい?)。
結局、全体的なもんなんて、それぞれの要件から判断するしかないんだよね。