カスペルスキー製パスワードマネージャーに脆弱性。同じ時刻に同じパスワードを生成 94
ストーリー by nagazou
要更新と再生成 部門より
要更新と再生成 部門より
カスペルスキー製パスワードマネージャー「Kaspersky Password Manager(KPM)」に脆弱性が見つかり、新たにCVE-ID(CVE-2020-27020)が割り当てられた。生成されるパスワードに偏りが生じているという。カスペルスキーは脆弱性の報告を受けて、すでに対策を取ったバージョンを配布している。影響を受けるのはのWindows版では9.0.2パッチF以前のバージョン、Android用ではバージョン9.2.14.872以前、iOS用では9.2.14.31以前のものだとしている(Kaspersky、Donjon、The Register、窓の杜 )。
発見者であるLedger社のセキュリティチーム「Ledger Donjon」によれば、KPMのパスワードジェネレーターには時刻をキーに用いるロジックに欠陥があり、生成する数値に偏りが生じていた。攻撃者はパスワード生成時期を知ることができれば、総当たり攻撃により数分で解析できるとしている。同社では最新版への更新を行うと同時にランダムパスワードを再生成するよう呼び掛けている。
発見者であるLedger社のセキュリティチーム「Ledger Donjon」によれば、KPMのパスワードジェネレーターには時刻をキーに用いるロジックに欠陥があり、生成する数値に偏りが生じていた。攻撃者はパスワード生成時期を知ることができれば、総当たり攻撃により数分で解析できるとしている。同社では最新版への更新を行うと同時にランダムパスワードを再生成するよう呼び掛けている。
これは… (スコア:4, 興味深い)
リンク先Donjon [ledger.com]
However, for some reason, password generation is animated: (中略)
This animation takes more than 1 second, so it is not possible to click several times on the “Generate” button within a second. That is definitely why the weakness had not been discovered before.
(拙訳)しかしどういうわけか、パスワードの生成はアニメーションされる。このアニメーションは1秒以上かかるので、「生成」ボタンを同じ秒内にクリックすることはできない。それでこの脆弱性が今まで発見されなかったのだろう。
-
完全に邪推だけど、開発者は1秒内に連続生成すると同じパスワードしか出ない仕様だと把握してて、アニメーションで時間稼ぎを入れたんじゃないかと疑いたくなってしまう……
好意的に見て、まさか時刻さえ同じなら全ての環境で同じパスワードになる脆弱性とは気づいていなかったのかも知れないけど、ゴマカシを入れたのは意図的なんじゃないかな。
Re: (スコア:0)
普通のプログラムで現在時間要求したら1秒単位ってことはないだろうからな。
これは仕方がないミス (スコア:3, おもしろおかしい)
例えば、javaの乱数生成のドキュメントでも
セキュリティ目的では使用できず、安全なSecureRandomの使用を進めているけど [oracle.com]、
使用する部品の仕様書を逐一確認するのは大変だし、
ましてやセキュリティ関連になると、ますます難しい。
セキュリティで食っている会社でもなきゃ、そういったミスは仕方ないんじゃないかな
ね?カスペルスキーさん トレンドマイクロさん [security.srad.jp]
Re:これは仕方がないミス (スコア:2, すばらしい洞察)
いや、この脆弱性の本質は、非暗号論的な疑似乱数(今回のケースではメルセンヌ・ツイスタ)を使ったことではなくて、
その種がシステム時刻でしかなく、それによって推測しやすくなっていたことでは。
Re:これは仕方がないミス (スコア:2)
php で言えば、ほとんどの人は mt_rand をそのまま使っていると思いますね。
mt_rand ではランダムの種に現在時刻とプロセスIDを使っているということです(参考資料 [lovepeers.org])ので時刻だけよりかはだいぶマシですが、もっとバレにくくするにはコレ [hatenablog.com]とか参考になると思います。
いやー、実は私も、この事件を知って始めて openssl_random_pseudo_bytes を知った。
あぶねー、あぶねー。
Re: (スコア:0)
mt_randは暗号論的乱数として使えるように設計されていないから使ってはいけないというのは常識だと思ってた
Re: (スコア:0)
いやこれ単なる嫌味じゃろ
Re: (スコア:0)
その嫌味が間違ってて嫌味になってないって指摘じゃない
乱数生成アルゴリズムが適切に選択されてないって指摘に、よく見かける seed bit 分の空間しか持ってないってミスじゃないかという指摘
とっちが正しいのかは流し読みしかしてないから知らん
Re: (スコア:0)
この前のスクエニの人?
Re:これは仕方がないミス (スコア:1)
/dev/*random ほどお手軽ではないらしいことがわかりました
Re:これは仕方がないミス (スコア:1)
http://www.math.sci.hiroshima-u.ac.jp/m-mat/MT/faq.html [hiroshima-u.ac.jp]
だから (スコア:1)
PCにサイコロ(本物)を内蔵しておけと
Re:だから (スコア:2)
その辺のサイコロのランダム性ってどれぐらい高いんだろうね
Re:だから (スコア:3, 興味深い)
その昔、中学生だった時分、サイコロを 10 万回振ったら、 1 が 1/6 より大きく、 2 が最も小さく、 3,4,5,6 と増えていきました。
先生曰く、おそらく私が使ったサイコロは手元にあったサイコロで 1 のへこみが他のどれよりも大きく、 1 の面が軽かったので一番多く出たのではないかとのこと。よく観察すれば確かに 1 だけが大きく、 2,3,4,5,6 はへこみは同じ大きさでした。本物の正しいさいころは全てのくぼみの削った重さが同じになるように彫られて、 2 は一よりは小さいが三より大きいへこみになるようにしなくてはならないとか。
カジノでは透明な樹脂に●が印刷されてますね。こっちが容易で正解かも。
Re:だから (スコア:2)
おお、実測で確認するとはすごい
「確率をそろえるために数字の小さい(1の)丸は大きいんだ」とは聞いたことありますが、
やりすぎてたってことなんですかね
なおせっかくですので、どれぐらいのズレだったかは覚えてたりしないですかね…?
Re: (スコア:0)
多少偏ってても人間が振ればセーフ
# そして出てくるピンゾロ賽
Re: Re:だから (スコア:1)
# そして出てくるピンゾロ賽
456が出るとKasperskyの総取りで全パスワードが!?
Re: Re:だから (スコア:1)
Re: (スコア:0)
サイコロを振ることによる乱数は、その「振る」人間の力加減が乱数性の根拠になっているので、
手慣れた人間が自分のサイコロを持ち込んで振れば、たとえそれが不正のないサイコロであっても、容易に好きな目を出せます。
Re: (スコア:0)
手慣れた人間が自分のサイコロを持ち込んで振れば、たとえそれが不正のないサイコロであっても、容易に好きな目を出せます。
さいですか
だがよく考えてほしい
Kasperskyはロシアの会社だ
ロシア人の手が震えていないのは飲んでいないときだけ
ということを
Re:だから (スコア:1)
飲んでいる時だけだと思った
Re: (スコア:0)
ロシアだし寒さで震えてるのかな?(すっとぼけ)
Re: (スコア:0)
あるちゅうってのんでてものんでなくてもふるえてるのでは
Re: (スコア:0)
いやそれはずれてる。ランダムな数字を狙ってる人は特定の目を狙わない。
批判するならサイコロを振る人の癖で出る目を絞れるとか。
Re: (スコア:0)
力加減の影響が無視できるくらいの高さから落とせばよいのでは?
# さいころを振るって呼べなくなりそう
Re:だから (スコア:1)
Win11 & TMP 「お、おう!」
Re:だから (スコア:1)
Re:だから (スコア:1)
日頃tmp 使いすぎなのがバレてしまう(笑)
Re: (スコア:0)
いちおう、最近のCPUには乱数生成器は内蔵されていて
RDRAND命令ってので使えるんだけど、これがあまり信用されなくて
手放しで使われないという情けない状態
とか
Re: (スコア:0)
LinusがNSAのバックドア云々いってたのが懐かしいな
Re: (スコア:0)
最近Windows 11が要求したことで一気に話題になったTPMが暗号論的乱数の生成器(を含むハードウェア)だぞ
Re: (スコア:0)
PCにサイコロ(本物)を内蔵しておけと
サイコロを振った結果
17ページに進め(アレ?
Re: (スコア:0)
14へ行け
Re: (スコア:0)
サイコロ命令はあるけどね
乱数の種は「マウスをグリグリ」して作るべき (スコア:1)
コンピュータというのは本質的に同じプログラムは同じ結果を返すものなので、乱数を生成するのは難しいのです。
暗号論的擬似乱数生成器とよばれるものでさえも、得にOS自体を仮想環境で動かしていた場合など、環境ノイズの不足により信頼性に疑問を述べている専門家もいます。
セキュリティ意識が高い人は、普段使いの環境も用途毎に仮想化していたりするので、パスワードマネージャも仮想環境を考慮しなくてはなりません。
TPMの暗号論的擬似乱数生成器も仮想環境からだとうまく利用できないし、それだけならよいのですがTPM必須の仮想OSを動かすために偽物のTPMを仮想化ソフトウェアが用意していたら無知なユーザが知らない間に強度の低い種が使われるかもしれません。
原始的だとか馬鹿にする人が居ますが、やはり TrueCryptやVeraCryptのように、マウスをグリグリさせて乱数の種を生成するのが良いでしょう。
「質の良い乱数の種を生成するため、マウスをできる限りランダムにグリグリ動かしてください」と人間に命じるのです。
人間様は同じように動かそうとしてもそもそもできないので必ず推測不可能なランダムな動きになります(同じように意識して回しても高dpiな今のマウスでは推測不可能な種が作られます)
信頼できるパスワードマネージャーは、ユーザーにマウスをグリグリさせるべきです。
乱数の種は、手作りが一番です。
OS自体が「マウスのグリグリ」を使っている (スコア:1)
> 信頼できるパスワードマネージャーは、ユーザーにマウスをグリグリさせるべきです。
パスワードマネージャじゃなくても
OS自体がすでに「マウスのグリグリ」を利用していますよ
https://en.wikipedia.org/wiki/Entropy_(computing) [wikipedia.org]
もっと言うと「マウスのぐりぐり」だけでは不十分で
- ネットワークのパケットの受信タイミングとかパケット長
- ハードウェアの割り込みタイミング(マウスやキーボードの割り込みなどを含む)
- CPU内部のハードウェア乱数生成器(電子回路が受ける外来ノイズから乱数を生成しているので予測が困難)
- BIOS(firmware)に書き込まれているデバイス固有のIDやビット列
などを組み合わせるのが現在の主流の方法です
そしてそれらの方法は,OSの標準機能になっていて
LinuxやBSDなら /dev/urandom あたりを
Windowsなら Cryptography API あたりを使えば簡単に利用でき,質の良い乱数が得られます.
また移植性を考えるなら openssl のライブラリを使う方法などもあります.
> 乱数の種は、手作りが一番です。
手作りの結果,カスペルスキー製パスワードマネージャーにはセキュリティホールが生まれています.
そもそも乱数はパスワード生成時だけでなく,SSLの通信など様々な処理で必要になります.
例えばブラウザでhttpsを使うたびに,マウスをグリグリしているようでは,話になりません.
パスワード生成時だけ別処理にする意味がありません.
信頼性・保守性・実用性を考えると,わざわざ手作りのモジュールを使うより
OS標準のモジュールを使ったほうがメリットが多いと思います
Re:OS自体が「マウスのグリグリ」を使っている (スコア:1)
>OS標準のモジュールを使ったほうがメリットが多いと思います
システム時刻(秒)を毎回シードに、乱数取り出し回数も固定、1秒のアニメ
これ、セキュリティの専門家たちが作ったんですよね
ここまでくると、事実上のバックドアに思えて仕方ない
Re:乱数の種は「マウスをグリグリ」して作るべき (スコア:1)
ここではもうファストジョークでなきゃマジレスしか付かんぞ
Re: (スコア:0)
ブロックチェーン業界の朝は早い
どっちを取るか (スコア:0)
パスワードマネージャの作者を盲信する
または
自分のセキュリティ管理を盲信する
# 漏れる前提で運用するならどっちも大差ない気も、、、
Re: (スコア:0)
セキュリティは性能で選ぶべき( ・ิω・ิ)
Re: (スコア:0)
PCもスマホも使わないが一番!
Re: (スコア:0)
あんたどうやってスラドに書き込んでるんだ
今時のCPUには (スコア:0)
Rレジスタって無いんですね……
Re: (スコア:0)
今時のPCではリフレッシュはCPUじゃやらないからな
Re: (スコア:0)
Rレジスタって無いんですね……
代わりに持病のリークのLなら実装済みかも
Re: (スコア:0)
一部のプロセッサには起動後のクロック数をカウントするレジスタならありますよ
OS側で用意してるタイマーよりも細かく実行時間の計測などが出来ます
Re: (スコア:0)
ただ近ごろのプロセッサーは節電のためにクロックが可変だからタイマーとして使うのは微妙
Re: (スコア:0)
RDRANDっていう専用の命令があるよ
こんなミュージックプレイヤーは嫌だ (スコア:2)
厳密にランダムだけど、トラック1が3回連続でかかったりする