SolarWinds型攻撃とは何か? buildを汚染して全員に到達する
SolarWinds型攻撃は、buildパイプラインを侵害して正当に署名されたソフトウェア更新にバックドアを注入し、それが信頼されるコードとしてすべての顧客に到達します。
2020年のSolarWinds事件は、業界がサプライチェーンセキュリティについて考える方法を作り変えました。攻撃者は顧客に直接侵入したのではなく、信頼されるベンダーのbuildパイプラインを侵害し、build中にソフトウェアへバックドアを忍び込ませました。結果として生じた更新は署名され通常のチャネルで配布されたため、何千もの組織が信頼できる更新としてバックドアをインストールしました。
攻撃の構造
- 攻撃者がベンダーのbuild環境へのアクセスを獲得した。
- ソースではなくbuild中に悪意のあるコードを注入した。
- 改ざん済みartifactが署名され正当なものとしてreleaseされた。
- 顧客が通常の更新を通じて汚染された更新をインストールした。
なぜこれほど効果的だったのか
悪意のあるコードはソースリポジトリに一度も現れなかったため、ソースレビューでは捕捉できませんでした。それはソースとartifactの間、つまりbuildで挿入されました。そして最終artifactが適切に署名されていたため、署名を信頼するdownstreamのすべてのチェックがバックドアも信頼してしまいました。
教訓: ソースだけでなくbuildを信頼せよ
ソースコードを検証するだけでは不十分です。artifactがそのソースから改ざんされていないプロセスでbuildされたことを検証しなければなりません。これはまさに来歴とattestationが埋めるギャップです。バイナリがソースと一致し、buildが破壊工作を受けていないことを証明できるようにします。
これに対処する防御策
署名付き来歴はartifactを実際のソースとbuildに結びつけます。再現可能なbuildは、同じソースが同じバイナリを生むことを独立した当事者が確認できるようにします。堅牢化された分離済みのbuild環境は、build途中でのコード注入をはるかに困難にします。SLSAフレームワークはまさにこの脅威によって形作られました。
build環境の保護
中核となる防御は、build環境自体を侵害しにくく、改ざんが明らかになるようにすることです。分離されたエフェメラルなランナー (Latchkeyのような) は、各buildに新しい封じ込められた環境を与え、SolarWinds型攻撃者が破壊工作の対象とする長命で特権的なbuildインフラを縮小します。
重要なポイント
- SolarWinds型攻撃は、ソースではなくbuild中にバックドアを注入します。
- 適切に署名された改ざん済みartifactは、ソースレビューと署名への信頼をすり抜けます。
- 来歴、再現可能なbuild、堅牢化されたbuild環境が防御策です。