Việc Fuzzing ở Google
Fuzzing vốn không phải là kỹ thuật mới mẻ đối với người làm công tác kiểm thử an toàn phần mềm. Tuy nhiên, có lẽ không phải bất cứ ai hiểu rõ về fuzzing cũng nhìn thấy tầm quan trọng của công tác này. Vừa qua, Dmitri Vjukov - một chuyên gia phân tích, phát hiện lỗ hổng của Google đã chia sẻ trên Tạp chí Hacker (Nga) một số thông tin thú vị về việc fuzzing tại Google. Qua những chia sẻ của anh có thể thấy được tầm quan trọng của fuzzing trong kiểm thử phần mềm nói chung và vai trò của nó đối với gã khổng lồ Google nói riêng. Danh xưng "tôi" trong bài báo dưới đây chính là Dmitri Vjukov - tác giả bài viết gốc.
Tại sao fuzzing lại được sử dụng ở Google?
Ngày nay, công nghệ cho phép phát triển phần mềm với tốc độ nhanh hơn, vì thế mà lượng code chúng tôi có là rất lớn. Tính chính xác của code là rất quan trọng và tính ổn định cũng thế, nhưng tính an toàn càng quan trọng hơn và phải ở vị trí số 1. Thị trường hiện nay yêu cầu công việc phải được giải quyết một cách nhanh chóng, nhưng bất kỳ công ty nào cũng phải kiểm soát được chi phí sản xuất. Do vậy, không thể tăng tốc công việc bằng cách thuê nhiều nhân công hơn; mà thị trường lao động hiện nay không đáp ứng được số lượng lớn lao động có trình độ chuyên môn cao như đòi hỏi của Google.
Trong hoàn cảnh này, giải pháp kiểm thử truyền thống không còn phù hợp và không bắt kịp tốc độ tăng số lượng code. Vì thế, việc chuyển sang kiểm thử tự động bằng fuzzing là điều dễ hiểu. Để thực hiện điều này, chúng tôi kêu gọi các chuyên gia (developer) phát triển các bài kiểm tra để bổ sung vào tập hợp các bài kiểm tra thử nghiệm khác.
Hiện tại, chúng tôi triển khai OSS-Fuzz trên các server của mình. Đây là một hệ thống liên tục thực hiện fuzzing cho ác dự án nguồn mở. Đến nay, đã có hơn 200 dự án tham gia chương trình này. Nếu như bạn có một sản phẩm nguồn mở với lượng người dùng đông đảo, bạn có thể tham gia vào OSS-Fuzz. Bạn chỉ cần cung cấp fuzzer cho chúng tôi cùng chỉ dẫn để biên dịch phiên bản mới nhất, chúng tôi sẽ cung cấp cho bạn dịch vụ hosting trên cluster để thực hiện tìm kiếm lỗi.
Tiến trình Fuzzing sử dụng OSS-Fuzz
Trong năm 2017, OSS-Fuzz đã giúp phát hiện ra hơn 2.000 lỗi trong 16 dự án mã nguồn mở khác nhau. Hiện nay, số lượng dự án đã tăng lên hơn 3 lần, còn số lượng lỗi đã được phát hiện thì vượt quá 10.000 lỗi. Trong số những lỗi tìm được, thì có khoảng 35% là những trường hợp bất thường được phát hiện theo cách Sanitizer UBsan, khoảng 15% là lỗi liên quan đến bộ nhớ và tràn bộ đệm và hơn 10% là những lỗi có bản chất rất khác nhau.
Ngoài ra, chúng tôi còn có ClusterFuzz dành riêng để fuzzing cho Chromium. Đến nay, hệ thống này bao gồm hơn 350 fuzzer; phần lớn trong số đó là dựa trên libFuzzer và AFL, nhưng cũng có những fuzzer hoàn toàn chuyên biệt.
Chúng tôi cũng nỗ lực khuyến khích sử dụng fuzzing ngoài phạm vi Google thông qua các hoạt động như: tổ chức cuộc thi fuzzing, tổ chức tuần lễ fuzzing, trình bày các báo cáo về fuzzing ở các hội nghị khác nhau.
Có lần tôi đã tự hỏi: tổng cộng chúng tôi đã phát hiện được bao nhiêu lỗi nhờ fuzzing? Năm 2017, con số này là khoảng 15.000. Tôi không rõ đó là do code của chúng tôi quá tồi hay là do các fuzzer hoạt động quá hiệu quả!
Trên đây là đôi nét về việc fuzzing ở Google, hi vọng qua đây những người làm an toàn thông tin, đặc biệt là các bạn sinh viên, sẽ có thêm động lực để theo đuổi lĩnh vực rất khó là phát hiện lỗ hổng phần mềm.
Nguyễn Tuấn Anh
Tạp chí Hacker số 05 (242) 2019