Debianの弱い鍵の脆弱性に引っかかってしまった話
- 2008年3月、著者はEngine Yard(EY)で働いていた
- 当時EYはGitHubに無償でインフラを提供して支援していた
- GitHubの成長に伴い、SSHログイン時間が遅くなる問題が発生した
- GitHubは標準的な方法である
~/.ssh/authorized_keys ファイルを使ってSSH鍵を管理していた
- SSHはユーザーが接続する際、このファイルを開いて、ユーザーが提示した鍵と一致する鍵を線形探索する
- 通常は鍵が数個しかないため問題にならないが、GitHubのようにユーザーが増えると遅くなる
authorized_keysファイルの代わりにMySQL DBを使うことを決定
- 複数の代替案を検討した結果、OpenSSHにパッチを当てて、鍵検索をMySQL DBで行うよう変更することにした
- これは慎重な判断であり、セキュリティを損なわないよう多くの努力を払った
- 2008年4月初めに適用し、SSHログイン速度の問題を解決した
奇妙なことが発生
- 1か月後の5月初め、一部のユーザーが他のユーザーのリポジトリにSSHでアクセスできるようになる問題が発生した
- 調査の結果、異なるユーザー同士が同じ鍵フィンガープリントを持つ鍵を使っていた
- これは鍵を共有していない限り起こらないことだった
- ユーザーたちは互いに面識がないと言い、どうやって鍵が漏えいしたのか分からないと話した
- 他のユーザーの組み合わせでも同じ問題が見つかった
- 共通点は、全員がDebianまたはUbuntuシステムを使っていたことだけだった
原因の究明
- 2008年5月13日、DSA-1571-1の公開ですべてが明らかになった
- DebianメンテナーがOpenSSLの乱数生成コードを整理する際、誤って生成可能な鍵の数を約32,000個まで減らしてしまっていた
- 多くの人がGitHubに登録する際、ベストプラクティスに従って新しい鍵を生成し、その結果衝突が発生した
- その後著者は、既知の弱い鍵を活用して問題のある認証局を見つけるなど、この問題とさらに深く関わることになった
GN⁺の意見
- これほど重要な脆弱性を見つけるには、「おかしい」と感じて粘り強く調査できる時間とエネルギーが必要だ。普通はそんな余裕がないので、運も必要になる
- ほとんどの人は忙しい日常に追われ、問題の根本原因まで掘り下げるのは難しい。私たちの業界がこうした余裕を取り戻すことは重要な課題だと思う
- OpenSSLは最も広く使われている暗号ライブラリの1つなので、この種の脆弱性の影響は非常に大きい。ここにはオープンソースの長所と短所の両方がよく表れている
- こうした脆弱性を防ぐには、コードレビューとセキュリティ監査を強化し、重要な部分の変更はより慎重に検討すべきだ。しかし完璧な方法はない
- それでもオープンソースには、専門家が直接コードを調べて問題を見つけられるという利点がある。クローズドなプログラムではそれすらできない
1件のコメント
Hacker Newsの意見
~/.ssh/authorized_keysへのアクセスを高速化しようとしていた状況では、SQLiteではなくMySQLが力を発揮できる種類のケースだったようだpまたはq因子を持つRSA鍵を検出した話も興味深いエピソードだった