Heartbleed - Nhịp đập dị thường

05/05/2014 07:22

Ngày 7/4/2014, trang mạng Heartbleed.com cảnh báo toàn thế giới về lỗi bảo mật mang tên Heartbleed. Heartbleed - một trong những sự cố nghiêm trọng nhất của Internet - xuất phát từ một lỗi lập trình rất đỗi... bình thường.


Sáng sớm ngày Thứ Sáu 4/4/2014, tại Silicon Valley (Mỹ), David Chartier - giám đốc điều hành của Công ty Codenomicon - nhận được cuộc gọi khẩn từ nhóm kỹ sư an ninh mạng ở trụ sở Codenomicon tại Helsinki (Phần Lan), thông báo rằng đã phát hiện một lỗi nghiêm trọng, cho phép đọc hầu như toàn bộ thông tin trên bộ nhớ của những máy chủ dùng phần mềm nguồn mở OpenSSL (Open Secure Socket Layer), như máy chủ của Google, Facebook, Yahoo,... cùng hàng triệu máy chủ khác (khoảng trên 60% số máy chủ của Internet). Hệ thống máy chủ của Apple và Microsoft dùng công nghệ SSL riêng, không dùng công nghệ nguồn mở OpenSSL.

SSL là nền tảng chuẩn của giao thức bảo mật HTTPS (do Công ty Netscape đề xuất vào năm 1994), giúp chuyển đổi tên người dùng dịch vụ và mật khẩu tương ứng thành dạng mật mã. Nhờ vậy, trong thao tác đăng nhập dịch vụ trên mạng, tên người dùng và mật khẩu không bị lộ khi truyền qua rất nhiều máy tính trung gian trên đường đi. Mỗi lần nhận được tên người dùng và mật khẩu, máy chủ dùng một chìa khóa bí mật (private key) để giải mật mã. Theo lý thuyết, giải mật mã khi không có chìa khóa bí mật là điều không thể. Tuyệt đối không thể!

Chartier hiểu ngay tầm vóc của vấn đề, nhưng để đánh giá chính xác mức độ nghiêm trọng của lỗi bảo mật, ông đề nghị nhóm an ninh mạng của Codenomicon đóng vai kẻ xâm nhập, thử nghiệm khai thác lỗi bảo mật của OpenSSL trên chính máy chủ của Codenomicon. Đóng vai kẻ xâm nhập thực ra là việc mà Codenomicon vốn quen làm khi tìm lỗi bảo mật của phần mềm trong các hợp đồng với Microsoft, Adobe, Verizon,...

Kết quả được thông báo từ Phần Lan khiến Chartier choáng váng. Nhờ lỗi bảo mật của OpenSSL, nhóm an ninh mạng Codenomicon đọc được từng phần khoảng 64 KB trên bộ nhớ máy chủ, phát hiện những tên người dùng đang hoặc đã đăng nhập máy chủ, cùng mật khẩu tương ứng (còn nằm trong bộ nhớ sau khi máy chủ giải mật mã) và phát hiện cả chìa khóa bí mật để giải mật mã! Điều không kém quan trọng là việc xâm nhập được thực hiện thông qua giao dịch với máy chủ như một người dùng bình thường, không để lại chút dấu vết nào có thể khiến người quản trị máy chủ nghi ngờ.

Codenomicon bí mật thông báo lỗi bảo mật vừa phát hiện cho Trung tâm An ninh mạng Quốc Gia của Phần Lan (Finnish National Security Cyber Center) và nhóm dự án nguồn mở OpenSSL, đồng thời tích cực tìm hiểu nguyên nhân gây lỗi.

Hóa ra nguyên nhân gây lỗi không khó tìm. Lỗi bảo mật xuất hiện trong những phiên bản OpenSSL từ cuối năm 2011, sau khi Robin Seggelmann - nghiên cứu sinh thuộc Đại học Khoa học Ứng dụng Muenster (Đức) - bổ sung chức năng Heartbeat cho OpenSSL. Heartbeat vốn là một chức năng thông thường trong kỹ thuật mạng, nhằm duy trì trạng thái kết nối thường xuyên giữa máy chủ và máy khách, thay cho việc thực hiện thường xuyên một loạt thao tác mất thời gian như khi thiết lập kết nối. Để thực hiện chức năng Heartbeat, máy khách gửi đều đều mẩu nhỏ dữ liệu giả (nội dung không quan trọng) cho máy chủ sau từng khoảng thời gian ngắn, tựa như nhịp đập của tim. Mỗi khi nhận được dữ liệu giả, máy chủ gửi trả ngược về máy khách như một cách báo hiệu máy chủ vẫn đang hoạt động bình thường. "Nhịp tim" xuất hiện xen kẽ những lần trao đổi dữ liệu thực sự giữa máy chủ và máy khách.

Chẳng may, trong chức năng Heartbeat của OpenSSL, khi đọc dữ liệu giả để gửi trả, máy chủ chỉ dựa vào khai báo chiều dài dữ liệu của phía khách. Nếu phía khách gửi dữ liệu ngắn hơn 64 KB nhưng khai báo chiều dài 64 KB, máy chủ vẫn gửi trả dữ liệu đủ 64 KB trên bộ nhớ, trong đó, ngoài dữ liệu giả nhận được, còn có nội dung nào đó trong bộ nhớ không thể lường trước. Theo cách như vậy, thông tin trong bộ nhớ của máy chủ bị rò rỉ. Codenomicon gọi đó là hiện tượng Heartbleed, nghĩa là “tim rỉ máu”. Cứ mỗi nhịp đập, tim lại rỉ máu!


Nhóm kỹ sư Codenomicon phát hiện lỗi Heartbleed: Ossi Salmi, Ville Alatalo, Tuomo Untinen, Antti Karjalainen và Ossi Herrala.


OpenSSL phổ biến trên Internet vì miễn phí, trong khi phần mềm SSL thương mại rất đắt. Là người có nhiều đóng góp cho dự án nguồn mở OpenSSL, Seggelman bổ sung chức năng Heartbeat cho OpenSSL trong khi làm luận án tiến sĩ. Thật trớ trêu, chức năng Heartbeat trong OpenSSL là phần việc nhỏ của luận án, không nhằm mục đích nào khác hơn mục đích được đề ra trong luận án: củng cố tính bảo mật của Internet.

Seggelman thuộc về số ít chuyên gia am hiểu lĩnh vực mật mã. Tuy OpenSSL là phần mềm nguồn mở, không có nhiều người đọc hiểu mã nguồn OpenSSL. Lỗi Heartbleed - một lỗi bình thường của người lập trình - cứ tồn tại âm thầm (và có thể đã bị lợi dụng âm thầm) đến hơn hai năm!

Ngay trong thời gian thảo luận với nhóm dự án OpenSSL về lỗi Heartbleed, Codenomicon mua tên miền Heartbleed.com, chuẩn bị thiết lập trang mạng riêng để thông báo công khai về lỗi Heartbleed một khi việc sửa lỗi hoàn tất và phiên bản OpenSSL cập nhật sẵn sàng phát hành. Một họa sĩ của Codenomicon thiết kế biểu tượng... đáng sợ cho Heartbleed, cố ý thể hiện tính nghiêm trọng của Heartbleed qua hình ảnh trái tim có các dòng máu rỉ chảy dài!



Khi bí mật liên lạc với các bên liên quan về lỗi Heartbleed, Codenomicon được biết chuyên gia bảo mật Neel Mehta của Google cũng phát hiện lỗi Heartbleed (Google gọi bằng tên khác) một cách độc lập vào ngày 21/3/2014 và thông báo cho nhóm dự án OpenSSL vào ngày 1/4/2014.

Google đã âm thầm sửa lỗi Heartbleed cho các dịch vụ của mình (trong đó có dịch vụ thư điện tử Gmail) ngay sau khi phát hiện lỗi. Facebook cũng nhận được thông báo về lỗi Heartbleed và sửa lỗi trước khi Codenomicon công bố trang mạng Heartbleed.com. Yahoo, Flickr, Tumblr, DropBox, WordPress, Wikipedia, Cisco, Juniper, Ubuntu,... có lỗi Heartbleed trong hệ thống máy chủ nhưng chỉ biết tin về Heartbleed sau khi Heartbleed được công bố.

Sau khi Heartbleed được thông báo rộng rãi, người dùng Internet hiểu rằng những mật khẩu của mình có thể đã bị lộ. "Trào lưu" thay đổi mật khẩu lan rộng. Nhiều trang mạng nhấn mạnh lời khuyên "cổ điển" cho mọi người dùng Internet: thay đổi mật khẩu thường xuyên và sử dụng biện pháp đăng nhập hai mức.

Tuy nhiên, việc khắc phục lỗi Heartbleed không thể tiến hành nhanh chóng. Những nhà cung cấp dịch vụ còn phải thực hiện công đoạn mất thời gian: thay đổi chìa khóa bí mật dùng cho việc giải mật mã vì chìa khóa cũ có thể đã bị lộ. Một khi chìa khóa bí mật không bảo đảm bí mật, việc thay đổi mật khẩu thường xuyên của người dùng trở nên vô hiệu.

Ngoài ra, hoàn toàn có thể xuất hiện lỗi "Heartbleed ngược": khi máy khách dùng công nghệ OpenSSL, máy chủ có thể "do thám" bộ nhớ của máy khách. Có thể xuất hiện những dịch vụ với mục đích thực sự là đánh cắp thông tin của máy khách, tựa như việc mở cửa hàng chỉ để móc túi khách ghé thăm. Google thừa nhận những thiết bị di động dùng hệ điều hành Android 4.1.1 (khoảng 50 triệu thiết bị) có thể làm lộ thông tin của người dùng do "Heartbleed ngược" khi liên lạc với dịch vụ... bất lương. Nhận biết dịch vụ có ác ý là điều không dễ dàng khi có rất nhiều ứng dụng trên Android thực hiện đủ loại dịch vụ.

Seggelman rất buồn vì tên anh bị gắn với Heartbleed cùng những lời kết tội về việc cố ý gây lỗi để thủ lợi! Rất ít người biết đến đóng góp của Seggelman cho dự án nguồn mở OpenSSL. Seggelman đi vào lịch sử Internet theo cách mà anh không hề mong muốn.

Heartbleed trở thành một ví dụ điển hình về sự sụp đổ dị thường của hệ thống vững mạnh xuất phát từ một lỗi không bí hiểm. Sự an toàn "tuyệt đối" có thể biến mất bất ngờ từ một chi tiết bình thường, nhỏ nhặt!

NGỌC GIAO


Ý kiến bạn đọc (0)
Tên   Email

Lên đầu trang