Chương 1. TỔNG QUAN VỀ BẢO MẬT VÀ CÁC LỖ HỔNG BẢO MẬT TRÊN WEB Trong chương này, luận văn sẽ giới thiệu một cách tổng quan về bài toán bảo mật website, sự cần thiết bảo mật website, các lỗ hổng bảo mật và tình trạng tấn công các trang web hiện nay.1 Tổng quan về bảo mật [1], [2] 1.1 Bảo mật website Bảo mật là bảo vệ an toàn thông tin trước những "tay" chuyên rình mò thông tin của người khác (Hình 1. Bảo mật website Với hệ thống thông tin của doanh nghiệp, thông tin chính là tiền. Với website của doanh nghiệp, việc có thể thay đổi thông tin trên đó sẽ ảnh hưởng xấu đến thương hiệu.
Trang web là thương hiệu của một đơn vị hay một cá nhân, mặt tiền của một cửa hàng và thường là lần tiếp xúc đầu tiên với khách hàng. Nếu nó không an toàn và bảo mật, những mối quan hệ kinh doanh quan trọng đó có thể bị ảnh hưởng. Các mối đe dọa có thể xuất hiện dưới nhiều hình thức - lây nhiễm một trang web có phần mềm độc hại để phát tán phần mềm độc hại đó cho khách truy cập trang Luan van 5 web, đánh cắp thông tin khách hàng, như tên và địa chỉ email, đánh cắp thẻ tín dụng và thông tin giao dịch khác, thêm trang web vào botnet của các trang web bị nhiễm và thậm chí chiếm quyền điều khiển hoặc đánh sập trang web. Nếu ứng dụng thương mại điện tử, thiệt hại sẽ rất lớn nếu website bị tấn công, khách hàng sẽ không bao giờ tin tưởng để cung cấp những thông tin cá nhân trên website nữa.
Bảo mật là sự thỏa hiệp giữa việc đảm bảo an toàn và chức năng hay khả năng sử dụng. Nếu bảo mật của hệ thống quá chặt chẽ, nó sẽ trở nên rất khó sử dụng hoặc khó hoạt động một cách hiệu quả. Nếu bảo mật quá đơn giản, hệ thống dễ bị tấn công và xâm nhập. Tùy thuộc vào các yêu cầu của mỗi hệ thống mà có những mục đích về bảo mật khác nhau, nhưng chúng đều có điểm chung là: Đảm bảo sự an toàn dữ liệu cho hệ thống và bảo vệ các tài nguyên trên mạng trước sự tấn công nhằm phá vỡ hệ thống hoặc sử dụng trái phép các tài nguyên của một số người có chủ ý xấu.
Bảo mật website có thể hiểu là một loại chức năng hoặc thao tác quan trọng, cần thiết trong quá trình sử dụng và vận hành website, bảo vệ trang web khỏi sự truy cập, sử dụng, sửa đổi, phá hủy hoặc phá vỡ trái phép. Bảo mật website có nghĩa là bảo vệ trang web của bạn và dữ liệu khỏi các mối đe dọa ác ý, tin tặc, tấn công mạng, tấn công DDOS và phần mềm độc hại. Mục đích của kiểm tra bảo mật là khám phá các lỗ hổng của ứng dụng web để các nhà phát triển có thể loại bỏ các lỗ hổng này khỏi ứng dụng và làm cho ứng dụng web và dữ liệu an toàn khỏi mọi hành động trái phép. Để trang web có thể hoạt động tốt, các nhà quản trị website cần thực hiện các thao tác bảo mật thường xuyên, kịp thời.
Bảo mật trang web muốn hiệu quả đòi hỏi sự nỗ lực trên toàn bộ trang web: trong ứng dụng web, cấu hình của máy chủ web, chính sách tạo mật khẩu từ phía máy khách. Quá trình phân tích bảo mật nên được chạy song song với phát triển ứng dụng Web. Nhóm lập trình viên và nhà phát triển chịu trách nhiệm phát triển mã cũng chịu Luan van 6 trách nhiệm thực hiện các chiến lược khác nhau, phân tích sau rủi ro, giảm thiểu và giám sát.2 Bảo mật ứng dụng web Bảo mật ứng dụng web là một nhánh của bảo mật thông tin liên quan cụ thể đến bảo mật của các trang web, ứng dụng web và dịch vụ web. Ở cấp độ cao, bảo mật ứng dụng web dựa trên các nguyên tắc bảo mật ứng dụng nhưng áp dụng chúng cụ thể cho các hệ thống Internet và web.
Bảo mật ứng dụng web là quá trình bảo mật dữ liệu bí mật được lưu trữ trực tuyến khỏi sự truy cập và sửa đổi trái phép. Điều này được thực hiện bằng cách thực thi các biện pháp chính sách nghiêm ngặt. Các mối đe dọa bảo mật có thể ảnh hưởng đến dữ liệu được lưu trữ với mục đích xấu là cố gắng truy cập vào thông tin nhạy cảm. Bảo mật ứng dụng web nhằm giải quyết và đáp ứng ba điều kiện bảo mật, còn được gọi là các nguyên tắc bảo mật: - Bí mật: Hạn chế quyền được phép truy nhập và công bố thông tin, bao gồm cả bảo vệ quyền riêng tư cá nhân và quyền sở hữu thông tin.
- Tính toàn vẹn: Xác định rằng dữ liệu trong ứng dụng Web là nhất quán và không bị sửa đổi bởi người dùng trái phép. - Tính khả dụng: bảo đảm Ứng dụng web có thể truy nhập và sử dụng được kịp thời, tin cậy. Tính khả dụng (utility) khác với tính sẵn sàng (availability) ở chỗ ứng dụng web có thể sẵn sàng song vẫn vô dụng (không dùng được) nếu thiếu mã khóa để giải mã chẳng hạn.2 Các lỗ hổng bảo mật [3], [4], [8] Lỗ hổng bảo mật là tập hợp những điều kiện mà cho phép một kẻ xấu tấn công làm vi phạm những chính sách bảo mật một cách tương minh hoặc ngầm. Đó là những điểm yếu nằm trong thiết kế và cấu hình của hệ thống, lỗi của lập trình viên hoặc sơ Luan van 7 suất trong quá trình vận hành.
“90% lỗ hổng bảo mật bắt nguồn từ ứng dụng web, 90% nhà quản trị chưa có cái nhìn tổng quan về bảo mật Web App”[3]. Đây là lý do dẫn tới số lượng các cuộc tấn công trên mạng ngày càng nhiều. Một số nguyên nhân sâu xa của lỗ hổng bảo mật như sau: - Phức tạp: Các lỗ hổng bảo mật tăng tỷ lệ thuận với sự phức tạp của một hệ thống. Sự phức tạp về phần mềm, phần cứng, thông tin, doanh nghiệp và quy trình giới thiệu nhiều lỗ hổng bảo mật hơn.
- Kết nối: Mỗi kết nối không bảo đảm là một con đường tiềm năng để các hacker khai thác thông tin - Lỗi thiết kế: Không nên có bất kỳ lỗi thiết kế nào trong phần mềm và phần cứng. Những lỗi này có thể khiến doanh nghiệp gặp rủi ro đáng kể. - Cấu hình: Cấu hình hệ thống kém làm tăng lỗ hổng bảo mật. - Đầu vào của người dùng: Dữ liệu nhận được thông qua SQL injections, tràn bộ đệm, v., có thể được thiết kế để tấn công hệ thống nhận.
- Sự quản lý: Quản lý nên có một kế hoạch quản lý rủi ro thích hợp để tránh các lỗ hổng bảo mật trong hệ thống. - Mật khẩu: Mật khẩu để tránh truy cập trái phép và bảo mật dữ liệu cá nhân của bạn. Mật khẩu không được bảo mật (chia sẻ với người khác, viết chúng xuống một nơi nào đó, cài đặt dễ đoán) cho phép tin tặc đoán mật khẩu của bạn một cách dễ dàng. - Lỗi của con người: Các lỗi của con người như xử lý tài liệu không đúng cách, lỗi mã hóa, đưa ra mật khẩu cho các trang web lừa đảo là một nguồn lỗ hổng bảo mật đáng kể.
Lỗi của con người có thể được ngăn chặn bằng cách đào tạo thích hợp cho nhân viên. - Giao tiếp: Các kênh truyền thông như điện thoại, điện thoại di động, internet cung cấp phạm vi cho các lỗ hổng bảo mật. OWASP Top ten là một tiêu chuẩn toàn cầu để phục vụ việc kiểm thử xâm nhập được dễ dàng hơn. Tiêu chuẩn này được đề xuất bởi một tổ chức phi lợi nhuận: Luan van 8 Open Web Application Security Project (OWASP- Dự án mở về bảo mật ứng dụng web).
Dưới đây là TOP 10 lỗ hổng bảo mật web phổ biến nhất theo tiêu chuẩn OWASP năm 2017 [8]: 1.1 A1: Injection - Tổng quan Injection là một kĩ thuật cho phép những kẻ tấn công lợi dụng lỗ hổng trong việc kiểm tra dữ liệu nhập trong các ứng dụng web và các thông báo lỗi của hệ quản trị cơ sở dữ liệu để "tiêm vào" (inject) và thi hành các câu lệnh bất hợp pháp (không được người phát triển ứng dụng lường trước). Hậu quả của nó có thể rất lớn vì nó cho phép những kẻ tấn công có thể thực hiện các thao tác: vượt qua khâu xác thực, đánh cắp thông tin trong cơ sở dữ liệu, chèn, xóa, sửa đổi dữ liệu bên trong cơ sở dữ liệu, chiếm quyền điều khiển của hệ thống. Các lỗ hổng đặc trưng: SQL injection; OS injection; LDAP injection; NoSQL injection…Ví dụ điển hình của Injection: - Kịch bản # 1: Một ứng dụng sử dụng dữ liệu không tin cậy khi xây dựng lệnh gọi SQL dễ bị tấn công sau: String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") + "'"; - Kịch bản # 2: Tương tự, một ứng dụng nếu tin tưởng quá vào các khung sẵn có, có thể dẫn đến các truy vấn vẫn dễ bị tấn công, (ví dụ: Ngôn ngữ truy vấn Hibernate (HQL)): Query HQLQuery = session.createQuery("FROM accounts WHERE custID='" + request.getParameter("id") + "'"); Trong cả hai trường hợp, kẻ tấn công đều sửa đổi giá trị tham số ‘id, trong trình duyệt của họ để gửi: hoặc’ 1, = 1 Ví dụ: http://example.com/app/accountView?id=' or '1'='1 Điều này thay đổi ý nghĩa của cả hai truy vấn để trả về tất cả các bản ghi từ bảng “Account”. Các cuộc tấn công nguy hiểm hơn có thể sửa đổi hoặc xóa dữ liệu, hoặc thậm chí gọi các thủ tục được lưu trữ.
Luan van 9 - Phòng chống Lỗ hổng Injection xảy ra do các biến được nhập vào từ người dùng không được kiểm soát chặt chẽ trước khi xây dựng câu truy vấn tới CSDL. Đó chính là nguyên nhân chung nhất của các lỗ hổng dạng Injection. Lỗ hổng Injection xảy ra khi có kết hợp cả 2 điều kiện: Có sự truy vấn tới CSDL Câu truy vấn chưa được kiểm soát sự an toàn Có thể khẳng định rằng, một biến được nhập vào từ người dùng, qua nhiều bước xử lý trung gian xây dựng câu truy vấn tới cơ sở dữ liệu mà không có bất cứ bước kiểm tra sự an toàn nào thì chắc chắn sẽ mắc các lỗ hổng Injection. Đây cũng chính là điểm mấu chốt để nhận diện và phòng chống các lỗ hổng Injection.
Phương pháp hữu hiệu nhất để chống tấn công Injection là kiểm soát thật chặt chẽ các giá trị nhập được nhập vào từ người dùng.2 A2: Lỗi xác thực (Broken Authentication) Đây là nhóm các vấn đề có thể xảy ra trong quá trình xác thực, quản lý phiên đăng nhập.