Nghiên cứu tìm hiểu một số dạng tấn cơng SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
Hình 3.2. Giao diện kết nối tới SQL Server
• Chức năng đăng ký thơng tin cá nhân:
Hình 3.3. Giao diện đăng ký thơng tin cá nhân
Nghiên cứu tìm hiểu một số dạng tấn công SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
Hình 3.4. Giao diện thơng tin cá nhân
• Chức năng gửi tin nhắn cho người dùng, người dùng user01 gửi tin nhắn tới user02
Hình 3.5. Giao diện gửi tin nhắn
Nghiên cứu tìm hiểu một số dạng tấn cơng SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
Hình 3.6. Giao diện gửi tin nhắn
3.2.3. Áp dụng thức tấn cơng SQL injection trong ứng dụng
Em xin trình bày những cách áp dụng đơn giản SQL injection vào trong tham số của thủ tục lưu trữ mà ứng dụng sử dụng, để thực hiện các mục đích khác nhau.
3.2.3.1. Áp dụng cách tấn cơng SQL injection nhằm làm vơ hiệu hóa điều kiện truy vấn
Trong kịch bản này, user01, user02, user03, user04 có thể gửi tin nhắn cho nhau. Người dùng user01 chỉ có thể đọc được tin nhắn mà người khác gửi cho mình, cịn khơng thể đọc được các tin nhắn của user02, user03, user04, ví dụ như hình sau:
Nghiên cứu tìm hiểu một số dạng tấn công SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
Hình 3.7. Hiển thị tin nhắn.
Trong hình trên, người gửi là user04 và người nhận là user01.
Thủ tục sp_XemChiTiet sẽ hiện thị các tin nhắn của người dùng, khi đó thủ tục này sẽ được gọi bởi câu truy vấn sau : “ exec sp_XemChiTiet ‘user01’ và được thể hiện như hình sau
Nghiên cứu tìm hiểu một số dạng tấn cơng SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
Khi đó user01 này có thể thực hiện SQL injection vào tham số đầu vào của thủ tục này, nhằm xem toàn bộ nội dung của các tin nhắn mà user01 không được phép. Câu truy vấn sau khi được sửa đổi như sau:
exec sp_XemChiTiet 'user01'' OR 1=1--'
và kết quả của câu truy vấn này sẽ được hiển thị như hình sau:
Hình 3.9. Danh sách tồn bộ các tin nhắn
Như vậy user01 đã có thể xem tin nhắn mà user03 gửi cho user02, với tiêu đề của tin nhắn là TongKet.
Trong ứng dụng trên, chỉ bằng cách sử dụng kỹ thuật SQL injection đơn giản mà người dùng bình thường cũng có thể truy xuất tồn bộ dữ liệu.
3.2.3.2. Áp dụng cách tấn công SQL injection nhằm làm thay đổi dữ liệu trong bảng trong bảng
Mỗi người dùng đều có các thơng tin cá nhân liên quan, tùy theo mức độ quan trọng của thơng tin mà thơng tin này có thể được cơng bố hay giữ bí mật. Giả sử các thơng tin về người dùng user01 được giữ bí mật, và người dùng khác không được phép xem. Trong ứng dụng demo trên người dùng có thể sử dụng thủ tục sp_XemNguoiDung để xem thơng tin cá nhân của mình, ví dụ như hình sau.
Nghiên cứu tìm hiểu một số dạng tấn công SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
Hình 3.10. Giao diện hiển thị thơng tin cá nhân
User01 có thể thực hiện một tấn cơng SQL injection, để xem được nội dung thông tin cá nhân của người dùng khác theo cách trên. Kết quả như hình sau.
Hình 3.11. Thơng tin cá nhân của tất cả người dùng
Nhưng nguy hiểm hơn, user01 có thể thay đổi những thơng tin này. User1 thưc hiện thêm đoạn
“ ''; update tblNguoidung set [Diachi]=''Du lieu bi thay doi'';-- ” vào câu
lệnh ban đầu
Nghiên cứu tìm hiểu một số dạng tấn công SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
Khi đó câu lệnh sau khi đã bị thay đổi sẽ như sau
“ exec sp_XemNguoiDung 'user01''; update tblNguoidung set [Diachi]=''Du lieu bi thay doi'';--' ”
Và kết quả là nội dung của cột DiaChi sẽ bị thay đổi theo ý định của user01.
Hình 3.12. Giao diện thực hiện chèn thêm truy vấn làm thay đổi dữ liệu
3.2.3.3. Áp dụng cách tấn cơng SQL injection nhằm xóa tồn bộ dữ liệu trong bảng
Một trong những hậu quả nghiêm trong khi tấn công SQL injection thành cơng đó là khả năng kẻ tấn cơng có thể xóa tồn bộ dữ liệu trong cơ sở dữ liệu.
Trong ví dụ này user01 có thể thêm đoạn “ ''; delete from tblNguoidung;-- ” vào câu lệnh ban đầu
“ exec sp_XemNguoiDung 'user01' ” Khi đó câu lệnh sau khi đã bị thay đổi sẽ như sau
Nghiên cứu tìm hiểu một số dạng tấn cơng SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
Và kết quả là toàn bộ dữ liệu trong bảng tblNguoidung đã bị xóa.
Nghiên cứu tìm hiểu một số dạng tấn cơng SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
KẾT LUẬN
Sau khi thực hiện đề tài tốt nghiệp: “Nghiên cứu và tìm hiểu một số
dạng tấn cơng SQL Injection vào hệ quản trị cơ sở dữ liệu Microsoft SQL Server”. Em nhận thấy mình đã hiểu và nắm rõ hơn về nguy cơ, điểm yếu,
cách thức tấn công, cũng như thấy được ưu điểm của hệ quản trị cơ sở dữ liệu Microsoft SQL Server. Với lòng đam mê nghiên cứu, đến nay đồ án của em đã hoàn thành đúng tiến độ và đạt được những kết quả sau:
• Tìm hiểu chung về SQL Server và cơ chế mã hóa dữ liệu trong suốt trong SQL Server 2008.
• Tìm hiểu các kỹ thuật khác nhau của tấn công SQL injection. Hiểu được cơ chế hoạt động của tấn cơng, tác hại có thể gây ra nếu như các tấn cơng này được thực hiện. Từ đó giúp em tìm hiểu thêm các giải pháp nhằm chống lại các kỹ thuật tấn cơng này.
• Tạo kịch bản demo đơn giản và xây dựng một chương trình demo đơn giản ứng dụng cơ sở dữ liệu SQL Server, sau đó áp dụng một kỹ thuật tấn cơng SQL injection vào ứng dụng này. Chương trình demo này thực hiện chức năng là gửi tin nhắn của người dùng cho nhau. Ứng dụng thực hiện gọi các thủ tục lưu trữ (stored procedures) mà đã được xây dựng trên SQL Server. Thủ tục lưu trữ là đối tượng mà tấn cơng SQL injection có thể dựa vào đấy để thực hiện. Bằng cách chèn thêm dữ liệu cho các đầu vào của các thủ tục này, kẻ tấn cơng có thể hồn tồn xem được các dữ liệu riêng tư khác một cách bất hợp pháp.
Hướng phát triển đề tài: Có rất nhiều các phương pháp tấn cơng khác
nhau được thực hiện nhằm chống lại cơ sở dữ liệu. Tấn công SQL Injection được thực hiện rất đa dạng và áp dụng trên nhiều hệ quản trị khác nhau như Oracle, SQL Server, mysql , db2… Tùy thuộc vào các hành xử của từng hệ quản trị mà cơ chế cụ thể của các kỹ thuật tấn công SQL Injection là khác nhau.
Sau khi đã tìm hiểu được cơ chế hoạt động và các tác hại do SQL Injection gây ra. Chúng ta cần phải xem xét các giải pháp ngăn chặn nó để
Nghiên cứu tìm hiểu một số dạng tấn cơng SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
bảo vệ cơ sở dữ liệu. Người phát triển các ứng dụng cần phải phân tích, thiết kế và xem xét xây dựng ứng dụng có thể bảo vệ chống được tấn cơng, như kiểm tra giá trị các đầu vào, hạn chế tối đa quyền thực thi người dùng thường….
Hướng phát triển của đề tài là thực hiện tìm hiểu, phân tích các cơ chế phát hiện và ngăn chặn tự động tấn công SQL Injection mà đã được sử dụng trong một số sản phẩm hiện có. Từ đó có thể dần dần xây dựng chương trình ứng dụng thực hiện phát hiện và ngăn chặn tự động tấn công SQL Injection. Tuy nhiên chúng ta vẫn phải xem xét, tìm hiểu và cập nhật các kỹ thuật mới trong tấn cơng SQL Injection để có thể đưa ra giải pháp phát hiện và ngăn chặn ngày một hiệu quả hơn.
Tuy nhiên, do nội dung của báo cáo khá rộng và cần nhiều kiến thức mới, thời gian và kiến thức còn hạn chế, nên chắc chắn đề tài không tránh khỏi những thiếu sót. Em rất mong nhận được sự đóng góp ý kiến của thầy cơ giáo và bạn bè để đồ án của em hoàn thiện hơn.
Cuối cùng một lần nữa,em xin được gửi lời cảm ơn và lòng biết ơn chân thành tới thầy giáo PGS.TS Lê Mỹ Tú là người trực tiếp hướng dẫn em. Thầy ln đưa ra những nhận xét, những góp ý và chỉ ra những chỗ sai, chỗ thiếu để đồ án của em được hoàn thành. Em cám ơn các thầy cơ khoa An Tồn Thơng Tin nói riêng và tồn thể các thầy cơ, các bác cán bộ nhân viên tại Học Viện Kỹ Thuật Mật Mã nói chung đã tạo điều kiện tốt nhất cho chúng em học tập và nghiên cứu trong suốt những năm học qua. Em cũng xin gửi lời cảm ơn đến gia đình và bạn bè đã động viên em hoàn thành đồ án tốt nghiệp.
Nghiên cứu tìm hiểu một số dạng tấn cơng SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
PHỤ LỤC
Dưới đây là một số các thủ tục, hàm chính được xây dụng trong chương trình.
1> Thủ tục kết nối cơ sở dữ liệu SQL Server
Public Function connect_SQLServer(sServer As String, sUsr As String, sPwd As String, DBDefault As String, WindowsAuthentication As Boolean) As Boolean
Dim Provider As String Dim sDefDb As String On Error GoTo MyErr
connect_SQLServer = False bOK = False
Provider = "Provider=SQLOLEDB.1;" sDefDb = "QuanLyTinNhan"
If WindowsAuthentication = True Then
Provider = Provider & "Integrated Security=SSPI;" Provider = Provider & "Persist Security Info=False;" Else
Provider = Provider & " Password=" & sPwd & ";User ID=" & sUsr & ";"
Provider = Provider & "Persist Security Info=True;" End If
Nghiên cứu tìm hiểu một số dạng tấn cơng SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
If sDefDb <> "" Then
Provider = Provider & "Initial Catalog=" & sDefDb & ";" End If
Provider = Provider & "Data Source=" & sServer & ";" cn.CursorLocation = adUseClient
'sqlenc.CommandTimeout = 30 * 2 If cn.State = 1 Then cn.Close cn.Open Provider connect_SQLServer = True cSERVER = sServer cUSER = sUsr bOK = True Exit Function MyErr: cSERVER = "" cUSER = "" bOK = False
MsgBox Err.Description, , "Thong bao" End Function
2> Thủ tục thực hiện lưu thông tin cá nhân
Thủ tục thực hiện xây dựng câu truy vấn Private Sub chkDemo_Click()
Nghiên cứu tìm hiểu một số dạng tấn công SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
Dim sGioitinh As String Dim sNgaysinh As String Dim sDiachi As String Dim sSQL As String
On Error GoTo MyErr
sTen = Trim(cboTen.List(cboTen.ListIndex())) sNgaysinh = Trim(txtNgaySinh.Text)
If sNgaysinh = "" Or IsDate(sNgaysinh) = False Then
MsgBox "Ngay sinh nhap sai", vbOKOnly + vbExclamation, "Thong bao"
Exit Sub End If
sGioitinh = cboGioiTinh.List(cboGioiTinh.ListIndex) sDiachi = Trim(txtDiachi.Text)
sSQL = "exec [QuanLyTinNhan].[dbo].[sp_ThemNguoidung] '" & sTen & "', '" & sNgaysinh & "', '" & sGioitinh & "', '" & sDiachi & "'"
txtTruyvan.Text = sSQL
If chkDemo.Value = 1 Then fraDemo.Visible = True Me.Height = 6375 Else
Nghiên cứu tìm hiểu một số dạng tấn cơng SQL Injection vào hệ quản trị CSDL Microsoft SQL Server fraDemo.Visible = False Me.Height = 4815 End If bTiep = True Exit Sub MyErr:
MsgBox Err.Description, vbOKOnly + vbExclamation, "Thong bao" End Sub
Thủ tục thực hiện ghi thông tin cá nhân
Private Sub cmdOK_Click() Dim sTen As String
Dim sGioitinh As String Dim sNgaysinh As String Dim sDiachi As String Dim sSQL As String
On Error GoTo MyErr bTiep = False
chkDemo.Value = 0 chkDemo_Click
If bTiep = False Then Exit Sub
sSQL = txtTruyvan.Text cn.Execute sSQL
Nghiên cứu tìm hiểu một số dạng tấn công SQL Injection vào hệ quản trị CSDL Microsoft SQL Server cboTen.ListIndex = 0 txtNgaySinh.Text = "" cboGioiTinh.ListIndex = 0 txtDiachi.Text = "" txtTruyvan.Text = "" Exit Sub MyErr:
MsgBox Err.Description, vbOKOnly + vbExclamation, "Thong bao" End Sub
3> Thủ tục hiển thi thông tin cá nhân
Private Sub Form_Load() Dim sSQL As String
On Error GoTo MyErr
sSQL = "exec sp_XemNguoiDung '" & cUSER & "'" txtTruyvan1.Text = sSQL
cmdTruyVan1_Click Me.Height = 4410 Exit Sub
MyErr:
Nghiên cứu tìm hiểu một số dạng tấn công SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
End Sub
Private Sub optType_Click(Index As Integer) Dim sSQL As String
On Error GoTo MyErr
Select Case Index Case 0
sSQL = "exec sp_XemNguoiDung '" & cUSER sSQL = sSQL & "'' OR 1=1--'"
txtTruyVan2.Text = sSQL
Case 1
sSQL = "exec sp_XemNguoiDung '" & cUSER sSQL = sSQL & "''; delete from tblNguoidung;--'" txtTruyVan2.Text = sSQL
Case 2
sSQL = "exec sp_XemNguoiDung '" & cUSER
sSQL = sSQL & "''; update tblNguoidung set [Diachi]=''Du lieu bi thay doi'';--'"
txtTruyVan2.Text = sSQL
End Select
Nghiên cứu tìm hiểu một số dạng tấn cơng SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
MyErr:
MsgBox Err.Description, vbOKOnly + vbExclamation, "Thong bao"
End Sub
Private Sub cmdTruyVan1_Click() Dim sSQL As String
On Error GoTo MyErr sSQL = txtTruyvan1.Text Set rs = cn.Execute(sSQL)
Set grdNguoidung.DataSource = rs Exit Sub
MyErr:
MsgBox Err.Description, vbOKOnly + vbExclamation, "Thong bao" End Sub
Private Sub cmdTruyVan2_Click() Dim sSQL As String
On Error GoTo MyErr
sSQL = txtTruyVan2.Text Set rs = cn.Execute(sSQL)
Set grdNguoidung.DataSource = rs Exit Sub
Nghiên cứu tìm hiểu một số dạng tấn cơng SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
MyErr:
MsgBox Err.Description, vbOKOnly + vbExclamation, "Thong bao" End Sub
4> Thủ tục thực hiện gửi tin nhắn
Private Sub Form_Load() Dim sSQL As String
On Error GoTo MyErr
sSQL = "sp_TenNguoiDung" Set rs = cn.Execute(sSQL)
If rs Is Nothing Then Exit Sub
If rs.RecordCount <= 0 Then Exit Sub cboNguoiNhan.Clear
rs.MoveFirst
Do While Not rs.EOF
cboNguoiNhan.AddItem rs.Fields(1).Value rs.MoveNext Loop cboNguoiNhan.ListIndex = 0 Exit Sub MyErr:
Nghiên cứu tìm hiểu một số dạng tấn công SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
MsgBox Err.Description, vbOKOnly + vbExclamation, "Thong bao" End Sub
Private Sub cmdOK_Click() Dim sTen As String
Dim sTieuDe As String Dim sNoidung As String Dim sSQL As String
On Error GoTo MyErr
sTen = Trim(cboNguoiNhan.List(cboNguoiNhan.ListIndex())) sTieuDe = Trim(txtTieuDe.Text)
sNoidung = Trim(txtNoidung.Text)
sSQL = "exec sp_ThemTinNhan '" & cUSER & "','" & sTen & "','" & sTieuDe & "','" & sNoidung & "'"
cn.Execute sSQL cboNguoiNhan.ListIndex() = 0 txtTieuDe.Text = "" txtNoidung.Text = "" Exit Sub MyErr:
MsgBox Err.Description, vbOKOnly + vbExclamation, "Thong bao" End Sub
Nghiên cứu tìm hiểu một số dạng tấn công SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
Private Sub Form_Load() Dim sSQL As String On Error GoTo MyErr
sSQL = "exec sp_XemChiTiet '" & cUSER & "'" txtTruyvan1.Text = sSQL
cmdTruyVan1_Click chkInjection.Value = 0
Exit Sub MyErr:
MsgBox Err.Description, vbOKOnly + vbExclamation, "Thong bao"
End Sub
Private Sub chkInjection_Click() Dim sSQL As String
Dim sInject As String Dim bHien As Boolean
If chkInjection.Value = 1 Then bHien = True Else bHien = False End If txtTruyVan2.Visible = bHien
Nghiên cứu tìm hiểu một số dạng tấn cơng SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
cmdTruyVan2.Visible = bHien
sSQL = "exec sp_XemChiTiet '" & cUSER sSQL = sSQL & "'' OR 1=1--'"
txtTruyVan2.Text = sSQL
End Sub
Private Sub cmdTruyVan1_Click() Dim sSQL As String
On Error GoTo MyErr sSQL = txtTruyvan1.Text Set rs = cn.Execute(sSQL)
Set grdNguoidung.DataSource = rs Exit Sub
MyErr:
MsgBox Err.Description, vbOKOnly + vbExclamation, "Thong bao"
End Sub
Private Sub cmdTruyVan2_Click() Dim sSQL As String
On Error GoTo MyErr sSQL = txtTruyVan2.Text Set rs = cn.Execute(sSQL)
Nghiên cứu tìm hiểu một số dạng tấn cơng SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
Exit Sub
MyErr:
MsgBox Err.Description, vbOKOnly + vbExclamation, "Thong bao" End Sub
Nghiên cứu tìm hiểu một số dạng tấn công SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
TÀI LIỆU THAM KHẢO
[1] Classification of SQL Injection Attacks and Countermeasures William G.J. Halfond, Jeremy
[2] Advanced SQL Injection In SQL Server Applications by Chris Anley [3] Transparent Data Encryption- Solution for Security of Database Contents
[4] Walters, Christian Kirisch, “Database Encryption and key management for Microsoft SQL Server 2008”, by Create Space, January 2010 Viegas, and Alessandro Orso College of Computing Georgia Institute of Technology
[5] The Database Hacker's Handbook: Defending Database Servers by David Litchfield