Tổng quan về vấn đề bảo mật
Trở lại với chuỗi bài viết về hướng dẫn lập trình an toàn cho lập trình viên, bài viết thứ tư trong series's post: Secure coding for developers sẽ tiếp tục với nội dung về các vấn đề liên quan đến các vấn đề: Error handling and Logging, Data protection. Việc xử lý lỗi hệ thống, lỗi ứng dụng hay lưu log ứng dụng là vấn đề cần được quan tâm vì nếu không được xử lý đúng cách ứng dụng sẽ lộ ra những thông tin nhạy cảm tạo điều kiện để kẻ tấn công thu thập thông tin và tấn công hệ thống. Vấn đề tiếp theo là việc bảo vệ dữ liệu (thông tin tối quan trọng của ứng dụng), nếu việc bảo dữ liệu không tốt sẽ gây ra những hậu quả nặng nề thậm chí ảnh hưởng đến tiền bạc và cả hoạt động của công ty.
I. Error Handling and Logging
Các yêu cầu trong việc thực hiện xử lý lỗi của ứng dụng, quản lý việc thông báo lỗi của ứng dụng tránh việc ứng dụng bắn lỗi gây ra việc lộ các thông tin nhạy cảm của ứng dụng. Việc lưu trữ log cũng cần thực hiện đúng yêu cầu, lưu đủ thông tin và tránh lưu các thông tin nhạy cảm của ứng dụng hoặc người dùng.
1. Không để lộ thông tin nhạy cảm trong các phản hồi lỗi từ trang web, bao gồm chi tiết hệ thống, phiên bản của ứng dụng hoặc thông tin tài khoản
- Khi trả về lỗi cần thiết laajpd dể ứng dụng chỉ trả về thoont in chung, không chứa các thông tin chi tiết của ứng dụng tránh việc hacker lợi dụng để thu thập thông tin từ đó tiến hành tấn công.
2. Sử dụng các trình xử lý lỗi không hiển thị thông tin debug hoặc thông tin stack trace
- Cần xử lý phần bắt lỗi không trả về thông tin debug hay thông tin của stack trong thông báo lỗi trả về.
3. Thông báo lỗi chung và tiến hành chỉnh sửa các trang thôn báo lỗi mặc định
- Cần trả về thông báo lỗi chung và tiến hành custom các trang thôn báo lỗi để trả về khi trang web gặp lỗi. Tránh sử dụng các trang thông báo lỗi mặc định của framework vì các trang thông báo này thường chứa nhiều thông tin liên quan đến ứng dụng và phiên bản.
4. Xử lý bộ nhớ được cấp một cách thích hợp khi các lỗi về condition xảy ra xảy ra
- Bộ nhớ được cấp phát cần được xử lý hoặc xóa đi khi có các lỗi về condition xảy ra tránh việc lộ lọt thông tin hệ thống ra bên ngoài
5. Lỗi xử lý logic liên quan đến kiểm soát bảo mật nên từ chối quyền truy cập theo mặc định
- Các xử lý lỗi liên quan đến bảo mật cần được bảo vệ và chỉ được cấp quyền truy cập cho đối tượng được cấp phép
6. Tất cả các thông tin nhật ký phải được triển khai và xử lý trên một hệ thống đáng tin cậy (ví dụ: Máy chủ)
- Hệ thống đáng tin cậy được kiểm soát và quản lý chặt chẽ giúp quản lý lỗi được an toàn hơn
7. Các thông tin về xử lý lỗi cần ghi lại cả thông tin về các events thành công và thất bại
- Việc này giúp đảm bảo tất cả các sự kiện được giám sát chặt chẽ và có thể tiến hành truy vết khi có vấn đề xảy ra
8. Đảm bảo log chứa dữ liệu những event quan trọng
- Log phải chứa thông tin: thời gian xảy ra sự kiện, mức độ nghiêm trọng cho từng sự kiện, tag cho từng event, thông tin tài khoản thực hiện event, source ip, dest ip, mô tả sự kiện...
9. Đảm bảo đầuvào log chứa các dữ liệu chưa được validate sẽ không được thực thi như mã thực thi trên server.
- Điều này tránh các lỗi liên quan đến thực thi lệnh tùy ý trên server thông qua việc chèn dữ liệu độc hại ở trường của http header request.
10. Chỉ giới hạn quyền truy cập vào log cho các user được cấp quyền
- Điều này tránh các truy cập trái phép tới server chứa thông tin log của những user không có quyền hay kẻ tấn công
11. Sử dụng một quy trình tập trung cho tất cả các log
- Giúp việc quản lý log được thực hiện một cách nhất quán và hiệu quả
12. Không lưu trữ thông tin nhạy cảm trong log, bao gồm các chi tiết hệ thống không cần thiết, thông tin phiên bản phần mềm hoặc mật khẩu người dùng
- Các thông tin nhạy cảm này không nên lưu trữ tránh trường hợp file log bị truy cập trái phép có thể dẫn tới lộ thông tin nhạy cảm
13. Đảm bảo rằng có hệ thống phân tích lỗi
- Lỗi được lưu lại cần có hệ thống xử lý và phân tích lỗi
14. Log cần ghi lại tất cả các sự kiện quan trọng như sau
- Ghi lại tất cả các lỗi xác thực đầu vào
- Ghi lại tất cả các lần xác thực, đặc biệt là các lần thất bại
- Ghi lại tất cả các lỗi kiểm soát truy cập
- Ghi lại tất cả các sự kiện giả mạo rõ ràng, bao gồm cả những thay đổi bất ngờ đối với dữ liệu trạng thái
- Ghi log toàn bộ sự kiện cố gắng đăng nhập nhiều lần (brute force) hoặc phiên làm việc hết hạn
- Ghi nhật ký tất cả các ngoại lệ của hệ thống
- Ghi nhật ký tất cả các chức năng quản trị, bao gồm cả các thay đổi đối với cài đặt cấu hình bảo mật
- Ghi lại tất cả các lỗi kết nối TLS phụ trợ
- Ghi lại lỗi mô-đun mật mã ghi nhật ký
15. Sử dụng hàm băm để mã hóa giúp xác thực tính toàn vẹn của các file log
- Sử dụng hàm băm MD5 để kiểm tra tính toàn vẹ của file log giúp tránh các truy cập sửa đổi trái phép
- Thực hiện phân quyền tài khoản theo đúng chắc năng giúp hạn chế các truy cập trái phép hoặc nhầm lẫn gây thất thoát dữ liệu
- Thông tin được lưu trữ trong cache hay bộ nhớ tạm cần được xử lý đúng tránh việc lộ lọt thông tin khi các dữ liệu này bị truy cập trái phép từ kẻ tấn công thông qua cac hình thức tấn công nhằm đọc dữ liệu trong bộ nhớ cache
- Thông tin lưu trữ được mã hóa giúp chống lại việc đọc dễ dàng các dữ liệu này nếu có sự cố về lộ lọt thông tin. Việc sử dụng thuật toán mã hóa cũng cần lưu ý sử dụng thuật toán mã hóa mạnh, tránh việc sử dụng các thuật toán mã hóa tự viết.
- Thực hiện bảo vệ mã nguồn bằng việc phân quyền thư mục mã nguồn, tắt directory listing, không để lộ source code và đường dẫn lưu trữ source code.
- Điều này bao gồm việc nhúng vào các định dạng không an toàn như: MS viewstate, Adobe flash hoặc mã biên dịch
- Các đoạn comments có thể chứa thông tin truy cập của người dùng hay database hoặc có thể tiết lộ các thông tin nhạy cảm khác của hệ thống
- Điều này có thể giúp hạn chế tiết lộ thông tin hữu ích cho những kẻ tấn công có thể thu thập thông tin cũng như tránh việc tấn công vào những hệ thống được bảo vệ kém do chúng ta không sử dụng nên ít quan tâm tới.
- Thông tin nhạy cảm bao gồm: username, password, token, session_id, key... Vì các thông tin này có thể bị ghi lại dễ dàng trong file log dẫn đến lộ lọt các thông tin nhạy cảm
- Khuyến cáo này giúp hạn chế nguy cơ về lộ lọt thông tin liên quan đến người dùng khi người dùng lưu trữ thông tin đăng nhập trên trình duyệt.
- Khuyến nghị thiết lập: Cache-Control: no-store trong HTTP header
- Ví dụ nếu thông tin về tài chính, thông tin cá nhân trên các website cần được loại bỏ nếu sau một thời gian người dùng không tương tác trên hệ thống (> 1 năm)
- Điều này bao gồm dữ liệu, tệp tạm thời và dữ liệu mà chỉ người dùng hệ thống cụ thể mới có thể truy cập được.
Nhận xét
Đăng nhận xét