Sử dụng mô hình học máy Navie Bayes trong phát hiện các lỗ hổng mạng. Thực hiện demo trên phần mềm GyoiThon
Trang 1CHƯƠNG I: GIỚI THIỆU MỘT SỐ LỖ HỔNG WEB 4
1.1 Lỗ hổng SQL Injection 4
1.1.1 Giới thiệu lỗ hổng SQL Injection 4
1.1.2 Phương pháp phòng chống lỗ hổng SQLi 5
1.2 Lỗ hổng Cross Site Scripting (XSS) 6
1.2.1 Giới thiệu lỗ hổng XSS 6
1.2.2 Phương pháp khắc phục lỗ hổng XSS 7
1.3 Lỗ hổng Broken Authentication 8
1.3.1 Khái niệm lỗ hổng Broken Authentication 8
1.3.2 Phương pháp phòng chống lỗ hổng Broken Authentication 9
CHƯƠNG 2: GIỚI THIỆU CÔNG CỤ QUÉT LỖ HỔNG SỬ DỤNG MÁY HỌC GYOITHON 11
2.1 Giới thiệu công cụ GyoiThon 11
2.2 Một số tính năng của GyoiThon 11
2.3 Các bước xử lý của GyoiThon 13
2.4 Cài đặt GyoiThon 14
2.5 Demo 15
Trang 2LỜI NÓI ĐẦU
Với sự phát triển không ngừng của các ứng dụng web thì các cuộc tấncông vào ứng dụng web cũng trở nên phức tạp Vấn đề này đặt ra yêu cầu cấpthiết về đảm bảo an toàn thông tin cho các ứng dụng web Các lỗ hổng web cóthể là những điểm yếu trong thiết kế, cài đặt và cấu hình của hệ thống hoặc dolỗi của lập trình viên hoặc sơ suất trong quá trình vận hành, quản trị Hacker
sử dụng các công cụ rò quét để phát hiện một hay nhiều các máy chủ web có
lỗ hổng bảo mật, từ đó tấn công, cài đặt mã độc, phá hoại hoặc đánh cắpthông tin trên ứng dụng web Việc bị tấn công, phá hoại, đánh cắp thông tingây ảnh hưởng nghiêm trọng đến quá trình hoạt hoạt động, gây thiệt hại về uytín, tài chính đối với cơ quan, tổ chức, doanh nghiệp
Hiện nay có nhiều các công cụ, phần mềm hỗ trợ lập trình viên, quản trịmạng tìm kiếm, phát hiện các lỗ hổng của ứng dụng web Tuy nhiên, với sựphát triển nhanh chóng của công nghệ, với sự phát triển của trí tuệ nhân tạo,công nghệ học máy, một số phần mềm không theo kịp sự phát triển cácphương thức tấn công, rà quét khai thác lỗ hổng Để có các giải pháp ngănchặn, phát hiện các nguy cơ để có giải pháp ngăn chăn, khắc phục hiệu quả,cũng cần phải ứng dụng các giải pháp, công nghệ tiên tiến trong việc pháthiện các lỗ hổng ứng dụng web Ứng dụng công nghệ học máy (MachineLearning) trong các giải pháp phần mềm quét lỗ hổng Một trong các ứngdụng đó là công cụ GyoiThon
Trang 3;
SELECT * FROM Users WHERE User_id='' OR 1=1;/*' and password='*/ '
CHƯƠNG I: GIỚI THIỆU MỘT SỐ LỖ HỔNG WEB 1.1 Lỗ hổng SQL Injection
1.1.1 Giới thiệu lỗ hổng SQL Injection
SQL Injection (SQLi) là lỗ hổng trong việc kiểm tra dữ liệu đầu vàocủa các ứng dụng web và các thông báo lỗi của hệ quản trị CSDL trả về, đượctin tặc khai thác bằng cách tiêm các mã SQL để thực thi câu lệnh bất hợppháp, đăng nhập mà không cần tên tài khoản và mật khẩu, thực hiện truy cập
từ xa, xóa dữ liệu, lấy quyền quản trị của máy chủ… Khai thác lỗ hổng SQLi
là một trong những hình thức tấn công website phổ biến hiện nay Đa số ứngdụng web sử dụng hệ quản trị CSDL MySQL, SQL Máy chủ, Oracle, DB2,Sysbase đều có khả năng có lỗ hổng SQLi Mỗi khi người dùng tiến hànhđăng nhập vào tài khoản trực tuyến, họ sẽ phải cung cấp thông tin vềUsername và Password Trong quy trình kiểm tra và xác nhận tính hợp phápcủa tài khoản đó, hệ thống hoặc ứng dụng web tương ứng sẽ chạy 1 câu lệnhtruy vấn có dạng như sau:
Nếu kẻ tấn công chèn đoạn mã ' OR 1=1;/* vào giá trị User-Id và
*/ vào giá trị Password, câu lệnh truy vấn sẽ có dạng:
Đây là câu lệnh có điều kiện luôn đúng, do đó kẻ tấn công có thể lấytoàn bộ dữ liệu của bảng Users
Trang 4Minh họa tấn công SQLi
1.1.2 Phương pháp phòng chống lỗ hổng SQLi
Để phòng chống lỗ hổng SQLi, có thể áp dụng một số các phương phápsau:
- Mã hóa ký tự trên địa chỉ URL trước khi được sử dụng
- Không hiển thị thông báo lỗi cho người dùng bằng cách thay thếnhững lỗi thông báo bằng 1 trang do người phát triển thiết kế
- Kiểm tra giá trị nhập vào của người dùng, thay thế những kí tự như ‘ ;
… loại bỏ các kí tự meta như ',",/,\,; và các kí tự extend như NULL, CR,
LF, trong các chuỗi nhận được từ dữ liệu người dùng nhập vào, các tham sốURL, các giá trị từ cookies
- Chuyển các giá trị numeric sang integer trước khi thực hiện câu truy
vấn SQL hoặc dùng ISNUMERIC để chắc chắn nó là một số integer.
- Dùng thuật toán để mã hóa dữ liệu
- Kiểm soát chặt máy chủ SQL:
+ Kiểm tra tất cả các tài khoản có trong máy chủ SQL: chỉ tạo tài khoản
có quyền thấp cho các ứng dụng, loại bỏ những tài khoản không cần thiết,đảm bảo rằng tất cả tài khoản có mật khẩu được đặt dưới dạng phức tạp
+ Kiểm tra các đối tượng tồn tại: xóa bỏ các extended stored procedure,xoá bỏ tất cả CSDL mẫu như “northwind” và “pubs”, xóa các storedprocedure không dùng như: master xp_cmdshell, xp_startmail, xp_sendmail,sp_makewebtask…
Trang 5+ Kiểm tra những tài khoản nào có thể truy xuất đến những đối tượngnào: đối với những tài khoản của một ứng dụng nào đó dùng để truy xuấtCSDL thì chỉ được cấp những quyền hạn cần thiết tối thiểu để truy xuất đếnnhững đối tượng nó cần dùng.
+ Kiểm tra các phiên làm việc trên máy chủ
+ Tài khoản người vận hành để có quyền hạn thấp trong máy chủ SQL
1.2 Lỗ hổng Cross Site Scripting (XSS)
1.2.1 Giới thiệu lỗ hổng XSS
XSS là một kiểu tấn công cho phép tin tặc chèn những đoạn script độchại (thường là javascript hoặc HTML) vào website và thực thi trong trìnhduyệt của người dùng nhằm đánh cắp những thông tin quan trọng như cookie,mật khẩu XSS không tấn công vào máy chủ của hệ thống mà chủ yếu tấncông trên máy client của người dùng Đây là một trong những kỹ thuật tấncông phổ biến nhất của các ứng dụng web và ngày càng nguy hiểm
Minh hoạ lỗ hổng XSS
Những phương pháp tin tặc có thể khai thác qua lỗi XSS:
Trang 6- Đánh cắp cookie: tin tặc có thể lấy được cookie của người dùng và sửdụng thông tin đánh cắp để giả mạo phiên truy cập hoặc lấy những thông tinnhạy cảm khác được lưu trong cookie.
- Keylogging: tin tặc có thể ghi lại những thao tác gõ phím của ngườidùng bằng cách sử dụng sự kiện addEventListener trong Javascript nhằmđánh cắp các thông tin nhạy cảm, lấy mật khẩu truy cập website hoặc mã sốthẻ tín dụng…
- Phishing: tin tặc có thể tạo ra những website giả lừa người dùng đăngnhập để đánh cắp mật khẩu
1.2.2 Phương pháp khắc phục lỗ hổng XSS
Để phòng chống tin tặc khai thác lỗ hổng XSS, lập trình viên phải thựchiện lọc và kiểm tra dữ liệu đầu vào từ phía người dùng hoặc kiểm tra, mã hóagiá trị xuất cho người dùng
- Lọc: Luôn luôn lọc các dữ liệu nhập từ phía người dùng bằng cách lọccác kí tự meta (kí tự đặc biệt) được định nghĩa trong đặc tả của HTML, sửdụng hàm encode để chuyển các kí tự < > thành < %gt
- Kiểm tra dữ liệu đầu vào: Loại bỏ hoàn toàn các kí tự khả nghi tronginput của người dùng, hoặc thông báo lỗi nếu trong input có các kí tự này Sửdụng các thư viện để lọc các thẻ HTML, CSS, JS
- Mã hóa: Thực hiện mã hóa phía máy chủ web, đảm bảo tất cả các nộidung phát sinh động sẽ đi qua một hàm mã hóa ngăn chạy các script khôngmong muốn Tuy nhiên việc mã hóa tất cả dữ liệu không đáng tin cậy có thểtốn tài nguyên và ảnh hưởng đến khả năng thực thi của một số máy chủ
- Dùng chuẩn CSP để chống XSS: Với CSP, trình duyệt chỉ chạyJavaScript từ những domain được chỉ định Để sử dụng CSP, máy chủ chỉ cần
thêm header Content-Security-Policy vào mỗi phản hồi Nội dung header
chứa những domain mà được tin tưởng
Trang 71.3 Lỗ hổng Broken Authentication
1.3.1 Khái niệm lỗ hổng Broken Authentication
Broken Authentication là lỗ hổng liên quan tới vấn đề xác thực ngườidùng, quản lý phiên được triển khai chưa đúng cách, cơ chế quản lý yếu chophép Hacker có thể bẻ khóa passwords, keys, session tokens hay lợi dụng đểthực hiện khai thác các lỗ hổng khác nhằm chiếm được định danh của ngườidùng tạm thời hoặc vĩnh viễn
Hacker dễ dàng tìm kiếm hàng trăm ngàn usernames và password phổbiến, một danh sách các tài khoản admin mặc định, các tools brute force tựđộng (tấn công vét cạn), hoặc các bộ công cụ tấn công từ điển Đây là điềukiện cần để thực hiện cuộc tấn công nhằm vào lỗ hổng này Với việc có quyềntruy cập vào một vài tài khoản, hoặc chỉ cần 1 tài khoản admin là đủ đểHacker có thể gây nguy hại cho cả hệ thống Tuỳ thuộc vào tính chất của hệthống, mà nó cho phép Hacker tiến hành nhiều hành vi phạm pháp như rửatiền, ăn cắp tài sản, danh tính, tiết lộ thông tin nhạy cảm,
Minh hoạ tấn công Broken Authentication
Những hệ thống ứng dụng web có nguy cơ đối mặt với lỗ hổng BrokenAuthentication:
Trang 8- Ứng dụng cho phép hacker tiến hành các cuộc tấn công vét cạn BruteForce hoặc các kiểu tấn công tự động khác Các bạn có thể hiểu đơn giản làứng dụng Web của chúng ta cho phép request liên tục nhiều API từ cùng một
IP hoặc cố gắng truy cập vào một tài khoản nhiều lần mà không có cơ chếquản lý ví dụ như lock tài khoản đó nếu xuất hiện những hành vi như vậy
- Cho phép người dùng đặt các mật khẩu yếu, không đạt tiêu chuẩn.Không có cơ chế bắt buộc thay đổi mật khẩu mặc định chẳng hạn
"Password1" hay "admin/admin"
- Cơ chế khôi phục mật khẩu (trường hợp người dùng quên mật khẩu)yếu hoặc không an toàn
- Lưu trữ Password dạng Plaintext (bản rõ) mà không mã hoá, hoặc sửdụng những thuật toán mã hóa hay các mã băm đơn giản, dễ dàng bị crack
- Thiếu hoặc cơ chế xác thực 2 lớp không hiệu quả
- Hiển thị trực tiếp Session IDs hoặc các thông số quan trọng trongParams của URL
- Không có cơ chế luân phiên thay đổi Session IDs sau khi đăng nhậpthành công
1.3.2 Phương pháp phòng chống lỗ hổng Broken Authentication
- Triển khai cơ chế xác thực 2 lớp nhằm chống lại các cuộc tấn công tựđộng như Brute Force
- Kiểm tra độ an toàn của Password, không cho phép người dùng đặtnhững mật khẩu quá đơn giản chẳng hạn chỉ toàn số, hoặc toàn chữ
- Đảm bảo việc đăng ký, khôi phục tài khoản, đăng nhập thất bại (cóthể do sai Password, Username) hoặc đường dẫn URL sẽ sử dụng cácmessages giống nhau trả vê cho người dùng cho mọi kết quả Ví dụ như khingười dùng đăng nhập không thành công do sai mật khẩu Nếu Server trả vềthông điệp "Bạn nhập sai mật khẩu" Hacker có thể dựa vào đó để biết rằngusername được gửi lên tồn tại, và chỉ cần vét cạn mật khẩu cho tới khi thànhcông Thay vào đó, Server nên trả về thông điệp "Username hoặc Password
Trang 9không hợp lệ", Hacker sẽ không thể loại bỏ trường hợp nào, việc vét cạn sẽtrở nên phức tạp hơn rất nhiều.
- Giới hạn số lần hoặc yêu cầu thời gian chờ sau một số lần đăng nhậpkhông thành công Có thể là khoá tài khoản, hoặc sau 2-3' mới có thể tiếp tụcthực hiện đăng nhập
- Có cơ chế sinh, quản lý và lưu trữ Session IDs đảm bảo an toàn, với
độ khó và xáo trộn cao, set thời gian hết hạn cũng như tự huỷ sau khi Logout
Trang 10CHƯƠNG 2: GIỚI THIỆU CÔNG CỤ QUÉT LỖ HỔNG SỬ
DỤNG MÁY HỌC GYOITHON 2.1 Giới thiệu công cụ GyoiThon
GyoiThon là một công cụ kiểm thử thâm nhập (penetration testing) sửdụng máy học để tự động xác định phần mềm chạy trên máy chủ web Công
cụ này thực hiện việc thu thập thông tin từ máy chủ mục tiêu mà chỉ cần truycập từ xa và phân tích thông tin để nhận diện sản phẩm như hệ quản trị nộidung (CMS), phần mềm máy chủ web, khung làm việc (frameworks), và ngônngữ lập trình Sau khi nhận diện các thông tin, GyoiThon sử dụng nền tảngMetasploit để kiểm tra, tìm kiếm các lỗ hổng đã biết và tổng hợp thành mộtbáo cáo các nguy cơ
Mô hình GyoiThon
2.2 Một số tính năng của GyoiThon
- Truy cập từ xa và tự động hoàn toàn
GyoiThon có khả năng tự động thu thập thông tin từ máy chủ web mụctiêu chỉ qua truy cập từ xa, không đòi hỏi sự tương tác liên tục từ người dùng.Người dùng chỉ cần chạy GyoiThon một lần
- Kiểm thử không phá hoại
Công cụ có thể thu thập thông tin từ máy chủ web mục tiêu mà khônggây hại hay thay đổi môi trường mục tiêu, thông qua các truy cập web thôngthường
Trang 11- Thu thập thông tin đa dạng
GyoiThon tích hợp nhiều công cụ thu thập thông tin, bao gồm:
+ Crawler Web: Để thu thập thông tin cấu trúc và nội dung trên web + Google Custom Search API: Sử dụng Google để tìm kiếm thông tin
cụ thể từ các kết quả thu thập
+ Censys: Công cụ tìm kiếm cho dữ liệu về thiết bị mạng và cấu trúc hạ
tầng internet
+ Explorer of Default Contents: Để tìm các nội dung mặc định hoặc
tiềm ẩn trên máy chủ
+ Examination of Cloud Services: Kiểm tra các dịch vụ đám mây liên
quan
- Phân tích thông tin
GyoiThon sử dụng các kỹ thuật khớp chuỗi và học máy để phân tíchthông tin đã thu thập và xác định
+ Phiên bản sản phẩm và số CVE: Xác định phiên bản phần mềm vàcác lỗ hổng bảo mật (CVE) liên quan đến phiên bản đó
+ Thông tin không cần thiết: Nhận diện các thông tin HTML và thôngđiệp debug không cần thiết có thể tiết lộ thông tin hệ thống
+ Trang Đăng Nhập: Xác định trang đăng nhập của ứng dụng web
- Kiểm tra lỗ hổng thực tế
Sau khi xác định các sản phẩm và lỗ hổng tiềm năng, GyoiThon cóthể sử dụng nền tảng Metasploit để thực thi các mô-đun khai thác và kiểmtra các lỗ hổng thực tế trên máy chủ web mục tiêu
- Đánh giá và báo cáo
Cung cấp báo cáo chi tiết về các lỗ hổng phát hiện, đồng thời đềxuất các biện pháp giải quyết hoặc khắc phục
Trang 122.3 Các bước xử lý của GyoiThon
Bước 1: Thu thập phản hồi HTTP
GyoiThon thu thập một số phản hồi HTTP từ trang web mục tiêu trong
quá trình crawling Một số ví dụ về các phản hồi HTTP được GyoiThon thu
thập như: Etag, Set-Cookie, thông tin về JS và CSS
Bước 2: Xác định phần mềm được cài đặt
GyoiThon sử dụng máy học (Naive Bayes) để xác định các phần mềmđược cài đặt trên máy chủ web
Naive Bayes là phương pháp phân loại dựa vào xác suất được sử dụngrộng rãi trong lĩnh vực máy học
Ý tưởng cơ bản của cách tiếp cận Naive Bayes là sử dụng xác suất cóđiều kiện giữa từ và chủ đề để dự đoán xác suất chủ đề của một văn bản cầnphân loại Điểm quan trọng của phương pháp này chính là ở chỗ giả định rằng
sự xuất hiện của tất cả các từ trong văn bản đều độc lập với nhau Với giảđịnh này NB không sử dụng sự phụ thuộc của nhiều từ vào một chủ đề, không
sử dụng việc kết hợp các từ để đưa ra phán đoán chủ đề và do đó việc tínhtoán NB chạy nhanh hơn các phương pháp khác
Định lý Bayes: Giả sử A và B là hai sự kiện đã xảy ra Xác suất có điều
kiện A khi biết trước điều kiện B được cho bởi:
- P(A): Xác suất của sự kiện A xảy ra
- P(B): Xác suất của sự kiện B xảy ra
- P(B|A): Xác suất (có điều kiện) của sự kiện B xảy ra, nếu biết rằng sựkiện A đã xảy ra
Trang 13- P(A|B): Xác suất (cĩ điều kiện) của sự kiện A xảy ra, nếu biết rằng sựkiện B đã xảy ra.
Xét bài tốn phân loại với các nhãn C: 1, 2 C
Tính xác suất để điểm dữ liệu này rơi vào class c: p(c|x) , Tức tính xác
suất để đầu ra là nhãn c biết rằng đầu vào là vector x Từ đĩ, cĩ thể giúp xácđịnh class của điểm dữ liệu x đĩ bằng cách chọn ra class cĩ xác suất cao nhất:
Dựa vào lý thuyết Bayes
Từ (3) sang (4) là vì quy tắc Bayes Từ (4) sang (5) là vì mẫu số p(x)
khơng phụ thuộc vào c
Khi số lượng các thuộc tính mơ tả dữ liệu là lớn thì rất khĩ để tính p(x| c) là rất lớn Vì x là một biến ngẫu nhiên nhiều chiều, cần rất rất nhiều dữ liệu
training để cĩ thể xây dựng được phân phối đĩ
Dĩ đĩ để cĩ thể giảm độ phức tạp của thuật tốn Nạve Bayes giả thiếtcác thuộc tính độc lập nhau Khi đĩ:
Cơng thức (5) được viết lại:
Trong đĩ
p(c)= T ổng số mẫu cĩ trong t ập hu ấn luy ện Số mẫu cĩ nh ãn c
p(xi | c)= Số mẫucĩ giá trị thuộc tính xi và cĩ nhãn làc Tổng số mẫucĩ nhãn c
* Các phân phối thường dùng của Navie Bayes