Đăng ký Đăng nhập
Trang chủ Giáo dục - Đào tạo Cao đẳng - Đại học Luận văn một phương pháp mới dự đoán lỗ hổng phần mềm...

Tài liệu Luận văn một phương pháp mới dự đoán lỗ hổng phần mềm

.PDF
62
994
95

Mô tả:

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI LÊ HÀ MINH MỘT PHƯƠNG PHÁP MỚI DỰ ĐOÁN LỖ HỔNG PHẦN MỀM Chuyên ngành: Khoa học máy tính Mã số: 60480101 LUẬN VĂN THẠC SĨ NGƯỜI HƯỚNG DẪN KHOA HỌC PGS.TS TRẦN ĐĂNG HƯNG HÀ NỘI - NĂM 2017 Trường Đại học Sư phạm Hà Nội Luận văn thạc sĩ MỤC LỤC MỤC LỤC ................................................................................................................. 2 LỜI CAM ĐOAN ...................................................................................................... 4 LỜI CẢM ƠN ............................................................................................................ 5 DANH MỤC HÌNH VẼ............................................................................................. 6 DANH MỤC BẢNG ................................................................................................. 7 DANH MỤC TỪ VIẾT TẮT .................................................................................... 8 MỞ ĐẦU ................................................................................................................... 9 CHƯƠNG 1: GIỚI THIỆU ...................................................................................... 12 1.1 Bảo mật phần mềm.................................................................................... 12 1.2 Lỗ hổng phần mềm.................................................................................... 12 1.3 Dự đoán lỗ hổng phần mềm ...................................................................... 19 1.4 Các phương pháp dự đoán lỗ hổng phần mềm đã có ................................ 19 1.5 Mục tiêu của luận văn ............................................................................... 23 1.6 Kết luận Chương 1 .................................................................................... 24 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT ........................................................................ 25 2.1 Tổng quan về học máy (Machine Learning - ML) .................................... 25 2.2 Bài toán phân lớp ...................................................................................... 32 2.3 Một số phương pháp (mô hình) phân lớp.................................................. 34 2.4 Đánh giá các mô hình phân lớp ................................................................. 43 2.5 Bài toán giảm chiều dữ liệu ...................................................................... 45 2.6 Một số phương pháp giảm chiều dữ liệu ................................................... 46 2.7 Kết luận Chương 2 .................................................................................... 47 CHƯƠNG 3: MÔ HÌNH DỰ ĐOÁN LỖ HỔNG PHẦN MỀM SỬ DỤNG PHƯƠNG PHÁP PHÂN LỚP DỮ LIỆU ................................................................ 48 3.1 Giới thiệu bài toán ..................................................................................... 48 2 Trường Đại học Sư phạm Hà Nội Luận văn thạc sĩ 3.2 Mô hình đề xuất ........................................................................................ 48 3.3 Dữ liệu và tiền xử lý dữ liệu ..................................................................... 51 3.4 Áp dụng mô hình và dữ liệu vào thực nghiệm .......................................... 53 3.5 Kết quả thực nghiệm ................................................................................. 55 3.6 Thảo luận ................................................................................................... 56 3.7 Kết luận Chương 3 .................................................................................... 58 KẾT LUẬN .............................................................................................................. 59 TÀI LIỆU THAM KHẢO ....................................................................................... 60 3 Trường Đại học Sư phạm Hà Nội Luận văn thạc sĩ LỜI CAM ĐOAN Tôi xin cam đoan bản luận án này là kết quả nghiên cứu của cá nhân tôi. Các số liệu và tài liệu được trích dẫn trong luận án là trung thực. Kết quả nghiên cứu này không trùng với bất cứ công trình nào đã được công bố trước đó. Tôi chịu trách nhiệm với lời cam đoan của mình. Hà Nội, tháng 05 năm 2017 Lê Hà Minh 4 Trường Đại học Sư phạm Hà Nội Luận văn thạc sĩ LỜI CẢM ƠN Để hoàn thành chương trình cao học và luận văn này, tôi đã nhận được sự hướng dẫn, giúp đỡ và góp ý nhiệt tình của quý thầy cô Khoa Công nghệ thông tin, Trường Đại học Sư phạm Hà Nội. Trước hết, tôi xin chân thành cảm ơn đến quý thầy cô Khoa Công nghệ thông tin trường Đại học Sư phạm Hà Nội, đặc biệt là những thầy cô đã tận tình dạy bảo tôi suốt thời gian học tập. Tôi xin gửi lời biết ơn sâu sắc và chân thành nhất đến PGS.TS Trần Đăng Hưng đã dành rất nhiều thời gian và tâm huyết hướng dẫn nghiên cứu và giúp tôi hoàn thành luận văn tốt nghiệp. Cuối cùng, tôi xin gửi lời cảm ơn tới những người thân trong gia đình tôi, bố mẹ, chị gái cùng bạn bè đã luôn động viên tôi trong quá trình học tập và hoàn thành khóa luận của mình. Mặc dù có nhiều cố gắng hoàn thiện luận văn bằng tất cả sự nhiệt tình và năng lực của mình, tuy nhiên không thể tránh khỏi những thiếu sót, rất mong nhận được những đóng góp quý báu của quý thầy cô và các bạn. 5 Trường Đại học Sư phạm Hà Nội Luận văn thạc sĩ DANH MỤC HÌNH VẼ Hình 2.1 Ý tưởng của học máy ............................................................................... 25 Hình 2.2 Độ dốc của một đường thẳng ................................................................... 27 Hình 2.3 Tính biến thiên của đồ thị ........................................................................ 27 Hình 2.4 Độ dốc giữa 2 điểm trên đồ thị ................................................................ 28 Hình 2.5 Độ dốc của một điểm trên đồ thị ............................................................... 28 Hình 2.6 Giá trị J(θ) tại một điểm ........................................................................... 29 Hình 2.7 Thay đổi J(θ) ............................................................................................ 29 Hình 2.8 Thay đổi J(θ) đạt cực tiểu địa phương ..................................................... 30 Hình 2.9 J(θ) thay đổi thất thường .......................................................................... 30 Hình 2.10 Nhược điểm của giải thuật gradient descent .......................................... 31 Hình 2.11 Đồ thị có thể tìm cực tiểu ....................................................................... 31 Hình 2.12 Đồ thị lý tưởng để tìm cực tiểu .............................................................. 31 Hình 2.13 Siêu mặt phẳng một chiều và hai chiều ................................................. 38 Hình 2.14 Siêu mặt phẳng phân cách tối ưu ........................................................... 38 Hình 2.15 Siêu mặt phẳng với biên cực đại ............................................................ 39 Hình 2.16 Thêm dữ liệu mới làm thay đổi siêu mặt phẳng với biên cực đại .......... 40 Hình 2.17 Các điểm dữ liệu phân lớp sai theo biên và siêu mặt phẳng .................. 40 Hình 2.18 Dữ liệu không thể phân tách tuyến tính ................................................. 41 Hình 2.19 Ví dụ phân tách phi tuyến tính ............................................................... 42 6 Trường Đại học Sư phạm Hà Nội Luận văn thạc sĩ DANH MỤC BẢNG Bảng 1.1 Các nghiên cứu về dự đoán lỗ hổng phần mềm đã có ............................. 22 Bảng 2.1 Các hàm nhân thông dụng ....................................................................... 43 Bảng 2.2 Ma trận nhầm lẫn ..................................................................................... 44 Bảng 3.1 Dữ liệu thực nghiệm ................................................................................ 51 Bảng 3.2 Các bước tiền xử lý dữ liệu ..................................................................... 52 Bảng 3.3 Ví dụ về vector đặc trưng của một ứng dụng .......................................... 53 Bảng 3.4 Kết quả thực nghiệm 1 ............................................................................ 55 Bảng 3.5 Kết quả thực nghiệm 2 ............................................................................ 56 7 Trường Đại học Sư phạm Hà Nội Luận văn thạc sĩ DANH MỤC TỪ VIẾT TẮT Cụm từ viết tắt Cụm từ chi tiết ML Machine Learning SVM Support Vector Machine V&V Verification & Validation SQL Structure Query Language HTTP HyperText Transfer Protocol FTP File Transfer Protocol SAG Security Activity Graphs CSDL Cơ sở dữ liệu MLE Maximum Likelihood Estimation 8 Trường Đại học Sư phạm Hà Nội Luận văn thạc sĩ MỞ ĐẦU Phần mềm là thành phần phổ biến của các thiết bị hoặc hệ thống chúng ta vẫn sử dụng hàng ngày trên máy tính. Những hệ thống này thường phức tạp và được phát triển bởi các lập trình viên khác nhau. Thông thường các lập trình viên mắc lỗi trong quá trình xây dựng mã nguồn có thể tạo ra các lỗ hổng phần mềm. Lỗ hổng phần mềm là lỗ hổng hoặc khuyết điểm trong quá trình xây dựng phần mềm có thể bị khai thác bởi một kẻ tấn công để có được một số đặc quyền trong hệ thống. Hay nói một cách khác lỗ hổng phần mềm cung cấp một điểm có thể vào hệ thống. Số lượng các lỗ hổng phần mềm được báo cáo ngày nay đang tăng lên đáng kể đã trở thành lý do mà bảo mật phần mềm trở thành một lĩnh vực nghiên cứu quan trọng. Sự có mặt của các lỗ hổng trong sản xuất phần mềm dẫn đến cần thiết phải có các công cụ có thể giúp nhà phát triển tránh hoặc phát hiện lỗ hổng trong quá trình xây dựng phần mềm. Xây dựng phần mềm an toàn là một vấn đề khó khăn, tốn nhiều thời gian, công sức và tiền bạc. Việc sử dụng các kĩ thuật Verification và Validation (V&V) như Security Testing, Code Review, Formal Verification đã trở thành một phương tiện hiệu quả để giảm số lượng các lỗ hổng trong các sản phẩm phần mềm. Đây là một thành tựu quan trọng bởi việc sửa chữa một lỗi sau khi phần mềm đã được phát hành tốn chi phí nhiều hơn so với việc giải quyết lỗi đó tại thời điểm phát triển. Tuy nhiên, V&V cũng là một cách khá tốn kém. Ước tính ban đầu đã đánh giá rằng V&V tốn thêm đến 30% cho chi phí phát triển. Vì vậy, trong những năm gần đây người ta đưa ra ý tưởng xây dựng các mô hình dự đoán các lỗ hổng phần mềm. Công việc này đưa ra một cơ sở định hướng cho các hoạt động V&V. Từ đó giúp giảm thời gian và nỗ lực chi phí cần thiết để bảo đảm phần mềm. Một số loại mô hình dự đoán lỗ hổng phần mềm đã được đề xuất trong suốt thập kỷ qua, trong đó kỹ thuật học máy đã được sử dụng như là phương tiện để xây dựng mô hình dự đoán. Một số nghiên cứu chủ yếu tập trung vào việc tìm kiếm các mối quan hệ giữa các lỗ hổng phần mềm và các thuộc tính của mã nguồn. Trong 9 Trường Đại học Sư phạm Hà Nội Luận văn thạc sĩ trường hợp này, một mô hình được xây dựng dựa trên hiểu biết trực giác rằng: một thành phần phức tạp hoặc được sửa đổi thường xuyên có nhiều khả năng chứa các vấn đề về bảo mật, hay một phần mềm có lỗ hổng thì có liên quan đến việc sử dụng một số thư viện khi phát triển nó. Vì vậy, việc lựa chọn các thuộc tính để dự đoán được được xác định bởi những dự đoán của hiểu biết mang tính cá nhân. Một phương pháp dự đoán khác được đề xuất dựa trên kĩ thuật khai phá văn bản. Bắt đầu từ việc quan sát thấy một ngôn ngữ lập trình là một ngôn ngữ với thẻ cú pháp tương đương với từ, các nhà nghiên cứu đã đưa kỹ thuật khai thác văn bản vào phân tích mã nguồn. Các tập thuộc tính được sử dụng để mô hình hóa là không cố định hay xác định trước mà chúng phụ thuộc vào các từ vựng được sử dụng bởi các nhà phát triển. Vì vậy phương pháp này giảm thiểu sự phụ thuộc vào lý thuyết cơ bản của việc dự đoán điều gì sẽ xảy ra. Tuy nhiên, việc tập thuộc tính phụ thuộc vào các từ vựng của nhà phát triển dẫn đến việc dữ liệu sử dụng cho mô hình học máy là có số chiều lớn và không đồng bộ giữa các tệp mã nguồn. Do đó em chọn nghiên cứu đề tài "Một phương pháp mới dự đoán lỗ hổng phần mềm" với mong muốn đưa ra một phương pháp mới kết hợp kĩ thuật khai phá văn bản vào phân tích mã nguồn của phần mềm và phương pháp giảm chiều dữ liệu trước khi áp dụng các kĩ thuật học máy để xây dựng mô hình dự đoán lỗ hổng phần mềm nhằm đưa định hướng tốt hơn cho kiểm thử phần mềm. Ngoài phần mở đầu và kết luận, luận văn được chia thành 3 chương, cụ thể nội dung mỗi chương như sau: Chương 1: Giới thiệu Trình bày các khái niệm cơ bản về bảo mật phần mềm, lỗ hổng phần mềm. Giới thiệu nội dung bài toán dự đoán lỗ hổng phần mềm và các phương pháp, mô hình hiện nay đã có để giải quyết bài toán này. Chương 2: Cơ sở lý thuyết Trình bày các cơ sở lý thuyết phục vụ cho việc xây dựng mô hình thực nghiệm thông qua việc giới thiệu về bài toán phân lớp, bài toán giảm chiều dữ liệu 10 Trường Đại học Sư phạm Hà Nội Luận văn thạc sĩ cũng như một số phương pháp giải quyết 2 bài toán này. Đồng thời nêu ra các phương pháp được dùng để đánh giá độ chính xác của mô hình thực nghiệm. Chương 3: Mô hình dự đoán lỗ hổng phần mềm sử dụng phương pháp phân lớp Trình bày về mô hình đưa ra để giải quyết bài toán dự đoán lỗ hổng phần mềm, cách thức thu thập, xử lý dữ liệu, tiến hành thực nghiệm và đưa ra các nhận xét, đánh giá dựa vào kết quả thực nghiệm đã tiến hành. 11 Trường Đại học Sư phạm Hà Nội Luận văn thạc sĩ CHƯƠNG 1: GIỚI THIỆU Trong chương đầu tiên này, chúng tôi sẽ trình bày các khái niệm cơ bản về bảo mật phần mềm và lỗ hổng phần mềm. Đồng thời, giới thiệu nội dung bài toán dự đoán lỗ hổng phần mềm và một số phương pháp, mô hình hiện nay đã có để giải quyết bài toán này. 1.1 Bảo mật phần mềm Phần mềm là một phần không thể tách rời của hệ thống máy tính. Nó là phương tiện để người dùng kiểm soát những gì họ đang làm trên hệ thống máy tính. Phần mềm ứng dụng ảnh hưởng đến tất cả lĩnh vực tính toán. Do đó, bảo mật phần mềm là điều thiết yếu đối với bảo mật thông tin cũng như hệ thống của bạn. Bất kỳ phần mềm nào đều có khả năng có lỗi lập trình. Vì vậy phần mềm cần được kiểm tra kĩ lưỡng, chẩn đoán những vấn đề này trước khi đưa vào hoạt động để tránh phát sinh các lỗi làm hỏng hệ thống hoặc thông tin của tổ chức. 1.2 Lỗ hổng phần mềm 1.2.1 Khái niệm lỗ hổng phần mềm Hiện nay, có nhiều tổ chức đưa ra các khái niệm khác nhau về lỗ hổng. - Theo ISO 27005: Một điểm yếu của một hoặc một nhóm tài sản có thể bị khai thác bởi một hoặc nhiều mối đe doạ. Trong đó tài sản được hiểu là bất cứ thứ gì có giá trị cho tổ chức, cho các hoạt động kinh doanh của tổ chức bao gồm cả các nguồn thông tin hỗ trợ cho hoạt động của tổ chức [1]. - Theo IETF RFC 2828: Lỗ hổng hoặc điểm yếu trong thiết kế, triển khai, vận hành, quản lý hệ thống có thể bị khai thác vi phạm chính sách bảo mật của hệ thống [2]. - Theo ENISA: Sự tồn tại của một điểm yếu, thiết kế hoặc lỗi thực hiện có thể dẫn đến một sự kiện bất ngờ, không mong muốn ảnh hưởng đến an ninh của hệ thống máy tính, mạng, ứng dụng, hoặc các giao thức có liên quan [3]. 12 Trường Đại học Sư phạm Hà Nội - Luận văn thạc sĩ Theo The Open Group: Lỗ hổng là nơi có xác suất khả năng đe dọa vượt quá khả năng chống lại các mối đe dọa [4]. Như vậy, một cách tổng quát, lỗ hổng là điểm yếu hay thiếu xót trong ứng dụng, hệ thống hay quy trình cho phép kẻ tấn công có thể khai thác để truy cập trái phép vào các tài nguyên của hệ thống, làm tổn hại tới các bên tham gia hệ thống. Lỗ hổng có thể nằm trong khâu thiết kế hay việc thực thi, cài đặt, triển khai ứng dụng, hệ thống. Ví dụ một ứng dụng website có một lỗ hổng như SQL Injection cho phép kẻ tấn công lấy được các thông tin từ CSDL, thay đổi dữ liệu hoặc ghi các tệp tin nhằm chiếm quyền kiểm soát hoàn toàn hệ thống. Một số loại lỗ hổng ta thường nghe như: SQL Injection, Buffer Overflow, Cross Site Scripting… Từ khái niệm chung về lỗ hổng, chúng ta có thể hiểu, lỗ hổng phần mềm là một điểm yếu của phần mềm, cho phép kẻ tấn công có thể khai thác làm thay đổi hành vi thông thường của phần mềm. Thông thường, mục tiêu của kẻ tấn công là đạt được một số đặc quyền trong hệ thống để kiểm soát hoặc phá huỷ hệ thống, đánh cắp thông tin có giá trị vì lợi ích riêng (như mã hoá thông tin cá nhân người dùng đòi tiền chuộc, ăn cắp thông tin tài khoản...). Vì vậy điều quan trọng là các nhà phát triển và công chúng phải biết về các lỗ hổng phần mềm để phòng ngừa và phát hiện các lỗ hổng để sửa chữa. 1.2.2 Nguyên nhân gây ra lỗ hổng phần mềm Một số nguyên nhân gây ra lỗ hổng phần mềm có thể kể đến như: - Tính phức tạp: Các hệ thống lớn, phức tạp làm tăng khả năng sai sót cũng như các điểm truy cập không mong muốn. - Tính quen thuộc: Sử dụng chung, mã nguồn nổi tiếng làm tăng xác suất mà kẻ tấn công có thể có hoặc tìm thấy kiến thức và công cụ để khai thác lỗ hổng. - Kết nối: Quá nhiều kết nối, cổng, giao thức, và dịch vụ khác nhau trong một thời gian của cùng một phần mềm cũng dễ gây ra các lỗ hổng. 13 Trường Đại học Sư phạm Hà Nội - Luận văn thạc sĩ Quản lý mật khẩu: Sử dụng các mật khẩu yếu có thể bị phát hiện bởi các công cụ dò tìm hoặc lưu trữ mật khẩu trên máy tính mà một chương trình có thể truy cập vào nó hoặc sử dụng lại mật khẩu giữa nhiều phần mềm khác nhau. - Các lỗi phần mềm: Lập trình để lại một số lỗi có thể bị khai thác trong chương trình phần mềm. - Dữ liệu đầu vào từ người dùng không được kiểm tra: Chương trình giả định rằng tất cả các đầu vào của người dùng là an toàn. Các chương trình không kiểm tra dữ liệu đầu vào của người dùng có thể cho phép thực thi trực tiếp các dòng lệnh hoặc câu truy vấn SQL không được dự định. - Không rút kinh nghiệm từ những lỗi đã gặp trước Nghiên cứu cho thấy điểm dễ bị tổn thương nhất trong hầu hết các hệ thống thông tin là đến từ con người: người thiết kế, phát triển, sử dụng phần mềm [5]. 1.2.3 Phân loại lỗ hổng phần mềm Như chúng ta đã đề cập đến một hệ thống phần mềm tồn tại các điểm yếu có thể bị kẻ tấn công khai thác dẫn đến hệ thống bị phá hoại. Vì vậy điều quan trọng là phải biết các loại lỗ hổng phần mềm khác nhau, công tác phòng ngừa và phát hiện của chúng nhằm cố tránh sự hiện diện của chúng trong phiên bản phần mềm đưa vào vận hành để đảm bảo rằng khả năng bị tấn công của phần mềm giảm đến mức thấp nhất. Dưới đây, chúng tôi sẽ giới thiệu một số loại lỗi phần mềm phổ biến dẫn đến lỗ hổng phần mềm. a. Vi phạm về an toàn bộ nhớ Bộ nhớ an toàn (memory-safe) là trạng thái bộ nhớ được bảo vệ khỏi các lỗi phần mềm và các lỗ hổng bảo mật khi truy cập bộ nhớ, chẳng hạn như tràn bộ đệm và con trỏ chuột. Ví dụ, Java được gọi là bộ nhớ an toàn vì nó có thể phát hiện lỗi thời gian thực (runtime errors) kiểm tra giới hạn mảng và con trỏ. Ngược lại, C và C++ hỗ trợ số học con trỏ tùy ý, không có điều khoản để kiểm tra giới hạn, do đó được gọi là bộ nhớ không an toàn (memory-unsafe). Một số lỗi về vi phạm an toàn bộ nhớ có thể kể đến như: 14 Trường Đại học Sư phạm Hà Nội - Luận văn thạc sĩ Buffer overflow: Lỗi tràn bộ đệm xảy ra khi việc ghi dữ liệu vượt quá phạm vi cho phép, gây ảnh hưởng đến các đối tượng liền kề trong bộ nhớ. - Dangling pointer: Lỗi xảy ra khi con trỏ không trỏ đến một đối tượng hợp lệ của kiểu thích hợp. b. Lỗi xác thực đầu vào Xác thực đầu vào là quá trình đảm bảo rằng một chương trình hoạt động trên dữ liệu sạch sẽ, chính xác và hữu ích. Nó sử dụng các quy tắc, ràng buộc để kiểm tra tính đúng đắn, có ý nghĩa và an toàn của dữ liệu nhập vào hệ thống. Việc không xác thực dữ liệu nhập vào hệ thống hoặc xác thực không đầy đủ có thể dẫn tới các lỗ hổng như: - Format string attacks - SQL injection - Code injection - E-mail injection - Cross-site scripting - HTTP header injection - HTTP response splitting c. Điều kiện thực thi Điều kiện thực thi là hành vi của một hệ thống điện tử hoặc phần mềm mà đầu ra của nó phụ thuộc vào trình tự hoặc thời gian của các sự kiện không kiểm soát được. Nó trở thành lỗi khi các sự kiện không xảy ra theo trình tự đã lập trình. - Time-of-check-to-time-of-use: lỗi này phát sinh do thay đổi trong một hệ thống giữa việc kiểm tra điều kiện và sử dụng kết quả kiểm tra đó. - Symlink races: lỗi này là kết quả của việc một chương trình tạo ra các tệp tin không an toàn. d. Lỗi phân quyền lẫn lộn Đây là lỗi xảy ra khi một chương trình máy tính bị lừa bởi một truy cập giả mạo không được phép. - Cross-site request forgery 15 Trường Đại học Sư phạm Hà Nội - Clickjacking - FTP bounce attack Luận văn thạc sĩ e. Lỗi chiếm quyền thực thi Đây là lỗi xảy ra khi kẻ tấn công khai thác một điểm yếu trong thiết kế hoặc giám sát cấu hình trong một hệ điều hành hoặc phần mềm ứng dụng để truy cập tới các dữ liệu được bảo vệ từ ứng dụng với các quyền cao hơn sự cho phép. Kết quả là kẻ tấn công có thể truy cập ứng dụng với quyền lớn hơn dự định của nhà phát hành để thực thi các hành vi trái phép. f. Lỗi giao diện người dùng - Warning fatigue - Blaming the victim g. Tấn công Side-channel Đây là lỗ hổng bị khai thác từ việc tận dụng các thông tin thu được từ thực thi một hệ thống mật mã. - Timing attack: Kẻ tấn công khai thác lỗ hổng từ việc phân tích thời gian thực hiện các thuật toán mã hoá. 1.2.4 Ngăn chặn lỗ hổng phần mềm Bảo mật phần mềm là một vấn đề sống còn đối với hệ thống. Do đó ngăn chặn các lỗ hổng phần mềm là công việc thiết yếu trước khi đưa phần mềm vào sử dụng. Với các hiểu biết về lỗ hổng phần mềm, chúng ta có hai cách thường dùng để phát hiện lỗ hổng phần mềm và kịp thời xử lý trong quá trình phát triển. a. Kiểm duyệt phần mềm Quá trình kiểm duyệt phần mềm là quá trình đọc và xem xét trực tiếp mã nguồn chương trình nhằm mục đích tìm ra điểm yếu và sửa chúng ngay trong quá trình phát triển. Trong thực tế, đây chính là quá trình Code Review. Khi điểm yếu được tìm thấy sớm, chúng ta sẽ tốn ít chi phí cho việc sửa chữa. Tuy nhiên, chất lượng của quá trình kiểm duyệt này phụ thuộc vào khả năng và chuyên môn của người kiểm duyệt. 16 Trường Đại học Sư phạm Hà Nội Luận văn thạc sĩ b. Sơ đồ hoạt động bảo mật (Security Activity Graphs) Đây là một cách thức hiệu quả để ngăn ngừa lỗ hổng phần mềm. Cụ thể, sơ đồ này biểu diễn trực quan mối liên hệ giữa các nguyên nhân trong một đồ thị nguyên nhân lỗ hổng (Vulnerability Cause Graph). Các SAG cho thấy một nguyên nhân cụ thể có thể được ngăn ngừa như thế nào sau khi kết hợp các hoạt động bảo mật trong quá trình phát triển. 1.2.5 Phát hiện lỗ hổng phần mềm Để ngăn ngừa các lỗ hổng phần mềm người ta thường dùng phương pháp mô hình hoá và kiểm duyệt phần mềm. Tuy nhiên, chúng ta cũng cần thiết có các công cụ giúp các lập trình viên có thể phát hiện các lỗ hổng phần mềm trong quá trình xây dựng phần mềm. Các công cụ này có thể được chia làm hai loại dựa trên phương thức xây dựng chúng. Một là các công cụ dựa trên các phương thức tĩnh, có nghĩa là tìm ra lỗ hổng phần mềm mà không cần thiết phải chạy chương trình. Hai là các công cụ dựa trên phương thức động, có nghĩa là xây dựng một môi trường mẫu và chạy chương trình trên môi trường mẫu đó để thu thập dữ liệu phát hiện lỗ hổng phần mềm. a. Kĩ thuật tĩnh Đây là những kĩ thuật được áp dụng trực tiếp vào mã nguồn nhằm mục đích đánh giá hoặc nhận được thông tin cụ thể mà không cần chạy chương trình. Sau đây, chúng tôi sẽ giới thiệu một số kĩ thuật tĩnh phân tích mã nguồn để tìm ra lỗ hổng phần mềm. - Pattern Matching Kĩ thuật này hoạt động bằng cách quét mã nguồn và tìm kiếm các chuỗi có định dạng (pattern) nhất định, các chuỗi này bị nghi ngờ dẫn đến lỗ hổng phần mềm. Một công cụ đơn giản áp dụng kĩ thuật này là lệnh `grep` trong Unix. Kĩ thuật này tạo ra nhiều sai số vì không có phân tích kết quả tìm kiếm. Hơn nữa, hiệu quả của kĩ thuật này phụ thuộc vào tính chính xác của chuỗi dùng để tìm kiếm. - Lexical Analysis 17 Trường Đại học Sư phạm Hà Nội Luận văn thạc sĩ Mã nguồn được biến đổi thành một chuỗi các tokens, các chuỗi này được so sánh với dữ liệu lỗ hổng đã có và gán một định danh. Sau đó áp dụng kĩ thuật Pattern Matching và chỉ ra nơi có khả năng dẫn đến lỗ hổng phần mềm. Công cụ ITS4 [6] là một ví dụ sử dụng kĩ thuật này. Tuy nhiên kĩ thuật này cũng tạo nhiều sai số, bởi chúng không có mối liên hệ với cú pháp của chương trình. - Parsing Kĩ thuật này phức tạp hơn Lexical Analysis. Mã nguồn được cho vào phân tích cú pháp bằng việc sử dụng cây phân tích cú pháp. Kĩ thuật này có thể áp dụng để tìm ra các lỗ hổng SQL injection. - Data Flow Analysis (Phân tích dòng dữ liệu) Kĩ thuật này được sử dụng nhằm mục đích xác định các giá trị có thể có của một biến hoặc một biểu thức trong suốt quá trình chương trình thực thi. Kĩ thuật này phù hợp khi xác định các lỗ hổng phần mềm gây ra bởi tràn bộ đệm. - Model Checking (Kiểm thử mô hình) Đây là một kĩ thuật kiểm tra tự động nếu một mô hình của hệ thống có thể đặc tả được yêu cầu của hệ thống và mô hình được sử dụng để phát hiện lỗ hổng phần mềm. Đây là một kĩ thuật phức tạp bởi xây dựng mô hình đặc tả được cả hệ thống là một công việc khó khăn. b. Kĩ thuật động Đây là những kĩ thuật cần phải thực thi mã nguồn chương trình, sau đó phân tích hành vi, kết quả trả về từ hệ thống để đưa ra kết luận. Một số kĩ thuật động có thể kể đến như dưới đây. - Fault Injection Kĩ thuật này hoạt động bằng cách cung cấp các trường hợp có thể gây ra lỗi nhằm mục đích kiểm tra hành vi của hệ thống. Chúng ta cần có hiểu biết nhất định về hệ thống để có thể đưa ra các trường hợp lỗi có thể xảy ra. - Fuzzing Testing (Kiểm thử mờ) Ý tưởng của kĩ thuật này là cung cấp dữ liệu đầu vào cho ứng dụng một cách ngẫu nhiên nhằm xác định xem ứng dụng có thể xử lý nó một cách chính xác hay 18 Trường Đại học Sư phạm Hà Nội Luận văn thạc sĩ không. Kĩ thuật này dễ thực hiện hơn Fault Injection bởi vì thiết kế đơn giản và cần ít hiểu biết về hệ thống hơn. 1.3 Dự đoán lỗ hổng phần mềm Bảo mật phần mềm ngày càng trở nên quan trọng đối với cả doanh nghiệp và người dùng cá nhân. Việc phát hiện, xác định và khắc phục tất cả các lỗ hổng phần mềm là chìa khóa để đảm bảo an ninh của hệ thống phần mềm từ các cuộc tấn công có thể xảy ra. Tuy nhiên, từ góc nhìn bảo mật, kiểm thử phần mềm để phát hiện và sửa lỗ hổng tiềm tàng là một công việc tốn thời gian và chi phí bởi hai lý do: - Các hệ thống phần mềm hiện đại ngày nay tương đối lớn và phức tạp. Một hệ thống phần mềm có thể chứa hàng ngàn tệp mã nguồn và các thành phần khác. - Các lỗ hổng thường khó phát hiện hơn so với lỗi truyền thống, người kiểm tra phần mềm cần phải có kiến thức và biết các chiến thuật tấn công như một kẻ tấn công. Do đó, bất kỳ công cụ kĩ thuật kiểm tra tự động nào giúp phát hiện và khắc phục các lỗ hổng phần mềm càng sớm càng tốt đều giúp cho việc nâng cao chất lượng phần mềm và yêu cầu bảo mật lên đáng kể. Ngoài những cách đã được trình bày như phần trước, trong khoảng hai thập kỉ trở lại đây, chúng ta bắt đầu áp dụng kĩ thuật dự đoán lỗ hổng phần mềm. Kĩ thuật này đưa ra các thành phần hoặc tệp có khả năng gây ra lỗ hổng phần mềm giúp định hướng cho người kiểm thử nên kiểm tra phần nào trước của phần mềm. Dự đoán lỗ hổng phần mềm là bài toán phân lớp nhị phân các thực thể phần mềm như components, classes, modules … có chứa lỗ hổng phần mềm hay không (“vulnerable” hay “non- vulnerable”). 1.4 Các phương pháp dự đoán lỗ hổng phần mềm đã có Hiện nay đã có nhiều công trình nghiên cứu xây dựng mô hình dự đoán lỗ hổng phần mềm. Xem xét các các mô hình đã có, chúng tôi đưa ra bảng so sánh dựa trên 5 yếu tố sau: - Các đặc trưng được dùng để dự đoán - Nguồn dữ liệu lỗ hổng 19 Trường Đại học Sư phạm Hà Nội Luận văn thạc sĩ - Kĩ thuật sử dụng để xây dựng mô hình - Loại ứng dụng đưa vào thực nghiệm - Kết quả dự đoán của mỗi mô hình 20
- Xem thêm -

Tài liệu liên quan