Giới thiệu về lỗ hổng Spectre & Meltdown CPU
Một cách để chặn các cuộc tấn công này là làm trống bộ nhớ đệm tại một số thời điểm nhất định, loại bỏ thông tin đã rò rỉ trước khi kẻ tấn công có thể truy cập vào thông tin đó. Tải xuống bộ nhớ đệm sau mỗi lệnh gọi hệ thống có thể chặn được nhiều cuộc tấn công suy đoán, nhưng cũng làm chậm hệ thống đến mức người dùng sẽ tìm cách vô hiệu hóa cơ chế này. Tính bảo mật của thông tin rất quan trọng, nhưng chi phí quá cao khi làm trống bộ nhớ đệm làm giảm thời gian sản xuất quý báu.Các cuộc tấn công sử dụng lệnh thực thi suy đoán liên quan đến việc thuyết phục bộ xử lý suy đoán theo một tuyến đường mà lệnh thực thi không suy đoán sẽ không theo. Ví dụ, một hàm kernel có thể chứa một kiểm tra giới hạn sẽ ngăn chặn mã truy cập vượt quá phần cuối của một mảng, điều này sẽ gây ra lỗi được trả về. Một cuộc tấn công sử dụng lỗ hổng Spectre sẽ bỏ qua kiểm tra đó theo cách suy đoán, truy cập dữ liệu mà mã được viết cụ thể là không truy cập. Lỗi trả về là một manh mối cho thấy có thể có điều gì đó không phù hợp đang xảy ra, nhưng đến lúc đó, thiệt hại sẽ xảy ra.
Cách kiểm tra xem máy chủ Linux của bạn có dễ bị lỗi CPU Spectre hay không
Spectre & Meltdown Checker là một tập lệnh shell kiểm tra các CPU Intel/AMD/ARM và các CPU khác sau để tìm lỗi:- CVE-2017-5753: bỏ qua kiểm tra giới hạn (Spectre Biến thể 1). Bạn cần biên dịch lại phần mềm và hạt nhân bằng trình biên dịch đã sửa đổi, trình biên dịch này sẽ đưa mã lệnh LFENCE vào đúng vị trí trong mã kết quả. Tác động về hiệu suất của việc giảm thiểu là không đáng kể.
- CVE-2017-5715: tiêm mục tiêu nhánh (Spectre Biến thể 2). Tác động về hiệu suất của việc giảm thiểu tùy thuộc vào CPU của bạn.
- CVE-2017-5754: tải bộ đệm dữ liệu bất hợp pháp (Meltdown). Bạn phải cài đặt phiên bản hạt nhân đã cập nhật với các bản vá PTI/KPTI. Chỉ cần cập nhật hạt nhân là đủ. Tác động về hiệu suất của biện pháp giảm thiểu ở mức thấp đến trung bình.
Cài đặt
Tập lệnh phải được chạy dưới dạng người dùng root. Bạn có thể xem mã nguồn bên dưới. Sử dụng lệnh wget hoặc curl để lấy mã nguồn trên hộp Linux của bạn:
Mã:
$ cd /tmp/
Mã:
$ wget https://raw.githubusercontent.com/speed47/spectre-meltdown-checker/master/spectre-meltdown-checker.sh
Mã:
$ git clone https://github.com/speed47/spectre-meltdown-checker.git
Đang sao chép vào 'spectre-meltdown-checker'...
remote: Đang đếm đối tượng: 155, hoàn tất.
remote: Đang nén đối tượng: 100% (20/20), hoàn tất.
remote: Tổng cộng 155 (delta 18), đã sử dụng lại 21 (delta 10), đã đóng gói lại 125
Đang nhận đối tượng: 100% (155/155), 49,78 KiB | 145,00 KiB/giây, hoàn tất.
Giải quyết delta: 100% (88/88), hoàn tất.
Cách kiểm tra Linux để tìm lỗ hổng Spectre và Meltdown
Chạy tập lệnh với tư cách là người dùng root bằng lệnh sudohoặc lệnh su:
Mã:
$ sudo sh spectre-meltdown-checker.sh
Một đầu ra khác từ máy chủ CentOS 7.x của tôi, nơi Meltdown/Spectre v1 đã được vá bằng Kernel:
Mã:
$ sudo sh spectre-meltdown-checker.sh
Làm thế nào để cài đặt/cập nhật chương trình cơ sở vi mã Intel trên Linux?
Vi mã không gì khác ngoài chương trình cơ sở CPU do Intel hoặc AMD cung cấp. Nhân Linux có thể cập nhật chương trình cơ sở của CPU mà không cần cập nhật BIOS khi khởi động. Vi mã bộ xử lý được lưu trữ trong RAM và nhân cập nhật vi mã trong mỗi lần khởi động. Các bản cập nhật vi mã này từ Intel/AMD cần thiết để sửa lỗi hoặc áp dụng errata để tránh lỗi CPU. Trang này hướng dẫn cách cài đặt bản cập nhật vi mã AMD hoặc Intel bằng trình quản lý gói hoặc bản cập nhật vi mã bộ xử lý do Intel cung cấp trên Linux.Cách tìm ra trạng thái hiện tại của vi mã
Chạy lệnh sau với tư cách là root user:
Mã:
# dmesg | grep microcode
Cách cài đặt chương trình cơ sở vi mã Intel trên Linux bằng trình quản lý gói
Công cụ chuyển đổi và triển khai bản cập nhật vi mã CPU cho x86/amd64 đi kèm với Linux. Quy trình cài đặt chương trình cơ sở vi mã AMD hoặc Intel trên Linux như sau:- Mở ứng dụng đầu cuối
- Loại người dùng Debian/Ubuntu Linux: sudo apt install intel-microcode
- Loại người dùng CentOS/RHEL Linux: sudo yum install microcode_ctl
- microcode_ctl và linux-firmware – Gói cập nhật vi mã CentOS/RHEL
- intel-microcode – Debian/Ubuntu và gói cập nhật vi mã bản sao cho CPU Intel
- amd64-microcode – Debian/Ubuntu và bản sao vi mã phần mềm cho CPU AMD
- linux-firmware – Vi mã phần mềm Arch Linux cho CPU AMD (được cài đặt theo mặc định và bạn không cần thực hiện bất kỳ hành động nào)
- intel-ucode – Vi mã phần mềm Arch Linux cho CPU Intel
- microcode_ctl, linux-firmware và ucode-intel – Gói cập nhật vi mã Suse/OpenSUSE Linux
Ví dụ
Nhập lệnh sau lệnh apt/lệnh apt-get trên Debian/Ubuntu Linux cho CPU Intel:
Mã:
$ sudo apt-get install intel-microcode
Bạn phải khởi động lại hộp để kích hoạt cập nhật vi mã:
Mã:
$ sudo reboot
Mã:
# dmesg | grep 'microcode'
Mã:
$ sudo yum install linux-firmware microcode_ctl
Mã:
$ sudo reboot
Mã:
$ sudo dmesg | grep 'microcode'
Làm thế nào để cập nhật/cài đặt microcode đã tải xuống từ trang web của Intel?
Chỉ sử dụng phương pháp sau khi được nhà cung cấp của bạn khuyến nghị, nếu không, hãy sử dụng các gói Linux như mô tả ở trên. Hầu hết người bảo trì bản phân phối Linux đều cập nhật vi mã thông qua trình quản lý gói. Phương pháp trình quản lý gói an toàn như đã được nhiều người dùng thử nghiệm.Làm thế nào để cài đặt vi mã bộ xử lý Intel blob cho Linux (bản phát hành 20180108)?
Truy cập trang web AMD hoặc Intel để tải chương trình cơ sở vi mã mới nhất. Đầu tiên giải nén nó bằng lệnh tar:
Mã:
$ mkdir firmware
Mã:
$ cd firmware
Mã:
$ tar xvf ~/path/to/file/microcode-20180108.tgz
Mã:
$ ls –l
Đảm bảo /sys/devices/system/cpu/microcode/reload thoát:
Mã:
$ ls -l /sys/devices/system/cpu/microcode/reload
Mã:
$ sudo cp -v intel-ucode/* /lib/firmware/intel-ucode/
Mã:
# echo 1 > /sys/devices/system/cpu/microcode/reload
Mã:
$ sudo update-initramfs -u
Mã:
$ sudo reboot
Mã:
# dmesg | grep microcode