無線APとFreeRADIUSでPEAP認証をデバッグしてフローを確認

スポンサーリンク

主な名称

IEEE 802.1X (dot1x):認証の仕組み
 認証が成功したら 通信を許可する(認証が成功するまで通信をさせない)

Radius:良くネットワーク機器の認証に使用するプロトコルです。
 EAPを乗せて、サーバーまでの認証をやり取りする通信仕様(輸送トラックみたいな物)

EAP (Extensible Authentication Protocol):認証の「共通フォーマット」
 ユーザー名やパスワード、証明書など認証データをやり取りするための共通の型(封筒みたいな物)
 EAP-PEAP (Protected EAP):ID/PWによる認証
  EAPの「中身(認証方式)」の1つで、セキュリティを実現するための手法。
  生のパスワードをEAPで送ると盗聴される危険があるので、TLSで「外側の暗号化トンネル」を作り、
   その中で「内側の認証(MSCHAPv2など)」を行う
 EAP-TLS:証明書による認証
  クライアント証明書での認証を実施。認証の中で最も安全と言われる方式。

MSCHAPv2:マイクロソフトが開発した「チャレンジ・レスポンス方式」の認証プロトコル。
 仕組みは、サーバーがランダムな数字を送り、クライアントは「自分のパスワード」と
 「ランダムな数字」を組み合わせて計算し、その結果だけを送り返す。
  サーバー側でも同じ計算をし、答えが合えば「パスワードを知っている=本人」と認めます。
 計算結果だけを送信するので生のパスワードをインターネットに流さないで済む

主な機器の役割名称

サプリカント (Supplicant): 認証を依頼する機器。
 PCやスマホなどクライアント側にインストールするソフトウェア。
 ほぼ最近のPC・スマホには標準でインストールされています。
オーセンティケータ (Authenticator): 無線AP・スイッチでサプリカントと認証サーバの間をRadiusで中継する。
 IEEE802.1Xに対応したLANスイッチまたは無線AP
認証サーバー (Authentication Server): 認証の合否を判定するサーバ 今回は FreeRADIUS

EAP-PEAPでのRADIUS認証フロー

PCがAPのSSIDに接続してから、認証が完了するまでの流れ

パケットキャプチャとFreeRadiusのデバックで内容を確認

キャプチャはPC側ではかなり面倒なので今回のはRADIUSサーバ側でのキャプチャです

APが広報しているSSIDのビーコンを受信し、PCで接続を実行
 APが「それなら認証が必要です。まずは自己紹介(Identity)をしてください」と EAP-Request を送る。
PCでID・PWを入力
PCから「私は XXユーザです」 という情報を EAP封筒 に入れて送信。
APはEAPをRADIUSパケットにまとめて設定した指定のRADIUSサーバへ送信
RADIUSサーバがPCに対して、「まずはMD5方式で認証してみない?」と提案を送信
  ※FreeRadiusの初期値は「Type: MD5-Challenge」なのでMD5となってます
APからRADIUSパケットからEAPを取り出してPCへ送信

PCから使用したいEAPのTypeを送信
  今回の例では、Type: Legacy Nak (Response Only) (3) なので、 PCがサーバに対して「いいえ(Nak)、MD5方式は嫌です」と断り、Desired Auth Type にて Protected EAP (EAP-PEAP) (25) となっているので、PCは「PEAP(Type 25)でお願い」とリクエストを返します。
EAPをRADIUSパケットにして送信
サーバからStart ビット(フラグ)が立っているので、「PEAPでOK、準備ができたよ。TLSハンドシェイクを始めよう」というサーバからクライアントへ連絡
RADIUSパケットをEAPにして送信
 

PCから、TLS Client Hello というメッセージを送る。
 「私はこの暗号化方式が使えます」「このバージョンのTLSで話せます」という提案をします。
EAPをRADIUSパケットにして送信

サーバからServerHeloでサーバ証明書や鍵などを送信
RADIUSパケットをEAPにして送信

PCがこの証明書を認めたら、「じゃあ暗号化を開始します!」と返事を送信
 ※証明書が信頼できない時は下記の注意の画面が出る
EAPをRADIUSパケットにして送信

サーバよりTLSハンドシェイクを終了し、ここからは暗号通信しますと連絡する
RADIUSパケットをEAPにして送信

暗号化されちゃうので、ここからはデバッグログで確認

⑱ PCから「IDとサーバから受け取ったチャレンジ数値とPWを組み合わせた値」を送信
⑲ EAPをRADIUSパケットにして送信
⑳ サーバからPCへ認証確認できたよと送信
 ※ここではまだ、パケットはAccess-Challengeです
 Tunneled authentication was successful
 PC が自分の PW と Challenge を合体させてハッシュ化した値を送り、
 サーバでも同じ計算をして一致したので OKと判断
㉑ RADIUSパケットをEAPにして送信

PCから「認証が成功したことを確認した」と返信
EAPをRADIUSパケットにして送信
PCから認証成功を受けった返事を受信したので、RADIUS認証を終了するので、「Access-Accept」を送信
 Received EAP-TLV response
  PCから認証成功を受けった返事を受信
 eap_peap: Success
  PEAPセッションが成功した
 Login OK
 Sent Access-Accept
  認証処理終了として送信
RADIUSパケットをEAPにして送信

コメント

タイトルとURLをコピーしました