Sau khi xây dựng được khuôn mẫu hợp lệ cho tất cả câu truy vấn, ta chuyển SDriver sang chế độ thực thi, chuyển dòng đầu tiên của file mode.txt sang “production mode”. Trong chế độ thực thi, SDriver sẽ hoạt động như một bộ lọc nhằm phát hiện và ngăn chặn tấn công tiêm nhiễm SQL. Khi nhận một câu truy vấn từ ứng dụng web, SDriver sẽ tìm kiếm khuôn mẫu hợp lệ tương ứng với câu truy vấn trong ssql. Câu truy vấn được xác định là hợp lệ khi tồn tại khuôn mẫu hợp lệ tương ứng với nó, khi đó SDriver sẽ đưa ra thông báo “NO NEED TO WORRY”, và nó sẽ chuyển câu truy vấn sang trình điều khiển kết nối để thực thi. Trong trường hợp không có khuôn mẫu hợp lệ tương ứng nào, câu truy vấn sẽ được coi là tấn công tiêm nhiễm SQL và bị từ chối thực thi. Đồng thời, SDriver sẽ đưa ra thông báo “ATTACKING!!! This 219e776510cf52ef4f1d68252298a262 does
not exists!!! NO RESULTS...YOU ARE ATTACKING!”. Dưới đây là một số ví dụ các kỹ thuật tấn công, SDriver sẽ phát hiện và ngăn chặn chúng.
Kỹ thuật tautologies: Chuỗi độc hại “admin' OR 1=1 --” sẽ được chèn vào trường User name trong form Login, trường Password nhập tùy ý. Kết quả như sau:
“SDriver: This is the query the application sent: Select * from USER_ACCOUNT where USER_NAME = 'admin' OR 1=1 --' and PASSWORD= 'gvbcx'
SDriver: The stripped query: Select * from USER_ACCOUNT where USER_NAME = OR 1= gvbcx'
Stack trace = org.SStatement.getStackID(SStatement.java:613)org.SStatement… SDriver 666: ATTACKING!!! This e3ca49a454c3faadd5818b8aacb85c9 does not exists!!!
SDriver 562: NO RESULTS...YOU ARE ATTACKING!”.
Kỹ thuật chú thích cuối dòng (End-of-line comment): Chuỗi độc hại
“admin'--” sẽ được chèn vào trường User name trong from Login, trường Password nhập tùy ý. Kết quả như sau:
“SDriver: This is the query the application sent: Select * from USER_ACCOUNT where USER_NAME = 'admin'--' and PASSWORD= 'abc'
SDriver: The stripped query: Select * from USER_ACCOUNT where USER_NAME = abc'
Stack trace =
org.SStatement.getStackID(SStatement.java:613)org.SStatement.manageQuer y(SStatement.java
ATTACKING!!! This 43f9a4cd8bb1b43fb71578cd568172 does not exists!!! SDriver 562: NO RESULTS...YOU ARE ATTACKING!”.
Kỹ thuật truy vấn Union: Chuỗi độc hại “' union select * from
USER_ACCOUNT --” sẽ được chèn vào trường User name trong form Login,
trường Password nhập tùy ý. Kết quả như sau:
“SDriver: This is the query the application sent: Select * from USER_ACCOUNT where USER_NAME = '' union select * from USER_ACCOUNT --' and PASSWORD= 'abc'
SDriver: The stripped query: Select * from USER_ACCOUNT where USER_NAME = union select * from USER_ACCOUNT abc'
Stack trace =
org.SStatement.getStackID(SStatement.java:613)org.SStatement.manageQuer y(SStatement.java
SDriver 666: ATTACKING!!! This c4bd54e8854c3cc448dea46be98f9f1 does not exists!!!
SDriver 562: NO RESULTS...YOU ARE ATTACKING!”.
Kỹ thuật truy vấn Piggy-Backed: Chuỗi độc hại “';SHUTDOWN;--” sẽ được chèn vào trường Password, trường User name nhập tùy ý. Kết quả như sau:
“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= ;SHUTDOWN;'
Stack trace =
org.SStatement.getStackID(SStatement.java:613)org.SStatement.manageQuer y(SStatement.java
SDriver 666: ATTACKING!!! This 6fb255bd8c48bf49491b35cf4e341fc7 does not exists!!!
SDriver 562: NO RESULTS...YOU ARE ATTACKING!”.
Với các ví dụ về tấn công tiêm nhiễm SQL trên thì SDriver đều hoạt động tốt, nhưng SDriver có thực sự tốt không nếu hoạt động trong môi trường thực tế. Chương 3 sẽ phân tích và đánh giá chi tiết hoạt động của SDriver.
2.5. Tóm tắt.
Nội dung chương hai đã làm rõ được kỹ thuật chống tấn công tiêm nhiễm SQL sử dụng các khuôn mẫu hợp lệ theo bối cảnh về kiến trúc, cách thức hoạt động của SDriver.
SDriver là trình điều khiển được chèn vào giữa ứng dụng web và trình điều khiển kết nối. Bản thân SDriver không phải là một trình điều khiển kết nối mà nó đóng vai trò như một bộ lọc.
SDriver có hai chế độ hoạt động là chế độ huấn luyện và chế độ thực thi. Trong chế độ huấn luyện, SDriver sẽ xây dựng CSDL về các khuôn mẫu hợp lệ. Trong chế độ thực thi, SDriver sẽ đóng vai trò phát hiện và ngăn chặn tấn công tiêm nhiễm SQL.
SDriver sẽ rút bỏ dữ liệu đầu vào của câu truy vấn và thu thập thông tin về stack strace của câu truy vấn. Kết hợp hai đặc trưng trên sẽ thu được khuôn mẫu hợp lệ tương ứng của câu truy vấn.
Stack trace gồm thông tin chi tiết về tất cả phương thức và vị trí gọi (vị trí dòng lệnh), từ phương thức của ứng dụng nơi câu truy vấn được thực thi cho đến phương thức mục tiêu của trình điều khiển kết nối. Mỗi câu truy vấn sẽ có thông tin về stack trace riêng biệt.
Stack trace khiến việc giả mạo câu truy vấn hợp lệ trở nên vô cùng khó khăn.
CHƯƠNG 3 ĐỀ XUẤT CẢI TIẾN CHỐNG TẤN CÔNG TIÊM NHIỄM SQL SỬ DỤNG CÁC KHUÔN MẪU HỢP LỆ THEO BỐI CẢNH 3.1. Phân tích hoạt động của SDriver.
Như nội dung đã được trình bày ở mục 2.2, SDriver có hai chế độ hoạt động là huấn luyện và thực thi. SDriver xây dựng CSDL các khuôn mẫu hợp lệ trong chế độ huấn luyện và sử dụng CSDL đó để phát hiện và ngăn chặn tấn công tiêm nhiễm SQL trong chế độ thực thi. Hai chế độ hoạt động của SDriver đều sử dụng chung hai bước chính là trích xuất đặc trưng của câu truy vấn và so sánh với khuôn mẫu hợp lệ trong CSDL ssql. Cũng giống như các phương pháp chống tấn công tiêm nhiễm SQL sử dụng khuôn mẫu hợp lệ khác, quá trình trích xuất đặc trưng của câu truy vấn của SDriver rất quan trọng. Trong SDriver thì đặc trưng của câu truy vấn gồm có thông tin về stack trace và câu truy vấn rút bỏ dữ liệu. Thông tin của stack trace sẽ được thu thập bằng cách lần ngược lại các phương thức được gọi cho đến vị trí của mã nguồn thực thi câu truy vấn, xem ví dụ về stack trace ở tiểu mục 2.4.2 bên trên. Do vậy thông tin stack trace là không thể giả mạo được. Trong mục 2.3 bên trên cũng đã trình bày về việc kẻ tấn công không thể sử dụng một câu truy vấn hợp lệ này để giả mạo một câu truy vấn hợp lệ khác để đánh lừa SDriver. Kẻ tấn công muốn vượt qua được SDriver thì phải đánh lừa được SDriver trong quá trình rút bỏ dữ liệu của câu truy vấn, SDriver có thể sẽ loại bỏ nhầm chuỗi độc hại trong khi rút bỏ dữ liệu của câu truy vấn. Quá trình rút bỏ dữ liệu của câu truy vấn được xử lý qua các bước sau:
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 “'”.