Tải bản đầy đủ - 0 (trang)
CHƯƠNG 2: TỔNG QUAN VỀ SQL INJECTION

CHƯƠNG 2: TỔNG QUAN VỀ SQL INJECTION

Tải bản đầy đủ - 0trang

2.1.2 Các vần đề liên quan đến ứng dụng web

Có một số yếu tố làm cho các ứng dụng web khơng được bảo vệ an tồn. Thứ nhất, nhiều

ứng dụng được viết trong thời điểm mà yếu tố bảo mật chưa được đặt lên hàng đầu. Điều này

làm cho các cuộc tấn công SQL Injection diễn ra dễ dàng. Trong thời điểm này các cuộc thảo

luận về lỗ hổng SQL Injection được diễn ra với tần suất thấp vì thế hầu hết các nhà phát triển

đều không nhận thức được mối nguy hiểm này.

Ngoài ra, hầu hết các ứng dụng web được viết ra có thể tương tác trực tiếp với cơ sở dữ

liệu web mà không cần thông qua các biện pháp mã hóa hay xác thực. Một dự án nghiên cứu

X-Force của IBM gần đây đã phát hiện ra rằng 47% lỗ hổng bảo mật trên website hiện nay

liên quan đến ứng dụng web. Cross-Site Scripting & SQL Injection tiếp tục thống trị các cuộc

tấn công trong số các lựa chọn khác.Vấn đề thực sự lớn hơn rất nhiều, theo Neira Jones,

người đứng đầu của thanh toán an ninh cho ngân hàng Barclays, 97% vi phạm dữ liệu trên

tồn thế giới vẫn còn do một SQL được thêm vào các câu lệnh trong lúc gửi yêu cầu đến máy

chủ.

Một số nguyên nhân dẫn đến sự đa dạng của các lỗ hổng bảo mật web hiện nay:

-



Người lập trình tự phát triển ứng dụng Web (Sử dụng các ngôn ngữ kịch bản để tạo

ứng dụng, phát triển rộng rãi mà ít quan tâm đến q trình phát triển ứng dụng an

tồn. Thiếu đội ngũ lập trình với kỹ năng nhận biết phát triển ứng dụng tránh các

lỗi bảo mật).



-



Sử dụng ứng dụng Web từ mã nguồn mở (Thường không theo dõi và cập nhật các

bản vá lỗi bảo mật).



-



Phát triển ứng dụng Web từ một ứng dụng mở khác (Trường hợp này thường

không kiểm tra lỗi bảo mật ứng dụng củ trước khi phát triển tiếp, nên vẫn tồn tại

các lỗi bảo mật).



2.1.3 Thực trạng tấn công web bằng sql Injection

Số lượng các vụ tấn công nhằm vào cơ sở dữ liệu (CSDL) web đã lên tới một con số

kỷ lục trong năm 2006 khi mà tin tặc thấy đây chính là "một hũ mật ngọt" các thơng tin tài

chính và cá nhân của người dùng.

6



Hãng bảo mật SecureWorks cho biết đã phát hiện tới 8.000 vụ tấn công lên các cơ sở dữ liệu

mỗi ngày. Như vậy, con số này đã tăng thêm trung bình từ 100 đến 200 vụ tấn công một ngày

so với con số của 3 tháng đầu năm 2006.

Một trong những vụ tấn công SQL Injection nổi tiếng nhất chính là vụ tấn cơng vào

CardSystems Solutions - một hãng chuyên lưu trữ có sở dữ liệu thanh tốn thẻ tín dụng. Tin

tặc đã sử dụng giải pháp tấn công SQL Injection để chiếm quyền điều khiển hệ thống cơ sở

dữ liệu của CardSystems và chuyển toàn bộ cơ sở dữ liệu ra ngoài. Đã có khoảng 40 triệu thẻ

tín dụng rơi vào tay chúng gây ra thiệt hại hàng triệu USD.

Rất nhiều ông lớn từng bị dính– Sony, Microsoft UK. Mọi vụ lùm xùm liên quan tới “lộ dữ

liệu người dùng” ít nhiều đều dính dáng tới SQL Injection.

2.2



TỔNG QUAN VỀ SQL INJECTION



2.2.1 Khái niệm về SQL Injection

SQL injection là một kỹ thuật cho phép những kẻ tấn công lợi dụng lỗ hổng của việc

kiểm tra dữ liệu đầu vào trong các ứng dụng web và các thông báo lỗi của hệ quản trị cơ sở

dữ liệu trả về để inject (tiêm vào) và thi hành các câu lệnh SQL bất hợp pháp. SQL injection

có thể cho phép những kẻ tấn cơng thực hiện các thao tác, delete, insert, update, v.v. trên cơ

sở dữ liệu của ứng dụng, thậm chí là server mà ứng dụng đó đang chạy. SQL injection

thường được biết đến như là một vật trung gian tấn công trên các ứng dụng web có dữ liệu

được quản lý bằng các hệ quản trị cơ sở dữ liệu như SQL Server, MySQL ,Oracle, DB2,

Sysbase ...

SQL Injection là một trong những kiểu hack web bằng cách inject các mã SQL query/

command vào input trước khi chuyển cho ứng dụng web xử lí, bạn có thể login mà khơng

cần username và password, remote execution (thực thi từ xa), dump data và lấy root của

SQL server. Cơng cụ dùng để tấn cơng là một trình duyệt web bất kì, chẳng hạn như Internet

Explorer, Netscape, Lynx, ...

2.2.2 Các mối đe dọa chính từ SQL Injection

Các mối đe dọa chính của SQL Injection:

7



-



Snoofing identity (Mạo danh): Những kẻ tấn công sẽ mạo danh một email hoặc một

trang web của một tổ chức để đánh lừa người dùng.



-



Changing prices (Thay đổi giá): Một trong số những vấn đề của SQL Injection là nó

có thể thay đổi dữ liệu. Ở đây, những kẻ tấn công sẽ thay đổi giá cả một trang mua

sắm trực tuyến để có thể mua sản phẩm đó với giá rẻ hơn.



-



Tamper with database records (Xáo trộn các hồ sơ cơ sở dữ liệu): Cơ sở dữ liệu

chính sẽ hồn tồn bị hư hại; thậm chí còn có khả năng đã bị thay thế hồn tồn hoặc

thậm chí bị xóa hết dữ liệu.



-



Escalation of privileges (Leo thang đặc quyền): Một khi hệ thống bị tấn cơng, kẻ

tấn cơng sẽ tìm kiếm đặc quyền truy cập cao nhất của các thành viên quản trị để có thể

chiếm quyền truy cập vào hệ thống cũng như vào mạng nội bộ.



-



Denial-of-service on the server (Từ chối các dịch vụ từ máy chủ): Từ chối dịch vụ

từ máy chủ là một dạng tấn công mà người dùng không thể truy cập vào hệ thống.

Ngày càng nhiều yêu cầu được gửi đến máy chủ mà khơng thể sử lý nó. Điều này dẫn

đến tạm ngưng dịch vụ của máy chủ.



-



Complete disclosure of all the data on the system (Lộ tất cả thông tin dữ liệu của

hệ thống): Một khi một hệ thống bị tấn công các dữ liệu quan trọng và bí mật như: số

thẻ tín dụng, chi tiết nhân viên về hồ sơ và tài chính,…v.v sẽ bị tiết lộ.



-



Destruction of data (Phá hủy dữ liệu): Những kẻ tấn cơng sau khi chiếm hồn tồn

quyền hệ thống sẽ phá hủy hoàn toàn dữ liệu, kết quả làm tổn thất rất lớn cho công ty.



-



Voiding system's critical transaction (Tránh các giao dịch quan trọng của hệ

thống): Những kẻ tấn công có thể vận hành hệ thống tránh tất cả các giao dịch.



-



Modifying the records (Thay đổi hồ sơ): Kẻ tấn cơng có thể sửa đổi các dữ liệu

trong cơ sở dữ liệu của công ty, gây ra trở ngại lớn cho hệ thống quản lý cơ sở dữ liệu

công ty



2.2.3 Các dạng lỗi thường gặp

- Không kiểm tra ký tự thoát truy vấn



8



Đây là dạng lỗi SQL injection xảy ra khi thiếu đoạn mã kiểm tra dữ liệu đầu vào trong câu

truy vấn SQL. Kết quả là người dùng cuối có thể thực hiện một số truy vấn khơng mong

muốn đối với cơ sở dữ liệu của ứng dụng. Dòng mã sau sẽ minh họa lỗi này:

statement = "SELECT * FROM users WHERE name = '" + userName + "';"

Câu lệnh này được thiết kế để trả về các bản ghi tên người dùng cụ thể từ bảng những người

dùng. Tuy nhiên, nếu biến "userName" được nhập chính xác theo một cách nào đó bởi người

dùng ác ý, nó có thể trở thành một câu truy vấn SQL với mục đích khác hẳn so với mong

muốn của tác giả đoạn mã trên. Ví dụ, ta nhập vào giá trị của biến userName như sau:

a' or 't'='t

Khiến câu truy vấn có thể được hiểu như sau:

SELECT * FROM users WHERE name = 'a' or 't'='t';

Nếu đoạn mã trên được sử dụng trong một thủ tục xác thực thì ví dụ trên có thể được sử dụng

để bắt buộc lựa chọn một tên người dùng hợp lệ bởi 't'='t' luôn đúng. Trong khi hầu hết các

SQL server cho phép thực hiện nhiều truy vấn cùng lúc chỉ với một lần gọi, tuy nhiên một số

SQL API như mysql_query của php lại không cho phép điều đó vì lý do bảo mật. Điều này

chỉ ngăn cản tin tặc tấn công bằng cách sử dụng các câu lệnh riêng rẽ mà không ngăn cản tin

tặc thay đổi các từ trong cú pháp truy vấn. Các giá trị của biến "userName" trong câu truy

vấn dưới đây sẽ gây ra việc xoá những người dùng từ bảng người dùng cũng tương tự như

việc xóa tất cả các dữ liệu được từ bảng dữ liệu (về bản chất là tiết lộ các thông tin của mọi

người dùng), ví dụ này minh họa bằng một API cho phép thực hiện nhiều truy vấn cùng lúc:

a';DROP TABLE users; SELECT * FROM data WHERE 't' = 't

Điều này đưa tới cú pháp cuối cùng của câu truy vấn trên như sau:

SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM

data WHERE 't' = 't';

- Xử lý không đúng kiểu

Lỗi SQL injection dạng này thường xảy ra do lập trình viên hay người dùng định

nghĩa đầu vào dữ liệu không rõ ràng hoặc thiếu bước kiểm tra và lọc kiểu dữ liệu đầu vào.

Điều này có thể xảy ra khi một trường số được sử dụng trong truy vấn SQL nhưng lập trình

viên lại thiếu bước kiểm tra dữ liệu đầu vào để xác minh kiểu của dữ liệu mà người dùng

nhập vào có phải là số hay khơng. Ví dụ như sau:

9



statement:= "SELECT * FROM data WHERE id = " + a_variable + ";"

Ta có thể nhận thấy một cách rõ ràng ý định của tác giả đoạn mã trên là nhập vào một

số tương ứng với trường id - trường số. Tuy nhiên, người dùng cuối, thay vì nhập vào một số,

họ có thể nhập vào một chuỗi ký tự, và do vậy có thể trở thành một câu truy vấn SQL hoàn

chỉnh mới mà bỏ qua ký tự thốt. Ví dụ, ta thiết lập giá trị của biến a_variable là:

1;DROP TABLE users

khi đó, nó sẽ thực hiện thao tác xóa người dùng có id tương ứng khỏi cơ sở dữ liệu, vì câu

truy vấn hồn chỉnh đã được hiểu là:

SELECT * FROM data WHERE id=1;DROP TABLE users;

- Lỗi bảo mật bên trong máy chủ cơ sở dữ liệu

Đơi khi lỗ hổng có thể tồn tại chính trong phần mềm máy chủ cơ sở dữ liệu, như là

trường hợp hàm mysql_real_escape_string() của các máy chủ MySQL. Điều này sẽ cho phép

kẻ tấn cơng có thể thực hiện một cuộc tấn công SQL injection thành công dựa trên những ký

tự Unicode không thông thường ngay cả khi đầu nhập vào đang được thoát.Chữ đậm



CHƯƠNG 3: CÁC DẠNG TẤN CÔNG VÀ BIỆN PHÁP NGĂN CHẶN SQL

INJECTION

3.1 CÁC DẠNG TẤN CÔNG SQL INJECTION

3.1.1 System Stored Procedure (Hệ thống thủ tục lưu trữ)

Những kẻ tấn công cố gắng khai thác các thủ tục lưu trữ dữ liệu của hệ thống. Sau đó xác

định loại cơ sở dữ liệu và sử dụng kiến thức để xác định các thủ tục lưu trữ tồn tại. Tấn công

vào thủ tục lưu trữ kẻ tấn cơng có thể tạo ra lỗi tràn bộ đệm, leo thang đặc quyền hoặc chiếm

quyền truy cập vào hệ điều hành.

3.1.2 Illegal/Logically Incorrect Query (Lệnh truy vấn bất hợp pháp hay không đúng

logic)

Trong loại tấn công này, những kẻ tấn công sẽ cố gắng thu thập đầy đủ các thông tin về

cấu trúc back-end của cơ sở dữ liệu một trang web. Những kẻ tấn công sẽ gửi một câu lệnh

truy vấn SQL không hợp lệ hoặc không đúng logic đến cơ sở dữ liệu của trang web, một số

10



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

CHƯƠNG 2: TỔNG QUAN VỀ SQL INJECTION

Tải bản đầy đủ ngay(0 tr)

×