Tiêm SQL là gì? Nó có nguy hiểm không?

Nếu có một thứ mà tội phạm mạng yêu thích, thì đó là dữ liệu. Dữ liệu bị đánh cắp rất có giá trị trên các thị trường bất hợp pháp và quyền truy cập vào cơ sở dữ liệu riêng tư có thể là một cách tuyệt vời để các tác nhân độc hại kiếm lợi nhuận từ hoạt động kinh doanh của họ. Một cách để truy cập dữ liệu riêng tư là thông qua SQL injection. Nhưng chính xác thì SQL injection là gì, nó hoạt động như thế nào và có thể ngăn chặn một cuộc tấn công như vậy không?


Tiêm SQL là gì?

Các chương trình phần mềm dựa vào mã để hoạt động. Mã cũng là ngôn ngữ mà máy móc sử dụng để thực hiện các hoạt động và có thể ở nhiều dạng (Python, JavaScript, C++, v.v.). Thông thường, tội phạm mạng có thể tấn công nạn nhân thông qua mã và việc tiêm SQL (hoặc SQLis) cũng không khác. Điều này cho phép các tác nhân độc hại “tiêm” mã có hại vào câu lệnh SQL.

Trước tiên hãy tìm hiểu ý nghĩa của SQL.

SQL là viết tắt của Ngôn ngữ truy vấn có cấu trúc. Đây là một loại ngôn ngữ lập trình khác được sử dụng cụ thể khi xử lý cơ sở dữ liệu. Được IBM phát triển vào những năm 1970, SQL có thể thao tác, lưu trữ và truy xuất thông tin cơ sở dữ liệu. Nhiều hệ thống liên lạc cơ sở dữ liệu trên khắp thế giới sử dụng SQL, do đó, không có gì ngạc nhiên khi các tác nhân đe dọa đã nghĩ ra cách lạm dụng nó để nhắm mục tiêu vào cơ sở dữ liệu.

Các câu lệnh SQL tạo thành một phần quan trọng trong giao tiếp cơ sở dữ liệu. Một câu lệnh SQL là một lệnh có nhiều dạng khác nhau. Một số thay đổi dữ liệu, một số truy xuất hoặc xóa dữ liệu và một số có thể thay đổi cấu trúc của chính cơ sở dữ liệu. Khi một SQL injection xảy ra, mã độc hại sẽ được đưa vào một câu lệnh SQL.

Tất nhiên, một trang web hoặc ứng dụng cần sử dụng ngôn ngữ lập trình SQL để có thể thực hiện được SQL injection. Nhưng làm thế nào để vectơ tấn công này hoạt động?

Giả sử bạn có một dòng mã thông thường được ứng dụng sử dụng. Khi tội phạm mạng chèn một nội dung SQL độc hại, một dòng mã sẽ được thêm vào có thể can thiệp vào các truy vấn mà ứng dụng tự thực hiện gửi đến cơ sở dữ liệu của nó. Bằng cách này, cơ sở dữ liệu có thể bị khai thác theo cách cho phép tác nhân đe dọa xem dữ liệu mà nếu không chúng sẽ không có quyền truy cập.

ảnh nghiêng của mã trên màn hình

Từ đây, tội phạm mạng có thể đánh cắp dữ liệu để khai thác trực tiếp hoặc bán dữ liệu đó trên dark web hoặc các nơi khác. Họ cũng có thể thay đổi, thêm hoặc xóa dữ liệu khỏi cơ sở dữ liệu được nhắm mục tiêu. Tùy thuộc vào mức độ của cuộc tấn công SQL injection, rất nhiều thiệt hại có thể xảy ra. Nếu chi tiết thanh toán, số an sinh xã hội hoặc các loại dữ liệu riêng tư khác bị truy cập, nhiều người có thể có nguy cơ bị lợi dụng.

Mặt khác, nếu kẻ tấn công quản lý để thay đổi đáng kể cơ sở dữ liệu, một lượng lớn dữ liệu có thể bị mất vĩnh viễn. Nói chung, việc tiêm SQL có thể phá hủy toàn bộ cơ sở dữ liệu chỉ bằng một cuộc tấn công. Mặc dù chúng đã xuất hiện từ năm 1998 nhưng chúng vẫn có liên quan và nguy hiểm trong thời đại ngày nay của chúng ta.

Theo dự án bảo mật ứng dụng web mở (OWASP), 274.000 trường hợp tiêm nhiễm SQL đã được xác định khi kiểm tra các ứng dụng về sự hiện diện của một cuộc tấn công như vậy vào năm 2021.

Các loại SQL injection

Có một số loại SQL injection khác nhau, với ba loại chính là Blind injection, in-band và out-of-band injection.

Việc tiêm SQL mù (hoặc suy luận) xảy ra khi ứng dụng hoặc trang web bị tấn công bằng cách tiêm, nhưng các phản hồi HTTP (Giao thức truyền siêu văn bản) được cung cấp không chứa kết quả của truy vấn SQL. Nói cách khác, không có dữ liệu nào từ cơ sở dữ liệu bị tấn công được cung cấp cho tội phạm mạng. Vì vậy, điểm của điều này là gì?

Sử dụng kỹ thuật tiêm SQL mù, kẻ tấn công gửi dữ liệu đến máy chủ mục tiêu và sau đó có thể nhận ra một số điều nhất định về cơ sở dữ liệu thông qua bản chất của chính phản hồi HTTP. Trên hết, các yếu tố liên quan đến phản hồi HTTP có thể giúp kẻ tấn công tạo ra một cách tiêm SQL khác hiệu quả hơn để truy cập cơ sở dữ liệu.

Có hai loại chính của Blind SQL injection, được gọi là dựa trên thời gian và boolean. Hai biến thể này khá giống nhau về bản chất. Cả SQL injection boolean và dựa trên thời gian đều gửi một mảng các câu hỏi trả lời có hoặc không, mặc dù câu hỏi sau sẽ yêu cầu cơ sở dữ liệu đợi một lúc trước khi trả lời các truy vấn.

Tiếp theo, có các phần bổ sung SQL trong băng tần. In-band SQL injections cho phép người vận hành thực hiện cuộc tấn công và nhận được kết quả mong muốn bằng cách sử dụng cùng một kênh. In-band SQL injection được sử dụng phổ biến nhất, đơn giản vì chúng dễ thực hiện nhất do thực tế là chúng chỉ yêu cầu một kênh.

Cáp được kết nối với mặt sau của máy chủ gắn trên giá

Cuối cùng, bạn đã có một lệnh tiêm SQL ngoài luồng. Về cơ bản, đây là phiên bản thay thế của phương pháp tiêm SQL trong băng tần, trong đó kẻ tấn công không thể thực hiện toàn bộ cuộc tấn công bằng cách sử dụng một kênh duy nhất. Ngoài ra, một cuộc tấn công có thể cần sử dụng đến việc tiêm SQL ngoài băng tần nếu máy chủ mục tiêu đơn giản là không đủ nhanh để cung cấp kết quả.

Những yếu tố này làm cho quá trình trở nên khó khăn hơn một chút, nghĩa là nó phải dựa vào một số tính năng nhất định để hoạt động trên cơ sở dữ liệu được nhắm mục tiêu để thành công. Ví dụ: nền tảng bị tấn công phải thiếu khả năng khử trùng đầu vào. Do đó, các thao tác tiêm SQL trong băng phổ biến hơn nhiều so với các thao tác tiêm SQL ngoài băng. Nhưng chúng vẫn xảy ra.

Có thể tránh được việc tiêm SQL không?

Việc tiêm SQL là mối quan tâm của các doanh nghiệp và tổ chức hơn là các cá nhân thông thường. Nhưng có những điều mà những mục tiêu tiềm năng này có thể làm để giảm khả năng bị tấn công bởi một cuộc tấn công như vậy.

Vệ sinh đầu vào là phương pháp phổ biến chính để tránh tiêm SQL. Đây là một quá trình lọc quét và làm sạch đầu vào của các ký tự nguy hiểm. Nếu mã SQL được xử lý trước khi được làm sạch, khả năng bị tiêm nhiễm SQL sẽ tăng lên một cách tự nhiên.

Ngoài ra, các truy vấn được tham số hóa có thể giúp bạn tránh được việc tiêm SQL. Đây là những truy vấn yêu cầu ít nhất một tham số để thực hiện. Việc áp dụng các tham số khiến tội phạm mạng khó thực hiện thành công một cuộc tấn công SQL injection.

Nhưng không có cách nào chắc chắn để ngăn chặn việc tiêm SQL. Như trường hợp của nhiều cuộc tấn công mạng, gần như không thể giữ cho các thiết bị và hệ thống của bạn hoàn toàn kín gió. Khi nói đến việc tiêm SQL, điều tốt nhất bạn có thể làm là làm sạch tất cả các đầu vào và thiết lập các truy vấn được tham số hóa.

Việc tiêm SQL đã cũ, nhưng vẫn là một mối đe dọa

Mặc dù SQL injection đã tồn tại hơn 20 năm nhưng chúng vẫn gây rủi ro cho nhiều trang web và ứng dụng. Vì vậy, bạn nên ghi nhớ hình thức tấn công này và thực hiện các bước cần thiết để thử và ngăn chặn nó, vì nó có thể gây ra mối đe dọa cho cơ sở dữ liệu của bạn vào một thời điểm nào đó trong tương lai.

Previous Post
Next Post

post written by: