Đồ án Phương pháp tấn công vào trang web và cách phồng chống, xây dựng ứng dụng demo sql injection

Tài liệu Đồ án Phương pháp tấn công vào trang web và cách phồng chống, xây dựng ứng dụng demo sql injection: MỞ ĐẦU Ngày nay, khi Internet được phổ biến rộng rãi ,các tổ chức đều có nhu cầu giới thiệu thông tin của mình trên xa lộ thông tin cũng như thực hiện các phiên giao dịch trực tuyến. Vấn đề nảy sinh là vi phạm ứng dụng của các ứng dụng web ngày càng mở rộng thì khả năng xuất hiện lỗi và bị tấn công càng cao, trở thành đối tượng cho nhiều người tấn công với các mục đích khác nhau. Đôi khi cũng chỉ đơn giản là để thử tài hoặc đùa bởn với người khác. Cùng với sự phát triển không ngừng của Internet và các dịch vụ trên Internet, số lượng dịch vụ tấn công trên Internet cũng tăng theo cấp số nhân. Trong khi các phương tiện thông tin đại chúng ngày càng nhắc nhiều đến những khả năng truy cập thông tin của Internet, thì các tài liệu chuyên môn bắt đầu đề cập đến nhiều vấn đề bảo đảm và an toàn dữ liệu cho các máy tính kết nối vào mạng Internet. Vì thế vấn đề bảo đảm và an toàn dữ liệu cho các máy tính được kết nối vào mạng Internet là cần thiết nhằm mục đích bảo vệ dữ liệu, bảo vệ thông tin...

doc65 trang | Chia sẻ: haohao | Lượt xem: 3072 | Lượt tải: 3download
Bạn đang xem trước 20 trang mẫu tài liệu Đồ án Phương pháp tấn công vào trang web và cách phồng chống, xây dựng ứng dụng demo sql injection, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
MỞ ĐẦU Ngày nay, khi Internet được phổ biến rộng rãi ,các tổ chức đều có nhu cầu giới thiệu thông tin của mình trên xa lộ thông tin cũng như thực hiện các phiên giao dịch trực tuyến. Vấn đề nảy sinh là vi phạm ứng dụng của các ứng dụng web ngày càng mở rộng thì khả năng xuất hiện lỗi và bị tấn công càng cao, trở thành đối tượng cho nhiều người tấn công với các mục đích khác nhau. Đôi khi cũng chỉ đơn giản là để thử tài hoặc đùa bởn với người khác. Cùng với sự phát triển không ngừng của Internet và các dịch vụ trên Internet, số lượng dịch vụ tấn công trên Internet cũng tăng theo cấp số nhân. Trong khi các phương tiện thông tin đại chúng ngày càng nhắc nhiều đến những khả năng truy cập thông tin của Internet, thì các tài liệu chuyên môn bắt đầu đề cập đến nhiều vấn đề bảo đảm và an toàn dữ liệu cho các máy tính kết nối vào mạng Internet. Vì thế vấn đề bảo đảm và an toàn dữ liệu cho các máy tính được kết nối vào mạng Internet là cần thiết nhằm mục đích bảo vệ dữ liệu, bảo vệ thông tin doanh nghiệp, người dùng và bảo vệ hệ thống. Tuy đã có nhiều cố gắng từ các nhà lập trình Web nhưng vẫn không thể đảm bảo ngăn chặn toàn bộ vì công nghệ Web đang phát triển nhanh chóng (chủ yếu chú trọng đến yếu tố thẩm mỹ, yếu tố tốc độ,…) nên dẫn đến nhiều khuyết điểm mới phát sinh. Sự tấn công không nằm trong một vài khuôn khổ mà linh động và tăng lên tùy vào những sai sót của nhà quản trị hệ thống cũng như của những người lập trình ứng dụng. Vì vậy, đề tài này được thực hiện với mục đích tìm hiểu, phân tích các lỗ hổng bảo mật trong các ứng dụng Web. * Mục tiêu và nhiệm vụ - Tìm hiểu các vấn đề liên quan đến hoạt động của một ứng dụng Web. - Tìm hiểu các kỹ thuật tấn công ứng dụng Web cơ bản như: XSS, Session, DOS. - Tìm hiểu và nghiên cứu cụ thể kỹ thuật tấn công chèn câu truy vấn SQL Injection và các giải pháp phòng ngừa. - Xây dựng ứng dụng Web Demo thể hiện các cách tấn công của kỹ thuật SQL Injection và đưa ra giải pháp fix các lỗ hổng trong chương trình. - Kết quả thực hiện: nắm rõ bản chất và cách thức tấn công vào ứng dụng Web, áp dụng vào thực tế để hạn chế thấp nhất khả năng bị tấn công các ứng dụng Web sẽ triển khai. * Đối tượng và phạm vi nghiên cứu - Cở sở lý thuyết liên quan của hoạt động ứng dụng Web. - Các mô hình tấn công đặc trưng vào ứng dụng Web. - Kỹ thuật vượt qua cửa sổ đăng nhập. - Kỹ thuật lợi dụng các câu lệnh Select, Insert. - Kỹ thuật dựa vào các Stored Procedure. - Các giải pháp phòng ngừa ở mức quản trị và người lập trình ứng dụng. - Ngôn ngữ ASP.NET, SQL Server 2005. * Phương pháp nghiên cứu - Tổng hợp tìm hiểu, nghiên cứu từ các tư liệu liên quan. - Phân tích, đánh giá các kỹ thuật tấn công. Đưa ra các giải pháp phòng ngừa ở các mức. - Thiết kế table cơ sở dữ liệu, xây dựng ứng dụng Web Demo thể hiện các cách tấn công của SQL Injection. * Ý nghĩa thực tiễn của đề tài - Về mặt lý thuyết, đề tài thể hiện rõ các cách tấn công cơ bản thường được hacker sử dụng để tấn công vào các ứng dụng Web từ trước đến nay, và có thể sử dụng tiếp trong thời gian dài trong tương lai. - Về mặt thực tiển, với các cách tấn công của hacker như đã tìm hiểu, nghiên cứu trong báo cáo này, nếu áp dụng tốt các phương pháp phòng ngừa trong đề tài nêu ra sẽ góp phần nâng cao khả năng bảo vệ các ứng dụng Web trước nguy cơ tấn công của kẽ xấu. * Bố cục của báo cáo đồ án tốt nghiệp Báo cáo tốt nghiệp được chia thành 3 chương: - Chương 1: TỔNG QUAN VỀ WEB VÀ CÁC NGUY CƠ TẤN CÔNG ỨNG DỤNG WEB - Chương 2: MỘT SỐ PHƯƠNG PHÁP TẤN CÔNG VÀO TRANG WEB VÀ CÁCH PHỒNG CHỐNG - Chương 3: XÂY DỰNG ỨNG DỤNG DEMO SQL INJECTION CHƯƠNG 1 TỔNG QUAN VỀ WEB VÀ CÁC NGUY CƠ TẤN CÔNG ỨNG DỤNG WEB 1.1 TỔNG QUAN VỀ WEB 1.1.1 Khái niệm ứng dụng Web Ứng dụng Web là một ứng dụng chủ, khách sử dụng giao thức HTTP để tương tác với người dùng hay hệ thống khác. Trình khách dành cho người sử dụng thường là một trình duyệt web như Internet Explorer hay Netscape Navigator. Cũng có thể là một chương trình đóng vai trò đại lý người dùng hoạt động như một trình duyệt tự động. Người dùng gửi và nhận các thông tin từ trình chủ thông qua việc tác động vào các trang Web. Các chương trình có thể là các trang trao đổi mua bán, các diển đàn ,gửi nhận e-mial… Tốc độ phát triển của các kỹ thuật xây dựng ứng dụng web cũng phát triển rất nhanh. Trước đây những ứng dụng web thường được xây dựng bằng CGI (Common Gateway Interface) được chạy trên các trình chủ Web và có thể kết nối vào các cơ sở dữ liệu đơn giản trên cùng máy chủ. Ngày nay, ứng dụng web thường được viết bằng Java và chạy trên máy chủ phân tán, kết nối đến nhiều nguồn dữ liệu. Dù có nhiều biến thể, một ứng dụng Web thông thường được cấu trúc như một ứng dụng ba lớp: Hình 1.1 Một số ứng dụng web thường có kiến trúc Lớp trình bày: Lớp này có nhiệm vụ hiển thị dữ liệu cho người dùng, ngoài ra còn có thể có thêm các ứng dụng tạo bố cục cho trang web. Lớp ứng dụng: Là nơi xử lý các ứng dụng web. Nó sẽ xử lý thông tin người dùng yêu cầu, đưa ra quyết định, gửi kết quả đến “lớp trình bày” lớp này thường được cài đặt bằng các kỹ thuật lập trình như CGI, Java, NET, PHP hay ColdFusion, được triển khai trên các trình chủ như IBM WebSphere, WebLogic, Apache, IIS… Lớp dữ liệu : thường là các hệ quản trị dữ liệu (DBMS) chịu trách nhiệm quản lý các file dữ liệu và quyền sử dụng. Hình 1.2 Mô hình hoạt động của một ứng dụng Web Kiến trúc một ứng dụng Web Trong đó : Trình duyệt: Internet Explorer, Nétcap Navigator Trình chủ : Apache, IIS…. Hệ quản trị cơ sỡ dữ liệu : SQL, Server, MySQL, DB2, Access… Bên cạnh đó, một gải pháp dùng để bảo vệ một hệ thống mạng thường được sử dụng là bức tường lửa, nó có vai trò như là lớp rào chắn bên ngoài một hệ thống mạng vì chức năng chính của firewall là kiểm soát luồng thông tinh giữa các máy tính. Có thể xem là firewall như một bộ lộc thông tin, nó xác định cho phép một máy tính này được truy xuất đến một máy tính khác hay không, hay một mạng này có được truy xuất đến mạng kia hay không. Người ta thường dùng firewall vào mục đích: Cho phép hoặc cấm những dịch vụ truy xuất ra ngoài. Cho phép hoặc cấm những dịch vụ từ ngoài truy nhập vào trong. Kiểm soát địa chỉ truy nhập, cấm địa chỉ truy nhập. 1.1.2 Các vấn đề liên quan đến ứng dụng Web 1.1.2.1 Nguồn gốc phát triển ứng dụng Web Các ứng dụng Web được phát triển từ nhiều nguồn khác nhau, nên các lỗ hổng, các lỗi bảo mật cũng rất đa dạng. Tuy vậy, các ứng dụng Web chủ yếu được phát triển từ các nguồn chính sau đây: Người lập trình tự phát triển ứng dụng Web (Sử dụng các ngôn ngữ kịch bản để tạo ứng dụng, phát triển rộng rãi mà ít quan tâm đến quá trình phát triển ứng dụng an toàn. Thiếu đội ngũ lập trình với kỹ năng nhận biết phát triển ứng dụng tránh các lỗi bảo mật). Sử dụng ứng dụng Web từ mã nguồn mở (Thường không theo dõi và cập nhật các bản vá lỗi bảo mật). Phát triển ứng dụng Web từ một ứng dụng mở khác (Trường hợp này thường không kiểm tra lỗi bảo mật ứng dụng củ trước khi phát triển tiếp, nên vẫn tồn tại các lỗi bảo mật). 1.2.1.2 Sự phát triển đa dạng của ứng dụng Web Ngày nay với sự phát triển không ngừng của Internet, các ứng dụng Web cũng phát triển đa dạng trên nhiều lĩnh vực: Cổng thông tin điện tử, báo tin tức điện tử, giao dịch tài chính ngân hàng, thị trường chứng khoán, trang thông tin điện tử doanh nghiệp,… 1.1.3 Mô tả hoạt động của ứng dụng Web Đầu tiên trình duyệt sẽ gửi một yêu cầu (request) đến trình chủ Web thông qua các lệnh cơ bản GET, POST….của giao thức HTTP, trình chủ lúc này có thể cho thực thi một chương trình được xây dựng từ nhiều ngôn ngữ như: C,C++,java… hoặc trình chủ yêu cầu bộ diển dịc thực thi các trang ASP, JSP…theo yêu cầu của trình khách. Tùy theo các tác vụ của chương trình được cài đặt mà nó xử lý, tính toán kết nối đến cơ sở dữ liệu, lưu các thông tin do trình khách gữi đến… và từ đó trả về cho trình khách 1 luồng dữ liệu cố định dạng theo giao thức HTTP nó gồm 2 phần: Header mô tả các thông tin về gói dữ liệu và thuộc tính, trạng thái trao đổi giữa trình duyệt và WebServer. Body là phần nội dung dữ liệu mà Server gữi về Client,nó có thể là một file HTML, một hình ảnh, một đoạn phim hay một văn bản bất kì. Theo mô hình ở hình với firewall, luồng thông tin giữa trình chủ và trình khách là luồng thông tin hợp lệ. Vì thế, nếu hacker tìm thấy vài lỗ hổng trong ứng dụng Web thì firewall không còn hữu dụng trong việc ngăn chặn hacker này. Do đó, các kĩ thuật tấn công vào một hệ thống mạng ngày nay đang dần tập trung vào những sơ suất (hay lổ hổng) trong quá trình tạo ứng dụng của những nhà phát triển Web hơn là tấn công trực tiếp và hệ thống mạng, hệ điều hành. Tuy nhiên, hacker cũng có thể lợi dụng các lổ hổng Web để mở rộng sự tấn công của mình vào các hệ thống không liên quan khác. 1.2 CÁC KHÁI NIỆM THUẬT NGỮ LIÊN QUAN 1.2.1 Hacker Hacker là một thuật ngữ dùng để chỉ 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ị 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 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). 1.2.2 Giao thức HTTP và HTTPS HTTP là chữ viết tắt từ HyperText Transfer Protocol (giao thức truyền tải siêu văn bản). Nó là giao thức cơ bản mà World Wide Web sử dụng. HTTP xác định cách các thông điệp (các file văn bản, hình ảnh đồ hoạ, âm thanh, video,…) được định dạng và truyền tải ra sao, và những hành động nào mà các Web server và các trình duyệt Web phải làm để đáp ứng các lệnh. Khi gõ một địa chỉ Web URL vào trình duyệt Web, một lệnh HTTP sẽ được gửi tới Web server để ra lệnh và hướng dẫn nó tìm đúng trang Web được yêu cầu và kéo về mở trên trình duyệt Web. Tóm lại, HTTP là giao thức truyền tải các file từ một Web server vào một trình duyệt Web để người dùng có thể xem một trang Web đang hiện diện trên Internet. HTTP là một giao thức ứng dụng của bộ giao thức TCP/IP (các giao thức nền tảng cho Internet). 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 của 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 là HTTP responses (trả lời). Thông thường một HTTP header gồm nhiều dòng, mỗi dòng dựa trên tham số và giá trị. Một số tham số có thể dùng trong cả header yêu cầu và header trả lời, còn số khác chỉ được dùng riêng trong từng loại. GET /tintuc/homnay.asp HTTP/1.1 Accept: */* Accept-Language: en-us Connection: Keep-Alive Host: localhost Referer: User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Accept-Encoding: gzip, deflate Dòng đầu là dòng yêu cầu cho biết phương thức yêu cầu (GET hoặc POST), địa chỉ yêu cầu (/tintuc/homnay.asp) và phiên bản HTTP . Tiếp theo là các tham số. Chẳng hạn như : Accept Language: cho biết ngôn ngữ dùng trong trang web. Host: cho biết địa chỉ của máy chủ. Referer: Cho biết địa chỉ của trang web tham chiếu tới. Header của HTTP request sẽ kết thúc bằng một dòng trống. HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Thu, 13 Jul 2000 05:46:53 GMT Content-Length: 2291 Content-Type: text/html Set-Cookie: ASPSESSIONIDQQGGGNCG=LKLDFFKCINFLDMFHCBCBMFLJ; path=/ Cache-control: private ... Dòng đầu là dòng trạng thái, để cho biết phiên bản HTTP được dùng, mã trạng thái (200) và trạng thái (OK) Tiếp theo là các tham số. Tiếp theo là một dòng trống để báo hiệu kết thúc header, tiếp theo là phần thân của HTTP response. HTTPS (Securety HTTP), là một sự kết hợp giữa giao thức HTTP và giao thức bảo mật SSL hay TLS cho phép trao đổi thông tin một cách bảo mật trên Internet. Các kết nối HTTPS thường được sử dụng cho các giao dịch thanh toán trên World Wide Web và cho các giao dịch nhạy cảm trong các hệ thống thông tin công ty, trong đó dữ liệu cần phải được an toàn. HTTPS không nên nhầm lẫn với Secure HTTP (S-HTTP) quy định trong RFC 2660. Theo hai khái niệm ở trên, ta có thể thấy nếu trang Web có địa chỉ bắt đầu bằng “ http:// ” thì có nghĩa rằng trang Web không an toàn. Nói cách khác, một người nào đó có thể nghe lén những gì trao đổi với trang Web và có thể lấy những dữ kiện gửi đi từ máy của bạn đến trang Web như tên tuổi, địa chỉ, số thẻ tín dụng,… Nhưng nếu địa chỉ của trang Web bắt đầu bằng “https:// ” thì điều này có nghĩa là liên lạc an toàn với server của trang Web và người ta không thể nghe lén và trộm những thông tin gửi đi. 1.2.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ạng thái làm việc giữa trình duyệt với trình chủ. Sự thiếu sót này đã gây khó khăn cho một số ứng dụng Web, bởi vì trình chủ không biết được trước đó trình duyệt đã có những trạng thái nào. Vì thế để giải quyết vấn đề này, ứng dụng web đưa ra một khái niệm phiên làm việc(Session). Còn SessionID là một chuỗi để chứng thực phiên làm việc. Một số trình chủ sẽ cung cấp một SessionID cho người dùng khi họ xem trang web trên trình chủ. Để duy trì phiên làm việc thì SesionID thường được lưu vào: Biến trên URL Biến ẩn form Cookie Phiên làm việc chỉ tồn tại trong một khoảng thời gian cho phép, thời gian này được cấu hình quy định tại trình chủ hay với ứng dụng thực thi. Trình chủ sẽ tự động giải phóng phiên làm việc để khôi phục lại tài nguyên của hệ thống. 1.2.4 Cookie Cookie là những phần dữ liệu nhỏ có cấu trúc được chia sẻ giữa trình chủ và trình duyệt giữa người dùng. Các Cookie được lưu trữ dưới dạ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 các thông tin về người dùng đã ghé thăm trang web và những vùng họ đi qua trong trang. Những thông tin này có thể bao gồm tên, định dạng người dùng, mật khẩu, sở thích, thói quen.. 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áy mình, tuy nhiên không phải lúc nào trình duyệt cũng hỗ trợ cookie, mà còn tùy thuộc vào người dùng có chấp nhận chuyện lưu trữ đó hay không. Ở những lần truy cập sau đến trang web đó, ứng dụng có thể dùng lại những thông tin trong cookie (như thông tin liên quan đến việc đăng nhập vào Yahoo Messenger..) mà người dùng không phải làm lại những thao tác đăng nhập hay phải cung cấp lại các thông tin khác. Persistent và Secure Persistent và Non-Secure Non-Persistent và Secure Non-Persistent và Non-Secure Persistent cookie được lưu trữ dưới dạng tập tin.txt (ví dụ trình duyệt Nestcape Navigator 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ột khoảng 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 từ trang web. Secure cookie chỉ có thể được gửi thông tin qua HTTPS (SSL). Non-Secure cookie có thể được gữi bằng hai giao thức HTTPS hay HTTP. Thực chất là đố với sercure cookie thì trình chủ sẻ cung cấp chế độ truyền bảo mật. Các thành phần của một cookie gồm : Domain Flag Path Secure Expiration Name Value www.redhat.com FALSE FALSE 1154029490 Apache 64.3.40.151.16 018996349247 409 Domain: Tên miền của trang web đã tạo cookie (ví dụ trên là www.redhat.com) 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 vị các địa chỉ có thể truy xuất cookie. 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á trị là “/” thì cookie có thể truy xuất đến tất cả địa chỉ thuộc miền trang web tạo cookie. Secure: 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ệ sẽ hiểu đây là non-persistent cookie và chỉ lưu trong bộ nhớ RAM và sẽ xóa nó khi trình duyệt bị đóng. Name: Tên biến (trong trường hợp này là Apache) 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 Máy trạm có thể lưu tối đa là 300 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. Các máy chủ không mong máy trạm vượt quá những giới hạn này. Khi giới hạn 300 cookie hoặc 20 cookie mỗi tên miền của máy chủ bị vượt quá, máy trạm sẽ xoá cookie được sử dụng ít nhất. 1.2.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 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 cần 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 server đến client. Vì vậy proxy server giống cầu nối trung gian giữa server và client. 1.2.6 Firewall Một giải pháp dùng để bảo vệ một hệ thống mạng thường được sử dụng là bức tường lửa - Firewall (hoạt động dựa trên gói IP do đó kiểm soát việc truy nhập của máy người sử dụng). Nó có vai trò như là lớp rào chắn bên ngoài một hệ thống mạng, vì chức năng chính của firewall là kiểm soát luồng thông tin giữa các máy tính. Có thể xem firewall như một bộ lọc thông tin, nó xác định và cho phép một máy tính này có được truy xuất đến một máy tính khác hay không, hay một mạng này có được truy xuất đến mạng kia hay không. Người ta thường dùng firewall vào mục đích: Cho phép hoặc cấm những dịch vụ truy xuất ra ngoài. Cho phép hoặc cấm những dịch vụ từ bên ngoài truy nhập vào trong. Kiểm soát địa chỉ truy nhập, cấm địa chỉ truy nhập. 1.3 SƠ LƯỢC VỀ QUÁ TRÌNH TẤN CÔNG CỦA HACKER 1.3.1 Các giai đoạn tấn công Quá trình tấn công của một hacker có thể được khái quát qua 3 giai đoạn: Thu thập thông tin. Phân tích và hành động. Dừng và xoá dấu vết. FootPrinting (In dấu ấn) Scanning (Quét mạng) Enumeration (Điểm danh mạng) Pilfering (Khai thác hệ thống) Privilege Escalation (Nâng quyền hệ thống) Gaining Access (Đột nhập hệ thống) Creating Backdoors (Tạo cổng hậu) Covering Tracks (Xoá dấu vết) Hình 1.3 Quá trình tấn công của hacker Giai đoạn 1: Thu thập thông tin Gồm 3 bước chính FootPrinting, Scanning, Enumeration. FootPrinting (In dấu chân): Là bước mà kẻ tấn công thu thập thông tin về đối tượng, người dùng, doanh nghiệp, các chi nhánh của công ty, máy chủ,… bao gồm các chi tiết Domain Name, Địa chỉ IP, Networking Prototcols, thông tin về người quản trị,…Đây là một bước quan trọng cho hacker ,đôi khi với những thông tin này hacker đã có thể làm chủ hệ thống. Công cụ hỗ trợ: Nslookup, Smart Whois, UseNet, Google Earth, Search engines (công cụ tìm kiếm), http:// www. archive. org Sanning (Quét thăm dò mạng): Phần lớn thông tin quan trọng từ server có được từ bước này. Xác định hệ điều hành, xác định hệ thống có đang chạy không, tìm hiểu các dịch vụ đang chạy hay đang lắng nghe, tìm hiểu các lỗ hổng, kiểm tra các cổng, xác định các dịch vụ sử dụng giao thức TCP và UDP,... Công cụ hổ trợ như LANGuard, xScan, NetScanToolsiNetToolsNmap. Enumeration (Điểm danh mạng - liệt kê tìm lỗ hổng): Đến đây, các attacker bắt đầu kiểm soát server sơ bộ. Bước này là tìm kiếm những tài nguyên được bảo vệ kém, hoặc tài khoản người dùng mà có thể sử dụng để xâm nhập, bao gồm các mật khẩu mặc định, các script và dịch vụ mặc định. Rất nhiều người quản trị mạng không biết đến hoặc không sửa đổi lại các giá trị này của thiết bị. Công cụ hỗ trợ: DumpSec, NbtScan, SuperScan, NetviewX, UserInfo,… Giai đoạn 2: Phân tích và hành động Gaining Access (Đột nhập hệ thống): Hacker sẽ tìm cách truy cập vào mạng bằng những thông tin có được ở ba bước trên. Phương pháp được sử dụng ở đây có thể là tấn công vào lỗi tràn bộ đệm, lấy và giải mã file password, hay brute force (kiểm tra tất cả các trường hợp) password, đột nhập qua các cổng mở,…Công cụ hỗ trợ: Password eavesdropping, Tcpdump, L0phtcrack, NAT, Pwdump2 (NT), Remote Buffer Overflows, Brute-force password attacks,… Privilege Escalation (Nâng quyền hệ thống): Trong trường hợp hacker xâm nhập đựợc vào mạng với một tài khoản nào đó, thì họ sẽ tìm cách kiểm soát toàn bộ hệ thống. Hacker sẽ tìm cách crack password của admin, hoặc sử dụng lỗ hổng để leo thang đặc quyền. Kẻ xâm nhập có thể truy cập vào các files hay folder dữ liệu mà tài khoản người sử dụng ban đầu không được cho phép truy cập. Khi hacker đạt được mức độ quyền truy cập đủ cao, họ có thể cài đặt phần mềm như là Backdoors và Trojan horses, cũng như cho phép truy cập sâu hơn và thăm dò. Mục đích chung của hacker là chiếm được quyền truy cập ở mức độ quản trị. Khi đã đạt được mục đích đó, họ có toàn quyền điều khiển hệ thống mạng. Công cụ hỗ trợ: L0phtcrack, Password cracking, BUG, Exploits. John và Riper là hai chương trình crack password rất hay được sử dụng. Có thể sử dụng Sniffer để bắt các gói tin, từ đó phân tích tìm ra mật khẩu. Pilfering (Khai thác hệ thống): Thông tin lấy từ bước trên đủ để hacker định vị server và điều khiển server. Nếu bước này không thành công, hãy đến bước DoS (Denial of Service). Công cụ hỗ trợ: Rhost, Configuration files, Registry, Telnet, Ftp,… Giai đoạn 3: Dừng và xoá dấu vết Creating Backdoors (Tạo cổng hậu): Để chuẩn bị cho lần xâm nhập tiếp theo được dễ dàng hơn. Hacker để lại Backdoors, tức là một cơ chế cho phép hacker truy nhập trở lại bằng con đường bí mật không phải tốn nhiều công sức khai phá, bằng việc cài đặt Trojan hay tạo user mới. Công cụ hỗ trợ: Ở đây là các loại Trojan, keylog, creat rogue user accounts, schedule batch jobs, replace apps with Trojan. VNC, BO2K, … Covering Tracks (Xoá dấu vết): Sau khi đã có những thông tin cần thiết, hacker tìm cách xoá dấu vết, xoá các file LOG của hệ điều hành (vì hệ thống luôn ghi nhận những hành động của người dùng) làm cho người quản lý không nhận ra hệ thống đã bị xâm nhập hoặc có biết cũng không tìm ra kẻ xâm nhập là ai. Công cụ hỗ trợ: Clear logs, Zap, Event log GUI, rootkits, file streaming, ... 1.3.2 Khảo sát ứng dụng Web Khi phạm vi ứng dụng của các Web application ngày càng phổ biến thì khả năng xuất hiện lỗi và bị tấn công càng cao. Trong các lĩnh vực hacking, hack Web application luôn là một công việc được hacker nhắm đến nhằm mục đích phục vụ một yêu cầu nào đó của họ hay để phá hoại. Trước hết hacker tiến hành thu thập thông tin ở mức trên về hạ tầng của mục tiêu. Thu thập một số thông tin quan trọng như có bao nhiêu server, mô hình của các Web server, các client nào sẽ tương tác với ứng dụng Web, kiểu giao tiếp thông tin (transport) và thông qua các cổng (port) nào, những site liên quan đến việc thực hiện chức năng của site mục tiêu, ... Tiếp đó hacker khảo sát ứng dụng Web: Một trong những phương pháp khảo sát khá phổ biến từ trước đến giờ, đó là xem mã nguồn và lợi dụng các lỗi cho phép xem mã nguồn các ngôn ngữ Web thông dụng hiện nay như Active Server Pages (ASP), Common Gateway Interface (CGI), ColdFusion Server (CFM), Hypertext Preprocessor (PHP). Sử dụng một số phép thử như thêm dấu ’ vào các url theo khuôn dạng truyền vào giá trị rất phổ biến, đưa vào những mẫu thử cơ bản của form xác thực đăng nhập để khảo sát các lỗi SQL Injection. Đưa vào các thông tin “lạ” ở các form ứng dụng Web hay trên url để xem các thông điệp chuyển xuống cho người dùng khi ứng dụng có lỗi. Các thông báo lỗi thông thường tiết lộ các chi tiết kỹ thuật có thể cho phép kẻ tấn công biết được điểm yếu của hệ thống. Sử dụng các công cụ để đưa các trang Web mục tiêu vào dò tìm các lỗi của người phát triển ứng dụng để từ đó xây dựng nên kịch bản tấn công và chọn cách tấn công cụ thể. Tìm hiểu sâu về các chức năng của ứng dụng Web. Tìm hiểu cách thực hiện của các phần trong ứng dụng, đặc biệt như các order input, confirmation, order tracking. Tìm hiểu luồng di chuyển của thông tin. Các thông tin tương tác giữa client và server, các thông tin tương tác với database. Hiện nay việc viết mã để thực hiện việc giao tiếp thông tin thường phải đảm bảo được tính hiệu quả (nhanh) và bảo mật (có thể sẽ chậm hơn). Thường thì tính hiệu quả được ưu tiên hơn do đó có thể sẽ phát sinh lỗi trong quá trình đó và giúp hacker có thể lợi dụng các lỗi để đoạt quyền điều khiển hệ thống. 1.3.3 Tấn công mục tiêu Việc thu thập thông tin là vấn đề quan trọng cho việc tấn công vào một hệ thống máy mục tiêu. Cho dù hacker tấn công theo phương diện phần cứng hay qua ứng dụng thì việc thu thập vẫn là cần thiết. Sau khi đã khảo sát và thu thập thông tin mục tiêu, hacker bắt đầu thực hiện tấn công nhằm xâm nhập vào hệ thống lấy thông tin, đưa thông tin xấu vào, dành quyền kiểm soát,… Có thể trong những bước đã nêu hacker không cần phải đi qua theo thứ tự hay qua hết, nhưng việc nắm rõ thông tin của máy mục tiêu luôn là điều kiện tiên quyết để dẫn đến thành công trong việc tấn công. Tùy vào thông tin thu thập được mà hacker sẽ quyết định tấn công theo kỹ thuật nào, xây dựng một kịch bản tấn công phù hợp. Một số kịch bản tấn công: Tấn công đồng loạt vào các trang tin điện tử thuộc Chính phủ, thành phố, bộ, sở ban ngành,… làm thay đổi nội dung, đưa thông tin sai lệch,… Tấn công vào các ứng dụng Web mua bán, giao dịch trực tuyến để đánh cắp thông tin cá nhân, thẻ tín dụng,… Tấn công ứng dụng Web, đặt mã độc tại trang Web, sử dụng máy chủ bị lỗi để thực hiện hành vi tấn công khác. Mục đích tấn công cơ bản của hacker trên các ứng dụng Web như sau: Tấn công với mục đích chính trị (tấn công các trang tin điện tử thuộc chính phủ, thành phố, các sở ban ngành,…). Tấn công với mục đích lợi nhuận (các trang thương mại điện tử, tài chính, ngân hàng, các doanh nghiệp, …). Tấn công với mục đích cá nhân. Hậu quả tấn công của hacker trên các ứng dụng Web: Dù tấn công dưới bất kỳ với mục đích gì thì hậu quả ảnh hưởng đều rất đáng kể, thiệt hại to lớn về uy tín, kinh tế, gây thiệt hại cho người dùng mạng, bị đánh cắp thông tin, có thể bị hacker lợi dụng để tấn công một tổ chức khác, tận dụng phát tán lừa đảo,… Nếu không thành công trong việc xâm nhập bằng các kỹ thuật phổ biến, thì Dos là cách thức mà hacker thường lựa chọn để làm cho hệ thống không thể hoạt động được. Do đó, việc bảo mật cho một hệ thống cần đòi hỏi sự kết hợp không chỉ của riêng nhà quản trị hệ thống mà còn của nhà thiết kế ứng dụng và sự hợp tác của cả những khách hàng sử dụng ứng dụng. CHƯƠNG 2 KỸ THUẬT TẤN CÔNG VÀO CÁC LỖ HỔNG TRÊN WEBSITE VÀ CÁCH PHÒNG CHỐNG 2.1 THỰC TRẠNG AN NINH MẠNG TẠI VIỆT NAM HIỆN NAY VÀ DỰ BÁO XU HƯỚNG AN NINH MẠNG NĂM 2011 2.1.1 Tình hình phát triển Internet tới Việt Nam đến tháng 1/2011 Tại Việt Nam, nhiều doanh nghiệp phải đối mặt với việc hình thành và lan tràn nhiều biến thể virut mới, tấn công trên mạng ngày càng nở rộ với mục đích vụ lợi cá nhân cũng như mục đích kinh tế, thậm chí ảnh hưởng đến hoạt động kinh doanh và an ninh quốc gia. Các website trong nước liên tiếp bị tấn công với mức độ phức tạp gia tăng mà điển hình là việc báo điện tử Vietnamnet bị tấn công nhiều lần và đánh sập vào ngày 22/11/2010. Hình thức lừa đảo trực tuyến các email bằng tiếng việt đã bắt đầu xuất hiện và phát tán rộng…đã đặt ra yêu cầu đối với sự nhận thức đúng đắn về mức độ cấp thiết, tối quan trọng của an ninh mạng, bảo mật thông tin. Mạng Internet Việt Nam còn tiềm ẩn rất nhiều những nguy cơ về mặt an ninh an toàn thông tin. Hàng loạt website lớn bị tấn công với mức độ phức tạp ngày càng gia tăng. Rất nhiều các website của các tổ chức, doanh nghiệp còn tồn tại các lỗ hổng an toàn thông tin. Nhiều lỗ hổng an toàn thông tin mới được phát hiện. Tội phạm mạng đang diễn ra với tốc độ nhanh hơn, quy mô hơn, tính chuyên nghiệp, trình độ kỹ thuật ngày càng cao hơn Số lượng các cuộc tấn công web tăng gấp đôi: Trong năm 2009, ở nước ta có hơn 1000 (1.037) website bị hacker tấn công, tăng hơn gấp đôi so với năm 2008 (461 website) và gấp ba lần so với năm 2007 (342 website). Trong 3 tháng đầu năm 2010 đã có hơn 300 website của các cá nhân và tổ chức có tên miền .vn bị các hacker nước ngoài thăm dò, tấn công. Tính đến cuối quý I/2011, số người sử dụng Internet tại Việt Nam đạt 27.559.006 người, chiểm 31,9 % dân số;  số thuê bao internet trên cả nước ước tính đạt 3,8 triệu thuê bao. Đa số các doanh nghiệp và các tổ chức có hệ thống mạng và website giới thiệu, quảng bá thương hiệu (191.667 tên miền .vn và hàng triệu tên miền thương mại). Có rất nhiều doanh nghiệp đã ứng dụng thanh toán trực tuyến vào công việc kinh doanh, giao dịch,… Các website bị tấn công chủ yếu là các website kinh doanh trực tuyến, ngân hàng, các tổ chức cung cấp dịch vụ ,…( Nguyên nhân: chủ yếu là sự yếu kém trong quản trị website và không thường xuyên kiểm soát lỗ hổng, ít quan tâm đếncác cảnh báo an ninh của các cơ quan, tổ chức có chức năng đảm bảo an ninh an toàn thông tin quốc gia Rất nhiều website trong nước tồn tại các lỗ hổng an toàn thông tin ở mức độ nguy hiểm cao. Đa số các trang web lớn của Việt Nam đều có lỗ hổng bảo mật và có thể bị chiếm quyền điều khiển. Hiện nay, trên mạng Internet Việt Nam có đến 90% các website được xây dựng trên công nghệ ASP.NET và sử dụng dịch vụ IIS 6.0, đây là lỗ hổng lớn nhất và vẫn chưa được khắc phục. Trong năm 2010 đã ghi nhận hơn 1000 website ở nước ta bị tấn công từ các lỗ hổng đang tồn tại trên các website và các lỗ hổng trên các máy chủ hệ thống. Các website của các tổ chức tài chính, ngân hàng, chứng khoán vẫn tồn tại rất nhiều lỗ hổng. Các hành vi phạm tội vẫn là: Dùng thủ đoạn Phishing, trojan horse, spyware để lấy cắp địa chỉ email, thông tin thẻ tín dụng và thông tin cá nhân như tên, địa chỉ,số điện thoại, số thẻ an ninh xã hội, thông tin giấy phép lái xe… Mua bán thông tin thẻ tín dụng trên mạng internet. Trộm cắp tiền từ thẻ tín dụng và tài khoản, làm thẻ tín dụng giả rút tiền từ máy ATM. Rửa tiền: chuyển tiền từ tài khoản trộm cắp được sang tài khoản e-money tại e-gold, e-passport. Lừa đảo qua quảng cáo, bán hàng trực tuyến trên mạng internet, trong hoạt động thương mại điện tử,trong mua bán ngoại tệ,cổ phiếu qua mạng, đánh bạc và rửa tiền, thực hiện hành vi trốn thuế. Buôn bán ma túy, mại dâm qua mạng internet, truyền bá khiêu dâm trên mạng, thực hiện các hoạt động khủng bố, phá hoại, ... 2.1.2 Các cuộc tấn công của hacker và những thiệt hại mà nó gây ra hiện nay tại Việt Nam Trong hai năm trở lại đây, khủng hoảng kinh tế nên bọn tội phạm vẫn nhằm vào các hệ thống Công Nghệ Thông Tin của lĩnh vực tài chính ngân hàng, với mục tiêu kiếm được nhiều tiền hơn, nên chúng có xu hướng hoàn thiện kỹ thuật tấn công để tấn công các mục tiêu này và chúng đã thành công ở một số hệ thống. Trong năm 2009, chỉ tính riêng hơn 40 vụ án công nghệ cao bị phanh phui, thiệt hại mà loại tội phạm này gây ra đã lên đến hàng ngàn tỉ đồng. Thiệt hại do lộ thông tin bí mật của các doanh nghiệp, tổ chức không có thể ước tính được. Các cơ quan chức năng đã phối hợp điều tra,truy tố xét xử một số vụ tấn công nghiêm trọng Vụ 2 đối tượng người Malaysia là Cham Tack Choi và Tan Wei Hong sử dụng thẻ tín dụng Visa, Master giả để thanh toán tại khách sạn Metropol (thanh toán số tiền hơn 500 triệu đồng). Ngày 8/01/2009, TAND Hà Nội đã tuyên phạt Cham Tack Choi (SN 1984) và Tan Wei Hong (SN 1981), quốc tịch Malaysia mỗi người 7 năm tù giamvề tội Trộm cắp tài sản. Tháng 10/2009: Vụ Nguyen Hoawrd quốctịch Mỹ, ArialFradin quốc tịch Canada vào Việt Nam đi du lịch đã dùng thẻ AMEX hết hạn, báo mất, khóa giao dịch ở ngân hàng phát hành rút tiền tại các máy ATM để chiếm đoạt. Nguyen Howard và đồng bọn đã rút 1,4 tỷ đồng, Arial Fardin đã rút 800 triệu Điều tra, khám phá những vụ án TPCNC Vụ Công ty Golden Rock: Trưởng Văn phòng đại diện của Công ty này tại mạng năm 2010 vẫn tiếp tục nóng bỏng, xuất hiện việc các cá nhân, tổ chức thuê hăcker điều hành mạng máy tính “Ma” để tấn công nhằm phá hủy hệ thống Công Nghệ Thông Tin của đối thủ cạnh tranh Và vụ mới đây nhất, Ngày 22/11/2010 là ngày đầu tiên hacker bắt đầu tấn công vào hệ thống website của báo Vietnamnet. Đây là cuộc tấn công với quy mô lớn, liên tục và kéo dài. Nó đã phá hủy hầu như gần hết cơ sở dữ liệu đã lưu trữ 10 năm của báo VietNamNet. Hình 2.1 Giao diện báo điện tử VietNamNet bị tấn công Lỗ hổng an ninh của các hệ thống ngày càng được phát hiện nhiều hơn. Số lượng các điểm yếu an ninh trong năm 2010 là 4.300 (năm 2009 là 3.500) có tới  30% lỗ hổng có mức độ nguy hiểm cao. Gần một nửa (49%) số lỗ hổng an ninh vẫn chưa có các bản vá do nhà cung cấp dịch vụ phát hành. Lỗ hổng liên quan đến phần mềm Adobe Acrobat PDF được phát hiện nhiều nhất. Ở nước ta vấn đề lỗ hổng của hệ thống, ứng dụng vẫn chưa được các quản trị hệ thống cập nhật các bản vá kịp thời. Thực trạng tấn công vào các website của hacker không mới so với những năm trước tuy nhiên đến nay các website tại Việt Nam vẫn chưa được đầu tư về nhân lực, kinh phí để được bảo vệ một cách tốt nhất. Nguyên nhân chủ yếu là sự yếu kém trong quản trị website và  không thường xuyên kiểm soát lỗ hổng, khoán trắng vấn đề bảo đảm  ATTT cho nơi đặt website, ít quan tâm đến các  cảnh báo an ninh của các cơ quan, tổ chức có chức năng đảm  bảo an ninh an toàn thông tin quốc gia. Tại Việt Nam, năm 2010, đã có gần 60 triệu lượt máy tính bị nhiễm virus. Trung bình một ngày có hơn 160.000 lượt máy tính bị nhiễm virus. Đây là con số đáng báo động về tình hình máy tính bị nhiễm virus nước ta. Đã có hơn 57.000 dòng virus mới xuất hiện. Virus lây lan nhiều nhất qua các máy tính vẫn là virus Conficker. Trong năm 2010, đã có tới 6,5 triệu lượt máy tính bị nhiễm loại virus này. Có hơn 1,4 triệu lượt máy tính đã bị nhiễm dòng virus giả mạo thư mục, giả mạo file ảnh, file word, excel...  Các virus siêu đa hình tiếp tục đứng trong top 3 những virus lây nhiễm nhiều nhất trong năm và là nỗi ám ảnh với người sử dụng máy tính tại Việt Nam. Với khả năng “thay hình đổi dạng” để lẩn trốn, 2 dòng virus Vetor và Sality đã lan truyền trên 5,9 triệu lượt máy tính. Có thể nói, chính sự chủ quan, hạn chế trong nhận thức, thiếu hụt về đầu tư an ninh thông tin (ANTT) của các doanh nghiệp, người sử dụng đã tạo tiền đề cho sự gia tăng các mối đe dọa và nguy cơ bảo mật. Vấn đề ANTT có tầm quan trọng sống còn đối với các doanh nghiệp, đặc biệt khi các giao dịch trực tuyến đã trở nên ngày càng phổ biến hơn tại Việt Nam. Lời khuyên của tôi là không nên cắt giảm ngân sách cho an ninh bảo mật mà thay vì đó cần phải đầu tư vào đó một cách khôn ngoan hơn. 2.1.3 Dự báo xu hướng an ninh mạng năm 2011 An ninh mạng năm 2011 vẫn tiếp tục nóng bỏng, xuất hiện việc các cá nhân, tổ chức thuê hacker điều hành mạng máy tính “Ma” để tấn công nhằm phá hủy hệ thống CNTT của đối thủ cạnh tranh. Kỹ thuật tấn công tinh vi hơn, hoàn hảohơn; mã độc ngày càng “độc” hơn… sẽ tiếp tục đặ tra những thách đố mới cho năm 2010. Kinh tế càng khủng hoảng, tin tặc càng tìm cách xoay sở kiếm tiền, hoạt động cuả gới tội phậm công nghệ cao sẽ tinh vi hơn, thủ đoạn hơn để làm sao kiếm được nhiều tiền. Mạng xã hội (Twiter, spacebook,..) đang phát triển mạnh mẽ không chỉ là trào lưu nhất thời, đã trở thành một nền tảng mới rất hiệu quả giúp con người giao tiếp, liên lạcvới nhau. Đây chính là một môi trường thuậnlợi để giới tội phạm công nghệ cao thử nghiệm các thủ đoạn, kỹ thuật tấn công đe dọa an ninh mạng. Tiếp tục xuất hiện nhiều chương trình diệt virus giả. Hình thành nhiều mạng máy tính Ma (bootnet) được điều khiển bởi các hăcker có chuyên môn cao, có nguy cơ xuất hiện các cuộc chiến lớn trên mạng (chiến tranh mạng). Điện toán đám mây sẽ là đích nhắm mới của giới tội phạm, đặc biệt là khi mạng 3G bắt đầu được đưa vào hoạt động tại ViệtNam. Việc sử dụng thiết bị di động không dây Apple có dấu hiệu bùng nổ tại Việt Nam, trong khi đó Apple chưa có giải pháp đảm bảo an toàn cho các dịch vụ của thiết bị này, do vậy Apple có thể sẽ là một mục tiêu quan tâm mới của giới tội phạm mạng. Virus đa hình và Thư rác tin nhắn tức thời (IM) ngày càng phức tạp. Rootkit là một bộ công cụ phần mềm do kẻ xâm nhập đưa vào máy tính nhằm mục đích cho phép mình quay lại xâm nhập máy tính đó và dùng nó cho các mục đích xấu mà không bị phát hiện. Đây sẽ là một xu hướng mới khi đã trở thành công cụ “đại chúng hóa” chứ không còn là “đặc quyền” của một số tin tặc “biết nghề” như trước. Các dòng virus siêu đa hình sẽ kết hợp nhiều kỹ thuật mới để tạo ra những sự lây lan dai dẳng kéo dài trong nhiều năm. Cùng sự phổ biến của Windows 7 với khả năng đảm bảo an ninh cao và mọi quyết định thực thi quan trọng trên máy tính sẽ thuộc về người sử dụng, xu hướng virus đánh lừa người sử dụng bằng cảm quan sẽ phát triển mạnh. Trường hợp các virus giả mạo file dữ liệu (Fake icon) là những biểu hiện đầu tiên và xu hướng này sẽ tiếp tục trong năm 2011. Sẽ có nhiều cuộc tấn công, lừa đảo trên điện thoại di động trong năm 2011. Có thể sẽ ghi nhận những cuộc phát tán mã độc đầu tiên trên điện thoại di động, với hình thức tấn công chủ yếu dưới dạng các trojan, ẩn náu và ăn cắp thông tin cá nhân. 2.2 MỘT SỐ KỸ THUẬT TẤN CÔNG CỦA HACKER VÀO LỖ HỎNG TRÊN TRANG WEB VÀ BIỆN PHÁP PHÒNG CHỐNG 2.2.1 Tấn công chèn câu truy vấn SQL Injection 2.2.1.1 SQL Injection là gì? Khi triển khai các ứng dụng web trên Internet, nhiều người vẫn nghĩ rằng việc đảm bảo an toàn, bảo mật nhằm giảm thiểu tối đa khả năng bị tấn công từ các tin tặc chỉ đơn thuần tập trung vào các vấn đề như chọn hệ điều hành, hệ quản trị cơ sỡ giữ liệu, webserver sẽ chạy ứng dụng… mà quên mất rằng ngay cả bản thân ứng dụng chạy trên đó cũng tiềm ẩn một lổ hổng bảo mật rất lớn. Một trong số các lổ hổng này đó là SQL injection. Tại Việt Nam, đã qua thời kì các quản trị website lơ là việc quét virus, cập nhật các bản vá lỗi từ các phần mềm hệ thống, nhưng việc chăm sóc các lỗi của các ứng dụng lại rất ít được quan tâm. Đó là lý do tại sao trong thời gian vừa qua, không ít website tại Việt Nam bị tấn công và đa số đều là lỗi SQL injection. Vậy SQL injection là gì? SQL injection là 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à nó ứ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 lý bằng các hệ quản trị cơ sở dữ liệu như SQL Server, MySQL, Oracle, DB2, Sysbase. 2.2.1.2 Các dạng tấn công SQL Injection Có bốn dạng thông thường bao gồm : vượt qua kiểm tra lúc đăng nhập (authorization bypass), sử dụng câu lệnh SELECT, sử dụng câu lệnh INSERT, sử dụng các stored-procedures [2],[3]… a. Dạng tấn công vượt qua kiểm tra đăng nhập 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 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. Trong trường hợp này người ta có thể dùng hai trang, một trang HTML để hiển thị form nhập liệu và một trang ASP dùng để xử lý thông tin nhập từ phía người dùng. Ví dụ: login.htm Username: Password: execlogin.asp <% Dim vUsrName, vPassword, objRS, strSQL vUsrName = Request.Form("fUSRNAME") vPassword = Request.Form("fPASSWORD") strSQL = "SELECT * FROM T_USERS " & _ "WHERE USR_NAME=' " & vUsrName & _ " ' and USR_PASSWORD=' " & vPassword & " ' " Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN=..." If (objRS.EOF) Then Response.Write "Invalid login." Else Response.Write "You are logged in as " & objRS("USR_NAME") End If Thoạt nhìn, đoạn mã trong trang execlogin.asp 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 từ người dùng để 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 sẽ được thực hiện. Ví dụ, nếu người dùng nhập chuổi sau vào trong 2 ô nhập liệu username/password của trang login.htm là: ‘OR’ ’= ’. Lúc này, câu truy vấn sẽ được gọi thực hiện là:SELECT*FROM T_USERS WHERE USR_NAME=”OR”=”and USR_PASSWORD=”OR”=” Câu truy vấn này hợp lệ và sẽ trả về tất cả các bản ghi T_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ệ. b. Dạng tấn công sử dụng câu lệnh SELECT Dạng tấn công này phức tạp hơn. Để thực hiện được kiểu tấn công này, kẻ tấn công phải có khả năng hiểu và lợi dụng các sơ hở trong các thông báo lỗi từ hệ thống để dò tìm các điểm yếu khởi đầu cho cuộc tấn công. Xét ví dụ rất thường gặp trong các website về tin tức. Thông thường, sẽ có một trang nhận ID của tin cần hiển thị rồi sau đó truy vấn nội dung của tin có ID này. Ví dụ: Mã nguồn cho chức năng này thường được viết khá đơn giản theo dạng <% Dim vNewsID, objRS, strSQL vNewsID = Request("ID") strSQL = "SELECT * FROM T_NEWS WHERE NEWS_ID =" & vNewsID Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN=..." Set objRS = Nothing %> Trong các tình huống thông thường đoạn mã này hiển thị nội dung của tin có ID trùng với ID đã chỉ định và hầu như không thấy có lỗi. Tuy nhiên, giống như ví dụ đăng nhập ở trước, đoạn mã này để lộ sơ hở cho một lỗi SQL injection khác. Kẻ tấn công có thể thay thế một ID hợp lệ bằng cách gán ID cho một giá trị khác, và từ đó, khởi đầu cho một cuộc tấn công bất hợp pháp, Ví dụ như : 0 OR 1=1 (nghĩa là, ID=0 or 1=1) Câu truy vấn SQL lúc này sẽ trả về tất cả các article từ bảng dử liệu vì nó sẽ thực hiện câu lệnh: SELECT*FROM T_NEWS WHERE NEWS_ID=0 or 1=1 Một trường hợp khác , ví dụ như trang tìm kiếm. Trang này cho phép người dùng nhập vào các thông tin tìm kiếm như Họ, Tên,…Đoạn mã thường gặp là: <% Dim vAuthorName, objRS, strSQL vAuthorName = Request("fAUTHOR_NAME") strSQL = "SELECT * FROM T_AUTHORS WHERE AUTHOR_NAME =' " & _ vAuthorName & " ' " Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN=..." Set objRS = Nothing %> Tương tự như trên, tin tặc có thể lợi dụng sơ hở trong câu lệnh SQL để nhập các trường trên tác giả bằng chuổi giá trị : ‘UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE’’=’ (*) Lúc này, ngoài câu truy vấn đầu không thành công, chương trình sẽ thực hiện thêm lệnh tiếp theo sau từ khóa UNION nữa. Tất nhiên là các ví dụ nói trên, dường như không có gì nguy hiểm, nhưng hãy thử tưởng tượng kẻ tấn công có thể xóa toàn bộ cơ sở dữ liệu bằng cách chèn vào các đoạn lệnh nguy hiểm như DROP TABLE. Ví dụ như :’DROP TABLE_AUTHORS-’ Làm sao biết được ứng dụng web bị lỗi dạng này được. Rất đơn giản, hãy nhập vào chuỗi (*) như trên, nếu hệ thống báo lỗi về cú pháp dạng : Invalid object name” OtherTable”; ta có thể biết chắc là hệ thống đã thực hiện câu SELECT sau từ khóa UNION, vì như vậy mới có thể trả về lỗi mà ta đã cố tình tạo ra trong câu lệnh SELECT. Cũng sẽ có thắc mắc là làm thế nào có thể biết được tên của các bảng dữ liệu mà thực hiện các thao tác phá hoại khi ứng dụng web bị lỗi SQL injection. Cũng rất đơn giản, bởi vì trong SQL Server, có hai đối tượng là sysobjects và syscolumns cho phép liệt kê tất các tên bảng và cột có trong hệ thống. Ta chỉ cần chỉnh lại câu lệnh SELECT, ví dụ như : ‘UNION SELECT name FROM sysobjects WHERE xtype=’U’ là có thể liệt kê được tất cả các bảng dữ liệu. c. Dạng tấn công sử dụng câu lệnh INSERT Thông thường các ứng dụng web cho phép người dùng đăng kí một tài khoản để tham gia. Chức năng không thể thiếu là sau khi đăng kí thành công, người dùng có thể xem và hiệu chỉnh thông tin của mình. SQL injection có thể được dùng khi hệ thống không kiểm tra tính hợp lệ cảu thông tin nhập vào. Ví dụ, một câu lệnh INSERT có thể có cú pháp dạng: INSERT INTO TableName VALUES(‘Value One’,’Value Two’,’Value Three’). Nếu đoạn mã xây dựng SQL có dạng : <% strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ', ' " _ & strValueTwo & " ', ' " & strValueThree & " ') " Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN=..." Set objRS = Nothing %> Thì chắc chắn sẽ bị lỗi SQL injection, bởi vì chúng ta nhập vào trường thứ nhất ví dụ như: ‘+(SELECT TOP 1 FieldName FROM TableName)+’. Lúc này câu truy vấn sẽ là: INSERT INTO TableName VALUES(‘ ’+( SELECT TOP 1 FieldName FROM TableName)+’ ’,’abc’,’def’). Khi đó, lúc thực hiện lệnh xem thông tin, xem như bạn đã yêu cầu thực hiện thêm một câu lệnh nữa đó là: SELECT TOP 1 FieldName FROM TableName. d. Dạng tấn công sử dụng stored-procedures Việc tấn công bằng stored-procedures sẽ gây tác hại rất lớn nếu ứng dụng được thực thi với quyền quản trị hệ thống ‘sa’. Ví dụ, nếu ta thay đoạn mã tiêm vào dạng: ‘; EXEC xp_cmdshell’cmd.exe dir C:’. Lúc này hệ thống sẽ thực hiện lệnh liệt kê như mục trên ở ổ đĩa C:\cài đặt server. Việc phá hoại kiểu nào tùy thuộc vào câu lệnh đằng sau cmd.exe. 2.2.1.3 Cách phòng tránh Trong hầu hết trình duyệt, những kí tự nên được mã hóa trên địa chỉ URL trước khi 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 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 một 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ĩ dữ liệu nhập vào thay thế những kí tự như : Đối với các giá trị numeric, hãy chuyển nó sang Interger 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 Interger. Dùng thuật toán mã hóa dữ liệu. Như vậy, có thể thấy lỗi SQL injection khai thác những bất cẩn của các lập trình viên phát triển ứng dụng web khi xữ lí các dữ liệu nhập vào để xây dựng câu lệnh SQL. Tác hại từ lỗi SQL injection tùy thuộc vào môi trường và cách cấu hình hệ thống. Nếu ứng dụng sử dụng quyền dbo(quyền của người sở hữu cơ sỡ dữ liệu - owner) khi thao tác dữ liệu, nó có thể xóa toàn bộ các bảng dữ liệu, tạo các bảng dữ liệu mới,…Nếu ứng dụng sử dụng quyền sa(quyền quản trị hệ thống), nó có thể điều khiển toàn bộ hệ quản trị cơ sỡ dữ liệu và với quyền hạn rộng lớn như vậy nó có thể tạo ra các tài khoản người dùng bất hợp pháp để điều khiển hệ thống của bạn. Để phòng tránh, ta có thể thực hiện ở hai mức a. Kiểm soát chặt chẽ dữ liệu nhập vào Kiểm tra tính đúng đắn của dữ liệu là một 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 nhanh chống để đạt được mục đích. Có ba giải pháp tiếp cận vấn đề này: Cố gắng kiểm tra và chỉnh sửa để làm cho dữ liệu hợp lệ . Loại bỏ những dữ liện bát hợp lệ. Chỉ chấp nhận những dữ liệu hợp lệ. Để phòng tránh nguy cơ có thể xảy ra, hãy bảo vệ các câu lệnh SQL là bằng cách kiểm soát chặt chẽ tất các dữ liệu nhập nhận được từ đối tượng Request (Request, Request. QueryString, Request.Form, Request.Cookies,and Request.ServerVariables). Ví dụ: có thể giới hạn chiều dài của chuổi nhập liệu, hoặc xây dựng hàm Escape Quotes để thay thế các dấu nháy đơn bằng hai dấu nháy đơn như: <% Function EscapeQuotes(sInput) sInput = replace(sInput, " ' ", " ' ' ") EscapeQuotes = sInput End Function %> Trong trường hợp dữ liệu nhập vào là số, lỗi xuất phát từ việc thay thế một giá trị được tiên đoán là dữ liệu số bằng chuỗi chứa câu lệnh SQL bất hợp pháp. Để tránh điều này, đơn giản hãy kiểm tra dữ liệu có đúng hay không bằng hàm IsNumeric(). Ngoài ra có thể xây dựng hàm loại bỏ một số kí tự và từ khóa nguy hiểm như: ;,--, select, insert, xp_,…ra khỏi chuổi dữ liệu nhập từ phía người dùng để hạn chế các tấn công dạng này: <% Function KillChars(sInput) dim badChars dim newChars badChars = array("select", "drop", ";", "--", "insert", "delete", "xp_") newChars = strInput for i = 0 to uBound(badChars) newChars = replace(newChars, badChars(i), "") next KillChars = newChars End Function %> b. Thiết lập cấu hình an toàn cho hệ quản trị cơ sở dữ liệu Cần có cơ chế kiểm soát chặt chẽ và giới hạn quyền xữ lí dữ liệu đến tài khoản người dùng mà ứng dụng web dang sử dụng. Các ứng dụng thông thường nên tránh dùng đến các quyền như dbo hay sa. Quyền càng bị hạn chế, thiệt hại càng ít. Ngoài ra để tránh các nguy cơ từ SQL Injection attack, nên chú ý loại bỏ bất kì thông tin kỹ thuật nào chứa trong thông điệp chuyển xuống cho người dùng khi ứng dụng có lỗi. Các thông báo lỗi thông thường tiết lệ các chi tiết kỉ thuật có thể cho phép kẻ tấn công biết được điểm yếu của hệ thống. Xác định các phương pháp kết nối server : Dùng tiện ích Network Utility để kiểm tra rằng chỉ có các thư viện mạng đang là hoạt động. Kiểm tra tất cả các tài khoản trong SQL server Chỉ tạo tài khoản có quyền thấp cho các ứng dụng. Loại bỏ những tài khoản không cần thiết. Đảm bảo rằng tất cả các tài khoản co một mật khẩu hợp lệ. Kiểm tra các đối tượng tồn tại Nhiều extended stored procedure có thể được xóa bỏ một cách an toàn. Nếu điều này được thực hiện, thì cũng xem xét việc loại bỏ luôn những tập tin. Dll chứa mã của extended stored procedure. Xóa bỏ tất cả dữ liệu mẫu như “northwind” và “pubs” Xóa các stored procedure không dùng như: master…xp_cmdsell, xp_startmail, xp_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 Đố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 dung. 2.2.2 Chèn mã lệnh thực thi trên trình duyệt Cross-Site Scripting 2.2.2.1 Tấn công Cross-Site Scripting Cross-Site Scripting (XSS) là một trong những kỹ thuật tấn công phổ biến, 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. Hacker sẽ lợi dụng sự kiểm tra lỏng lẻo từ ứng dụng và hiểu biết hạn chế của người dùng cũng như biết đánh vào sự tò mò của họ dẫn đến người dùng bị mất thông tin một cách dễ dàng. Hacker thực hiện tấn công XSS 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 hại cho những người sử dụng khác. Thông thường hacker lợi dụng địa chỉ URL để đưa ra những liên kết là tác nhân kích hoạt những đoạn chương trình 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 và cũng có thể là cả các thẻ HTML,… được thực thi trên chính trình duyệt của nạn nhân. Ví dụ 1: Hacker thường gắn thêm đoạn mã độc vào URL của Website và gởi đến nạn nhân, nếu nạn nhân truy cập URL đó thì sẽ bị dính mã độc. Lợi dụng cách truyền tham số trên URL mà hacker có thể dễ dàng thêm vào đoạn mã đánh cắp cookie. Điều này xảy ra do ta không chú ý điều kiện lọc input từ URL của Website. Ví dụ 2: Trường hợp mở các bức thư mà không hề cảnh giác với XSS. Chỉ cần với một đoạn mã HTML gửi trong thư thì đã hoàn toàn bị mất cookie của mình: Khi nhận thư, nếu vô tình người dùng đưa con chuột qua bức ảnh gửi kèm thì cũng có nghĩa là đã 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 người sử dụng này. Nhưng thực sự thì có rất nhiều cách để thêm đoạn mã JavaScript với mục đích tấn công kiểu XSS. Hacker có thể dễ dàng lợi dụng Document Object Model (DOM) để thay đổi ngữ cảnh và nội dụng Web ứng dụng. Một vài loại thẻ có thể chèn đoạn mã: [code] [code] … Phần in đậm là phần có thể đặt đoạn mã đánh cắp thông tin. 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 đó. Đôi khi các hacker cũng sử dụng kỹ thuật này đề phá hoại các Website nhưng đó vẫn chỉ tấn công vào bề mặt của Website. XSS là những Client-Side Script, những đoạn mã này sẽ chỉ chạy bởi trình duyệt phía client do đó XSS không làm ảnh hưởng đến hệ thống Website nằm trên server. Mục tiêu tấn công của XSS không ai khác chính là những người sử dụng khác của Website, khi họ vô tình vào các trang có chứa các đoạn mã nguy hiểm do các hacker để lại họ có thể bị chuyển tới các Website khác, đặt lại homepage, hay mất mật khẩu, mất cookie, hay có thể sẽ bị cài các loại virus, backdoor, worm,… 2.2.2.2 Phương pháp tấn công XSS truyền thống Như đã biết, cookie là phần thông tin mà ứng dụng có thể lưu trên đĩa cứng của người sử dụng. Nhưng chỉ các ứ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 đó. Người dùng Đoạn mã được phân phối qua email hay trang web Ứng dụng web File ghi thông tin đánh cắp được Thông tin người dùng được lấy về 1 2 3 4 5 Hình 2.2 Quá trình thực hiện XSS - Bước 1: Hacker biết được người dùng đang chạy một ứng dụng Web có lỗ hổng XSS. - Bước 2: Người dùng nhận được một liên kết thông qua email hay trên chính trang Web (như banner, link,…). Thông thường, hacker khiến người dùng chú ý bằng những câu kích thích sự tò mò của người dùng như “Kiểm tra tài khoản của bạn”, “Quà tặng hấp dẫn”,... - Bước 3: Chuyển nội dung thông tin (cookie, tên, mật khẩu,…) về máy chủ đã chuẩn bị trước của hacker. - Bước 4: Hacker đã tạo một đoạn mã hay chương trình 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 được 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. 2.2.2.3 Cách phòng ngừa Như đã biết, một tấn công XSS chỉ thực hiện được khi gửi một trang Web cho trình duyệt Web của nạn nhân có kèm theo mã script độc của kẻ tấn công. Vì vậy những nhà phát triển có thể bảo vệ ứng dụng Web khỏi bị lợi dụng thông qua những tấn công XSS này, đảm bảo những trang phát sinh động không chứa các tag của script bằng cách lọc và xác nhận hợp lý các dữ liệu đầu vào từ phía người dùng hoặc mã hóa (endcoding) và lọc các giá trị xuất cho người dùng. Lọc, xác nhận tính hợp lý Luôn luôn lọc các dữ liệu nhập từ phía người dùng bằng cách lọc các ký tự đặc biệt, dấu nháy đơn kép, ký tự Null,… được định nghĩa trong đặc tả của HTML. Mỗi trường nhập liệu bao gồm cả tham số liên kết sẽ được kiểm tra để phát hiện các thẻ script. Hiện tại có khá nhiều bộ lọc để ta lựa chọn (như bộ thư viện viết bằng PHP cho phép filter HTML để ngăn chặn kẻ xấu post mã độc XSS thông qua Website, đó là HTML Purifier. Website: Mã hóa Lỗi XSS có thể tránh được khi máy chủ Web đảm bảo những trang phát sinh được mã hóa thích hợp để ngăn việc chạy các script không mong muốn. Mã hóa phía máy chủ là một tiến trình mà tất cả nội dung phát sinh động sẽ đi qua một hàm mã hóa nơi mà các thẻ script sẽ được thay thể bởi mã của nó. Việc mã hóa được khuyến khích sử dụng vì nó không yêu cầu phải đưa ra quyết định những kí tự nào là hợp lệ hoặc không hợp lệ. Tuy nhiên việc mã hóa tất cả dữ liệu có thể tốn tài nguyên và ảnh hưởng đến khả năng thực thi của máy chủ. Người dùng Người sử dụng cần cấu hình lại trình duyệt để được nhắc nhở 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. 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. Vì thế, ngoài việc ứng dụng kiểm tra tính đúng đắn của dữ liệu 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. 2.2.3 Chiếm hữu phiên làm việc (Session Management) 2.2.3.1 Tổng quan về Session ID Như đã đề cập, session dùng để lưu trữ trạng thái làm việc giữa trình duyệt và trình chủ. Session ID có thể được lưu trữ trong cookie hay được nhúng vào địa chỉ URL hay trong biến ẩn của form. Mỗi kiểu lưu trữ đều có ưu và khuyết điểm, nhưng qua thực tế cookie vẫn là lựa chọn tốt nhất, và là phương pháp an toàn nhất. Thông thường, sau khi người dùng được chứng thực dựa trên những thông tin cá nhân như tên / mật khẩu, session ID được xem như một mật khẩu tĩnh tạm thời cho những lần yêu cầu tiếp theo. Điều này đã khiến cho session ID là mục tiêu lớn cho những hacker. Trong nhiều trường hợp, hacker giành được session ID hợp lệ của người dùng để từ đó đột nhập vào phiên làm việc của họ. XSS cũng là một cách tấn công có thể chiếm được session ID lưu trữ trong cookie. Cách tấn công này gọi là “session hijacking”. Tấn công vào một phiên làm việc thường được thực hiện theo 2 kiểu chính sau: Ấn định phiên làm việc Đánh cắp phiên làm việc 2.2.3.2 Ấn định phiên làm việc Trong kiểu tấn công ấn định một phiên làm việc, hacker ấn định sẵn session ID cho nạn nhân trước khi họ đăng nhập vào hệ thống. Sau đó, hacker sẽ sử dụng session ID này để buớc vào phiên làm việc của nạn nhân đó. Hình 2.3 Quá trình tấn công người dùng bằng kỹ thuật ấn định session Bước 1: Thiết lập session ID. Hệ thống quản lý session theo 2 hướng: + Hướng tự do: Chấp nhận bất kì một session ID, nếu chưa tồn tại session thì tạo mới một session ID + Hướng giới hạn: Chấp nhận session ID nào đã đăng kí trước đó. Ở 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 quy 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 1a là 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 session ID đế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 tùy vào ứng dụng mà có thể có 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. Ví dụ: Tấn công Session ID trên tham số URL Hình 2.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. Hacker mở dịch vụ trực tuyến của ngân hàng qua địa chỉ online .worldbank .com. Nhận được một session ID từ trình chủ để xác định phiên làm việc của hacker (session ID = 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. 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 ( để 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 xác nhận liên kết này. Người dùng 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. Nhận xét: Cách tấn công này nếu người dùng chú ý dể bị phát hiện, đòi hỏi ứng dụng phải tạo session ID ngay khi người dùng sử dụng ứng dụng. 2.2.3.3 Đánh cắp phiên làm việc Khác với kiểu tấn công ấn định phiên làm việc, hacker đánh cắp một session ID của người dùng khi họ đang trong phiên làm việc của mình. Để có thể đánh cắp session ID của người dùng, hacker có thể dùng những phương pháp sau: Tấn công kiểu dự đoán phiên làm việc. Hacker phải là người dùng hợp lệ của hệ thống, sau vài lần đăng nhập vào hệ thống, hacker xem xét các giá trị session ID nhận được, tìm ra qui luật phát sinh và từ đó có thể đoán được giá trị của một phiên làm việc của người dùng kế tiếp. Tấn công kiểu vét cạn phiên làm việc. Hacker có thể tự tạo một chương trình gửi nhiều yêu cầu trong một khoảng thời gian đến trình chủ. Mỗi một yêu cầu kèm theo một session ID để tìm các session ID đang tồn tại. Hacker dựa vào thói quen của những nhà phát triển ứng dụng Web lấy thời gian hay địa chỉ IP của người dùng để tạo session ID để hạn chế vùng vét cạn. Tấn công kiểu dùng đoạn mã để đánh cắp phiên làm việc. Bằng cách chèn vào một đoạn mã thực thi trên chính trình duyệt của nạn nhân, hacker có thể lừa người dùng theo vết một liên kết để từ đó thực hiện đánh cắp cookie của người dùng. Cách này được thực hiện thông qua lỗi Cross-Site Scripting. Sau khi có được phiên làm việc của người dùng, hacker vào phiên làm việc của họ. 2.2.3.4 Cách phòng ngừa Việc phòng chống kiểu tấn công chiếm hữu phiên làm việc không thuộc trách nhiệm của trình chủ Web server, vì trình chủ chỉ cung cấp API quản lý phiên làm việc cho ứng dụng. Vì thế, chỉ ứng dụng mới cần có những biện pháp phòng chống lại kiểu tấn công này. Chống việc đăng nhập với một session ID có sẵn, ứng dụng phải hủy bỏ session ID được cung cấp bởi trình duyệt của người dùng khi đăng nhập và luôn tạo một session ID mới khi người dùng đăng nhập thành công sẽ khiến cho những hacker không phải là người dùng hợp lệ của hệ thống. Giới hạn phạm vi ứng dụng của session ID như kết hợp session ID với địa chỉ của trình duyệt, kết hợp session ID với chứng thực được mã hoá SSL của người dùng, xóa bỏ session khi người dùng thoát khỏi hệ thống hay hết hiệu lực, thiết lập thời gian hết hiệu lực cho session để tránh trường hợp hacker có thể duy trì session và sử dụng nó lâu dài. Người sử dụng phải dùng chế độ thoát khỏi hệ thống để xóa bỏ session hiện thời và có thể những session ID còn lưu lại trên hệ thống khi họ quên thoát ra ngoài những lần trước. Không được chủ quan với thuật toán tạo session của ứng dụng là bảo mật, không ai có thể đoán được. Với session ID quá ngắn, hacker có thể dùng kỹ thuật để vét cạn. Nhưng không vì thế mà cho rằng ứng dụng sẽ bảo mật với session ID dài và phức tạp vì kích thước session ID sẽ là một vấn đề nếu thuật toán không tốt. 2.2.4 Từ chối dịch vụ (DOS) 2.2.4.1 Khái niệm tấn công kiểu DoS (Denial of Service) Tấn công từ chối dịch vụ DoS là các cuộc tấn công trên hệ thống mạng nhằm ngăn cản những truy xuất tới một dịch vụ. Tấn công DoS làm cho các dịch vụ mạng bị tê liệt, không còn khả năng đáp ứng được yêu cầu bằng cách làm tràn ngập số lượng kết nối, quá tải server hoặc chương trình chạy trên server, tiêu tốn tài nguyên của server, hoặc ngăn chặn người dùng hợp lệ truy nhập tới dịch vụ mạng. 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à rất khó bảo vệ hệ thống khỏi kiểu tấn công DoS. Thông thường, kiểu tấn công DoS dựa trên những giao thức (Ví dụ như tràn ngập ICMP với Smurf, Ping of Death, khai thác điểm yếu của TCP trong hoạt động của giao thức và phân mảnh gói tin, hacker có thể sử dụng bom email để gửi hàng loạt thông điệp email với mục đích tiêu thụ băng thông để làm hao hụt tài nguyên hệ thống trên mail server). Hoặc có thể dùng phần mềm gửi hàng loạt yêu cầu đến máy chủ khiến cho máy chủ không thể đáp ứng những yêu cầu chính đáng khác. Những khả năng bị tấn công: Tấn công trên Swap space: Hầu hết các hệ thống đều có vài trăm MB không gian chuyển đổi (Swap space) để phục vụ những yêu cầu từ máy khách. Swap space thường dùng cho các tiến trình con có thời gian ngắn, nên DoS có thể dựa trên phương thức làm tràn đầy Swap space. Tấn công trên Bandwidth: Phần băng thông dành cho mỗi hệ thống là giới hạn, vì thế nếu hacker cùng lúc gửi nhiều yêu cầu đến hệ thống thì phần băng thông không đủ đáp ứng cho một khối lượng dữ liệu lớn đó và dẫn đến hệ thống bị phá vỡ. Tấn công vào Ram: Tấn công Dos chiếm một khoảng lớn bộ nhớ của Ram, cũng có thể gây ra các vấn đề phá hủy hệ thống. Kiểu tấn công Buffer Overflow là một ví dụ cho cách phá hủy này. Tấn công vào Disks: Một kiểu tấn công cổ điển là làm đầy đĩa cứng. Đĩa cứng có thể bị tràn và không thể được sử dụng nữa. 2.2.4.2 Các kỹ thuật tấn công a. Khái niệm Tcp bắt tay ba chiều Để nghiên cứu phương pháp tấn công DoS, trước tiên tìm hiểu về cơ chế làm việc “Tcp bắt tay ba chiều”. Trong đó: - Gói dữ liệu TCP với cờ SYN (synchoronize) dùng để bắt đầu 1 kết nối. - ACK (acknowledgement) là sự công nhận. Cách hoạt động của gói TCP: Hình 2.5 Cơ chế thiết lập kết nối trước khi truyền số liệu Buớc 1: Máy con gửi gói tin SYN yêu cầu kết nối. Bước 2: Nếu máy chủ chấp nhận kết nối, máy chủ sẽ gửi gói tin SYN/ACK. Server bắt buộc phải gửi thông báo lại bởi vì TCP là chuẩn tin cậy nên nếu máy con không nhận được thông báo thì sẽ nghĩ rằng packet đã bị lạc và gửi lại một packet mới . Bước 3: Máy con gửi hồi đáp bằng gói tin ACK, báo cho máy chủ biết rằng máy con đã nhận được SYN/ACK packet và lúc này kết nối đã được thiết lập. b. Lợi dụng TCP thực hiện phương pháp SYN flood truyền thống Hình 2.6 Tấn công DoS truyền thống Bất cứ 1 gói tin SYN, máy chủ đều phải để 1 phần tài nguyên của hệ thống như bộ nhớ đệm để nhận và truyền dữ liệu cho đường truyền đó. Tuy nhiên, tài nguyên của hệ thống là có hạn và hacker sẽ tìm mọi cách để hệ thống quá giới hạn đó. Đây còn được gọi là half-open connection vì máy khách mở kết nối giữa chừng. Nếu máy chủ sau khi gửi trả một gói tin SYN/ACK để thông báo chấp nhận kết nối cho máy yêu cầu nhưng nếu địa chỉ IP của máy yêu cầu này là giả mạo thì gói tin không thể đến được đích, nên máy chủ vẫn phải dành tài nguyên cho yêu cầu đó. Sau một thời gian không nhận được phản hồi từ máy khách, máy chủ lại tiếp tục gửi một gói tin SYN/ACK để xác nhận lần nữa. Và cứ như vậy, kết nối vẫn tiếp tục mở. Nếu như hacker gửi nhiều gói tin SYN đến máy chủ đến khi máy chủ không thể tiếp nhận thêm 1 kết nối nào nữa thì lúc này hệ thống sẽ quá hạn và bị phá vỡ. c. Tấn công vào băng thông Thường kiểu tấn công này được sử dụng khi đường truyền mạng của hacker thấp hơn so với đường truyền của máy đích (kiểu tấn công vào băng thông lớn). 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 khiến cho đường truyền của hệ thống đích không còn khả năng đáp ứng, không còn khả năng nhận một gói tin nào nữa. Phương pháp tấn công kiểu từ chối dịch vụ này gọi là DDoS (từ chối dịch vụ phân tán), cùng một lúc nhiều máy sẽ được phát động để gửi gói tin đến máy đích làm cho máy đích quá hạn và bị loại khỏi mạng Internet, như sơ đồ minh họa sau:ợ Hình 2.7 Tấn công DDoS Đây là cách thức tấn công rất nguy hiểm. 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 và có thể "ngốn" hết băng thông của mục tiêu trong nháy mắt. => DrDoS (Distributed Reflection Denial of Service) - Tấn công từ chối dịch vụ phản xạ nhiều vùng. Mục tiêu chính của DrDoS là chiếm đoạt toàn bộ băng thông của máy đích, tức là làm tắc nghẽn hoàn toàn đường kết nối từ máy đích vào xương sống của Internet và làm tiêu hao tài nguyên. Trong suốt quá trình máy đích bị tấn công bằng DrDoS, không một máy khách nào có thể kết nối được vào máy đích đó. Tất cả các dịch vụ chạy trên nền TCP/IP như DNS, HTTP, FTP, POP3, ... đều bị vô hiệu hóa. Hình 2.8 Tấn công DrDoS Bằng cách giả địa chỉ IP của máy đích, hacker sẽ cùng lúc gửi nhiều gói tin đến các hệ thống máy mạnh trên mạng như Yahoo, Micorosoft,… chẳng hạn. Các hệ thống này khi nhận gói tin SYN giả, chấp nhận kết nối và gửi trả một gói tin SYN/ACK để thông báo. Vì địa chỉ IP của gói tin SYN bị hacker sửa đổi thành địa chỉ IP máy đích nên những gói tin SYN/ACK sẽ được gửi về cho máy đích. Các server lớn, đường truyền mạnh đó đã vô tình đóng vai trò zoombies cho kẻ tấn công. Cùng một lúc nhận được nhiều gói tin, đường truyền của máy đích không đủ khả năng đáp ứng, hệ thống máy đích từ chối nhận bất kì gói tin nào và lúc này hệ thống máy đích đã bị sụp đổ. d. Kiểu tấn công vào tài nguyên hệ thống Đây là kiểu tấn công nhằm vào tài nguyên hệ thống hơn là tài nguyên mạng như CPU, bộ nhớ, file hệ thống, tiến trình,… Hacker là một người dùng hợp lệ của hệ thống, và được một lượng tài nguyên giới hạn trên hệ thống. Tuy nhiên, hacker sẽ lạm dụng quyền truy cập này để yêu cầu thêm tài nguyên, 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ệ, không còn tiến trình để thực thi nữa. 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 tin ICMP 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. 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 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 thay đổi trực tiếp hoặc từ xa các thông tin quan trọng của thiết bị hay phá hoại các thiết bị phần cứng như router, switch,… e. Cách phòng ngừa Tấn công từ chối dịch vụ không quá khó thực hiện, nhưng rất khó phòng chống do tính bất ngờ và thường là phòng chống trong thế bị động khi sự việc đã diễn ra. Kiểu tấn công này tuy chỉ khiến cho hệ thống bị phá vỡ trong vài phút nhưng hậu quả thì khá to lớn (ảnh hưởng về kinh tế, uy tín,…). Đây là kỹ thuật thường được hacker sử dụng trong trường hợp không thể chiếm quyền quản trị trên hệ thống hoặc thông tin, hoặc muốn phá hủy uy tín của cơ quan đó. Việc giả mạo địa chỉ khiến cho hacker càng dễ dàng thực hiện viêc tấn công mà không sợ bị phát hiện. Thông thường kỹ thuật này được thực hiện kèm theo sự hỗ trợ của vài công cụ như Ping of death, Tear drop,… Các phương án phòng ngừa: 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. Cài đặt, quản lý các thiết bị mạng trong hệ thống một cách tối ưu nhất có thể. Xác định mức độ ưu tiên đối với các đối tượng, các đối tượng cần bảo vệ trên một hệ thống có thể là: Máy chủ dịch vụ, các router, các chương trình ứng dụng Web, hệ quản trị cơ sở dữ liệu, các dịch vụ cung cấp,... Phòng ngừa các điểm yếu của ứng dụng. Lỗi chủ yếu được tìm thấy trên các ứng dụng mạng nội bộ của Windows, trên các chương trình Webserver, DNS, hay SQL database. Cập nhật bản vá là một trong những yêu cầu quan trọng cho việc phòng ngừa. Thiết lập các mức xác thực, hệ thống định mức, giới hạn đối với người sử dụng cũng như các nguồn tin trên mạng. Mục đích ngăn ngừa trường hợp người sử dụng chủ ý 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. Dùng tính năng lọc dữ liệu, tính năng cho phép đặt rate limit của router / firewall để loại bỏ các packet không mong muốn, giảm lượng lưu thông trên mạng và tải của máy chủ, hạn chế số lượng packet vào hệ thống. Dùng một số cơ chế, công cụ, phần mềm để chống lại TCP SYN Flooding. 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. 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. 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. Xây dựng và triển khai hệ thống dự phòng. 2.2.5 Một số kỹ thuật tấn công khác 2.2.5.1 Mã Hóa URL (URL Encoding) a. Khái niệm Theo RFC 1738 định nghĩa URL và RFC 2369 cho URIs, những kí tự được giới hạn sử dụng trên URL hoặc URI là một tập các kí tự US-ASCII. Theo RFC 1738, 2369 những kí tự chữ số, kí tựđặc biệt như “ $-_.+!*’() ” và một số kí tự dành riêng là không bị mã hoá trên URL hay URIs. Còn những kí tựđặc biệt khác thì được mã hóa như khoảng trắng, ”…Sau khi trình chủ nhận được dữ liệu này, trình chủ sẽ tự động giải mã để thao tác như bình thường. Vậy hacker có thể lợi dụng được gì trong URL mã hóa này. Những nhà phát triển ứng dụng có thể sẽ thiết kế ứng dụng để kiểm tra dữ liệu nhập vào của người dùng có hợp lệ hay không, những kí tự đặc biệc như trong thẻ script thường được dùng trong những kĩ thuật tấn công như XSS sẽ bị lọai bỏ Vậy để hợp thức hóa nội dung dữ liệu cần nhập, hacker thay vì nhập trựctiếp kí tự đặc biệt vào ô nhập thì họ có thể nhập những kí tự đã được mã hoá theo chuẩn RFC 1738, RFC 2369. Như vậy bằng cách đó, hacker có thể dễ dàng vượt qua kiểm soát này. b. Một số biện pháp phòng chống Tránh sử dụng phương thức GET vì nếu dùng GET, dữ liệu dễ dàng được thêm vào URL. Vì thế, sử dụng phương thức POST bất cứ khi nào có thể. Trong trường hợp URL bắt buộc được sử dụng để chuyển dữ liệu lên trình chủ, cần giới hạn kiểu dữ liệu, nên kiểm tra dữ liệu trong ứng dụng trước khi sử dụng. Không nên sử dụng ngôn ngữ máy khách để kiểm tra tính đúng đắn của dữ liệu. 2.2.5.2 Kiểu tấn công vượt đường dẫn a. Khái niệm Nhiều ứng dụng sử dụng tập tin hệ thống của trình chủ trong “lớp trình bày” để hiển thị thông tin lưu trử tạm thời. Những tập tin này bao gồm những tập tin hình ảnh , tập tin HTML, hay những ứng dụng CGI. Thư mục WWW-ROOT là một thư mục gốc ảo bên trong trong hoặc bên ngòai WWW-ROOT. Nếu ứng dụng không kiểm tra những kí tự đặc biệt, thường được sử dụng trong đường dẫn như “/” thì có thể rằng ứng dụng đã có một lỗ hổng cho kiểu tấn công vượt đường dẫn. Hacker có thể yêu cầu trình chủ trả về kết quả là nội dung những tập tin vật lí như /etc/password… Tóm lại : Kiểu tấn công này cũng dựa vào sự lỏng lẻo trong quá trình kiểm tra dữ liệu trên URL, cookie, HTTP Header yêu cầu. Lợi dụng quyền truy xuất một tập tin của ứng dụng, nhờđó hacker có thể xem được file lưu trữ trên hệ thống. b. Một số biện pháp phòng chống Việc phòng chống kiểu tấn công vượt đường dẫn là một thử thách lớn cho những nhà ứng dụng trong một hệ thống phân tán. Tuy nhiên, cách phòng chống tốt nhất vẫn là Ứng dụng cần kiểm tra việc truy xuất file trước khi xuất kết quả cho trình duyệt. 2.2.5.3 Tấn công dựa vào ký tự rỗng a. Khái niệm Nhiều ứng dụng Web thường sử dụng ngôn ngữ lập trình như C, Java để tạo modul xử lý những công việc như thao tác trên những dữ liệu nhập vào từ người dùng. Lợi dụng kí tự kết thúc chuỗi mà hacker sẽ thêm vào một chuỗi nhập để đánh lừa ứng dụng. b. Một số biện pháp phòng chống Cách duy nhất để phòng chống trường hợp này đó là chỉ chấp nhận những dữ liệu hợp lệ. Những kí tự như “\” phải bị lọai bỏ trước khi ứng dụng sử dụng chúng. 2.2.5.4 Ngôn ngữ phía trình chủ a. Khái niệm SSI là đoạn mã được nhúng vào trong trang Web để yêu cầu trình chủ cung cấp thông tin ở một điểm nào đó trong trang. Tuy nhiên, SSI không phải được hỗ trợ trong hầu hết các trình chủ, Apache và IIS là 2 trình chủ hỗ trợ SSI. Trang Web có sử dụng SSI thường được lưu dưới dạng .shtml hoặc.stm (là phần mở rộng của .html hay .htm) để báo hiệu cho trình chủ biết trang này có sử dụng SSI để tiết kiệm thời gian xử lí cho trình chủ (không mất thời gian tìm kiếm). b. Quá trình thực hiện xử lí một trang Web yêu cầu: Nếu không có bất kì chỉ thị nào khác, trình chủ chỉ gửi nội dung trang Web cho trình duyệt nhưng với một SSI, thì công việc tuần tự theo những bước như sau: Trình chủ nhận dữ liệu và phân tích dữ liệu (tìm kiếm và phân loại những câu lệnh đặc biệt) để chỉ thị thực hiện Dưa trên những câu lệnh mà trình chủ tìm thấy, trình chủ thực thi những câu lệnh đó để trả kết quả cho trình duyệt. Trả kết quả về cho trình duyệt Có 3 khả năng thực hiện: Nhận thông tin từ một file và chèn vào trong trang Gán giá trị cho một số biến Gọi chương trình CGI c. Cách tấn công Hacker lợi dụng những ô nhập để chèn thêm vào đónội dung một câu lệnh SSI. Ví dụ : <!--#jdbc select="SELECT * FROM User" name="result" driver="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost:3306/project" --> Thiết lập câu lệnh Select Câu lệnh này di chuyển con trỏ đến dòng đầu tiên trong tập d. Biện pháp phòng chống Với người quản trị, cấu hình lại trình chủ sao cho trình chủ không hỗ trợ SSI. Với người lập trình, kiểm tra kĩ nội dung dữ liệu gửitừ người dùng. Loại bỏ những kí tự như # -- !…Tuy nhiên điều này nên được thực hiện tại trình chủ, không nên kiểm tra tính đúng đắn của dữ liệu bằng ngôn ngữ phía trình khách, vì khả năng thay đổi nội dung của trang Web. 2.3 TỔNG KẾT QUÁ TRÌNH TẤN CÔNG CỦA HACKER 2.3.1 Thu thập thông tin ở mức hạ tầng của mục tiêu Bước 1: FootPrinting (thu thập thông tin): Đây là cách mà hacker làm khi muốn lấy một lượng thông tin tối đa về máy chủ/doanh nghiệp/người dùng, bao gồm chi tiết về địa chỉ IP, Whois, DNS..vv là những thông tin chính thức có liên quan đến mục tiêu. Công cụ hỗ trợ: UseNet,search engines (công cụ tìm kiếm), Edgar Any Unixclient, nslookupIs-d, Sam spade, dig. Bước 2: Scanning (Quét thăm dò): Phần lớn thông tin quan trọng từ server có được từ bước này , bao gồm quét cổng, xác định hệ điều hành, .v.v.. để biết các port trên server, nghe đường dữ liệu. Các công cụ: fping, icmpenum Wsping ProPack, nmap, SuperScan, fscan nmap, queso, siphon. Bước 3: Enumeration (liệt kê tìm lỗ hổng): Bước thứ ba là tìm kiếm những tài nguyên được bảo vệ kém, hoạch tài khoản người dùng mà có thể sử dụng để xâm nhập, bao gồm các mật khẩu mặc định, các script và dịch vụ mặc định. Rất nhiều người quản trị mạng không biết đến hoặc không sửa đổi lại các giá trị này. Các công cụ phụ trợ: null sessions, DumpACL, sid2user, OnSite Admin showmount, NAT Legion banner grabbing với telnet, netcat, rpcinfo. Bước 4: Gaining access (Tìm cách xâm nhập): Bây giờ hacker sẽ tìm cách truy cập vào mạng bằng những thông tin có được ở ba bước trên. Phương pháp được sử dụng ở đây có thể là tấn công vào lỗi tràn bộ đệm, lấy và giải mã file password, hay brute force (kiểm tra tất cả các trường hợp) password. Các công cụ: tcpdump, L0phtcrack readsmb, NAT, legion, tftp, pwdump2 (NT) ttdb, bind, IIS, HTR/ISM.DLL. Bước 5: Escalating privilege (Leo thang đặc quyền): Trong trường hợp hacker xâm nhập đựợc vào mạng với một tài khoản nào đó, thì họ sẽ tìm cách kiểm soát toàn bộ hệ thống. Hacker sẽ tìm cách crack password của admin, hoặc sử dụng lỗ hổng để leo thang đặc quyền. John và Riper là hai chương trình crack password rất hay được sử dụng. Công cụ: L0phtcrack, Ic_messages, getadmin, sechole. Thêm một lần nữa các máy tìm kiếm lại đựơc sử dụng để tìm các phương pháp truy cập vào mạng. Những file text chứa password hay các cơ chế không an toàn khác có thể là đích cho hacker.Thông tin lấy từ bước trên đủ để ta định vị server và điều khiển server. Nếu bước này không thành công, đến bước . Công cụ hỗ trợ: rhost, LSA Secrets user data, configuration files, Registry. Bước 7: Covering Tracks (Xoá dấu vết) : Sau khi đã có những thông tin cần thiết, hacker tìm cách xoá dấu vết, xoá các file log của hệ điều hành làm cho người quản lý không nhận ra hệ thống đã bị xâm nhập hoặc có biết cũng không tìm ra kẻ xâm nhập là ai. Xóa log. Công cụ: Zap, Event log GUI, rootkits, file streaming. Bước 8: Creating Backdoors (Tạo cửa sau chuẩn bị cho lần xâm nhập tiếp theo được dễ dàng hơn): Hacker để lại "Back Doors", tức là một cơ chế cho phép hacker truy nhập trở lại bằng con đường bí mật không phải tốn nhiều công sức, bằng việc cài đặt Trojan hay tạo user mới (đối với tổ chức có nhiều user). Công cụ ở đây là các loại Trojan, keylog, creat rogue user accounts, schedule batch jobs, infect startup files, plant remote control services, install monitoring mechanisms, replace apps with Trojan. Công cụ: members of wheel, administrators cron, At rc, Startup folder, registry keys, netcat, remote.exe, VNC, BO2K, keystroke loggers, add acct to secadmin mail aliases login, fpnwclnt.dll 2.3.2 Khảo sát ứng dụng web Phương pháp khảo sát khá phổ biến, đó là Xem mã nguồn và lợi dụng các lỗi cho phép xem mã nguồn. Một số ngôn ngữ web thông dụng hiện nay có nhiều lỗi này như Active Server Pages (ASP), Common Gateway Interface (CGI), ColdFusion Server (CFM), Hypertext Preprocessor (PHP). Tìm các site bị lỗi này bằng cách dùng www.google.com, search từ khóa liên quan. Sử dụng allinurl: trước đoạn string đặc biệt cần kiếm, thì những trang Web tìm kiếm được chắc chắn sẽ có chuỗi cần tìm. Ví dụ: "allinurl:/advadmin " (không có ngoặc kép) thì chỉ liệt kê ra những trang có URL có dạng : Tìm các file trên com thì thêm chữ type file: trước tên file cần tìm trên các chuyên khu web. Ví dụ : + Muốn tìm file mdb (đây là file chứamật khẩu của các trang Web, dùng Access để mở) thì vào và đánh type file:mdb + Tìm SAM (đây là file chứa Password của Windows NT, dùng L0phtCrack để Crack) thì vào và đánh type file:SAM + Tấn công vượt qua các cơ chế kiểm soát (authentication, authorization) :Bao gồm các phương pháp như đoán mật khẩu, thay đổi thông tin cookies, các kĩ thuật directory traversal, leo thang đặc quyền, các phương pháp tấn công dựa vào SQL, SQL injection.. + Tìm hiểu sâu về các chức năng của ứng dụng web + Tìm hiểu cách thực hiện của các phần trong ứng dụng, đặc biệt như các order input, confirmation, order tracking. Ở đây ta có thể áp dụng các phương pháp như SQL Injection, input validation... + Tìm hiểu luồng di chuyển của thông tin Các thông tin tương tác giữa client và server, các thông tin tương tác với database. Hiện nay việc viết mã để thực hiện việc giao tiếp thông tin thường phải đảm bảo được tính hiệu quả (nhanh), và bảo mật (có thể sẽ phát sinh lỗi trong quá trình đó và giúp hacker có thể lợi dụng các lỗi như SQL input...để đoạt quyền điều khiển hệ thống. 2.3.3 Tấn công Sau khi đã thu thập và khảo sát kỹ càng đối tượng, hacker bắt đầu thực hiện tấn công nhằm xâm nhập vào hệ thống lấy thông tin, đưa thông tin xấu vào, dành quyền kiểm soát,… Còn nếu không thành công trong việc xâm nhập, thì Dos là cách thức cuối cùng mà hacker thường lựa chọn để làm cho hệ thống không thể hoạt đông được. Nhận xét: Việc thu thập thông tin là vô cùng quan trọng cho việc tấn công vào một hệ thống máy đích. Cho dù hacker tấn công theo phương diện phần cứng hay qua ứng dụng thì việc thu thập vẫn là cần thiết. Vấn đề là việc thực hiện sẽ theo từng bước như thế nào . Có thể trong những bước đã nêu hacker không cần phải đi qua theo thứ tự hay qua hết, nhưng việc nắm rõ thông tin của máy đích luôn là điều kiện tiên quyết để dẫn đến thành công trong việc tấn công. Tùy vào nội dung thông tin mà hacker thu thập được mà hacker sẽ quyết định tấn công theo kĩ thuật nào. Do đó, việc bảo mật cho một hệ thống cần đòi hỏi sự kết hợp không chỉ của riêng nhà quản trị hệ thống mà còn của nhà thiết kếứng dụng và sự hợp tác của cả những khách hàng sử dụng ứng dụng. 2.4 TỔNG KẾT CÁC BIỆN PHÁP PHÒNG CHỐNG 2.4.1 Với những nhà quản trị mạng Người quản trị hệ thống cần xác định rõ những đối tượng nào là quan trọng nhất trong hệ thống cần bảo vệ; xác định rõ mức độ ưu tiên đối với những đối tượng đó. Ví dụ các đối tượng cần bảo vệ trên một hệ thống có thể là: Các máy chủ dịch vụ, các router, các điểm truy nhập hệ thống, các chương trình ứng dụng, hệ quản trị CSDL, các dịch vụ cung cấp… Cấu hình cho những ứng dụng: Thận trọng trong việc cấu hình trình chủ và một số ứng dụng. Trình chủ nên hay không cho phép thực thi những câu lệnh SSI. Ngoài ra phải thiết lập quyền cho ứng dụng chỉ chạy dưới một số quyền hạn nhất định như trong quản trị CSDL (không nên chạy quyền Admin) tránh trường hợp hacker có thể lợi dụng chạy những câu lệnh điều khiển hệ thống. Xác định nguy cơ đối với hệ thống chính là xác định các lỗ hổng bảo mật của các dịch vụ, ứng dụng trên hệ thống đó. Việc xác định đúng đắn các nguy cơ này giúp người quản trị có thể tránh được những cuộc tấn công mạng, hoặc có những biên pháp bảo vệ đúng đắn bằng cách thường xuyên cập nhật tin tức trên các nhóm tin về bảo mật và từ nhà cung cấp phần mềm sử dụng. Khi phát hiện lỗi cần cập nhật những phần mềm mới nhất để tránh trường hợp hacker lợi dụng những lỗ hổng có trong ứng dụng chưa được sữa chữa trong phiên bản cũ. Nắm được hoạt động của các phần mềm sử dụng, ý nghĩa của các file cấu hình quan trọng (như ete/password), áp dụng các biện pháp bảo vệ cấu hình như sử dụng phương thức mã hóa hashing code (MD5). Sử dụng một vài công cụ có thể phát hiện ra các hoạt động truy nhập không hợp lệ vào một hệ thống như logfile. Kiểm soát chặt chẽ các quyền của các tài khoản trên hệ thống; không sử dụng quyền root trong các trường hợp không cần thiết. Đối với các tài khoản không sử dụng trên hệ thống cần đổi mật khẩu hoặc hủy bỏ. Quản lý mật khẩu một cách chặt chẽ: Buộc người sử dụng thay đổi mật khẩu trong một thời gian nhất định. Hầu hết các hệ thống hiện nay đều hỗ trợ cơ chế này; nếu không thay đổi mật khẩu tài khoản đó không còn giá trị trên hệ thống. Trong trường hợp người sử dụng bị mất mật khẩu, để cấp lại mật khẩu mới cần có các thủ tục khác để xác thực người sử dụng… Cần giám sát và theo dõi chặt chẽ các chương trình đổi mật khẩu; đây thường là mục tiêu để tấn công. 2.4.2 Với những nhà thiết kế ứng dụng WEB Đảm bảo được những dữ liệu được cung cấp từ người dùng hợp lệ : -Tất cả những dữ liệu được đưa vào ứng dụng phải đảm bảo được kiểm tra kỹ, loại bỏ hoặc từ chối những kí tự đặc biệt như ’/… -Tuy nhiên, không nên dùng ngôn ngữ trình khách (như JavaScript, VBScript..) để kiểm tra dữ liệu nhập hợp lệ vì hacker vẩn có thể lợi dụng để tấn công như trong kỹ thuật mã hóa URL hay vượt đường dẫn…Cách tốt nhất vẫn là kiểm tra ngay trên ứng dụng. -Nếu không thể từ chối cũng như loại bỏ những kí tự, ứng dụng cần kiểm tra dữ liệu xuất để đảm bảo rằng dữ liệu xuất đến trình duyệt là an toàn. Chứng thực người dùng : -Nhiều ứng dụng hiện nay quản lí một phiên làm việc của người dùng bằng sessionID nhưng sự yếu kém trong cách quản lí một phiên làm việc khiến cho hacker có thể dể dàng kiểm soát được một phiên là việc của người dùng. Vì vậy đối với phiên làm việc, ứng dụng sẽ bị hủy ngay sau khi trình duyệt đóng kết nối. Mã hóa dữ liệu quan trọng: -Những thông tin quan trọng như tên/mật khẩu, credit card….cần được mã hóa để tránh hacker có thể lấy được nội dung và sử dụng chúng như trong kỹ thuật XSS, SQL Injection..Ngoài ra, trong quá trình truyền, kết hợp phương pháp SSL để tránh trường hợp mất mát thông tin trên đường truyền. -Hiện nay trong lĩnh vực mã hóa dữ liệu, có rất nhiều phương pháp mã hóa như mã hóa khóa bí mật, mã hóa công khai…nên tùy vào mức độ sử dụng cũng như tầm quan trọng mà ứng dụng có thể chọn một trong những phương pháp mã hóa để đảm bảo dữ liệu được bảo mật. -Tuy nhiên, hiện nay nhiều nhà ứng dụng lại mã hóa dữ liệu kết hợp với vài thông tin như ngày giờ, địa chỉ IP…khiến cho hacker có thể dể dàng dự đoán, hoặc nội dung dữ liệu mã hóa quá ngắn khiến cho hacker có thể sử dụng những công cụ sẳn có để vét cạn những khả năng có thể xảy ra như trong kĩ thuật tấn công sessionID. Hoặc phương pháp mã hóa đã quá củ khiến cho hacker có thể dể dàng dùng những công cụ giải mã như ”John and Ripper”. -Do đó, cần chọn thuật toán mã hóa cùng với khóa để mã hóa sao cho dữ liệu không để dự đoán và bị vét cạn. -Ngoài ra, việc dùng SSL là cần thiết để tránh trường hợp dữ liệu bị đánh cắp trên đường truyền. Dùng phần mềm có sẵn : -Hiện nay trên thị trường xuất hiện những phần mềm như Appshield hoạt động như một proxy, nghĩa là trung gian giũa máy khách và máy chủ, mọi yêu cầu từ máy khách đều bị qua phần mềm này, nếu phát hiện trong yêu cầu có ẩn chứa khả năng tấn công lên hệ thống, nó sẽ từ chối yêu cầu, không gửi lên máy chủ nữa mà sẽ tự động hủy yêu cầu. Thiết lập quyền : -Với những ứng dụng, hệ thống chỉ nên cung cấp những quyền hạn nhất định sao cho ứng dụng đủ thực hiện các chức năng của mình. Không nên đưa quyền cao nhất, như root vì hacker có thể lợi dụng quyền root này để có thể t hực thi những câu lệnh của hệ thống, như trong kĩ thuật tấn công SQL Injectio.. 2.4.3 Với những người sừ dụng Web Đưa ra những lời cảnh báo cho những người sử dụng Web rủi ro có thể xảy ra, đặc biệt nên chú ý khi cho phép trình duyệt thực thi ngôn ngữ trình khách trên máy của mình, vì khả năng lợi dụng ngôn ngữ này là rất lớn như trong kỹ thuật sessionID. Sau khi sử dụng xong ứng dụng cần thoát ra khỏi hệ thống theo quy định (như Sigh-out của yahoo) để những nội dung quan trọng lưu dữ trong cookie bị hủy bỏ, tránh khả năng hacker vẩn tiếp tục dùng sessionID tồn tại đó để đăng nhập vaò hệ thống hợp lệ. Quản lí tài khoản : -Người dùng cần nhận thức được vai trò quan trọng trong việc bảo vệ tài khoản cảu mình. Các hoạt động bảo vệ tài khoản bao gồm việc bảo vệ mật khẩu, thay đổi mật khẩu định kỳ, đăng kí thời điểm… Sử dụng các phần mềm bảo vệ máy trạm của người sử dụng, log out khỏi hệ thống sau một thời gian time-out.. CHƯƠNG 3 XÂY DỰNG DEMO TẤN CÔNG SQL INJECTION SỬ DỤNG CÂU LỆNH SELECT 3.1 MỤC TIÊU THỬ NGHIỆM Trang web “The Hunter” cung cấp cho khách hàng về mặt công nghệ dịch vụ thực phẩm. Nhiệm vụ của trang web này là để tìm kiếm, nguồn cung cấp đa dạng về đặc sản để dịch vụ thực phẩm của trang web và khách hàng bán lẻ. FreshPoint có 27 hoạt động phân phối công ty sở hữu trên khắp Bắc Mỹ. Với hơn $ 750 triệu USD doanh thu hàng năm, công ty phục vụ rất nhiều các nhà khai thác dịch vụ thực phẩm hàng đầu. Freshpoint đã hoạt động trong khu vực hầu như tất cả các ngành công nghiệp sản xuất mới bao gồm cả phân phối bán lẻ và bán buôn, tìm nguồn cung ứng nhập khẩu / xuất khẩu và vận chuyển. FreshPoint là một công ty con của SYSCO, dịch vụ thực phẩm lớn nhất và tiếp thị công ty phân phối tại Bắc Mỹ. Trang web bao gồm các mục chính : What’s hot: Mục mặt hàng hot nhất trong tuần này. What’s new: Mục mặt hàng mới cập nhật. What’s out: Mục ngoài những mặt hàng nói trên. Product Index: Chỉ mục sản phẩm Phần demo này của em sẽ thử nghiệm lỗi SQL Injection trong mục Product Index vì trong mục này cho phép khách hàng truy vấn đến sản phẩm trong cơ sở dữ liệu. 3.2 CHIẾN LƯỢC TẤN CÔNG BẰNG SELECT SQL INJECTION 3.2.1 Kỹ thuật tấn công Select SQL Injection Ngoài kỹ thuật đơn giản trên nêu ở chương 2, việc tấn công SQL Injection sử dụng câu lệnh Select 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: 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. 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. 3.2.2 Các bước tấn công Bước 1 : Thử lỗi Đầu tiên lổi sql được thử bằng cách thêm dấu ' sau câu lệnh truy vấn, với kết quả server trả về thể hiện lổi sql phát hiện được, thì bước tiếp theo là sử dụng các lệnh truy vấn tấn công lấy thông tin của database: Bước 2: Lấy các thông tin như tên của server, tên của database: Thực hiện tấn công sql dạng sử dụng câu lệnh SELECT, bằng cách thêm đoạn truy vấn: “ ' and 1=convert(int,(select top 1 @@version))-- ”: buộc server gửi kết quả lổi vì lệnh truy vấn không thực hiện được, trong đó có đưa ra cả version của database. “ ' and 1=convert(int,(select top 1 @@servername))--”:buộc server gửi kết quả lổi vì lệnh truy vấn không thực hiện được, trong đó có đưa ra cả tên server. Tương tự “ ' and 1=convert(int,(select top 1 db_name()))-- ”:buộc server gửi kết quả lổi vì lệnh truy vấn không thực hiện được, trong đó có đưa ra cả tên database. Hay “ ' and 1=convert(int,(select top 1 user_name()))-- ”:buộc server gửi kết quả lổi vì lệnh truy vấn không thực hiện được, trong đó có đưa ra cả tên người dùng server. Bước 3: Lấy tên các table trong database: “'and1=convert (int, (select top 1table_name from information_schema.tables))--”: (truy vấn bảng đầu tiên trong information_schema) buộc server gửi kết quả lổi vì lệnh truy vấn không thực hiện được, trong đó có đưa ra cả tên table đầu tiên trong information_schema Phức tạp hơn một chút, kết hợp câu truy vấn cùng với where (chỉ nơi), not in (không có trong) ta có một cú pháp như: “ ' and 1=convert(int,(select top 1 table_name from information_schema.tables where table_name not in (‘ph_ask_hunter’)))-- ” : (truy vấn bảng đầu tiên trong information_schema nhưng không phải bảng ph_ask_hunter) buộc server gửi kết quả lổi vì lệnh truy vấn không thực hiện được, trong đó có đưa ra tên table kế tiếp (đã loại trừ ph_ask_hunter). Khi đã có table kế tiếp là dtproperties, ta tiếp tục sử dụng nó để tra ra table tiếp theo vẫn bằng cú pháp: not in “ ' and 1=convert(int,(select top 1 table_name from information_schema.tables where table_name not in (‘ph_ask_hunter’,’dtproperties’)))-- ” : server sẽ đưa ra tên table kế tiếp (đã loại trừ ph_ask_hunter, dtproperties). Tiếp theo đó ta lấy được các bảng fp_newsletter, fp_newsletter_Failed, ph_newletter, product, sysconstraints, sysseqments. Bước 4: Lấy tên các column trong table dtproperties : Tương tự như lấy tên table, giờ ta có thể lấy tên columns của một trong những table mà ta có được: “ ' and 1=convert(int,(select top 1 column_name from information_schema.columns where table_name =(’dtproperties’)))-- ” : server sẽ trả về tên column đầu trong bảng dtproperties. Tiếp đó, để lấy các columns kế tiếp trong bảng dtproperties ta chỉ cần thêm cú pháp: and column_name not in (…tên column đã có…) Tiếp tục như vậy ta lấy được toàn bộ columns trong table dtproperties: id, objectid, property, value, uvalue, lvalue, version. 3.3 Minh họa kết quả tấn công bằng hình ảnh Thử lỗi SQL Injection Hình 3.1 Server báo lỗi “chưa đóng dấu phẩy trước chuỗi 2253”. Khai thác các thông tin về tên server, database … Hình 3.2 Server trả kết quả lỗi chứa cả tên server Khai thác tên của các table trong database Hình 3.4 Table đầu tiên trong information_schema Hình 3.5 Server trả kết quả lỗi chứa cả tên table tiếp theo Hình 3.6 Server trả kết quả lỗi chứa cả tên table kế tiếp dtproperties Hình 3.7 Tất cả table name đã được lấy Khai thác tên các column trong table dtproperties Hình 3.8 Server trả về tên column đầu trong table dtproperties Hình 3.9 Server trả về tên column kế tiếp trong table dtproperties KẾT LUẬN 1. NHỮNG VẤN ĐỀ ĐẠT ĐƯỢC Theo yêu cầu đặt ra ban đầu là “Nghiên cứu phát hiện và khai thác một số yếu điểm trên website”, cho đến thời điểm hiện tại, khóa luận đã đạt được các nội dung sau: Tìm hiểu các kỹ thuật tấn công ứng dụng Web bao gồm các kỹ thuật: Thao tác trên tham số truyền như URL, biến ẩn form, cookie, HTTP header. Chèn mã lệnh thực thi trên trình khách Cross-site Scripting. Chèn câu truy vấn SQL Đánh chiếm phiên làm việc của người dùng Tràn bộ đệm Từ chối dịch vụ Các kỹ thuật khác như: Mã hóa URL, vượt đường dẫn, kí tự rỗng, ngôn ngữ phía trình chủ,… Các biện pháp bảo mật từ sự kết hợp giữa nhà quản trị mạng, nhà thiết kế ứng dụng Web và người dùng Về chương trình “Web Checker” đã đạt một số nội dung cơ bản sau: Kiểm tra một trang Web có khả năng bị tấn công bằng những kỹ thuật chèn câu lệnh SQL, thay đổi tham số hay không. Chương trình cho phép người dùng thực hiện giao tiếp với trình chủ giống như một trình duyệt thông thường. 2. HƯỚNG PHÁT TRIỂN Trong phạm vi khóa luận tốt nghiệp, khóa luận cơ bản đã đạt được các yêu cầu đặt ra. Tuy nhiên, các kết quả còn khá khiêm tốn do hạn chế về tài liệu và thời gian. Trong thời gian tới, nếu có điều kiện, khóa luận sẽ cố gắng phát triển thêm những nội dung sau: 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. 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ụ. Khai triển chương trình phát hiện lỗ hổng tốt hơn, trên nhiều phương diện kỹ thuật. Phát triển chương trình như một Proxy giữa trình chủ với các trình duyệt. Mọi yêu cầu từ trình duyệt hay trả lời từ trình chủđều phải đi qua chương trình. Bất cứ khi nào chương trình kiểm tra thấy khả năng tấn công từ trình duyệt, chương trình sẽ từ chối yêu cầu đó và đóng kết nối. TÀI LIỆU THAM KHẢO Tiếng Việt [1]. Lê Đình Duy, Bảo vệ ứng dụng web chống tấn công kiểu Sql Injection, kỷ yếu hội thảo CNTT – 2004, ĐHKHTN Tp.HCM. [2] Nguyễn Duy Thăng, Nguyễn Minh Thu, Nghiên cứu một số vấn đề về bảo mật, CNTT – 2003, ĐHKHTN Tp.HCM. Tiếng nước ngoài [3]. Justin Clarke, SQL Injection Attacks and Defense, Syngress, 2009. Trang Web [4]. [5]. [6]. [7]. [8]. [9]. MỤC LỤC LỜI CẢM ƠN LỜI CAM ĐOAN DANH MỤC VIẾT TẮT DANH MỤC HÌNH ẢNH

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

  • docĐồ án - PHƯƠNG PHÁP TẤN CÔNG VÀO TRANG WEB VÀ CÁCH PHỒNG CHỐNG, XÂY DỰNG ỨNG DỤNG DEMO SQL INJECTION.doc