GNU/Linux >> Znalost Linux >  >> Linux

Jak zkontrolovat zranitelnosti Meltdown a Spectre a opravit je v Linuxu

Začátkem tohoto týdne tým výzkumníků z projektu Google Project Zero objevil o Zhroucení a Spektre zranitelnosti, které ovlivnily mnoho moderních procesorů, včetně určitých procesorů Intel, AMD a ARM. I když AMD tvrdilo, že existuje nulová šance, že by jejich procesory byly těmito chybami postiženy, výzkumníci naznačili, že zranitelnost Meltdown se týká výhradně procesorů Intel, zatímco zranitelnost Spectre může případně ovlivnit některé procesory Intel, AMD a ARM.

Podle Wired , "výrobci Intel, AMD a ARM úzce spolupracují a spolupracují s hardwarovými společnostmi, které dodávají své procesory a softwarovými společnostmi, jako je Apple, Google, Microsoft, Linux Foundation, aby vydali záplaty pro tyto bezpečnostní chyby. Nemůžeme zaručit záplaty tyto problémy úplně vyřeší. Ale alespoň lépe, než se původně zdálo."

Co můžete právě teď dělat?

Greg Kroah-Hartman již oznámila vydání stabilních jader 4.14.12, 4.9.75 a 4.4.110, která přicházejí s tavením a opravami Spectre. Pokud tedy používáte procesor Intel nebo AMD nebo ARM, důrazně doporučujeme zkontrolovat, zda váš systém Linux není ovlivněn zranitelností Meltdown And Spectre, a okamžitě jej opravit aktualizací nejnovějšího jádra Linuxu. Pokud vaše linuxová distribuce ještě nemá nejnovější aktualizace linuxového jádra, důrazně doporučujeme změnit distribuci linuxu hned teď.

Zkontrolujte zranitelnosti zhroucení a přízraku

Na Arch Linuxu a jeho derivátech můžete pomocí následujících dvou příkazů zjistit, zda je váš systém ovlivněn zranitelností způsobenou roztavením nebo přízrakem.

$ zgrep CONFIG_PAGE_TABLE_ISOLATION /proc/config.gz
$ dmesg | grep iso

Pokud výše uvedené příkazy nevrátí NIC, váš systém ještě není opraven. Takže musíte svůj systém založený na Arch aktualizovat pomocí příkazu:

$ sudo pacman -Syu

Po úplné aktualizaci systému Arch restartujte a znovu spusťte výše uvedené příkazy. Pokud je váš systém opraven, měli byste vidět následující výstup pro první příkaz:

CONFIG_PAGE_TABLE_ISOLATION=y

A tento výstup získáte pro druhý příkaz.

[ 0.000000] Kernel/User page tables isolation: enabled

Již jsem aktualizoval jádro v mém systému Arch. Jak vidíte ve výše uvedeném výstupu, moje linuxové jádro je 4.14.12-1-ARCH a je již opraveno. Pokud jste svůj systém Arch ještě neaktualizovali, nezískáte žádný výstup.

Výše uvedené příkazy nemusí v Ubuntu fungovat. Naštěstí několik dobrých Samaritánů na Askubuntu fórum zveřejnilo řešení, jak zjistit, zda jsou vaše systémy Ubuntu opravené nebo neopravené pomocí některého z následujících příkazů.

$ grep CONFIG_PAGE_TABLE_ISOLATION=y /boot/config-`uname -r` && echo "patched :)" || echo "unpatched :("
$ grep cpu_insecure /proc/cpuinfo && echo "patched :)" || echo "unpatched :("
$ dmesg | grep "Kernel/User page tables isolation: enabled" && echo "patched :)" || echo "unpatched :("

Pokud je výstup neopraven , váš systém ještě není opraven. Okamžitě aktualizujte jádro, aby bylo možné použít opravy.

Ve svém systému Ubuntu stále používám 4.4.0-104-generic, takže se mi ve výsledku odeberou všechny příkazy.

Okamžitě aktualizujte své jádro pomocí příkazu:

$ sudo apt-get update
$ sudo apt-get dist-upgrade

Nebo, jak je popsáno v následujícím odkazu.

  • Linux Kernel Utilities – Skripty pro kompilaci a aktualizaci nejnovějšího linuxového jádra pro Debian a deriváty

Po aktualizaci jádra spusťte tyto tři příkazy znovu a uvidíte, že váš systém Ubuntu je opraven!

Pro ostatní distribuce Linuxu existuje skript s názvem "Spectre &Meltdown Checker" zkontrolovat zranitelnosti Meltdown/Spectre. Tento skript vám pomůže zjistit, zda je vaše instalace Linuxu zranitelná vůči 3 „spekulativním spuštěním“ CVE.

Git klonuje tento skript:

$ git clone https://github.com/speed47/spectre-meltdown-checker.git

Tím se naklonuje veškerý obsah v adresáři s názvem "spectre-meltdown-checker" ve vašem aktuálním pracovním adresáři.

Přejděte do tohoto adresáře:

$ cd spectre-meltdown-checker/

Udělejte skript spustitelným:

$ chmod +x spectre-meltdown-checker.sh

Nakonec jej spusťte, abyste našli zranitelnosti:

$ sudo ./spectre-meltdown-checker.sh

Zde je ukázkový výstup z mého opraveného systému Ubuntu:

Bez voleb zkontroluje aktuálně spuštěné jádro. Můžete také zadat obraz jádra na příkazovém řádku, pokud chcete zkontrolovat jádro, které nepoužíváte.

Aktualizace:

Skript spectre-meltdown-checker je dostupný v oficiálních repozitářích některých distribucí Linuxu.

Na Debianu, Ubuntu:

$ sudo apt install spectre-meltdown-checker

Na CentOS, RHEL:

$ sudo yum install epel-release
$ sudo yum install spectre-meltdown-checker

Na Fedoře:

$ sudo dnf install $ sudo apt install spectre-meltdown-checker

Po instalaci spectre-meltdown-checker jej spusťte jako uživatel root nebo s právy sudo a zkontrolujte zranitelnosti Spectre a Meltdown:

$ sudo spectre-meltdown-checker

Ukázkový výstup:

Spectre and Meltdown mitigation detection tool v0.37

Checking for vulnerabilities on current system
Kernel is Linux 4.15.0-91-generic #92-Ubuntu SMP Fri Feb 28 11:09:48 UTC 2020 x86_64
CPU is Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz

Hardware check
* Hardware support (CPU microcode) for mitigation techniques
  * Indirect Branch Restricted Speculation (IBRS)
    * SPEC_CTRL MSR is available:  NO 
    * CPU indicates IBRS capability:  NO 
  * Indirect Branch Prediction Barrier (IBPB)
    * PRED_CMD MSR is available:  NO 
    * CPU indicates IBPB capability:  NO 
  * Single Thread Indirect Branch Predictors (STIBP)
    * SPEC_CTRL MSR is available:  NO 
    * CPU indicates STIBP capability:  NO 
  * Enhanced IBRS (IBRS_ALL)
    * CPU indicates ARCH_CAPABILITIES MSR availability:  NO 
    * ARCH_CAPABILITIES MSR advertises IBRS_ALL capability:  NO 
  * CPU explicitly indicates not being vulnerable to Meltdown (RDCL_NO):  NO 
  * CPU microcode is known to cause stability problems:  NO  (model 42 stepping 7 ucode  cpuid 0x206a7)
* CPU vulnerability to the three speculative execution attack variants
  * Vulnerable to Variant 1:  YES 
  * Vulnerable to Variant 2:  YES 
  * Vulnerable to Variant 3:  YES 

CVE-2017-5753 [bounds check bypass] aka 'Spectre Variant 1'
* Mitigated according to the /sys interface:  NO  (Vulnerable: __user pointer sanitization and usercopy barriers only; no swapgs barriers)
* Kernel has array_index_mask_nospec (x86):  UNKNOWN  (couldn't check (missing 'readelf' tool, please install it, usually it's in the 'binutils' package))
* Kernel has the Red Hat/Ubuntu patch:  UNKNOWN  (missing 'strings' tool, please install it, usually it's in the binutils package)
* Kernel has mask_nospec64 (arm):  UNKNOWN  (couldn't check (missing 'readelf' tool, please install it, usually it's in the 'binutils' package))
* Checking count of LFENCE instructions following a jump in kernel...  UNKNOWN  (couldn't check (missing 'readelf' tool, please install it, usually it's in the 'binutils' package))
> STATUS:  VULNERABLE  (Vulnerable: __user pointer sanitization and usercopy barriers only; no swapgs barriers)

CVE-2017-5715 [branch target injection] aka 'Spectre Variant 2'
* Mitigated according to the /sys interface:  NO  (Vulnerable, STIBP: disabled)
* Mitigation 1
  * Kernel is compiled with IBRS support:  YES 
    * IBRS enabled and active:  UNKNOWN 
  * Kernel is compiled with IBPB support:  UNKNOWN  (in offline mode, we need the kernel image to be able to tell)
    * IBPB enabled and active:  NO 
* Mitigation 2
  * Kernel has branch predictor hardening (arm):  NO 
  * Kernel compiled with retpoline option:  YES 
> STATUS:  VULNERABLE  (IBRS+IBPB or retpoline+IBPB is needed to mitigate the vulnerability)

> How to fix: To mitigate this vulnerability, you need either IBRS + IBPB, both requiring hardware support from your CPU microcode in addition to kernel support, or a kernel compiled with retpoline and IBPB, with retpoline requiring a retpoline-aware compiler (re-run this script with -v to know if your version of gcc is retpoline-aware) and IBPB requiring hardware support from your CPU microcode. The retpoline + IBPB approach is generally preferred as the performance impact is lower. More information about how to enable the missing bits for those two possible mitigations on your system follow. You only need to take one of the two approaches.

> How to fix: The microcode of your CPU needs to be upgraded to be able to use IBPB. This is usually done at boot time by your kernel (the upgrade is not persistent across reboots which is why it's done at each boot). If you're using a distro, make sure you are up to date, as microcode updates are usually shipped alongside with the distro kernel. Availability of a microcode update for you CPU model depends on your CPU vendor. You can usually find out online if a microcode update is available for your CPU by searching for your CPUID (indicated in the Hardware Check section). An updated CPU microcode will have IBRS/IBPB capabilities indicated in the Hardware Check section above. If you're running under an hypervisor (KVM, Xen, VirtualBox, VMware, ...), the hypervisor needs to be up to date to be able to export the new host CPU flags to the guest. You can run this script on the host to check if the host CPU is IBRS/IBPB. If it is, and it doesn't show up in the guest, upgrade the hypervisor.

> How to fix: Your kernel doesn't have IBPB support, so you need to either upgrade your kernel (if you're using a distro) or recompiling a more recent kernel.

> How to fix: The microcode of your CPU needs to be upgraded to be able to use IBRS. This is usually done at boot time by your kernel (the upgrade is not persistent across reboots which is why it's done at each boot). If you're using a distro, make sure you are up to date, as microcode updates are usually shipped alongside with the distro kernel. Availability of a microcode update for you CPU model depends on your CPU vendor. You can usually find out online if a microcode update is available for your CPU by searching for your CPUID (indicated in the Hardware Check section). An updated CPU microcode will have IBRS/IBPB capabilities indicated in the Hardware Check section above. If you're running under an hypervisor (KVM, Xen, VirtualBox, VMware, ...), the hypervisor needs to be up to date to be able to export the new host CPU flags to the guest. You can run this script on the host to check if the host CPU is IBRS/IBPB. If it is, and it doesn't show up in the guest, upgrade the hypervisor.

CVE-2017-5754 [rogue data cache load] aka 'Meltdown' aka 'Variant 3'
* Mitigated according to the /sys interface:  NO  (Vulnerable)
* Kernel supports Page Table Isolation (PTI):  YES 
  * PTI enabled and active:  NO 
  * Reduced performance impact of PTI:  NO  (PCID/INVPCID not supported, performance impact of PTI will be significant)
* Running as a Xen PV DomU:  NO 
> STATUS:  VULNERABLE  (PTI is needed to mitigate the vulnerability)

> How to fix: If you're using a distro kernel, upgrade your distro to get the latest kernel available. Otherwise, recompile the kernel with the CONFIG_PAGE_TABLE_ISOLATION option (named CONFIG_KAISER for some kernels), or the CONFIG_UNMAP_KERNEL_AT_EL0 option (for ARM64)

A false sense of security is worse than no security at all, see --disclaimer

Jak můžete vidět ve výše uvedeném výstupu, problémy Spectre a Meltdown ještě nejsou opraveny.

Opravte zranitelnosti zhroucení a přízraku

Jak jsem již zmínil, důrazně se doporučuje udržovat jádro a váš systém a veškerý software aktuální, protože také získává mnoho dalších bezpečnostních oprav.

Chcete-li aktualizovat/upgradovat svůj Arch Linux, spusťte:

$ sudo pacman -Syu

Chcete-li aktualizovat Debian, Ubuntu:

$ sudo apt-get update && sudo apt-get dist-upgrade

Aktualizace Fedory:

$ sudo dnf update

Aktualizace RHEL/CentOS:

$ sudo yum update

Po aktualizaci systému Linux jej nezapomeňte restartovat.

Znovu připomínáme, že tyto problémy ještě nejsou zcela vyřešeny. Během několika příštích týdnů musíte své linuxové systémy aktualizovat, dokud nebude vše opraveno.

Doporučené čtení:

  • Jak zajistit, aby systém Linux běžel rychleji na procesorech Intel

Linux
  1. Jak zkontrolovat otevřené porty v Linuxu pomocí netstat, lsof a nmap

  2. Jak zkontrolovat verzi OS a Linuxu

  3. Linux – Jak zkontrolovat, zda je linuxová distribuce bezpečná a neobsahuje škodlivý kód?

  1. Jak uložit příkazy Linuxu a používat je na vyžádání

  2. Jak nainstalovat ClamAV na Ubuntu 20.04 a vyhledávat zranitelnosti

  3. Jak zkontrolovat OS a verzi pomocí příkazu Linux

  1. Pochopení cest k souborům a jejich použití v Linuxu

  2. Kroky po instalaci pro novou instanci Linuxu a jak je automatizovat

  3. Jak zmírnit zranitelnosti Spectre a Meltdown na systémech Linux?