На последней конференции Chaos Communication Congress (CCC) было две качественные презентации по Thunderstrike и атакам на UEFI. Первая интересна тем, что показывает возможность проведения атаки на EFI «маков» с устройства Thunderbolt, а вторая — исследованием загрузочного скрипта UEFI.
Хакер Педро Вилача (Pedro Vilaça) упоминает эти презентации в своём блоге. Именно они вдохновили Педро на дальнейшее исследование темы установки руткитов в EFI.
«Чудесным последствием второй уязвимости является то, что она позволяет снять флэш-защиту, изменив загрузочный скрипт, который исполняется после цикла S3 suspend-resume», — пишет автор, имея в виду выход компьютера из спящего режима.
Раньше Дмитрий Олексюк (Cr4sh) опубликовали PoC такой атаки на материнскую плату Intel DQ77KB.
Ну, а Педро Велича говорит, что главным образом хотел убедиться, что сможет загрузить свой компьютер в том случае, если забудет пароль. (Понятно, что в этом случае он сможет загрузить и любой другой запароленный компьютер).
Автор вышеупомянутого доклада о Thunderstrike не выпустил PoC, зато разработал замечательную утилиту SPI Flash reader для Teensy 2.x, которая исключительно быстро считывает содержимое BIOS (за пару минут). Это примерно на два порядка быстрее, чем старая BusPirate.
Для получения доступа к загрузочному скрипту нужно провести обратную разработку бинарников EFI, что оказалось весьма муторным делом. Но автору повезло, когда он обнаружил гигантскую дыру, ставшую приятным сюрпризом. Оказалось, что вообще не нужно предпринимать никаких усилий благодаря компании Apple, которая сама автоматически снимает флэш-защиту после выхода из спящего режима!
Это значит, что содержимое BIOS можно переписать прямо из пользовательской программы. После чего установить руткит в EFI или произвести что-либо другое с Mac. То есть доклад о Thunderstrike можно было вообще не читать.
Например, вот фрагмент лога flashrom на свежезагруженном MacBook Pro Retina 10,1. Обратите внимание на значение флага FLOCKDN (флэш-защита).
sh-3.2# ./flashrom -r biosdump -V -p internal
flashrom v0.9.7-r1711 on Darwin 14.3.0 (x86_64)
flashrom is free software, get the source code at http://www.flashrom.org
(...)
Found chipset "Intel HM77" with PCI ID 8086:1e57.
(...)
BIOS_CNTL = 0x01: BIOS Lock Enable: disabled, BIOS Write Enable: enabled
Root Complex Register Block address = 0xfed1c000
GCS = 0xc21: BIOS Interface Lock-Down: enabled, Boot BIOS Straps: 0x3 (SPI)
Top Swap : not enabled
SPIBAR = 0xfed1c000 + 0x3800
0x04: 0xe008 (HSFS)
HSFS: FDONE=0, FCERR=0, AEL=0, BERASE=1, SCIP=0, FDOPSS=1, FDV=1, FLOCKDN=1
Warning: SPI Configuration Lockdown activated.
Но если погрузить ноутбук в спящий режим (лучше подождать секунд 30, иногда ему нужно время), то вот какой будет лог.
sh-3.2# ./flashrom -r biosdump2 -V -p internal
flashrom v0.9.7-r1711 on Darwin 14.3.0 (x86_64)
flashrom is free software, get the source code at http://www.flashrom.org
(...)
Found chipset "Intel HM77" with PCI ID 8086:1e57.
(...)
BIOS_CNTL = 0x01: BIOS Lock Enable: disabled, BIOS Write Enable: enabled
Root Complex Register Block address = 0xfed1c000
GCS = 0xc21: BIOS Interface Lock-Down: enabled, Boot BIOS Straps: 0x3 (SPI)
Top Swap : not enabled
SPIBAR = 0xfed1c000 + 0x3800
0x04: 0x6008 (HSFS)
HSFS: FDONE=0, FCERR=0, AEL=0, BERASE=1, SCIP=0, FDOPSS=1, FDV=1, FLOCKDN=0
Programming OPCODES... done
Пожалуйста, можно обновлять флэш-память.
Вероятно, баг присутствует не только в последней, но и в предыдущих версиях OS X, что очень некрасиво со стороны Apple.
Какая-нибудь вредоносная программа, попавшая на «мак» через интернет, используя 0day в Safari, теперь может перезаписать BIOS.
В качестве меры безопасности всем пользователям можно порекомендовать не уводить компьютер в спящий режим, а сразу выключать.