Tải bản đầy đủ

ĐỒ ÁN KỸ THUẬT FUZZING TRONG XÂY DỰNG ỨNG DỤNG KIỂM TRA LỖ HỔNG BẢO MẬT WEBSITE

MỤC LỤC

1


DANH MỤC HÌNH

2


DANH MỤC BẢNG

3


DANH MỤC TỪ VIẾT TẮT
Từ viết
tắt

Nghĩa Tiếng Anh


Nghĩa Tiếng Việt

HTTP

Hypertext Transfer Protocol

Giao thức truyền siêu văn bản

TCP

Transmission Control Protocol Giao thức truyền TCP

HTML

Hypertext Markup Language

Ngôn ngữ đánh dấu siêu văn
bản

XML

Extensible Markup Language

Ngôn ngữ đánh dấu mở rộng

SSL

Secure Sockets Layer

Lớp bảo mật socket

XSS

Cross Script Site

Lỗ hổng XSS

CSRF

Cross - Site Request Forgery



Lỗ hổng CSRF

URL

Uniform Resource Locator

Địa chỉ tài nguyên

RFI

Remote File Inclusion

Lỗ hổng RFI

LFI

Local File Inclusion

Lỗ hổng LFI

OWASP

The Open Web Application
Security Project

Dự án nghiên cứu bảo mật ứng
dụng web

GUI

Graphical User Interface

Giao diện đồ họa người dùng

CSDL

Database

Cơ sở dữ liệu

4


MỞ ĐẦU
Tên đồ án: “Nghiên cứu kỹ thuật Fuzzing áp dụng trong kiểm tra lỗ
hổng bảo mật website”.
1. Lý do chọn đề tài
Hiện nay, vấn đề bảo mật và an toàn thông tin đang ngày càng được
chính phủ, các cơ quan, doanh nghiệp chú trọng đầu tư. Tuy nhiên, không
phải tất cả các tổ chức, doanh nghiệp đều có thể trang bị đầy đủ cũng như có
thể đảm bảo an toàn, bảo mật thông tin một cách toàn diện. Theo khảo sát,
khoảng 75% các cuộc tấn công mạng được thực hiện thông qua ứng dụng web
hoặc thông qua website. Website không được kiểm tra kỹ lưỡng và đảm bảo
an toàn, do đó dễ dàng làm mồi cho những kẻ tấn công.
Theo thống kê của Bkav, tại Việt Nam, trung bình mỗi tháng lại có hơn
300 website của các doanh nghiệp, tổ chức trong nước bị tấn công. Kết quả
nghiên cứu của Bkav cũng cho thấy, tại Việt Nam có tới 40% website tồn tại
lỗ hổng. Còn theo báo cáo toàn cầu từ Kaspersky Lab, Việt Nam đứng thứ ba
trên thế giới về sự nguy hiểm tiềm ẩn khi lướt web với 35% số người dùng đã
bị tấn công. VNCERT cũng ghi nhận hơn 30.000 sự cố an ninh tại Việt Nam
trong năm 2015.
Cũng theo nhận định của các chuyên gia, hầu hết cơ quan doanh nghiệp
của Việt Nam chưa bố trí được nhân sự phụ trách an ninh mạng hoặc năng lực
và nhận thức của đội ngũ này chưa tương xứng với tình hình thực tế. Đó là
những nguyên nhân chính và cũng chưa có một sản phẩm hay quy trình chuẩn
nào hỗ trợ cho những người quản trị hệ thống phát hiện và ngăn chặn sớm
những lỗ hổng đang tồn tại trên hệ thống.
Từ tình hình trên ta thấy cần thiết có một giải pháp, kỹ thuật xây dựng
hệ thống kiểm thử bảo mật cho mỗi hệ thống website, nhằm phát hiện và cảnh
báo các lỗ hổng trên hệ thống website một cách chính xác. Các lỗ hổng do lỗi
của người lập trình hệ thống: SQL Injection, Code Injection, Cross Site
Scripting, URL Redirect,… Các lỗi do việc cấu hình hệ thống không an toàn
như phân quyền tài nguyên trên máy chủ không nghiêm ngặt, đặt tài khoản
mặc định,…
Trong phương pháp kiểm thử hộp đen, Fuzzing là một kỹ thuật phát
hiện lỗ hổng phần mềm, được thực hiện bằng cách cung cấp tự động hoặc bán
tự động bộ dữ liệu đầu vào bất thường, không hợp lệ hay ngẫu nhiên vào
5


chương trình nhằm theo dõi và xác định các trường hợp, hành vi bất thường
trong quá trình xử lý và trong kết quả trả về để phát hiện lỗ hổng bảo mật tiềm
ẩn.
Kỹ thuật fuzzing mang lại hiệu quả rất lớn cho việc kiểm thử cho các
vấn đề về an ninh trong các phần mềm, hệ thống máy tính và các ứng dụng
dịch vụ. Hiện tại, fuzzing là một kỹ thuật không thể tách rời của cộng đồng
kiểm thử với rất nhiều các mã nguồn mở, công cụ thương mại và những công
trình nghiên cứu liên quan.
Xuất phát từ thực tế trên, em đã lựa chọn đề tài “Nghiên cứu kỹ thuật
Fuzzing áp dụng trong kiểm tra lỗ hổng bảo mật website” thuộc phạm vi
các vấn đề đã nêu để làm đồ án tốt nghiệp nhằm góp phần đáp ứng yêu cầu
nghiên cứu lý luận, phục vụ công tác đảm bảo an toàn, bảo mật website.
2. Các công trình nghiên cứu có liên quan
Hiện nay, tại Việt Nam có rất ít các nghiên cứu về vấn đề này, một số
công trình nghiên cứu áp dụng kỹ thuật Fuzzing trong kiểm thử phần mềm
nhưng chưa đi sâu nghiên cứu kỹ thuật này trong bảo mật web, hay chỉ áp
dụng kỹ thuật Fuzzing cho quá trình người dùng tự kiểm thử thủ công mà
chưa có tự động hóa. Ví dụ:
- Đề tài “Xây dựng công cụ đánh giá an toàn website” của tác giả Lê
Ngọc Thức, nghiên cứu các lỗ hổng website và xây dựng ứng dụng nhưng
chưa đi sâu nghiên cứu các kỹ thuật kiểm thử.
- Đề tài “Nghiên cứu và ứng dụng công cụ kiểm thử tự động trong kiểm
thử phần mềm” của tác giả Mai Thị Nhi mới chỉ đưa ra nghiên cứu về kỹ
thuật Fuzzing trong phần mềm mà chưa có cho website.
- Đề tài “Nghiên cứu kiểm thử bảo mật website” của tác giả Đinh Thị
Thiên Anh, chưa đi sâu nghiên cứu về các phương pháp kiểm thử tự động bảo
mật website.
3. Mục đích nghiên cứu
- Thống kê và phân loại các lỗ hổng trên hệ thống website, cổng thông
tin điện tử,... Từ đó, đưa ra các biện pháp phòng ngừa cho từng loại lỗ hổng.
- Phân tích kỹ thuật fuzzing trong kiểm thử website, làm nền tảng cho
xây dựng ứng dụng.

6


- Xây dựng hệ thống kiểm thử bảo mật tự động cho website dựa trên kỹ
thuật fuzzing.
4. Nhiệm vụ nghiên cứu
Nhiệm vụ nghiên cứu của đồ án gồm các nội dung sau:
Nhiệm vụ 1: Tìm hiểu tổng quan về website, phương thức và mô hình
hoạt động của website.
Nhiệm vụ 2: Nghiên cứu các lỗ hổng bảo mật website, cách thức tấn
công và biện pháp phòng chống.
Nhiệm vụ 3: Tìm hiểu tổng quan về các phương pháp kiểm thử phần
mềm nói chung và kỹ thuật Fuzzing trong kiểm thử lỗ hổng bảo mật website
nói riêng.
Nhiệm vụ 4: Nghiên cứu kỹ thuật lập trình bất đồng bộ trên ngôn ngữ
C# nhằm tăng tốc độ truy vấn lấy toàn bộ nội dung website, đồng thời trích
xuất liên kết và xây dựng lại cấu trúc một website.
Nhiệm vụ 5: Xây dựng ứng dụng kiểm tra lỗ hổng bảo mật website dựa
trên cơ sở các nội dung nghiên cứu trước nhằm phát hiện lỗ hổng tồn tại
website, đồng thời đưa ra các khuyến nghị và cách thức khắc phục cho từng
loại lỗ hổng.
5. Đối tượng nghiên cứu
- Kiến trúc và phương thức hoạt động của website.
- Các loại lỗ hổng bảo mật website và những biện pháp phòng chống,
khắc phục tương ứng.
- Các phương pháp kiểm thử phần mềm, ứng dụng web.
- Giải pháp kiểm tra và phát hiện lỗ hổng bảo mật website bằng kỹ
thuật Fuzzing.
- Phần mềm kiểm tra lỗ hổng bảo mật website.
6. Phương pháp nghiên cứu
- Phương pháp nghiên cứu lý thuyết:
+ Tham khảo các chương trình, giáo trình đào tạo.
+ Thu thập và phân tích các tài liệu, thông tin liên quan đến các kỹ
thuật Fuzzing trong bảo mật website.
7


+ Tìm hiểu các kết quả nghiên cứu về các lỗ hổng bảo mật đã được
công bố hiện nay.
+ Sử dụng kết quả nghiên cứu từ dự án mở về bảo mật ứng dụng web
của OWASP.
- Phương pháp nghiên cứu thực nghiệm:
+ Tìm hiểu phần mềm kiểm thử bảo mật website hiện có tại Việt Nam
cũng như trên thế giới.
+ Tiến hành cài đặt và đánh giá thử nghiệm chương trình demo qua
từng giai đoạn.
7. Phạm vi nghiên cứu
- Không gian, thời gian: Trong phạm vi đồ án của Trường Đại học Kỹ
thuật - Hậu cần CAND.
- Kiến thức: Tổng quan bảo mật website và nghiên cứu kỹ thuật
Fuzzing để xây dựng phần mềm kiểm thử web với phạm vi nằm trong 10 lỗ
hổng nghiêm trọng nhất được OWASP công bố năm 2013.
8. Các đóng góp của đồ án
Các đóng góp của đồ án về mặt kiến thức và thực tiễn sau khi hoàn
thành như sau:
- Về mặt kiến thức: Đồ án trình bày đầy đủ các vấn đề chung về lỗ
hổng bảo mật website cũng như những nghiên cứu về quy trình Fuzzing trong
kiểm tra lỗ hổng bảo mật website, cung cấp cho người đọc một bộ tài liệu
phản ánh nhiều mặt kiến thức trong lĩnh vực kiểm thử bảo mật web.
- Về mặt thực tiễn: Sản phẩm của đồ án là một ứng dụng kiểm tra và
phát hiện lỗ hổng bảo mật website, góp phần giúp những người phát triển ứng
dụng web có thể kiểm tra website có tồn tại lỗ hổng bảo mật hay không. Từ
đó, đưa ra các biện pháp cụ thể để khắc phục chúng.
9. Bố cục của đồ án
Với giới hạn những vấn đề nghiên cứu trên, đồ án này được xây dựng
với cấu trúc phân thành 3 chương:
Chương 1: Tổng quan về kiểm thử website.
Chương 2: Kỹ thuật Fuzzing trong kiểm tra lỗ hổng bảo mật website.

8


Chương 3: Xây dựng ứng dụng kiểm tra lỗ hổng bảo mật website.

9


Chương 1
TỔNG QUAN VỀ KIỂM THỬ WEBSITE
Chương này sẽ trình bày tổng quan, mang tính lý thuyết về các vấn đề
có liên quan đến kiểm thử website. Trong đó, chú trọng đưa ra các khái niệm
cơ bản có liên quan đến đề tài như khái niệm về website, lỗ hổng bảo mật,
kiểm thử, kỹ thuật Fuzzing, tạo cơ sở lý thuyết cho việc đi sâu nghiên cứu các
vấn đề của đồ án.
Ngoài ra, chương này cũng trình bày chi tiết về các loại lỗ hổng bảo
mật web, đưa ra nguyên nhân, cơ chế phát hiện và cách phòng chống cho
từng loại. Nó là cơ sở tạo ra những đặc trưng cho quá trình phân tích phát
hiện lỗ hổng của Fuzzing trong chương 2.
Tại đây cũng trình bày tổng quan về kỹ thuật Fuzzing bao gồm phân
loại kỹ thuật, các ưu, nhược điểm của nó, từ đó đưa ra các lý do lựa chọn
Fuzzing là kỹ thuật được sử dụng cho kiểm thử bảo mật website.
1.1. Các khái niệm cơ bản
1.1.1. Website
Website là một tập hợp các trang web, thường chỉ nằm trong một tên
miền hoặc tên miền phụ trên World Wide Web của Internet. Một trang web là
tập tin HTML hoặc XHTML có thể truy nhập dùng giao thức HTTP. Website
có thể được xây dựng từ các tệp tin HTML (website tĩnh) hoặc vận hành bằng
các CMS chạy trên máy chủ (website động). Website có thể được xây dựng
bằng nhiều ngôn ngữ lập trình khác nhau (PHP, .NET, Java, Ruby on Rails…)
[17].
Một Website thường được bao gồm bởi 04 phần chính:
- Source code: Mã nguồn website, chứa tệp lệnh trích xuất HTML.
- Hosting: Bộ nhớ lưu trữ website.
- Database: Dữ liệu nội dung website.
- Domain: Tên miền của website, thực chất một website không cần đến
tên miền nó vẫn có thể hoạt động bình thường vì nó có địa chỉ IP. Bản chất
của tên miền là nó được ánh xạ sang địa chỉ IP thông qua máy chủ DNS, tạo
ra sự đơn giản cho người dùng dễ dàng truy cập vào web thông qua tên miền,
thay vì phải nhớ địa chỉ IP của website.

10


Ban đầu, các website chỉ bao gồm các nội dung văn bản, hình ảnh và
video, chúng được liên kết với nhau thông qua các link. Tác dụng của website
đơn giản chỉ là lưu trữ và hiển thị thông tin. Người dùng chỉ có thể đọc, xem,
di chuyển đến các được dẫn giữa các page. Với công nghệ hiện nay, website
không chỉ đơn giản là một trang tin cung cấp các thông tin. Trước sự ra đời
của các ngôn ngữ server như: CGI, ASP, PHP,… các website đã trở nên linh
hoạt, có thể tương tác với người dùng. Từ đây, người dùng có thể dùng web
để thực hiện một công việc nào đó bằng máy tính, do đó ứng dụng web được
ra đời.
Ứng dụng web là một ứng dụng chủ/khách sử dụng giao thức HTTP để
tương tác với người dùng hay hệ thống khác [5].
Trình khách là một trình duyệt web như: Internet Explorer, Chrome,
FireFox hay có thể là một chương trình có chức năng như một trình duyệt
web. Người dùng có thể gửi, nhận các dữ liệu từ máy chủ thông qua việc trao
đổi luồng thông tin với web server và hiển thị nội dung trang web nhận được
trên trình duyệt. Các ứng dụng web này có thể là các trang cổng thông tin
điện tử, trao đổi thông tin, mua bán, các diễn đàn, các trang gửi nhận thư,...
Tốc độ phát triển các kỹ thuật xây dựng ứng dụng web cũng phát triển
rất nhanh. Trước đây những ứng dụng web thường được xây dựng bằng CGI
(Common Getaway Interface) được chạy trên các máy chủ web và kết nối với
với các cơ sở dữ liệu đơn giản trên cùng một máy chủ. Ngày nay, ứng dụng
web thường được viết bằng PHP, ASP.Net, JSP (hay các ngôn ngữ tương tự)
và chạy trên máy chủ phân tán, kết nối đến nhiều nguồn dữ liệu.
Một ứng dụng web thường có kiến trúc gồm:

11


Hình 1.1. Kiến trúc một ứng dụng web
Trên hình 1.1 mô tả kiến trúc thông thường của một ứng dụng web bao
gồm các lớp:
- Lớp trình diễn: Lớp này có chức năng hiển thị dữ liệu mà nó nhận
được từ web server cho người dùng, ngoài ra còn có thể có chức năng tạo bố
cục và giao diện cho trang web.
- Lớp ứng dụng: Đây là nơi xử lý của ứng dụng web. Nó sẽ xử lý thông
tin yêu cầu từ người dùng, đưa ra quyết định, gửi kết quả đến lớp trình diễn.
Lớp này thường được cài đặt bằng các kỹ thuật lập trình dựa trên các ngôn
ngữ như CGI, Java, .NET, PHP,... và được triển khai trên host hoặc trên các
dịch vụ của máy chủ như Apache của Linux, IIS của Windows Server,…
- Lớp dữ liệu: Lớp này là các hệ quản trị dữ liệu SQL như MySQL,
SQL Server, Oracle,... chịu tránh nhiệm quản lý các file dữ liệu và quyền sử
dụng dữ liệu của toàn bộ website. Thường được triển khai trực tiếp trên cùng
hoặc tách biệt riêng với web server.
Việc phân lớp trong kiến trúc web tạo ra các hoạt động đơn giản nhưng
có liên kết chặt chẽ giữa các lớp. Nó giúp cho người quản trị dễ dàng triển
khai, vận hành và chủ động trong phòng, chống các cuộc tấn công. Ví dụ như
lớp ứng dụng có lỗi nhưng hệ thống, cơ sở dữ liệu được cấu hình đảm bảo thì
hacker khó có thể khai thác và làm ảnh hưởng tới hệ thống.
Hoạt động của một ứng dụng web là sự tương tác giữa trình khách với
web server. Dưới đây là mô hình hoạt động của một ứng dụng web:

12


Hình 1.2. Mô hình hoạt động của một ứng dụng web
Tương ứng các lớp của một ứng dụng web, hoạt động của một website
cũng có 3 phần:
- Trình khách (trình duyệt người dùng): Chrome, FireFox,…
- Trình chủ: Apache, IIS,…
- Hệ quản trị CSDL: Oracle, SQL Server, MySQL,…
Bên cạnh đó, một giải pháp dùng để bảo vệ hệ thống mạng thường
được sử dụng là bức tường lửa (firewall), nó có vai trò như lớp rào chắn bên
ngoài một hệ thống mạng, vì chức năng chính của firewall là kiểm soát luồng
thông tin giữa các máy tính. Có thể xem firewall như một bộ lọc thông tin, nó
xác định và cho phép một máy tính này có được truy xuất đến một máy tính
khác hay không, hay một mạng này có được truy xuất đến mạng kia hay
không [5].
Người ta thường dùng firewall vào mục đích:
- Cho phép hoặc cấm các dịch vụ truy xuất ra ngoài.
- Cho phép quy định cấm các hay cho phép dịch vụ từ bên ngoài truy
xuất vào trong.
- Kiểm soát địa chỉ truy nhập, cấm địa chỉ truy nhập.
Firewall hoạt động dựa trên góp IP do đó kiểm soát được việc truy cập
máy tính của người sử dụng.
1.1.1.1. Mô tả hoạt động của website
Trình duyệt tạo một HTTP Request gửi máy chủ web thông qua các
phương thức GET, POST,… của giao thức HTTP, yêu cầu cung cấp hoặc xử
lý tài nguyên thông tin. Địa chỉ của tài nguyên yêu cầu được xác định trong
định dạng URL.
Sau khi nhận được truy vấn từ trình khách, máy chủ web xác định sự
tồn tại của tài nguyên được yêu cầu. Nếu yêu cầu can thiếp các quyền truy cập
của tài nguyên thì máy chủ web từ chối truy vấn và trả về cảnh báo thích hợp.
Nếu yêu cầu là hợp lệ, lúc này máy chủ có thể cho thực thi một chương trình
được xây dựng từ ngôn ngữ như Perl, C/C++,… hoặc máy chủ yêu cầu bộ
biên dịch thực thi các trang PHP, ASP, JSP,… theo yêu cầu của máy khách.

13


Tùy theo các tác vụ của chương trình được cài đặt mà nó xử lý, tính toán, kết
nối đến cơ sở dữ liệu, lưu các thông tin do máy khách gửi đến.
Khi máy chủ web định danh được tài nguyên, nó thực hiện hành động
chỉ ra trong request method và tạo ra response trả về cho máy khách 1 luồng
dữ liệu có định dạng theo giao thức HTTP, nó gồm 2 phần:
- Header mô tả các thông tin về gói dữ liệu và các thuộc tính, trạng thái
trao đổi giữa trình duyệt và WebServer.
- Body là phần nội dung dữ liệu mà Server gửi về Client, nó có thể là
một file HTML, một hình ảnh, một đoạn phim hay một văn bản bất kì.
Khi giao dịch hoàn tất, máy chủ web thực hiện ghi vào tệp tin nhật ký
mô tả giao dịch vừa thực hiện.
Với firewall, luồng thông tin giữa máy chủ và máy khách là luồng
thông tin hợp lệ. Vì thế, nếu hacker tìm thấy vài lỗ hổng trong ứng dụng Web
thì firewall không còn hữu dụng trong việc ngăn chặn hacker này. Do đó, các
kỹ thuật tấn công vào một hệ thống mạng ngày nay đang dần tập trung vào
những sơ suất (hay lỗ hổng) trong quá trình tạo ứng dụng của những nhà phát
triển Web hơn là tấn công trực tiếp vào hệ thống mạng, hệ điều hành. Tuy
nhiên, hacker cũng có thể lợi dụng các lỗ hổng Web để mở rộng sự tấn công
của mình vào các hệ thống không liên quan khác [5].
1.1.1.2. Các thuật ngữ liên quan
a. Http header
HTTP header là phần đầu của gói tin giao thức HTTP, thông tin mà
máy khách và máy chủ gửi cho nhau. Những thông tin máy khách gửi cho
máy chủ được gọi là HTTP requests (yêu cầu) còn máy chủ gửi cho máy
khách là HTTP responses (trả lời). Thông thường, một HTTP header gồm
nhiều dòng, mỗi dòng chứa tên tham số và giá trị. Một số tham số có thể được
dùng trong cả header yêu cầu và header trả lời, còn số khác thì chỉ đuợc dùng
riêng trong từng loại [3].
Ví dụ: Một header yêu cầu được thực hiện gửi tới đường dẫn:
http://localhost:8080/Apple/index.php
GET /Apple/index.php HTTP/1.1
Host: localhost:8080
14


Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64)
AppleWebKit/53 (KHTML, like Gecko) Chrome/56.0.2924.87
Safari/537.36
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/w
ebp,*/*;q=0.8
Referer: http://localhost:8080/Apple/index.php
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: vi
Cookie:
__utma=111872281.900455997.1485134486.1485134486.14851
34486.1; __utmz=111872281.1485134486.1.1.utmcsr=(direct)|
utmccn=(direct)|utmcmd=(none)
- Dòng đầu là dòng yêu cầu cho biết phương thức yêu cầu (GET hoặc
POST), địa chỉ yêu cầu (/Apple/index.php?ac=ipad) và phiên bản HTTP
(HTTP/1.1).
- Tiếp theo là các trường tham số mô tả cho các thông tin trong header.
Một số các trường cơ bản được mô tả như trong bảng 1.1 dưới đây:
Bảng 1.1. Các trường tham số trong HTTP Request [13]
STT

Trường

Mô tả

1

Host

Tên miền của máy chủ và số cổng TCP trên máy
chủ đang nghe. Số cổng có thể bị bỏ qua nếu là
cổng tiêu chuẩn cho dịch vụ được yêu cầu (80).

2

Connection

Các tùy chọn cho kiểu kết nối ngắt hay kết nối liên
tục sau khi hoàn thành một giao dịch.

3

Accept

Các loại nội dung có thể chấp nhận.

4

Accept-Language

Cho biết loại ngôn ngữ đang được dùng trên
website này.

5

Accept-Encoding

Danh sách các loại mã hóa được chấp nhận.

6

Authorization

Chứng thực cho xác thực HTTP.

7

User-Agent

Trường User-Agent chứa các thông tin về tác nhân
15


tạo yêu cầu.
8

Referer

Cho biết địa chỉ của trang web tham chiếu tới.

9

Cookie

Trường này chứa một cặp tên/giá trị của thông tin
để giữ lại cho URL.

10

Range

Xác định phần nội dung được yêu cầu.

Header của HTTP request sẽ kết thúc bằng một dòng trống, nhằm tạo
khoảng cách giữa phần tiêu đề và phần thân mang các dữ liệu truy vấn được
sử dụng trong phương thức khác như POST.
Header trả lời từ server:
HTTP/1.1 200 OK
Date: Sun, 02 Apr 2017 09:18:42 GMT
Server: Apache/2.2.8 (Win32) PHP/5.2.6
X-Powered-By: PHP/5.2.6
Content-Length: 6427
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: text/html
Set-Cookie:
ASPSESSIONIDQQGGGNCG=LKLDFFKCINFLDMFHCBMFLJ;
path=/
Cache-control: private


...
- Dòng đầu là dòng trạng thái, để cho biết phiên bản HTTP được dùng
(HTTP/1.1), (200) và trạng thái (OK). Nó được phân loại thành 5 loại mã
chính và được mô tả trong bảng 1.2:

16


Bảng 1.2. Bảng mã trạng thái HTTP [18]
STT

Ma

Mô tả

1

1xx

Information (Thông tin): Khi nhận được những mã như vậy
tức là request đã được server tiếp nhận và quá trình xử lý
request đang được tiếp tục.

2

2xx

Success (Thành công): Khi nhận được những mã như vậy tức
là request đã được server tiếp nhận, hiểu và xử lý thành công

3

3xx

Redirection (Chuyển hướng): Mã trạng thái này cho biết
client cần có thêm action để hoàn thành request

4

4xx

Client Error (Lỗi Client): Nó nghĩa là request chứa cú pháp
không chính xác hoặc không được thực hiện.

5

5xx

Server Error (Lỗi Server): Nó nghĩa là Server thất bại với việc
thực hiện một request nhìn như có vẻ khả thi.

- Tiếp theo là các trường tham số, mỗi trường mang những đặc trưng
cho một thông tin về gói tin HTTP response trả về. Một số trường được mô tả
như bảng 1.3 dưới đây:
Bảng 1.3. Một số trường tham số trong HTTP Response
STT Trường

Mô tả

1

Date

Thời điểm phản hồi từ phía Server.

2

Server

Các thông tin về Server, thông tin về phần mềm
được sử dụng bởi Server để kiểm soát yêu cầu.

3

Content-Length

Độ dài của gói tin HTTP Response.

4

Content-Type

Loại nội dung gói tin gửi về.

5

Set-Cookie

Trường này chứa một cặp tên/giá trị của thông tin để
giữ lại cho URL.

6

Cache-control

Để xác định các tham số cho bộ nhớ đệm hoặc yêu
cầu các loại cụ thể về bộ nhớ đệm.

7

Location

Thông tin về đường dẫn sẽ được chuyển hướng tới,
thường đi cùng mã trạng thái 302.

8

Age

Lượng thời gian từ khi phản hồi được tạo ra tại
Server ban đầu của người gửi

17


9

Pragma

Các chỉ dẫn cụ thể để thực hiện.

- Khoảng cách một dòng trống để báo hiệu kết thúc header để nối tiếp
phần thân của HTTP response.
b. Session
HTTP là giao thức hướng đối tượng tổng quát, phi trạng thái, nghĩa là
HTTP không lưu trữ trạng thái làm việc giữa trình duyệt với máy chủ. Sự
thiếu sót này gây khó khăn cho một số ứng dụng Web, bởi vì máy chủ không
biết được trước đó trình duyệt đã có những trạng thái nào. Vì thế, để giải
quyết vấn đề này, ứng dụng Web đưa ra một khái niệm phiên làm việc
(Session). Còn SessionID là một chuỗi để chứng thực phiên làm việc. Một số
máy chủ sẽ cung cấp một sessionID cho người dùng khi họ xem trang web
trên máy chủ [5].
Session là khoảng thời gian người sử dụng giao tiếp với 1 ứng dụng.
Session bắt đầu khi người sử dụng truy cập vào ứng dụng lần đầu tiên, và kết
thúc khi người sử dụng thoát khỏi ứng dụng. Mỗi session sẽ có một định danh
(ID). Trong ngữ cảnh ứng dụng web, website sẽ quyết định khi nào session
bắt đầu và kết thúc. Trong 1 session, website có thể lưu trữ một số thông tin
như đánh dấu bạn đã login hay chưa, những bài viết nào bạn đã đọc qua,…
[19]
Để duy trì phiên làm việc thì sessionID thường được lưu vào:
- Biến trên URL
- Biến ẩn form
- Cookie
Phiên làm việc chỉ tồn tại trong một khoảng thời gian cho phép, thời
gian này được cấu hình quy định tại máy chủ hoặc bởi ứng dụng thực thi.
Máy chủ sẽ tự động giải phóng phiên làm việc để khôi phục lại tài nguyên
trao đổi của hệ thống.
c. Cookie
Cookie là những phần dữ liệu nhỏ có cấu trúc được chia sẻ giữa máy
chủ và trình duyệt của người dùng [1].
Cookie mang một số đặc điểm chính như sau:

18


- Cookie được lưu trữ tại brower dưới những file dữ liệu nhỏ dạng text
(trong memory hoặc trên đĩa) và sẽ gửi ngược lên lại server mỗi khi browser
tải 1 trang web từ server.
- Được ứng dụng tạo ra để lưu trữ, truy tìm, nhận biết các thông tin về
người dùng đã ghé thăm trang web và những vùng mà họ đi qua trong trang.
Những thông tin này có thể bao gồm tên/định danh người dùng, mật khẩu, sở
thích, thói quen…
- Cookie được trình duyệt của người dùng mặc định chấp nhận lưu trên
ổ cứng của máy tính, tuy nhiên người dùng có thể thiết lập không chấp nhận
lưu trữ cookies.
- Cookie được tạo ra bởi website và gởi tới browser, do vậy 2 website
khác nhau (cho dù cùng host trên 1 server) sẽ có 2 cookie khác nhau gởi tới
browser. Ngoài ra, mỗi browser quản lý và lưu trữ cookie theo cách riêng của
mình, cho nên 2 browser cùng truy cập vào 1 website sẽ nhận được 2 cookie
khác nhau.
Ở những lần truy cập sau đến trang Web đó, ứng dụng có thể dùng lại
những thông tin trong cookie mà người dùng không phải làm lại thao tác đăng
nhập hay phải cung cấp lại các thông tin khác [1].
Cookie được phân làm 2 loại secure/non-secure và persistent/nonpersistent do đó ta sẽ có 4 kiểu cookie là:
- Persistent và Secure
- Persistent và Non-Secure
- Non-Persistent và Secure
- Non-Persistent và Non-Secure
Persistent cookies được lưu trữ dưới dạng tập tin .txt (ví dụ như trình
duyệt Internet Explorer lưu cookie thành nhiều tập tin *.txt trong đó mỗi tập
tin là một cookie) được lưu trữ trên ổ cứng của máy tính và không bị xóa khi
trình duyệt đóng lại. Những cookie này có thể thiết lập những sở thích của
bạn đối với mỗi trang web cụ thể khi bạn quay lại, cho phép những ưu đãi sẽ
được sử dụng trong những lần trình duyệt tiếp theo.
Non-persistent cookie là loại cookie tạm thời, nó được lưu trữ trên bộ
nhớ RAM của máy khách và sẽ bị hủy khi đóng trang web hay nhận được
lệnh hủy từ trang web. Bằng việc xóa cookie của bạn theo định kỳ sẽ làm
19


giảm nguy cơ của việc lạm dụng thông tin vô tình hay cố ý lưu trữ trong
cookie.
Secure cookies chỉ có thể được gửi thông qua giao thức HTTPS (SSL),
nhằm tránh cho các nguy cơ bị giả mạo cookie.
Non-Secure cookie có thể được gửi bằng cả hai giao thức HTTPS hay
HTTP. Thực chất là đối với secure cookie thì máy chủ sẽ cung cấp chế độ
truyền bảo mật.
Bảng 1.4. Các thành phần của một Cookie
Domain

Flag

Path

Secure

Expiration

Name

Value

www.redhat.com

FALSE

/

FALSE

1154029490

Apache

64.3.40.151.16
018996349247
480

- Domain: Tên miền của trang web đã tạo cookie cung cấp cho người
dùng (www.redhat.com)
- Flag: Mang giá trị True/False - xác định các máy khác với cùng tên
miền có được truy xuất đến cookie hay không.
- Path: Phạm vi các địa chỉ có thể truy xuất cookie. Ví dụ: Nếu path là
“/home” thì các địa chỉ trong thư mục /home cũng như tất cả các thư mục con
của nó như /home/path1 có thể truy xuất đến cookie này. Còn nếu giá tri là “/”
thì cookie sẽ được truy xuất bởi tất cả địa chỉ thuộc miền trang web tạo ra
cookie.
- Sercure: mang giá trị True/False - Xác định quá trình truyền cookie là
kết nối có sử dụng mã hóa SSL hay không.
- Expiration: thời gian hết hạn của cookie, được tính bằng giây kể từ
0:00:00 giờ GMT ngày 01/01/1970. Nếu giá trị này không được thiết lập thì
trình duyệt sẽ hiểu đây là non-persistent cookie và chỉ lưu trong bộ nhớ RAM
và sẽ xoá nó khi trình duyệt bị đóng.
- Name: Tên biến (Apache)
- Value: Với cookie được tạo ở trên thì giá trị của Apache là
64.3.40.151.16018996349247480 và ngày hết hạn là 27/07/2006, của tên
miền http://www.redhat.com
Ví dụ chuỗi lệnh trong HTTP header dưới đây sẽ tạo một cookie:
20


Set-Cookie: Apache="64.3.40.151.16018996349247480"; path="/";
domain="www.redhat.com"; path_spec; expires="2006-07-27 19:39:15Z";
version=0
- Các cookie của Internet Explorer được đặt trong một tập tin
Cookies.txt,
với
đường
dẫn
là:
C:\Program
Files\Netscape\Users\UserName\Cookies.txt
- Các cookies của IE được lưu thành nhiều tập tin, mỗi tập tin là một
cookie và thường được đặt tại C:\Documents and Setting\ [username]\
Cookies.
Kích thước tối đa của một cookie là 4kb. Số cookie tối đa cho một tên
miền là 20 cookie. Cookie bị hủy ngay khi đóng trình duyệt gọi là “session
cookie”.
Sử dụng Session hay Cookie:
- Trong một số trường hợp Cookie không sử dụng được. Có thể
browser đã được thiết lập để không chấp nhận cookie, lúc đó session vẫn sử
dụng được bằng cách truyền session ID giữa các trang web qua URL, ví dụ:
script.php?session=abc123 [19].
- Lượng dữ liệu truyền tải giữa browser và server: chỉ mỗi session ID
được truyền giữa browser và server, data thực sự được website lưu trữ trên
server.
- Bảo mật: thông tin được truyền tải qua lại giữa server, client và thông
tin được lưu trữ tại client càng ít càng tốt.
d. Proxy
Proxy là một máy chủ internet hay một phần mềm làm nhiệm vụ
chuyển tiếp thông tin và kiểm soát tạo sự an toàn cho việc truy cập internet
của các máy khách [17].
Proxy cung cấp cho người dùng truy xuất internet những nghi thức đặc
biệt hoặc tập những nghi thức thực thi trên dual_homed host hoặc basion host.
Những chương trình client của người sử dụng sẽ phải đi qua trung gian proxy
server thay thế cho server thật sự mà người sử dụng cần giao tiếp.
Proxy server xác định những yêu cầu từ client và quyết định đáp ứng
hay không đáp ứng, nếu yêu cầu được đáp ứng, proxy server sẽ kết nối với
server thật thay cho client và tiếp tục chuyển tiếp những yêu cầu từ client đến
21


server, cũng như trả lời của server đến client. Vì vậy proxy server giống cầu
nối trung gian giữa server và client [5].
1.1.2. Lỗ hổng bảo mật
Lỗ hổng bảo mật trên một hệ thống là các điểm yếu có thể tạo ra sự
ngưng trệ của dịch vụ, thêm quyền đối với người sử dụng hoặc cho phép các
truy nhập không hợp pháp vào hệ thống. Các lỗ hổng cũng có thể nằm ngay
các dịch vụ cung cấp như sendmail, web, ftp … Ngoài ra các lỗ hổng còn tồn
tại ngay chính tại hệ điều hành như trong Windows XP, Windows NT, UNIX;
hoặc trong các ứng dụng mà người sử dụng thường xuyên sử dụng như Word
processing, Các hệ databases… [3]
Có thể nói lỗ hổng bảo mật là những điểm yếu trên hệ thống hoặc ẩn
chứa trong một dịch vụ mà dựa vào đó kẻ tấn công có thể xâm nhập trái phép
để thực hiện các hành động phá hoại hay chiếm đoạt các tài nguyên hợp pháp.
Nguyên nhân gây ra lỗ hổng bảo mật là khác nhau:
- Do lỗi của bản thân hệ thống
- Do phần mềm cung cấp hoặc do người lập trình
- Do người quản trị yếu kém không hiểu sâu sắc các dịch vụ cung cấp.
1.1.3. Lỗ hổng website
Lỗ hổng website là những điểm yếu của hệ thống website mà tin tặc có
thể lợi dụng để khai thác nhằm thu thập thông tin về hệ thống, tấn công lấy
cắp thông tin, tấn công vào người dùng hệ thống hay tấn công chiếm quyền
điều khiển hệ thống website [20].
Lỗ hổng website có thể xuất phát từ nhiều nguyên nhân, tuy nhiên chủ
yếu là do 3 nguyên nhân sau:
- Lỗi do người lập trình, phát triển ứng dụng tập trung vào chức năng
và tốc độ mà không quan tâm đến an toàn. Ứng dụng không có thành phần
kiểm tra hay kiểm tra yếu các dữ liệu đầu vào từ người dùng, từ đó, kẻ tấn
công có thể lợi dụng lỗ hổng từ mã nguồn để khai thác và tấn công hệ thống.
- Lỗi do người quản trị cấu hình hệ thống yếu, cấu hình hệ thống mặc
định, tài khoản mặc định, không thường xuyên cập nhật phiên bản mới cho
các dịch vụ triển khai trên hệ thống.

22


- Lỗi nằm trong các giao thức, các nền tảng hay chuẩn xây dựng hệ
thống đã được công khai. Ví dụ như giao thức HTTP hoạt động theo chuẩn
mô hình client/server đơn giản và khi xây dựng giao thức này người ta chưa
quan tâm đến vấn đề bảo mật.
1.1.4. Kiểm thử phần mềm
Kiểm thử phần mềm được định nghĩa theo nhiều cách khác nhau, dưới
đây là một số định nghĩa:
Kiểm thử phần mềm là quá trình khảo sát một hệ thống hay thành phần
dưới những điều kiện xác định, quan sát và ghi lại các kết quả, và đánh giá
một khía cạnh nào đó của hệ thống hay thành phần đó [9].
Kiểm thử phần mềm là quá trình thực thi một chương trình với mục
đích tìm lỗi [8].
Kiểm thử phần mềm là hoạt động khảo sát thực tiễn sản phẩm hay dịch
vụ phần mềm trong đúng môi trường chúng dự định sẽ được triển khai nhằm
cung cấp cho người có lợi ích liên quan những thông tin về chất lượng của sản
phẩm hay dịch vụ phần mềm ấy. Mục đích của kiểm thử phần mềm là tìm ra
các lỗi hay khiếm khuyết phần mềm nhằm đảm bảo hiệu quả hoạt động tối ưu
của phần mềm trong nhiều ngành khác nhau [17].
Có thể định nghĩa một cách dễ hiểu như sau:
Kiểm thử phần mềm là một tiến trình hay một tập hợp các tiến trình
được thiết kế và thực hiện nhằm đảm bảo cho hệ thống thực hiện theo đúng
những yêu cầu mà chúng đã được thiết kế và không thực hiện những điều
không mong muốn. Kiểm thử phần mềm là một pha quan trọng trong quá
trình xây dựng và phát triển hệ thống, chúng giúp cho người phát triển hệ
thống và các khách hàng thấy được hệ thống mới đã đáp ứng các yêu cầu đặt
ra.
Các phương pháp kiểm thử phần mềm có thể chia làm 3 loại:
- Kiểm thử hộp đen (Black box testing)
- Kiểm thử hộp trắng (White box testing)
- Kiểm thử hộp xám (Gray box testing)
1.1.4.1. Kiểm thử hộp đen

23


Là phương pháp kiểm thử được thực hiện mà không biết được cấu trúc
và hành vi bên trong của phần mềm, là cách kiểm thử mà hệ thống được xem
như một chiếc hộp đen, không cách nào nhìn thấy phía bên trong cái hộp [14].
Một số phương pháp kiểm thử hộp đen:
- Kiểm thử fuzzing (Fuzz testing)
- Phân lớp tương đương (Equivalence partitioning)
- Phân tích giá trị biên (Boundary value analysis)
- Kiểm thử mọi cặp (All-pairs testing)
- Ma trận dấu vết (Traceability matrix)
- Kiểm thử thăm dò (Exploratory testing)

Hình 1.3. Kiểm thử hộp đen
Kiểm thử hộp đen không có mối liên quan nào tới mã lệnh, những kiểm
thử viên hộp đen tìm ra lỗi mà những lập trình viên đã không tìm ra. Nhưng,
mặt khác, người ta cũng nói kiểm thử hộp đen “giống như là đi trong bóng tối
mà không có đèn”, bởi vì kiểm thử viên không biết các phần mềm được kiểm
tra thực sự được xây dựng như thế nào. Đó là lý do mà có nhiều trường hợp
mà một kiểm thử viên hộp đen viết rất nhiều ca kiểm thử để kiểm tra một thứ
gì đó mà đáng lẽ có thể chỉ cần kiểm tra bằng 1 ca kiểm thử duy nhất [6] .
Do vậy, kiểm thử hộp đen có ưu điểm của một sự đánh giá khách quan,
mặt khác nó lại có nhược điểm của một thăm dò mù.
1.1.4.2. Kiểm thử hộp trắng
Là phương pháp kiểm thử trái ngược hoàn toàn với kiểm thử hộp đen,
nó cho phép kiểm tra cấu trúc bên trong của một phần mềm với mục đích đảm
bảo rằng tất cả các mã lệnh, thuật toán và điều kiện sẽ được thực hiện ít nhất 1
lần.
Một số phương pháp kiểm thử hộp trắng:
24


- Kiểm thử giao diện lập trình ứng dụng (API testing)
- Bao phủ mã lệnh (Code coverage)
- Các phương pháp gán lỗi (Fault injection)
- Các phương pháp kiểm thử hoán chuyển (Mutation testing methods)
- Kiểm thử tĩnh (Static testing)

Hình 1.4. Kiểm thử hộp trắng
Kiểm thử hộp trắng có thể áp dụng tại cấp đơn vị, tích hợp hệ thống và
các cấp độ của quá trình kiểm thử phần mềm. Mặc dù phương pháp này thiết
kế kiểm thử có thể phát hiện ra nhiều lỗi hoặc các vấn đề, nhưng nó có thể
không phát hiện các phần chưa thực hiện của các đặc điểm kỹ thuật hoặc yêu
cầu thiếu sót [17].
1.1.4.3. Kiểm thử hộp xám
Là sự kết hợp của kiểm thử hộp đen và hộp trắng. Trong kiểm thử hộp
xám, cấu trúc bên trong sản phẩm chỉ được biết một phần, người kiểm thử có
thể truy cập vào cấu trúc dữ liệu bên trong và thuật toán của chương trình với
mục đích là để thiết kế đầu vào, nhưng khi kiểm tra thì như ở mức hộp đen.

Hình 1.5. Kiểm thử hộp xám
Việc thao tác tới dữ liệu đầu vào và định dạng dữ liệu đầu ra là không
rõ ràng, giống như một chiếc hộp xám, bởi vì đầu vào và đầu ra rõ ràng là ở
bên ngoài hộp đen mà chúng ta vẫn gọi về hệ thống được kiểm tra [6].
25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×