Một dự án gia công phần mềm đã bộc lộ những nguy hiểm của các giải pháp bảo mật tự chế khi một đội phát triển hải ngoại tạo ra hệ thống bảo vệ chống SQL injection riêng mà vô tình chặn người dùng có một số tên phổ biến. Sự cố này làm nổi bật mối lo ngại ngày càng tăng về chất lượng và rủi ro bảo mật liên quan đến công việc phát triển offshore.
Cách Tiếp Cận Bảo Mật Có Lỗ Hổng
Thay vì tuân theo các thực hành tiêu chuẩn ngành để ngăn chặn các cuộc tấn công SQL injection, đội ngũ hải ngoại đã phát triển một hệ thống lọc tùy chỉnh quét đầu vào của người dùng để tìm các từ khóa SQL đáng ngờ. Giải pháp của họ chặn bất kỳ văn bản nào chứa các từ như select, update, delete, và quan trọng là set - điều này giải thích tại sao người dùng tên Seth không thể sử dụng hệ thống. Tương tự, Amanda và George bị chặn vì tên của họ chứa and và or tương ứng, cả hai đều là toán tử SQL phổ biến mà bộ lọc đánh dấu là nguy hiểm.
SQL injection là một loại tấn công mạng trong đó mã độc được chèn vào các truy vấn cơ sở dữ liệu thông qua các trường đầu vào của người dùng.
Tên bị chặn và lý do:
- Seth → Chứa "set" (từ khóa SQL)
- Amanda → Chứa "and" (toán tử SQL)
- George → Chứa "or" (toán tử SQL)
Tại Sao Giải Pháp Đúng Đắn Quan Trọng
Cộng đồng phát triển nhấn mạnh rằng loại lọc dựa trên từ khóa này thể hiện sự hiểu lầm cơ bản về các nguyên tắc bảo mật. Các ứng dụng hiện đại nên sử dụng các câu lệnh tham số hóa hoặc truy vấn đã chuẩn bị, điều này tách biệt hoàn toàn dữ liệu người dùng khỏi các lệnh SQL. Cách tiếp cận này loại bỏ nhu cầu lọc phức tạp trong khi cung cấp khả năng bảo vệ mạnh mẽ hơn nhiều chống lại các cuộc tấn công.
Cách tiếp cận bộ lọc tùy chỉnh thể hiện điều mà các chuyên gia bảo mật gọi là sửa chữa từ bên ngoài thay vì giải quyết nguyên nhân gốc rễ. Điều này tạo ra cảm giác an toàn giả tạo trong khi đưa ra những vấn đề mới, như được chứng minh bởi sự phân biệt đối xử với người dùng có một số tên nhất định.
Các từ khóa SQL bị lọc bởi hệ thống có lỗ hổng:
- Các thao tác cơ sở dữ liệu: create, database, table, insert, update, delete, drop, truncate
- Các thao tác truy vấn: select, where, or, and, values, set
- Các thao tác khác: rename, replace, handler
Chi Phí Ẩn Của Phát Triển Giá Rẻ
Trường hợp nghiên cứu này phản ánh các vấn đề rộng lớn hơn với việc thuê ngoài công việc phát triển chủ yếu dựa trên tiết kiệm chi phí. Trong khi đội ngũ hải ngoại tính phí ít hơn một nửa mức giá theo giờ của các nhà phát triển nội bộ, cuối cùng họ lại tính phí nhiều hơn ba lần số giờ ước tính. Dự án đòi hỏi công việc bổ sung rộng rãi từ đội phát triển ban đầu để xác định và khắc phục các vấn đề.
Kẻ keo kiệt phải trả gấp đôi. Tôi nghi ngờ rằng chi phí của dự án 'hải ngoại' này có thể dễ dàng tốn 20 lần mức giá niêm yết thấp, thấp đó.
Sự cố này nhấn mạnh rằng thuê ngoài thành công đòi hỏi nhiều hơn chỉ mức giá theo giờ thấp hơn. Nó đòi hỏi giao tiếp rõ ràng, giám sát kỹ thuật phù hợp, và các nhà phát triển hiểu các nguyên tắc bảo mật cơ bản. Khi thiếu những yếu tố này, việc tiết kiệm chi phí được cho là có thể nhanh chóng biến thành những thất bại đắt đỏ đòi hỏi phải làm lại hoàn toàn.
Tác động chi phí dự án:
- Mức giá theo giờ ở nước ngoài: Ít hơn 50% so với các lập trình viên nội bộ
- Hóa đơn thực tế: Gấp 3 lần số giờ ước tính
- Giải pháp cuối cùng: Yêu cầu sự can thiệp của đội ngũ nội bộ
Bài Học Cho Các Dự Án Tương Lai
Câu chuyện này phục vụ như một lời nhắc nhở rằng bảo mật không thể là điều được nghĩ đến sau hoặc thứ gì đó để được ứng biến. Cho dù làm việc với đội ngũ nội bộ hay nhà thầu bên ngoài, các tổ chức cần đảm bảo rằng các thực hành bảo mật cơ bản được hiểu và thực hiện đúng cách từ đầu. Chi phí khắc phục các vấn đề bảo mật sau này - cả về mặt tiền bạc và trải nghiệm người dùng - vượt xa khoản đầu tư để làm đúng từ ban đầu.
Tham khảo: INJECTION REJECTION