Microsoft 2023年 個人向けの署名の鍵で企業のメールへ
個人向けのアカウントの署名の鍵が攻撃者の手にあり、それで作った偽のトークンを、企業向けのメールの仕組みが受け入れた。鍵は2016年に作られ、2021年に退く予定のまま回されていなかった。検証は署名だけを見て、どの発行元の鍵かを見ていなかった。どちらか1つが正しければ、企業のメールには届かなかった。
要点
- 攻撃者は、個人向けの Microsoft アカウントの署名の鍵で偽のトークンを作り、Exchange Online の企業のメール箱に入った。22の組織と、関係する503の個人のアカウントに及んだ[4]。
- 個人向けと企業向けの鍵を1つの公開先に並べたのに、検証の部品が鍵の範囲を自動では確かめず、メールの側も発行元の確かめを書いていなかった[3]。
- 鍵は2016年に作られ、2021年3月に退く予定だった。手での回転は2021年に止まり、鍵の古さを知らせる仕組みも無かった[4]。
- 最初に気付いたのは Microsoft ではなく米国務省で、追加の料金の要るメールの読み出しの記録から自作の警告を組んでいた[4]。
- 鍵の入手の経路として Microsoft が2023年9月に挙げたクラッシュダンプの説は、2024年3月に、そうしたダンプは見つかっていないと改められた[3]。
何が起きたか
| 日付 | 出来事 |
|---|---|
| 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]。
通った道筋
| 段 | 何があったか |
|---|---|
| 鍵 | トークンは、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]。入手の経路は不明である。
どう見つかったか
- 国務省は、政府向けの上位の契約で、メールの読み出しの記録を取れていた。この記録は上位の版でなければ取れなかった[4]。
- 国務省は、3年の経験から、メール箱に触れるアプリを全部並べ、普段との違いを警告にする規則を作っていた。過去には誤検知もあったが、調べて悪意のある動きと判断した[4]。
- CISA と FBI の注意喚起は、見つけたきっかけを、普段メール箱を読まないアプリの識別子での読み出しの記録としている[6]。
- 商務省と英国の被害者は上位の記録を持っておらず、Microsoft が記録を有効にしても、その前の動きは見られなかった[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]。
参照
- Microsoft mitigates China-based threat actor Storm-0558 targeting of customer email MSRC、2023年7月11日、9月6日更新
- Analysis of Storm-0558 techniques for unauthorized email access Microsoft Threat Intelligence、2023年7月14日
- Results of Major Technical Investigations for Storm-0558 Key Acquisition MSRC、2023年9月6日、2024年3月12日更新
- Review of the Summer 2023 Microsoft Exchange Online Intrusion Cyber Safety Review Board、2024年3月20日
- Enhanced Monitoring to Detect APT Activity Targeting Outlook Online AA23-193A CISA、FBI、2023年7月12日
- Expanding cloud logging to give customers deeper security visibility Microsoft、2023年7月19日