KATOエンジニヤリング開発日誌

「アウトプット無きエンジニアにインプットもチャンスも無い」の精神で書いています

IPSecとセキュアな通信について学ぶ

ネットワーク特論1の第13回目の授業内容のまとめになります。

※ 第11回は演習回のためスキップ

AIITのネットワーク特論1を受講しました - KATOエンジニヤリング開発日誌

TCP/IPモデルの役割と標準化を学ぶ - KATOエンジニヤリング開発日誌

レイヤ2のネットワーク機器と通信方式・データ配送方式 - KATOエンジニヤリング開発日誌

ネットワーク層の機器と技術について学ぶ - KATOエンジニヤリング開発日誌

ルーティングと経路制御表の集約計算について学ぶ - KATOエンジニヤリング開発日誌

LDAPとActive Directoryについて学ぶ - KATOエンジニヤリング開発日誌

IPv6とHTTPについて学ぶ - KATOエンジニヤリング開発日誌

DNSとDHCPプロトコルについて学ぶ - KATOエンジニヤリング開発日誌

電子メールの送受信に関するプロトコルを学ぶ - KATOエンジニヤリング開発日誌

第13回目の目標

  • セキュリティの説明にでてくる、「セキュリティの要素」「暗号化」といった用語について、正しい説明を選択できる
  • SSL/TLS、IPSecの定義と機能について、正しい説明を選択できる
  • SSHプロトコルの定義、使用ポート、基本的な通信手順、および通信字の注意事項について説明できる
  • VPN技術の定義、種類、基本的な通信手順について、正しい説明を選択できる

ネットワークセキュリティの基本

情報セキュリティの3要素

機密性(Confidentiality)

アクセスを許可されたものだけがその情報にアクセスできること。

  • 認証
    • アクセスしてきた人が何者か見極める
  • 認可
    • アクセス権限を与えること
  • 暗号化
    • 機密性を保つために行う処理

完全正

情報とその処理方法が正確であり、完全であること。

完全性を損なう例としては、権限の無い者が情報を書き換える「改ざん」という行為がある。

改ざん防止のためには「暗号化」を行う必要がある。

可用性

認可された利用者が必要なときに、情報とそれに関連する資産にアクセスできること。

機器やネットワークの多重化やバックアップを取ることで対応する。

暗号化方式

共通鍵暗号方式

  • 1個の鍵で暗号化も復号化も行う
  • アルゴリズムが簡単で暗号化・復号化が高速
  • 共通鍵の共有方法に課題がある
    • 共通鍵を共有するために作成した鍵を相手方に渡さなければならないが、鍵の配送中に窃取されてしまう可能性がある

公開鍵暗号方式

  • 秘密鍵・公開鍵の一対の鍵を使う
  • 公開鍵は暗号化のみを行い、秘密鍵は復号化のみを行う
    • 公開鍵で暗号化したデータは秘密鍵でしか復号化できない
  • アルゴリズムが複雑で暗号化・復号化に時間がかかる
  • 鍵の交換により、ユーザー認証も可能

SSL/TLS

概要

SSL/TLSはトランスポート層プロトコルTCPとセッション層プロトコルの間で動作するプロトコルで、下記2点の処理を行っている。

  • データの暗号化
    • 通信途中でデータを見られても内容がわからないようにする
  • 通信相手が信頼できることの確認
    • サーバーの認証を行い、偽のサーバーにデータを送らないようにする

SSL/TLSの特徴としては、

  • HTTP、SMTP、POP3、IMAPなどのTCPを利用するアプリケーションに対して安全な通信を提供する
    • SSL/TLSを使ってセキュアな通信を行うHTTPをHTTPSと呼ぶ
  • 使用にはアプリケーションのサーバプログラムとクライアントプログラムの両方がSSL/TLSに対応している必要がある
  • 通信は秘密鍵暗号方式を利用する
    • 鍵交換にはRSAなどの公開鍵暗号が利用される
  • SSLプロトコルは2015年に規格上使用が禁止された

SSL/TLSの暗号化通信までの流れ

f:id:masayuki_kato:20170530232731p:plain

  1. クライアント側がSSL/TLSを使ったアクセスを要求する。このときクライアントは利用可能なSSL/TLSのバージョンと暗号化方式の一覧をサーバーに通知する。
  2. サーバー側は使用するプロトコルと暗号化方式を選択し、その情報とサーバーの公開鍵が入った電子証明書をクライアントへ送信する。
  3. クライアントはサーバーから送られた電子証明書が信頼できるものか確認をし、通知された暗号用の共通鍵を生成する。
  4. クライアントは生成した共通鍵を「2」の段階でサーバーから受け取った公開鍵で暗号化し、サーバーへ送信する。
  5. サーバーは自分の秘密鍵でクライアントから受け取った共通鍵を複合する。この時点でクライアントとサーバーが同一の共通鍵を持つので、これ以降は共通鍵でデータを暗号化して通信を行う。

IPSec

概要

IPSecとは通信セキュリティを保証するためのネットワーク層で動作する複数のプロトコルの総称である。

上位層が暗号化をサポートしていない場合にも通信送信元の認証、通信の暗号化、メッセージ認証、トンネリングによる安全な通信路の構築の機能を提供することができる。

IPv6ではIPSecへの対応が必須となっており、専用ヘッダが定義されている。

※IPv4でも対応しているが必須ではないため、対応している機器のみ。

f:id:masayuki_kato:20170530235801p:plain

IPSecの中心となるプロトコル

  • IKE(Internet Key Exchange)
    • 自動で仮想トンネル構築を行うための、鍵交換に使われるプロトコル
  • ESP(Encapsulating Security Payload)
    • データの転送に利用するプロトコル
    • 暗号化された通信内容、仮想トンネルに対応する番号、シーケンス番号フィールド、認証データを1つのパッケージにして送信する
  • AH(Authentication Header)
    • ESPと同等の内容だが暗号化通信が使えない場合に使用する
    • 国によっては一般市民の暗号化が禁止されているところがあるため、そういった地域でもIPSecを利用するための措置

SSH

概要

  • リモートアクセスのためのアプリケーション層で動作する暗号化通信プロトコル(セキュアなシェル)
  • 通信を暗号化して通信内容を外に漏れないようにしている
    • 既存のrsh, rlogin, rcpなどの代わりになるもの
  • ポート番号は「22/TCP」
    • 但しセキュリティ確保のためにサーバー設定時に変更することが多い
  • データ通信には共通鍵暗号を用いて秘匿化を行っている
  • 共通鍵は公開鍵暗号を用いて暗号化している

プロトコル

f:id:masayuki_kato:20170601223235p:plain

  • ホスト認証
    1. サーバーが変化しないHost-key(公開鍵1)と毎回異なるServer-key(公開鍵2)を送信する
    2. クライアントは自分の持つHost-keyと受信したHost-keyを照合する
    3. ホスト認証の後、Session-keyを使ってセキュアな通信路を設定
  • ユーザー認証
    • パスワード認証
      • クライアント:ユーザーが入力したパスワードをSession-keyで暗号化した上でサーバーに送信
      • サーバー:受け取ったパスワードを基に認証
    • 公開鍵認証
    • ホストベース認証
      • UNIX標準の「.rhosts」および「/etc/hosts.equiv」ファイルに記述されていれば信頼する
    • ワンタイムパスワード

主な設定項目

OpenSSHの場合、下記項目はセキュリティ的に必須な設定項目となる。

  • rootのログイン禁止
  • 特定ユーザーのログインのみ許可する
  • 接続をうけるポート番号を22以外に設定する

リモートアクセス以外での使い方

  • SCP(Secure CoPy)
    • SSHを使ったファイル転送プロトコル
    • ファイルコピーを暗号化する
  • SFTP(SSH File Transfer Protocol)
    • SSHを使ったファイル転送プロトコル
    • FTP通信を暗号化する
  • ポートフォワーディング
    • TCPパケットを暗号化する(TCPパケットしか転送できない)
    • インターネットから特定のポート番号宛に届いたパケットをLAN側の機器に転送する機能
    • 1つのグローバルIPアドレスでポート毎に複数のサーバーへ振り分けを行ったり、ポート変換を行うことができる
  • VPN
    • IPパケットを暗号化する

VPN

概要

VPNとはインターネット上に仮想的な専用線を構築し、安全な通信を実現する技術である。

「暗号化技術」と「カプセリング」を用いてトンネリングを実現する。

VPNの種類

  • インターネットVPN:インターネット回線から構築されたVPN
    • IPsec-VPN
      • IKEによるパケット単位の暗号化(ネットワーク層)
      • 拠点間VPN
    • PPTP-VPN
      • PPP(point to point protocol)による暗号化(データリンク層)
      • リモートアクセス
    • SSL-VPN
      • SSL技術を用いる(セッション層)
      • リモートアクセス
  • IP-VPN:プロバイダのIP網を使ったVPN

プロトコル

IPsec-VPN

  • IKE(鍵交換プロトコル)でSA(Security Association)を取り決める
    • フェーズ1:IKE自身が鍵情報を交換するためのSAを確立
    • フェーズ2:フェーズ1で確立したSAを用いて、実際にIPsec通信で使用する認証、暗号化のための情報を交換
  • IPsec-VPNのトンネリングにより通信する

PPTP-VPN(Point-to-Point Tunneling Protocol)

  • PPPを拡張したPPTPを用いたVPN
  • PPTPはマイクロソフト社が提唱したトンネリング用のプロトコルだが、脆弱性が発見され現在は単独での使用は推奨されていない
  • 共通鍵を取り決めて暗号アルゴリズムRC4によりパケット暗号化を行う

SSL-VPN

  • ブラウザを使うことで手軽にリモートアクセスVPNが構築できる
  • NAT超えやファイアウォールを通過できる
  • SSLに対応していないアプリケーションは利用できない
  • 代表的なアクセス制御は下記2つがある
    • リバースプロキシ方式
    • ポートフォワーディング方式
SSL-VPN リバースプロキシ方式
  • インターネットからLAN内のサーバーへのアクセスを中継
  • SSLとリバースプロキシ*1を組み合わせてインターネットに公開されていないサーバーへのアクセスを可能にする
  • インターネット上通信のSSL化にWebブラウザの機能を利用する
  • 処理の流れ
    1. HTTPSでアクセス
    2. HTTPSをHTTPに変換し、LAN内のサーバーのアドレスに変換する
    3. LAN内のサーバーにアクセス
    4. サーバーでの処理を受信し、HTTPSに再変換してアクセス端末に返信する
SSL-VPN ポートフォワーディング方式
  • Webブラウザで動作しないアプリケーションにモジュールを追加して、SSLで通信を行う
  • アプリケーションで使用するポート番号を通過できるポート番号(HTTPSの番号)に変換する
  • 処理の流れ
    1. アプリケーションはパソコンの中のSSLエージェントと通信を行う
    2. SSLエージェントはアプリケーションからの通信のTCP/UDPポート番号に対応したSSLコネクションをSSL-VPNゲートウェイに張る
      • ポート23番ならTelnet
      • ポート25番ならSMTP
      • ポート110番ならPOP3
    3. 設定であらかじめポート番号に対応付けられているサーバーにパケットを送る

IP-VPN

  • 通信事業者が有料で提供するWANサービス
  • 複数の企業で回線をシェアする
    • 専用線よりも安価
  • エッジルータで行き先を記したラベルが付与される

*1:あるサーバーにアクセスするときに特定のプロキシサーバーを経由させる技術