パスワードの定期変更は「神話」なのか?

ITProの記事が契機となって、PCIDSS(PCIデータセキュリティ規準)およびパスワードに関する規定が話題となっている*1

「パスワードは90日ごとの変更」が義務づけられる!? | 日経 xTECH(クロステック)

それに対して,PCIDSSは表現が具体的である。現在のバージョン1.1ではパスワードについて下記のような規定がある。

■要件8.5.8 グループ、共有または汎用のアカウントとパスワードを使用しないこと。
■要件8.5.9 ユーザー・パスワードは少なくとも90日ごとに変更する。

http://itpro.nikkeibp.co.jp/article/OPINION/20080220/294287/

このうち、要件8.5.9「ユーザー・パスワードは少なくとも90日ごとに変更する」に関して疑問を持った。これはいわゆる「セキュリティの常識」という奴の一つではあるが、実際のところ、なぜパスワードを90日ごとに(あるいは定期的に)変更しなければならないのだろうか。

ネットなどで探してみると、定期的なパスワード変更の理由としては、主に以下の二つが説明されているようだ。

  • パスワードを破られにくくするため
  • パスワードが破られた際の被害を最小限にするため

例えば、総務省が公開している情報管理担当者のための情報セキュリティ対策 パスワード管理の推奨では以下のような記述がある。

 パスワードを定期的に変更しなければならない理由には、以下のようなものがあります。

  • 他人に推測されにくいパスワードでも、ハッキングツールを使って長時間かければパスワードが割り出されてしまうこと
  • 仮にパスワードが割り出されてしまっても、なりすましなどの被害を受け続けることを避けることができること
http://www.soumu.go.jp/joho_tsusin/security/business/admin03.htm

本当にそうだろうか。以下、順に検討してみよう。

パスワードの定期変更はパスワードを破られにくくするか?

これはすなわち、90日以上も掛けてパスワードを割り出すようなクラッキング行為に対して、定期的にパスワードを変更することで対抗しようということだろう。しかし、PCIDSSには以下のような規定もある(日本語版からの引用)。

8.5.13 ユーザーIDをロックアウトすることにより、連続したアクセス試行を6回以内に制限する。
8.5.14 ロックアウト時間は30分間、またはアドミニストレータがユーザーIDを有効にするまでとする。

https://www.pcisecuritystandards.org/pdfs/japanese_pci_dss_v1-1.pdf

いわゆるアカウントロックを義務付けていることになる。パスワードの間違いが6回を超えると、30分以上時間をおくか、管理者に依頼してロックアウトを解除してもらわなければならない。これはかなり厳しい制限である。この規定は、定期的にパスワードを変更するよりもはるかに有効なパスワード・クラッキング対策である。かたや、90日ごとのパスワード変更は、有効性はずっと乏しい。(最長)90日以内にパスワードが破られた場合には無力だからだ。
一般に、パスワードのブルート・フォース攻撃や辞書攻撃に対する備えとしてはアカウント・ロックが有効であり、重ねて定期的なパスワード変更を義務付ける必要はまったくないと私は考える。

パスワードの定期変更によって被害を最小限にできるか?

次に、パスワードの定期変更によって被害を最小限にできるかを検討する。
そもそもPCIDSSは、PAN(カード番号=Primary Account Number)を取り扱うサイトに義務付けられた規定だ。カード番号がクラックされた場合に、(最長)90日放置されて「被害を最小限にできる」だろうか?クラッカーは、必要な情報をすばやく入手して、ばれないうちに悪用しようとするのではないか。90日もたってから悪用するのは、よほどのんびりしたクラッカーのように思える。
したがって、90日毎のパスワード変更では、被害を最小限にすることは期待できない。

なぜパスワードの定期変更という「常識」が生まれたか?

このテーマを考えると、一つだけ、パスワードを定期的に変更せざるを得ない状況を思いつく。それは、UNIX系OSで/etc/passwdにパスワード*2を格納している場合だ。/etc/passwdは、そのマシンのユーザであれば誰でも参照できるので、今時はそのような運用をしているケースはまれだろうが、昔は/etc/passwdそのものにパスワード情報が格納されていたのだ。
このような状況では、いくらアカウントロックなどの設定をしていても、/etc/passwdファイルを入手した上で、John the Ripperなどのツールを利用すれば、オフラインでゆっくりパスワードを解析することが可能となる。あとは時間との勝負だ。
このような状況では、確かにパスワードの定期変更くらいしか対抗手段がない。
しかし、これはそもそも/etc/passwdにパスワード情報を格納していることが問題であるのだ。近年では、パスワード情報はroot権限でのみ参照できるシャドウファイルに格納されているので、パスワードの定期変更をする動機はなくなったと考える。
同様に、データベースに暗号化されたパスワードを格納しているケースで、それを解読される時間を問題視する方もいるかもしれない。しかし、データベースからパスワード情報を読み出せるユーザであれば、カード番号など別の重要情報も読み出せるだろう。カード番号は暗号化されているかもしれない*3が、パスワードの解読を心配するのであれば、カード番号の解読はもっと心配すべきだろう。
言い換えれば、こうだ。この理由によりパスワードを90日毎に変更しなければならないのであれば、カード番号も90日毎に変更すべきである。しかしPCIDSSにはカード番号の定期変更に関する規定は見当たらない。

パスワードの定期変更は「神話」なのか?

話題となったPCIDSSをきっかけとして、パスワードの定期変更問題について検討した。ひょっとすると、私の知らない理由によって、パスワードを定期変更するべき明確な根拠があるのかもしれない。もしあるのであればぜひ教えていただきたい。
少なくとも、現時点の私の心証はこうだ。

かつてはパスワードを定期変更すべき明確な根拠があったが、現在その根拠は失われている。そして、パスワードの定期変更は『神話』となった

*1:各国語版のPCIDSSv1.1は、ここから(LICENSE AGREEMENTを経由して)ダウンロードできる

*2:暗号化されたパスワード、あるいはパスワードのハッシュ

*3:PCIDSSではカード番号の暗号化は推奨であって、強制ではない