SDriver cải tiến của luận văn Thạc sỹ Nguyễn Thanh Liêm

Một phần của tài liệu Chống tấn công SQL injection sử dụng các khuôn mẫu tổng quát (Trang 32 - 37)

CHƯƠNG 2: MỘT SỐ PHƯƠNG PHÁP CHỐNG TẤN CÔNG TIÊM NHIỄM

2.2. SDriver cải tiến của luận văn Thạc sỹ Nguyễn Thanh Liêm

Luận văn của Nguyễn Thanh Liêm đã tiến hành phân tích cơ chế hoạt động của SDrive. Một khuôn mẫu của SDriver bao gồm có 2 phần là Stack Trace và chuỗi truy vấn rút gọn. Stack Trace rất khó, thậm chí có thể nói là không thể giả mạo. Vì vậy, nếu có trường hợp kẻ tấn công có thể vượt qua được SDriver thì chỉ có thể xảy ra vấn đề trong chuỗi truy vấn rút gọn hay nói cách khác, cách thức rút gọn truy vấn tiềm tàng lỗ hổng có thể khai thác được.

Về cơ chế, SDriver sử dụng Regular Expression để tiến hành rút gọn chuỗi truy vấn, loại bỏ những phần được coi là không cần thiết .

Định nghĩa Regular Expression trong SDriver.

“//Initializing patterns

trivia = Pattern.compile("\\+|-|\\.");

escapeChar = Pattern.compile("\\'(?:.|[\\n\\r])*?\\'");

numbers = Pattern.compile("([<=>,\\(]+\\s*)(?:[0-9A-Fa-f])+");

comments = Pattern.compile("/\\*(?:.|[\\n\\r])*?\\*/");”

Các bước tiến hành xóa bỏ:

1. Xóa bỏ các ký tự được cho là thông thường: “+”, “-” và “.”. 2. Xóa bỏ các chữ số đằng sau các phép toán “<”,“=”, “>”.

3. Xóa bỏ thành phần chú thích “/* */”.

4. Xóa bỏ chuỗi nhập liệu nằm giữa cặp dấu ngoặc đơn “'”.

“public String strippedDownQuery(String sql){ Matcher tmpMatcher = this.trivia.matcher(sql); sql = tmpMatcher.replaceAll("");

tmpMatcher = this.numbers.matcher(sql); sql

= tmpMatcher.replaceAll("$1"); tmpMatcher = this.comments.matcher(sql); sql =

tmpMatcher.replaceAll(""); tmpMatcher = this.escapeChar.matcher(sql);

sql = tmpMatcher.replaceAll("");

System.out.println("SDriver: The stripped query: "

+sql); return sql;

}”

Bước một và ba chủ yếu là loại bỏ các ký tự, chuỗi được cho là “thừa”, không phải là đặc trưng của câu truy vấn. Trong khi bước hai và bốn là loại bỏ các ký tự số, chuỗi nhập liệu của người dùng.

Ví dụ: đầu vào là câu truy vấn

“Select a.Code, a.Name, a.Price, a.Vendor from Product a where a.Vendor like '%HP%' and a.Price

>=1000.0 and a.Price <=1500.0 /* Truy van Product HP */”

Thì câu truy vấn rút bỏ dữ liệu sẽ là

“SELECT aCode, aName, aPrice, aVendor from Product a WHERE where a.Vendor like and aPrice

>=and aPrice <=”

Lần ngược quá trình rút gọn một câu truy vấn của SDriver để tìm ra điểm yếu. Ví dụ với trường hợp truy vấn sử dụng đăng nhập cơ sở dữ liệu.

Câu đã rút gọn cuối cùng:

“Select * from USER_ACCOUNT where USER_NAME = and PASSWORD = ”

Câu truy vấn ở bước 4 :

“Select * from USER_ACCOUNT where USER_NAME = '?' and PASSWORD = '?' ”

Câu truy vấn rút gọn ở bước 3:

“Select * from USER_ACCOUNT where USER_NAME = '?'/* */ and PASSWORD = '/* */' ”

Ở bước rút gọn số 3, SDriver tiến hành rút gọn chú thích. Trong câu truy vấn chú thích được phân tách bằng “/**/” và có thể đặt ở bất kỳ nơi nào trong câu. Ở vị trí đầu tiên, chú thích thật sự hoạt động đúng chức năng nhưng ở vị trí số 2. Cụm chú thích nằm trong cặp ngoặc đơn. Bản thân các dấu chú thích này

nếu nằm trong cặp ngoặc đơn thì chúng sẽ được giải mã như những ký tự thông thường chứ không phải là dấu chú thích. Vậy nên nếu lồng ghép dấu “/*” và

“*/” vào các cặp ngoặc đơn, ví dụ như “’/*’ OR ‘*/’” thì chuỗi

“OR” sẽ không được tính như một thành phần chú thích mà là một toán tử của SQL. Trong khi đó SDriver lại tiến hành xóa bỏ chuỗi chú thích trước khi xóa bỏ chuỗi dữ liệu trong cặp nháy đơn. Do vậy ở bước ba, SDriver có thể sẽ loại bỏ nhầm những chuỗi mã độc hại.

Ở bước thứ bốn, SDriver chỉ chú tâm vào việc loại bỏ các chuỗi nằm trong cặp dấu ngoặc đơn mà không quan tâm đến việc có bao nhiêu chuỗi đã bị loại bỏ. Trong một số ví dụ, chuỗi truy vấn có đến 3 chuỗi trong cặp ngoặc đơn nhưng khi SDriver thực hiện rút gọn thì lại chỉ có 2 do 1 cặp ngoặc đơn nằm trong phần chú thích nên đã bị loại bỏ tại bước trước.

Một số ví dụ kiểm chứng:

Kỹ thuật tautologies: Nhập /*admin' or 1=1 -- */ vào trường Username, Password bất kỳ. Kết quả kiểm tra tại SDriver như hình 2.6.

SDriver: This is the query the application sent: Select * from USER_ACCOUNT where USER_NAME = '/*admin' or 1=1 -- */' and PASSWORD = 'dsdsd'

SDriver: The stripped query: Select * from USER_ACCOUNT where USER_NAME = and PASSWORD =

SDriver: NO NEED TO WORRY

Hình 2.6 Ví dụ tấn công tautologies thành công

Kỹ thuật truy vấn Union: Nhập chuỗi /*' union select * from USER_ACCOUNT -- */ vào Username, Password bất kỳ. Kết quả

kiểm tra tại SDriver như hình 2.7.

SDriver: This is the query the application sent: Select * from USER_ACCOUNT where USER_NAME = '/*' union select * from USER_ACCOUNT -- */' and PASSWORD = 'dsds'

SDriver: The stripped query: Select * from USER_ACCOUNT where USER_NAME = and PASSWORD =

SDriver: NO NEED TO WORRY

Hình 2.7 Ví dụ tấn công UNION thành công Kỹ thuật truy vấn Piggy-Backed:

và chuỗi “/*'; shutdown -- */

SDriver như hình 2.8.

Nhập chuỗi “admin” vào Username vào Password. Kết quả kiểm tra tại

SDriver: This is the query the application sent: Select * from USER_ACCOUNT where USER_NAME = 'admin' and PASSWORD = '/*';

shutdown -- */'

SDriver: The stripped query: Select * from USER_ACCOUNT where USER_NAME = and PASSWORD =

SDriver: NO NEED TO WORRY

Kẻ tấn công đã vượt qua được SDriver, tuy vậy lệnh “SHUTDOWN” sẽ không được thực thi là do phương thức gọi lệnh thực thi truy vấn trong trường hợp trên là excuteQuery, phương thức này chỉ truy vấn để lấy dữ liệu chứ không thực hiện bất kỳ thay đổi nào trên CSDL.

Qua một số trường hợp trên, kẻ tấn công có thể lợi dùng lỗ hổng SDriver để thực hiện tấn công tiêm nhiễm SDriver,

Hình 2.8 Ví dụ tấn công Piggy-Backed thành công 2.2.2. SDriver cải tiến của luận văn Nguyễn Thanh Liêm

Như đã phân tích ở trên, vấn đề của SDriver nằm ở cơ chế rút bỏ dữ liệu của câu truy vấn. Do vậy, một cơ chế rút bỏ dữ liệu của câu truy vấn mới sẽ được đề xuất.

Trong chuỗi truy vấn, các ký tự “+”, “-”, “.” hay các chuỗi được đánh dấu là chú thích cũng có thể coi là đặc trưng của một câu truy vấn, và không nên loại bỏ chúng khỏi câu truy vấn. Ngay cả khi kẻ tấn công phỏng đoán được cấu trúc của câu truy vấn thì cũng khó có thể phỏng đoán được những đặc trưng này.

Về loại bỏ các chuỗi đầu vào trong ‘ ’ cần phải đảm bảo xác định chính xác vị trí các chuỗi, cũng như số lượng chuỗi đã rút gọn. Để thực hiện được việc này, các chuỗi trong cặp dấu nháy đơn được thay thế bằng ‘?’. Khi có sự thay đổi về số lượng các chuỗi hay vị trí các chuỗi, tấn công tiêm nhiễm có thể được phát hiện ra.

Ngoài ra, để hỗ trợ ngăn chặn tấn công tiêm nhiễm SQL, một bảng anomaly đã được đề xuất xây dựng. Bảng anomaly chỉ chứa 1 trường duy nhất chứa các mẫu tấn công SQL. Các truy vấn đến CSDL cần phải được sàng lọc 1 lần, so sánh với dữ liệu trong anomaly. Nếu phát hiện dữ liệu tấn công thì cho dù có khớp mẫu hợp lệ ở giai đoạn sau, SDriver cải tiến cũng sẽ thông báo tấn công và ngăn chặn lại.

Ở chế độ huấn luyện – training mode, qui trình thực hiện lấy khuôn mẫu hợp lệ không thay đổi, giữ nguyên như ở SDriver cũ.

Ở chế độ thực thi – production mode, SDriver cải tiến thực hiện rút gọn chuỗi truy vấn theo các bước tại sơ đồ hình 2.9.

Bước 1: khi câu truy vấn đến, SDriver cải tiến thực hiện loại bỏ các chuỗi chữ số đầu vào, thay thế các chuỗi ký tự trong cặp nháy đơn bằng “’?’”, giữ nguyên những phần còn lại.

Bước 2: So sánh chuỗi truy vấn rút gọn với tập các mẫu tấn công trong bảng anomaly. Nếu khớp mẫu tấn công, hủy thực thi câu truy vấn, nếu không chuyển sang bước 3.

Bước 3: Kết hợp Stack trace và chuỗi truy vấn rút gọn tạo ra khuôn mẫu.

Bước 4: So sánh khuôn mẫu với tập các mẫu hợp lệ trong signatures.

Nếu khớp mẫu hợp lệ, chuyển kết nối đến CSDL ứng dụng, nếu không, hủy thực thi câu truy vấn chuyển sang bước 5.

Bước 5: Thêm chuỗi truy vấn rút gọn vào bảng anomaly.

Một phần của tài liệu Chống tấn công SQL injection sử dụng các khuôn mẫu tổng quát (Trang 32 - 37)

Tải bản đầy đủ (DOC)

(55 trang)
w