Câu chuyện tôi từng vấp phải lỗ hổng khóa yếu của Debian
- Vào tháng 3 năm 2008, tác giả đang làm việc tại Engine Yard (EY)
- Khi đó EY đang hỗ trợ GitHub bằng cách cung cấp hạ tầng miễn phí
- Khi GitHub phát triển, đã phát sinh vấn đề thời gian đăng nhập SSH trở nên chậm
- GitHub đang dùng cách tiêu chuẩn là tệp
~/.ssh/authorized_keys để quản lý khóa SSH
- Khi người dùng kết nối, SSH mở tệp này và tìm tuyến tính khóa khớp với khóa mà người dùng đưa ra
- Thông thường chỉ có vài khóa nên không thành vấn đề, nhưng khi số người dùng tăng như GitHub thì sẽ chậm
Quyết định dùng DB MySQL thay cho tệp authorized_keys
- Sau khi xem xét nhiều phương án, họ quyết định vá OpenSSH để việc tra cứu khóa được thực hiện qua DB MySQL
- Đây là một quyết định thận trọng, và họ đã nỗ lực rất nhiều để không làm tổn hại đến bảo mật
- Giải pháp được áp dụng vào đầu tháng 4 năm 2008, qua đó giải quyết vấn đề tốc độ đăng nhập SSH
Chuyện lạ xảy ra
- Một tháng sau, vào đầu tháng 5, đã xảy ra vấn đề một số người dùng có thể truy cập kho lưu trữ của người khác qua SSH
- Kết quả điều tra cho thấy những người dùng khác nhau đang sử dụng các khóa có cùng dấu vân tay khóa
- Điều này không thể xảy ra nếu họ không chia sẻ khóa với nhau
- Người dùng nói rằng họ không hề quen biết nhau và cũng không biết khóa đã bị lộ như thế nào
- Vấn đề tương tự cũng được phát hiện ở các cặp người dùng khác
- Điểm chung duy nhất là tất cả đều dùng hệ thống Debian hoặc Ubuntu
Xác định nguyên nhân
- Đến ngày 13 tháng 5 năm 2008, khi DSA-1571-1 được công bố, mọi chuyện mới trở nên rõ ràng
- Một maintainer của Debian khi dọn dẹp mã sinh số ngẫu nhiên của OpenSSL đã vô tình làm giảm số lượng khóa có thể có xuống còn khoảng 32.000
- Nhiều người tham gia GitHub rồi tạo khóa mới theo thông lệ tốt, và vì thế đã xảy ra va chạm
- Sau đó tác giả còn liên quan sâu hơn đến vấn đề này, chẳng hạn dùng các khóa yếu đã biết để tìm ra những cơ quan chứng thực có vấn đề
Ý kiến của GN⁺
- Để phát hiện một lỗ hổng quan trọng như vậy, cần có suy nghĩ “có gì đó không ổn” cùng thời gian và năng lượng để điều tra bền bỉ. Thông thường không có nhiều dư địa như vậy, nên cũng cần phần nào may mắn.
- Phần lớn mọi người bị cuốn theo nhịp sống bận rộn nên khó lần ra nguyên nhân gốc rễ của vấn đề. Việc ngành của chúng ta lấy lại được khoảng trống đó là một bài toán quan trọng.
- OpenSSL là một trong những thư viện mã hóa được dùng rộng rãi nhất, nên tác động của kiểu lỗ hổng này là rất lớn. Đây là ví dụ điển hình cho cả mặt mạnh lẫn mặt yếu của mã nguồn mở.
- Để phòng ngừa loại lỗ hổng này, cần tăng cường review code và kiểm toán bảo mật, đồng thời xem xét cẩn trọng hơn các thay đổi ở những phần quan trọng. Tuy vậy, không có phương pháp nào là hoàn hảo.
- Dù vậy, mã nguồn mở vẫn có ưu điểm là các chuyên gia có thể trực tiếp xem mã để tìm ra vấn đề. Với phần mềm đóng thì ngay cả điều đó cũng không thể.
1 bình luận
Ý kiến Hacker News
~/.ssh/authorized_keysphoặcqcũng là một giai thoại thú vị