Các kỹ thuật Tấn công web cơ bản
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 ...
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 webserver, 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
-
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 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.
Áp dụng cho các chức năng thêm, sửa, xóa dữ liệu
-
B1: xác định request thêm, sửa, xóa CSDL
-
B2: kiểm tra cách chống CSRF token(token, bpid, state..)
-
B3 : Thực hiện các case như không có token , token khác null, token cũ.
-
B4. 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 1 website đòi hỏi 1 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 1 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