SolarWinds 2020年 ビルドの仕組みに仕込まれた裏口

攻撃者は SolarWinds のビルドのサーバーに道具を置き、Orion を組み立てる間だけソースのファイルを1つ差し替えた。リポジトリのソースは正しいまま、成果物には裏口が入り、会社の鍵で署名されて更新として配られた。ソースを読む点検も、署名の確かめも、これを止めない。

裏口は SUNBURST、差し替えの道具は SUNSPOT と呼ばれる[8][9]。影響は Orion Platform 2019.4 HF 5、2020.2 の修正なし、2020.2 HF 1[4]。悪い版の配布は2020年3月から6月、SolarWinds が知ったのは2020年12月12日[1][2]。署名の証明書は2021年3月8日に失効した[4]。CISA の緊急指令 ED 21-01 は、目的を果たしたとして2026年1月8日に閉じられた[6]。2026年11月時点の公開資料で書いています。

要点

  • SUNSPOT はビルドのサーバーで Orion のビルドを見張り、その間だけソースの1ファイルを裏口入りの物に替え、終わると元に戻した。
  • 裏口入りの部品は SolarWinds の証明書で正規に署名され、更新として配られた。署名は、誰が作ったかを示し、中身の安全を示さない。
  • 悪い版を入れた可能性がある顧客は1万8,000未満、SUNBURST を通じて実際に侵入された顧客は100未満、と SolarWinds は見積もった。
  • 侵入された先では、管理者の権限から SAML の署名の証明書を取り、正規に見えるトークンでクラウドのメールなどへ入った。
  • 根本の守りは、ビルドを別々の環境で並べて作り比べること、ビルドの環境を使い捨てにすること、監視の製品の外への通信を絞ること、認証の基盤を最上位の資産として守ること。

何が起きたか

2019年9月の最初の不審な動き、10月の試し、2020年2月からの差し込み、3月から6月の配布、12月の公表の段 1 入り込む 2019年9月 最初の不審な動き 入口は不明 2 試す 2019年10月 差し込めるか 試しの変更 3 仕込んで配る 2020年2月20日から ビルドに差し込む 3月から6月に配布 4 見つかる 2020年12月12日 SolarWinds へ連絡 13日に公表と指令 2020年6月に攻撃者は自ら差し込みのコードを消した。見つかるのはその半年後 SolarWinds の2021年1月11日の調査の報告による
図1 入り込んでから見つかるまでの段
日付出来事
2019年9月SolarWinds の調査が見つけた、社内の仕組みで最も早い不審な動き[2]。のちに SolarWinds は、10月の試しの少なくとも9か月前から攻撃者が居続けていたと書いた[3]。GAO は2019年1月には侵入が始まっていたと書く[10]
2019年10月この月の Orion の版に、ビルドへコードを差し込めるかを試す変更が入っていた[2]
2020年2月20日差し込みの道具の新しい版が、Orion の版に SUNBURST を入れ始める[2]。SUNSPOT の見本の作成日時もこの日と見られる[9]
2020年3月から6月裏口の入った更新が出る[1]。署名は2020年3月から5月[8]
2020年6月攻撃者が SolarWinds の環境から SUNBURST の差し込みのコードを消す[2]
2020年11月FireEye が自社への侵入を検知し、のちに SolarWinds へ知らせる[11]
2020年12月12日SolarWinds が攻撃を知らされ、顧客への連絡と調査を始める[2]
2020年12月13日FireEye が解析を公表する[8]。CISA が連邦の機関へ緊急指令 ED 21-01 を出し、Orion を切り離すか電源を落とすよう命じる[6]。SolarWinds が約3万3,000の Orion の顧客へ連絡する[1]
2020年12月14日SolarWinds が米国証券取引委員会へ届け出る。入れた可能性のある顧客は1万8,000未満と見積もる[1]
2020年12月17日CISA が注意喚起 AA20-352A を出す。Orion だけが入口ではないと書く[7]
2021年1月11日SolarWinds と CrowdStrike が、差し込みの道具の解析を公表する[2][9]
2021年3月8日SolarWinds の署名の証明書が失効する[4]
2021年4月15日米国政府が、ロシアの対外情報庁 SVR の仕業と公に結びつける[6][7]
2021年5月7日SolarWinds が、SUNBURST で実際に侵入された顧客は100未満と見積もり、ビルドを3つの環境で並べる作りに変えたと公表する[3]
1万8,000は侵入された数ではない

1万8,000未満は、悪い版を入れた可能性がある顧客の見積もりである[1]。SolarWinds は、SUNBURST を通じて実際に侵入された顧客は100未満と見積もった[3]。侵入の始まりは、SolarWinds の調査は2019年9月を最も早い不審な動きとし、GAO は2019年1月とする[2][10]。最初の入口は、SolarWinds も分からないと書き、他社の製品の未知の弱点、パスワードの総当たり、標的型のフィッシングを候補に挙げるだけである[3]。報道で語られる特定のパスワードの話は、これらの資料で入口とされていない。

起きた仕組み

リポジトリのソースは正しいまま、ビルドのサーバーで SUNSPOT がビルドの間だけソースを差し替え、署名された成果物が更新として利用者へ配られる ソースの管理 正しいソース 差分にも何も出ない SolarWinds のビルドのサーバー SUNSPOT MsBuild の起動を見張る 1ファイルを差し替え ビルド 裏口入りで組み立て 終わると元へ戻す 正規の証明書で署名 更新として配る 利用者の環境 Orion のサーバー 最長2週間眠る 外への HTTP 製品の通信に似せる 選んだ相手だけ 人が操作して奥へ
図2 ビルドの最中の差し替えから、利用者の環境での動きまで
段何があったか
ビルドのサーバーSUNSPOT は、Visual Studio のビルドの道具 MsBuild.exe の起動を見張り、Orion のビルドだと分かると、ソースの1ファイルを裏口入りの物へ替え、ビルドが終わると元に戻した。替える前に元のファイルと替えの物のハッシュを確かめ、ビルドが失敗して開発者に気付かれないよう作られていた[9]。
成果物と署名裏口は Orion の部品の1つの DLL に入り、SolarWinds の証明書で署名されていた[8]。SolarWinds は、ビルドの仕組みが侵害された結果として入ったと届け出た[1]。
利用者の環境最長2週間眠ったあと、指令を受けて動く。通信は Orion の改善の計画の通信に似せ、調べた結果を正規の設定のファイルに置いた[8]。
奥への侵入侵入した先では、上げた権限で SAML の署名の証明書を取り、正規に見えるトークンを作ってクラウドのメールなどへ入った。クラウドのアプリの登録に資格情報を足して居座り、新しい連携の信頼を足した[7]。
ソースも署名も正しかった

ソースの管理には裏口が無く、ビルドの間だけ差し替わった。成果物は会社の鍵で署名された。ソースの差分を読む点検は何も拾えず、署名を確かめる利用者は正しいと判断する。ビルドの環境そのものを信じる前提に、穴があった。

CISA は、Orion のほかにも、パスワードの推測、パスワードスプレー、外から届く管理者の資格情報の保護の不足が入口になったと書く[7]。Orion を使っていないことは、同じ攻撃者に入られていないことを示さない。

どこで止められたか

作る側の環境、ビルド、署名、利用者の通信、認証の基盤の5つの段に、それぞれ止める所を置く 作る側の社内 ビルド 署名と出荷 利用者の通信 認証の基盤 1 ビルドの環境へ届く道を断つ 社内の資格情報で届かない所に置く 2 別々の環境で作り比べる 環境は使い捨てにし、一致しなければ出さない 3 一致を確かめてから署名する 署名は確かめた物にだけ付ける 4 監視の製品の外への通信を絞る 決めた相手の他へ出さない 5 署名の鍵と連携の設定を守る 証明書、連携の信頼、アプリの資格情報の変化を見る
図3 段ごとの止める所
止める所この件で限り
ビルドの環境へ届く道を断つ入口は分かっていないが、資格情報を使って居続けた[3]。ビルドのサーバーに道具を置かれた[9]入口を全部ふさぐ前提は立たない。入られた後に成果物で気付ける作りを重ねる
別々の環境で作り比べる差し替えはビルドの間の1台の中だけで起きた[9]。別の環境で同じソースから作れば成果物が食い違うビルドが決定的で、同じ入力から同じ物が出ることが前提。全部の環境が侵されれば一致する
一致を確かめてから署名する裏口入りの成果物が正規に署名された[8]署名の鍵が同じ環境にあれば、確かめを飛ばして署名される
監視の製品の外への通信を絞る裏口は HTTP で外の相手と話した[8]。CISA は Orion の機器の外との通信を止めるよう命じた[6]許した相手に紛れる通信には効かない。更新の取得は決めた宛先へ、別の経路で行う
署名の鍵と連携の設定を守るSAML の署名の証明書を取られ、連携の信頼とアプリの資格情報が足された[7]取られた後は、正規の利用と見分けにくい。CISA は、24時間のような長い有効期間のトークンを不審の手がかりに挙げる[7]

守り方

根本の直し方 作る側
  • ビルドを別々の環境で並べて作り、成果物の一致を確かめてから出す。SolarWinds は、別のビルドの仕組みと別の資格情報を使う3つの環境で並べて作り、互いの完全性を確かめる作りに変えた[3]。
  • ビルドの環境は、1つの仕事を終えたら消える使い捨てにし、成果物を決定的に作れるようにし、全部の段の記録を残す。SolarWinds が2022年に示した新しいビルドの仕組みの4つの柱である[5]。
  • 署名の鍵は、ビルドの環境と分けた所に置き、一致を確かめた成果物にだけ署名する。署名は作った者を示すだけで、中身の安全を示さない。
  • ビルドの仕組みの来歴と固め方の段は、A03 ソフトウェアサプライチェーンの不備 の型3 ビルドと配布の仕組みを乗っ取られる、で扱う。
根本の直し方 使う側
  • 広い権限を持つ監視や管理の製品のサーバーは、外への通信を許可の一覧で絞り、決めた宛先の他へ出さない。
  • SAML の署名の証明書、連携の信頼、クラウドのアプリの登録の資格情報を、最上位の資産として扱う。変化を記録し、警告につなぐ。CISA は、管理者の資格情報の悪用や SAML の悪用が見つかれば、認証の基盤ごと侵されたと見て作り直すよう求める[7]。
  • 入ってきた更新を、信頼した製品だから、署名が正しいから、で通さない。更新のあとの振る舞いを見る。署名と取り込む直前の確かめの考え方は A08 ソフトウェアまたはデータの完全性の不備 にある。

別々の環境で作った成果物を比べる 架空の製品 monitor-agent

sha256sum env-a/monitor-agent-4.2.0.zip env-b/monitor-agent-4.2.0.zip env-c/monitor-agent-4.2.0.zip

# 出力
7d3f0c...e91a  env-a/monitor-agent-4.2.0.zip
b6a2c4...0f57  env-b/monitor-agent-4.2.0.zip   # 1つだけ食い違う。署名へ進めない
7d3f0c...e91a  env-c/monitor-agent-4.2.0.zip
  • 食い違ったら、どちらが正しいかを決めずに出荷を止め、食い違った環境を調べる。
  • 比べられるのは、時刻や作る場所の道筋が成果物に入らない、決定的なビルドだけである。先にビルドを決定的にする。
緩和の策
  • ログを中央に180日以上残す[7]。この件では、仕込みから見つかるまで1年以上かかった。
  • 情報システムと対応の担当のメールが狙われたため、対応の連絡は侵された恐れのある仕組みの外で行う[7]。
  • 侵された恐れのある機器は、メモリと記憶装置を保全してから切り離し、信頼できる元から作り直し、資格情報を回す[6]。
  • Kerberos の要の鍵 KRBTGT のパスワードを2回替える[7]。

参照

  1. Form 8-K SolarWinds Corporation、米国証券取引委員会への届け出、2020年12月14日
  2. New Findings From Our Investigation of SUNBURST SolarWinds、2021年1月11日
  3. An Investigative Update of the Cyberattack SolarWinds、2021年5月7日
  4. SolarWinds Security Advisory SolarWinds、2021年4月6日時点
  5. SolarWinds Unveils New Software Development Process SolarWinds、2022年6月22日
  6. ED 21-01 Mitigate SolarWinds Orion Code Compromise CISA、2020年12月13日、2026年1月8日に終了
  7. AA20-352A Advanced Persistent Threat Compromise of Government Agencies, Critical Infrastructure, and Private Sector Organizations CISA、2020年12月17日、2021年4月15日改訂
  8. Highly Evasive Attacker Leverages SolarWinds Supply Chain to Compromise Multiple Global Victims With SUNBURST Backdoor FireEye、2020年12月13日
  9. SUNSPOT: An Implant in the Build Process CrowdStrike、2021年1月11日
  10. GAO-22-104746 Cybersecurity: Federal Response to SolarWinds and Microsoft Exchange Incidents 米国会計検査院 GAO、2022年1月13日
  11. SolarWinds Cyberattack Demands Significant Federal and Private-Sector Response 米国会計検査院 GAO、2021年4月22日