Cách bảo vệ server của bạn trước lỗ hổng Meltdown và Spectre
Meltdown và Spectre là gì?
Vào ngày 4 tháng 1 năm 2018, nhiều lỗ hổng trong thiết kế của các CPU hiện đại đã được tiết lộ. Lợi dụng những tối ưu hóa hiệu suất bộ xử lý nhất định, những lỗ hổng này - có tên Meltdown và Spectre - khiến kẻ tấn công có thể ép buộc các ứng dụng tiết lộ nội dung của bộ nhớ hệ thống và ứng dụng khi được thao tác đúng cách. Các cuộc tấn công này hoạt động vì hành vi kiểm tra quyền thông thường bên trong bộ xử lý bị phá vỡ thông qua sự tương tác của các tính năng như thực thi suy đoán, dự đoán nhánh, thực thi không theo thứ tự và bộ nhớ đệm.
Meltdown đã được tiết lộ trong CVE-2017-5754 . Spectre được tiết lộ trong CVE-2017-5753 và CVE-2017-5715 .
Để biết thêm thông tin chi tiết, hãy xem quá trình tan chảy hoạt động như thế nào? và bóng ma hoạt động như thế nào? phần bên dưới.
Tôi có bị ảnh hưởng bởi Meltdown và Spectre không?
Meltdown và Spectre ảnh hưởng đến phần lớn các bộ vi xử lý hiện đại. Các tối ưu hóa bộ xử lý được sử dụng trong các lỗ hổng này là một tính năng thiết kế cốt lõi của hầu hết các CPU, nghĩa là hầu hết các hệ thống đều dễ bị tấn công cho đến khi được vá cụ thể. Điều này bao gồm máy tính để bàn, server và các version máy tính hoạt động trong môi trường Đám mây.
Các bản vá để bảo vệ chống lại Meltdown đang được phát hành từ các nhà cung cấp hệ điều hành. Trong khi các bản cập nhật cũng đang được phát hành cho Spectre, nó đại diện cho toàn bộ lớp lỗ hổng, vì vậy nó có thể sẽ yêu cầu khắc phục liên tục rộng rãi hơn.
Trong môi trường cloud và ảo hóa, các nhà cung cấp cần cập nhật cơ sở hạ tầng cơ bản để bảo vệ khách của họ. User cần cập nhật server của họ để giảm thiểu tác động trong hệ điều hành khách.
Tôi có thể tự bảo vệ mình bằng cách nào?
Việc bảo vệ đầy đủ chống lại lớp lỗ hổng này có thể sẽ yêu cầu thay đổi thiết kế CPU.
Tạm thời, các bản cập nhật phần mềm có thể giúp giảm thiểu việc khai thác bằng cách vô hiệu hóa hoặc khắc phục một số hành vi được tối ưu hóa dẫn đến các lỗ hổng này.
Thật không may, vì những bản vá này ảnh hưởng đến quy trình tối ưu hóa trong bộ xử lý, các bản vá giảm thiểu có thể làm giảm hiệu suất của server của bạn. Mức độ chậm lại phụ thuộc nhiều vào loại công việc đang được thực hiện, với các quy trình chuyên sâu I / O chịu tác động lớn nhất.
Tình trạng bản vá giảm thiểu hiện tại
Tại thời điểm viết bài (ngày 9 tháng 1 năm 2018), các bản phân phối Linux đã bắt đầu phát hành các bản vá, nhưng chưa có bản phân phối nào được vá hoàn toàn.
Các bản phân phối đã phát hành bản cập nhật kernel với tính năng giảm thiểu một phần (được vá cho Meltdown VÀ biến thể 1 của Spectre) bao gồm:
- CentOS 7: kernel 3.10.0-693.11.6
- CentOS 6: kernel 2.6.32-696.18.7
Các bản phân phối đã phát hành bản cập nhật kernel với giảm thiểu một phần (được vá cho Meltdown) bao gồm:
- Fedora 27: nhân 4.14.11-300
- Fedora 26: nhân 4.14.11-200
- Ubuntu 17.10: kernel 4.13.0-25-generic
- Ubuntu 16.04: kernel 4.4.0-109-generic
- Ubuntu 14.04: kernel 3.13.0-139-generic
- Debian 9: kernel 4.9.0-5-amd64
- Debian 8: kernel 3.16.0-5-amd64
- Debian 7: kernel 3.2.0-5-amd64
- Fedora 27 Atomic: kernel 4.14.11-300.fc27.x86_64
- CoreOS: kernel 4.14.11-coreos
Nếu kernel của bạn được cập nhật ít nhất lên version tương ứng với version trên, một số bản cập nhật đã được áp dụng.
Hệ điều hành chưa phát hành kernel có giảm thiểu bao gồm:
- FreeBSD 11.x
- FreeBSD 10.x
Ubuntu 17.04 sắp hết hạn sử dụng vào ngày 13 tháng 1 năm 2018 sẽ không nhận được các bản vá . User được khuyến khích cập nhật hoặc di chuyển.
Cảnh báo: Ta thực sự khuyên bạn nên cập nhật hoặc di chuyển khỏi bất kỳ bản phát hành nào đã hết thời hạn sử dụng.Các bản phát hành này không nhận được các bản cập nhật bảo mật quan trọng cho các lỗ hổng như Meltdown và Spectre, điều này có thể khiến hệ thống và user của bạn gặp rủi ro.
Do mức độ nghiêm trọng của lỗ hổng này, ta khuyên bạn nên áp dụng các bản cập nhật khi chúng có sẵn thay vì chờ một bộ bản vá đầy đủ. Điều này có thể yêu cầu bạn nâng cấp kernel và khởi động lại nhiều lần trong những ngày và tuần tới.
Làm cách nào để áp dụng các bản cập nhật?
Để cập nhật server , bạn cần cập nhật phần mềm hệ thống sau khi có các bản vá cho bản phân phối của bạn. Bạn có thể cập nhật bằng cách chạy trình quản lý gói thông thường của bạn để download version kernel mới nhất và sau đó khởi động lại server của bạn để chuyển sang mã đã vá.
Lưu ý: Bài viết này được viết để có thể áp dụng chung và bất khả tri nền tảng. Nếu bạn đang sử dụng DigitalOcean làm nhà cung cấp dịch vụ lưu trữ của bạn và đang chạy Server cũ hơn, bạn có thể phải thực hiện thêm một bước trước khi bắt đầu.
Hệ thống quản lý nhân kế thừa của DigitalOcean đã sử dụng các nhân được quản lý bên ngoài có thể thay đổi trong console . Nếu Server sử dụng hệ thống này, bạn cần phải cấu hình nó để sử dụng quản lý nhân nội bộ trước khi tiếp tục (Server mới hơn sử dụng hệ thống này tự động). Để kiểm tra xem bạn có cần cập nhật lên nhân nội bộ hay không và để tìm hiểu cách thực hiện chuyển đổi, hãy đọc bài viết Cách cập nhật nhân của server DigitalOcean của ta .
Đối với server Ubuntu và Debian , bạn có thể cập nhật phần mềm hệ thống của bạn bằng cách cập nhật OS local và sau đó nâng cấp phần mềm hệ thống của bạn:
- sudo apt-get update
- sudo apt-get dist-upgrade
Đối với server CentOS , bạn có thể download và cài đặt phần mềm cập nhật bằng lệnh :
- sudo yum update
Đối với server Fedora , hãy sử dụng công cụ dnf
thay thế:
- sudo dnf update
Dù hệ điều hành nào, khi các bản cập nhật được áp dụng, hãy khởi động lại server của bạn để chuyển sang kernel mới:
- sudo reboot
Sau khi server trực tuyến trở lại, hãy đăng nhập và kiểm tra kernel đang hoạt động so với danh sách ở trên đảm bảo rằng kernel của bạn đã được nâng cấp. Kiểm tra các bản cập nhật mới thường xuyên đảm bảo rằng bạn nhận được các bản vá lỗi khác khi chúng có sẵn.
Bối cảnh bổ sung
Họ lỗ hổng Meltdown và Spectre khai thác các tính năng nâng cao hiệu suất trong các bộ xử lý hiện đại. Sự kết hợp của các tính năng của bộ xử lý như thực thi suy đoán, kiểm tra quyền , thực thi không theo thứ tự và bộ nhớ đệm CPU cho phép truy cập đọc vào các vị trí bộ nhớ nằm ngoài giới hạn. Kết quả là các chương trình không có quyền có thể bị buộc tiết lộ dữ liệu nhạy cảm từ bộ nhớ của chúng hoặc truy cập bộ nhớ quyền từ kernel hoặc các ứng dụng khác.
Meltdown hoạt động như thế nào?
Lỗ hổng Meltdown hoạt động bằng cách lừa bộ xử lý đọc vị trí bộ nhớ ngoài giới hạn bằng cách tận dụng các lỗ hổng trong tối ưu hóa CPU được gọi là thực thi đầu cơ. Ý tưởng chung hoạt động như thế này:
- Một yêu cầu được thực hiện cho một vị trí bộ nhớ bất hợp lệ .
- Yêu cầu thứ hai được thực hiện để đọc có điều kiện một vị trí bộ nhớ hợp lệ nếu yêu cầu đầu tiên chứa một giá trị nhất định.
- Sử dụng thực thi suy đoán, bộ xử lý hoàn thành công việc nền cho cả hai yêu cầu trước khi kiểm tra xem yêu cầu ban đầu có không hợp lệ hay không. Khi bộ xử lý hiểu rằng các yêu cầu liên quan đến bộ nhớ ngoài giới hạn, nó sẽ từ chối chính xác cả hai yêu cầu. Mặc dù kết quả không được bộ xử lý trả về sau khi mã kiểm tra quyền xác định quyền truy cập bộ nhớ là không hợp lệ, cả hai vị trí được truy cập vẫn nằm trong bộ nhớ cache của bộ xử lý.
- Một yêu cầu mới hiện được thực hiện cho vị trí bộ nhớ hợp lệ. Nếu nó trả về nhanh chóng, thì vị trí đó đã nằm trong bộ nhớ cache của CPU, cho biết rằng yêu cầu có điều kiện trước đó đã được thực thi. Việc sử dụng lặp đi lặp lại các điều kiện này được dùng để hiểu giá trị ở các vị trí bộ nhớ nằm ngoài giới hạn.
Meltdown đại diện cho một lỗ hổng cụ thể có thể được vá.
Spectre hoạt động như thế nào?
Spectre cũng hoạt động bằng cách lừa bộ xử lý lạm dụng thực thi suy đoán để đọc các giá trị bị hạn chế. Thông báo tiết lộ mô tả hai biến thể với mức độ phức tạp và tác động khác nhau.
Đối với biến thể 1 của Spectre, bộ xử lý bị lừa thực hiện đọc một cách giả định trước khi kiểm tra giới hạn được thực thi. Đầu tiên, kẻ tấn công khuyến khích bộ xử lý tiếp cận một cách phỏng đoán vị trí bộ nhớ ngoài ranh giới hợp lệ của nó. Sau đó, giống như Meltdown, một lệnh bổ sung tải một cách có điều kiện một địa chỉ hợp lệ vào bộ nhớ cache dựa trên giá trị nằm ngoài giới hạn. Thời gian mất bao lâu để truy xuất địa chỉ hợp lệ sau đó cho biết liệu nó có được tải vào bộ nhớ đệm hay không. Đến lượt nó, điều này có thể tiết lộ giá trị của vị trí bộ nhớ nằm ngoài giới hạn.
Biến thể 2 của Spectre là biến thể phức tạp nhất để khai thác và giảm thiểu chống lại. Các bộ xử lý thường thực hiện các lệnh một cách phỏng đoán ngay cả khi họ gặp một câu lệnh điều kiện chưa thể đánh giá được. Họ làm điều này bằng cách đoán kết quả có khả năng xảy ra nhất của điều kiện sử dụng một cơ chế được gọi là dự đoán nhánh.
Dự đoán rẽ nhánh sử dụng lịch sử của các lần chạy trước đó thông qua một đường dẫn mã để chọn một đường dẫn để thực thi một cách phỏng đoán. Điều này được dùng bởi những kẻ tấn công để yêu cầu một bộ xử lý đưa ra một quyết định suy đoán không chính xác. Bởi vì lịch sử lựa chọn nhánh không lưu trữ các tham chiếu tuyệt đối đến quyết định, một bộ xử lý có thể bị đánh lừa khi chọn một nhánh trong một phần của mã ngay cả khi được đào tạo trong phần khác. Điều này có thể được khai thác để tiết lộ các giá trị bộ nhớ nằm ngoài phạm vi chấp nhận được.
Kết luận
Spectre và Meltdown đại diện cho các lỗ hổng bảo mật nghiêm trọng; tiềm năng đầy đủ của tác động có thể có của chúng vẫn đang phát triển.
Để tự bảo vệ mình, hãy thận trọng trong việc cập nhật phần mềm hệ điều hành của bạn khi các bản vá được phát hành bởi các nhà cung cấp và tiếp tục theo dõi các thông tin liên lạc liên quan đến các lỗ hổng Meltdown và Spectre.
Các tin liên quan
Sơ lược về lịch sử Linux2017-10-27
Cách thiết lập Shiny Server trên Ubuntu 16.04
2017-10-25
Cách thiết lập server lưu trữ đối tượng bằng Minio trên Ubuntu 16.04
2017-08-30
Cách chạy server MongoDB an toàn với OpenVPN và Docker trên Ubuntu 16.04
2017-03-24
Kết xuất phía server cơ bản với Vue.js và Express
2017-03-14
Cách thiết lập server VPN IKEv2 với StrongSwan trên Ubuntu 16.04
2017-02-17
Cách cấu hình firewall Linux cho Docker Swarm trên CentOS 7
2017-01-11
Cách cấu hình firewall Linux cho Docker Swarm trên Ubuntu 16.04
2017-01-09
Cách cài đặt Linux, Nginx, MySQL, PHP (LEMP Stack) trên Debian 8
2016-12-20
Cách thiết lập xác thực Linux tập trung với FreeIPA trên CentOS 7
2016-12-15