Windows XP SP2とWindows Server 2003 SP1のTCP/IPスタックでは、不完全な外向きのTCP同時接続数を10接続に制限しています。接続数が10に達した場合、接続要求はキューイングされ、ある一定間隔で処理されるようになります。

 この制限は、ホストがワームに感染した際、他のホストへの影響を最小限にするため、Windows XP SP2とServer 2003 SP1で新たに実装されました。しかしこの制限は、不完全な外向きのTCP接続を大量かつ同時に張るアプリケーションにおいては、大きなパフォーマンス低下を招く可能性があります。例えば、P2Pシステムや脆弱性スキャナなどが挙げられます。特に脆弱性スキャナは業務で利用するケースが多いと思いますので、パフォーマンス低下は非常に致命的です。

 これを回避する選択肢の一つとして、TCP同時接続数制限の無いプラットフォームを利用するという手があります。例えば、Windows 2000、Windows XP SP1、Windows Server 2003 SPなし---などでは制限がありません。しかし、脆弱性スキャナを動かすプラットフォームは極力セキュアなものにすべきですので、Windows XP SP2もしくはWindows Server 2003で動作させるべきでしょう。

 そこで今回は、この接続制限を回避するための方法とその実装を紹介したいと思います。

ドライバのメモリーを書き換える

 TCP同時接続数制限はTCP/IPドライバに実装されており、それを解除したりリミット値を変更したりできるようなインタフェースはありません。例えばレジストリなどで簡単に設定を変更できてしまうと、ワームなどの悪意のあるプログラムも簡単に制限を回避できてしまうので、何の意味もありません。このため、そのようなインタフェースが実装されていない設計は妥当であると言えます。

 よって、TCP同時接続数制限を回避するためには、TCP/IPドライバを直接何とかするしかありません。最も簡単な手法は、TCP/IPドライバをバイナリ・レベルで改造してしまうことでしょう。実際、P2Pソフトウエアのユーザー向けに、TCP/IPドライバを改造するようなパッチをインターネット上で入手することができます。

 しかし、システム・ファイルを改変するのは少々リスキーであり、サポートの問題もあります。このため、ファイルそのものは改変せず、TCP/IPドライバがリミット値を保持するために使っているメモリー・エリアをランタイムに書き換えたほうがよいでしょう。これならファイルに影響を与えないため、再起動すれば元に戻ります。また、リミット値の変更は即座に反映され、再起動も不要です。

 先日、この仕組みをeEyeの脆弱性スキャナRetinaに実装したのですが、どうせならということで、その機能だけを切り離してフリーウエアとして一般に公開することになりました。ツール名は「BIOT(Bypassing Incomplete Outbound TCP Connection Limit)」。以前、この「ITPro Watcher」でも簡単に紹介しました。

 BIOTは、eEyeのサイトおよび住商情報システムのサイトから無償でダウンロードできます。BIOTを使えば、セキュリティ・ツール(脆弱性スキャナ、ポート・スキャナ、バナー・スキャナなど)やP2PシステムなどをWindows XP SP2/Server 2003 SP1で利用している場合には、ネットワークのパフォーマンスが大幅に向上する可能性があります。

 ただし当然、そのマシンが万が一ワームなどに感染した場合、従来と同様の速度で他のマシンに影響を及ぼす可能性があります。利用する場合は、その点にくれぐれも注意してください。

BIOTを使ってみよう

 インストールは簡単です。ダウンロードしたBiotSetup.exeを起動してウイザードの指示に従えば、インストールは完了します。