Công việc kiểm thử (testing) là tìm ra lỗi và thiếu sót nhằm sửa chữa những lỗi đó. Với sự phát triển của CNTT nước nhà, đảm bảo chất lượng thông qua kiểm thử đã trở nên phổ biến. Ngày càng có nhiều công ty trong nước và nước ngoài tìm đến thị trường Việt nam để hoạt động trong lĩnh vực kiểm thử phần mềm như LogiGear, Fsoft, FIS, CMC, Global Cybersoft, … Tuy nhiên có một lĩnh vực khác của kiểm thử phát triển âm thầm nhưng không kém quan trọng là kiểm thử an ninh. Bài viết này trình bày sơ lược về kiểm thử phần mềm, kiểm thử an ninh và so sánh sự khác nhau và giống nhau giữa chúng nhằm giúp chúng ta hiểu hơn về hai lĩnh vực trong ngành kiểm thử.
Trước tiên là các định nghĩa
Kiểm thử là tiến trình thực thi một chương trình với mục đích tìm ra lỗi (The art of software testing – Glenford J. Myers).
Kiểm thử là tiến trình vận hành hệ thống hoặc thành phần của hệ thống dưới những điều kiện xác định, quan sát hoặc ghi nhận kết quả và đưa ra đánh giá về hệ thống hoặc thành phần đó (IEEE 610.12-1990. IEEE Standard Glossary of Software Engineering Terminology. Technical report – IEEE – 1990).
Kiểm thử được mô tả là các thủ tục được thực hiện nhằm đánh giá một vài mặt của phần mềm (Pratical Software Testing – Ilene Burnstein – Springer – 2002).
Bao trùm lên tất cả, có thể coi kiểm thử là hành động tìm ra lỗi với mục đích để làm phần mềm được tốt hơn. Theo quan niệm thông thường của người phát triển phần mềm là: kiểm thử phát hiện lỗi là không thành công và ngược lại là thành công. Tuy nhiên, theo định nghĩa của Myers, tức là đứng trên quan điểm người kiểm thử, thì kiểm thử mà không phát hiện được lỗi được coi là không thành công, ngược lại nếu kiểm thử phát hiện được lỗi được coi là thành công. Rõ ràng, người phát triển phần mềm cố viết một phần mềm tốt nhất và không có lỗi, còn người kiểm thử cố tìm ra lỗi của phần mềm được viết ra. Như vậy, mục đích của kiểm thử là “phản biện” lại với phát triển phần mềm nhằm mục đích làm cho phần mềm tốt hơn. Bởi vì trong thực tế, không có phần mềm nào mà không có lỗi.
Kiểm thử an ninh (KTAN) phần mềm hay mạng là một loại kiểm thử đặc biệt nhằm mục đích kiểm tra và xác nhận phần mềm hay mạng đó có đạt yêu cầu về an ninh không. Như vậy, hướng nghiên cứu KTAN chia làm hai hướng, đó là KTAN phần mềm và KTAN mạng. KTAN phần mềm là một loại kiểm thử trong đó quá trình kiểm thử giúp nhận biết phần mềm đang xét có những đặc tính an ninh đúng với yêu cầu thiết kế đặt ra căn cứ trên đặc tả yêu cầu an ninh cho nó hay không. Có hai hướng tiếp cận chính của KTAN phần mềm là: KTAN chức năng và KTAN điểm yếu. KTAN chức năng dùng để kiểm tra chức năng an ninh (bí mật dữ liệu, toàn vẹn, sẵn sàng, xác thực, phân quyền, mã hóa, điều khiển truy cập, audit,…) hoặc hệ thống an ninh (tường lửa, phát hiện xâm nhập – IDS,…) nhằm đảm bảo phần mềm có hoạt động đúng chức năng, hiệu quả và sẵn sàng như thiết kế và phát triển hay không. KTAN điểm yếu thực hiện như một kẻ tấn công nhằm phát hiện những điểm yếu hoặc sai sót về an ninh của phần mềm. KTAN điểm yếu phần mềm trực tiếp nhận diện và khám phá những điểm yếu hệ thống vẫn chưa được biết có thể gây ra bởi những thiết sót thiết kế hay lỗi lập trình, thuật toán.
KTAN mạng là những hoạt động nhằm cung cấp thông tin về sự an toàn và toàn vẹn của mạng máy tính và những hệ thống liên quan của tổ chức nào đó thông qua việc thẩm tra và xác nhận những điều kiện an ninh hệ thống mạng đều hoạt động bình thường. KTAN mạng bao gồm hai loại chính là: quét điểm yếu hay còn gọi là quét lỗ hổng (vulnerability scanner) và kiểm thử xâm nhập. Trong đó quét điểm yếu là quá trình tìm những điểm yếu, lỗ hổng an ninh trong mạng của tổ chức, công ty hoặc cá nhân. Ý tưởng cơ bản của loại hình KTAN này là quét toàn bộ nút mạng và cổng có trên từng nút mạng, sau đó với thông tin nhận được nó sẽ phân tích và đánh giá hệ thống mạng an toàn như thế nào. Thuật ngữ “đánh giá điểm yếu” được sử dụng trong trường hợp quét điểm yếu có nghĩa là “quá trình” tìm kiếm sự tồn tại của những lỗ hổng đã biết bên trong hoặc bên ngoài trong một mạng. Quá trình này sẽ xác định lỗ hổng để có thể loại bỏ trước khi nó bị chương trình độc hại hoặc tin tặc khai thác. Các lỗ hổng tạo thành mối đe dọa trong mạng bao gồm lỗi phần mềm, dịch vụ không cần thiết, cấu hình sai hoặc tài khoản người dùng không an toàn. Có một thực tế là những điểm yếu đơn lẻ có nguy cơ về an ninh không cao nhưng khi gộp chung trong một hệ thống có thể gây ra những nguy cơ về rủi ro an ninh rất cao. Vì vậy, kiểm thử xâm nhập – là một thành phần của KTAN, tuy nhiên nó đi xa hơn so với quét điểm yếu, nó tập trung vào quá trình khai thác, lợi dụng các điểm yếu, lỗ hổng nhằm xâm nhập trái phép, leo thang đặc quyền, duy trì truy cập vào hệ thống mục tiêu, hoặc tìm ra sự phối hợp của các điểm yếu trên một hoặc nhiều hệ thống để tạo ra sự truy cập vào hệ thống mà thường khó đạt được khi khai thác những điểm yếu đơn lẻ. Nói cách khác, quét điểm yếu đưa cái nhìn về kẽ hở an ninh nhưng không đánh giá tác hại và ảnh hưởng của nó với hệ thống. Còn kiểm thử xâm nhập quan tâm đến cách nhìn các vấn đề an ninh của hệ thống theo quan điểm của kẻ tấn công.
Thứ hai là phương pháp
Có rất nhiều phương pháp kiểm thử phần mềm phân biệt theo nhiều tiêu chí khác nhau như: kiểm thử bằng tay hoặc tự động; kiểm thử hộp trắng, hộp đen hoặc hộp xám; đội xanh hoặc đội đỏ; xu thế hiện nay đang phát triển một phương pháp kiểm thử là agile testing được giới nghiên cứu cũng như doanh nghiệp đón nhận khá tích cực.
Có nhiều phương pháp để KTAN phần mềm như liệt kê sau đây: KTAN hình thức (formal security testing); KTAN dựa vào mô hình (model-based security testing); KTAN dựa vào lỗi chèn (fault injection-based security testing); KTAN mờ (fuzzy testing); Kiểm thử quét điểm yếu (vulnerability scanning testing); Kiểm thử dựa vào thuộc tính (property-based testing); KTAN dựa vào hộp trắng (white box-based security testing); KTAN dựa vào rủi ro (risk-based security testing).
Tùy vào loại KTAN mạng và phương pháp sử dụng, có thể sử dụng những kỹ thuật sau: quét cổng, lập bản đồ mạng (network mapping), quét điểm yếu – lỗ hổng (vulnerability scanner), bẻ mật khẩu (password crack), kiểm thử xâm nhập, quét virus, …
Thứ ba là công cụ
Trong khi kiểm thử phần mềm tập trung vào các công cụ chuyên dụng do bản thân các công ty kiểm thử tự phát triển như TestArchitectTM, IBM Rational Performance Tester, … và một số các công cụ mã nguồn mở như LoadRunner 9.2, QTP 9.5, …
Thì kiểm thử an ninh chủ yếu tập trung vào các công cụ mã nguồn mở chủ yếu trên hệ điều hành Linux như Knoppix, Helix, Backtrack, PHLAK, nUbuntu,… rất, rất nhiều và một số công cụ bản quyền như Impact, Metasploit Pro, …
Bảng sau đây so sánh khác nhau giữa hai loại hình kiểm thử.
Kiểm thử phần mềm | Kiểm thử an ninh | |
Khái niệm | Phát hiện lỗi chức năng và hoạt động của phần mềm | Phát hiện lỗi an ninh của phần mềm hoặc mạng |
Kiến thức | Không cần kiến thức CNTT nhiều. Cần kiến thức về lĩnh vực hoạt động của phần mềm được kiểm thử | Cần kiến thức CNTT chuyên sâu |
Giai đoạn thực hiện | Thực hiện từ lúc thiết kế đến lập trình, triển khai và sử dụng sản phẩm. Chủ yếu giai đoạn lập trình. | Chủ yếu thực hiện ở giai đoạn triển khai và sử dụng. |
Đối tượng | Phần mềm | Phần mềm hoặc mạng |
Yêu cầu kỹ năng | Phân tích tốt, kiên nhẫn, cẩn thận, tiếng Anh | Phân tích rất tốt, kiên nhẫn, sáng tạo, đa nghi |
Công cụ | Bằng tay, tự động chủ yếu chuyên dụng của từng công ty kiểm thử | Bằng tay, chủ yếu mã nguồn mở trên Linux |
Chứng chỉ | ISTQB, LCTP | CEH, OPST |
Tóm lại, một cách tổng quan, ta thấy quan hệ của an ninh và KTAN cũng giống như quan hệ giữa phát triển phần mềm và kiểm thử phần mềm. Trong khi những nghiên cứu về an ninh với mục tiêu xây dựng hệ thống đạt những tiêu chí của an ninh là bí mật, hiệu quả, sẵn sàng và trách nhiệm (xem chi tiết bài “đôi điều về an ninh“), thì KTAN chuyên nghiên cứu những phương pháp và kỹ thuật để phát hiện những điểm yếu về an ninh hoặc những phương pháp gây tổn thương hệ thống an ninh nhằm xâm nhập vào hệ thống như kiểm thử xâm nhập. Cần đặc biệt nhấn mạnh là phương pháp và cách thức của kiểm thử xâm nhập cũng là phương pháp và cách thức của tin tặc nhằm tấn công vào các điểm yếu hoặc các kiểm soát an ninh của hệ thống. Nhưng mục đích của hai đối tượng lại khác nhau, trong khi người kiểm thử xâm nhập cố gắng tấn công vào hệ thống nhằm chứng minh sự tồn tại của điểm yếu, tác hại và hậu quả của nó nếu không sớm khắc phục và đề xuất các giải pháp gia cố, giảm thiểu tác hại của các điểm yếu này thì tin tặc tấn công với mục đích phá hoại, tư lợi, hoặc đôi khi chỉ là thể hiện bản thân hoặc cho vui. Ngoài ra, không giống như kiểm thử phần mềm thường tập trung thực hiện trong giai đoạn phát triển, KTAN thường diễn ra trong cả giai đoạn phát triển lẫn giai đoạn hoạt động hay giai đoạn “sống” của hệ thống nhưng tập trung chủ yếu ở giai đoạn “sống”, và phải thực hiện suốt vòng đời hoạt động của mạng hay phần mềm.
Thuật ngữ: Kiểm thử an ninh (security testing), kiểm thử xâm nhập (penetrate testing), kiểm thử phần mềm (software testing), quét điểm yếu (vulnerability scanner), kiểm thử chức năng (functional testing)
Theo VDC Training