1. Trang chủ
  2. » Luận Văn - Báo Cáo

Kiểm thử bảo mật Website với Nikto

61 1,1K 17

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 61
Dung lượng 567,74 KB
File đính kèm baomatnikto.rar (3 MB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Qua thời gian thực tập tại trung tâm VDC Training Đà Nẵng, em nhận thấy được việc kiểm thử vấn đề bảo mật của một trang web là vô cùng quan trọng. Vì thế em đã mạnh dạn chọn đề tài với tiêu đề: : “Tìm hiểu các loại lỗi bảo mật Web với Nikto”Đại học Duy Tân

Trang 1

MỤC LỤC

LỜI CẢM ƠN 4

DANH MỤC SƠ ĐỒ 5

DANH MỤC BẢNG 5

KÝ HIỆU VÀ VIẾT TẮT 6

MỞ ĐẦU 8

1 Đặt Vấn Đề 8

2 Giải Quyết Vấn Đề 8

3 Phạm Vi Đề Tài 9

4 Phương Pháp Nghiên Cứu 9

5 Bố Cục Chuyên Đề 9

CHƯƠNG 1: TỔNG QUAN VỀ BẢO MẬT WEBSITE 10

1 Tổng Quan Về Bảo mật 10

2 Kiểm Thử An Ninh Mạng 10

2.1 Kiểm Thử An Ninh Phần Mềm 12

2.2 Kiểm Thử An Ninh Phần Mạng 12

2.3 So Sánh KTAN Phần Mềm Và KTAN Mạng 14

2.4 Mục Đích 15

2.5 Trách Nhiệm Của Kiểm Thử Bảo mật 15

2.6 Những Ưu Điểm Trong Kiểm Thử Bảo mật 16

3 Các Kỹ Thuật Tấn Công Web Và Cách Phòng Chống 17

3.1 SQL Injection 17

3.1.1 Tìm Hiểu Về Sql Injection 17

Trang 2

3.1.2 Tấn công SQL Injection .19

3.1.3 Cách Phòng Tránh SQL Injection 26

3.2 Cross Site Scripting (XSS) 31

3.2.1 Tìm hiểu về XSS .31

3.2.2 Tấn công bằng XSS 32

3.2.3 Phương pháp phòng chống XSS 35

CHƯƠNG 2: GIỚI THIỆU CÔNG CỤ NIKTO 36

1 Giới Thiệu Phần Mềm Nikto 36

1.1 Tổng Quan 36

1.2 Lịch Sử 36

2 Cài Đặt 37

2.1 Yêu Cầu 37

2.2 Cài Đặt 37

3 Sử Dụng 37

3.1 Kiểm Tra Cơ Bản 37

3.2 Kiểm Tra Nhiều Port 38

3.3 Kiểm Tra Nhiều Host 38

3.4 Sử Dụng Proxy 39

3.5 Cập Nhật 39

3.6 Các Tính Năng Tương Tác Khác 39

4.Command Line Tùy Chọn 41

4.1 Tất Cả Tùy Chọn 41

4.2 Kỹ Thuật Tấn Công 46

Trang 3

4.4 Scan Tuning 47

5 Cấu Hình Tập Tin 49

5.1 Nơi Lưu Trữ 49

5.2 Định Dạng 49

6 Đầu Ra Và Báo Cáo 49

6.1 Các Định Dạng Xuất Khẩu 49

6.2 Html Và Xml 49

6.3 Đóng Góp Mã Nguồn Mở 50

6.4 Phát Triển Mã Nguồn 50

7 Sử Lý Sự Cố Và Giấy Phép 50

7.1 Xử lý sự cố 50

7.2 Giấy Phép 50

CHƯƠNG 3: TRIỂN KHAI KIỂM THỬ BẢO MẬT WEBSITE VỚI NIKTO 52

1 Mục Đích Triển Khai 52

2 Các Bước Thực Hiện 52

3 Demo Kết Quả 52

3.1 Cài Đặt Hệ Điều Hành Backtrack 5 R3 52

3.2 Khởi Động Nikto 53

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 56

TÀI LIỆU THAM KHẢO 58

Trang 4

LỜI CẢM ƠN

Em xin gởi lời cảm ơn chân thành và sự tri ân sâu sắc đến các thầy cô khoa CôngNghệ Thông Tin trường Đại Học Duy Tân Đặc biệt, thầy Nguyễn Kim Tuấn đã nhiệt tìnhhướng dẫn em hoàn thành tốt chuyên đề thực tập Em cũng xin chân thành cảm ơn đếnthầy Nguyễn Song Tùng và các anh chị VDC Tranning đã giúp đỡ em trong quá trìnhthực tập tại đây

Trong quá trình thực tập, cũng như là trong quá trình làm bài báo cáo, khó tránhkhỏi sai sót, rất mong các Thầy, Cô bỏ qua Đồng thời do kinh nghiệm thực tiễn còn hạnchế nên bài báo cáo không thể tránh khỏi những thiếu sót, em rất mong nhận được ý kiếnđóng góp Thầy, Cô để em học thêm được nhiều kinh nghiệm và sẽ hoàn thành tốt hơn

Em xin chân thành cảm ơn !

Trang 6

KÝ HIỆU VÀ VIẾT TẮT

TỪ VIẾT TẮT TỪ VIẾT ĐẦY ĐỦ

WVS Web Vulnerability Scanner

BASE Basic Analysis and Security Engine

CGI Common Gateway Interface

CNTT Công Nghệ Thông Tin

DTD Document Type Definition

DVWA Damn Vulnerable Web Application

Ddos Distributed Denial of Service

HTTP HyperText Transfer Protocol

HTTPS Hypertext Transfer Protocol Secure

IP Internet Protocol

IDS Intrusion Detection System

KTAN Kiểm Thử Bảo mật

Policymaker Nhà định nghĩa chính sách

POSIX Portable Operating System Interface

SQL Linjection Structured Query Language injection

SSL Secure Sockets Layer

TCP Transmission Control Protocol

UDP User Datagram Protocol

URL Uniform Resource Locator

URI Uniform Resource Identifier

XSS Cross-site scripting

Trang 7

TÓM TẮT

Ngày nay, ứng dụng Web đã có mặt trong hầu hết mọi lĩnh vực của cuộc sống hiệnđại Cùng với sự phát triển nhanh chóng của ứng dụng Web thì vấn đề bảo mật ứng dụngWeb đang là lĩnh vực vô cùng nóng hổi nhằm đảm bảo an toàn cho tất cả người dùng ứngdụng Vậy nếu có một lỗi bảo mật xảy ra trong ứng dụng Web thì điều này có thể ảnhhưởng tới tất cảngười dùng, ảnh hưởng tới uy tín của công ty, tổ chức đó, gây mất mát vềmặt tài chính và các ràng buộc về pháp lý,…

Đề tài “Tìm hiểu các loại lỗi bảo mật Web với Nikto” sẽ đáp ứng phần nào nhu

cầu cấp thiết về bảo mật hiện nay Xây dựng nên quy trình phục vụ cho việc kiểm tra vàphát hiện các điểm yếu an toàn thông tin trong ứng dụng Web, từ đó đưa ra báo cáo đánhgiá vềan toàn thông tin cho Website

ABSTRACT

Today, the Web application has been present in almost all areas of modern life Along with the rapid development of Web applications , the problem is Web applicationsecurity is extremely hot areas to ensure safety for all users of the application So if there

is a security error occurs in the Web application , this can affect all users , which affectsthe reputation of the company or organization , causing financial loss and the constraintslegal,

Titled "Learn the types of security vulnerabilities with Nikto Web " will partially

meet the urgent need for security today Construction should serve the process ofinspection and detection of information security weaknesses in Web applications , whichreleased a report on the safety assessment information for the Website

KEY WORD

SafetySecurityTesting

Trang 8

MỞ ĐẦU

1 Đặt Vấn Đề

Hoạt động ổn định của một trang web thường có rất nhiều yêu cầu nhất là chủ yếu

về bảo mật Thông qua vấn đề bảo mật, các website sẽ thu hơn 50% lợi nhuận Do vậy,một website muốn phát triển bền vững thì cần phải kiểm soát được bảo mậtbảo mật chongười dùng

Đất nước ta đang trong quá trình công nghiệp hóa – hiện đại hóa, có rất nhiều dự

án đầu tư thuộc mọi thành phần công nghệ thông tin, mọi ngành nghề và mọi lĩnh vực Đểthực hiện được các dự án này thì việc đảm bảo tính an toàn, toàn vẹn, sẵn sàng của thôngtin là vô cùng quang trọng Có rất nhiều cách để bảo mật nhưng làm cách nào để biết hệthống bảo mật của trang web đó có lỗ hỗng gì và làm sao khắc phục nó

Hiện nay , Các vấn đề này đã và đang được rất nhiều viện ngiên cứu, các cơ quan,công ty về bảo mật cũng như những nhà mạng đang quan tâm

Qua thời gian thực tập tại trung tâm VDC Training Đà Nẵng, em nhận thấy đượcviệc kiểm thử vấn đề bảo mật của một trang web là vô cùng quan trọng Vì thế em đãmạnh dạn chọn đề tài với tiêu đề: : “Tìm hiểu các loại lỗi bảo mật Web với Nikto”

2 Giải Quyết Vấn Đề

Chính vì nhu cầu của con người ngày càng được nâng cao, đòi hỏi các ứng dụngphục vụ ngày càng được cải tiến ở mức cao hơn Nên nguy cơ các hệ thống bảo mật bị tấncông ngày càng cao hơn và nhiều hơn ở mức độ nghiêm trọng hơn Đòi hỏi chúng ta cầnphải nhanh chóng xây dựng các biện pháp đề phòng hiệu quả hơn

Có nhiều công cụ để bạn có thể kiểm tra trang Web bất kì nào đó có những lỗi hệthống nào hay mức độ an toàn của nó là bao nhiêu Nhưng đối Nikto thì bạn sẽ biết chínhxác và một cách cụ thể nhất

Trang 9

3 Phạm Vi Đề Tài

Kiểm thử các lỗi bảo mật Web, từ đó đề xuất xây dựng quy trình kiểm thử bảo mậtnhằm ứng dụng kiểm thử các lỗi bảo mật Web đối với các ứng dụng Web đã hoàn thiện

4 Phương Pháp Nghiên Cứu

Nghiên cứu tổng quan về các lỗi bảo mật

Nghiên cứu những lỗi bảo mật ảnh hưởng đến ứng dụng Web hiện nay

Nghiên cứu các quy trình, công cụ kiểm tra lỗi bảo mật Web đã phát triển và đềxuất quy trình mới

5 Bố Cục Chuyên Đề

Ngoài phần mở đầu và kết luận, chuyên đề chia thành 3 chương:

Chương 1: Tổng quan về bảo mật website

Chương 2: Giới thiệu công cụ Nikto

Chương 3 : Triển khai kiểm thử bảo mật website với Nikto

Trang 10

CHƯƠNG 1: TỔNG QUAN VỀ BẢO MẬT WEBSITE

1 Tổng Quan Về Bảo mật

Bảo mật là sự thỏa hiệp chức năng trên khả năng sử dụng Nếu bảo mật của hệthống quá chặt chẽ, nó sẽ trở nên rất khó sử dụng hoặc khó hoạt động một cách hiệu quả.Nếu bảo mật quá đơn giản, hệ thống dễ bị tấn công và xâm nhập

Kiểm thử bảo mật web, trong nghĩa truyền thống, là kiểm thử hiệu quả sự bảo vệtoàn bộ hệ thống web Nó yêu cầu kết hợp nhiều kiến thức về các công nghệ bảo mật,côngnghệ mạng, lập trình và kinh nghiệm thực tế về thâm nhập các hệ thống mạng Hầu hếtcác kiểm thử viên phần mềm không có loại kiến thức này Tuy nhiên, chúng ta nên hiểucác vấn đề bảo mật sao cho chúng ta hiểu được các công việc chúng ta nên làm và cáccông việc nên được thực hiện bởi các chuyên gia khác

2 Kiểm Thử An Ninh Mạng

Kiểm thử là tiến trình thực thi một chương trình với mục đích tìm ra lỗi

Kiểm thử là tiến trình vận hành hệ thống hoặc thành phần của hệ thống dưới nhữngđiều kiện xác định, quan sát hoặc ghi nhận kết quả và đưa ra đánh giá về hệ thống hoặcthành phần đó (IEEE 610.12-1990.IEEE Standard Glossary of Software EngineeringTerminology.Technicalreport-IEEE-1990)

Kiểm thử được mô tả là các thủ tục được thực hiện nhằm đánh giá một vài mặt củaphần mềm

Bao trùm lên tất cả, có thể coi kiểm thử là hành động tìm ra lỗi với mục đích đểlàm phần mềm được tốt hơn Theo quan niệm thông thường của người phát triển phầnmềm là: kiểm thử phát hiện lỗi là không thành công và ngược lại là thành công Tuynhiên, theo định nghĩa của Myers, tức là đứng trên quan điểm người kiểm thử, thì kiểmthử mà không phát hiện được lỗi được coi là không thành công, ngược lại nếu kiểm thửphát hiện được lỗi được coi là thành công Rõ ràng, người phát triển phần mềm cố viếtmột phần mềm tốt nhất và không có lỗi, còn người kiểm thử cố tìm ra lỗi của phần mềm

Trang 11

được viết ra Như vậy, mục đích của kiểm thử là "phản biện" lại với phát triển phần mềmnhằm mục đích làm cho phần mềm tốt hơn.

Bởi vì trong thực tế, không có phần mềm nào mà không có lỗi Kiểm thử an ninh(KTAN) phần mềm hay mạng là một loại kiểm thử đặc biệt nhằm mục đích kiểm tra vàxác nhận phần mềm hay mạng đó có đạt yêu cầu về bảo mật không Như vậy, hướngnghiên cứu KTAN chia làm hai hướng, đó là KTAN phần mềm và KTAN mạng

Sơ đồ 1: Sơ đồ phân loại KTAN

QuétĐiểmYếu

KiểmThửXâmNhập

Trang 12

2.1 Kiểm Thử An Ninh Phần Mềm

KTAN phần mềm là một loại kiểm thử trong đó quá trình kiểm thử giúp nhận biếtphần mềm đang xét có những đặc tính bảo mật đúng với yêu cầu thiết kế đặt ra căn cứtrên đặc tả yêu cầu bảo mật cho nó hay không Có hai hướng tiếp cận chính của KTANphần mềm là: KTAN chức năng và KTAN điểm yếu KTAN chức năng dùng để kiểm trachức năng bảo mật (bí mật dữ liệu, toàn vẹn, sẵn sàng, xác thực, phân quyền, mã hóa,điều khiển truy cập, audit, ) hoặc hệ thống bảo mật (tường lửa, phát hiện xâm nhập -IDS, ) nhằm đảm bảo phần mềm có hoạt động đúng chức năng, hiệu quả và sẵn sàng nhưthiết kế và phát triển hay không KTAN điểm yếu thực hiện như một kẻ tấn công nhằmphát hiện những điểm yếu hoặc sai sót về bảo mật của phần mềm KTAN điểm yếu phầnmềm trực tiếp nhận diện và khám phá những điểm yếu hệ thống vẫn chưa được biết có thểgây ra bởi những thiết sót thiết kế hay lỗi lập trình, thuật toán

2.2 Kiểm Thử An Ninh Phần Mạng

KTAN mạng là những hoạt động nhằm cung cấp thông tin về sự an toàn và toàn vẹncủa mạng máy tính và những hệ thống liên quan của tổ chức nào đó thông qua việc thẩmtra và xác nhận những điều kiện bảo mật hệ thống mạng đều hoạt động bình thường.KTAN mạng bao gồm hai loại chính là: quét điểm yếu hay còn gọi là quét lỗ hổng(vulnerability scanner) và kiểm thử xâm nhập Trong đó quét điểm yếu là quá trình tìmnhững điểm yếu, lỗ hổng bảo mật trong mạng của tổ chức, công ty hoặc cá nhân

Ý tưởng cơ bản của loại hình KTAN này là quét toàn bộ nút mạng và cổng có trêntừng nút mạng, sau đó với thông tin nhận được nó sẽ phân tích và đánh giá hệ thống mạng

an toàn như thế nào Thuật ngữ "đánh giá điểm yếu" được sử dụng trong trường hợp quétđiểm yếu có nghĩa là "quá trình" tìm kiếm sự tồn tại của những lỗ hổng đã biết bên tronghoặc bên ngoài trong một mạng Quá trình này sẽ xác định lỗ hổng để có thể loại bỏ trướckhi nó bị chương trình độc hại hoặc tin tặc khai thác Các lỗ hổng tạo thành mối đe dọatrong mạng bao gồm lỗi phần mềm, dịch vụ không cần thiết, cấu hình sai hoặc tài khoảnngười dùng không an toàn Có một thực tế là những điểm yếu đơn lẻ có nguy cơ về bảomật không cao nhưng khi gộp chung trong một hệ thống có thể gây ra những nguy cơ về

Trang 13

Vì vậy, kiểm thử xâm nhập - là một thành phần của KTAN, tuy nhiên nó đi xa hơn sovới quét điểm yếu, nó tập trung vào quá trình khai thác, lợi dụng các điểm yếu, lỗ hổngnhằm xâm nhập trái phép, leo thang đặc quyền, duy trì truy cập vào hệ thống mục tiêu,hoặc tìm ra sự phối hợp của các điểm yếu trên một hoặc nhiều hệ thống để tạo ra sự truycập vào hệ thống mà thường khó đạt được khi khai thác những điểm yếu đơn lẻ Nói cáchkhác, quét điểm yếu đưa cái nhìn về kẽ hở bảo mật nhưng không đánh giá tác hại và ảnhhưởng của nó với hệ thống Còn kiểm thử xâm nhập quan tâm đến cách nhìn các vấn đềbảo mật của hệ thống theo quan điểm của kẻ tấn công.

Có rất nhiều phương pháp kiểm thử phần mềm phân biệt theo nhiều tiêu chí khácnhau như: kiểm thử bằng tay hoặc tự động; kiểm thử hộp trắng, hộp đen hoặc hộp xám;đội xanh hoặc đội đỏ; xu thế hiện nay đang phát triển một phương pháp kiểm thử là agiletesting được giới nghiên cứu cũng như doanh nghiệp đón nhận khá tích cực.Có nhiềuphương pháp để KTAN phần mềm như liệt kê sau đây: KTAN hình thức (formal securitytesting); KTAN dựa vào mô hình (model-based security testing); KTAN dựa vào lỗi chèn(fault injection-based security testing); KTAN mờ (fuzzy testing); Kiểm thử quét điểmyếu (vulnerability scanning testing); Kiểm thử dựa vào thuộc tính (property-basedtesting); KTAN dựa vào hộp trắng (white box-based security testing); KTAN dựa vào rủi

ro (risk-based security testing)

Tùy vào loại KTAN mạng và phương pháp sử dụng, có thể sử dụng những kỹ thuậtsau: quét cổng, lập bản đồ mạng (network mapping), quét điểm yếu - lỗ hổng(vulnerability scanner), bẻ mật khẩu (password crack), kiểm thử xâm nhập, quét virus.Trong khi kiểm thử phần mềm tập trung vào các công cụ chuyên dụng do bản thâncác công ty kiểm thử tự phát triển như TestArchitectTM, IBM Rational PerformanceTester, và một số các công cụ mã nguồn mở như LoadRunner 9.2, QTP 9.5

Thì kiểm thử an ninh chủ yếu tập trung vào các công cụ mã nguồn mở chủ yếu trên

hệ điều hành Linux như Knoppix, Helix, Backtrack, PHLAK, nUbuntu, rất, rất nhiều vàmột số công cụ bản quyền như Impact, Metasploit Pro,v v

Trang 14

2.3 So Sánh KTAN Phần Mềm Và KTAN Mạng

Bảng 1: So sánh khác nhau giữa hai loại hình kiểm thử.

Kiểm Thử Phần Mềm Kiểm Thử Bảo mật

Kiến thức

Không cần kiến thứcCNTT nhiều Cần kiếnthức lĩnh vực hoạt độngcủa phần mềm được kiểmthử

Cần kiến thức CNTTchuyên sâu

Giai đoạn thực hiện

Thực hiện từ lúc thiết kếđến lập trình, triển khai và

sử dụng sản phẩm Chủyếu giai đoạn lập trình

Chủ yếu thực hiện ở giaiđoạn triển khai và sửdụng

Yêu cầu kỹ năng

Phân tích tốt, kiên nhẫn,cẩn thận, tiếng Anh

Phân tích rất tốt, kiênnhẫn, sáng tạo, đa nghi

Công cụ

Bằng tay, tự động chủ yếuchuyên dụng của từng công

ty kiểm thử

Bằng tay, chủ yếu mãnguồn mở trên Linux

Tóm lại, một cách tổng quan, ta thấy quan hệ của bảo mật và KTAN cũng giốngnhư quan hệ giữa phát triển phần mềm và kiểm thử phần mềm Trong khi những nghiên

Trang 15

hiệu quả, sẵn sàng và trách nhiệm (xem chi tiết bài "đôi điều về bảo mật"), thì KTANchuyên nghiên cứu những phương pháp và kỹ thuật để phát hiện những điểm yếu về bảomật hoặc những phương pháp gây tổn thương hệ thống bảo mật nhằm xâm nhập vào hệthống như kiểm thử xâm nhập Cần đặc biệt nhấn mạnh là phương pháp và cách thức củakiểm thử xâm nhập cũng là phương pháp và cách thức của tin tặc nhằm tấn công vào cácđiểm yếu hoặc các kiểm soát bảo mật của hệ thống Nhưng mục đích của hai đối tượng lạikhác nhau, trong khi người kiểm thử xâm nhập cố gắng tấn công vào hệ thống nhằmchứng minh sự tồn tại của điểm yếu, tác hại và hậu quả của nó nếu không sớm khắc phục

và đề xuất các giải pháp gia cố, giảm thiểu tác hại của các điểm yếu này thì tin tặc tấncông với mục đích phá hoại, tư lợi, hoặc đôi khi chỉ là thể hiện bản thân hoặc cho vui

Ngoài ra, không giống như kiểm thử phần mềm thường tập trung thực hiện tronggiai đoạn phát triển, KTAN thường diễn ra trong cả giai đoạn phát triển lẫn giai đoạn hoạtđộng hay giai đoạn "sống" của hệ thống nhưng tập trung chủ yếu ở giai đoạn "sống", vàphải thực hiện suốt vòng đời hoạt động của mạng hay phần mềm

2.4 Mục Đích

Với tư cách kiểm thử viên, là tập trung kiểm thử bảo mật của Website và ứng dụngWeb ở mức ứng dụng Điều đó có nghĩa là chúng ta tìm các lỗ hổng và rò rĩ thông tin gâynên chủ yếu do lập trình và do cấu hình sai các trình chủ web và các trình chủ ứng dụngkhác

2.5 Trách Nhiệm Của Kiểm Thử Bảo mật

Nhà định nghĩa chính sách (policymaker), định nghĩa các yêu cầu bảo mật nhằmtăng độ tin cậy của người sử dụng và nhà sản xuất về bảo mật hệ thống

Người quản trị mạng, thiết kế và cài đặt các biện pháp bảo mật nhằm cung cấp bảomật ở mức hoạt động

Lập trình viên phần mềm, chịu trách nhiệm kiểm thử hệ thống nhằm phát hiện cáclỗi chức năng, tương tác cấu hình và khả năng tương thích khi họ liên quan đến cài đặtbảo mật (chủ yếu ở mức ứng dụng và có thể ở mức hoạt động ), phát hiện các vấn đề dolỗi thiết kế bảo mật

Trang 16

Các chuyên gia và nhà tư vấn bảo mật, giúp kiểm thử và duy trì các chương trìnhbảo mật cũng như xử lý các lỗ hổng bảo mật Thông thường, nhóm người này vốn trướcđây là những kẻ tấn công Những kẻ tấn công cũ, là những người có nhiều kinh nghiệm,chiệu trách nhiệm điều khiển các kiểm thử xâm nhập trước khi triển khai một hệ thống.Trừ khi tổ chức của chúng tôi không có một chuyên gia để thực hiện kiểm thử xâm nhập,không nên để một kiểm thử viên và lập trình viên chiệu trách nhiệm này.

2.6 Những Ưu Điểm Trong Kiểm Thử Bảo mật

 Kiểm thử bảo mật là kiểm thử chủ động, không bị động

 Các lỗi không được xử lý là các kho báu để xác định các lỗ hỏng bảo mật

 Các giao diện dữ liệu vào là các kho báu để chèn lỗi vào nhằm xác định các lỗi bảomật

 Hãy xem xét mọi dữ liệu vào không hợp lệ có thể xảy ra phía trình khách

 Hãy xem xét mọi dữ liệu vào không hợp lệ có thể xảy ra phía trình chủ

 Tập trung trên các điều kiện dữ liệu vào mà ở đó dữ liệu được chuyển từ miềnthông tin tin cậy vào miền tin cậy

 Thiết kế các ca kiểm thử với sự nhấn mạnh trên các biên giữa các miền tin cậy vàkhông tin cậy

 Tìm kiếm các lỗi cho phép người sử dụng thực thi chương trình trên host

 Tìm kiếm các lỗi cho phép người sử dụng tải chương trình trên host

 Tìm kiếm các lỗi cho phép người sử dụng thay đổi nâng cao quyền truy cập

 Luôn ý thức được rằng ứng dụng thường xử lý sai một số dữ liệu xấu đến từ phíatrình khác không tin cậy

 Tìm kiếm dữ liệu vào mà có thể trở nên thực thi được(ví dụ: khi dữ liệu vào trởnên dữ liệu ra)

Trang 17

3 Các Kỹ Thuật Tấn Công Web Và Cách Phòng Chống

đó cũng tiềm ẩn một lỗ hổng bảo mật rất lớn Một trong số các lỗ hổng này đó là SQLinjection Tại Việt Nam, đã qua thời kì các quản trị website lơ là việc quét virus, cập nhậtcác bản vá lỗi từ các phần mềm hệ thống, nhưng việc chăm sóc các lỗi của các ứng dụnglại rất ít được quan tâm Đó là lí do tại sao trong thời gian vừa qua, không ít website tạiViệt Nam bị tấn công và đa số đều là lỗi SQL injection

SQL injection là một kĩ thuật cho phép những kẻ tấn công lợi dụng lỗ hổng trongviệc kiểm tra dữ liệu nhập trong các ứng dụng web và các thông báo lỗi của hệ quản trị cơ

sở dữ liệu để "tiêm vào" (inject) và thi hành các câu lệnh SQL bất hợp pháp (không đượcngười phát triển ứng dụng lường trước) Hậu quả của nó rất tai hại vì nó cho phép những

kẻ tấn công có thể thực hiện các thao tác xóa, hiệu chỉnh, … do có toàn quyền trên cơ sở

dữ liệu của ứng dụng, thậm chí là server mà ứng dụng đó đang chạy Lỗi này thường xảy

ra trên các ứng dụng web có dữ liệu được quản lí bằng các hệ quản trị cơ sở dữ liệu nhưSQL Server, MySQL, Oracle, DB2, Sysbase

b Các Dạng Tấn Công SQL Injection

Có bốn dạng thông thường bao gồm: vượt qua kiểm tra lúc đăng nhập(authorization bypass), sử dụng câu lệnh SELECT, sử dụng câu lệnh INSERT, sử dụngcác stored-procedures

Trang 18

Để biết các website sử dụng CSDL SQL ta sử dụng các phần mềm hoặc các công

cụ tìm lỗi Hoặc các công cụ tìm kiếm như Google Và dùng các từ khóa tìm kiếm như :inurl : product.php?id=

Hình 2.1: Một công cụ tìm Lổi SQL Injection.

Để biết website nào dính lỗi SQL Injection ta thêm dấu “ ’ ” vào sau thanh địa chỉ

Ví dụ :http://www.chuyendetotnghiep.com/product.php?id=123’

Hình 2.2: Một site bị lổi SQL Injection.

Trang 19

3.1.2 Tấn công SQL Injection.

a Dạng tấn công vượt qua kiểm tra đăng nhập

Với dạng tấn công này, tin tặc có thể dễ dàng vượt qua các trang đăng nhập nhờvào lỗi khi dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu của ứng dụng Web

Xét một ví dụ điển hình, thông thường để cho phép người dùng truy cập vào cáctrang Web được bảo mật, hệ thống thường xây dựng trang đăng nhập để yêu cầu ngườidùng nhập thông tin về tên đăng nhập và mật khẩu Sau khi người dùng nhập thông tinvào, hệ thống sẽ kiểm tra tên đăng nhập và mật khẩu có hợp lệ hay không để quyết địnhcho phép hay từ chối thực hiện tiếp Trong trường hợp này, người ta có thể dùng haitrang, một trang HTML để hiển thị form nhập liệu và một trang ASP dùng để xử lí thôngtin nhập từ phía người dùng Ví dụ:

Trang nhập liệu: login.htm

<form action="ExecLogin.asp" method="post">

Username: <input type="text" name="fUSRNAME"><br />Password: <input type="password" name="fPASSWORD"><br/>

strSQL = "SELECT * FROM T_USERS " & _

"WHERE USR_NAME=' " & vUsrName & _

" ' and USR_PASSWORD=' " & vPassword & " ' "

Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.Open strSQL, "DSN= "

If (objRS.EOF) Then

Trang 20

Response.Write "Invalid login."

Else

Response.Write"You are logged in as " &objRS("USR_NAME")

End If

Set objRS = Nothing %>

Thoạt nhìn, đoạn mã trong trang execlogin.asp dường như không chứa bất cứ một

lỗ hổng về an toàn nào Người dùng không thể đăng nhập mà không có tên đăng nhập vàmật khẩu hợp lệ Tuy nhiên, đoạn mã này thực sự không an toàn và là tiền đề cho một lỗiSQL injection Đặc biệt, chỗ sơ hở nằm ở chỗ dữ liệu nhập vào từ người dùng được dùng

để xây dựng trực tiếp câu lệnh SQL Chính điều này cho phép những kẻ tấn công có thểđiều khiển câu truy vấn sẽ được thực hiện

Ví dụ, nếu người dùng nhập chuỗi sau vào trong cả 2 ô nhập liệu username/password củatrang login.htm là: ' OR ' ' = ' ' Lúc này, câu truy vấn sẽ được gọi thực hiện là:

SELECT * FROM T_USERS WHERE USR_NAME ='' OR ''='' andUSR_PASSWORD= '' OR ''=''

Câu truy vấn này là hợp lệ và sẽ trả về tất cả các bản ghi của T_USERS và đoạn

mã tiếp theo xử lí người dùng đăng nhập bất hợp pháp này như là người dùng đăng nhậphợp lệ

b Dạng tấn công sử dụng câu lệnh SELECT

Dạng tấn công này phức tạp hơn Để thực hiện được kiểu tấn công này, kẻ tấn côngphải có khả năng hiểu và lợi dụng các sơ hở trong các thông báo lỗi từ hệ thống để dò tìmcác điểm yếu khởi đầu cho việc tấn công Xét một ví dụ rất thường gặp trong các website

về tin tức Thông thường, sẽ có một trang nhận ID của tin cần hiển thị rồi sau đó truyvấn nội dung của tin có ID này

Ví dụ: http://www.chuyendetotnghiep.com/product.asp?ID=123 Mã nguồn cho chức

năng này thường được viết khá đơn giản theo dạng:

<%

Trang 21

Câu truy vấn SQL lúc này sẽ trả về tất cả các bài viết từ bảng dữ liệu vì nó sẽ thựchiện câu lệnh:

SELECT * FROM T_NEWS WHERE NEWS_ID=0 or 1=1

Một trường hợp khác, ví dụ như trang tìm kiếm Trang này cho phép người dùng nhậpvào các thông tin tìm kiếm như Họ, Tên, … Đoạn mã thường gặp là:

Trang 22

Tương tự như trên, tin tặc có thể lợi dụng sơ hở trong câu truy vấn SQL để nhậpvào trường tên tác giả bằng chuỗi giá trị:

' UNION SELECT ALL SELECT OtherField FROM OtherTableWHERE ' '='

Lúc này, ngoài câu truy vấn đầu không thành công, chương trình sẽ thực hiện thêmlệnh tiếp theo sau từ khóa UNION nữa

Tất nhiên các ví dụ nói trên, dường như không có gì nguy hiểm, nhưng hãy thửtưởng tượng kẻ tấn công có thể xóa toàn bộ cơ sở dữ liệu bằng cách chèn vào các đoạnlệnh nguy hiểm như lệnh DROP TABLE Ví dụ như: ' DROP TABLE T_AUTHORS

Chắc các bạn sẽ thắc mắc là làm sao biết được ứng dụng web bị lỗi dạng này được.Rất đơn giản, hãy nhập vào chuỗi (*) như trên, nếu hệ thống báo lỗi về cú pháp dạng:Invalid object name “OtherTable”; ta có thể biết chắc là hệ thống đã thực hiện câuSELECT sau từ khóa UNION, vì như vậy mới có thể trả về lỗi mà ta đã cố tình tạo ratrong câu lệnh SELECT

Cũng sẽ có thắc mắc là làm thế nào có thể biết được tên của các bảng dữ liệu màthực hiện các thao tác phá hoại khi ứng dụng web bị lỗi SQL injection Cũng rất đơn giản,bởi vì trong SQL Server, có hai đối tượng là sysobjects và syscolumns cho phép liệt kê tất

cả các tên bảng và cột có trong hệ thống Ta chỉ cần chỉnh lại câu lệnh SELECT, ví dụnhư: ' UNION SELECT name FROM sysobjects WHERE xtype = 'U' là có thể liệt kêđược tên tất cả các bảng dữ liệu

c Dạng tấn công sử dụng câu lệnh INSERT

Thông thường các ứng dụng web cho phép người dùng đăng kí một tài khoản đểtham gia Chức năng không thể thiếu là sau khi đăng kí thành công, người dùng có thểxem và hiệu chỉnh thông tin của mình SQL injection có thể được dùng khi hệ thốngkhông kiểm tra tính hợp lệ của thông tin nhập vào

Ví dụ, một câu lệnh INSERT có thể có cú pháp dạng:

INSERT INTO TableName VALUES('Value One', 'Value Two','Value Three')

Trang 23

; 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 thinhữ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

Trang 24

 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 xuất

 Xp_ntsec_enumdomain: liệ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ó

e Tấn công SQL Injection nâng cao.

• 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ấunhá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

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ụ a.2 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ụ a.3:

Trang 25

Ứ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ậpmật khẩu mới Đoạn mã như sau:

username = escape( Request.form("username") );

oldpassword = escape( Request.form("oldpassword") );newpassword = escape( Request.form("newpassword") );var rso = Server.CreateObject("ADODB.Recordset");

var sql = "select * from users where username = '" +username

+ "' and password = '" + oldpassword + "'";

rso.open( sql, cn );

if (rso.EOF)

{…

Câu truy vấn thiết lập mật khẩu mới như sau:

sql = "update users set password = '" + newpassword +

"' where username= '" + rso("username") + "'"

rso(“username”) chính là giá trị username có được câu truy vấn login và nó là

admin’ Câu truy vấn lúc này như sau:

Trang 26

update users set password = 'password' where username ='admin' '

Nhờ đó hacker có thể thay đổi mật khẩu của admin bằng giá trị của mình Đây là 1trườ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ực hiện được , thì loại bỏ và thay thế như trên Trong trường hợpnà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ữnggiá 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ạnchiề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ựchiện được nhưng vẫn có chỗ hở để hacker lợi dụng

Select * from users where username=’aaaaaaaaaaaaaaa’’ and

password=’’’; shutdown—‘

kết quả là username trong câu lệnh có giá trị là:

aaaaaaaaaaaaaaa’ and password=’

3.1.3 Cách Phòng Tránh SQL Injection

Như vậy, có thể thấy lỗi SQL injection khai thác những bất cẩn của các lập trình

Trang 27

ứng dụng sử dụng quyền dbo (quyền của người sở hữu cơ sở dữ liệu - owner) khi thao tác

dữ liệu, nó có thể xóa toàn bộ các bảng dữ liệu, tạo các bảng dữ liệu mới, … Nếu ứngdụng sử dụng quyền sa (quyền quản trị hệ thống), nó có thể điều khiển toàn bộ hệ quản trị

cơ sở dữ liệu và với quyền hạn rộng lớn như vậy nó có thể tạo ra các tài khoản ngườidùng bất hợp pháp để điều khiển hệ thống của bạn

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ệcphò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ùngbằ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 khilỗ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ãyloại bỏ các kí tự meta như “',",/,\,;“ và các kí tự extend như NULL, CR, LF, trong cácstring nhận được từ:

Dùng thuật toán để mã hoá dữ liệu

a Kiểm tra dữ liệu

Kiểm tra tính đúng đắn của dữ liệu là 1 vấn đề phức tạp và thường chưa được quantâm đúng mức trong các ứng dụng Khuynh hướng của việc kiểm tra tính đúng đắn của dữliệu không phải là chỉ cần thêm một số chức năng vào ứng dụng, mà phải kiểm tra mộtcách tổng quát nhanh chóng để đạt được mục đích

Những tóm tắt sau đây sẽ bàn về việc kiểm tra tính đúng đắn của dữ liệu, cùng với

ví dụ mẫu để minh hoạ cho vấn đề này

Trang 28

Có ba giải pháp tiếp cận vấn đề này:

1) Cố gắng kiểm tra và chỉnh sửa để làm cho dữ liệu hợp lệ

Giải pháp 2: bị vô hiệu trong các trường hợp như giải pháp 1 là do :Dữ liệu bất hợp

lệ luôn luôn thay đổi và cùng với việc phát triển các kiểu tấn

công mới

Giải pháp 3: tốt hơn hai giải pháp kia, nhưng sẽ gặp một số hạn chế khi càiđặt.Cách bảo mật tốt nhất là kết hợp cả giải pháp 2 và 3 Một ví dụ cho sự cần thiết kếthợp 2-3 là dấu nối giữa họ và tên “Quentin Bassington-Bassington” phải cho phép dấugạch ngang trong bộ định nghĩa dữ liệu hợp lệ, nhưng chuỗi kí tự “ “ là một chuỗi kí tựđặc biệt trong SQL server.Ví dụ nếu có bộ lọc để :

 Lọc bỏ những dữ liệu bất hợp lệ như ‘ ‘,’select’ và ‘union’

 Một hàm kiểm soát để loại bỏ dấu nháy đơn thì có thể đối phó như sau.uni’on se’lect @@version-‘-

Một số cách cài đặt các chức năng kiểm tra dữ liệu cơ bản

• Cách 1: Từ chối dữ liệu bất hợp lệ

function validate_string( input )

known_bad = array("select","insert", "update",

"delete", "drop"," ", "'" )

validate_string = true

for i = lbound( known_bad ) to ubound( known_bad )

Trang 29

• Cách 2: Thay thế dấu nháy đơn:

function escape( input )

b Khoá chặt SQL Server (SQL Server Lockdown)

Đây là một danh sách các công việc cần làm để bảo vệ SQL server:

Xác định các phương pháp kết nối đến server

Dùng tiện ích Network Utility để kiểm tra rằng chỉ có các thư viện mạng đangdùng là hoat động

Trang 30

Kiểm tra tất cả các tài khoản có 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ả tài khoản có một mật khẩu hợp lệ, …

Kiểm tra các đối tượng tồn tại

 Nhiều extended stored procedure có thể được xoá bỏ một cách an toàn

 Nếu điều này được thực hiện, thì cũng nên xem xét việc loại bỏ luônnhững tập tin dll chứa mã của các extended stored procedure

 Xoá bỏ tất cả cơ sở dữ liệu mẫu như “northwind” và “pubs”

 Xóa các stored procedure không dùng như: master xp_cmdshell,xp_startmail, xp_sendmail, sp_makewebtask

Kiểm tra những tài khoản nào có thể truy xuất đến những đối tượng nào

 Đố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 đếnnhững đối tượng nó cần dùng Kiểm tra lớp sửa chữa của server

 Có một số cách tấn công như “buffer overflow”, “format string” thườngchú ý đến lớp bảo vệ này

Kiểm tra các phiên làm việc trên server

Thay đổi "Startup và chạy SQL Server" ở mức người dùng quyền hạn thấp trongSQL Server Security

Ngày đăng: 30/03/2016, 07:54

HÌNH ẢNH LIÊN QUAN

Bảng 1 So sánh khác nhau giữa hai loại hình kiểm thử. 20 - Kiểm thử bảo mật Website với Nikto
Bảng 1 So sánh khác nhau giữa hai loại hình kiểm thử. 20 (Trang 5)
Sơ đồ 1:  Sơ đồ phân loại KTAN - Kiểm thử bảo mật Website với Nikto
Sơ đồ 1 Sơ đồ phân loại KTAN (Trang 11)
Hình 2.1: Một công cụ tìm Lổi SQL Injection. - Kiểm thử bảo mật Website với Nikto
Hình 2.1 Một công cụ tìm Lổi SQL Injection (Trang 18)
Hình 2.2: Một site bị lổi SQL Injection. - Kiểm thử bảo mật Website với Nikto
Hình 2.2 Một site bị lổi SQL Injection (Trang 18)
Hình 2.3: Cách viết Action Script trong Flash. - Kiểm thử bảo mật Website với Nikto
Hình 2.3 Cách viết Action Script trong Flash (Trang 35)

TỪ KHÓA LIÊN QUAN

w