API Misuse Detection Là Gì?
Mục tiêu cuối cùng của các công cụ phân tích động mà chúng ta sẽ giải quyết là lỗi API. API có mặt ở khắp mọi nơi và ngày càng trở nên phổ biến. Về cơ bản, API được tạo trong các chức năng từ xa có thể chia sẻ được. Hệ điều hành cung cấp hầu hết tất cả các dịch vụ của nó thông qua các API, cũng như các mạng, Web và hầu hết các dịch vụ từ xa. Nếu chúng ta cần mở một tệp, phân bổ một số bộ nhớ, nghe bàn phím hoặc thiết bị bên ngoài, đặt thứ gì đó lên màn hình hoặc giám sát chuột, chúng ta cần gọi đúng API theo đúng thứ tự và với các đối số chính xác. Các đối tượng COM/DCOM trong Windows, ODBC và hầu hết các cấu trúc phần mềm trung gian, ổ cắm và đồng bộ hóa: tất cả đều phụ thuộc vào việc sử dụng API.
Phát hiện lạm dụng API – API Misuse Detection là một quy trình hoặc công cụ trong phân tích source code và kiểm thử phần mềm nhằm xác định các trường hợp trong đó một ứng dụng hoặc chương trình sử dụng API một cách không đúng cách hoặc không tuân theo các quy tắc và hướng dẫn của nó.
Các Loại Lỗi API Misuse
Khi một ứng dụng sử dụng API, nó phải tuân theo các quy tắc và giao thức đã định sẵn để đảm bảo tính tin cậy và an toàn của hệ thống. API Misuse Detection giúp phát hiện và ngăn chặn các hành vi lạm dụng API, bao gồm:
- Sử dụng sai mục đích: Khi một API được sử dụng cho một mục đích không phải là mục đích ban đầu của nó, điều này có thể gây ra các lỗi hoặc vấn đề bảo mật.
- Thiếu hoặc sai tham số: Khi một hàm API được gọi thiếu hoặc sai tham số, có thể gây ra lỗi thực thi hoặc hoạt động không đúng.
- Lập trình không an toàn: Khi không tuân thủ các quy tắc an toàn trong việc sử dụng API. Ví dụ như không kiểm tra dữ liệu đầu vào hoặc không xử lý lỗi một cách đúng cách.
- Lạm dụng quyền truy cập: Khi ứng dụng sử dụng API để truy cập dữ liệu hoặc tài nguyên mà nó không được phép truy cập.
API Misuse Detection thường được thực hiện bằng cách sử dụng các công cụ tự động hoặc kiểm thử thủ công để tìm kiếm các tình huống lạm dụng API trong source code của chương trình. Điều này giúp đảm bảo rằng ứng dụng sử dụng API một cách đúng đắn, tăng tính đáng tin cậy và bảo mật của hệ thống.
Ví Dụ Về Lỗi API Misuse
Với rất nhiều chức năng của hệ thống làm việc được cung cấp bởi các thực thể khác thông qua API, khả năng thất bại là vô tận. Thông thường, nhiều API được gọi sẽ bị trình biên dịch ẩn. Cùng mình xem xét tình huống dưới đây.
Ở hầu hết các ngôn ngữ lập trình, để mở một tệp được lưu trữ để đọc nó, đều có một hàm đơn giản là OpenFile(). Tuy nhiên, những gì trình biên dịch tạo ra là một số lệnh gọi API tới hệ điều hành để thực sự thực hiện công việc. Lý tưởng nhất là trình biên dịch tạo ra code hợp lý để thực hiện cuộc gọi theo cách chính xác. Theo quy định, lệnh gọi OpenFile() sẽ trả về mã lỗi nếu có bất kỳ vấn đề nào trong quá trình thực thi tác vụ.
Lỗi API thường không được hiển thị rõ ràng cho người dùng hệ thống. Thay vào đó, lỗi sẽ được trả về hệ thống gọi (calling system), thường dưới dạng giá trị mã trả về. Nếu lập trình viên không đánh giá mã trả về thì lỗi sẽ không được chú ý. Vì vậy, nếu lập trình viên của chúng ta không xử lý giá trị trả về của OpenFile(), lỗi mở tệp không chính xác có thể không được phát hiện ngay lập tức. Thật không may, lỗi không xuất hiện toàn cục không có nghĩa là nó không xảy ra. Đã xảy ra sự cố như mong đợi trong trường hợp này, tệp không mở đúng cách và hậu quả của lỗi đó có xu hướng ngày càng lớn.
Thông thường, hiện tượng do người dùng phát hiện tại một thời điểm nhất định có thể do một lỗi API đơn giản xảy ra trong hàng tỷ chu kỳ máy tính trong quá khứ. Việc theo dõi những thất bại như thế này rất tốn thời gian và có thể cả sự khó chịu. Các công cụ phân tích động hoạt động bằng cách nắm bắt lệnh gọi API trước khi nó thực thi và kiểm tra các đối số đã cho dựa trên danh sách tham số dự kiến. Tương tự như vậy, thứ tự của các lệnh gọi API liên quan đều được giám sát. Khi phát hiện vi phạm các quy tắc nhất định, hệ thống có thể ghi lại sự bất thường hoặc trong một số trường hợp, dừng thực thi ngay lập tức.
Rõ ràng, mức độ tương tác này với chương trình đang chạy làm hệ thống chậm đi khá nhiều. Hầu hết các công cụ mà chúng ta đã sử dụng đều cho phép người dùng giới hạn phạm vi nội dung đang được theo dõi. Điều này cho phép họ công cụ tinh chỉnh nó khi cần thiết.
Mình xin kết thúc bài chia sẻ hôm nay tại đây. Hẹn gặp lại các bạn trong các bài viết tiếp theo.
Happy Testing!