Biết để phòng và chống.
I. Tổng quan
Các nguy cơ đối với ứng dụng web
- Tấn công vào hệ thống vận hành
- Tấn công vào ứng dụng web
- Tấn công vào công tác vận hành, quản trị: Khai thác điểm yếu trong cơ chế quản trị, người dùng.
- Tấn công vào nền tảng phục vụ ứng dụng web: Khai thác vào lỗ hổng Web Server, máy chủ OS, DB, dịch vụ đang chạy trên máy chủ.
Các lỗi an toàn thông tin thường gặp
- SQL Injection.
- XSS.
- CSRF.
- Kiểm soát các thao tác với file.
- Mã hóa dữ liệu nhạy cảm.
- Kiểm tra quyền truy cập của người dùng.
- User Enumeration (lý do là mặc dù đã lỗi thời nhưng hiện giờ khi bạn đăng nhập vào các website sẽ vẫn báo một lỗi chung chung là “Incorrect email/password combination” thay vì cụ thể hơn như “The email you entered does not exist” bởi vì không cần thiết để một người có ý định tấn công website của bạn biết là họ đang đối diện với vấn đề nào.)
- Session Fixation.
- Session Hijacking.
- Sử dụng Cookie an toàn.
- Sử dụng Captcha an toàn.
Một số công cụ phổ biến dùng hỗ trợ phát hiện lỗi an toàn thông tin (ATTT)
- BurpSuite
- Firebug
- Temper Data
- Hackbar
II. Giới thiệu một số lỗi ATTT
1. CSRF (Cross-Site Request Forgery)
-
Nguy cơ: là kiểu tấn công lừa người dùng thực hiện một hành động mà họ không mong muốn lên ứng dụng web, bằng chính quyền người dùng đó.
- Biện pháp: Sử dụng token (sinh ngẫu nhiên) trong các xử lý quan trọng, server kiểm tra tính hợp lệ của token này.
- Dò lỗi (Áp dụng cho các chức năng thêm, sửa, xóa dữ liệu):
- Bước 1: xác định request thêm, sửa, xóa CSDL
- Bước 2: kiểm tra cách chống CSRF token(token, bpid, state..)
- Bước 3: Thực hiện các case như không có token, token khác null, token cũ.
- Bước 4: Kiểm tra kết quả, nếu thực hiện thành công thì mắc lỗi CSRF.
- Fix lỗi:
- Phía server: Tạo giá trị token và lưu vào session.
- Trong các chức năng quan trọng: Viết code xử lý khi gửi request sẽ gửi kèm giá trị token.
- Phía Server: kiểm tra tính hợp lệ của request bằng cách so sánh giá trị token gửi lên từ client và token lưu trong session.
- Hợp lệ: Thực thi code, reset lại token và lưu lại trong session.
2. Kiểm soát file upload lên hệ thống
- Nguy cơ: Các chức năng upload file, dữ liệu lên server nếu không kiểm soát tốt dẫn đến upload các file không hợp lệ (như webshell, file cấu hình,…)
- Biện pháp: Kiểm soát phía server
- Extension của file
- Lọc các ký tự ‘/’, ‘\’, ký tự null
- Sinh ngẫu nhiên tên file
- Fix lỗi
3. Path Traversal – Download file
- Nguy cơ: Các xử lý download qua action truyền filename nếu không xử lý filename dẫn đến attacker có thể download các file config của ứng dụng hay cấu hình server.
- Biện pháp: Trước khi xử lý, cần lọc các ký tự ‘/’, ‘\’, ký tự null.
- Fix lỗi:
4. Mã hóa dữ liệu nhạy cảm
-
Nguy cơ: Bằng một cách nào đó (khai thác lỗ hổng hoặc có quyền truy cập DB), Attacker lấy được các thông tin nhạy cảm trong DB. Các thông tin sẽ bị lộ nếu không mã hóa hoặc mã hóa không an toàn.
-
Biện pháp: Mã hóa dữ liệu nhạy cảm trong DB, các hàm mã hóa 1 chiều phải dùng Salt.
-
Fix lỗi:
5. Phân quyền
- Nguy cơ: Một hệ thống phân quyền không tốt, dẫn đến người dùng có thể truy cập đến các chức năng, dữ liệu không được phép.
- Biện pháp:
- Kiểm tra quyền trong request gửi lên server
- Người dùng có được phép thực hiện chức năng?
- Người dùng thực hiện chức năng trên vùng dữ liệu cho phép?
- Fix lỗi:
6. Sử dụng captcha an toàn
-
Nguy cơ: Với các chức năng quan trọng, attacker có thể sử dụng công cụ tự động đến khi đạt được mục đích.
-
Biện pháp: Sử dụng Captcha cho các chức năng quan trọng này.
7. User enumeration
- Nguy cơ:
- Trong chức năng đăng nhập, nếu thông báo lỗi quá chi tiết dẫn đến attacker có thể thử và tìm ra thông tin user có trên hệ thống.
-
Với chức năng như reset password, forgot password, đăng ký cho phép thông báo user đúng hay sai dẫn đến attacker có thể thử và tìm ra thông tin user có trên hệ thống.
- Biện pháp:
- Sử dụng chung thông báo lỗi cho trường hợp login sai username hay password.
-
Sử dụng captcha cho các chức năng đăng ký, reset, forgot password.
- Fix lỗi:
III. Kết Luận
Có rất nhiều lỗ hổng và các kỹ thuật tấn công trong quá trình lập trình và phát triển một website đòi hỏi developer cần phải nắm chắc kiến thức lập trình cũng như có khả năng điều khiển tốt mã nguồn của mình.
Trên đây, tôi nêu ra một số kỹ thuật tấn công cơ bản và cách fix nó. Bên cạnh đó, developer cần:
Tiếp tục nghiên cứu những nguy cơ và cách phòng chống cho các nguy cơ đó. Tìm hiểu thêm về các công cụ kiểm tra lỗi bảo mật đang được phát triển hiện nay và học cách ứng dụng chúng vào trong thực tiễn công việc của mình.
Nguồn bài viết: https://viblo.asia/nguyen.thi.hong.nhung/posts/7ymwGXLYG4p1