Union SQL Injection: Cách hoạt động và biện pháp phòng ngừa

Union SQL Injection là gì? Tìm hiểu về định nghĩa, cách thức tấn công, tác hại, các biện pháp phòng chống hiệu quả nhất.

Union SQL Injection: Cách hoạt động và biện pháp phòng ngừaLink to heading

Trong danh sách những mối đe dọa nguy hiểm nhất đối với website, Union SQL Injection là một cái tên quen thuộc nhưng không kém phần đáng sợ. Đây là kỹ thuật tấn công nằm trong nhóm SQL Injection – lỗ hổng bảo mật phổ biến đã khiến hàng triệu dữ liệu người dùng bị rò rỉ trong những năm qua. Với cơ chế khai thác thông qua toán tử UNION trong câu lệnh SQL, hacker có thể dễ dàng truy xuất trái phép dữ liệu từ cơ sở dữ liệu. 

Trong bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết Union SQL Injection là gì, cách hoạt động, dấu hiệu nhận biết cũng như các biện pháp phòng tránh cần thiết để bảo vệ hệ thống của bạn khỏi nguy cơ bị xâm nhập.

Union SQL Injection là gì?Link to heading

Union SQL Injection là một kỹ thuật mà kẻ tấn công thao túng câu truy vấn SQL của ứng dụng bằng cách chèn thêm một câu lệnh UNION. Điều này cho phép chúng kết hợp kết quả của truy vấn độc hại với truy vấn hợp lệ của ứng dụng, từ đó trích xuất được các dữ liệu nhạy cảm như tên người dùng, mật khẩu hoặc thông tin thẻ tín dụng.

Toán tử UNION trong SQL được dùng để kết hợp kết quả của hai hoặc nhiều câu lệnh SELECT, với điều kiện các truy vấn này có cùng số lượng cột và kiểu dữ liệu tương ứng. Kẻ tấn công lợi dụng đặc điểm này để nối truy vấn của chúng và truy xuất các thông tin ẩn trong cơ sở dữ liệu.

>>> Có thể bạn quan tâm: Error Based SQL Injection là gì? 5 Biện pháp phòng ngừa

Cách thức hoạt động của Union SQL InjectionLink to heading

Các cơ sở dữ liệu SQL sử dụng toán tử UNION để kết hợp kết quả từ nhiều truy vấn thành một tập dữ liệu duy nhất. Điều này đặc biệt hữu ích khi cần truy xuất dữ liệu tương tự từ các bảng khác nhau.

SELECT column1, column2 FROM table1

UNION

SELECT column1, column2 FROM table2;

Đây là một cách sử dụng hợp lệ của UNION. Tuy nhiên, kẻ tấn công có thể lợi dụng điều này bằng cách chèn thêm các truy vấn SQL độc hại vào câu truy vấn gốc của ứng dụng nhằm thao túng quá trình truy xuất dữ liệu.

Kẻ tấn công thường thao túng các trường nhập liệu trong ứng dụng web để chèn các truy vấn SQL độc hại sử dụng toán tử UNION. Kỹ thuật này cho phép chúng trích xuất dữ liệu nhạy cảm bằng cách thêm các truy vấn bổ sung vào truy vấn hiện có.

Ví dụ, một website có trang đăng nhập yêu cầu người dùng nhập tên đăng nhập và mật khẩu. Ở phía máy chủ, hệ thống sẽ thực thi câu truy vấn SQL như sau để xác thực thông tin đăng nhập:

SELECT id, username FROM users WHERE username = 'admin' AND password = 'password123';

Tuy nhiên, thay vì nhập một tên đăng nhập hợp lệ, kẻ tấn công nhập:

' UNION SELECT id, username, password FROM users --

Lúc này, câu truy vấn sẽ trở thành:

SELECT id, username FROM users WHERE username = ''

UNION SELECT id, username, password FROM users -- ' AND password = 'password123';

  • Truy vấn UNION SELECT cho phép kẻ tấn công truy xuất dữ liệu từ bảng users.
  • Dấu -- chú thích phần còn lại của câu truy vấn ban đầu, giúp tránh lỗi cú pháp.
  • Kết quả là toàn bộ tên đăng nhập và mật khẩu trong bảng users sẽ bị lộ ra.

Để một cuộc tấn công dựa trên UNION hoạt động thành công, hai truy vấn phải có cùng số lượng cột và có kiểu dữ liệu tương ứng cho mỗi cột.

Các dấu hiệu nhận biết Union SQL InjectionLink to heading

Việc phát hiện sớm các dấu hiệu của Union SQL Injection có thể giúp ngăn chặn kịp thời những cuộc tấn công đánh cắp dữ liệu. Dưới đây là một số dấu hiệu thường gặp khi một website có nguy cơ bị khai thác bằng kỹ thuật này:

Hiển thị dữ liệu bất thường trên giao diệnLink to heading

Một trong những dấu hiệu rõ ràng nhất của Union based SQL Injection là khi website bất ngờ hiển thị dữ liệu không đúng vị trí, hoặc lộ thông tin không nên công khai. Ví dụ:

  • Các bảng dữ liệu chứa thông tin người dùng khác hiển thị ở nơi không liên quan.
  • Dữ liệu xuất hiện chồng chéo, không đúng định dạng.
  • Các trường như tên, email, ID,... xuất hiện bất ngờ sau khi người dùng nhập một chuỗi lạ vào thanh tìm kiếm hoặc form đăng nhập.

Điều này thường xảy ra khi hacker chèn câu lệnh UNION SELECT để kết hợp dữ liệu từ bảng khác vào kết quả trả về của ứng dụng.

Lỗi hiển thị khi nhập ký tự đặc biệtLink to heading

Một ứng dụng web dễ bị Union SQL Injection thường không xử lý tốt đầu vào từ người dùng, đặc biệt là khi người dùng nhập các ký tự như:

  • ' (dấu nháy đơn)
  • -- (comment SQL)
  • /* */ (comment đa dòng)
  • OR 1=1, UNION SELECT, NULL

Nếu khi nhập các ký tự trên vào các trường tìm kiếm, đăng nhập, hoặc URL, bạn thấy lỗi như:

  • SQL syntax error
  • Unclosed quotation mark
  • Invalid number of columns
  • Data type mismatch

Thì có khả năng cao hệ thống chưa được chống SQL Injection đầy đủ và đang bị hacker thử khai thác.

Truy vết qua file log hoặc hệ thống báo lỗiLink to heading

Trong nhiều trường hợp, log server hoặc log ứng dụng sẽ ghi lại các truy vấn bất thường mà hacker thử gửi đến hệ thống. Bạn có thể kiểm tra log để phát hiện các chuỗi lạ như:

  • UNION SELECT
  • OR '1'='1'
  • --
  • NULL, NULL, ...
  • Truy vấn dài bất thường với từ khóa SELECT nhiều lần

Ngoài ra, nếu website đang bật hiển thị lỗi (error reporting), có thể xuất hiện các thông báo chi tiết như:

  • “You have an error in your SQL syntax near 'UNION SELECT...'”

Những thông báo này không chỉ cảnh báo bạn về lỗ hổng, mà còn vô tình giúp hacker tinh chỉnh truy vấn cho chính xác hơn nếu không bị ẩn đi.

Lưu ý: Các dấu hiệu trên không phải lúc nào cũng đồng nghĩa với việc website đã bị tấn công thành công, nhưng chúng là cảnh báo sớm cực kỳ quan trọng để bạn kiểm tra lại toàn bộ hệ thống và tăng cường bảo mật.

Ảnh hưởng nghiêm trọng của Union SQL InjectionLink to heading

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

Union based SQL Injection cho phép kẻ tấn công trích xuất dữ liệu trực tiếp từ cơ sở dữ liệu và hiển thị chúng trên trang web. Điều này có nghĩa là thông tin người dùng như tên, email, số điện thoại, mật khẩu và thậm chí cả thông tin tài chính nhạy cảm hay dữ liệu kinh doanh mật đều có thể bị đánh cắp một cách nhanh chóng và công khai. Tốc độ khai thác cao là một đặc điểm nguy hiểm của loại tấn công này.

Kiểm soát cơ sở dữ liệuLink to heading

Khi kẻ tấn công thành công trong việc thực hiện Union SQL Injection, họ có thể không chỉ đọc mà còn thay đổi, xóa hoặc thêm dữ liệu tùy ý vào cơ sở dữ liệu của bạn. Điều này có thể dẫn đến việc phá hoại toàn bộ dữ liệu quan trọng, làm sai lệch thông tin sản phẩm, đơn hàng hoặc thậm chí là làm tê liệt hoàn toàn hoạt động của website. Khả năng thao túng dữ liệu này là mối đe dọa cực lớn.

Kiểm soát máy chủ webLink to heading

Trong một số trường hợp, nếu cơ sở dữ liệu có đủ quyền và được cấu hình không an toàn, kẻ tấn công có thể sử dụng Union based SQL Injection để chèn mã độc hoặc tạo ra các "backdoor" trên máy chủ web. Điều này cho phép họ thực thi các lệnh từ xa, cài đặt phần mềm độc hại, hoặc biến website của bạn thành một phần của mạng botnet để tấn công các hệ thống khác.

Ảnh hưởng đến uy tín và niềm tinLink to heading

Một cuộc tấn công Union SQL Injection thành công và việc rò rỉ dữ liệu sẽ gây ra thiệt hại nặng nề cho uy tín thương hiệu của bạn. Khách hàng sẽ mất niềm tin vào khả năng bảo mật thông tin của doanh nghiệp, dẫn đến việc họ rời bỏ và tìm đến đối thủ cạnh tranh. Việc khắc phục thiệt hại về hình ảnh và niềm tin thường tốn kém và khó khăn hơn nhiều so với việc sửa chữa kỹ thuật.

Thiệt hại tài chính và pháp lýLink to heading

Hậu quả của Union based SQL Injection thường kéo theo những thiệt hại tài chính đáng kể. Bạn có thể phải đối mặt với chi phí khắc phục lỗ hổng, dọn dẹp mã độc, thuê chuyên gia bảo mật, và bồi thường cho khách hàng bị ảnh hưởng. Ngoài ra, việc rò rỉ dữ liệu cá nhân còn có thể dẫn đến các vấn đề pháp lý nghiêm trọng, bao gồm tiền phạt từ các cơ quan quản lý và các vụ kiện tụng từ phía người dùng.

Các biện pháp phòng ngừa Union SQL Injection hiệu quảLink to heading

Sử dụng Prepared Statements (hoặc Parameterized Queries)Link to heading

Prepared Statements giúp ngăn chặn Union SQL Injection bằng cách đảm bảo rằng dữ liệu người dùng luôn được xử lý như dữ liệu, chứ không phải là mã lệnh SQL. Kỹ thuật này tạo ra sự tách biệt rõ ràng giữa logic truy vấn và dữ liệu đầu vào, khiến kẻ tấn công không thể chèn thêm câu lệnh UNION.

Ví dụ:

cursor.execute("SELECT id, username, email FROM users WHERE id = %s", (user_id,))

Vì cấu trúc truy vấn đã được xác định sẵn, nên kẻ tấn công không thể chỉnh sửa nó để chèn UNION SELECT nhằm lấy thêm dữ liệu.

Triển khai Web Application Firewalls (WAF)Link to heading

WAF (Web Application Firewalls) giúp chặn các cuộc tấn công Union SQL Injection bằng cách lọc các truy vấn SQL độc hại trước khi chúng tới được cơ sở dữ liệu. Các hệ thống WAF tiên tiến sử dụng phân tích hành vi, machine learning và chuẩn hóa truy vấn để nhận diện truy vấn độc hại. Cụ thể, WAF sẽ phân tích các dấu hiệu như:

  • Các truy vấn UNION SELECT cố gắng lấy dữ liệu trái phép.
  • Sự thao túng ORDER BY để xác định số cột trong truy vấn.

Giới hạn quyền truy cập cơ sở dữ liệuLink to heading

Việc giới hạn quyền truy cập giúp giảm thiểu thiệt hại nếu có lỗ hổng bị khai thác. Một số nguyên tắc bạn cần tuân thủ là:

  • Chạy ứng dụng với quyền tối thiểu, chỉ cấp quyền cần thiết.
  • Tránh sử dụng tài khoản quản trị (admin/root) để thực thi truy vấn.
  • Hạn chế quyền sử dụng các lệnh như DROP, ALTER, UNION và SELECT khi không cần thiết.

Với quyền hạn bị giới hạn, khả năng của kẻ tấn công trong việc lấy hoặc thao túng dữ liệu sẽ bị hạn chế đáng kể.

Thực hiện kiểm tra bảo mật thường xuyênLink to heading

Các đợt kiểm tra bảo mật định kỳ giúp phát hiện và vá các lỗ hổng trước khi chúng bị khai thác. Một số phương pháp kiểm tra khuyến nghị:

  • Quét lỗ hổng tự động để phát hiện rủi ro SQL Injection.
  • Kiểm thử xâm nhập mô phỏng các cuộc tấn công thực tế.
  • Rà soát mã nguồn để loại bỏ các truy vấn SQL không an toàn.

Bên cạnh việc bảo vệ cơ sở dữ liệu khỏi Union SQL Injection, bạn cũng nên quét mã độc định kỳ 

Kiểm tra mã độc định kỳLink to heading

Ngoài các lỗ hổng liên quan đến SQL Injection, mã độc cũng là mối đe dọa âm thầm nhưng cực kỳ nguy hiểm với các website, đặc biệt là các website WordPress. Vì vậy, hãy thiết lập lịch quét mã độc định kỳ để sớm phát hiện các đoạn mã lạ và xử lý triệt để trước khi hậu quả xảy ra.

Nếu bạn chưa chắc website của mình có đang bị nhiễm mã độc hay không, hãy kiểm tra bằng công cụ quét mã độc miễn phí của System443.

Kết luậnLink to heading

Union SQL Injection là một trong những kỹ thuật tấn công nguy hiểm nhất mà bất kỳ website nào cũng có thể trở thành mục tiêu nếu không được bảo mật đúng cách. Việc hiểu rõ cách hoạt động, dấu hiệu nhận biết và các phương pháp phòng ngừa sẽ giúp bạn giảm thiểu rủi ro mất dữ liệu nghiêm trọng.

Đừng đợi đến khi bị tấn công mới bắt đầu bảo vệ. Hãy chủ động kiểm tra và vá lỗ hổng bảo mật ngay!

Bạn muốn tìm hiểu thêm về các lỗ hổng bảo mật khác trên website? Hãy xem thêm các bài viết khác trên Blog của System443!

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