Fuzzing – Công cụ hữu ích trong quá trình kiểm thử Pentesting
Mặc dù fuzzing nghe có vẻ giống như một từ thông dụng khác trong an ninh mạng, nhưng nó đã tiếp tục trở nên phổ biến trong vài năm qua và không có dấu hiệu biến mất.
Cách nhóm dev đã đều biết rằng trong ứng dụng của họ chắc chắn sẽ có lỗ hổng bảo mật và họ cũng cần các công cụ có thể được sự dụng bởi bất kì ai để mô phỏng các cuộc tấn công thực sự.
Chính vì vậy, các nhà phát triển tiếp cận một công cụ kiểm thử mới cho họ khả năng suy như như một hacker thực thụ. Để đáp ứng được nhu cầu đó, giải pháp kiểm thử fuzzing ra đời.
Lịch sử ra đời của giải pháp kiểm thử fuzzing:
Với một số công cụ fuzzing phổ biến trên thị trường, cụm từ fuzzing có thể đã trở thành một từ thông dụng trong cộng đồng AppSec và DevOps trong những năm gần đây, nhưng khái niệm này không phải là mới.
Thuật ngữ “fuzzing” đã được sử dụng rộng rãi trong hơn ba thập kỷ sau khi lấy tên của nó từ Barton Miller trong một dự án lớp học năm 1988 của Đại học Wisconsin. Tuy nhiên, khái niệm, ban đầu được gọi là thử nghiệm ngẫu nhiên (random testing) và thử nghiệm trên khỉ (monkey testing), đã xuất hiện ít nhất từ những năm 1950.
Định nghĩa về kiểm thử fuzzing:
Nói một cách đơn giản, fuzzing là một phương pháp “kiểm tra hộp đen” (blackbox testing) trong đó ứng dụng được kiểm tra từ bên ngoài vào – như khi một hacker cố gắng đột nhập mà không có quyền truy cập vào mã nguồn.
Ngày nay, kiểm thử Fuzzing được đề cập tới là quá trình tự đồng rò quét ra các lỗ hổng bảo mật của phần mềm bới cách đưa hàng loạt các đầu vào hoán vị vào chương trình và phân tích kết quả cho đến khi một trong những đầu vào đó phát hiện ra một lỗ hổng. Đây là một kĩ thuật blackbox và bảo đảm chất lượng (QA) dựa vào một lượng lớn đầu vào gọi là fuzz vào một phần mềm mục tiêu để cố gắng phá hủy nó
Fuzzing đã xuất hiện được một thời gian nhưng gần đây đã trở nên nổi tiếng khi các tổ chức bắt đầu hiểu tầm quan trọng của việc suy nghĩ như một hacker trong cuộc chiến chống lại cuộc tấn công mạng
Trong nhiệm vụ khám phá các lỗ hổng zero-day, kiểm tra fuzz là một trong những quy trình hiệu quả nhất mà các nhà phát triẻn có thể tham gia để cải thiện khả năng phục hồi an ninh mạng của mình. Qua đó, các nhà phát triển có thể sử dụng fuzzing để tạo mã an toàn hơn thông qua thử nghiệm trong giai đoạn phát triển và QA.
Nguyên lí hoạt động:
Mặc dù có vẻ như tin tặc dành rất nhiều thời gian để nghiên cứu các phần mềm hoặc hệ thống khác nhau để tìm các lỗ hổng bảo mật, nhưng điều đó không phải lúc nào cũng đúng. Họ thường chỉ loanh quanh cho đến khi tìm ra điểm yếu để khai thác. Khi quá trình chọc ngoáy này được tạo lại cẩn thận thành một quy trình thử nghiệm được xác định rõ ràng, thì nó được gọi là fuzzing.
Cách thức kiểm thử fuzzing hoạt động bằng cách chọc vào các phần mềm, firmware, mạng và thậm chí là phần cứng nhằm tìm ra lỗ hổng mà tin tặc có thể tấn công. Các công cụ chuyên dụng, được gọi là các fuzzer, được thiết kế để tìm ra các lỗ hổng này càng nhanh càng tốt.
Trong khi các công cụ kiểm tra bảo mật ứng dụng (appsec) khác tập trung vào việc phát hiện các lỗ hổng đã biết, đòi hỏi quyền truy cập vào mã nguồn, các fuzzer dựa vào việc sử dụng càng nhiều đầu vào càng tốt để phát hiện ra các lỗi mới và chưa biết. Fuzzers có thể hoạt động khi có hoặc không có quyền truy cập vào mã nguồn của phần mềm.
Các Fuzzer thông minh và truyền thống
Trong khi hầu hết các bộ fuzzer sử dụng đầu vào hoàn toàn ngẫu nhiên để thăm dò phầm mềm (chính là các fuzzer truyền thống), còn có loại fuzzer mới hay còn gọi là bộ fuzzer thông minh, được lập trình với moohjt số tri thức về đầu vào và các loại file cần thiết
Thay vì cho càng nhiều đầu vào ngẫu nhiên vào phần mềm, các fuzzer thông minh sử dụng các thuật toán để xác định cuộc tấn nào có nhiều khả năng bị khai thác nhất. Fuzzer thông minh có thể kiểm tra tất cả các giao thức internetm ngay cả các giao thức phức tạp như SIP (giao thức khởi tạo phiên). Và các bộ fuzzer thông minh kiểm tra ứng dụng theo mã nhị phân, do đó hoàn toàn không bị phụ thuộc vào ngôn ngữ lập trình. Tất cả những khả năng này có nghĩa là các bộ fuzzer thông minh có nhiều khả năng tìm thấy lỗ hổng hơn trong khoảng thời gian ngắn hơn
5 lợi ích của kiểm thử fuzzing:
Khi hacker tiếp tục phát triển về các phương pháp tấn công, thì nhu cầu về các công cụ kiểm tra bảo mật hiệu quả hơn cũng sẽ tăng lên. Nếu tổ chức đi trước các đối tượng tội phạm mạng trong thế giới ngày nay, thì tổ chức đó sẽ cần một chiến lược an ninh mạng tích cực thúc đẩy quá trình phát triển ở mọi giai đoạn của vòng đời phát triển phần mềm. Và 5 lợi ích chính của việc sử dụng fuzzing:
Tiết kiệm chi phí kiểm thử an ninh – Tỷ lệ lợi ích trên chi phí của kiểm fuzzing là rất lớn. Khi được so sánh với các kỹ thuật kiểm tra bảo mật khác, giải pháp này trở nên lý tưởng cho các doanh nghiệp có ngân sách tiết kiệm. Bằng cách cho phép các công ty có ý thức về chi phí phát hiện ra các lỗi phần mềm bị tin tặc khai thác, fuzzing cung cấp giải pháp kiểm tra bảo mật hiệu quả về chi phí
Bảo vệ khỏi các lỗ hổng zero-day – Các lỗ hổng chưa được biết đến là nỗi kinh hoàng đối với mọi tổ chức. Tuy nhiên, nếu giải pháp này được thực thi thành công như một phần của quá trình kiểm thử an ninh bảo mật của tổ chức, fuzzing sẽ đạt hiệu quả và giảm thiểu các lỗ hổng zero-day
Phát hiện ra các lỗi của mã code ở trong giải đoạn đầu của vòng đời phát triển phần mềm SDLC – khi kết hợp kiểm tra fuzzing trong các giai đoạn khác nhau của vòng đời phát triển phần mềm (SDLC), các team phát triển có thể phát hiện hầu hết các lỗi code trong giai đoạn phát triển hoặc giai đoạn đảm bảo chất lượng (QA), chi phí này rẻ hơn nhiều so với việc phát hiện ra chúng trong quá trình sản xuất.
Cải thiện kết quả kiểm tra bảo mật – Mặc dù kiểm tra fuzz có thể không phải là một giải pháp kiểm tra bảo mật toàn diện, nhưng khi được triển khai như một phần của chiến lược kiểm thử blackbox, nó chắc chắn sẽ nâng cao kết quả kiểm tra bảo mật.
Đảm bảo rằng tất cả các lỗ hổng bảo mật tiềm ẩn đều được khám phá – Khái niệm fuzzing hoạt động theo cách mà tất cả các lỗ hổng tiềm ẩn đều được khám phá hoặc kiểm tra, và các lỗ hổng chưa được biết đến đều được phát hiện.
Cách lựa chọn công cụ fuzzing phù hợp:
Các nhà cung cấp khác nhau cung cấp các fuzzer với một loạt các tính năng và khả năng. Tuy nhiên, có một số tính năng cần thiết nên tìm kiếm trong một công cụ fuzzing.
Hỗ trợ đa giao thức – với hơn 250 công cụ fuzzer trên thị trường, và có rất nhiều các biến thể trong số đó. Trong khi một số các fuzzer cho phép hỗ trợ các giao thức của hãng và các giao thức tự phát triển mà nó có thể mở rộng, một số fuzzer khác thì không. Các fuzzer phù hợp sẽ hỗ trợ toàn bộ các giao thức doanh nghiệp đang sử dụng và cả trong tương lai.
Tốc độ – Thời gian là một trong những yếu tô tiên quyết đối với việc rò quét lỗ hổng. Một fuzzer đáng tin cậy phải có thể hỗ trợ các bài kiểm tra tải của nhiều cuộc tấn công nhất có thể mỗi giây. Cho dù đó là fuzzer truyền thống với các đầu vào ngẫu nhiên hay các fuzzer thông minh sử dụng đầu vào thông minh, việc nhận được fuzzer có thể chạy nhiều trường hợp thử nghiệm nhất có thể mỗi giây là rất quan trọng để phát hiện ra các lỗ hổng bảo mật ứng dụng (appsec).
Phạm vi mã code – phạm vi mã code đề cập tới số lượng mã phần mềm có thể được thực thi bởi fuzzer, nói cách khác là năng lực quét code của fuzzer. Phạm vi code càng rộng thì kiểm tra càng kỹ lưỡng. Tuy nhiên, chỉ thử nghiệm nhiều mã không phải là câu trả lời. Trừ khi biết phần nào của mã nguồn được thực thi, nếu không sẽ không thực sự biết mức độ kỹ lưỡng của quá trình kiểm tra. Lý tưởng nhất là khoanh vùng các vùng code, rồi tiến hành kiểm tra fuzzing từng vùng code đó.
Phân loại sự cố – vai trò của kiểm thử fuzzing không chỉ nằm ở phát hiện ra các sự cố tiềm ẩn. Khi bất kì sự cố nào được tìm thấy, buốc tiếp thoe thường là sửa mã. Tuy nhiên, với khả năng hàng trăm nghìn trường hợp thử nghiệm được chạy mỗi giây, việc xử lý từng sự cố riêng lẻ là điều không thể. Trình kiểm thử fuzzing phân loại các sự cố và cho phép ưu tiên các sự cố này và xác định nhừng lỗi tương tự để giải quyết vấn đề hiệu quả hơn
Tương lai của kiểm thử fuzzing
Khi trí tuệ nhân tạo AI và máy học Machine learning liên tục phát triển, ảnh hưởng của các công nghệ trên sẽ tác động đến giải pháp kiểm thử fuzzing. Trong tương lai, sẽ có nhiều thiết bị fuzzing tích hợp AI và ML trong nỗ lực để làm cho các công cụ sử dụng đơn giản hơn và thông minh hơn. Mặc dù đây nhìn chung là một ý tưởng hay, nhưng có những lo ngại rằng tin tặc cũng sẽ thấy dễ dàng hơn khi sử dụng các công cụ này trong việc phát hiện ra các điểm yếu bảo mật trên quy mô lớn. Ngoài ra, các doanh nghiệp sẽ yêu cầu các công cụ nhanh hơn và sâu hơn để thực hiện các bài kiểm tra toàn diện trong khung thời gian ngắn nhất.