Solaris のシステム管理 (第 3 巻)

第 18 章 IPsec の概要

IP セキュリティアーキテクチャー (IPsec) は、IP データグラムを保護します。保護には機密、データの強い完全性、シーケンスの部分的完全性 (再生保護)、データ認証があります。IPsec は、IP プロセス内部で実行され、インターネットアプリケーションの知識の有無に関係なく運用できます。IPsec は、ネットワークトラフィックの保護に有効なツールですが、セキュリティ問題を解消できるわけではありません。

IPsec とは

IPsec では、IP 内に安全なデータグラム認証と暗号化の機構を含むセキュリティアソシエーション (SA) を提供します。IPsec を呼び出すと、IPsec グローバルポリシーファイルで有効にしておいた IP データグラムにセキュリティ機構が適用されます。

図 18-1 は、IPsec を出力パケットで呼び出したときに、IP アドレス指定パケットが IP データグラムの一部として処理されるようすを示します。フロー図からわかるように、認証ヘッダー (AH) とカプセル化されたセキュリティペイロード (ESP) エンティティをパケットに適用できます。そのあとの節では、認証アルゴリズムと暗号化アルゴリズムとともに、これらのエンティティを適用する手順を説明します。

図 18-1 出力パケットプロセスに適用された IPsec

Graphic

図 18-2 は、IPsec 入力プロセスを示したものです。

図 18-2 IPsec を入力パケットプロセスに適用

Graphic

セキュリティアソシエーション

セキュリティアソシエーション (SA) では、1 つのホストから別のホストにセキュリティ属性を指定します。互いに通信し合う 2 つのシステムが安全に通信するには、少なくとも 2 つの SA が必要です。pf_key(7P) インタフェースは、セキュリティアソシエーションを管理します。IPsec は自動 SA 管理をサポートしていませんが、ipseckey(1M) をコマンド行フロントエンドとして使用できます。AH または ESP、宛先 IP アドレス、セキュリティパラメータインデックス (SPI) は、IPsec SA を識別します。任意の 32 ビット値のセキュリティパラメータインデックスは、AH パケットまたは ESP パケットで転送されます。SPI が保護パケットのどこにあるかについては、ipsecah(7P)ipseesp(7P) のマニュアルページを参照してください。

キー管理

セキュリティアソシエーションには、キー情報、アルゴリズムの選択、エンドポイントの識別、その他パラメータがあります。SA の管理をキー管理といいます。現在のところ、キー管理は手動で行います。

保護機構

IPsec にはデータ保護機構が 2 つあります。

どちらの機構もセキュリティアソシエーションを使用します。

認証ヘッダー

認証ヘッダーは新しい IP ヘッダーです。強力な完全性、部分的シーケンス完全性 (応答保護)、IP データグラムに対するデータ認証を備えています。AH では対応できる範囲で最大限の IP データグラムを保護します。送信者と受信者の間で不定的に変更されるフィールドは AH では保護できません。たとえば、IP TTL フィールドの変更は予測できないので AH では保護できません。AH は IP ヘッダーとトランスポートヘッダーの間に挿入されます。トランスポートヘッダーの種類としては、TCP、UDP、ICMP、あるいはもう 1 つの IP ヘッダーがあります。トンネルの詳細については、tun(7M) のマニュアルページを参照してください。

認証アルゴリズムと AH デバイス

IPsec による実装では、AH は IP の先頭に自動的にプッシュされるモジュールです。/dev/ipsecah エントリでは、将来の認証アルゴリズムが AH の先頭にロードできる他、ndd(1M) で AH を調整します。現在の認証アルゴリズムには、HMAC-MD5 と HMAC-SHA-1 があります。どちらの認証アルゴリズムにも、それぞれのキーサイズ属性とキーフォーマット属性が用意されています。詳細については、authmd5h(7M)autsha1(7M) のマニュアルページを参照してください。

セキュリティについて

応答保護を有効にしておかないと、応答時のすべての問題が AH をおびやかす原因になります。AH では盗聴行為には対応できません。AH で保護されたデータであっても、見ようと思えば見ることができます。

セキュリティペイロードのカプセル化

AH によるサービス同様に、ESP でもカプセル化したデータの機密が守られますが、対象はカプセル化したものだけです。ESP の認証サービスはオプションです。これらのサービスでは、冗長になることなく ESP と AH を同じデータグラムで同時に使用できます。ESP は暗号対応技術を使用するため、アメリカ合衆国輸出管理法が適用されます。

ESP はデータをカプセル化し、データグラム内でその先頭に続くデータだけが保護されます。TCP パケットでは、ESP は TCP ヘッダーとそのデータだけをカプセル化します。パケットが IP データグラムの IP の場合、ESP は内部 IP データグラムを保護します。ソケット別ポリシーでは、自己カプセル化ができるため、必要に応じて ESP では IP オプションをカプセル化できます。認証ヘッダー (AH) と異なり、ESP では複数のデータグラム保護が可能です。1 形式だけのデータグラム保護ではデータグラムを守ることはできません。たとえば、ESP だけで機密は守れますが、機密だけを守っても、応答侵害とカットアンドペースト侵害には無防備です。同じく、ESP で完全性だけを保護しても、盗聴に対する対策が不十分なため、その保護能力は AH より弱くなります。

アルゴリズムと ESP デバイス

IPsec ESP では、IP の先頭に自動的にプッシュされるモジュールとして ESP が実装されます。/dev/ipsecesp エントリでは、将来の認証アルゴリズムが AH の先頭にロードできる他、ndd(1M) で ESP を調整します。AH で使用する認証アルゴリズムに加えて、ESP では暗号化アルゴリズムをその先頭にプッシュできます。暗号化アルゴリズムには、United States Data Encryption Standard (DES) と Triple-DES (3DES) があります。どちらの暗号化アルゴリズムにも、それぞれのキーサイズ属性とキーフォーマット属性があります。合衆国の輸出管理法の適用を受けるので、すべての暗号化アルゴリズムを合衆国外で使用できるわけではありません。

セキュリティについて

認証なしで ESP を使用しても、盗聴侵害の他、カットアンドペースト暗号化侵害に対しては無防備です。AH の場合と同じく、機密保護なしで ESP を使用しても応答には無防備です。合衆国の輸出管理法の適用を受けるので、合衆国外で販売される SunOS の場合、ESP で得られる暗号化は、強度が低くなります。

認証アルゴリズムと暗号化アルゴリズム

IPsec では、次の 2 種類のアルゴリズムを使用します。

認証アルゴリズム

認証アルゴリズムでは、データとキーに基づいて、チェックサム値またはダイジェストが生成されます。ダイジェストとキーのサイズについては、認証アルゴリズムのマニュアルページ (authmd5h(7M)authsha1(7M) のマニュアルページなど) を参照してください。

暗号化アルゴリズム

暗号化アルゴリズムでは、キーでデータを暗号化します。暗号化アルゴリズムでは、ブロックサイズごとにデータを処理します。ブロックサイズとキーサイズについては、暗号化アルゴリズムのマニュアルページ (encrdes(7M)encr3des(7M) のマニュアルページなど) を参照してください。

保護ポリシー機構と実施機構

IPsec では、保護ポリシー機構と実施機構を分けています。IPsec ポリシーは、次の範囲で適用できます。

ipsecconf(1M) コマンドは、システム規模ポリシーの設定に使用します。

IPsec は、システム規模ポリシーを入力データグラムと出力データグラムに適用します。システムで認識されるデータがあるため、出力データグラムにはその他の規則も適用できます。入力データグラムの処理は、受理されるか拒絶されるかのどちらかです。入力データグラムの受理か拒絶の決定の基準はいくつかありますが、場合によってはその基準が重複したり競合することがあります。競合の解決は、規則の構文解析の順序によって異なります。ただし、ポリシーエントリでトラフィックが他のすべてのポリシーを省略するように指定されている場合は、自動的に受理されます。出力データグラムは、保護付きまたは保護なしで送信されます。保護が適用されると、特定アルゴリズムか汎用アルゴリズムのどちらかになります。ポリシーで標準的にデータグラムを保護する場合、システム規模ポリシーの例外適用時またはソケット単位ポリシーでの省略の要求時に省略できます。

イントラシステム内トラフィックの場合、ポリシーは実施されますが、実際のセキュリティ機構は適用されません。その代わりに、イントラシステム内パケットの出力ポリシーが、セキュリティ機能の適用された入力パケットになります。

トランスポートモードとトンネルモード

IP ヘッダーのあとに、ESP または AH を呼び出してデータグラムを保護するとき、これをトランスポートモードといいます。たとえば、パケットが次のように始まる場合です。

Graphic

トランスポートモードで、ESP は次のようにデータを保護します。

Graphic

トランスポートモードでは、AH は次のようにデータを保護します。

Graphic

AH はデータがデータグラムに出現する前に、実際データを保護します。その結果、AH による保護は、トランスポートモードでも、IP ヘッダーの一部をカバーします。

データグラム全体が IPsec ヘッダーの保護下にあるとき、これをトンネルモードといいます。AH はその前にあるほとんどの IP を保護するため、トンネルモードは通常は ESP だけで実行します。先の例のデータグラムは、次のようにトンネルモードで保護されます。

Graphic

トンネルモードでは、外部 (保護されていない) IP ヘッダーのソースアドレスと宛先アドレスが、内部 (保護されている) IP ヘッダーのものと異なることがよくあります。それでも、IPsec-aware ネットワークプログラムで ESP 付きの自己カプセル化を使用すれば、内部と外部の IP ヘッダーを一致させることができます。これは、ESP で保護する必要のある IP ヘッダーオプションの場合に行われます。

IPsec の Solaris 実装は基本的にトランスポートモード IPsec 実装であり、トンネルモードはトランスポートモードの特殊ケースとして実装されます。そのため、IP-in-IP トンネルを特殊なトランスポートプロバイダとして処理します。ifconfig(1M) 設定オプションを使用してトンネルを設定する場合、オプションは、ソケットのプログラミングでソケットごとの IPsec を使用可能にするときに使用するオプションとほぼ同じです。また、トンネルモードは、ソケットごとの IPsec で使用可能にできます。

IPsec トンネルのトンネルモジュール

設定したトンネルは、ポイントツーポイントインタフェースです。これで、IP パケットを IP パケット内にカプセル化できます。トンネルの設定には、トンネルソースとトンネル宛先が必要です。詳細については、tun(7M) のマニュアルページと、「IPv6 の Solaris トンネルインタフェース」を参照してください。

トンネルでは、IP との見かけ上の物理的インタフェースが作成されます。この物理的リンクの完全性は、基本になるセキュリティプロトコルによって異なります。セキュリティアソシエーションを確実に行えば、信頼性の高いトンネルになります。すなわち、トンネルのデータパケットのソースはトンネル宛先で指定したピアになります。この信頼関係がある限り、インタフェース別 IP 送信を利用して仮想プライベートネットワークを作成できます。

仮想プライベートネットワークを使用可能にする

IPsec で、仮想プライベートネットワーク (VPN) を構築できます。そのためには、インターネットインフラストラクチャを使用してイントラネットを作成します。たとえば、(それぞれのネットワークとともに) 独立したオフィスを持つ組織があって、オフィス間が VPN テクノロジで接続されている場合、IPsec を利用すれば、2 つのオフィス間でトラフィックを安全にやりとりできます。

図 18-3 は、ネットワークシステムに配置した IPsec で、2 つのオフィスがインターネットを利用して VPN を形成する方法を示します。

図 18-3 仮想プライベートネットワーク

Graphic

セットアップ手順については、「仮想プライベートネットワークの構築」を参照してください。

IPsec の管理

この節では、IPsec の初期化構成ファイルと、ネットワーク内で IPsec の管理を行うためのさまざまなコマンドについて説明します。IPsec の管理手順については、第 19 章「IPsec の実装」を参照してください。

IPsec 初期化構成ファイル

Solaris オペレーティング環境を起動したときに IPsec セキュリティポリシーを呼び出すには、個々の IPsec エントリを利用して IPsec 初期化構成ファイルを作成する必要があります。ファイルの名前は、/etc/inet/ipsecinit.conf とします。ポリシーエントリとその形式については、ipsecconf(1M) のマニュアルページを参照してください。

例 - ipsecinit.conf ファイル

Solaris ソフトウェアには、サンプルの ipsecinit.conf ファイルが組み込まれており、自分で ipsecinit.conf ファイルを作成するときのテンプレートとして利用できます。このサンプルの名前は、ipsecinit.sample であり、次のエントリを含みます。


#
#ident	"@(#)ipsecinit.sample	1.4	99/04/28 SMI"
#
# Copyright (c) 1999 by Sun Microsystems, Inc.
# All rights reserved.
#
# This file should be copied to /etc/inet/ipsecinit.conf to enable IPsec.
# Even if this file has no entries, IPsec will be loaded if
# /etc/inet/ipsecinit.conf exists.
#
# Add entries to protect the traffic using IPSEC. The entries in this
# file are currently configured using ipsecconf from inetinit script
# after /usr is mounted.
#
# For example,
#
#	 {dport 23} apply {encr_algs des encr_auth_algs md5 sa shared}
#	 {sport 23} permit {encr_algs des encr_auth_algs md5}
#
# will protect the telnet traffic to/from the host with ESP using DES and
# MD5.  Also:
#
#	 {daddr 10.5.5.0/24} apply {auth_algs any sa shared}
#	 {saddr 10.5.5.0/24} permit {auth_algs any}
#
# will protect traffic to or from the 10.5.5.0 subnet with AH 
# using any available algorithm.
#
#
# WARNING:	This file is read before default routes are established, and
#		before any naming services have been started.  The
#		ipsecconf(1M) command attempts to resolve names, but it will
#		fail unless the machine uses files, or DNS and the DNS server
#		is on-subnet (i.e. reachable without a default route).
#
#		It is suggested that for this file, use hostnames only if
#		they are in /etc/hosts, or use numeric IP addresses.
#
#		If DNS gets used, the DNS server is implicitly trusted, which
#		could lead to compromise of this machine if the DNS server
#		has been compromised.
#

グローバルポリシーの設定

ホストの IPsec ポリシーを設定するには、ipsecconf(1M) コマンドを使用します。ポリシーを設定すると、IPsec は、ホストに出入りするときにすべての出力データグラムと入力データグラムに対してポリシー検査を適用します。エントリが見つからない場合、ポリシー検査は行われず、すべてのトラフィックが通過します。送信されたデータグラムは、このコマンドで追加されたポリシー検査の対象外になります。送信パケットを保護する方法については、iconfig(1M)tun(7M) のマニュアルページを参照してください。iconfig コマンドは、/etc/inet/ipsecpolicy.conf ファイルからポリシーエントリを削除するときや、既存の設定を終了するときに使用します。

このコマンドはスーパーユーザーでないと呼び出せません。エントリごとに保護されるトラフィックは 1 方向、すなわち出力か入力のどちらかです。そのため、両方向のトラフィックを保護するには、各方向ごとにエントリを設定する必要があります。

システムに設定されたポリシーを確認するには、引数なしでこのコマンドを実行します。このコマンドによって番号があとについたインデックスとともにエントリが表示されます。インデックスに -d オプションを指定すると、システム内の指定ポリシーが削除されます。このコマンドで表示されるエントリの順序は追加された順であり、必ずしもトラフィックを照合する順序ではありません。トラフィックの照合が行われる順序を確認するには、-l オプションを使用します。

IPsec では、リブートするとポリシーエントリが削除されます。そのため、システムのリブートのたびにポリシーエントリを追加する必要があります。起動プロセスの初期にポリシーを設定するには、/etc/inet/ipsecinit.conf ファイルでポリシーをセットアップし、inetinit 起動スクリプトで読み取らせます。

セキュリティについて

たとえば、/etc/inet/ipsecpolicy.conf ファイルを、NFS マウントファイルシステムから送信すると、ファイル内のデータが不正に変更され、設定ポリシーも変更される可能性があります。そのため、/etc/inet/ipsecpolicy.conf ファイルのコピーをネットワークで送信してはいけません。

ポリシーは connect(3N) または accept(3N) を発行した TCP/UDP ソケットにラッチされます。新しいポリシーエントリを追加しても、これらは変更されません。このラッチ機能は将来変更される可能性があるので、この機能に依存してはいけません。

ポリシーは通信を開始する前にセットアップしてください。新しいポリシーエントリを追加すると既存の接続が影響を受けることがあるためです。同じ理由から、通信の途中ではポリシーを変更しないでください。

ネットワークで参照できるホストがソースアドレスで、指定システム自体の安全性に問題がある場合、使用される名前は信頼できません。

セキュリティの弱点は、ツール自体ではなく、ツールの使用方法にあります。ipseckey を使用するときは注意が必要です。各操作の最も安全なモードでコンソールを使用するか、ハード接続の TTY を使用してください。

セキュリティアソシエーションデータベース

IPsec セキュリティサービスのキー情報は、セキュリティアソシエーションデータベース (SADB) に保存されます。セキュリティアソシエーションでは、入力パケットと出力パケットを保護します。ユーザープロセス (場合によってはマルチ連携プロセス) では、特殊なソケットからのメッセージを送信することで SADB を管理します。これは、route(7P) のマニュアルページで説明した方法に類似しています。SADB にアクセスできるのはスーパーユーザーだけです。

出力データグラムの新しい SA に対する要求などの外部イベントに対する応答として、あるいは既存の SA の期限切れを報告するために、オペレーティングシステムからメッセージが自動的に発信されることがあります。先に説明したソケットコールを使用して、SADB 制御メッセージを伝えるためのチャンネルを開いてください。システムごとに複数のキーソケットを開くことができます。

メッセージには、小さいベースヘッダーがあり、そのあとに多くの (0 以上) 拡張メッセージが続きます。メッセージの中には、追加データが必要なものもあります。ベースメッセージと拡張メッセージのいずれも 8 バイト配列である必要があります。たとえば GET メッセージの場合、ベースメッセージ、SA 拡張メッセージ、ADDRESS_DST 拡張メッセージが必要です。詳細については、pf_key(7P) を参照してください。

マニュアルキープログラム

ipsecesp(7P) ネットワークセキュリティサービスと ipsecah(7P) ネットワークセキュリティサービスでセキュリティアソシエーションデータベースを手動で操作するには、ipseckey(1M) コマンドを使用します。また、自動キー管理が無効な場合に、通信パーティ間のセキュリティアソシエーションをセットアップするときも、ipseckey コマンドを使用します。

ipseckey コマンドには少数の一般オプションしかありませんが、多くのコマンド言語をサポートしています。マニュアルキー操作に固有のプログラムインタフェースで要求を配信するように指定することもできます。詳細については、pf_key(7P) のマニュアルページを参照してください。引数なしで ipseckey を呼び出すと、対話モードになり、エントリを入力できるプロンプトが表示されます。コマンドによっては、明示的なセキュリティアソシエーション (SA) タイプが必要ですが、それ以外は、ユーザーが SA を指定すれば、すべての SA タイプで動作します。

セキュリティについて

ipseckey コマンドでは、微妙な暗号キー情報を扱います。特権ユーザーは暗号キー情報を入力できます。場合によっては、不正にこの情報をアクセスして IPsec トラフィックを損なうことも可能です。ipseckey コマンドを使用するときは、次のことに注意してください。

  1. TTY がネットワークに接続されているか (対話モードになっているか)。

    • 接続されている場合は、キー情報のセキュリティは、TTY のトラフィックに対応するネットワークパスのセキュリティになります。clear-text telnet や rlogin セッションでは、ipseckey(1M) を使用しないでください。

    • ローカルウィンドウでも、ウィンドウを読み取ることのできる隠密プログラムからの侵害には無防備です。

  2. ファイルがネットワーク経由でアクセス状態にあるか、または外部から読み取り可能な状態になっているか (-f オプション)。

    • ネットワークマウントファイルの読み取り時に、不正に読み取ることができます。外部から読み取れるファイルにキー情報を保存して使用しないでください。

    • ネットワークで参照できるホストがソースアドレスで、指定システム自体の安全性に問題がある場合、使用される名前は信用できません。

セキュリティの弱点は、ツール自体ではなく、ツールの使用方法にあります。ipseckey を使用するときは注意が必要です。各操作の最も安全なモードでコンソールを使用するか、ハード接続の TTY を使用してください。

既存のユーティリティに対する IPsec 拡張機能

ifconfig

IPsec をサポートするため、ifconfig(1M) に次のオプションが追加されました。

auth_algs

このオプションを設定すると、指定したアルゴリズムで、トンネルに IPsec AH を使用できます。フォーマットは次のとおりです。


auth_algs authentication_algorithm

アルゴリズムは番号かアルゴリズム名です。パラメータ any も使用できます。その場合、特定のアルゴリズム設定は指定されません。IPsec トンネル属性は、すべての同じコマンド行で指定してください。トンネルセキュリティを無効にするには、次のオプションを指定します。


auth_alg none

encr_auth_algs

このオプションでは、認証アルゴリズムを指定して トンネルの IPsec ESP を有効にします。フォーマットは次のとおりです。


encr_auth_algs authentication_algorithm

このアルゴリズムの場合、番号かアルゴリズム名を指定できます。パラメータ any も使用できます。この場合、特定のアルゴリズム設定は指定されません。ESP 暗号化アルゴリズムを指定し、認証アルゴリズムを指定しない場合、ESP 認証アルゴリズム値はデフォルトのパラメータ any になります。

encr_algs

このオプションでは、暗号化アルゴリズムを指定したトンネルで IPsec ESP を有効にできます。フォーマットは次のとおりです。


encr_auth_algs encryption_algorithm

このアルゴリズムの場合、番号かアルゴリズム名を指定できます。IPsec トンネル属性は、すべて同じコマンド行に指定します。トンネルセキュリティを無効にするには、次のオプションを指定します。


encr_alg none

ESP 認証アルゴリズムを指定し、認証アルゴリズムを指定しない場合、ESP 認証アルゴリズム値はデフォルトのパラメータ null になります。

snoop(1M)

snoop コマンドでも、AH ヘッダーと ESP ヘッダーを構文解析できるようになりました。ESP はそのデータを暗号化するので、snoop は ESP で暗号化されて保護されたヘッダーを読み取ることができませんが、AH ではデータは暗号化されないので、snoop でトラフィックを確認できます。パケットに AH が使用されている場合、snoop -V オプションで表示できます。詳細については、snoop(1M) のマニュアルページを参照してください。