Làm cách nào để kiểm tra xem KPTI có được bật trên Ubuntu của tôi không?


64

Lỗ hổng bộ xử lý Intel Meltdown hiện tại hiện đang được khắc phục bằng cách bật tính năng cách ly bảng trang. Có một câu hỏi làm thế nào để tắt tính năng này: Làm cách nào để vô hiệu hóa Cách ly bảng trang để lấy lại hiệu suất bị mất do bản vá lỗ hổng bảo mật CPU của Intel?

Câu hỏi của tôi là ngược lại: có cách nào để kiểm tra một hệ thống đang chạy xem cơ chế PTI có hiệu quả trên hệ thống không và do đó hệ thống có được bảo vệ không? Tôi đặc biệt tìm kiếm cat /proc/somethinghoặc cat /sys/something, không kiểm tra phiên bản kernel hoặc tham số cấu hình hoặc tương tự.

Câu trả lời:


4

Bạn có thể chạy lệnh bên dưới để xem tất cả các giảm thiểu có sẵn (không chỉ cho PTI mà còn cho các lỗ hổng khác):

$ cat /sys/devices/system/cpu/vulnerabilities/*
Mitigation: PTE Inversion
Mitigation: Clear CPU buffers; SMT vulnerable
Mitigation: PTI
Mitigation: Speculative Store Bypass disabled via prctl and seccomp
Mitigation: usercopy/swapgs barriers and __user pointer sanitization
Mitigation: Full generic retpoline, IBPB: conditional, IBRS_FW, STIBP: conditional, RSB filling

Câu trả lời tuyệt vời - ngắn gọn và đi vào vấn đề Cảm ơn bạn.
Martin Vysny

63
  • Cắt xén CONFIG_PAGE_TABLE_ISOLATION trong cấu hình kernel như đề xuất của Raniz không giúp ích gì cho Ubuntu trên máy tính để bàn, nhưng có thể giúp ích cho các trường hợp đám mây:

    grep CONFIG_PAGE_TABLE_ISOLATION=y /boot/config-`uname -r` && \
    echo "patched :)" || echo "unpatched :("
    

  • Bạn có thể kiểm tra /proc/cpuinfonhư JonasCz đề xuất :

    grep -q "cpu_insecure\|cpu_meltdown\|kaiser" /proc/cpuinfo && echo "patched :)" \
    || echo "unpatched :("
    

  • Hoặc từ dmesg(nhờ Jason Creighton ):

    dmesg | grep -q "Kernel/User page tables isolation: enabled" \
    && echo "patched :)" || echo "unpatched :("
    

  • Bạn có thể biên dịch chương trình thử nghiệm từ Raphael Carvalho để phát hiện Meltdown:

    sudo apt-get install git build-essential
    cd /tmp
    git clone https://github.com/raphaelsc/Am-I-affected-by-Meltdown.git
    cd Am-I-affected-by-Meltdown
    make
    sudo sh -c "echo 0  > /proc/sys/kernel/kptr_restrict"
    ./meltdown-checker
    

trên hệ thống vá, nó sẽ kết thúc với đầu ra

...
so far so good (i.e. meltdown safe) ...

System not affected (take it with a grain of salt though as false negative
may be reported for specific environments; Please consider running it once again).

Trên hệ thống vá, nó sẽ hiển thị như sau:

Spectre and Meltdown mitigation detection tool v0.27

Checking for vulnerabilities against live running kernel Linux 4.4.0-109-generic #132-Ubuntu SMP Tue Jan 9 19:52:39 UTC 2018 x86_64
...
CVE-2017-5754 [rogue data cache load] aka 'Meltdown' aka 'Variant 3'
* Kernel supports Page Table Isolation (PTI):  YES 
* PTI enabled and active:  YES 
> STATUS:  NOT VULNERABLE  (PTI mitigates the vulnerability)

Không cài đặt 4.4.0-108-chung trên Xenial! Nó phá vỡ chức năng khởi động / khởi động lại / tắt máy / tạm dừng !

Cài đặt 4.4.0-109-generic ( xem USN-3522-3 để biết chi tiết)!


Như Robie Basak đã viết , có một trang về tình trạng lỗ hổng Spectre và Meltdown trong Ubuntu .

Cũng có:


3
Các bản cập nhật cho Ubuntu được lên kế hoạch cho Januari 9. Chúng có thể hạ cánh sớm hơn nhưng tôi sẽ không tin vào điều đó. insights.ubfox.com/2018/01/04/ cường
Raniz

4
Các câu trả lời kiểu "dmesg | grep" thích hợp hơn cho điều này, IMO. Một số bản phân phối (ít nhất là trải dài Debian, có thể là các bản phân phối khác) đã chuyển PTI sang kernel cũ của chúng, nhưng không phải là cờ cpu_insecure trong / Proc / cpuinfo. Trên các hệ thống đó, tìm kiếm trong nhật ký dmesg là cách duy nhất để kiểm tra, AFAICT.
Jason Creighton

3
Tôi nghĩ rằng dmesg | grep isolation && echo "patched :)" || echo "unpatched :("lệnh như được liệt kê là nguy hiểm không cần thiết : nó không hiển thị dòng nào thực sự khớp và cũng sẽ vui vẻ in "vá :)" nếu một trường hợp ngẫu nhiên khác của "cách ly" được khớp ...
Jaap Eldering

2
Tôi sẽ đề nghị chống lại đề xuất thứ hai (grepping /proc/cpuinfocho cpu_insecure). Nếu bạn đặt nó vào một tập lệnh và bạn có CPU trong tương lai, nơi vấn đề được khắc phục trong kiến ​​trúc vi mô của nó, /proc/cpuinfosẽ không còn nói cpu_insecurevà tập lệnh của bạn sẽ tin rằng kernel không được mặc dù nó đã được . Tôi cũng sẽ đề xuất chống lại đề xuất thứ ba, vì rất có khả năng có thể có từ isolationtrong dmesgđầu ra tại một số điểm mà không đề cập đến cách ly bảng trang kernel.
blubberdiblub

4
Sau khi điều tra thêm, cả ba đề nghị này đều bị phá vỡ. Grepping cho isolationsẽ phù hợp với cả hai Kernel/User page tables isolation: enabledKernel/User page tables isolation: disabled on command line.
Đánh dấu

18

Chạy lệnh sau:

dmesg | grep 'page tables isolation'

Nếu nó hiển thị được bật, thì PTI được kích hoạt. Nếu không có gì được hiển thị hoặc bạn thấy 'bị vô hiệu hóa' trong thiết bị đầu cuối, thì PTI bị vô hiệu hóa. Ubuntu chưa xuất bản bản vá, vì vậy nó sẽ không hiển thị bất kỳ thông báo nào.


... hoặc các thông báo kernel sau đó đã đẩy các thông điệp khởi động ra khỏi bộ đệm nhật ký kernel. Nếu kernel của bạn in các thông báo cho những thứ có mức độ nghiêm trọng thấp như các gói mạng kỳ lạ, thì thông báo thời gian khởi động không phải là một phần của dmesgđầu ra. Xem /var/log/kern.log*nếu nó trở lại đủ xa để có các thông điệp khởi động. Ubuntu được sử dụng để ghi lại dmesgđầu ra thời gian khởi động /var/log/dmesg, nhưng dường như không làm điều đó nữa.
Peter Cordes

Ngày 14.04, tôi đã nhận dmesg: invalid option -- 'w'. -Hcũng không hợp lệ Loại bỏ các cờ làm việc tốt cho tôi, như trong câu trả lời này
wjandrea

/var/log/kern.log vào ngày 14.04
eckes

12

Bạn có thể kiểm tra cat /proc/cpuinfo, nếu nó báo cáo cpu_insecuretheo "lỗi", thì PTI được bật.

Nếu nó trống (hoặc chỉ không liệt kê cpu_insecure), thì rất có thể bạn đang chạy kernel chưa được vá (Ubuntu chưa có) hoặc bạn có bộ xử lý AMD (vì điều này chắc chắn sẽ không được kích hoạt, vì chúng không thể được kích hoạt, vì chúng 'không dễ bị tổn thương).

Hiện tại tất cả các CPU được coi là dễ bị tổn thương trong kernel 4.15 mới nhất.


4.15 chưa được phát hành ra công chúng
Aadhil RF

Đó là, nếu bạn tải xuống ứng cử viên phát hành mới nhất từ kernel.org và tự biên dịch nó. @Mohammedaadhil
JonasCz nói Phục hồi lại

1
Một ứng cử viên phát hành không phải là một bản phát hành.
Ruslan

Bài viết bạn liên kết đã được cập nhật
nixpower

2
Kernel 4.14.11 sẽ được đặt cpu_insecurecho bất kỳ CPU x86 nào; 4.14.12 và mới hơn sẽ chỉ đặt nó cho CPU Intel (bao gồm cả CPU quá cũ hoặc quá nguyên thủy dễ bị tổn thương. Cả hai sẽ đặt nó ngay cả khi KPTI bị vô hiệu hóa.
Đánh dấu

8

Tôi đã tìm thấy tập lệnh sh tuyệt vời này để kiểm tra các lỗ hổng Meltdown / bóng ma trên hệ thống của bạn:

https://github.com/speed47/spectre-meltdown-checker

Kịch bản kiểm tra hệ thống của bạn để biết Meltdown và các bản vá bóng ma trên hệ thống của bạn để cho bạn biết nếu các lỗ hổng này hiện được hệ điều hành của bạn giảm thiểu


2

Bạn có thể kiểm tra /proc/config.gz cho CONFIG_PAGE_TABLE_ISOLATION=ycó nghĩa là hạt nhân đã được biên soạn với KPTI.

Đây là trên hệ thống Arch Linux đã vá của tôi chạy 4.14.11-1:

$ zgrep CONFIG_PAGE_TABLE_ISOLATION /proc/config.gz 
CONFIG_PAGE_TABLE_ISOLATION=y

3
Thật không may, cấu hình của kernel hiện đang chạy /proc/không được bật theo mặc định trong các hạt nhân Ubuntu. /boot/config-$( uname -r )Thay vào đó, cách giải quyết (ít thanh lịch hơn) đang thay đổi.
blubberdiblub

5
Điều đó chỉ cho bạn biết nếu kernel được biên dịch bằng KPTI, chứ không phải nếu KPTI đang hoạt động (nó có thể bị tắt khi khởi động và có thể trong thời gian chạy).
Đánh dấu

Nếu bạn đã vô hiệu hóa KPTI thông qua các tham số dòng lệnh kernel, bạn không cần phải kiểm tra xem nó có hoạt động hay không.
Raniz

1

Trên phiên bản AWS Ubuntu 14.04.5 LTS EC2 của tôi, tôi đã chạy

grep CONFIG_PAGE_TABLE_ISOLATION /boot/config-$(uname -r)

Nó sẽ nói:

CONFIG_PAGE_TABLE_ISOLATION=y

Để cập nhật tôi đã làm:

sudo apt-get update && sudo apt-get install linux-image-generic

Tôi cũng nghĩ rằng điều này là ổn:

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

Để kiểm tra phiên bản kernel:

uname -r

Cần phải là 3.13.0-139 - chung hoặc mới hơn.


Phương pháp này đã được đề cập trong câu trả lời hàng đầu
wjandrea
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.