3 Minutes NetWorking Supplement
No.07

3Minutes NetWorking Supplement

補講第7回Kerberos(4) KDCセキュリティ

■ Kerberosが受けうる攻撃

おねーさん

おね〜さんと、

ほげたん

ほげたんのっ!!

おねーさん

3 Minutes Networking、

ほげたん

Supplement !!

おねーさん

なんか、気付いたら4回目なんだけど、このKerberos。
ま、それはいいとして。Kerberosは認証システムなんだけど、なんで認証なんて必要なのかな?

ほげたん

え? そりゃ使用するユーザや使用されるサービスが「正規」である、つまり認められているって識別するためでしょ。

おねーさん

そうよね。逆に言えば、この認証系さえ騙せてしまえば、あとはどうとでもなるってことよね。

ほげたん

ん、そうだね。本来は使ってはいけないユーザとかでも、何らかの手段を使って認証されれば、その時点で「正規」であるって認められるからね。

おねーさん

でしょでしょ。なので、認証プロトコルはそれらの「騙し」を防ぎ、攻撃から身を守らなければいけない、ってのはわかるわよね。

ほげたん

そだね。

おねーさん

というわけで、Kerberosも毎回毎回蜂蜜菓子に手もなくひねられるわけにはいかないので、ちゃんと防衛手段が考えられている、というのが今回の話。

ほげたん

防衛手段?

おねーさん

そう。その話をする前に、まず先に。
Kerberosが防げない攻撃も、もちろんあることを知っておいて欲しいわけ。

ほげたん

え? 防げない攻撃があるの? ダメじゃん?

おねーさん

そりゃあるわよ。完璧なシステムなんてあるわけないんだから。もしあったとしたら、それは神が作りたもうたシステムよ、そんなの。
で、残念ながら人間にはそんなものは作れないので、防げない攻撃もあるのよ。

ほげたん

おね〜さん、神様信じてるの?

おねーさん

信じてるわよ。「♪今日会う人と結ばれる、今週も来週もさ来週もずっと〜♪」

ほげたん

なるほど? 神だのみもしたくなる気持ちはわからなくもないなぁ。
いくら美人でも、命の危険があるとなるとちょっと引くよね。ロマンスの神様でも荷が重いかなぁ。

おねーさん

……。

ほげたん

あ、嘘。嘘嘘嘘。
きっと美人すぎて周りが躊躇してるだけ、うん、そうそうそうそう。

おねーさん

……ま、いいわ。ともかく、Kerberosが防げない攻撃。ポイントはココ。

ユーザの共通鍵とパスワード

[FigureSP07-01:ユーザの共通鍵とパスワード]

ほげたん

ユーザの鍵はパスワードから生成されて。
KRB_AS_REPを復号化してセッション鍵を入手し、TGTを受け取る。ココ?

おねーさん

そう。つまり、どんなにKerberosが優秀であっても、パスワードとそれに類するものをネットワーク上に流さなくても、パスワードが破られればおしまい、ということなのよ。パスワードが破られると、共通鍵を手に入れられてしまうからね。

ほげたん

でも、どうやって破るの?

共通鍵への攻撃

[FigureSP07-02:共通鍵への攻撃]

おねーさん

こう。確かにKerberosはパスワードに類するものを流さないけど、暗号化したデータ自体は存在するわけだから。それを入手して、鍵をいろいろ試すのよ。

ほげたん

ふむふむ。復号化できるかどうか試すんだね。

おねーさん

そうそう。復号化できたら、鍵を入手できたことになるから、そうなったらTGTもセッション鍵もすべて入手できちゃう。

ほげたん

あぁ、TGTとセッション鍵を入手されちゃったらダメだよね。
でもそれってKerberosの責任じゃないよね。

おねーさん

まぁ、確かにそうね。
つまり、Kerberosがセキュリティが高いといっても、そういう面ではどうしようもないってことなわけ。

ほげたん

なるほど。

おねーさん

あと、このパスワードの問題以外にも、DoS、Kerberosソフトウェアのセキュリティホール、管理者など内部からの漏洩なんかは防げないけどね。

ほげたん

まぁ、そこらへんはどうしようもないと言えばないよね。

■ 事前認証

おねーさん

さてさて、パスワードを破られれば結局おしまいなんだけど。
まず、パスワードを破るためには暗号化されたデータが必要よね。

ほげたん

ん、そだね。暗号化したデータがあれば、それに対して「予想されるパスワード」から鍵を作って、復号化を試すことができるよね。

おねーさん

で、その暗号化されたデータの入手だけど、さっきは盗聴して、って書いたけど。実際、盗聴って結構面倒なのよね。
でも、もっと簡単な方法があるのよ。

ほげたん

簡単な方法? 簡単にデータを手に入れることができると困るような気がするけど。

おねーさん

たしかに、みすみす辞書攻撃総当り攻撃を試すデータをあっさり渡しちゃうのは困りものよね。
なんで、こんなことになっちゃうかっていうと…。

KRB_AS_REQ

[FigureSP07-03:KRB_AS_REQ]

おねーさん

はい、ポイントは?

ほげたん

KRB_AS_REQが平文だってところ?

おねーさん

そう、暗号化がいらないのがKRB_AS_REQなのよ。それに対し、ASは…。

KRB_AS_REQの受領

[FigureSP07-04:KRB_AS_REQの受領]

おねーさん

ユーザプリンシパルと現在時刻だけを確認して、KRB_AS_REPを返してしまう。
つまり、要求の内容とその送信元が一致するかどうか確かめないで応答するのよ。

ほげたん

あ〜、そうか。要求自体は平文だから誰でも作れるし。
ASは送ってきたユーザプリンシパルが、本当にその持ち主のものかどうか確かめないんだ。

おねーさん

そう。だから、これを防ぐために、「ユーザプリンシパルが送信元のものかどうか」を確かめることを行うことができるのよ。これが事前認証

[FigureSP07-05:事前認証]

ほげたん

なるほど。TGTの要求のために、認証子を送信させるわけだね。

おねーさん

そういうこと。これでASは正しいクライアントにのみ暗号化したデータを送ることになるってこと。
WindowsのActiveDirectoryで使われているKerberosは事前認証が標準になってたりするわね。

ほげたん

へ〜。

■ リプレイ攻撃

おねーさん

一般的に、この手の認証系でよく使われる攻撃として、「リプレイ攻撃」があるわ。

ほげたん

リプレイ攻撃? 繰り返し攻撃?

おねーさん

認証用データを盗聴して、そのまま使う攻撃ね。

[FigureSP07-06:リプレイアタック]

ほげたん

ん〜、認証されるためのデータをまるまる送りつけるんだね。
そうすると「認証用データは正しい」から、「送ってきたユーザも正しい」と判断しちゃう?

おねーさん

そうそう、そういうこと。
さて、Kerberosの場合はどうなるの? 認証用のデータって何?

ほげたん

チケットと、認証子?

おねーさん

そう。攻撃者は盗聴してチケットと認証子、つまりKRB_AP_REQをそのまま送って騙そうとするわけね。
そのKRB_AP_REQの中身はこうだったわね。

KRB_AP_REQ

[FigureSP07-07:KRB_AP_REQ]

おねーさん

で、このチケットと認証子に、リプレイアタックを防ぐ項目が入っているわけなの。

ほげたん

ん〜ん〜。クライアントIPアドレス

おねーさん

まず、それ。チケットにはクライアントのIPアドレスが入っているので、送信元IPアドレスとチケットのIPアドレスが一致するかどうかでチェックできる。

ほげたん

そうだよね。KRB_AP_REQの送信元アドレスとチケットのIPアドレス違ったら変だもんね。

おねーさん

ただし、チケットのクライアントIPアドレスは、場合によっては「任意」だったりすることもあるの。
それに「ユーザ認証」だから、ホストがそのIPアドレスでも使ってるユーザが攻撃者の可能性だってあるし。

ほげたん

う、う〜ん。

おねーさん

なので、リプレイ攻撃防御その2。タイムスタンプ
Kerberosではタイムスタンプとサーバの時間が5分以上ずれている場合、チケットを拒否するのよ。

ほげたん

5分
チケットの送信時間(タイムスタンプ)とサーバが受信した時間に5分以上のズレがあるとダメってことだよね。

おねーさん

そう。つまり、KRB_AP_REQを盗聴しても、5分以内に使用しないとチケットに書かれてるタイムスタンプが古くなってしまって、チケットが使えなくなるのよ。

ほげたん

じゃあ、攻撃者は5分以内に使用すればいいんじゃない?

おねーさん

ま、そうなるわよね。
ともかく、Kerberosを使用する場合、サーバ/ホストはKDCと時計を合わせなければならないってこと。

ほげたん

そういえば、WindowsのActiveDirectoryドメインだと、ドメインに参加してるホストはドメインコントローラに時計が自動的に合うようにされてたっけ。

おねーさん

そうよ。ActiveDirectoryではKerberosを認証に使ってて、ドメインコントローラがKDCになってるの。だから、ドメインコントローラに時計を合わせるようになってるわけね。

ほげたん

へ〜。あれってそういう理由だったんだ。

おねーさん

IPアドレスでもタイムスタンプでもリプレイ攻撃を防げなかった場合の、最後の防御法。
それはリプレイキャッシュと呼ばれてるわ。

[FigureSP07-08:リプレイキャッシュ]

ほげたん

同一の認証子が送られてきたら破棄する

おねーさん

そう、リプレイ攻撃はかならず「本物より後に使用される」わよね。

ほげたん

そうだね。まず本物のKRB_AP_REPが送られて、それを盗聴してから使うから、本物より後になるよね。

おねーさん

認証子は暗号化されたタイムスタンプでしょ。正規のユーザは同じタイムスタンプのKRB_AP_REPを送ってくるはずはない。

ほげたん

ん、まぁ、ないかな。同時に2つの認証要求を送るのって変だし。

おねーさん

そして、リプレイ攻撃は同じ認証子が送られてくる。だって、攻撃者は復号化できないから盗聴したものをそのまま使わざるを得ないから。

ほげたん

そだね。

おねーさん

結果、「もし同じ認証子が送られてきたら最初が本物である」「後から来たのはリプレイ攻撃である」といえるわけね。

ほげたん

ふ〜ん。でも、キャッシュは一定時間だけでしょ? しばらくしてから送ってきたら?

おねーさん

それはタイムスタンプの「5分制限」に引っかかってアウト、ね。

ほげたん

あぁ、そうか。リプレイキャッシュは「5分以内にリプレイされた」場合に有効なんだ。

おねーさん

そゆことね。

■ 仲介者攻撃

おねーさん

リプレイ攻撃以外にも、認証系が受ける攻撃として、仲介者攻撃ってのがあるわ。

ほげたん

まんいんざみどる? 仲介者?

[FigureSP07-09:仲介者攻撃]

ほげたん

フィッシング」とか「なりすまし」って呼ばれる行為だっけ、これ?

おねーさん

そうねぇ、確かにユーザからみれば「サーバになりすまし」、サーバからみれば「ユーザになりすまし」てるから、なりすましの一種って感じかしら。
これのポイントはサーバやユーザからみると、普通に通信しているように思えることよ。

ほげたん

んん〜っと、確かにユーザはサーバ(攻撃者)と、サーバはユーザ(攻撃者)とやりとりしてるから、普通に見えるよね。

おねーさん

そう、攻撃者は単純にやりとりの中継もすることもできるから、見破られにくいのよね。
で、この仲介者攻撃を防ぐ方法としては、「サーバが正しいサーバであるか」という点が重要になるでしょ。

ほげたん

そうだね。攻撃者がサーバになりすましているのを、ユーザが見破ればいいわけだからね。

おねーさん

Kerberos以外だと、例えばSSLならサーバがユーザに電子証明書を送ってくるからそれを確認すればいいわけよ。

ほげたん

あぁ、右下の鍵マークをクリックすると確認できるよね。

SSLでの電子証明書の確認

[FigureSP07-10:SSLでの電子証明書の確認]

おねーさん

うん。
一方、Kerberosの場合、クライアントが相互認証を要求できるのよ。

[FigureSP07-11:相互認証]

ほげたん

セッション鍵で暗号化されたタイムスタンプをサーバが応答にいれて送り返す…。

おねーさん

うん。それが復号化できるということは、送信元がセッション鍵を持つということでしょ?
セッション鍵を持つためには、サービスの鍵でサービスチケットを復号化できないとダメじゃない。

ほげたん

サービスの鍵を持つのは、TGSとサーバだけ。よって、送信元がサーバとわかる。
う〜ん、つまり、応答にサーバが認証子をつけてくれると思えばいいね。

おねーさん

そうね。その理解でいいかも。
さてさて、ほげたん。Kerberosがセキュリティのために考えて要求/応答を送っているのがわかった?

ほげたん

うん、大体は。

おねーさん

じゃ、今回はこれぐらいにしておきましょ。
Kerberosはあともう1回だけやります。

ほげたん

ん〜あと何の話?

おねーさん

Kerberosのオプション機能のお話ね。
じゃ、また次回。おね〜さんと、

ほげたん

ほげたんのっ!!

おねーさん

3分間ネットワーク、

ほげたん

サプリメントでした〜〜〜っ!!
まった次回〜〜〜〜!!

蜂蜜菓子
トロイの英雄アイネイアスは、冥界の門から冥界に入るために、門を守るケルベロスに蜂蜜菓子を食べさせた。ケーキを食べたケルベロスが寝入った隙に門を通過した、という神話。
辞書攻撃
[Dictionary Attack]
よく使われる単語などからパスワードを類推して、パスワードを破る攻撃。
総当り攻撃
[Brute Force Attack]
すべての文字のすべての組み合わせを、総当りで試す攻撃。パスワードの長さが足りないとこれで破られてしまうことも。
5分
デフォルトの値です。
ドメインコントローラ
[Domain Controller]
Windows ActiveDirectoryドメインでの管理用サーバのこと。
ドメインではKDCの役割も請け負う。
仲介者攻撃
[Main-In-The-Middle Attack]
MITM攻撃と略される場合もある。
フィッシング
[Phishing]
サーバになりすまし、クライアントから個人情報などを入力させ、入手する行為。
ほげたんほげたんの今日のポイント
  • Kerberosはパスワードに対する攻撃は防ぐことができない。
  • TGTを入手する前に、送信元を認証する事前認証も行うことができる。
  • リプレイ攻撃を防ぐため、クライアントIPアドレス、タイムスタンプを要求に付加している
  • またリプレイキャッシュも使用することでリプレイ攻撃を防ぐ。
  • 仲介者攻撃を防ぐために相互認証を使用することができる。

3 Minutes NetWorking Supplement No.07

管理人:aji-ssz(at)selene.is.dream.jp