Microsoft 2023年 個人向けの署名の鍵で企業のメールへ

個人向けのアカウントの署名の鍵が攻撃者の手にあり、それで作った偽のトークンを、企業向けのメールの仕組みが受け入れた。鍵は2016年に作られ、2021年に退く予定のまま回されていなかった。検証は署名だけを見て、どの発行元の鍵かを見ていなかった。どちらか1つが正しければ、企業のメールには届かなかった。

攻撃者は Microsoft が Storm-0558 と呼ぶ、中国を拠点とすると評価された集団[1]。Microsoft は2023年7月までに鍵を替え、検証の誤りを直し、顧客の側の対応は要らないとした[1][2]。米国のサイバー安全審査会 CSRB は2024年3月20日付の報告で、鍵がどう取られたかは分かっていないとした[4]。2026年11月時点の公開資料で書いています。

要点

  • 攻撃者は、個人向けの Microsoft アカウントの署名の鍵で偽のトークンを作り、Exchange Online の企業のメール箱に入った。22の組織と、関係する503の個人のアカウントに及んだ[4]。
  • 個人向けと企業向けの鍵を1つの公開先に並べたのに、検証の部品が鍵の範囲を自動では確かめず、メールの側も発行元の確かめを書いていなかった[3]。
  • 鍵は2016年に作られ、2021年3月に退く予定だった。手での回転は2021年に止まり、鍵の古さを知らせる仕組みも無かった[4]。
  • 最初に気付いたのは Microsoft ではなく米国務省で、追加の料金の要るメールの読み出しの記録から自作の警告を組んでいた[4]。
  • 鍵の入手の経路として Microsoft が2023年9月に挙げたクラッシュダンプの説は、2024年3月に、そうしたダンプは見つかっていないと改められた[3]。

何が起きたか

2016年の鍵の作成、2018年の共通の公開先、2021年の回転の停止と社内への侵入、2022年のメールの切り替え、2023年5月の侵入と6月の発見 2016年 鍵を作る 2018年9月 共通の公開先 2021年 回転を止める 2022年 メールが移る 2023年5月15日 メールに入る 2021年4月 社内に侵入 2023年6月16日 国務省が通報 上は鍵と検証の積み重ね。下は攻撃者の動きと発見
図1 7年かけて重なった条件と、侵入から発見まで
日付出来事
2016年Microsoft が、のちに使われる個人向けの署名の鍵を作る[4]
2018年9月個人向けと企業向けの鍵の情報を1つの公開先で出す仕組みを入れる。検証の API は出したが、鍵の範囲を自動で確かめるよう部品を直さなかった[3]
2021年3月この鍵が退く予定だった時期。個人向けの鍵の仕組みを固める作業の難しさから遅れた[4]
2021年4月から8月Storm-0558 が、買収した会社から来た技術者のアカウントを通じて Microsoft の社内網に入っていた。Microsoft はこれが2023年の件につながったとみるが、特定の証拠は出していない[4]
2021年手での回転が大きな障害につながったことを受け、個人向けの鍵の回転を止める[4]
2022年メールの仕組みが共通の公開先を使い始める。開発者は部品が検証を全部済ませると思い込み、発行元と範囲の確かめを書かなかった[3]
2023年5月15日Storm-0558 がメールのアカウントへのアクセスを始める[1]。CSRB は、記録の保存が30日だったため、始まりはもっと前かもしれないと書く[4]
2023年6月15日、16日国務省の監視の班が異常に気付き、翌16日に自作の警告が複数鳴り、Microsoft へ連絡する[4]。Microsoft はこの報告で調査を始める[1]
2023年6月26日Microsoft が、攻撃者が自社の仕組みの発行していないトークンでメールを読んでいたと突き止める[4]
2023年6月27日Outlook のウェブ版で、この鍵で署名したトークンを止める[2]
2023年6月29日個人向けの署名の鍵を替え、その時に有効だった鍵を全部取り消し、企業向けと同じ鍵の保管先へ移す[2]
2023年7月11日MSRC が公表する。影響は政府機関を含むおよそ25の組織[1]
2023年7月12日CISA と FBI が、メールの読み出しの記録で見つける方法を共同で出す[6]
2023年7月19日Microsoft が、メールの読み出しの記録を含む30種を超える記録を、追加の料金の要らない版でも出すと発表する。9月から順に出す[7]
2023年9月6日MSRC が、鍵の入手について最も可能性の高い経路を公表する[3]
2024年3月12日同じ記事に、鍵を含むクラッシュダンプは見つかっていないと書き足す[3]
2024年3月20日CSRB が報告をまとめる。この侵入は防げたもので、起きるべきではなかったと結論する[4]
  • CSRB によれば、攻撃者は国務省だけでおよそ6万通のメールを取った[4]。Microsoft の最初の公表のおよそ25の組織は、CSRB の報告では22の組織と503の個人のアカウントになった[1][4]。
  • 鍵を使えなくした日は資料で違う。CSRB は6月24日に鍵を無効にしたと書き、Microsoft の7月14日の分析は、6月27日にウェブ版で止め、6月29日に鍵を替えたと書く[4][2]。

通った道筋

攻撃者が個人向けの鍵で作ったトークンを、共通の公開先に個人向けと企業向けの鍵が並ぶ検証が受け入れ、企業のメール箱に届く。発行元と鍵の範囲を確かめれば拒める 攻撃者 個人向けの鍵 2016年の鍵で署名 偽造 メールの検証 一覧の鍵で署名が 正しければ通す 企業のメール箱 国務省、商務省を含む 22の組織 鍵を取りに行く 共通の公開先。2018年から 個人向けの鍵 企業向けの鍵 止める所 トークンの発行元と、署名した鍵の発行元が一致するか。個人向けの鍵は企業の宛先に使えない
図2 個人向けの鍵の署名が、企業のメールの検証を通った道筋
段何があったか
鍵トークンは、Microsoft が2016年に作った個人向けの署名の鍵で署名されていた。この鍵は Outlook の個人向けのウェブ版で使えるトークンだけに使えるはずで、2023年には新しいトークンの署名に使われていないはずだった[4]。
公開先2018年9月から、個人向けと企業向けの鍵の情報を1つの公開先で出していた。検証の API は出したが、部品が鍵の範囲を自動で確かめるようには直していなかった[3]。
検証2022年にメールの仕組みが共通の公開先を使い始めた時、開発者は部品が検証を全部済ませると思い込み、発行元と範囲の確かめを書かなかった。こうして企業のメールが個人向けの鍵で署名したトークンを受け入れた[3]。
届いた先攻撃者は偽のトークンで Outlook のウェブ版から Exchange Online のメールに入った。侵入の後の動きは、狙った利用者のメールの読み出しと持ち出しに限られた[2]。
届き得た先CSRB は、この鍵が、Microsoft の ID の基盤に頼り、トークンを正しく確かめない他の Microsoft と他社のアプリにも使えた可能性を挙げる[4]。
クラッシュダンプの説は確かめられていない

2023年9月6日の MSRC の記事は、2021年4月の署名の仕組みの異常終了で鍵がダンプに入り、それが社内の調べの場所へ移され、侵入された技術者のアカウントから取られた、という経路を最も可能性が高いとした[3]。この説明は広く引かれているが、2024年3月12日の追記で、鍵を含むダンプは見つかっていないと改められた[3]。CSRB は、Microsoft は鍵がいつどう取られたかを知らないと結論し、記事の誤りを2023年11月に認めながら直すまで4か月かかったことを指摘した[4]。入手の経路は不明である。

どう見つかったか

国務省は、追加の料金の要る版でだけ取れたメールの読み出しの記録から、普段メールを読まないアプリの読み出しを警告にしていた 読み出しの記録 誰がどのアプリで メールを読んだか 普段との比べ メールを読むアプリの いつもの一覧 自作の警告 見たことの無い アプリの読み出し 記録は上位の契約でだけ取れた。多くの被害者は持っておらず、後から過去の分を見られなかった
図3 国務省が気付いた仕組み
  • 国務省は、政府向けの上位の契約で、メールの読み出しの記録を取れていた。この記録は上位の版でなければ取れなかった[4]。
  • 国務省は、3年の経験から、メール箱に触れるアプリを全部並べ、普段との違いを警告にする規則を作っていた。過去には誤検知もあったが、調べて悪意のある動きと判断した[4]。
  • CISA と FBI の注意喚起は、見つけたきっかけを、普段メール箱を読まないアプリの識別子での読み出しの記録としている[6]。
  • 商務省と英国の被害者は上位の記録を持っておらず、Microsoft が記録を有効にしても、その前の動きは見られなかった[4]。

どこで止められたか

鍵の寿命、鍵の保管、鍵の範囲、トークンの検証、発行の記録、利用者の記録の6つの段に止める所を置く 鍵の寿命 鍵の保管 鍵の範囲 トークンの検証 発行の記録 利用者の記録 1 自動で回し、古い鍵を警告する 回っていれば2016年の鍵は2023年に効かない 2 隔てた保管庫に置く 鍵を外へ出さず、触れた記録を長く残す 3 鍵の効く範囲を狭める 個人向けと企業向けを混ぜない。顧客ごとの鍵 4 発行元と範囲を確かめる 部品の既定に任せず、確かめを試験で縛る 5 発行していないトークンを見分ける 発行を記録し、記録に無いトークンを拒む 6 記録を既定で出す この件で実際に効いたのはここだけ
図4 段ごとの止める所
止める所この件で限り
自動で回し、古い鍵を警告する個人向けの鍵の回転は手で、まれにしか行われず、2021年に止まった。鍵の古さを知らせる仕組みも無かった。CSRB は、回していれば、自動にしていれば、古さの警告があれば、2016年の鍵は2023年に有効でなかったと書く[4]回しても、有効な間に取られた鍵は使える。回転は被害の期間を区切る
隔てた保管庫に置くMicrosoft は6月29日に、個人向けの鍵を企業向けと同じ保管先へ移した[2]。CSRB は、HSM などの隔てた仕組みで鍵を外へ出さないことを挙げる[4]CSRB は、規模によっては従来の HSM が合わない場合もあると認め、鍵を外へ出す回数を最小にする考え方を求めた[4]
鍵の効く範囲を狭める1つの鍵が、個人向けの全部と、検証の誤りを通じて企業の顧客のトークンも署名できた[4]鍵を分けても、検証が範囲を見なければ同じことが起きる
発行元と範囲を確かめる部品が範囲を自動で確かめず、メールの側も確かめを書かなかった[3]。Microsoft は部品を直し、範囲の確かめを自動にした[3]アプリごとに違う検証の部品を使っていたため、直すのも複雑になった、と CSRB は書く[4]
発行していないトークンを見分けるMicrosoft の仕組みは、自分が発行していないトークンを受け入れた。CSRB は、発行を記録して照合する作りや、偽造を見分けられる情報を入れる作りを挙げる[4]外部のアプリが ID の基盤を使う場合、発行の記録との照合はできない、と CSRB は注記する[4]
記録を既定で出す見つかったのは、国務省が上位の契約で記録を持ち、自作の警告を組んでいたからだった。CSRB は、事業者が顧客のデータへのアクセスを追加の料金なしで記録し、既定で6か月保つよう求めた[4]記録があっても、読み解いて警告にする人がいなければ見つからない。CSRB は、この記録を細かく分析する組織は少ないと書く[4]

守り方

根本の直し方
  • トークンは、アルゴリズム、発行元、宛先、範囲、期限をすべて確かめてから使う。署名が正しいことは、発行元の鍵で署名されたことしか示さない。作り方は A07 認証の不備 のトークンの宛先の節にある。
  • 1つの鍵の一覧に複数の発行元の鍵を並べるなら、鍵ごとに発行元を持たせ、トークンの発行元と、署名した鍵の発行元が一致することを確かめる。
  • 検証を部品の既定に任せない。発行元の違うトークン、宛先の違うトークン、期限の切れたトークンを拒むことを、試験で確かめる。
  • 署名の鍵は自動で回し、回転の仕組み自体を監視する。有効な鍵の年齢に上限を置き、超えたら警告する[4]。
  • 鍵は隔てた保管庫か HSM に置き、外へ出さない。鍵の仕組みへのアクセスは全部記録し、鍵を使っていた間と、その後少なくとも2年は残す[4]。鍵の扱いは A04 暗号化の不備 の型4にある。

悪い例と直した例。架空の ID の基盤が、個人向けと企業向けの鍵を1つの一覧で出す場合

// https://id.example.com/common/keys の中身。2つの発行元の鍵が並ぶ
// { "keys": [ { "kid": "p16", "iss": "https://id.example.com/personal" },
//             { "kid": "e24", "iss": "https://id.example.com/org" } ] }

// 悪い例 一覧にある鍵で署名が正しければ通す
const key = keys.find((k) => k.kid === header.kid);
const claims = jwt.verify(token, toPem(key));

// 直した例 企業の宛先は企業の発行元の鍵だけを受け、発行元と宛先を確かめる
const ORG = "https://id.example.com/org";
const key = keys.find((k) => k.kid === header.kid && k.iss === ORG);
if (!key) throw new Unauthorized();
const claims = jwt.verify(token, toPem(key), {
  algorithms: ["RS256"],
  issuer: ORG,
  audience: "https://mail.example.com",
});
  • 鍵の選び方とトークンの発行元の確かめは、組で効く。どちらか一方だけなら、もう一方の誤りで崩れる。
  • この形の誤りを見つける試験は、別の発行元の鍵で正しく署名したトークンを作って送り、拒まれることを確かめるもの。署名の誤ったトークンを拒む試験では見つからない。
緩和の策
  • メール箱の読み出しの記録を取り、メールを読むアプリの普段の一覧と比べて警告にする。国務省と CISA の注意喚起の方法による[4][6]。記録の設計は A09 セキュリティログとアラートの不備 にある。
  • クラウドの事業者を選ぶときに、どの記録が既定で出るか、何日残るかを契約で確かめる。後から有効にしても、過去の分は取れない[4]。
  • 買収した会社の端末とアカウントは、社内網へつなぐ前に侵害の有無を調べる。CSRB によれば、Microsoft は、2021年の侵入が、買収の前に侵害されたとみられる技術者の端末から始まったと考えている[4]。
  • 事故の公表のあとで分かったことが変われば、元の記事を早く直す。CSRB は、誤りと分かって4か月直さなかったことを結論の理由の1つに挙げた[4]。

参照

  1. Microsoft mitigates China-based threat actor Storm-0558 targeting of customer email MSRC、2023年7月11日、9月6日更新
  2. Analysis of Storm-0558 techniques for unauthorized email access Microsoft Threat Intelligence、2023年7月14日
  3. Results of Major Technical Investigations for Storm-0558 Key Acquisition MSRC、2023年9月6日、2024年3月12日更新
  4. Review of the Summer 2023 Microsoft Exchange Online Intrusion Cyber Safety Review Board、2024年3月20日
  5. Enhanced Monitoring to Detect APT Activity Targeting Outlook Online AA23-193A CISA、FBI、2023年7月12日
  6. Expanding cloud logging to give customers deeper security visibility Microsoft、2023年7月19日