CHƯƠNG 1: TỔNG QUAN VỀ CÁC DẠNG TẤN CÔNG VÀO WEBSITE, ỨNG DỤNG WEB VÀ CÁC GIẢI PHÁP PHÒNG CHỐNG Chương này trình bày về kiến trúc ứng dụng web cũng như mô hình, các thành phần, cách thức hoạt động, cách thức liên kết giữa các thành phần đặc trưng thông thường trong một ứng dụng web và các yêu cầu về bảo mật. Ngoài ra, chương còn đề cập đến các hình thức tấn công vào ứng dụng web cũng như cách phòng chống bị tấn công của các hình thức tấn công phổ biến trong các năm gần đây dựa theo OWASP. Phần cuối của chương trình bày các biện pháp bảo mật ứng dụng web, bao gồm nguyên tắc chung và một số biện pháp bảo mật cụ thể cho ứng dụng web. Kiến Trúc Ứng Dụng Web và Các Yêu Cầu Bảo Mật 1.1 Kiến trúc ứng dụng web Dưới góc độ chức năng, ứng dụng Web là các chương trình máy tính cho phép người dùng website đăng nhập, truy vấn vào ra dữ liệu qua mạng Internet trên trình duyệt Web yêu thích của họ, mang tính kỹ thuật nhiều hơn có thể giải thích các ứng dụng Web truy vấn máy chủ chứa nội dung và tạo tài liệu Web động để phục vụ yêu cầu của máy khách.
Giao diện web đặt ra rất ít giới hạn khả năng người dùng. Thông qua JavaScript, DHTML, Flash và những công nghệ khác, những phương pháp chỉ ứng dụng mới có như vẽ trên màn hình, chơi nhạc, và dùng được bàn phím và chuột tất cả đều có thể thực hiện được. Ứng dụng web phổ biến nhờ vào sự có mặt vào bất cứ nơi đâu của trình duyệt web và kết nối Internet. Khả năng cập nhật và bảo trì ứng dụng Web mà không phải phân phối và cài đặt phần mềm trên hàng ngàn máy tính của người dùng cũng là một lý do cho sự phổ biến của nó.
Một ứng dụng web (Web application) có thể gồm các thành phần: Máy khách web/trình duyệt web (Web client/web browser), Máy chủ web (HTTP/web server), URL/URI, Web session và cookie, Bộ diễn dịch và thực hiện các server 7 script, Các server script (CGI – Common Gateway Interface), Máy chủ cơ sở dữ liệu và Hạ tầng mạng TCP/IP kết nối giữa máy khách và máy chủ web.1: Kiến trúc chuẩn của ứng dụng web [1] Hình 1.1 biểu diễn kiến trúc chuẩn của hệ thống ứng dụng web (hay ngắn gọn là ứng dụng web), trong đó mô tả các thành phần của một ứng dụng web và giao tiếp giữa chúng. Theo đó, các thành phần của một ứng dụng web gồm Web Browser (Trình duyệt), Web Server (Máy chủ web), Application Server (Máy chủ ứng dụng), Data (Kho chứa dữ liệu – thường là cơ sở dữ liệu), File System (Hệ thống file trên máy chủ) và External System (Các hệ thống bên ngoài). Web Browser tạo và gửi yêu cầu về trang web (Page Request) đến Web Server. Nếu đó là yêu cầu trang web tĩnh, Web Server sẽ đọc nội dung trang từ File System và gửi trang web cho Web Browser.
Nếu đó là yêu cầu trang web động, Web Server sẽ chuyển yêu cầu cho Application Server xử lý. Application Server sẽ dịch và thực hiện mã script trong trang web để tạo kết quả. Application Server có thể cần truy nhập Data, File System, hoặc External System để xử lý yêu cầu. Kết quả xử lý yêu cầu được chuyển lại cho Web Server để tạo trang web và gửi cho Web Browser.
Các máy chủ web phổ biến hiện này có thể kể tới là Apache, Nginx, IIS, Tomcat… Các ứng dụng web thì tùy thuộc vào yêu cầu triển khai mà có thể được tạo nên bởi các ngôn ngữ lập trình khác nhau như: C#, Java, Python, PHP, Ruby… Cơ sở dữ liệu (Data) sẽ đóng vai trò lưu trữ, cung cấp thông tin cho ứng dụng web trong quá trình xử lý request. Một số hệ quản trị cơ sở dữ liệu thường được sử dụng 8 bao gồm: SQL Server, MySQL, MongoDB, Oracle. Ngoài ra, tùy thuộc vào độ phức tạp, quy mô, yêu cầu trong việc phát triển mà website có thể có thêm nhiều thành phần khác như Message Queue, Proxy, Cache. Giao thức HTTP HTTP là viết tắt của Hypertext Transfer Protocol hay còn gọi là giao thức truyền tải siêu văn bản, là một trong năm giao thức chuẩn của mạng internet, được dùng để liên hệ thông tin giữa máy cung cấp dịch vụ (Web server) và máy khách web (Web client) trong mô hình Client/Server.
HTTP sử dụng cổng chuẩn 80 là một giao thức ứng dụng của bộ giao thức TCP/IP. Giao thức HTTPS HTTPS là viết tắt của Hypertext Transfer Protocol Secure, là một giao thức kết hợp giữa giao thức HTTP và giao thức bảo mật SSL hoặc TLS nhằm mục đích gia tăng tính an toàn cho việc truyền dữ liệu giữa Web server và trình duyệt Web. Giao thức HTTPS thường được dùng trong các giao dịch nhạy cảm cần tính bảo mật cao sử dụng các kỹ thuật mật mã trước khi gửi giúp bảo mật thông tin trao đổi tránh bị nghe lén và lạm dụng. Theo mặc định giao thức HTTPS sử dụng cổng 443 để truyền dữ liệu.
Máy khách web và máy chủ web giao tiếp với nhau bằng giao thức HTTP hoặc HTTPS thông qua phương thức yêu cầu/đáp ứng (Request/Response), trong đó yêu cầu là http request gửi từ máy khách web lên máy chủ web và đáp ứng hay phản hồi là http response gửi từ máy chủ web tới máy khách web. Cấu trúc của một http request, như mô tả trên Hình 1.2 gồm các thành phần sau: o Method: là phương thức mà HTTP Request này sử dụng, thường là GET,POST, ngoài ra còn một số phương thức khác như HEAD, PUT, DELETE, OPTION, CONNECT. 9 o URI: là địa chỉ định danh của tài nguyên. URI có thể là dấu *.
– HTTP version: là phiên bản HTTP đang sử dụng o Request headers: cho phép client gửi thêm các thông tin bổ sung về thông điệp HTTP request và về chính web browser. Một số trường request header thông dụng như: Accept, Cookie, User-Agent, Content- Type, Connection… o Request body: nội dung web browser gửi cho web server (file, nội dung dạng json, parameter post…) Hình 1.2: Cấu trúc của http request Hình 1.3: Cấu trúc của http reponse Cấu trúc của một http response, như mô tả trên Hình 1.3 gồm các thành phần sau: 10 o HTTP-version: phiên bản HTTP cao nhất mà server hỗ trợ. o Status-Code: mã kết quả trả về. o Reason-Phrase: mô tả về Status-Code.
o Response header: phép web server gửi thêm các thông tin bổ sung về thông điệp HTTP response o Response body: nội dung ứng dụng web trả về cho web browser 1.2 Các yêu cầu bảo mật ứng dụng web, website Trước những nguy cơ tiềm ẩn về an ninh mạng như hiện nay để đảm bảo tính bảo mật và giảm thiểu các rủi ro liên quan đến ứng dụng web cần có những chính sách, tiêu chuẩn an toàn thông tin cho ứng dụng web, website. Dưới đây liệt kê một số yêu cầu bảo mật ứng dụng web, website. Yêu cầu về cài đặt Yêu cầu cài đặt trên hệ điều hành an toàn, đã được thiết lập cấu hình chính sách bảo mật để đảm bảo ATTT mức hệ điều hành cho web server. Phiên bản cài đặt phải cập nhật các bản vá của nhà sản xuất để tránh bị tấn công qua các lỗ hổng đã biết.
Tắt/disable các thành phần mặc định Gỡ bỏ các thư mục/trang mặc định như: các trang ví dụ, hướng dẫn, các trang quản trị web server từ xa, các trang phục vụ development, debug để tránh bị khai thác lỗ hổng qua các nội dung web mặc định. Tắt các Module/Extension nguy hiểm không sử dụng như: các module hiển thị thông tin server (module info, status, version), hiển thị nội dung thư mục, các module xử lý CGI, xử lý webdav để tránh bị khai khác các module extension không sử dụng. 11 Tắt chế độ tự động triển khai hoặc gỡ lỗi trên web server (nếu có). Chế độ tự động triển khai hoặc gỡ lỗi trên web server có thể đưa ra nhiều thông tin nhạy cảm hoặc gây mất kiểm soát về security.
Thay đổi các thành phần mặc định Thay đổi thông báo lỗi mặc định của web server. Tránh để lộ các thông tin nhạy cảm của hệ thống khi xảy ra lỗi như 500, 503. Thay đổi thông tin banner của dịch vụ HTTP, không để lộ thông tin phiên bản hệ điều hành, web server để tránh việc hacker có thể tìm ra phiên bản web server. Từ đó, họ tấn công vào các lỗ hổng 1-days liên quan, đã được công bố [12].
Giới hạn truy cập Chỉ truy cập quản trị từ xa trong mạng nội bộ của doanh nghiệp và có phương thức xác thực người dùng. Hacker có thể chiếm quyền kiểm soát dịch vụ web qua kênh quản trị từ xa từ ngoài internet. Do đó cần cô lập các kết nối quản trị từ xa và có các phương thức xác thực người dùng như: sử dụng tài khoản/mật khẩu, OTP, private key… Không cho phép liệt kê file, thư mục để tránh bị hacker phát hiện ra các file, thư mục nhạy cảm của hệ thống. Các Nguy Cơ và Các Dạng Tấn Công Lên Ứng Dụng Web 1.1 Các nguy cơ và các lỗ hổng bảo mật trong website, ứng dụng web (TOP 10 OSWASP 2017) Open Web Application Security Project (OWASP) [8][9][10] là một tổ chức bao gồm các chuyên gia bảo mật hàng đầu thế giới, chuyên cung cấp các thông tin về những ứng dụng và rủi ro đặt ra một cách trực tiếp, khách quan và thực tế nhất.
Từ năm 2013 đến nay, cứ 4 năm 1 lần, OWASP lại công bố danh sách Top 10 các rủi ro bảo mật ứng dụng lớn nhất, được gọi là OWASP Top 10. 12 Danh sách này được coi là chuẩn AppSec và được cộng đồng an ninh mạng tin tưởng. Danh sách bao gồm thông tin mới nhất về các lỗ hổng, các mối đe dọa và cuộc tấn công cũng như những thủ thuật để phát hiện và khắc phục. Các thành viên dự án lập ra danh sách này dựa trên việc phân tích tỉ lệ xuất hiện và mức độ nghiêm trọng của từng mối đe dọa.
OWASP Top 10 năm 2017 được phát hành công khai, dựa trên cuộc thăm dò, kiểm tra hơn 2,3 triệu lỗ hổng tác động đến 50000 ứng dụng, bao gồm 2 bản cập nhật lỗ hổng quy mô lớn và cập nhật các kịch bản tấn công mới. Phần tiếp theo mô tả danh sách Top 10 của năm 2017. A1 – Injection (Lỗi nhúng mã) Nếu ứng dụng của bạn có thể nhận dữ liệu đầu vào người dùng đến cơ sở dữ liệu back-end thì ứng dụng của bạn có thể sẽ phải đối mặt với cuộc tấn công bằng mã nhúng. Lỗi nhúng mã (Injection) là tập hợp các lỗ hổng bảo mật xảy ra khi dữ liệu đáng ngờ được chèn vào ứng dụng dưới dạng lệnh hay truy vấn.