OpenSSH mã hóa Secret Keys trong bộ nhớ RAM để chống lại các cuộc tấn công “kênh bên”

Nhằm hỗ trợ và đồng hành cùng doanh nghiệp đẩy lùi hậu quả của đại dịch Covid-19, CyStack hỗ trợ: miễn phí 3 tháng bảo mật website & server với phần mềm Cloud Security. > Đăng ký ngay.

OpenSSH mã hóa chống lại các cuộc tấn công kênh bên

Mới đây, OpenSSH đã thiết lập tính năng mới nhằm mã hóa các khóa bí mật trong bộ nhớ nhằm chống lại các cuộc tấn công “kênh bên”.

Giải thích: Tấn công “kênh bên” (side-channel attacks) là những vụ tấn công mạng dựa vào những thông tin sinh ra từ việc vận hành của máy tính (VD: thông tin về thời gian, điện năng tiêu thụ, điện từ trường phát ra, hay thậm chí âm thanh phát ra cũng có thể làm một nguồn thông tin để hacker khai thác). Tấn công “kênh bên” không cần thiết phải có điểm yếu của code và hay thuật toán.

Trong những năm gần đây, các nhà nghiên cứu về an ninh mạng đã tiết lộ hàng chục lỗ hổng bộ nhớ kênh bên (memory side-channel vulnerabilities) trong các bộ xử lý và DRAM hiện đại, như Rowhammer, RAMBleed, SpectreMeltdown.

Bạn có phát hiện ra điểm chung trong những cuộc tấn công này hay không?

Nếu bạn đang nghĩ về OpenSSH thì bạn đã đúng. Đó chính xác là những gì chúng ta cần lưu tâm!  

Như được trình bày trong một PoC, nhiều nhà nghiên cứu đã mô phỏng các cuộc tấn công kênh bên chống lại các ứng dụng OpenSSH được cài đặt trên máy tính mục tiêu, trong đó một quá trình thuộc sở hữu của kẻ tấn công không có đặc quyền đã tiến hành khai thác các lỗ hổng đọc bộ nhớ (memory read vulnerabilities) để đánh cắp các khóa bí mật SSH riêng tư từ các vùng bộ nhớ bị hạn chế của hệ thống.

Điều này là hoàn toàn có thể vì OpenSSH vốn có một agent lưu trữ bản sao (copy) khóa SSH của người dùng trong bộ nhớ để họ không phải nhập cụm mật khẩu của mình mỗi khi muốn kết nối với cùng một máy chủ từ xa.

Tuy nhiên, các hệ điều hành hiện đại theo mặc định sẽ lưu trữ dữ liệu nhạy cảm, bao gồm cả khóa mã hóa và mật khẩu trong bộ nhớ kernel không thể truy cập được bởi các quy trình đặc quyền cấp người dùng.

Nhưng vì các khóa SSH này nằm trên bộ nhớ RAM hoặc CPU ở định dạng văn bản gốc (plaintext), nên tính năng này dễ bị hack khi các cuộc tấn công liên quan đến lỗ hổng đọc bộ nhớ.

OpenSSH hiện chỉ lưu trữ các khóa được mã hóa trong bộ nhớ

Có một tin tốt là trường hợp kể trên sẽ không còn xảy ra nữa.

Bản cập nhật mới nhất từ các nhà phát triển OpenSSH giải quyết vấn đề này bằng cách giới thiệu một tính năng bảo mật mới mã hóa các khóa riêng tư trước khi lưu trữ chúng vào bộ nhớ hệ thống, giúp bảo vệ bộ nhớ trước hầu hết các loại tấn công kênh bên.

Damien Miller, nhà phát triển OpenSSH cho biết bản vá mới hiện mã hóa các khóa riêng tư khi chúng không được sử dụng với khóa đối xứng (symmetric key) có nguồn gốc từ một “prekey” (tiền mã hóa) có kích thước tương đối lớn bao gồm dữ liệu ngẫu nhiên (hiện là 16KB).

Giải thích cho điều này, Miller cho biết kẻ tấn công phải khôi phục toàn bộ prekey với độ chính xác cao trước khi có thể giải mã khóa riêng tư được bảo vệ. Tuy nhiên, thế hệ tấn công hiện tại vẫn chứa tỷ lệ lỗi bit khi áp dụng tích lũy cho toàn bộ prekey nên quá trình khôi phục này trên thực tế rất khó xảy ra.

Dẫu vậy vẫn cần lưu ý rằng bản vá này chỉ giúp giảm nhẹ mối đe dọa và không phải là một giải pháp lâu dài. Miller cho biết OpenSSH sẽ loại bỏ tính năng bảo vệ này trước các cuộc tấn công kênh bên trong một vài năm tới khi kiến trúc máy tính trở nên an toàn hơn.

THN