21
Attacking against 5 million SSH public keys 偶然にも500万個の SSH公開鍵を 手に入れた俺たちは hnw 江戸前セキュリティ勉強会 (2015/1/24)発表資料

偶然にも500万個のSSH公開鍵を手に入れた俺たちは

Embed Size (px)

Citation preview

Page 1: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

Attacking against 5 million SSH public keys

偶然にも500万個の SSH公開鍵を 手に入れた俺たちは

hnw 江戸前セキュリティ勉強会 (2015/1/24)発表資料

Page 2: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

自己紹介

❖ @hnw

❖ カレーとバグが大好物

❖ PHPの方から来ました

Page 3: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

アジェンダ

❖ SSH公開鍵の集め方

❖ 弱い鍵を見つけた

❖ 公約数を探す

Page 4: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

❖ SSH公開鍵の集め方

❖ 弱い鍵を見つけた

❖ 公約数を探す

Page 5: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

SSH公開鍵を集める

❖ github.comで集めました

❖ GitHub APIでユーザーIDが全件取れる

❖ https://github.com/[ユーザーID].keys

❖ 登録しているSSH公開鍵が誰でも取得できる

❖ obsoleteらしいが、長いこと使えている

Page 6: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

SSH公開鍵を集める

❖ github.com全850万ユーザー(昨年10月当時)

❖ 鍵の取得だけで2日くらいかかった

❖ 約500万個のSSH公開鍵が手に入った

Page 7: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

❖ SSH公開鍵の集め方

❖ 弱い鍵を見つけた

❖ 公約数を探す

Page 8: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

弱い鍵ペア

❖ 理屈上、公開鍵暗号では秘密鍵がバレなければ安全

❖ 公開鍵が500万件もあるとヘマする人もいる

❖ 秘密鍵を特定できる公開鍵が実際に見つかった

Page 9: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

鍵長が短すぎる鍵❖ 攻撃可能そうな鍵が35個みつかった

❖ 256bit DSA鍵 1個

❖ 512bit DSA鍵 11個

❖ 256bit RSA鍵 11個

❖ 512bit RSA鍵 12個

❖ 鍵長を明示的に指定して鍵ペア生成しているはず

❖ 公開鍵暗号についての理解が足りない?

Page 10: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

鍵長が短すぎる鍵

❖ 短いRSA鍵は素因数分解で破れる

❖ 256bit RSA鍵の場合

❖ p,qともに128bit(10進39桁)の素数

❖ n(=pq)だけをもとにnを素因数分解すればよい

❖ 素因数分解の実装はネット上に落ちている

❖ 256bit RSA鍵なら3秒で素因数分解できた

Page 11: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

古いDebianで作られた脆弱な鍵

❖ CVE-2008-0166

❖ Debian系distroのOpenSSL実装にバグが混入した

❖ 作られるSSH鍵ペアが32767パターンになる

❖ 全パターンのSSHユーザー鍵を公開している人がいる

❖ 208件が一致した

Page 12: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

❖ SSH公開鍵の集め方

❖ 弱い鍵を見つけた

❖ 公約数を探す

Page 13: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

RSAに対する既知の攻撃

❖ 論文「Mining Your Ps and Qs: Detection of Widespread Weak Keys in Network Devices」

❖ 乱数生成器の偏りを利用したRSAに対する攻撃

❖ 多数の公開鍵から公約数を見つけるもの

❖ SSL証明書とSSHホスト鍵あわせて1100万個を調査

❖ 約6万個の鍵を素因数分解できた

Page 14: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

ここに公開鍵がたくさんあるじゃろ?

❖ 論文の筆者が作ったプログラムは公開されている

❖ fastgcd

❖ https://factorable.net/resources.html

Page 15: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

SSHユーザー鍵でGCD計算

❖ メモリとストレージが必要

❖ いったん全部の積を求めるため

❖ 500万個のGCD計算がAWSなら100円

❖ c3.4xlarge(メモリ30GB)で40分

Page 16: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

SSHユーザー鍵でGCD計算

❖ 期待通りに素因数分解できたものは無かった

❖ 乱数生成器の偏りは見つからなかった

Page 17: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

SSHユーザー鍵でGCD計算

❖ 155個について約数が見つかった

❖ 16進1桁から7桁の数で割り切れる

❖ 割ってもまだ合成数

❖ コピペミスした公開鍵が登録されている?

Page 18: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

コピペミスした鍵のリスク

❖ 正しい秘密鍵でもログインできない状態

❖ nの素因数分解さえできれば秘密鍵は作れる

❖ nの素因数が偶然小さい素数ばかりだと危険

❖ あまり指摘されていないリスクなのでは?

Page 19: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

まとめ

❖ 多数のSSH公開鍵を調査した

❖ リスクのある鍵を使っているユーザーが実在する

❖ 攻撃者有利な時代だと再認識した

❖ 実装、データ、計算機いずれも簡単に手に入る

Page 20: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

懇親会にも参加します

❖ アドバイス・雑談などお待ちしております

Page 21: 偶然にも500万個のSSH公開鍵を手に入れた俺たちは

ご静聴 ありがとう ございました