Úvod do zranitelností procesoru Spectre &Meltdown
Jedním ze způsobů, jak tyto útoky zablokovat, je v určitých časech vyprázdnit mezipaměť, čímž se odstraní exfiltrované informace dříve, než k nim útočník získá přístup. Stahování mezipaměti po každém systémovém volání by pravděpodobně zablokovalo širokou škálu spekulativních útoků, ale také by zpomalilo systém do té míry, že by uživatelé hledali způsoby, jak mechanismus deaktivovat. Zabezpečení informací je velmi důležité, ale náklady jsou příliš vysoké, protože vyprázdnění mezipaměti snižuje drahocenný produkční čas.
Útoky, které využívají spekulativní provedení, zahrnují přesvědčování procesoru, aby spekuloval na cestě, kterou nespekulativní provedení nebude následovat. Například funkce jádra může obsahovat kontrolu limitu, která zabrání přístupu kódu za konec pole, což způsobí vrácení chyby. Útok, který využívá zranitelnost Spectre, tuto kontrolu spekulativním způsobem přeskočí a zpřístupní data, ke kterým byl kód napsán speciálně pro nepřístup. Návrat k chybě je vodítkem, že se možná děje něco nevhodného, ale do té doby bude škoda způsobena.
Jak zkontrolovat, zda je váš server Linux zranitelný vůči chybám Spectre CPU
Spectre &Meltdown Checker je skript shellu, který kontroluje chyby na následujících procesorech Intel/AMD/ARM a dalších:
- CVE-2017-5753:bypass kontroly hranic (varianta spektra 1). Potřebujete znovu zkompilovat software a jádro pomocí upraveného kompilátoru, který zavede operační kód LFENCE na správné pozice ve výsledném kódu. Dopad zmírnění na výkon je zanedbatelný.
- CVE-2017-5715:vstřikování cíle do větve (Varianta spektra 2). Dopad omezení na výkon v závislosti na vašem CPU.
- CVE-2017-5754:nečestné zatížení mezipaměti dat (zhroucení). Musíte nainstalovat aktualizovanou verzi jádra s opravami PTI/KPTI. Aktualizace jádra stačí. Dopad zmírnění na výkon je nízký až střední.
spectre-meltdown-checker.sh je jednoduchý shell skript, který zjistí, zda je vaše linuxové jádro (instalace) zranitelné vůči 3 „spekulativním spuštěním“ CVE.
Instalace
Skript musí být spuštěn jako root uživatel. Zdrojový kód si můžete prohlédnout níže. Použijte příkaz wget nebo curl k získání zdrojového kódu na vašem Linuxovém boxu:
$ cd /tmp/
$ wget https://raw.githubusercontent.com/speed47/spectre-meltdown-checker/master/spectre-meltdown-checker.sh
NEBO
$ git clone https://github.com/speed47/spectre-meltdown-checker.git
Ukázkové výstupy:
Klonování do 'spectre-meltdown-checker'...
dálkové:Počítání objektů:155, hotovo.
remote:Komprese objektů:100 % (20/20), hotovo.
vzdálené:Celkem 155 (delta 18), znovu použito 21 (delta 10), znovu použito 125
Příjem objektů:100 % (155/155), 49,78 KiB | 145,00 kB/s, hotovo.
Rozlišení rozdílů:100 % (88/88), hotovo.
Jak v Linuxu zkontrolovat zranitelnost Spectre a Meltdown
Spusťte skript jako uživatel root pomocí příkazu sudo nebo příkazu su:
$ sudo sh spectre-meltdown-checker.sh
Ukázkové výstupy z plochy Ubuntu Linux:
Další výstup z mého serveru CentOS 7.x, kde byl Meltdown/Spectre v1 opraven s jádrem:
$ sudo sh spectre-meltdown-checker.sh
Jak nainstalovat/aktualizovat firmware mikrokódu Intel v systému Linux?
Mikrokód není nic jiného než firmware CPU od Intelu nebo AMD. Linuxové jádro může aktualizovat firmware CPU bez aktualizace BIOSu při spouštění. Mikrokód procesoru je uložen v paměti RAM a jádro aktualizuje mikrokód při každém spuštění. Tyto aktualizace mikrokódu od společnosti Intel/AMD potřebovaly opravit chyby nebo použít errata, aby se předešlo chybám CPU. Tato stránka ukazuje, jak nainstalovat aktualizaci mikrokódu AMD nebo Intel pomocí správce balíčků nebo aktualizací mikrokódu procesoru dodaných společností Intel v systému Linux.
Jak zjistit aktuální stav mikrokódu
Spusťte následující příkaz jako root uživatel:
# dmesg | grep microcode
Ukázkové výstupy:
Jak nainstalovat firmware mikrokódu Intel v systému Linux pomocí správce balíčků
Nástroj pro transformaci a nasazení aktualizace mikrokódu CPU pro x86/amd64 je dodáván s Linuxem. Postup instalace firmwaru mikrokódu AMD nebo Intel v systému Linux je následující:
- Otevřete aplikaci terminálu
- Typ uživatele systému Debian/Ubuntu Linux:sudo apt install intel-microcode
- Typ uživatele systému CentOS/RHEL Linux:sudo yum install microcode_ctl
Názvy balíčků jsou pro populární distribuce Linuxu následující:
- microcode_ctl a linux-firmware – balíček aktualizace mikrokódu CentOS/RHEL
- intel-microcode – balíček aktualizace mikrokódu Debian/Ubuntu a klonů pro CPU Intel
- amd64-microcode – Debian/Ubuntu a klonování mikrokódu firmwaru pro procesory AMD
- linux-firmware – mikrokódový firmware Arch Linuxu pro CPU AMD (ve výchozím nastavení nainstalován a z vaší strany není potřeba žádná akce)
- intel-ucode – firmware mikrokódu Arch Linux pro procesory Intel
- microcode_ctl, linux-firmware a ucode-intel – balíček aktualizace mikrokódu Suse/OpenSUSE pro Linux
Varování:V některých případech může aktualizace mikrokódu způsobit problémy se spouštěním, jako je zasekávání serveru nebo automatické resetování při spouštění. Dělejte to na vlastní nebezpečí.
Příklady
Zadejte následující příkaz apt/příkaz apt-get na Debian/Ubuntu Linux pro Intel CPU:
$ sudo apt-get install intel-microcode
Ukázkové výstupy:
Pro aktivaci aktualizace mikrokódu musíte restartovat box:
$ sudo reboot
Ověřte to po restartu:
# dmesg | grep 'microcode'
Pokud používáte RHEL/CentOS, zkuste nainstalovat nebo aktualizovat následující dva balíčky pomocí příkazu yum:
$ sudo yum install linux-firmware microcode_ctl
$ sudo reboot
$ sudo dmesg | grep 'microcode'
Jak aktualizovat/instalovat mikrokód stažený ze stránek Intel?
Následující metodu používejte pouze v případě, že ji doporučuje váš prodejce, jinak se držte balíčků pro Linux, jak je popsáno výše. Většina správců distribuce Linuxu aktualizuje mikrokód prostřednictvím správce balíčků. Metoda správce balíčků je bezpečná, jak testovalo mnoho uživatelů.
Jak nainstalovat blob mikrokódu procesoru Intel pro Linux (vydání 20180108)?
Navštivte stránky AMD nebo Intel a stáhněte si nejnovější firmware mikrokódu. Nejprve jej extrahujte pomocí příkazu tar:
$ mkdir firmware
$ cd firmware
$ tar xvf ~/path/to/file/microcode-20180108.tgz
$ ls –l
Ukázkové výstupy:
Ujistěte se, že /sys/devices/system/cpu/microcode/reload skončí:
$ ls -l /sys/devices/system/cpu/microcode/reload
Musíte zkopírovat všechny soubory z intel-ucode do /lib/firmware/intel-ucode/ pomocí příkazu cp:
$ sudo cp -v intel-ucode/* /lib/firmware/intel-ucode/
Právě jste zkopírovali adresář intel-ucode do /lib/firmware/. Chcete-li znovu načíst soubory mikrokódu, napište rozhraní pro opětovné načtení na 1:
# echo 1 > /sys/devices/system/cpu/microcode/reload
Aktualizujte existující initramfs, aby se příště načetl přes jádro:
$ sudo update-initramfs -u
$ sudo reboot
Ověření, že mikrokód byl aktualizován při bootování nebo znovu načten příkazem echo:
# dmesg | grep microcode
To je vše. Právě jste aktualizovali firmware pro váš procesor Intel.