1 ポイント 投稿者 GN⁺ 2023-11-18 | 1件のコメント | WhatsAppで共有
  • パスワード再設定UIがアカウント確認用に電話番号の一部を表示するため、メールアドレスだけで複数のサービスから番号の断片を集められる
  • サービスごとにPIIのマスキング基準が異なるため、eBay、Paypal、Yahoo、LastPass、Google、Facebook、Twitter、Hotmail、Steamの表示桁数を組み合わせると、米国の10桁電話番号のかなりの部分が明らかになる
  • NANPAとNational Pooling Administrationの公開番号割り当てデータを使うと、市外局番、交換局番号、加入者番号ブロックを基準に候補を大幅に絞り込める
  • AmazonやTwitterのように電話番号でパスワード再設定を開始した際、メールアドレスの一部を表示するサービスは、残った候補番号とマスクされたメールヒントを照合するのに利用できる
  • 電話番号の露出はSIMスワッピング、SS7攻撃、ボイスメール侵害、位置追跡、発信者IDスプーフィングにつながり得るため、復旧ヒントにはPIIの断片ではなく、ユーザーが設定したラベルを表示する方式のほうが安全である

パスワード再設定UIが生んだ情報漏えい

  • 多くのWebサイトのパスワード再設定手順では、メールアドレス入力後に、メールリンク、SMSコード、電話通話コードのような復旧オプションが表示される
  • SMSや電話通話のオプションを表示する際、多くのUIはユーザーが番号を識別できるように電話番号の一部を露出する
  • メールアドレスを知っていれば、複数アカウントのパスワード再設定フローを開始して、電話番号の一部の桁を得られる
  • 問題は、電話番号のような**個人識別情報(PII)**をどうマスクするかについて標準的な方式がなく、実装がサービス開発者の裁量に委ねられている点である
  • Paypalの事例では、パスワード再設定時には先頭1桁と末尾4桁を表示するが、ログイン後の2FAチャレンジでは末尾3桁だけを表示する
    • メールアドレスしか知らない攻撃者には、10桁中5桁が露出する
    • メールアドレスとパスワードを知っている攻撃者には、3桁しか見えない

サービスごとのマスキング差異と組み合わせ効果

  • 複数の人気サイトのパスワード再設定手順を確認し、メールアドレスだけで開始できるか、モバイルベースの再設定をサポートするか、何桁の数字が露出するかを比較した
  • 露出パターンはサービスごとに異なる
    • eBay: 先頭3桁と末尾2桁
    • Paypal: 先頭1桁と末尾4桁
    • Yahoo: 先頭1桁と末尾2桁
    • LastPass: 末尾4桁
    • Google, Facebook, Twitter, Hotmail, Steam: 末尾2桁
  • eBayとLastPassのアカウントを両方持っていれば、メールアドレスだけで10桁電話番号の7桁を知ることができる
  • この組み合わせだけでも、電話番号の推定範囲は10億件から1,000件まで減る

米国の電話番号体系で候補を絞る

  • 米国の電話番号は国番号を除くと3つのフィールドで構成される
    • 市外局番(area code または NPA)
    • 交換局番号(exchange または Central Office Code)
    • 加入者番号(subscriber number)
  • eBayとLastPassの組み合わせで得られる情報は市外局番と加入者番号であり、欠けている3桁は単なる任意の数字ではなく、交換局番号に当たる
  • NANPA は、カナダ、米国とその領土、および一部のカリブ海諸国の公衆電話網番号計画を管理している
  • NANPAは市外局番と対応する交換局番号の一覧を公開データとして提供しており、照会したりパース可能なファイルとして取得できる
  • 市外局番ごとに実際に割り当てられた交換局番号だけを残すと候補が減る
    • サンフランシスコの415市外局番では、可能な交換局番号は1,000件ではなく784件なので、216件を除外できる
    • アラスカの907市外局番では、割り当て済みの交換局番号は625件である
    • タコマの253市外局番では、割り当て済みの交換局番号が458件なので、半分以上を除外できる

加入者番号ブロックまで活用する方法

  • 市外局番と交換局番号だけでなく、加入者番号の一部を基準にしても候補をさらに減らせる
  • National Pooling Administration は番号プーリングを管理しており、割り当て済みブロックに関する公開記録を提供している
  • 番号プーリングは、成長地域で番号を10,000件単位ではなく1,000件単位のブロックで割り当てる方式である
  • たとえば 415-272-XXXX で特定ブロックが 415-272-9XXX だけ割り当てられているなら、415-272-[0-8]XXX は除外し、9XXX だけを候補として残せる
  • この方法により、可能な有効番号を10,000件から1,000件に減らせる

残った候補と逆方向のパスワード再設定

  • タコマ地域の対象がeBayとLastPassのアカウントを持っている場合、まず7桁を収集し、その後NANPAで542件を除外して458件の候補に絞り込める
  • National Pooling Administrationのデータでブロック割り当ての有無を確認すると、例では可能な電話番号候補が445件まで減る
  • 残る候補をさらに減らすため、検索エンジン、piplBeenVerifiedSpokeo、電話番号逆引きサービスのような外部データソースを使える
  • WhitePagesのTwilioアドオンでは、電話番号だけを提供し10セント払えば個人情報を得られた
  • こうした方法は100%信頼できるとは限らないため、同じパスワード再設定フローを逆方向に再利用する

電話番号からメールヒントを得られるサービス

  • AmazonとTwitterは電話番号を入力してパスワード再設定を開始でき、再設定リンクを送るメールアドレスの一部を表示する
  • Amazonはユーザー名の先頭文字と末尾文字、ドメイン全体を表示し、アスタリスクの数からユーザー名の長さも分かる
  • Twitterはユーザー名の先頭2文字とドメインの先頭文字を表示し、アスタリスクの数から長さが分かる
  • 攻撃フローは次のとおり
    • 対象メールアドレスで複数サイトのパスワード再設定を開始し、電話番号の一部を収集する
    • NANPAとNational Pooling Administrationの公開データで、存在しない市外局番、交換局番号、加入者番号ブロックを除外する
    • 残った電話番号候補でパスワード再設定を試し、マスクされたメール文字列を対象メールアドレスと照合する
  • この手順に従えば、一度も電話をかけることなく、メールアドレスに結び付いた10桁の電話番号を得られる

email2phonenumber と phonerator

  • email2phonenumber は、電話番号の一部を入力すると、存在しない市外局番と交換局番号を除去して、可能な有効電話番号の一覧を作るツールである
  • このツールはAmazonとTwitterのパスワード再設定機能を利用して電話番号を代入し、表示されたマスク済みメールアドレスと入力したメールアドレスを照合する
  • リクエストパラメータをランダム化し、ユーザー行動を模倣し、プロキシサーバーの利用もサポートする
  • AmazonとTwitter以外にも電話番号ベースのパスワード再設定をサポートするサービスは複数あり、このツールは追加サービス対応の pull request を受け付ける予定だった
  • phonerator は国別の電話番号体系データを集めて可能な番号一覧を生成するオンラインサービスとして計画され、その後公開された
    • 多国対応、より多くの詳細情報、過去記録、高度なフィルタを提供する方向である
    • 通信事業者、地域、番号保有期間のような情報が分かれば、候補をさらに絞るのに使える

電話番号が短い国でさらに大きくなる問題

  • 米国の番号を中心に扱っているが、他国の電話番号体系では同じマスキングでもより多くの情報を露出し得る
  • スペインの携帯電話番号は6で始まり、近年は7も使われており、全体の長さは9桁である
  • eBayやLastPassのようなサービスが短い番号向けにマスキングを減らさない場合、スペインの対象ではLastPassだけでも9桁中5桁を知ることができる
  • Iceland、Estonia、San Salvador のように7桁電話番号を使う国では、eBay顧客の7桁中5桁がメールアドレスしか知らない相手に露出し得る
  • eBayとLastPassのアカウントを組み合わせると、このような国ではメールアドレスだけで電話番号全体を得られる

電話番号の把握がつながる攻撃

  • 電話番号を知ることができれば、さまざまなセキュリティ・プライバシー攻撃の出発点になり得る
  • 可能な攻撃ベクトルは次のとおり
    • SIMスワッピング: ソーシャルエンジニアリング、脅迫、通信事業者の内部関係者などを通じて番号を攻撃者のSIMへ移し、パスワード再設定や2FA回避に利用する
    • SS7攻撃: 通信事業者間の相互接続に使われる古いプロトコルを悪用し、位置追跡や通信傍受が可能であることが複数のセキュリティカンファレンスで実演されている
    • ボイスメール攻撃: ボイスメール侵害がアカウントセキュリティに影響し得る
    • 位置追跡: 電話番号ベースの位置追跡問題は別途取り上げられてきた
    • 発信者IDスプーフィング: オンラインサービスで発信番号を偽装し、ソーシャルエンジニアリングに使える

提案された緩和策と公開対応

  • PIIの一部を見せるマスキングだけでは不十分である
  • 電話番号が短い国では、同じ桁数のマスキングでもより大きな割合の情報を露出する
  • メールアドレスでもユーザー名だけを隠す方式では不十分であり、ドメインは勤務先、TLDは学生かどうかや国などの情報を明らかにし得る
  • 代替案は、ユーザーにメールアドレスや電話番号へラベルを設定させる方式である
    • 例: personal email, work phone
    • パスワード再設定ヒントにはPIIの断片ではなくラベルを表示する
  • ユーザーは本当に必要でない限り電話番号を提供しないほうがよく、必要な場合は Google Voice のような仮想番号や別SIMの使用を検討できる
  • 責任ある公開プロセスの中で、2桁より多く見せる、または市外局番・交換局番号を含めて露出するサービスに連絡した
    • LastPass は末尾2桁だけを表示するようマスクを更新した
    • eBay は先頭1桁と末尾2桁を表示する方式に変わったが、完全ではない
    • Yahoo は当時、リスクと緩和策を検討中だった
    • Paypal はメールアドレスしか知らない相手に5桁を見せる動作を意図された設計と見なし、対応しないことにした

1件のコメント

 
GN⁺ 2023-11-18
Hacker News のコメント
  • 半分詐欺師のような人物から自動車部品を買ったが、代金は何週間も受け取ったまま、注文した品を全部は送ってこなかった。
    複数のプラットフォームでやり取りしているうちに、それぞれのプラットフォームが身元の断片を少しずつ明かしていて、あれこれ突き合わせると全体がつながった。
    その人物が売っていた部品と同じ業界の勤務先に電話して、部品を送ってほしいと伝え、彼の雇用主がこの販売に関与しているのかも軽く尋ねたところ、すぐに態度が変わり、翌日には買った品すべてと、いくつかのおまけまで送ってきた。

    • 読み返してみると、雇用主の話を持ち出した部分のせいで、彼が会社から部品を盗んだと疑ったと解釈されたようだが、そうではなかった。
      ただ圧力をかけるポイントが必要だっただけだ。
  • 記事で抜けている要素の一つは、米国限定ではあるが CNAM データベースだ。
    CNAM は通信事業者が「+1 (555) 123-4567」の代わりに「SMITH JOHN」のような文字列の発信者 ID を表示する際に使うデータベースだ。
    照会は無料ではないが、数百件程度の番号なら比較的安く処理する方法があるはずで、名前とメールアドレスが似ていることも多いので、最もそれらしい候補を選ぶアルゴリズムも作れる。
    データが興味深い形で間違っていることも多いが、それでもかなり有用だ。

    • curl で Twilio の Lookup API を呼び出せばよい。
      /usr/local/bin/curl -s -X GET "https://lookups.twilio.com/v1/PhoneNumbers/…; -u $accountsid:$authtoken | /usr/local/bin/jq '.'
      費用は正確には覚えていないが、照会 1 件あたり 1 セントくらいかもしれず、通信事業者や携帯電話/固定電話の別も表示してくれる。
    • 少なくとも T-Mobile の顧客画面では、回線ごとにこの値を好きなように設定できる [1]。
      CNAM を変更したあと Twilio の番号照会で確認してみた。原則として実在する人名を使うべきだが、実質的には良心システムだ。
      [1] https://www.t-mobile.com/support/tutorials/device/app/ios/to...
      [2] https://www.twilio.com/code-exchange/lookup
    • 可能なら、なぜこれを個人の SSN に紐づけないのか気になる。
  • メールアドレスには実名を使っていて、電話番号も複数の電話帳に公開されている。
    スウェーデンでは、別途拒否しなければ住所と電話番号が検索可能な形で公開されるのが標準的な慣行で、80年代の電話帳に載っていた情報が90年代にオンラインへ移ったようなものだ。
    こうした公開個人情報は有用なこともあるが、悪用されることもある。
    ただし SSN、住所、電話番号、誕生日のような公開 PIIが多いため、むしろ人々はこの情報を秘密のように扱う必要がなくなり、いくつかの数字を知っているだけで他人になりすましやすくならないよう、きちんとした身分証と eID が必要になる。
    誰かが私の電話番号を知りたいなら、姓と名の入ったメールアドレスを使って検索サイトで同姓同名の100人を見つけ、都市とおおよその年齢さえ分かれば、候補を数人まで絞り込める。
    公開記録には誕生日、車、所得、同じ住所に登録されている人まで出てくるので、スウェーデンでオープンソース情報を収集するのは難しくない。

  • PayPal が、メールアドレスしか知らない相手に市外局番を含む5桁の数字を見せ、逆に攻撃者が対象のパスワードを知っている場合は3桁しか見せないというのは驚きだ。
    これを「意図どおりに動作している」と見なして対処しないのも奇妙だ。
    詐欺師たちが LinkedIn からどうやって番号を得ているのか、あるいは別の情報源の番号とどう結び付けているのか気になるし、ある会社では従業員が偽 CEO からのSMSに繰り返し引っかかっている。

    • この記事が2019年のものだと今になって気づいたが、PayPal では文字どおり今でも動作する。
    • おそらくプロフィールに電話番号が見えているか、メールアドレスを見て Facebook のような別のプラットフォームで番号を見つけた可能性が高い。
  • サービスごとに別々のメールアドレスと Google Voice 番号を使う手間は、結局報われた。

    • Gmail の + 機能を使って混ぜたアドレスを作るメールランダム生成ツールを作った。
      外部サービスには gary+FqZWMK@gmail.com のように見え、自分のメールボックスでは FqZWMK を Netflix のようなサービス名に変換して、整理済みフォルダを自動生成する。
      マッピングを完全に自分で制御できるので、複数のランダムアドレスを一定時間後に自動でスパム扱いされる「使い捨て」受信箱へ送ることもできる。
    • まだこうしておらず、簡単な解決策が欲しいなら Firefox Relay がある。
  • 2枚目のSIMを使うには、米国ではまだ比較的ニッチなデュアルSIM端末が必要になる
    VoIP番号は多くのサイトが照会してブロックする一方、Androidにはまだ、デスクトップでキャリアのSMSをきちんと送受信する良い方法がない
    Google MessagesのWebインターフェースは端末を忘れる頻度が高すぎて本格的には使いにくく、後からVoIPブロックが追加されると、SMSの二要素認証まで遮断されてアカウントを再び使えなくなるという鶏と卵の問題が起きかねない
    Harris Teeterの薬局のように、番号が実際に到達可能か確認しないサービスもあり、VoIP番号自体は受け付けるものの、システムが電話やSMSを送れず処方箋の通知を受け取れなくなる

    • Linuxユーザーなら、KDE ConnectがSMSやそれ以上の用途に最適なデスクトップインターフェースだ
      携帯電話とノートPCの相互作用のしかたを変えてくれたし、個人的に最も好きなオープンソースプロジェクトかもしれない
      ノートPCをキーボードのように使ったり、通知を送るどんなアプリのメッセージにも返信したり、ファイルを他のどの方法よりも速くうまく送ったりできる
    • 結局、プリペイドSIMと小さなフィーチャーフォンを買って、二要素認証専用に使っている
      昔のパスワードカードのような2FA端末くらいの大きさで、最初のきっかけは、共有アカウントのセキュリティコードを受け取るために妻が私の実際の携帯電話をしょっちゅう持っていくことだった
      実際の電話番号を使うより、運用上のセキュリティも少し良くなる
    • あるいはeSIM対応端末であればよく、まず2018年以降のすべてのiPhoneが該当する
    • eBayはGoogle Voice番号をブロックしない
      私の経験では、ブロックするサイトはDiscordくらいだった
      個人的には、アカウントごとにebpnw@mydomain.comのような、あまり分かりやすくない専用メールアドレスを使い、攻撃者がメールアドレスまで当てなければならないようにする方を好む
    • Google Voice番号は、AT&Tから移行してきた番号であっても検出されることがあり、Twilio APIはそれをGoogle Voiceとして表示する
      デュアルSIMのiPhoneは、iPhone XS、iPhone XS Max、iPhone XRから利用できる
      出典: https://support.apple.com/en-us/HT209044
      少なくとも1つのeSIMを搭載したデュアルSIM iPhoneは、すでに6世代ある
  • このような調整されていない情報漏えいは、より深い問題だ
    多くの場所がSSNの下4桁を共有しているが、先頭5桁は誕生日と出生州から容易に推測できることが多く、先頭部分の数字は番号が発行された州を示していた

    • 2011年以前に発行された番号にのみ当てはまる
      現在の成人の大半は含まれるが、それでも区別しておく必要がある
    • 核心的な問題は、9桁の数字を知っているだけで実害を与えられる、まったく愚かなシステムを抱えていることにある
      政府や大組織による追跡とデータ収集はまったく防げず、重要なことをするたびに事実上の場当たり的な国民IDシステムと関わり続けなければならない一方で、ちゃんとした国民IDシステムの利点は何一つない
      何の理由もなく、とてつもない苦痛と時間の浪費が生じている
    • 多くの人の下4桁は、文字どおり母親の出生年である場合もある
  • このブログ記事のような自動化されたメールアドレス→電話番号生成ツールを、セキュリティ研究者が公開することをどう正当化しているのか、いつも気になっていた
    こうしたツールは、良い用途よりも悪い、あるいは不気味な用途の方がはるかに多い可能性が高い
    「研究」だから問題なく、どうせグレーゾーンだから見過ごされるということなのか、脆弱性を露呈した企業と話をして、今は無力化されたから大丈夫だと感じているのか、疑問だ

    • この種の公開の目的は、パスワードリセット過程で漏れるデータを減らすよう、企業に穴を塞がせることだと思う
      良い例がFiresheepで、公共Wi-Fi上でFirefoxプラグインを実行するだけで、HTTPでログインしていた同じネットワーク上のユーザーのセッションをすぐに取得できた
      当時FacebookはデフォルトがHTTPで、このプラグインがニュースになると、ほぼ一夜にしてHTTPSを必須にするよう圧力がかかり、多くの企業が後に続いた
      この公開がHTTPS導入をかなり前倒ししたと見ても無理はない
      今回の公開がそこまでの影響力を持つかは分からないが、こうした手法をブラックハットだけが知っているよりはましだと思う
    • メディアが一部の当事者に否定的な結果をもたらす記事を報じるのと似ている
      「この情報を公開したとき、害よりも利益の方が大きいか?」を考えることができる
      Martin Vigoが2019年に公開した情報のおかげで、雇用主や現在の顧客に対し、パスワードリセット方式を決める際に考慮すべき追加の脅威モデルを伝えられた
      擁護するとすれば、もともと公開された概念実証はかなり限定的な形で、Twilioアカウントが必要なため参入障壁があり、犯罪に使われれば分析担当者に手掛かりも残る
    • 知識の公開にはそれなりに倫理的根拠があるが、ツールの公開にはそうは思わない
      サイバーセキュリティに入ってくる人のかなりの割合は、実際に他人を安全にする手助けをしたいというより、巧妙な方法でセキュリティを破るのが好きだから入ってくる、というのは公然の秘密のように思える
      ただし、セキュリティ研究は合法で、無差別な対象へのハッキングは違法だ
    • 経営陣に会社のセキュリティ態勢を更新すべきだと説得するとき、すぐ実行できるデモほど効果的なものはめったにない
    • 悪い側はすでにこうした手法や無数の他の脆弱性を知っているのだから、業界の汚れた内情を公開して恥をかかせてでも動かすのは構わないと思う
      法的措置が起きたとき、企業が知らなかったと抗弁するのも難しくなる