システムコールの数とセキュリティ強度

Why Windows is less secure than Linuxの2つの図を見て欲しい。Linuxの上でApacheを動作させた際のシステムコールの呼び出し状況とWindows上でIISを動作させた場合の同じくシステムコールの呼び出し状況だ。

後者のほうが複雑かつ多くシステムコールを呼び出していることがわかる。この記事では、これがWindowsがセキュリティ面でLinuxに劣る証拠だと言う。

A system call is an opportunity to address memory. A hacker investigates each memory access to see if it is vulnerable to a buffer overflow attack. The developer must do QA on each of these entry points. The more system calls, the greater potential for vulnerability, the more effort needed to create secure applications.

確かにカーネルで実装されるシステムコールが多く呼び出されることはセキュリティ面だけでなく信頼性の点でも不安要素は多い。面白い分析だとは思う。

だが、正直言うと、この図は細かすぎて、拡大しても、何が描いてあるか良くわからない。さらに、OSとWebサーバーアプリケーションそれぞれのバージョンは何だろう。もうちょっと詳しい情報希望!

[追記 on 2/8 7:30am]
少し説明すると、現在のWindowsではHTTP.SYSという形でHTTPのトランスポートはカーネルモジュール化されている。以前は通常のTCP/IPスタックの上に乗るユーザーモードのモジュールとして実装されていたが、パフォーマンスを向上するために、カーネルモードでの実装に変更したものだ。上に書いたように、図は細かすぎて、詳細は不明なのだが、おそらくWindows+IISシステムコールが多い原因の1つはこのHTTP.SYSの呼び出しがあるのだろう。

HTTPのハンドリングをカーネルモードで実装することによるメリットは明らかに現れている。以前のWindows+IISと異なり、同時にハンドリングできるHTTPセッション数は向上し、ページの転送速度も向上している。

この記事では一方的にシステムコールの多さがセキュリティ強度が弱いことの証拠とされているが、カーネルモードで実装したことによるメリットとのトレードオフをきちんと検証したほうが良いだろう。記事でも言及されているが、システムコールが多くても、そこでバッファーオーバーフローなどが発生しないような確認がしっかりととれていれば、それで良いと主張することもできる。

面白い分析ではあるが、もう少し詳しい情報と分析が欲しい。