Lời Mở Đầu
Trong thế giới Internet ngày nay, nơi luồng thông tin và dữ liệu giữa các ứng dụng được trao đổi liên tục, cùng với sự phát triển của kiến trúc microservice và serverless, hầu hết mọi ứng dụng đều xây dựng API cho các chức năng cơ bản. Điều này làm cho bảo mật API trở thành một phần cốt lõi của bảo mật thông tin hiện đại.
Nhiều vi phạm liên quan đến API đa phần không đến từ những kẻ tấn công tinh vi, mà nguyên nhân chính xuất phát từ việc thiết kế và triển khai API không đúng cách. Do đó, đây là lúc việc kiểm thử bảo mật API trở nên cần thiết để đảm bảo tính bảo mật, tính toàn vẹn và tính khả dụng của dữ liệu và các tài nguyên nhạy cảm.
Tổng Quan
Khái niệm Kiểm thử Bảo mật API
Ngày nay, API được sử dụng rất phổ biến và cho phép truy cập vào các chức năng, cũng như các dữ liệu phần mềm nhạy cảm nên API đang trở thành mục tiêu chính của những kẻ tấn công. Bảo mật API là quá trình bảo vệ API khỏi các cuộc tấn công.
Trong đó, kiểm thử bảo mật API là một thành phần quan trọng đảm bảo hoạt động của API trước các rủi ro bảo mật. Bao gồm việc đánh giá một cách có hệ thống các API để tìm ra các lỗ hổng tiềm ẩn và triển khai các biện pháp để bảo vệ khỏi các truy cập trái phép, vi phạm dữ liệu, tấn công tiêm nhiễm (injection) và các rủi ro bảo mật khác.
Việc kiểm thử bảo mật API cách toàn diện trở nên cần thiết hơn bao giờ hết, đảm bảo API phù hợp với các thông số kỹ thuật đã công bố và có khả năng phục hồi trước các cuộc tấn công và đầu vào độc hại.
Tầm quan trọng của Kiểm thử Bảo mật API
Bảo mật API liên quan đến việc bảo mật dữ liệu được truyền qua API, thường là giữa máy khách và máy chủ được kết nối qua mạng. API bị xâm phạm, bị lộ hoặc bị tấn công có thể làm lộ dữ liệu cá nhân, thông tin tài chính hoặc các dữ liệu nhạy cảm khác của doanh nghiệp. Do đó, bảo mật API là yếu tố quan trọng cần cân nhắc khi thiết kế và phát triển phần mềm.
Ví dụ: Một cuộc tấn công từ chối dịch vụ (DoS) có thể khiến điểm cuối API (endpoint) giảm đáng kể hiệu suất. Những kẻ tấn công có thể lạm dụng để lấy cắp dữ liệu hoặc vượt quá giới hạn sử dụng. Tinh vi hơn chúng có thể tiêm mã độc để thực hiện các hoạt động trái phép hoặc xâm phạm đến phần backend.
Các Lỗ Hổng Bảo Mật API Phổ Biến
Nhằm cung cấp cái nhìn bao quát và hiệu quả về kiểm thử bảo mật cho API, các nhà phát triển cần nắm rõ về các lỗ hổng thường gặp trong API. Dưới đây là 10 mối đe dọa và lỗ hổng bảo mật hàng đầu của API năm 2023 do OWASP cung cấp, với mục đích giúp cho các tổ chức xem xét và tham khảo khi tiến hành kiểm thử bảo mật API.
OWASP Top 10 API Security Risks – 2023
Tên lỗ hổng | Khái niệm | Tác động | Cách ngăn chặn | |
---|---|---|---|---|
API1 | Broken Object Level Authorization | Là một lỗ hổng bảo mật API cho phép kẻ tấn công truy cập các tài nguyên không được phép bằng cách thao túng mã định danh đối tượng. | Các đối tượng (object) có thể bị đọc, sửa hoặc xóa bởi kẻ tấn công không có quyền truy cập. | - Sử dụng các mã định danh đối tượng không thể đoán trước. - Kiểm tra tính hợp lệ và sự tồn tại của tất cả các mã định danh đối tượng được cung cấp bởi người dùng. - Sử dụng các công cụ quét lỗ hổng bảo mật để tìm và khắc phục các lỗ hổng BOLA trong code. |
API2 | Broken Authentication | Là một lỗ hổng bảo mật API cho phép kẻ tấn công xác thực thành công với tư cách là người dùng khác hoặc cấp đặc quyền cho chính mình mà không được phép. | Thông tin đăng nhập của người dùng có thể bị đánh cắp hoặc kẻ tấn công có thể lợi dụng quyền truy cập người dùng. | - Yêu cầu mật khẩu mạnh và sử dụng các hàm băm để lưu trữ mật khẩu một cách an toàn. - Sử dụng xác thực đa yếu tố (MFA) để tăng cường thêm một lớp bảo mật. - Sử dụng các token xác thực ngắn hạn và hết hạn. |
API3 | Broken Object Property Level Authorization | Là một lỗ hổng bảo mật API cho phép kẻ tấn công truy cập các thuộc tính đối tượng mà họ không được phép truy cập, bằng cách thao túng mã định danh đối tượng hoặc các thông số yêu cầu khác. | Thông tin tài khoản của người dùng, chẳng hạn như số điện thoại, địa chỉ email hoặc mật khẩu … có thể bị xem bởi kẻ tấn công. | - Kiểm tra quyền truy cập của người dùng tuỳ vào từng thuộc tính đối tượng trước khi cấp quyền truy cập. - Cấp cho người dùng quyền truy cập vào các thuộc tính đối tượng cụ thể. - Kiểm soát quyền truy cập vào các thuộc tính đối tượng cụ thể. |
API4 | Unrestricted Resource Consumption | Là một lỗ hổng bảo mật API cho phép kẻ tấn công sử dụng quá mức các tài nguyên của hệ thống hoặc ứng dụng, chẳng hạn như CPU, bộ nhớ, băng thông mạng hoặc dung lượng lưu trữ. | Dẫn đến việc hệ thống bị gián đoạn hoặc ứng dụng bị chậm, nặng hơn là ngừng hoạt động hoàn toàn, ảnh hưởng đến tất cả người dùng. | - Sử dụng các giới hạn tài nguyên (resource limit) để giới hạn lượng tài nguyên mà người dùng có thể sử dụng cho mỗi request. - Sử dụng các giới hạn tỷ lệ (rate limit) để giới hạn số lượng request mà người dùng có thể gửi trong một khoảng thời gian nhất định. |
API5 | Broken Function Level Authorization | Là một lỗ hổng bảo mật API cho phép kẻ tấn công thực hiện các chức năng không được phép thực hiện. | Ví dụ, một ứng dụng có một API endpoint cho phép người dùng tạo tài khoản mới. Kẻ tấn công có thể thao túng các request để gọi API endpoint với quyền truy cập nâng cao, và có thể tạo tài khoản quản trị viên mới. | - Kiểm tra đúng cách quyền truy cập của người dùng vào các chức năng trước khi cấp quyền truy cập. - Cấp cho người dùng quyền truy cập vào các chức năng cụ thể. |
API6 | Unrestricted Access to Sensitive Business Flows | Là một lỗ hổng bảo mật API cho phép kẻ tấn công có quyền truy cập không giới hạn vào các quy trình (flows) kinh doanh nhạy cảm trong hệ thống, mà không có các biện pháp kiểm soát hoặc giới hạn phù hợp. | - Các quy trình kinh doanh nhạy cảm có thể bao gồm việc xử lý và truy cập thông tin nhạy cảm của khách hàng, giao dịch tài chính quan trọng, hay các hoạt động quản lý quan trọng. - Nguy cơ lộ thông tin nhạy cảm, gian lận hay tác động tiêu cực đến hoạt động kinh doanh của hệ thống tăng lên nếu kẻ tấn công có quyền truy cập không giới hạn vào các quy trình này. |
- Kiểm tra quyền truy cập của người dùng vào từng quy trình kinh doanh trước khi cấp quyền truy cập. - Kiểm soát quyền truy cập vào các quy trình kinh doanh cụ thể. |
API7 | Server Side Request Forgery | Là một lỗ hổng bảo mật API cho phép kẻ tấn công tấn công các hệ thống nội bộ của ứng dụng bằng cách lừa ứng dụng thực hiện các yêu cầu HTTP đến các máy chủ khác. | - Kẻ tấn công có thể thao tác trên dữ liệu một cách trái phép, chẳng hạn như xóa tài khoản, sửa đổi dữ liệu hoặc chuyển tiền. - Thực thi mã tùy ý trên máy chủ ứng dụng, chẳng hạn như cài đặt phần mềm độc hại hoặc chiếm quyền điều khiển máy chủ. |
- Chỉ cho phép người dùng cung cấp các URL từ một white list các URL được phê duyệt. - Sử dụng các biểu thức chính quy để xác nhận rằng các URL được cung cấp có định dạng hợp lệ. - Chặn các URL trỏ đến các địa chỉ IP nội bộ. |
API8 | Security Misconfiguration | Là một lỗ hổng bảo mật API có thể xảy ra khi ứng dụng được cấu hình không đúng cách. | - Làm lộ dữ liệu nhạy cảm, chẳng hạn như thông tin cá nhân, thông tin tài chính hoặc bí mật thương mại. - Gián đoạn dịch vụ, chẳng hạn như bằng cách khiến hệ thống hoặc ứng dụng bị chậm hoặc ngừng hoạt động hoàn toàn. |
- Sử dụng các cấu hình an toàn mặc định. - Cấu hình ứng dụng đúng cách và theo dõi các thay đổi cấu hình. - Giữ cho phần mềm được cập nhật lên phiên bản mới nhất. |
API9 | Improper Inventory Management | Là một lỗ hổng bảo mật API có thể xảy ra khi các tổ chức không có một danh mục toàn diện và chính xác về các API. | Làm cho API không được bảo mật đúng cách, gây ra tình trạng outdate API (API bị lỗi thời) vì các tổ chức không thể theo dõi và cập nhật tức thời. | - Sử dụng quy trình phát triển an toàn để thiết kế và phát triển các API. - Thực hiện đánh giá bảo mật thường xuyên cho các API. |
API10 | Unsafe Consumption of APIs | Là một lỗ hổng bảo mật API có thể xảy ra khi API được sử dụng một cách không an toàn, không đảm bảo bảo mật và kiểm soát đúng đắn. | - Làm lộ dữ liệu nhạy cảm. - Thao tác dữ liệu trái phép, chẳng hạn như xóa tài khoản, sửa đổi dữ liệu hoặc chuyển tiền. |
- Xác thực và phân quyền đúng cách khi sử dụng API. - Kiểm tra dữ liệu đầu vào một cách cẩn thận. - Xử lý lỗi một cách cẩn thận. - Sử dụng các thư viện và framework được thiết kế để bảo vệ chống lại UCA. |
Danh sách trên có khá nhiều sự thay đổi so với năm 2019. Hãy cùng nhìn lại xu hướng của năm 2023 khác biệt như thế nào qua sự so sánh sau:
- Ta thấy rõ ràng xu hướng của kiểm thử bảo mật API đã thay đổi rất nhanh chóng, Broken Object Level Authorization (BOLA) đã được nâng lên vị trí hàng đầu, thay thế cho Broken Authentication. Việc nâng BOLA lên vị trí hàng đầu cho thấy tầm quan trọng của việc bảo vệ quyền truy cập vào các đối tượng API.
- Broken Object Property Level Authorization (BOPLA) đã được thêm vào danh sách, kết hợp hai lỗ hổng cũ là Excessive Data Exposure và Mass Assignment. Việc thêm BOPLA vào danh sách cho thấy tầm quan trọng của việc kiểm soát quyền truy cập vào các thuộc tính của đối tượng API.
- Thêm ba lỗ hổng mới đó là: Unrestricted Access to Sensitive Business Flows, Server Side Request Forgery và Unsafe Consumption of APIs.
- Có thể nói tấn công tiêm nhiễm (Injection) và Insufficient Logging and Monitoring không còn nằm trong Top 10, nhưng không vì thế mà bỏ qua các lỗ hổng này.
Tiến hành Kiểm thử Bảo Mật API
Các bước Kiểm thử Bảo mật API
Khi tầm quan trọng của bảo mật API tiếp tục tăng lên một cách mạnh mẽ, các tổ chức cần phải tiến hành kiểm thử bảo mật toàn diện và có hệ thống để xác định các lỗ hổng và giảm thiểu rủi ro. Sau đây là các bước cần thực hiện khi triển khai kiểm thử bảo mật API:
Bước 1. Hiểu các Điểm cuối API
Điểm cuối đóng vai trò là điểm tương tác với API. Để tiến hành kiểm thử bảo mật hiệu quả, cần xác định được các vấn đề sau:
- Xác định điểm cuối API: Xác định và ghi lại tất cả các điểm cuối API. Phân loại chúng dựa trên chức năng, độ nhạy cảm và các rủi ro bảo mật tiềm ẩn.
- Xác định các điểm cuối và Lỗ hổng nhạy cảm: Xác định điểm cuối nào xử lý các dữ liệu nhạy cảm, thực hiện các hoạt động quan trọng hoặc liên quan đến xác thực người dùng. Những điểm cuối này có thể dễ dàng mắc phải các lỗ hổng bảo mật hơn và cần yêu cầu kiểm tra nghiêm ngặt.
- Tổng hợp các điểm cuối: Tạo bản đồ toàn diện về các điểm cuối API, bao gồm các loại yêu cầu và phản hồi, hành vi dự kiến và các biện pháp kiểm soát bảo mật liên quan. Bản đồ này sẽ dùng làm tài liệu tham khảo trong quá trình kiểm thử để đảm bảo phạm vi được bao phủ toàn diện.
Bước 2. Kiểm tra Xác thực (Authentication) và Uỷ quyền (Authorization)
Cơ chế xác thực và ủy quyền đóng một vai trò quan trọng trong việc bảo mật API. Khi thực hiện kiểm thử, hãy xem xét những điều sau:
- Đánh giá hiệu quả xác thực: Đánh giá sức mạnh và hiệu quả của các cơ chế xác thực, chẳng hạn như API key, các mã token hoặc xác thực đa yếu tố. Hãy đảm bảo rằng chỉ những người dùng đã được xác thực mới có thể truy cập các tài nguyên được bảo vệ.
- Kiểm tra các biện pháp kiểm soát ủy quyền: Mục đích là đảm bảo chỉ những người dùng hoặc vai trò được ủy quyền mới có thể thực hiện các hành động cụ thể. Hãy chú ý đến các rủi ro leo thang đặc quyền, chẳng hạn như bỏ qua kiểm tra ủy quyền hoặc truy cập trái phép vào dữ liệu nhạy cảm.
- Kiểm tra các biện pháp kiểm soát truy cập không đúng cách: Xác định các rủi ro tiềm ẩn từ việc cấu hình bảo mật sai cách hoặc các biện pháp kiểm soát truy cập không phù hợp, điều này có thể cho phép kẻ tấn công truy cập trái phép vào các hoạt động hoặc các điểm cuối nhạy cảm. Hãy kiểm tra kỹ lưỡng các quy tắc và các cấu hình kiểm soát việc truy cập.
Bước 3. Kiểm tra Đầu vào và tính toàn vẹn dữ liệu
Xác thực đầu vào phù hợp là việc rất cấp thiết để ngăn chặn các cuộc tấn công tiêm nhiễm và duy trì tính toàn vẹn dữ liệu. Vì thế trong quá trình kiểm thử, hãy thực hiện các việc sau:
- Phân tích các kỹ thuật xác thực đầu vào: Đánh giá cách API xử lý các xác thực đầu vào để ngăn chặn các lỗ hổng phổ biến như tấn công XSS, SQL Injection hoặc XXE.
- Đảm bảo tính toàn vẹn dữ liệu: Đảm bảo rằng API thực hiện xác thực, làm sạch (sanitization) và mã hóa dữ liệu do người dùng cung cấp đúng cách, để ngăn ngừa hư hỏng hoặc giả mạo dữ liệu. Xác thực tính toàn vẹn của dữ liệu được truyền giữa máy khách và máy chủ.
- Kiểm tra các rủi ro làm rò rỉ và lộ dữ liệu: Xác định các rủi ro rò rỉ dữ liệu tiềm ẩn, chẳng hạn như vô tình tiết lộ thông tin nhạy cảm trong phần phản hồi hoặc thông báo lỗi.
Bước 4. Xử lý lỗi và quản lý ngoại lệ
Xử lý lỗi và quản lý ngoại lệ thích hợp sẽ cải thiện tính bảo mật và độ mạnh mẽ tổng thể của API.
- Đánh giá cơ chế xử lý lỗi: Đánh giá cách API xử lý lỗi và ngoại lệ. Kiểm tra mã lỗi thích hợp, thông báo mang tính thông tin và cách ghi log thích hợp.
- Kiểm tra lỗ hổng tiết lộ thông tin: Tìm kiếm các lỗ hổng tiềm ẩn liên quan đến việc tiết lộ thông tin trong phần phản hồi lỗi hoặc các dấu vết ngăn xếp (stack trace). Đảm bảo rằng các thông báo lỗi không tiết lộ thông tin nhạy cảm có thể hỗ trợ cho những kẻ tấn công.
- Đánh giá việc quản lý ngoại lệ: Đánh giá cách API xử lý các tình huống không mong muốn, chẳng hạn như các trường hợp ngoại lệ chưa được xử lý hoặc các cuộc tấn công từ chối dịch vụ. Xác minh rằng API xử lý các trường hợp ngoại lệ một cách hợp lý và không để lộ các lỗ hổng hệ thống.
Bước 5. Xác định Giới hạn
Để bảo vệ API khỏi các cuộc tấn công từ chối dịch vụ, cần xây dựng các quy tắc về việc hạn chế và điều tiết tốc độ truy cập:
- Hiểu được tầm quan trọng của việc giới hạn tỷ lệ (rate limit): Là để ngăn chặn tình trạng lạm dụng, tấn công brute-force hoặc các tình huống DoS.
- Kiểm tra việc vượt qua (bypass) giới hạn tỷ lệ: Cố gắng vượt qua giới hạn và xác minh xem API có thực thi chúng một cách nhất quán hay không. Kiểm tra các lỗ hổng tiềm ẩn cho phép kẻ tấn công phá vỡ các giới hạn và làm hệ thống quá tải.
- Kiểm tra tính hiệu quả của các cơ chế giới hạn tỷ lệ: Kiểm tra API trong các điều kiện tải khác nhau để đảm bảo rằng cơ chế điều chỉnh và giới hạn tỷ lệ hoạt động như mong đợi. Đo lường thời gian phản hồi và độ ổn định của API khi có lưu lượng truy cập lớn.
Bước 6. Tự động hoá Kiểm thử Bảo mật API
Tận dụng các kỹ thuật tự động hóa cho việc kiểm thử bảo mật API nhằm tối đa hóa hiệu quả và phạm vi bao phủ.
- Khám phá các kỹ thuật để xác định và ngăn chặn việc lạm dụng API: Tìm hiểu về các kịch bản lạm dụng API phổ biến, chẳng hạn như giả mạo tham số, tấn công lặp lại (replay) hoặc lộ các API key. Phát triển và cập nhật bộ test case để tăng cường bao phủ và giảm thiểu những rủi ro này.
- Triển khai việc kiểm thử bảo mật tự động: Sử dụng các công cụ và framework tự động, chẳng hạn như OWASP ZAP hoặc Burp Suite, để thực hiện kiểm thử bảo mật một cách hiệu quả. Tự động quét các lỗ hổng, kiểm tra fuzzing và kiểm tra các thiết lập bảo mật để đạt được mức độ bao phủ toàn diện.
Một vài kỹ thuật Kiểm thử Bảo mật API
Ở phần tiếp theo của loạt bài về API Security Testing, chúng ta sẽ cùng nhau tiếp tục tìm hiểu về một vài kỹ thuật kiểm thử bảo mật cho API, cũng như checklist cho việc kiểm thử này.
Hãy cùng chờ đợi phần 2 sẽ ra mắt sớm nhất có thể nhé!
Tài Liệu Tham Khảo
What Is API Security Testing and How Does It Work? | Synopsys
OWASP Top 10 API Security Risks – 2023 - OWASP API Security Top 10