Tất cả các dự án phần mềm ít nhất đều hướng tới một kết quả cuối là các đoạn mã. Ở mức đoạn mã, mục tiêu trọng tâm là hạn chế và giảm thiểu các lỗi trong việc triển khai, nhất là những lỗi hay lỗ hổng phổ biến có thể phát hiện ra được nhờ công cụ quét mã nguồn. Các lỗi triển khai vừa nhiều vừa phổ biến và gồm cả những lỗi nổi tiếng như tràn bộ đệm (bufer-overflow). Việc xác định các lỗi trong các đoạn mã của phần mềm cho
phép xác định mức độ an toàn của phần mềm với các lỗi cũng như khả năng đáp ứng của
phần mềm với các yêu cầu về an toàn với các đoạn mã trong quá trình xây dựng (viết mã).
92
Quá trình đánh giá mã nguồn cả thủ công hay tự động đều nhằm mục đích xác định
các lỗi liên quan đến an toàn trước khi phần mềm được xuất xưởng. Tất nhiên, khơng có
phương thuốc trị bách bệnh. Việc đánh giá mã nguồn là cần thiết nhưng chưa đủ để đạt được phần mềm an ninh vì các yếu tố sau:
Các lỗi an ninh là các vấn đề hiển hiện (cần phải xử lý) song các lỗ hổng thiết kế còn là vấn đề nghiêm trọng hơn. Các lỗi thiết kế hầu như không thể phát hiện thông qua việc đánh giá mã nguồn. Cách tiếp cận đầy đủ để đạt được
phần mềm an tồn là kết hợp hài hịa giữa đánh giá mã nguồn và áp dụng quy trình phân tích thiết kế an toàn.
Việc đánh giá mã nguồn hiển nhiên cần những tri thức về lập trình. Việc hiểu biết các cơ chế an toàn hay an toàn mạng khơng có ích nhiều với việc đánh giá mã nguồn. Nói cách khác, việc đánh giá mã nguồn tốt nhất là bắt đầu từ người viết ra chúng chứ không phải là các chuyên gia về an toàn.
Phần tiếp theo trình bày hai kỹ thuật phân tích chủ yếu là phân tích tĩnh và phân tích
động. Phân tích tĩnh khơng cần thực thi chương trình hay đoạn mã cần đánh giá, ngược
lại phân tích động sẽ thực thi các chương trình để đánh giá các hành vi của chương trình.
5.4.1 Phân tích tĩnh
Phân tích tĩnh đề cập đến các kỹ thuật đánh giá mã nguồn nhằm cảnh báo các lỗ hổng an toàn tiềm tàng mà không thực thi chúng.
Một cách lý tưởng các cơng cụ tự động có thể tìm kiếm các lỗi an ninh với
mức độ đảm bảo nhất định về các lỗi này song việc này vượt quá khả năng của rất nhiều công cụ hiện thời.
Các kỹ thuật kiểm tra phần mềm (testing) thông thường nhằm kiểm tra các hành vi (chức năng) với người dùng thông thường trong điều kiện thơng
thường nên rất khó để phát hiện ra các lỗi liên quan đến vấn đề an ninh và an
toàn.