Web Application là gì ?
Trước khi Web Application – ứng dụng web trở nên phổ biến như hiện tại thì khái niệm ứng dụng thường được hiểu là các chương trình phần mềm được cài đặt trên máy tính để giải quyết cho một số nhu cầu nhất định nào đó.
Hiện tại thì ứng dụng web giống như một “chương trình” mà chúng ta đã từng sử dụng trước đây, nhưng có điểm đặc biệt là không cần cài đặt gì cả, và tất cả gần như gói gọn trên một trình duyệt web, chẳng hạn như Firefox, Safari hoặc Chrome. Do đó, thay vì cài đặt chương trình bạn cần, ở một mức độ sử dụng nào đó, bạn chỉ cần truy cập trang web liên quan. Dưới đây là một số ví dụ về ứng dụng web:
- Webmail như Outlook và Gmail
- Các ứng dụng văn phòng trực tuyến như Microsoft Office 365 (Word, Excel và PowerPoint), Google Drive (với đầy đủ ứng dụng văn phòng tương tự) và cả Zoho Office cũng thế
- Mua sắm trực tuyến như Tiki, shopee hay lazada
- Các ví dụ khác bao gồm ngân hàng trực tuyến, chuyển tiền, dự báo thời tiết hay mạng xã hội.
Về căn bản thì ứng dụng web là một chương trình chạy trên một máy chủ từ xa. Máy chủ này chạy liên tục để “phục vụ” các máy khách. Trong trường hợp này, máy chủ sẽ chạy một loại chương trình cụ thể có thể được truy cập bởi các trình duyệt web.
Lấy ví dụ một ứng dụng mua sắm trực tuyến. Ứng dụng web sẽ đọc dữ liệu về các sản phẩm và thông tin chi tiết của chúng từ một database server. Database được sử dụng để lưu trữ thông tin một cách có tổ chức. Nó bao gồm thông tin về sản phẩm, khách hàng và hóa đơn. Database server chịu trách nhiệm về việc đọc, tìm kiếm và ghi vào cơ sở dữ liệu. Ứng dụng web mua sắm trực tuyến có thể cần nhiều hơn một database để truy cập, ví dụ:
Database sản phẩm: chứa thông tin chi tiết về sản phẩm, chẳng hạn như tên, hình ảnh, thông số kỹ thuật và giá cả.
Database khách hàng: chứa tất cả các thông tin chi tiết liên quan đến khách hàng, chẳng hạn như tên, địa chỉ, email và số điện thoại.
Database bán hàng: chứa thông tin rằng khách hàng đã mua gì và họ đã thanh toán như thế nào.
Rõ ràng lượng thông tin được lưu trữ trong bất kỳ hệ thống mua sắm trực tuyến nào là rất lớn và phức tạp. Trong trường hợp kẻ tấn công quản lý khai thác được ứng dụng web và đánh cắp database của khách hàng. Trong tình huống này sẽ dẫn đến tổn thất đáng kể cho công ty và khách hàng.
Mô tả đơn giản về cách một website hoạt động
Hình ảnh dưới đây cho thấy việc tìm kiếm một mặt hàng trên một trang web mua sắm trực tuyến.
- Người dùng nhập các từ khóa liên quan vào trường tìm kiếm. Trình duyệt web gửi (các) từ khóa tìm kiếm đến ứng dụng web mua sắm trực tuyến.
- Ứng dụng web truy vấn (tìm kiếm) trong database sản phẩm cho các từ khóa đã nhập.
- Database sản phẩm sẽ trả về kết quả tìm kiếm phù hợp với các từ khóa được cung cấp cho ứng dụng web.
- Ứng dụng web sẽ trình bày lại kết quả trong một giao diện dễ đọc và trả lại cho người dùng.
Từ góc độ của người dùng, họ sẽ chỉ truy cập vào một giao diện website thân thiện, nơi tất cả cơ sở hạ tầng kỹ thuật nằm ẩn ở phía sau (background).
Nhiều công ty đưa ra các chương trình tiền thưởng cho việc tìm ra lỗi (bug bounty program). Chương trình này cho phép công ty trao thưởng cho bất kỳ ai phát hiện ra lỗ hổng bảo mật trong hệ thống của công ty. Điều kiện là lỗ hổng được tìm thấy nằm trong phạm vi và các quy tắc đã được định trước. Một số các ông lớn, như Google, Microsoft và Facebook cũng có các chương trình bug bounty như vậy. Việc phát hiện ra một lỗi có thể giúp bạn kiếm được từ vài trăm USD đến hàng chục nghìn USD, tùy thuộc vào mức độ nghiêm trọng của lỗ hổng bạn đã phát hiện ra.
Các vấn đề bảo mật liên quan tới web application
Cùng xét một ví dụ khi thực hiện mua hàng trực tuyến, các bước có thể diễn ra tuần tự như dưới đây:
Đăng nhập tại trang web > Tìm kiếm sản phẩm > Thêm sản phẩm vào giỏ hàng > Nhập địa chỉ giao hàng > Nhập thông tin thanh toán.
Từ các bước kể trên, có một số kiểu tấn công phổ biến như dưới đây:
- Web login: Kẻ tấn công cố gắng mò mật khẩu bằng cách thử nhiều từ thông dụng hoặc sử dụng một danh sách các mật khẩu với một công cụ tự động kiểm tra chúng trên trang đăng nhập.
- Tìm kiếm sản phẩm: Kẻ tấn công có thể cố gắng xâm phạm hệ thống bằng cách thêm các ký tự hoặc đoạn mã vào cụm từ tìm kiếm. Mục tiêu của kẻ tấn công là để hệ thống trả lại dữ liệu hoặc thực thi một hành động nào đó khác với thiết kế ban đầu.
- Thông tin thanh toán: Kẻ tấn công sẽ kiểm tra xem thông tin thanh toán có được gửi bằng dạng clear text hay sử dụng mã hóa yếu không. Mã hóa là việc làm cho dữ liệu không thể đọc được nếu không có key hay mật khẩu.
Nhận dạng người dùng và xác thực không thành công
Nhận dạng là khả năng xác định một user là duy nhất. Ví dụ tài khoản Anne là đặc điểm nhận diện cho người mua nào đó.
Trong khi đó xác thực đề cập đến khả năng chứng minh rằng người dùng là người mà họ đang đăng nhập vào. Website phải xác nhận danh tính của người dùng và xác thực họ trước khi họ có thể sử dụng hệ thống. Tuy nhiên, bước này có một số rủi ro bảo mật, bao gồm:
- Cho phép kẻ tấn công sử dụng brute-force, tức là thử nhiều mật khẩu, thường sử dụng các công cụ tự động, để tìm thông tin đăng nhập hợp lệ.
- Cho phép người dùng sử dụng mật khẩu yếu. Mà mật khẩu yếu thường dễ đoán.
- Website lưu trữ mật khẩu của người dùng dưới dạng văn bản không mã hóa. Nếu kẻ tấn công đọc được tệp chứa mật khẩu, hẳn là không còn cách nào cứu vãn nữa.
Password không được mã hóa
Password được mã hóa
Broken access control
Kiểm soát truy cập đảm bảo rằng mỗi người dùng chỉ có thể truy cập các tệp (tài liệu, hình ảnh, v.v.) liên quan đến vai trò hoặc công việc của họ. Ví dụ: nếu ai đó trong bộ phận tiếp thị truy cập có thể đọc tài liệu của bộ phận tài chính – điều này hiển nhiên là không đúng, cũng không cần thiết. Các lỗ hổng ví dụ liên quan đến kiểm soát truy cập bao gồm:
- Không áp dụng nguyên tắc least privilege và thực tế là cấp cho người dùng nhiều quyền truy cập hơn mức họ cần.
- Có thể xem hoặc sửa đổi tài khoản của người khác bằng cách sử dụng số nhận dạng duy nhất của tài khoản đó. Ví dụ: dạng link web kèm userid=.
- Có thể duyệt các trang yêu cầu xác thực (đăng nhập) với tư cách là người dùng chưa được xác thực. Ví dụ: box ẩn trên các forum
Injection
Kiểu tấn công này đề cập đến một lỗ hổng trong ứng dụng web nơi người dùng có thể chèn mã độc hại vào. Một nguyên nhân của lỗ hổng bảo mật này là do những gì người dùng nhập vào không được kiểm tra trước khi thực thi.
Vấn đề về mã hóa
Mã hóa tập trung vào các quá trình mã hóa và giải mã dữ liệu. Mã hóa sẽ biến một đoạn clear text trở nên vô nghĩa đối với bất kỳ ai không có khóa bí mật để giải mã nó. Mã hóa đảm bảo rằng không ai có thể đọc dữ liệu mà không biết khóa bí mật. Quá trình giải mã giúp chuyển đổi đoạn mã hóa trở lại thành văn bản ban đầu bằng cách sử dụng private key. Ví dụ về các lỗi mã hóa bao gồm:
- Gửi dữ liệu nhạy cảm ở dạng clear text, ví dụ dùng HTTP thay vì HTTPS. HTTP là giao thức được sử dụng để truy cập web, trong khi HTTPS là phiên bản bảo mật của HTTP. Kẻ tấn công có thể đọc mọi thứ bạn gửi qua HTTP, nhưng không đọc được khi gửi qua HTTPS.
- Dựa vào một thuật toán mật mã yếu. Các thuật toán mã hóa như vậy thì không khó để phá vỡ.
- Sử dụng key mặc định hoặc key quá yếu cho các chức năng mật mã. Ví dụ đặt secret key là 123456.