名古屋情報セキュリティ勉強会 #3
なんだか勉強会に行かないとブログが更新されない状態になっているけれども。。。
昨日、名古屋情報セキュリティ勉強会に参加してきた。今回は、パスワードの管理がテーマ。パスワードについて、強固なパスワードを使うように、とか、定期的に変更するように、と言われるが、実際のところどうすればよいのか、がテーマ。以下、私のメモと感想とか。長くてまとまりもないので、Togetter を見たほうがよいかも。http://togetter.com/li/291145
- パスワードを定期的に変更するという不自然なルール+α (NTTデータ先端技術 辻さん)
ペネトレーションとは、貫通という意味。ペネトレーションテストとは、貫通試験、侵入試験という意味で、コンピュータやネットワークに内在する弱点を検出し、実証、評価する行為。ネットワーク上のコンピュータやネットワーク機器などに対して、実際の攻撃手法を用いて試験する。
外部に公開されている機器だけでなく、非公開のものも対象となる。また、検査するものはいわゆるコンピュータだけでなく、プリンタや空調制御装置といった機器も。こうした機器では Linux が動いていたりする。
ペネトレーションテストでは様々な脆弱性が発見されるが、このうち危険性が高いものは権限奪取やセンシティブ情報の取得といったもの。この危険度「高」の脆弱性のうち、実に7割がパスワード関連。SMNP関連のものを除いて純粋にパスワードがらみのものでも6割を越えている。
パスワードクラッカーと呼ばれるツールには、大きくわけてオンラインツールとオフラインツールがある。オンラインツールでは、THC-HYDRA、Medusa、Ncrack といったツールがある。SSH、FTP の各プロトコルについて、100ユーザに辞書にあるパスワードを設定して性能比較したところ、SSH では Ncrack が、FTP では HYDRA の性能がよかった。Medusa はいずれも安定した性能だった。このように、利用目的にあわせて使いわけるのがよい。
オフラインツールでは、定番の John The Ripper と、あらかじめテーブルを用意することによってパフォーマンスをあげる RainbowCrack というツールなどがある。RainbowCrack で使われるテーブルは超巨大。64GB もあるとか。
パスワードクラックに有効な対策として、強固なパスワードを使うとか、定期的に変更するということが言われている。この理由としては、破られる可能性を減らすこと、破られたときの被害範囲を減らすという目的がある。
可能性を減らすという視点では、定期的に変更することよりも、パスワードの桁数を増やすこと、パスワードに利用する文字種を増やすことの方が有効。また、定期的に変更することよりも、ログインに一定回数失敗したときにアカウントをロックするほうが有効。
破られたときの被害範囲を減らすという視点では、短期的には、不正に気づきやすい仕組みのほうが重要。利用した内容をメールで送信するとか、最終ログインの日時が表示されるとか。オンラインバンキング等、お金がからむ場合はそんな悠長なことは言っていられないと思うかもしれないが、振り込みなどの操作を行なう場合にはパスワードに加え、ワンタイムパスワード(トークン)やマトリックス表が利用されており、パスワード自体の重要性は低くなっているのではないか。
サーバに侵入された場合には、パスワードの定期変更などではとても間にあわない。ハニーポットを設置していると、あっという間にぼろぼろにやられてしまう。このため、早期発見の仕組みや、アクセスコントロールを正しく設定することのほうが重要。
長期的には、継続的に更新や追加が行なわれる情報について、パスワードを定期的に変更することで、「盗まれ続けない」という効果は期待できる。
まとめると、パスワードの定期変更は、短期的には被害最小化にはならないが、長期的には盗まれ続けないという効果はある。
では、なぜ定期的に変更という話が出てきたのか。
Unix では /etc/passwd というファイルにハッシュ化されたパスワードが誰でも読める権限で置かれていた。このハッシュを手に入れ、クラックツールを使うと脆弱なパスワードは破られてしまう。しかし、現在は /etc/shadow が主流で、こちらは root しか読むことができない。
それでも労力を割き、割かせるべきなのか? 運用に負荷をかけてまでやるべき/やらせるべきことなのか?
定期的な変更が脅威になる可能性もある。すべての人に定期的に変更した「強い」パスワードを記憶させることは酷。変更を繰り返すうちに、「覚えやすい」(脆弱な)ものになっていってしまう。また、パスワードの使いまわしが発生。パスワードを定期的に変更しないことよりも、使いまわすことのほうが危険。
パスワードの使いまわしはなぜ危険なのか。
パスワードを使いまわしていると、一旦ひとつのサーバに侵入された場合、ハッシュを使って、同じパスワードを使っている別のサーバにも侵入されてしまう可能性がある。この攻撃手法は Pass-the-hash と呼ばれる。このように、ひとつの脆弱性から次々に様々な攻撃を受け、別のサーバ、サービスに影響が広がっていくことを、ドミノエフェクトと呼んでいる。
ドミノエフェクトの例として、ひとつの事例の紹介。
HBGF がやられた事例。
- CMS に SQL インジェクションがあった
- この脆弱性を使ってパスワードのハッシュが盗まれてしまった
- パスワードのハッシュにはストレッチングやソルトが使われておらず、容易にクラックできる状態だった
- よりによって、CEO と COO のパスワードがクラックされてしまった
- 権限の高い者のパスワードほど脆弱というのはよくある話
- このパスワードが使いまわされていた
- 別の SSH サーバにログインされてしまった
- SSH サーバに権限昇格の脆弱性があった
- Google Apps でもパスワードが使いまわされていた
- CEO、COO はこちらでは管理者権限を持っていた
- これにより、メールの読み書きが自由にできるようになった!
- そのメール本文にパスワードと思わしきものが記載されていた
- rootkit.com の root パスワードと思われるもの
- rootkit.com にログインを試みたが、ログインはできなかった
- そこで、ソーシャルハッキングを開始
- 乗っとったアカウントを利用して、共同管理者にメールを送信
- SSH をあけさせ、root 奪取
- rootkit.com のハッシュを入手し、クラック
- 使われていたパスワードのリストが公開された
突っこみどころは多数あるが、パスワードの使いまわしがなければ、被害は CMS だけですんだのでは...
- おまけ。Phishing 対策について
本物のサイトと偽物のサイトを見わけるのは非常に難しい。メールの不振なリンクをクリックするなと言っても、完全には無理。訓練で確率を下げたとしても、10人中1人がクリックしてしまい、それが権限の高い者であればアウト。
やられないための対策としては気をつけるくらいしかできないが、それよりも、やられたときに被害を抑えることに注力すべき。
やられない対策としては、パスワード管理ツールを使うという方法がある。利用者に(サービスごとに別々な)パスワードを覚えさせるのではなく、ツールを活用するのがよい。
- グループディスカッションで出た意見など
ツールが使えない前提で、覚えやすく、強いパスワードを作るにはどうしたらよいか。覚えているフレーズの頭の子音とサービス固有の文字などを組みあわせるというのがよく言われている。パスワードを思いだすためのヒントをメモしておくのも有効。
パスワードを忘れたときのために「秘密の質問」(と回答)を登録させるサイトがあるが、どのようにしたらよいか。秘密の質問の答えは事実上もう一つのパスワード。しかし、選択肢として示されるものは、飼っているペットの名前、好きなアーティストの名前、母親の旧姓とか、調べればわかってしまうようなものが多い。最近では SNS 等でこうした情報を公開している人も多い。この機能は危険なのではないか。本パスワードをきちんと管理できていれば必要ないものなので、長いランダムな文字列などを設定するのがよいのでは。使わない前提で、一旦入力したら忘れてしまってもよいもの。
- 感じたこと
組織のポリシーのことは置いておくとしても、現在では個人でも多くのサイトのID、パスワードを保有している。これらすべてに別々の強いパスワードを設定して管理するのは非常に難しい。私もあまり重要ではないようなところでは一部使いまわしてしまっていたが、この機会に反省し、パスワード管理ツールを使ってみようと思う。
また、よく言われる、付箋にパスワードについて、確かにほめられたものではないが、(パスワードが強いものであれば)パスワードを知られる可能性は、その付箋を見られること以外にはない。それよりも、弱いパスワードを使いまわすほうが危険なのかもしれない。
もうひとつ何か書こうと思っていたはずなのだけど、思いだせない。思いだしたらまた書く。
- 終わりに
今回も非常におもしろく、ためになる勉強会だった。発表していただいた辻さんには、懇親会でもいろいろなお話を聞け、勉強になりました。また、まっちゃさんをはじめスタッフの皆様、会場を提供いただいた名大の高倉先生、そしていろいろな話題を提供いただいた参加者の皆様、ありがとうございました。