Sleep Attack (CVE-2020-8705) の解説
CVE-2020-8705 の解説が良記事だったので簡単にまとめを書いてみました。メモのようなものなので不正確なところもあるかもしれません。
Overview & Attack senario
BIOSのコードは、Boot Guardの仕組みによりValidationが行われ、OEMが署名したコード以外は実行できないようになっている。このValidatoinが通常のブートでは行われるが、S3 Resume では行われないという脆弱性。S3起動時にSPI Flashの内容を改竄し任意のコードを実行可能
OSのスクリーンロック解除、BitLockerの鍵を盗む、SMM内にOSからは検知できないマルウェアを仕込む、というようなことが可能
物理アクセスが必要だが、例えば空港の税関などでPCを預けた際に、SPI Flashのところに特殊なデバイスを埋め込まれることが考えられる
spispyというオープンソースのSPI flashエミュレータがある
FPGAによりSPI flashへのアクセスパターンからS3 Resumeを検知して、その場合だけ SPI flashの内容を変える、ということが可能
Root Cause
PCHのWrite OnceのFuse(FPF)があり、BootGuardの設定が書き込まれている。その中にS3 Resumeでもチェックするかどうかの設定がある。この設定はOEMの判断で設定されれいる。
セキュリティ的には S3 Resumeでもチェックすべきだが、Resume時間に影響があるため、無効に設定しているOEMが存在。また、MicrosoftのLogo要件にS3 Resume時間の制限(2000ms)があることも無効にする動機になる。
Mitigation
FPFの設定は出荷後に変更できない。Intelはこの問題に対して、CSME Firmwareをリリースした。このFirmwareに更新するとFPFの設定によらずS3 Resume時にもBoot GuardのValidationが行われる様になるようだ
これはFPFの設定をCSME Firmwareがオーバーライドできることを意味する。仮に CSME Firmwareに脆弱性があると、Boot Guardを無効化することが可能だろう
Discussion