SSL VPN と OpenVPN:多くの嘘とわずかな真実(3/4 ページ)

» 2005年10月17日 13時28分 公開
[Charlie-Hosner,japan.linux.com]

後編:使えるSSL VPN

 OpenS/WANのインストールと設定に数日を潰したわたしは、他の製品を探すことにした。VPNを立ち上げるのにカーネルに手を加えるという微妙な操作が必要だというのは、とても真っ当なこととは思えなかったのだ。作業中、わたしは「こんなはずはない」と言い続けたものだ。

 凄まじいインストール手順(Oracle)を何とかやり終えた人なら、Apacheのような複雑なソフトウェアのインストールが./configure; make; make installでできるというのに、この手順は何故これ程にもおぞましいのかと誰もが思うだろう。このときのわたしも、同じ思いだった。もちろん、IPsec VPNがカーネルと結合しており、一方のApacheはユーザー・スペース・デーモンとして動いていることは知っている。しかし、ユーザーとしても管理者としても、そんなことはどうでもよいことだ。ただ、簡単にインストールできて、壊れにくく、設定が分かりやすい製品がほしいのである。必ずもっとよい製品があるはずだと確信して探していたところ、OpenVPNを見つけることができた。

 わたしがOpenVPNに出会ったのは、そのWindows用クライアントがリリースされバージョン2.0の完成を目前にした2004年夏のことだった。このバージョン2.0には、堅牢かつ集中化されたクライアント構成機能と、さらに強力になったトラフィック制御ツールが含まれている。インストールは簡単そうだ。セキュリティには、信頼できる本当のSSL/TLSライブラリが使われている。調べてみる価値はありそうだった。

 少し調べてみると、Peter Gutmann氏の手になる著名なVPN記事が見つかった。記事では、OpenVPNだけを将来性のあるものとし、その他のオープンソースVPNを酷評している。そこで、さらによく調べてみることにした。そして、インストールの手順を見て驚いてしまった。何と./configure; make; make installだったのだ。当たりだ。調べては納得し、納得しては調べる。ついに見つけたのである。IPsec VPNのオープンソース版、同じ機能を備え、追加機能も健全。しかも、従来のVPNで頭痛の種だった、カーネルに食い込むような複雑なところはない。

OpenVPNの概要

 OpenVPN はSSL/TLSライブラリと構造体を使って暗号化層を管理している。二重認証SSL/TLS鍵共有/鍵交換はIPsecのInternet Key Exchange(IKE)とほぼ同等で、IPsecのEncapsulating Security Payload(ESP)と類似のトンネル・システムを実装している。我らが尊敬すべき基準と同等かそれ以上である。OpenVPNで利用可能な暗号化アルゴリズムには、お馴染みかつ贔屓の重量級選手がすべて顔を揃えている。デフォルトは、RSA認証、Diffie-Hellman鍵共有、HMAC- SHA1整合性チェック、明示的IV、CBCモードのBlowfishを使った対称暗号である。そして、わたしの見るところ、これらは極めて安定している。

 素人にとって、これは何を意味するのだろうか。それは、OpenVPNが、最低でも、最良のIPsec実装に見いだされるセキュリティ・レベルのトンネルを作り、それを維持できるということである。これは重要な点だ。多くの人が長い間IPsecで我慢してきたのにはわけがある。それは、IPsecが信頼できないネットワーク上に信頼できるデバイス・ツー・デバイス通信を実現してくれるからである。OpenVPNは、それをさらに進化させたのだ。

 ここで、先へ進む前に少し時間をいただきたい。一点、はっきりさせておきたいことがあるのだ。「SSL VPN」と称する製品はどれも本当のVPNではなく、標準のWebブラウザを使ったアクセスもどきにすぎないという大変な誤解を解いておきたいのだ。IPsecは、通常「ネットワーク拡張」と呼ばれているものを提供する。これは文字通りの意味であり、プライベート・ネットワークを拡張して、そのローカル・ネットワークの制御の及ばないマシンをも包含する機能である。そのマシンが社内のLANに到達するには信頼できないネットワークを経由する必要があるだろう。これを実現し健全なトラスト・モデルを維持するために、IPsec VPNは管理者がクライアント・コンポーネントを拡張ネットワークに参加する必要のあるマシンにインストールすることを求める。

 OpenVPNのアーキテクチャも同じである。違いはない。仕掛けもない。OpenVPNはIPsecと全く同じように、クライアントのインストールを必要とする。そして、これは良いことなのだ。OpenVPNの場合は、クライアントを容易に設定できるように、Windows、Solaris、 Linux、BSD、MacOSX用にインストールの容易なクライアントを提供している(CiscoやCheckpointのVPNの場合と比べてみよ!)。それはともかくとして、ここで肝心な点は、OpenVPNのネットワーク拡張アーキテクチャがIPsecと全く同じだということである。

 これに対して、昨今登場したいわゆるSSL VPNの多くは「クライアント(ソフトウェア)がない」アーキテクチャであると喧伝し、ごく普通のWebブラウザを使ってVPNにアクセスできると主張する。これはすでに述べたように深刻なセキュリティ問題を抱えているだけでなく、機能にも制約を課す。こうした製品の多くはポートをフォワーディングしているだけか、Webプロキシか、プロトコルを毎回「Web化」しているだけだ。真のネットワーク拡張ではないのである。

 プロトコルを1回ごとに処理するのがあまり堅牢なソリューションでないことは、誰にも直ぐにわかることだ。新しい優れたプロトコルが登場してVPN で使いたい場合を考えればよい。IPsecもOpenVPNもネットワーク拡張をリンク・レベルで扱う。したがって、すべてのプロトコル、すべてのトラフィックがVPNトンネルを通過できるのである。

 OpenVPNで本当に驚くべき点は、そのデザイン・パラダイムの変更にある。何と、OpenVPNはカーネル・モジュールではなく、ユーザー・スペース・デーモンとして実装されているのである。ネットワーク・インタフェース・アクセスは仮想TAP/TUNドライバを使って管理される。このドライバは現代のオペレーティング・システムではほとんど標準的なものである。

 この単純な変更が機能に柔軟性を生み、セキュリティを改善し、かくしてIPsecは埃を被ることになるのである。最も重要なオプションは2つある。サーバの特権をユーザーnobodyにまで引き下げられること、そしてサーバ・デーモンをchrootするオプションである。どちらも最小権限の原則というわれわれのセキュリティ理念に沿うものである。

 IPsecプロセスの場合、これを攻略すれば自由に使えるrootシェルが手に入る。攻撃者にとって、悪い取引ではあるまい。しかし、 OpenVPNの場合は、インスタンスをクラックする方法をたまたま見つけたとしても、ほとんど空同然のディレクトリに入り込める特権のないユーザーが得られるだけである。守備側にとって、これは大きな改善だろう。攻撃者が賢ければ最終的にはこの障壁も突破するだろうが、しばらくの時間は必要だ。その間に、侵入を検知し対応することができる。IPsecのように攻略後直ちにrootシェルを奪われれば、管理者には息継ぐ間もなく、最低レベルの技術しか持たない攻撃者からもシステムを守ることはできない。

次ページ:ワームへの障壁

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ