MỞ ĐẦU 1.Tính cấp thiết của đề tài Website ngân hàng chứa nhiều thông tin nhạy cảm của khách hàng, cần được bảo vệ chống các xâm nhập của tin tặc. Bản chất các Website khi phát triển luôn tồn tại các lỗ hổng bảo mật. Do vậy, việc rà soát và kiểm tra các lỗ hổng bảo mật trên các Website ngân hàng luôn được quan tâm. Vì thế, bảo vệ thông tin trở thành một yêu cầu không thể thiếu trong mọi hoạt động nói chung và hoạt động điện tử nói riêng.
Đặc biệt việc đảm bảo bảo mật Website ngân hàng trong thời đại số hiện nay càng trở nên cấp thiết và quan trọng. An toàn thông tin là bảo vệ thông tin và hệ thống thông tin nói chung bảo mật Website ngân hàng nói riêng khỏi các truy cập trái phép. Đây là biện pháp chống chiếm dụng, làm hỏng, chỉnh sửa hoặc thực hiện các thao tác gây mất thông tin quan trọng liên quan đến cá nhân, tổ chức. Tuy nhiên, vấn đề bảo mật Website ngân hàng nói chung và ở Lào nói riêng vẫn chưa được các cơ quan, doanh nghiệp ở Lào chú trọng đầu tư.
Không phải tất cả các tổ chức, doanh nghiệp đều có thể trang bị đầy đủ cũng như có thể đảm bảo an toàn, bảo mật thông tin một cách toàn diện. Việc kiểm thử lỗ hổng bảo mật Website ngân hàng rất cần thiết vì sẽ góp phần phát hiện các lỗ hổng và giúp khắc phục, vá các lỗi bảo mật này. Nhiều kỹ thuật kiểm thử, song kỹ thuật kiểm thử hộp đen (Black-Box) cụ thể là kỹ thuật Fuzzing (thuộc loại kiểm thử Black-Box) là quan trọng nhất. Mặc dù không mới, song mới được quan tâm từ vài năm nay do các ưu việt so với các kỹ thuật truyền thống đã biết.
Việc kiểm thử phần mềm hiện nay đa phần được thực hiện một cách thủ công, không có hiệu quả cao trong việc phát hiện những lỗ hổng an ninh tiềm tàng. Kỹ thuật Fuzzing trong kiểm thử lỗ hổng bảo mật Website ngân hàng chính là một giải pháp cho vấn đề trên. Với khả năng tự động hóa cao cùng với cơ chế phát hiện lỗ hổng hiệu quả, công nghệ này được rất nhiều hãng quan tâm sử dụng. Tuy kỹ thuật fuzzing đã được áp dụng trong nhiều lĩnh vực, song việc áp dụng kỹ thuật này vào kiểm thử lỗ hổng bảo mật website vẫn còn có những vấn đề cần nghiên cứu do sự phát triển của lĩnh vực an toàn thông tin.
2 Xuất phát từ thực tế trên, em đã lựa chọn đề tài “Nghiên cứu kỹ thuật Fuzzing trong kiểm thử lỗ hổng bảo mật Website ngân hàng” thuộc phạm vi các vấn đề đã nêu để làm luận văn. Mục đích của nghiên cứu là tìm hiểu, thử nghiệm kỹ thuật Fuzzing trong kiểm thử lỗ hổng bảo mật website ngân hàng. Do bản thân có nguyện vọng nghiên cứu kỹ thuật và áp dụng vào công tác tại một ngân hàng tại Lào, em chọn website ngân hàng làm môi trường cho thử nghiệm kỹ thuật này. Tổng quan về vấn đề nghiên cứu Về vấn đề lỗ hổng bảo mật của website Có thể nói lỗ hổng bảo mật là những điểm yếu trên hệ thống hoặc ẩn chứa trong một dịch vụ mà dựa vào đó kẻ tấn công có thể xâm nhập trái phép để thực hiện các hành động phá hoại hay chiếm đoạt các tài nguyên hợp pháp.
Lỗ hổng website là những điểm yếu của hệ thống website mà tin tặc có thể lợi dụng để khai thác nhằm thu thập thông tin về hệ thống, tấn công lấy cắp thông tin, tấn công vào người dùng hệ thống hay tấn công chiếm quyền điều khiển hệ thống website. Về kỹ thuật Fuzzing Trong lĩnh vực an ninh ứng dụng, Fuzzing hay kiểm thử mờ (fuzz testing) là một kỹ thuật thuộc kiểm thử hộp đen (black box), phát hiện lỗi của phần mềm bằng cách tự động hoặc bán tự động cung cấp dữ liệu đầu vào không hợp lệ, không mong đợi hay ngẫu nhiên vào phần mềm. Phần mềm sẽ được giám sát và ghi lại các trường hợp ngoại lệ như lỗi mà không được thực thi, tài nguyên thất thoát,. nhằm xác định các hành vi bất thường, phát hiện các lỗ hổng bảo mật tiềm ẩn của phần mềm.
Dữ liệu không mong đợi thường là các giá trị vượt quá biên, các giá trị đặc biệt có ảnh hưởng tới phần xử lý, hiển thị của chương trình. Các chương trình và framework được dùng để tạo ra kỹ thuật fuzzing hoặc thực hiện fuzzing được gọi là Fuzzer. Tùy theo môi trường và ứng dụng cần kiểm tra mà người ta có các phương án khác nhau để xây dựng Fuzzer. Fuzzing là một trong những kỹ thuật của kiểm thử hộp đen, không đòi hỏi quyền truy cập vào mã nguồn [3, 4].
Do đó, nó có khả năng tìm thấy lỗi một cách 3 nhanh chóng và tránh được việc phải xem mã nguồn.Fuzzing cũng giống như các kỹ thuật kiểm thử phần mềm, nhưng nó được sử dụng để phát hiện ra một loạt các vấn đề của web như: Cross Site Scripting, tràn bộ đệm, chèn câu truy vấn (SQL Injection),. Tuy nhiên, việc ứng dụng kỹ thuật Fuzzing trong kiểm thử bảo mật tự động các Website nói chung và Website ngân hàng nói riêng chưa được quan tâm nhiều, song việc áp dụng kỹ thuật này vào kiểm thử lỗ hổng bảo mật website vẫn còn có những vấn đề cần nghiên cứu do sự phát triển của lĩnh vực an toàn thông tin [6, 9, 10]. Mục đích nghiên cứu Mục tiêu nghiên cứu của luận văn là: Nghiên cứu, khảo sát, tìm hiểu về những lỗ hổng bảo mật phổ biến trong website, cụ thể là website một ngân hàng; tìm hiểu về kiểm thử lỗ hổng bảo mật website và kỹ thuật Fuzzing trong kiểm thử lỗ hổng bảo mật website ngân hàng; thực hiện thử nghiệm. Đối tượng và phạm vi nghiên cứu Đối tượng nghiên cứu: Kỹ thuật Fuzzing trong kiểm thử lỗ hổng bảo mật trên website một ngân hàng.
Phạm vi nghiên cứu: Website một ngân hàng. Phương pháp nghiên cứu - Phương pháp nghiên cứu lý thuyết: Nghiên cứu tài liệu liên quan đến các lỗ hổng bảo mật đã được công bố hiện nay, các kỹ thuật Fuzzing trong bảo mật website. - Phương pháp khảo sát: Nghiên cứu tìm hiểu các lỗ hổng bảo mật điển hình trên website, kỹ thuật kiểm thử; phân tích đánh giá công cụ thử nghiệm. - Phương pháp nghiên cứu thực nghiệm: Thực hiện thử nghiệm với một công cụ kiểm thử.
TỔNG QUAN VỀ KIỂM THỬ WEBSITE 1. Các khái niệm cơ bản về hoạt động của website (ngân hàng), lỗ hổng bảo mật trên website 1. Các khái niệm cơ bản về hoạt động của website (ngân hàng) Website là một tập hợp các trang web, thường chỉ nằm trong một tên miền hoặc tên miền phụ trên World Wide Web của Internet.Một trang web là tập tin HTML hoặc XHTML có thể truy nhập dùng giao thức HTTP.Website có thể được xây dựng từ các tệp tin HTML (website tĩnh) hoặc vận hành bằng các CMS chạy trên máy chủ (website động). Website có thể được xây dựng bằng nhiều ngôn ngữ lập trình khác nhau (PHP, .NET, Java, Ruby on Rails…)[6, 12, 20].
Một Website thường được bao gồm bởi 04 phần chính: - Source code: Mã nguồn website, chứa tệp lệnh trích xuất HTML. - Hosting: Bộ nhớ lưu trữ website. - Database: Dữ liệu nội dung website. - Domain: Tên miền của website, thực chất một website không cần đến tên miền nó vẫn có thể hoạt động bình thường vì nó có địa chỉ IP.
Bản chất của tên miền là nó được ánh xạ sang địa chỉ IP thông qua máy chủ DNS, tạo ra sự đơn giản cho người dùng dễ dàng truy cập vào web thông qua tên miền, thay vì phải nhớ địa chỉ IP của website. Ban đầu, các website chỉ bao gồm các nội dung văn bản, hình ảnh và video, chúng được liên kết với nhau thông qua các link. Tác dụng của website đơn giản chỉ là lưu trữ và hiển thị thông tin. Người dùng chỉ có thể đọc, xem, di chuyển đến các được dẫn giữa các page.Với công nghệ hiện nay, website không chỉ đơn giản là một trang tin cung cấp các thông tin.
Trước sự ra đời của các ngôn ngữ server như: CGI, ASP, PHP,… các website đã trở nên linh hoạt, có thể tương tác với người dùng. Từ đây, người dùng có thể dùng web để thực hiện một công việc nào đó bằng máy tính, do đó ứng dụng web được ra đời. 5 Ứng dụng web là một ứng dụng chủ/khách sử dụng giao thức HTTP để tương tác với người dùng hay hệ thống khác [8, 13]. Trình khách là một trình duyệt web như: Internet Explorer, Chrome, FireFox hay có thể là một chương trình có chức năng như một trình duyệt web.
Người dùng có thể gửi, nhận các dữ liệu từ máy chủ thông qua việc trao đổi luồng thông tin với web server và hiển thị nội dung trang web nhận được trên trình duyệt. Các ứng dụng web này có thể là các trang cổng thông tin điện tử, trao đổi thông tin, mua bán, các diễn đàn, các trang gửi nhận thư,. Tốc độ phát triển các kỹ thuật xây dựng ứng dụng web cũng phát triển rất nhanh. Trước đây những ứng dụng web thường được xây dựng bằng CGI (Common Getaway Interface) được chạy trên các máy chủ web và kết nối với với các cơ sở dữ liệu đơn giản trên cùng một máy chủ.
Ngày nay, ứng dụng web thường được viết bằng PHP, ASP.Net, JSP (hay các ngôn ngữ tương tự) và chạy trên máy chủ phân tán, kết nối đến nhiều nguồn dữ liệu. Một ứng dụng web thường có kiến trúc gồm: Java Server Page SOAP Servlet Internet JDBC SQL Tomcat Explorer Server HTTP HTML CGI Google COM XML Apache Chrome MySQL HTTPS Java Script PHP XML SQL Mozilla IIS Active Firefox EJB XML File Server Page Presentation Application Database Hình 1. Kiến trúc một ứng dụng web Trên hình 1.1 mô tả kiến trúc thông thường của một ứng dụng web bao gồm các lớp: - Lớp trình diễn: Lớp này có chức năng hiển thị dữ liệu mà nó nhận được từ web server cho người dùng, ngoài ra còn có thể có chức năng tạo bố cục và giao diện cho trang web. 6 - Lớp ứng dụng: Đây là nơi xử lý của ứng dụng web.
Nó sẽ xử lý thông tin yêu cầu từ người dùng, đưa ra quyết định, gửi kết quả đến lớp trình diễn. Lớp này thường được cài đặt bằng các kỹ thuật lập trình dựa trên các ngôn ngữ như CGI, Java,. và được triển khai trên host hoặc trên các dịch vụ của máy chủ như Apache của Linux, IIS của Windows Server,… - Lớp dữ liệu: Lớp này là các hệ quản trị dữ liệu SQL như MySQL, SQL Server, Oracle,. chịu tránh nhiệm quản lý các file dữ liệu và quyền sử dụng dữ liệu của toàn bộ website.