カテゴリー
技術

Confusables – 紛らわしい文字を含めて検索できるPythonライブラリ

Unicode コンソーシアムが提供している見た目そっくりな文字リストにある文字が紛れていても文字列マッチする小さなライブラリが Confusables です。

このクラスは最新の Confusables.txt を Unicode.org から取得し、紛らわしい文字を含んだマッチする正規表現を生成してくれます。

たとえば、”Hello” に対しては次のようなパターンができます。

Regexp pattern: [HHℋℌℍ𝐇𝐻𝑯𝓗𝕳𝖧𝗛𝘏𝙃𝙷Η𝚮𝛨𝜢𝝜𝞖ⲎНᎻᕼꓧ𐋏ⱧҢĦӉӇ][e℮eℯⅇ𝐞𝑒𝒆𝓮𝔢𝕖𝖊𝖾𝗲𝘦𝙚𝚎ꬲеҽɇҿ][l‎\|∣⏽│1‎۱𐌠‎𝟏𝟙𝟣𝟭�
IIIⅠℐℑ𝐈𝐼𝑰𝓘𝕀𝕴𝖨𝗜𝘐𝙄𝙸Ɩlⅼℓ𝐥𝑙𝒍𝓁𝓵𝔩𝕝𝖑𝗅𝗹𝘭𝙡𝚕ǀΙ𝚰𝛪𝜤𝝞𝞘ⲒІӀ‎‎‎‎‎‎‎‎ⵏᛁꓲ𖼨𐊊𐌉‎‎łɭƗƚɫ‎‎‎‎ŀĿᒷ🄂⒈‎⒓㏫㋋㍤⒔㏬㍥⒕㏭㍦
⒖㏮㍧⒗㏯㍨⒘㏰㍩⒙㏱㍪⒚㏲㍫ljIJ‖∥Ⅱǁ‎𐆙⒒Ⅲ𐆘㏪㋊㍣Ю⒑㏩㋉㍢ʪ₶ⅣⅨɮʫ㏠㋀㍙][l‎\|∣⏽│1‎۱𐌠‎𝟏𝟙𝟣𝟭𝟷IIⅠℐℑ𝐈𝐼𝑰𝓘𝕀𝕴𝖨𝗜𝘐𝙄𝙸Ɩlⅼℓ𝐥𝑙�
𝓁𝓵𝔩𝕝𝖑𝗅𝗹𝘭𝙡𝚕ǀǀΙ𝚰𝛪𝜤𝝞𝞘ⲒІӀ‎‎‎‎‎‎‎‎ⵏᛁꓲ𖼨𐊊𐌉‎‎łɭƗƚɫ‎‎‎‎ŀĿᒷ🄂⒈‎⒓㏫㋋㍤⒔㏬㍥⒕㏭㍦⒖㏮㍧⒗㏯㍨⒘㏰㍩⒙㏱㍪⒚㏲㍫ljIJ‖∥Ⅱǁ‎𐆙⒒Ⅲ𐆘
㏪㋊㍣Ю⒑㏩㋉㍢ʪ₶ⅣⅨɮʫ㏠㋀㍙][oంಂംං०੦૦௦౦೦൦๐໐၀‎۵oℴ𝐨𝑜𝒐𝓸𝔬𝕠𝖔𝗈𝗼𝘰𝙤𝚘ᴏᴑꬽο𝛐𝜊𝝄𝝾𝞸σ𝛔𝜎𝝈𝞂𝞼ⲟоჿօ‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ഠဝ𐓪𑣈
𑣗𐐬‎øꬾɵꝋөѳꮎꮻꭴ‎ơœɶ∞ꝏꚙൟတ]

あとはこれに対して入力された文字列がマッチするかをチェックすれば、紛らわしい文字列かどうかの判定ができるというわけです。

テストコードでは “𝓗℮𝐥1೦” が “Hello” にマッチすることが確認できます。紛らわしい文字列として真で、元の”Hello”と同値ではないなら、誤認することを狙った”Hello”のニセモノだ、というわけですね。

Confusables のリスト中には日本語の紛らわしい文字(ハと八とかニと二とか)もあります。『カタカナの「ノ」はスラッシュと似ている』という定義もあり、”and/or” に間違うパターンを出してみるとこんな風になりました。カタカナの「ノ」だけじゃなく斜め線に見える文字もたくさんUnicodeにあるんですね。

Regexp pattern: [a⍺a𝐚𝑎𝒂𝒶𝓪𝔞𝕒𝖆𝖺𝗮𝘢𝙖𝚊ɑα𝛂𝛼𝜶𝝰𝞪а⍶℀℁ꜳæӕꜵꜷꜹꜻꜽ][n𝐧𝑛𝒏𝓃𝓷𝔫𝕟𝖓𝗇𝗻𝘯𝙣𝚗ոռɳƞη𝛈𝜂𝜼𝝶𝞰ᵰnj][dⅾⅆ𝐝𝑑�
𝒹𝓭𝔡𝕕𝖉𝖽𝗱𝘥𝙙𝚍ԁԁᏧᑯꓒɗɖƌđ₫ᑻᒇʤdzʣdžʥ][/᜵⁁∕⁄╱⟋⧸𝈺㇓〳Ⳇノ丿⼃⧶⫽⫻][oంಂംං०੦૦௦౦೦൦๐໐၀‎۵oℴ𝐨𝑜𝒐𝓸𝔬𝕠𝖔𝗈𝗼𝘰𝙤𝚘ᴏᴑꬽο𝛐𝜊𝝄𝝾𝞸σ𝛔�
𝝈𝞂𝞼ⲟⲟоჿօ‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ഠဝ𐓪𑣈𑣗𐐬‎øꬾɵꝋөѳꮎꮻꭴ‎ơœɶ∞ꝏꚙൟတ][r𝐫𝑟𝒓𝓇𝓻𝔯𝕣𝖗𝗋𝗿𝘳𝙧𝚛ꭇꭈᴦⲅгꮁɽɼɍғᵲґ𑣣mⅿ𝐦𝑚𝒎𝓂𝓶𝔪𝕞𝖒𝗆𝗺𝘮
𝙢𝚖𑜀₥ɱᵯ]

“andノor” と入れると、”Matched” となるわけです。

日本語ドメインもあまり普及していないし、日本語に紛らわしい文字を混ぜた文字列で何かをすり抜けられるというユースケースもそんなにないかもしれませんが、まあそういう必要があればこういったチェックをつけるのでしょう。

カテゴリー
ネットの事件

英銀行の「正しい電話番号」確認サイト、JSONで全74000番号を晒す作りで議論を呼ぶ

イギリスの大手バークレーズ銀行、利用者の電話詐欺被害対策として「バークレイズ銀行の電話番号として正しいか調べる」サイトを公開しているのですが、その実装に問題があるのではという疑義がHacker News で上がり議論となっています。

Phone number checker サイトでは、電話番号を一つ入力するフォームが置かれ、ここに電話番号を入力すると、74000個ある正式な電話番号の場合は「この番号へ掛けても大丈夫です」という結果が出ます。

大手とはいえ、一つの銀行が74000個も番号を抱えてるのはすごいですね。フリーダイヤルから支店や部署まですべての番号を含むにしても。

議論となっているのは、このチェッカがクライアントサイドだけで動いているらしいこと。JSONファイルが読み込まれていて、このファイルに74000個の電話番号がベタ書きされています。


{
"numbers": [
"0800000097",
"0800001011",
"0800008008",
"0800111777",
"0800201612",
"0800222200",
"0800222800",
"0800227222",
"0800281435",
"0800282390",
"0800289289",
"0800289888",
"0800289989",

最初に声を上げたブログが、入力フォームの形式チェックがあまりちゃんとしていない(ハイフンを含んだりイギリスの国番号44から始まる形式を正しく認識できない等)やJSONファイルのサイズ(1.3Mbytes)が大きすぎることを問題にしていた(これぐらい許容範囲だとか、正規表現で書けばよいとか圧縮をちゃんとすればよいとか)ため、Hacker News での議論も多方向に拡散してしまっているのですが、主要な問題は偽メールや偽電話でだまそうとしている勢力が簡単に正式な電話番号のリストを入手できるところにあるのではないかなと思います。

発信者番号通知も改竄可能なので、騙す側に改竄するための正しい番号のリストを教えているという話でもあります。このチェッカが正しく理解されていないと、電話を「受けた時」にこのチェッカで正しいとされたから電話の相手を信用してもいいと思ってしまったりしてしまう可能性もあります。

カテゴリー
ネットの事件

‘-‘ という名前の、中身が無いのに70万回ダウンロードされてる謎のnpmパッケージ

という名前の JavaScript/TypeScript パッケージについて警告を発している記事が話題となっています。

このパッケージ、中身はほとんど空で、Readme と、dev で TypeScript を動かせるようにするライブラリ群を呼ぶ箇所だけのもの。

しかし、この “-” を使っている他の npm パッケージが 50個以上あり、約一年前の公開時からのトータルのダウンロード数は72万回にもなります。

しかし、”-” を読み込んでいるパッケージを見てみても、”-” が必要そうには見えません。

警告記事では、この無名のパッケージが密かに使われるようになった原因が、npm コマンドのコマンドラインを打つときのミスタイプにあるのではないかとの仮説を立てています。

つまり、someFlag というオプションを使い

npm i -someFlag somepackage

と打つべきところで、

npm i - someFlag somepackage

と間違ってスペースを入れて実行したことで、”-” というパッケージがインストールされてしまい、その状態からパッケージを作って公開してしまったものが(50個以上)出てしまったのでは、ということです。

実際にわざと間違ってみたところ、someFlag の部分にマッチするnpmパッケージがあれば、特にエラーもなく”-“パッケージが入ってしまいます。

$ npm i - O knock-knock-jokes

added 3 packages, and audited 4 packages in 1s

found 0 vulnerabilities

$ npm ls
test-@ C:\work\temp
├── -@0.0.1
├── knock-knock-jokes@1.7.0
└── O@0.0.9

警告記事を公開した BleepingComputer 社“-“パッケージの作者にこのパッケージを公開した意図を問い合わせをしたが、返答は無かったということです。このパッケージだけを公開している捨てアカウント、という感じでもないのですが。

今のところ”-“パッケージをインストールしたからといって、少しディスクが無駄になる程度のことしか起こりませんが、将来”-“の新バージョンが出た時、新バージョンがどんな内容に置き換わっているかはわかりませんね。

“-” 以外にもコマンドラインのタイプミスで打ちそうなパッケージ名はいろいろありそうで、自分がインストールしたパッケージを確認すること(npm install の通常の出力ではインストールされたパッケージの個数しか出ない)や、npm パッケージを作って配る際に意図しないパッケージに依存していないかを確認することなどが必要そうです。

Hacker News のスレッドでは、”-“パッケージ自身が無意味で、依存することに将来のリスクがあるとしても、npm から単に消すわけにはいかない、という主張もあります。(“-“を実質使ってないのに)”-“に依存してるパッケージのインストールがエラーになるからですね。ちゃんと中身のあるパッケージが消えた時ほどのトラブルではないにしても、多くのCI/CDやデプロイが止まってしまうこともないとは言い切れません。

もし作者が意図してやってるとしたら、あらかじめ間違いそうなドメイン( googel.com とか)のサイトを用意してミスタイプした人を待ち構えるようなスクワッティングにも似た話ですね。”-“パッケージについては(まだ悪意の有無はわかってませんが)刈り取り前だったとしても、既に他の間違いそうなパッケージで意図しないコードが混入しているとかもあるのかもしれません。

via Hacker News