SolarWinds 2020年 ビルドの仕組みに仕込まれた裏口
攻撃者は SolarWinds のビルドのサーバーに道具を置き、Orion を組み立てる間だけソースのファイルを1つ差し替えた。リポジトリのソースは正しいまま、成果物には裏口が入り、会社の鍵で署名されて更新として配られた。ソースを読む点検も、署名の確かめも、これを止めない。
要点
- SUNSPOT はビルドのサーバーで Orion のビルドを見張り、その間だけソースの1ファイルを裏口入りの物に替え、終わると元に戻した。
- 裏口入りの部品は SolarWinds の証明書で正規に署名され、更新として配られた。署名は、誰が作ったかを示し、中身の安全を示さない。
- 悪い版を入れた可能性がある顧客は1万8,000未満、SUNBURST を通じて実際に侵入された顧客は100未満、と SolarWinds は見積もった。
- 侵入された先では、管理者の権限から SAML の署名の証明書を取り、正規に見えるトークンでクラウドのメールなどへ入った。
- 根本の守りは、ビルドを別々の環境で並べて作り比べること、ビルドの環境を使い捨てにすること、監視の製品の外への通信を絞ること、認証の基盤を最上位の資産として守ること。
何が起きたか
| 日付 | 出来事 |
|---|---|
| 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 は、Visual Studio のビルドの道具 MsBuild.exe の起動を見張り、Orion のビルドだと分かると、ソースの1ファイルを裏口入りの物へ替え、ビルドが終わると元に戻した。替える前に元のファイルと替えの物のハッシュを確かめ、ビルドが失敗して開発者に気付かれないよう作られていた[9]。 |
| 成果物と署名 | 裏口は Orion の部品の1つの DLL に入り、SolarWinds の証明書で署名されていた[8]。SolarWinds は、ビルドの仕組みが侵害された結果として入ったと届け出た[1]。 |
| 利用者の環境 | 最長2週間眠ったあと、指令を受けて動く。通信は Orion の改善の計画の通信に似せ、調べた結果を正規の設定のファイルに置いた[8]。 |
| 奥への侵入 | 侵入した先では、上げた権限で SAML の署名の証明書を取り、正規に見えるトークンを作ってクラウドのメールなどへ入った。クラウドのアプリの登録に資格情報を足して居座り、新しい連携の信頼を足した[7]。 |
ソースも署名も正しかった
ソースの管理には裏口が無く、ビルドの間だけ差し替わった。成果物は会社の鍵で署名された。ソースの差分を読む点検は何も拾えず、署名を確かめる利用者は正しいと判断する。ビルドの環境そのものを信じる前提に、穴があった。
CISA は、Orion のほかにも、パスワードの推測、パスワードスプレー、外から届く管理者の資格情報の保護の不足が入口になったと書く[7]。Orion を使っていないことは、同じ攻撃者に入られていないことを示さない。
どこで止められたか
| 止める所 | この件で | 限り |
|---|---|---|
| ビルドの環境へ届く道を断つ | 入口は分かっていないが、資格情報を使って居続けた[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
- 食い違ったら、どちらが正しいかを決めずに出荷を止め、食い違った環境を調べる。
- 比べられるのは、時刻や作る場所の道筋が成果物に入らない、決定的なビルドだけである。先にビルドを決定的にする。
緩和の策
参照
- Form 8-K SolarWinds Corporation、米国証券取引委員会への届け出、2020年12月14日
- New Findings From Our Investigation of SUNBURST SolarWinds、2021年1月11日
- An Investigative Update of the Cyberattack SolarWinds、2021年5月7日
- SolarWinds Security Advisory SolarWinds、2021年4月6日時点
- SolarWinds Unveils New Software Development Process SolarWinds、2022年6月22日
- ED 21-01 Mitigate SolarWinds Orion Code Compromise CISA、2020年12月13日、2026年1月8日に終了
- AA20-352A Advanced Persistent Threat Compromise of Government Agencies, Critical Infrastructure, and Private Sector Organizations CISA、2020年12月17日、2021年4月15日改訂
- Highly Evasive Attacker Leverages SolarWinds Supply Chain to Compromise Multiple Global Victims With SUNBURST Backdoor FireEye、2020年12月13日
- SUNSPOT: An Implant in the Build Process CrowdStrike、2021年1月11日
- GAO-22-104746 Cybersecurity: Federal Response to SolarWinds and Microsoft Exchange Incidents 米国会計検査院 GAO、2022年1月13日
- SolarWinds Cyberattack Demands Significant Federal and Private-Sector Response 米国会計検査院 GAO、2021年4月22日