Scribble at 2025-10-24 14:30:13 Last modified: 2025-10-24 14:33:53

添付画像

当社では10年以上は経過すると思うのだが、決裁に『承認 Time』というオンライン・サービスを利用していて、一定の期間ごとに「パスワードの変更」というのを強制される。これまでの経緯から半年ごとの変更となっているため、要するに「パスワードの定期的な変更」という弥生時代の風習を続けていることになり、全くの無駄でないとしても大して有効な対策でもないことを続けている。

だが、問題はこのパスワード変更のシステムそのものにある。具体的に言えば、或るていどの脆弱性を開示することになるのだが、いちおう社会正義の一つとしてディスクローズしておくと、このサービスのパスワード変更フローでは、(1) 10文字以上、(2) 英大文字、英小文字、数字、記号をすべて含める、というルールで新しいパスワードを設定するのだが、実はこれは嘘である。

+hqwjEKR5"d"w=OJMAg+`tR1

$?,~|Z6Ne1S@MdGAjM;*DnF3

この二つは、僕がパスワード生成ソフトである Password Tech で生成した文字列だが、どちらもルール違反で使えない。だが、(1) も (2) も満たしており、他に何か隠れたルールでもない限り拒絶される理由がない。そういうわけなので、その隠れたルールがなんであるかは知らないし、先の落書きでも書いたとおり、僕はそういう未知の規則性を推定したりパスワードを解析するなんてのは時間の浪費だと思っているので(情報セキュリティの実務家としては珍しいかもしれないが、僕はパスワードがわからなければツールで攻撃すればいいとか、金庫の鍵がなければ金庫をぶっ壊せばいいという考えの人間だ)、上記のような文字列が受け付けられないとなれば、受け付けられるイージーな文字列を使うことを考える。

flS3FcQizZS99e$Jn6kjbbW8

これは実際に僕が設定しているパスワードではないが、パターンは同じだ。つまり、英数文字に記号を一つだけ(この場合は真ん中あたりに "$" がある)使っていて、実際にこの手のパターンなら新しいパスワードとして『承認 Time』に受け付けられるのである。

もちろん、ここから隠れた仕様を色々と考えて試してもよいのだろう。たとえば「記号は n 個しか使えない」とか「記号が文字列の先頭にあってはいけない」とかだ。おそらく、パスワードの文字列として許容しうる妥当性のパターンとして、開発者が意図しない余計な条件を加えたことになるような正規表現を書いてしまっている可能性が高い。なにせ、プログラマという人材は、基本的に情報セキュリティについては素人だからだ。

これは意外かもしれないが、大多数のプログラマは初歩的な離散数学すら勉強していないので、あたりまえだがロジックや代数系や組合せ論の知識が高校生並みかそれ以下である。したがって、自分たちではアルゴリズムや検索を駆使しているつもりでも、その数学的な原理はぜんぜん理解していないので、まともな正規表現を書けるプログラマなんて100人に一人もいないのである。だから、自分たちが何を書いているのかわかっていないことも多く、それゆえこういうミスが簡単に起きるのだ。

このサービスは、SBI Business Solutions という企業が提供しており、ひとまず「物言う株主」でおなじみ北尾氏が率いる SBI 傘下にあるから、それなりの水準でシステムを開発し運用しているはずであろう。だが、実際にはこういう稚拙なミスをところどころでやるのが実態である。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る