Trước khi đi vào bài viết tản mạn kì này, mình xin phép được giải nghĩa một số thuật ngữ: + COC - Code of Conduct hay Chuẩn mực hành vi, theo định nghĩa của Wikipedia, là một bộ các hướng dẫn, quy định và tiêu chí cho các hành vi, hành xử, hành động của một tổ chức mà các thành viên phải tôn trọng và tuân thủ. + The Linux Kernel Contributor Covenant Code of Conduct: tiêu chuẩn cộng đồng của Linux Kernel! [1]
Câu hỏi đặt ra là, tại sao chúng ta cần tuân thủ các tiêu chuẩn này? Việc vi phạm chúng sẽ gây ra hệ quả thế nào? Câu chuyện dưới đây sẽ phần nào phản ánh và trả lời các khúc mắc này.
Câu chuyện: Cách mà một trường đại học top đầu khiến chính mình bị cấm cửa khỏi Linux Kernel Community.
Vào nửa đêm ngày 7 tháng Tư năm 2021, chính xác là 0 giờ 26 phút UTC, một bản vá lỗi được gửi tới Linux Kernel từ một trường đại học có tiếng, đại học Minnesota. Bản vá lỗi gây tranh cãi này do một học sinh Ph.D. khoa khoa học máy tính của trường, Aditya Pakki, đề xuất, sau 15 ngày, nhanh chóng bị bác bỏ. Cộng đồng và người chủ quản của Linux Kernel, Greg Kroah-Hartman đã phát hiện ra các bản vá này và nhiều bản vá khác đến từ trường có xu hướng cố ý gây ra lỗi hệ thống để phục vụ cho việc thí nghiệm và viết báo của một nhóm nghiên cứu đại học này. Sau đó toàn bộ các bản vá đến từ trường bị revert, và toàn trường bị cấm khỏi cộng đồng Linux Kernel. Các bạn có thể đọc thêm màn ăn miếng trả miếng của thanh niên này tại đây [2]
Xa hơn, vào năm 2017, một nhà nghiên cứu về bảo mật hệ thống tên Kangjie Lu trở thành Phó Giáo Sư (Assistant Professor) tại trường đại học Minnesota. Nghiên cứu của vị này liên quan về sự giao thoa giữa bảo mật, hệ điều hành, chương trình phân tích và trình biên dịch. Không nằm ngoài dự đoán, Lu để mắt đến nhân Linux và sau đó hầu hết các bài báo của ông ta đều liên quan đến Linux Kernel. Xem thêm [3]
Ở mức độ cơ bản thì nhân Linux là cốt lõi của bất kì hệ điều hành/bản phân phối Linux nào. Nó chính là cầu nối giữa hệ điều hành và phần cứng, thiết bị. Người dùng sẽ không tương tác trực tiếp với Kernel, mọi công việc sẽ được Kernel quản lí như bộ nhớ, lập lịch, lưu trữ, etc. Kernel là mã nguồn mở với hàng triệu dòng mã được công khai với bất kì ai xem và đóng góp.
Lẽ dĩ nhiên, một bản vá được chấp thuận để đưa vào Kernel không bao giờ là dễ! Một bản vá sẽ được gửi đi và phải được review bởi một ban bệ lớn gồm các nhà phát triển và người bảo trì (họ là các tình nguyện viên, có công việc riêng, họ đảm nhiệm và chịu trách nhiệm bảo trì các phần khác nhau trong Kernel). Bản vá sẽ được đưa vào mainline repo, sau đó trải qua một thời gian dài thử nghiệm trước khi được tích hợp hoàn toàn vào các bản ổn định (stable release). Đây là một hệ thống nghiêm ngặt nhằm loại bỏ các tác nhân gây hại hoặc những thanh niên "gà" nhưng muốn có fame (đại loại như ta cũng là Linux distributor đấy nhé, bản vá của ta sửa lỗi chính tả trong README :v). Tuy nhiên, hệ thống nào dù chặt chẽ tới đâu cũng sẽ có chỗ hở.
Lu nghiên cứu về khả năng xảy ra lỗi do con người gây ra và cách giảm thiểu khả năng tạo bugs. Lu đề xuất các hệ thống tự động phát hiện nhiều loại lỗi khác nhau trong mã nguồn mở, và dĩ nhiên, gã dùng nhân Linux để thử nghiệm. Năm 2019, nhóm nghiên cứu mà dẫn đầu bởi Lu và hai thanh niên PhD là Aditya Pakki và Qiushi Wu, đã cho ra mắt một hệ thống có tên "Crix" cho phép phát hiện một số loại hình bugs phổ biến trong OS Kernels. Bài báo chỉ rõ trong tổng cộng 278 con bugs mà công cụ này phát hiện ra, có 151 lỗi đã được các nhà bảo trì chấp thuận, một tương lai đầy hứa hẹn cho công cụ này! Tuy nhiên, vài năm sau, tham vọng của Lu không dừng lại ở đó, lần này gã nhắm đến cộng đồng Linux Kernel. Trong một bài báo có tựa đề "On the Feasibility of Stealthily Introducing Vulnerabilities in Open-Source Software via Hypocrite Commits", Lu và Wu đã giải thích rằng họ có thể tạo ra các lỗ hổng trong nhân Linux bằng cách gửi các bản vá có vẻ như đang vá lỗi nhưng cũng âm thầm gây ra các bugs nghiêm trọng (quá báo rồi :v). Họ gọi đây là những "hypocrite commits" - những bản commit đạo đức giả!
Mục tiêu của thử nghiệm này là cải thiện tính bảo mật của Linux Kernel bằng cách chứng minh cho các nhà phát triển rằng một tác nhân độc hại có nguy cơ cao lọt qua tầm mắt họ. OK, đến đây một số bạn có thể lập luận rằng, ừ thì quy trình của họ khá tương tự như hacker mũ trắng: thử nghiệm -> tìm lỗi -> thông báo cho các nhà phát triển. Tuy nhiên phản ứng lớn nhất mà bài báo nhận được cả trên các trang mạng xã hội và khắp cộng đồng Linux là sự bất bình, phản đối kịch liệt.
Greg Scott, một chuyên gia CNTT làm việc với phần mềm mã nguồn mở ngót nghét 20 năm, chê mạnh: "Bài báo đó thật vớ vẩn!". Nhà nghiên cứu bảo mật Kenneth White, giám đốc dự án Open Crypto Audit, cũng phản bác: "Theo tôi, việc làm đó hoàn toàn phi đạo đức". Trong bài báo, Lu và Wu tuyên bố rằng không có lỗi nào can thiệp hoặc xâm nhập sâu vào Kernel, và họ đã gỡ bỏ các bản vá nháp sau đó, cung cấp bản vá thật sự. Theo như mình tìm hiểu được thì các bản vá có bugs chủ yếu là Use-After-Free (UAF). Lỗi này xuất hiện khi ta không quản lí cấp phát và hủy cấp phát bộ nhớ đúng cách, hậu quả là rò rỉ bộ nhớ (memleak), thao tác mã lỗi tùy ý, thậm chí là leo thang đặc quyền (EoP hay Privilege Escalation, trong IOS ta có thuật ngữ quen thuộc Jailbreaking, hoặc trong Android là rooting :v, giúp người dùng có quyền hạn cao nhất của root user).
Kết cục của màn combat giữa các thanh niên này và Cộng đồng Linux Kernel là, hai vị trưởng và phó khoa CS&E, Heimdahl và Terveen, đã phải đăng đàng xin lỗi cộng đồng:
Về phía nhóm nghiên cứu, các thanh niên cũng lên bài xin lỗi trong cộng đồng, nhưng vẫn có những ngôn từ bao biện và ấm ức :v. Mailing list here.
KẾT BÀI: Sau tất cả, vụ lùm xùm này khiến cộng đồng nói chung và người dùng nói riêng tin tưởng hơn vào sự an toàn của hệ thống Linux. Và mặc dù ăn gạch đá (Pull requests và Issues của cái repo [4] cho bài báo đỏ lòm một thời gian và bị xóa hết), cái repo vẫn còn đó, vết nhơ vẫn còn đó và bài học kinh nghiệm thấm đẫm chua cay này được các trường khác cũng như công ty công nghệ lớn noi theo và cẩn trọng khi phê duyệt các commits quy mô lớn hay dự án nghiên cứu mang tính chất cộng đồng.