Tải bản đầy đủ (.pdf) (61 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (567.74 KB, 61 trang )

Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn
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
Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 1


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn

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
4.3 Display ..................................................................................................................46
Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 2


Chuyên Đề Tốt Nghiệp


GVHD:ThS.Nguyễn Kim Tuấn

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

Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 3


Chuyên Đề Tốt Nghiệp


GVHD:ThS.Nguyễn Kim Tuấn
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ông
Nghệ Thông Tin trường Đại Học Duy Tân. Đặc biệt, thầy Nguyễn Kim Tuấn đã nhiệt tình
hướ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 đến
thầy Nguyễn Song Tùng và các anh chị VDC Tranning đã giúp đỡ em trong quá trình
thự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ánh
khỏ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ạn
chế 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 !

Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 4


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn
DANH MỤC SƠ ĐỒ

Số thứ tự
Sơ đồ 1

Tên
Sơ đồ phân loại KTAN


Trang
17

DANH MỤC BẢNG

Số thứ tự
Bảng 1

Tên
So sánh khác nhau giữa hai loại hình kiểm thử.

Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang
20

Trang 5


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn
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

DN

Doanh nghiệp.

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

Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 6



Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn
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ụng
Web đ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 ứng
dụ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ể ảnh
hưở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 đánh
giá 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 application
security 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 affects
the reputation of the company or organization , causing financial loss and the constraints
legal, ...
Titled " Learn the types of security vulnerabilities with Nikto Web " will partially
meet the urgent need for security today . Construction should serve the process of
inspection and detection of information security weaknesses in Web applications , which
released a report on the safety assessment information for the Website .
KEY WORD
Safety
Security

Testing

Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 7


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn
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 cho
ngườ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ông
tin 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 đượ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”
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ụng
phụ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ấn

cô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ần
phả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ính
xác và một cách cụ thể nhất.

Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 8


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn

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ật
nhằ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.

Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn


Trang 9


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn

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ông
nghệ 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ết
cá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ểu
cá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ác
cô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ặc
thành phần đó (IEEE 610.12-1990.IEEE Standard Glossary of Software Engineering
Terminology.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ủa
phầ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ần
mề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. Tuy

nhiên, theo định nghĩa của Myers, tức là đứng trên quan điểm người kiểm thử, thì kiểm
thử 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ết
mộ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

Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 10


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn

đượ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ềm
nhằ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ướng
nghiê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
KTAN

KTAN Phần Mềm

KTAN
Chức
Năng

KTAN

Điểm
Yếu

KTAN Mạng

Quét
Điểm
Yếu

Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Kiểm
Thử
Xâm
Nhập

Trang 11


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn

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ết
phầ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 KTAN
phần mềm là: KTAN chức năng và KTAN điểm yếu. KTAN chức năng dùng để kiểm tra
chứ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ằm
phá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ần
mề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ẹn
củ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ẩm
tra 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ìm
nhữ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ên
từ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 trong
hoặ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ước
khi 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ọa
trong 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ản
ngườ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ảo
mậ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ề
rủi ro bảo mật rất cao.
Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 12


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn


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 so
vớ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ổng
nhằ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ự truy
cậ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ách
khá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à ảnh
hưở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ác
nhau 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à agile
testing được giới nghiên cứu cũng như doanh nghiệp đón nhận khá tích cực.Có nhiều
phương pháp để KTAN phần mềm như liệt kê sau đây: KTAN hình thức (formal security
testing); 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ểm
yếu (vulnerability scanning testing); Kiểm thử dựa vào thuộc tính (property-based
testing); 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ật
sau: 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ân
các công ty kiểm thử tự phát triển như TestArchitectTM, IBM Rational Performance
Tester, ... 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.

Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn


Trang 13


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn

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

Phát hiện lỗi chức năng Phát hiện lỗi bảo mật
Khái niệm

hoạt động của phần mềm

của phần mềm hoặc
mạng

Không

cần

kiến

thức

CNTT nhiều. Cần kiến Cần kiến thức CNTT

Kiến thức

thức lĩnh vực hoạt động chuyên sâu
của phần mềm được kiểm
thử
Thực hiện từ lúc thiết kế Chủ yếu thực hiện ở giai

Giai đoạn thực hiện

đến lập trình, triển khai và đoạn triển khai và sử
sử dụng sản phẩm. Chủ dụng.
yếu giai đoạn lập trình.

Đối tượng

Phần mềm

Phần mềm hoặc mạng

Phân tích tốt, kiên nhẫn, Phân tích rất tốt, kiên
Yêu cầu kỹ năng

cẩn thận, tiếng Anh

nhẫn, sáng tạo, đa nghi

Bằng tay, tự động chủ yếu Bằng tay, chủ yếu mã
Công cụ

chuyên dụng của từng công nguồn mở trên Linux

ty kiểm thử

Chứng chỉ

ISTQB, LCTP

CEH, OPST

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ống
như 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
cứu về bảo mật với mục tiêu xây dựng hệ thống đạt những tiêu chí của bảo mật là bí mật,
Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 14


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn

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ì KTAN
chuyê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ảo
mậ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ủa
kiể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ại
khá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ằm
chứ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ấn
cô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 trong
giai đ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ụng
Web ở 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ây
nê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ụng
khá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ằm
tă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ảo
mậ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ác
lỗ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 đặt
bả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 đề do
lỗi thiết kế bảo mật.
Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 15


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn

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ình
bả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ảo
mậ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ền
thô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ía
trì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).

Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 16


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn


3. Các Kỹ Thuật Tấn Công Web Và Cách Phòng Chống
3.1 SQL Injection
3.1.1Tìm Hiểu Về Sql Injection
a.SQL Injection
Khi triển khai các ứng dụng Website trên Internet, nhiều người vẫn nghĩ rằng việc
đảm bảo an toàn, bảo mật nhằm giảm thiểu tối đa khả năng bị tấn công từ các tin tặc chỉ
đơn thuần tập trung vào các vấn đề như chọn hệ điều hành, hệ quản trị cơ sở dữ liệu,
webserver sẽ chạy ứng dụng, ... mà quên mất rằng ngay cả bản thân ứng dụng chạy trên
đó cũng tiềm ẩn một lỗ hổng bảo mật rất lớn. Một trong số các lỗ hổng này đó là SQL
injection. Tại Việt Nam, đã qua thời kì các quản trị website lơ là việc quét virus, cập nhật
các bản vá lỗi từ các phần mềm hệ thống, nhưng việc chăm sóc các lỗi của các ứng dụng
lại rất ít được quan tâm. Đó là lí do tại sao trong thời gian vừa qua, không ít website tại
Việt Nam bị tấn công và đa số đều là lỗi SQL injection.
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 trong
việc kiểm tra dữ liệu nhập trong các ứng dụng web và các thông báo lỗi của hệ quản trị cơ
sở dữ liệu để "tiêm vào" (inject) và thi hành các câu lệnh SQL bất hợp pháp (không được
người phát triển ứng dụng lường trước). Hậu quả của nó rất tai hại vì nó cho phép những
kẻ tấn công có thể thực hiện các thao tác xóa, hiệu chỉnh, … do có toàn quyền trên cơ sở
dữ liệu của ứng dụng, thậm chí là server mà ứ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ụng
các stored-procedures.

Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 17



Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn

Để 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ụ : />
Hình 2.2: Một site bị lổi SQL Injection.

Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 18


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn

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ác
trang Web được bảo mật, hệ thống thường xây dựng trang đăng nhập để yêu cầu người

dùng nhập thông tin về tên đăng nhập và mật khẩu. Sau khi người dùng nhập thông tin
vào, hệ thống sẽ kiểm tra tên đăng nhập và mật khẩu có hợp lệ hay không để quyết định
cho phép hay từ chối thực hiện tiếp. Trong trường hợp này, người ta có thể dùng hai
trang, một trang HTML để hiển thị form nhập liệu và một trang ASP dùng để xử lí thông
tin nhập từ phía người dùng. Ví dụ:
Trang nhập liệu: login.htm
<form action="ExecLogin.asp" method="post">
Username:

<input type="text" name="fUSRNAME">


Password: <input type="password" name="fPASSWORD">/>
<input type="submit">
</form>
Trang xử lý nhập liệu: execlogin.asp
<%
Dim vUsrName, vPassword, objRS, strSQL
vUsrName = Request.Form("fUSRNAME")
vPassword = Request.Form("fPASSWORD")
strSQL = "SELECT * FROM T_USERS " & _
"WHERE USR_NAME=' " & vUsrName & _
" ' and USR_PASSWORD=' " & vPassword & " ' "
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."
If (objRS.EOF) Then
Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 19



Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn

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ỗi
SQL 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ủa
trang login.htm là: ' OR ' ' = ' '. Lúc này, câu truy vấn sẽ được gọi thực hiện là:
SELECT * FROM T_USERS WHERE USR_NAME ='' OR ''='' and
USR_PASSWORD= '' OR ''=''
Câu truy vấn này 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ập
hợp lệ.
b. Dạng tấn công sử dụng câu lệnh SELECT
Dạng tấn công này phức tạp hơn. Để thực hiện được kiểu tấn công này, kẻ tấn công
phải có khả năng hiểu và lợi dụng các sơ hở trong các thông báo lỗi từ hệ thống để dò tìm
các điểm yếu khởi đầu cho 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 đó truy
vấn nội dung của tin có ID này.
Ví dụ: . Mã nguồn cho chức
năng này thường được viết khá đơn giản theo dạng:
<%
Dim vNewsID, objRS, strSQL
Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 20


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn

vNewsID = Request("ID")
strSQL


=

"SELECT

*

FROM

T_NEWS

WHERE

NEWS_ID

="

&

vNewsID
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."
Set objRS = Nothing
%>
Trong các tình huống thông thường, đoạn mã này hiển thị nội dung của tin có ID
trùng với ID đã chỉ định và hầu như không thấy có lỗi. Tuy nhiên, giống như ví dụ đăng
nhập ở trước, đoạn mã này để lộ sơ hở cho một lỗi SQL injection khác. Kẻ tấn công có
thể thay thế một ID hợp lệ bằng cách gán ID cho một giá trị khác, và từ đó, khởi đầu cho
một cuộc tấn công bất hợp pháp.
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ực
hiện câu lệnh:

SELECT * FROM T_NEWS WHERE NEWS_ID=0 or 1=1
Một trường hợp khác, ví dụ như trang tìm kiếm. Trang này cho phép người dùng nhập
vào các thông tin tìm kiếm như Họ, Tên, … Đoạn mã thường gặp là:
<%
Dim vAuthorName, objRS, strSQL
vAuthorName = Request("fAUTHOR_NAME")
strSQL = "SELECT * FROM T_AUTHORS WHERE AUTHOR_NAME ='
" & _
vAuthorName & " ' "
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."

Set objRS = Nothing
%>

Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 21


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn

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ập
vào trường tên tác giả bằng chuỗi giá trị:
' UNION SELECT ALL SELECT OtherField FROM OtherTable
WHERE ' '='
Lúc này, ngoài câu truy vấn đầu không thành công, chương trình sẽ thực hiện thêm
lệnh tiếp theo sau từ khóa UNION nữa.

Tất nhiên các ví dụ nói trên, dường như không có gì nguy hiểm, nhưng hãy thử
tưởng tượng kẻ tấn công có thể xóa toàn bộ cơ sở dữ liệu bằng cách chèn vào các đoạn
lệnh nguy hiểm như 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âu
SELECT sau từ khóa UNION, vì như vậy mới có thể trả về lỗi mà ta đã cố tình tạo ra
trong câu lệnh SELECT.
Cũng sẽ có thắc mắc là làm thế nào có thể biết được tên của các bảng dữ liệu mà
thực hiện các thao tác phá hoại khi ứng dụng web bị lỗi SQL injection. Cũng rất đơn giản,
bởi vì trong SQL Server, có hai đối tượng là sysobjects và syscolumns cho phép liệt kê tất
cả cá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ống
khô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').
Nếu đoạn mã xây dựng câu lệnh SQL có dạng :
Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 22


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn


<%
strSQL

=

"INSERT

INTO

TableName

VALUES('

"

&

strValueOne & " ', ' " _
& strValueTwo & " ', ' " & strValueThree & " ') "
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."

Set objRS = Nothing
%>
Thì chắc chắn sẽ bị lỗi SQL injection, bởi vì nếu ta nhập vào trường thứ nhất ví dụ
như: ' + (SELECT TOP 1 FieldName FROM TableName) + '. Lúc này câu truy vấn sẽ là:
INSERT INTO TableName VALUES(' ' + (SELECT TOP 1 FieldName FROM
TableName) + ' ', 'abc', 'def'). Khi đó, lúc thực hiện lệnh xem thông tin, xem như bạn đã
yêu cầu thực hiện thêm một lệnh nữa đó là: SELECT TOP 1 FieldName FROM

TableName
d. Dạng tấn công sử dụng stored-procedures
Việc tấn công bằng stored-procedures sẽ gây tác hại rất lớn nếu ứng dụng được
thực thi với quyền quản trị hệ thống 'sa'.
Ví dụ: nếu ta thay đoạn mã tiêm vào dạng: ' ; EXEC xp_cmdshell ‘cmd.exe dir C: '.
Lúc này hệ thống sẽ thực hiện lệnh liệt kê thư mục trên ổ đĩa C:\ cài đặt server. Việc phá
hoại kiểu nào tuỳ thuộc vào câu lệnh đằng sau cmd.exe. 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
Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 23


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn

 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ấ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ụ a.1 :
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ụ a.2:
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:
INSERT into User VALUES( 667,123,123,0xffff)
SQL server sẽ tự động chuyển từ số sang chuỗi.
Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn


Trang 24


Chuyên Đề Tốt Nghiệp

GVHD:ThS.Nguyễn Kim Tuấn

• 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ụ b.1: Để đăng kí account trong ứng dụng, nhập username như sau:
Username: admin'—
Password: passofadmin
Ứng dụng sẽ thay thế dấu nháy, kết quả trong câu insert sẽ như sau:
INSERT into User VALUES(123, 'admin''--', 'password',0xffff) (nhưng trong cơ sở
dữ liệu sẽ lưu là “admin’--“)
Giả sử rằng ứng dụng cho phép người dùng thay đổi mật khẩu. Các đoạn mã ASP
được thiết kế đảm bảo rằng người sử dụng phải nhập đúng mật khẩu cũ trước khi nhập
mật khẩu mới. Đoạn mã như sau:
username = escape( Request.form("username") );
oldpassword = escape( Request.form("oldpassword") );
newpassword = escape( Request.form("newpassword") );
var rso = Server.CreateObject("ADODB.Recordset");
var sql = "select * from users where username = '" +
username
+ "' and password = '" + oldpassword + "'";
rso.open( sql, cn );
if (rso.EOF)
{…

Câu truy vấn thiết lập mật khẩu mới như sau:
sql = "update users set password = '" + newpassword +
"' where username= '" + rso("username") + "'"
rso(“username”) chính là giá trị username có được câu truy vấn login và nó là admin’-Câu truy vấn lúc này như sau:

Phan Thanh Toàn -Nguyễn Quang Cường-Nguyễn Văn Tuấn

Trang 25


×