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