Kiểm tra lỗ hổng CPU Spectre và Meltdown và cập nhật vi mã trên Linux

theanh

Administrator
Nhân viên



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.
spectre-meltdown-checker.sh là một tập lệnh shell đơn giản để tìm hiểu xem hạt nhân Linux (cài đặt) của bạn có dễ bị tấn công bởi 3 CVE "thực thi suy đoán" hay không.

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
HOẶC
Mã:
$ git clone https://github.com/speed47/spectre-meltdown-checker.git
Đầu ra mẫu:

Đ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
Các đầu ra mẫu từ Ubuntu Linux máy tính để bàn:





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ác đầu ra mẫu:


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:
  1. Mở ứng dụng đầu cuối
  1. Loại người dùng Debian/Ubuntu Linux: sudo apt install intel-microcode
  1. Loại người dùng CentOS/RHEL Linux: sudo yum install microcode_ctl
Tên gói như sau đối với các bản phân phối Linux phổ biến:
  • 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
Cảnh báo: Trong một số trường hợp, cập nhật vi mã có thể gây ra sự cố khởi động như máy chủ bị treo hoặc tự động đặt lại tại thời điểm khởi động. Tự chịu rủi ro.

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
Các đầu ra mẫu:





Bạn phải khởi động lại hộp để kích hoạt cập nhật vi mã:
Mã:
$ sudo reboot
Kiểm tra sau khi khởi động lại:
Mã:
# dmesg | grep 'microcode'
Nếu bạn đang sử dụng RHEL/CentOS, hãy thử cài đặt hoặc cập nhật hai gói sau bằng lệnh yum:
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
Các đầu ra mẫu:



Đảm bảo /sys/devices/system/cpu/microcode/reload thoát:
Mã:
$ ls -l /sys/devices/system/cpu/microcode/reload
Bạn phải sao chép tất cả các tệp từ intel-ucode sang /lib/firmware/intel-ucode/ bằng lệnh cp:
Mã:
$ sudo cp -v intel-ucode/* /lib/firmware/intel-ucode/
Bạn vừa sao chép thư mục intel-ucode sang /lib/firmware/. Ghi giao diện tải lại thành 1 để tải lại các tệp vi mã:
Mã:
# echo 1 > /sys/devices/system/cpu/microcode/reload
Cập nhật initramfs hiện có để lần sau nó được tải qua kernel:
Mã:
$ sudo update-initramfs -u
Mã:
$ sudo reboot
Xác minh rằng microcode đã được cập nhật khi khởi động hoặc được tải lại bằng lệnh echo:
Mã:
# dmesg | grep microcode
Vậy là xong. Bạn vừa cập nhật chương trình cơ sở cho CPU Intel của mình.
 
Back
Bên trên