Đồ á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ìm hiểu các kỹ thuật tấn công ứng dụng Web bao gồm các kỹ thuật: o Thao tác trên tham số truyền như URL, biến ẩn form, cookie, HTTP header. o Chèn mã lệnh thực thi trên trình khách Cross-site Scripting. o Chèn câu truy vấn SQL o Đánh chiếm phiên làm việc của người dùng o Tràn bộ đệm o Từ chối dịch vụ o 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

doc65 trang | Chia sẻ: lylyngoc | Ngày: 25/10/2013 | Lượt xem: 6164 | Lượt tải: 34download
Bạn đang xem nội dung 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 về máy bạn click vào nút DOWNLOAD ở trên
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