$Id: report-ipsec-process.txt,v 1.1.1.1 1999/10/26 17:19:17 sakane Exp $ %Hd: IPsecの全体的な流れ o IKEの前準備 socket(PF_KEY, SOCK_RAW, PF_KEY_V2) して kernel との口を開く。 IKE から kernel へ SADB_REGISTER(AH, ESP) して、 socket を登録する。 kernel から IKE へ SADB_REGISTER(SUPPORTED) して、 サポートしている暗号アルゴリズムを知らせる。 #上記理由により必要無い…? -> Phase 2 で相手のSAを蹴るために必要。 -> SAを拒否した時、相手にそれを知らせる方法は? -> Notify on Information か? socket(PF_INET, SOCK_DGRAM, 0) してIKEの口を開く。 #draft-mcdonald-simple-ipsec-api-01.txt によると、 IPSEC_LEVEL_BYPASS をセットするとあるが、 具体的になぜか? -> SA張り間違えてデーモン同士が通信出来なくなるのを防ぐため。 多段の必要ない? o ホスト管理者は… セキュリティパラメータの一部のデフォルトを設定する。 セキュリティパラメータの一部とは: セキュリティプロトコル毎のセキュリティレベル AH transport, ESP transport, AH network, ESP network セキュリティプロトコル毎の暗号アルゴリズム 暗号アルゴリズム, 認証アルゴリズム #他…?lifetime は必要? 鍵待ちパケットの待ち時間 #destination 毎にあった方が良いか? o アプリケーションは… 使用するセキュリティプロトコルと、セキュリティレベルを指定できる。 [draft-mcdonald-simple-ipsec-api-01.txt] so = socket(PF_INET, SOCK_STREAM, 0); category = IP_ESP_TRANS_LEVEL; seclevel = IPSEC_LEVEL_USE; setsockopt(so, IPPROTO_IP, category, seclevel, sizeof(int)); ※このドラフトではアルゴリズムを指定することができない。 以下等を追加? category = IP_ESP_TRANS_ALGORITHM; algorithm = ALGORITHM_DES_HMAC_SHA1; setsockopt(so, IPPROTO_IP, category, algorithm, sizeof(int)); おまかせ! default を参照する機能。 o セキュリティゲートウェイ管理者は… source, destination アドレス毎にセキュリティプロトコル, セキュリティレベル, アルゴリズムを設定できる。 こんな感じ… # ipsecpolicy add 10.13.4.0 10.21.12.0 \ -ah_transport require -esp_network require,cast128 # ipsecpolicy add 10.13.4.2 10.51.50.1 \ -esp_transport require -ah_transport require,hmac_md5 # ipsecpolicy add 10.13.4.0 10.91.25.0 -ah_transport ifavail # ipsecpolicy dump -n -level Source Destination ESP Trns. AH Trns. ESP Net. AH Net. default default If avail None None None 10.13.4.0/24 10.21.12.0/24 None Require Require None 10.13.4.2 10.51.50.1 Require Require None None 10.13.4.0/24 10.91.25.0/24 None If avail None None # ipsecpolicy dump -n -algorithm Source Destination ESP Trns. AH Trns. ESP Net. AH Ne default default des_hmac_sha1 hmac_sha1 None None 10.13.4.0/24 10.21.12.0/24 None hmac_sha1 cast128 None 10.13.4.2 10.51.50.1 des_hmac_aha1 hmac_md5 None None 10.13.4.0/24 10.91.25.0/24 None hmac_sha1 None None # default が変わったら default を反映するべきか? -> default として指定されていたら、反映するべきだろう。 さらに source, destination アドレス毎に proxy destination address を設定できる。 # ipsecpolicy proxy 10.140.20.0 10.145.0.0 202.249.11.50 # ipsecpolicy dump -n -proxy Source Destination Proxy 10.140.20.0/24 10.145.0.0/24 202.249.11.50 #proxy source address は proxy destination address で一意に決まるはず。 #network mode かつ proxy destination address が設定されていない時は、 元のアドレスがコピーされる。 さらに、(よくわからないが) source アドレスの ID も設定できる? こんな感じか…?なんのため?よくわからない… # ipsecpolicy id -type cert -f my.cert 202.249.27.1 # ipsecpolicy id -type prefix 10.140.20.0 # ipsecpolicy dump -n -id Source type 10.140.20.0 prefix 202.249.27.1 cert o パケットが出て行く時のカーネルの処理 udp_output(), tcp_output(), rip_output(),... の ip_output() の直前で (struct socket *)m->m_pkthdr.rcvif = socket; しとく。 flags == IP_FORWARDING (struct socket *)m->m_pkthdr.rcvif から else source と destination アドレスから セキュリティプロトコル毎のセキュリティパラメータの一部を 決定する。 #いやん。 imo にオプションつける。 次にそれぞれの鍵を決定する。 一つでもなければ パケットをキューして #戻り値が問題 return 0 は嫌。 timer を持っているプロトコルは、問題かも? protocol 毎にキュー? SADB_ACQUIRE(src,dst,(proxy dst),protocol,algorithm) 全部あれば捻ってデバイスに渡す。 #draft-mcdonald-pf-key-v2-04.txt によると SADB_ACQUIRE で proxy destination address を指定出来ない。 鍵が設定されているか定期的にチェックする。あれば捻ってデバイスに渡す。 #キューから取り出してチェックして、なければキューの後ろに付ける。 #定期的なチェックでは無く、SADB_UPDATE(src,dst)をトリガにするか? o IKEの動作 SADB_ACQUIRE の dst または proxy より phase 1 の相手を決めネゴする。 phase 2 で SA を交換する。 proxy があるなら ID (= src, dst) も交換する。 KEYMAT より暗号鍵を計算して SADB_UPDATE(src,dst,(proxy src, proxy dst),key,...) する。 o パケットが入って来る時のカーネルの処理 source, destination address からセキュリティレベルを決定する。 #port は? それってフィルターじゃん。 トンネルで来たらわからないぞ。 セキュリティレベル == Require かつ ESP,AHじゃなければ破棄。 ESP or AH ならば SPI によりセキュリティパラメータを決定する。 o IPsec/IKE で守れると言われている物 コネクションレスな完全性 (Connectionless integrity) HMAC たかだか一つのパケットの改纂が検知できる。 一連のパケットの順序やパケットの損失を見つけることができない。 データ送信元の認証 (Data Origin Authentication) IKE(?) かなぁ? 再送攻撃に対する耐性 (Anti-replay) シーケンス番号 暗号化による機密性(confidentiality) DESやら *定義: 秘匿性とどうちがう? 限定されたトラフィックフローの機密性 (limited traffic flow confidentiality) ESP tunnel mode Host 1 --- Security ---- Internet -- Security --- Host 2 | Gwy 1 Gwy 2 | | | | | | --Security Assoc 1 (tunnel)- | | | -----------Security Association 2 (tunnel)----------- Security Gwy 1 と Security Gwy 2 の間では、 Host 1 と Host 2 の通信は機密性が保たれている。 アクセスコントロール SPD 要するにフィルタ