CHƯƠNG 1 CÁC PHƯƠNG PHÁP TẤN CÔNG ỨNG DỤNG WEB VÀ PHÒNG CHỐNG 1.1 Tổng quan về ứng dụng web 1.1 Ứng dụng web là gì? Ngày nay, với xu hướng phát triển mạnh mẽ của công nghệ số các cơ quan tổ chức, doanh nghiệp tăng cường truyền thông quảng bá hình ảnh trên không gian mạng. Ứng dụng web nổi lên như một phương thức được sử dụng phổ biến giúp cho việc tiếp cận người dùng, khách hàng dễ dàng hơn. Một số ứng dụng web phổ biến, quen thuộc nhất có thể kể đến như facebook. Không chỉ giới hạn trong giải trí, mà ứng dụng web còn lan rộng vào nhiều lĩnh vực quan trọng như tài chính, ngân hàng, bất động sản, y tế, giáo dục và mua sắm.
Ứng dụng web là một yếu tố cốt lõi của cuộc cách mạng công nghệ 4.0, đóng vai trò quan trọng trong việc giúp con người nắm bắt thông tin và dữ liệu một cách nhanh chóng và hiệu quả.2 Mô hình client – server của ứng dụng web Mô hình cơ bản nhất của ứng dụng web: 4 Hình 1- 1 Mô hình client- server của một ứng dụng web [6] Mô hình client- server là một trong những mô hình phổ biến nhất tại thời điểm hiện tại. Không chỉ mang lại tính sẵn sàng cao, mô hình này cũng có khả năng mở rộng và phân phối nội dung tuyệt vời, chỉ cần người dùng có kết nối internet. Trong mô hình, server được hiểu như web server- máy chủ web. Máy chủ web là thành phần cốt lõi để website hoạt động, bao gồm các thành phần con như cơ sở dữ liệu, các đoạn mã, tập lệnh và một số thành phần khác.
Máy chủ web sẽ có vai trò phân tích và xử lý yêu cầu của client, đồng thời phân phối nội dung đến client thông qua các phương thức như HTTP (Hypertext Transfer Protocol) hoặc phương thức truyền file như FTP (File Transfer Protocol). Đối với client, máy khách trong mô hình web client-server,có thể nói là một ứng dụng hoặc trình duyệt web (như Chrome, Opera, Firefox, Safari…) được sử dụng để tương tác với các máy chủ Web theo yêu cầu của người dùng thông qua Internet. Về cơ bản, máy khách là một ứng dụng để gửi và nhận dữ liệu từ máy chủ. Việc giao tiếp giữa Client và Server được thực hiện theo các gói tin HTTP.
Đầu tiên, Client sẽ gửi một yêu cầu ( HTTP request), mô tả công việc tới server. Khi yêu 5 cầu HTTP được gửi đến, server dựa vào thông tin trong yêu cầu để xác định công việc cần phải thực thi. Sau đó, Server sẽ phản hồi cho client trong một gói tin HTTP trả lời (HTTP response). Tổng quan quá trình gửi - nhận dữ liệu có thể mô tả bằng lược đồ như sau: Hình 1- 2 Quy trình gửi nhận dữ liệu trong mô hình Client-Server.3 Giao thức HTTP/HTTPS HTTP là từ viết tắt của Hyper Text Transfer Protocol nghĩa là Giao thức Truyền tải Siêu Văn Bản hoạt động theo kiểu yêu cầu - phản hồi.
Đây là nền tảng của bất kỳ sự trao đổi dữ liệu nào trên các ứng dụng Web và cũng là giao thức được sử dụng trong giao tiếp giữa máy khách (client) và máy chủ (server). Theo đó, máy khách (client) tạo ra một yêu cầu (HTTP request) và gửi nó đến máy chủ HTTP ở cổng biết trước (Well-known port). Thông thường, cổng được sử dụng trong ứng dụng web là cổng 80 (HTTP) hoặc HTTPS (443). Máy chủ HTTP tiếp nhận yêu cầu để xử lý.
6 Hình 1- 3 Ví dụ về yêu cầu HTTP Các thành phần trong HTTP request có chứa đầy đủ các thành phần về kết nối và các thông tin cần truy vấn như: - HTTP version: Phiên bản giao thức HTTP được sử dụng - HTTP method: Phương thức được sử dụng trong yêu cầu, có thể là GET, POST, PUT, DELETE, OPTION,. - URL: URL - Host: domain của ứng dụng web - Cookie: Thông tin về phiên làm việc của client và server - User-agent: Thông tin về trình duyệt (client) được sử dụng trong request. Sau khi xử lý yêu cầu, máy chủ phản hồi lại cho máy khách một HTTP response có định dạng như sau: 7 Hình 1- 4 Ví dụ về phản hồi HTTP Phản hồi thể hiện các thông tin như: Mã trạng thái phản hồi: 200 là mã thành công. Có nhiều mã trạng thái 200 – 299: request thành công 300 – 399: Điều hướng gói tin 400 – 499: lỗi phía máy khách 500 – 599: lỗi phía máy chủ Thông tin server: Một số máy chủ như apache, tomcat, nginx,.
Content – Length: Độ dài nội dung gói tin phản hồi HTTP 8 Giao thức HTTP này cũng nằm trong số các giao thức dễ bị tấn công trong ứng dụng web. Vì vậy, nên sử dụng giao thức HTTPS thay thế nhằm đảm bảo tính bảo mật của thông tin truyền đi.2 Các lỗ hổng bảo mật trong ứng dụng web 1.1 Lỗ hổng bảo mật ứng dụng web là gì? Lỗ hổng bảo mật ứng dụng web là các điểm yếu bảo mật của một ứng dụng web mà có thể bị tận dụng để đe dọa tính toàn vẹn, quyền riêng tư, hoặc khả năng sẵn sàng của hệ thống. Các lỗ hổng này có thể dẫn đến việc mất thông tin nhạy cảm, thất bại trong việc duy trì tính khả dụng của dịch vụ, hoặc bị tấn công bởi các tin tặc hoặc kẻ tấn công khác. Khái niệm unstrusted data Dữ liệu không tin cậy (Untrusted Data) là một trong những khái niệm căn bản nhất khi học về An Toàn Thông Tin nói chung.
"Untrusted data" ám chỉ những dữ liệu mà người lập trình không kiểm soát được, chúng ta cần phải xác định hết tất cả Untrusted Data trên một ứng dụng Web. Vì nó chính là những cửa ngõ mà hacker bắt đầu tấn công vào. Đây là một khái niệm cơ bản trong an toàn bảo mật nhưng là cần thiết để tránh trường hợp bỏ sót hoặc không lường hết được các mối nguy cơ có thể xảy ra đối với hệ thống. Các vị trí có thể trở thành dữ liệu không tin cậy trong truy vấn HTTP rất đa dạng.
Nó có thể là các biến trong truy vấn và cũng có thể là các trường trong header hoặc thậm chí là cả các method. 9 Hình 1- 5 Ví dụ unstrusted data tồn tại ở biến username trong trường cookie thuộc header của truy vấn HTTP 1.2 Top 10 lỗ hổng, rủi ro theo OWASP [16] OWASP Top 10 là một báo cáo được cập nhật thường xuyên về các nguy cơ bảo mật đối với bảo mật ứng dụng web, tập trung vào 10 rủi ro/lỗ hổng quan trọng nhất. Báo cáo được tổng hợp bởi một nhóm các chuyên gia bảo mật từ khắp nơi trên thế giới. Trong lần cập nhật mới nhất năm 2021, danh sách 10 rủi ro/ lỗ hổng nghiêm trọng gồm có: A01:2021-Broken Access Control A02:2021-Cryptographic Failures A03:2021-Injection A04:2021-Insecure Design A05:2021-Security Misconfiguration A06:2021-Vulnerable and Outdated Components A07:2021-Identification and Authentication Failures A08:2021-Software and Data Integrity Failures A09:2021-Security Logging and Monitoring Failures A10:2021-Server-Side Request Forgery A01:2021-Broken Access Control (Lỗ hổng kiểm soát truy cập) 10 Kiểm soát truy cập là một phần rất quan trọng trong các ứng dụng web.
Trong đó hai khâu xác thực (authentication) và phân quyền (authorization), nếu hai khâu này không được xây dựng đủ mạnh thì hệ thống sẽ bị kẻ xấu truy cập trái phép, đánh cắp thông tin. Một số ví dụ có thể kể đến như: Nhân viên có quyền truy cập đến các tài nguyên mà chỉ lãnh đạo mới có quyền truy cập và tác động. Truy cập vào các chức năng dành cho quản trị thông qua các URL, các API. Truy cập vào các thông tin, tài nguyên của người dùng ngang quyền thông qua mã định danh tài khoản (ví dụ: GET /user_infor.
Cấu hình chia sẻ tài nguyên chưa chính xác (Cross-origin resource sharing). A02:2021-Cryptographic Failures (Lỗ hổng mã hóa) Những lỗi mã hóa dữ liệu có thể gây ra hậu quả nghiêm trọng, khi chúng có thể là nguyên nhân dẫn đến lộ các dữ liệu nhạy cảm, quan trọng hoặc xâm phạm hệ thống. Một số ví dụ của lỗi mã hóa như: Lưu trữ mật khẩu với thuật toán mã hóa lỗi thời, có thể bị bẻ khóa (MD5,.) Sử dụng kết nối HTTP để nhận và truyền dữ liệu Các thuật toán sinh ngẫu nhiên chưa đủ mạnh A03:2021-Injection (lỗ hổng chèn mã) Chèn mã là lỗ hổng cho phép kẻ tấn công chèn vào dữ liệu gửi lên máy chủ và sau đó được thực thi trên hệ thống. Lỗ hổng chèn mã luôn nằm trong nhóm các lỗ hổng bảo mật nghiêm trọng nhất, bị khai thác nhiều nhất và hậu quả nếu bị khai thác cũng là rất nặng nề.
11 Một số dạng tấn công cụ thể của lỗ hổng chèn mã gồm: SQL Injection (chèn mã SQL), OS command injection (chèn mã lệnh OS command), Cross-site Scripting (XSS), LDAP injection,. A04:2021-Insecure Design (thiết kế không an toàn) Các ứng dụng không có thiết kế an toàn, yếu tố bảo mật không được chú trọng đến có nhiều khả năng gây rủi ro cho dữ liệu của người dùng, các tài nguyên hệ thống, tài chính và uy tín doanh nghiệp. Ví dụ về thiết kế không an toàn: Các rạp chiếu phim cho phép đặt tối đa 15 chỗ trước mà không yêu cầu đặt cọc tiền vé, nếu kẻ xấu lợi dụng để đặt nhiều vé ở nhiều rạp chiếu phim thì có thể sẽ gây thiệt hại lớn nếu các ghế đã được đặt mà không được thanh toán. Khi đó các rạp chiếu phim sẽ thiệt hại lớn về doanh thu.
A05:2021-Security Misconfiguration (Thiếu sót cấu hình bảo mật) Trong quá trình triển khai vận hành các ứng dụng web, việc thiếu sót trong cấu hình bảo mật có thể gây ra những hậu quả nghiêm trọng. Một số lỗi thực tế do thiếu sót trong cấu hình như: Một số ứng dụng tạo mật khẩu mặc định cho người dùng, tuy nhiên hệ thống không yêu cầu người dùng phải đổi mật khẩu sau lần đăng nhập đầu tiên. Các cổng dịch vụ, các service chạy nội bộ nhưng lại được public ra internet Các cài đặt bảo mật không được thiết lập (giới hạn truy cập đến các hệ thống, chính sách đổi mật khẩu, .) A06:2021-Vulnerable and Outdated Components (Sử dụng các thành phần tồn tại lỗ hổng hoặc không còn hỗ trợ) Đây là một lỗ hổng rất phổ biến hiện nay, do một ứng dụng web được tạo thành bởi nhiều thư viện, nền tảng khác nhau. Do đó khi một thư viện hay nền tảng tồn tại 12 lỗ hổng bảo mật hay đã không còn được các nhà cung cấp tiếp tục phát triển sẽ trở thành mục tiêu được rất nhiều kẻ tấn công hướng đến.
Ví dụ: Năm 2021, trên thư viện ghi log Log4j (CVE-2021-44228) được sử dụng trong rất nhiều ứng dụng web tồn tại lỗ hổng nghiêm trọng cho phép thực thi mã bất kỳ trên hệ thống.