ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ
---------- ----------
NGUYỄN THỊ THU HIỀN
XÂY DỰNG CÁC CA KIỂM THỬ
AN TOÀN THÔNG TIN CHO ỨNG DỤNG WEB
LUẬN VĂN THẠC SỸ CÔNG NGHỆ THÔNG TIN
Hà Nội - 2014
i
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ
---------- ----------
NGUYỄN THỊ THU HIỀN
XÂY DỰNG CÁC CA KIỂM THỬ
AN TOÀN THÔNG TIN CHO ỨNG DỤNG WEB
Ngành:
Công nghệ thông tin
Chuyên ngành:
Kỹ thuật phần mềm
Mã số:
60480103
LUẬN VĂN THẠC SỸ CÔNG NGHỆ THÔNG TIN
NGƢỜI HƢỚNG DẪN KHOA HỌC: TS. ĐẶNG ĐỨC HẠNH
Hà Nội - 2014
ii
LỜI CẢM ƠN
Trƣớc hết, tôi xin gửi lời cảm ơn đặc biệt đến TS. Đặng Đức Hạnh, Bộ môn
Công nghệ phần mềm, Khoa Công nghệ Thông tin, Trƣờng Đại học Công nghệ,
Đại học Quốc Gia Hà Nội, ngƣời đã định hƣớng đề tài, cung cấp tài liệu và tận tình
hƣớng dẫn chỉ bảo tôi trong suốt quá trình thực hiện luận văn cao học này.
Tôi xin đƣợc gửi lời cảm ơn sâu sắc tới các thầy cô giáo trong khoa Công nghệ
Thông tin, Trƣờng Đại học Công nghệ, Đại học Quốc Gia Hà Nội đã tận tình giảng
dạy và truyền đạt những kiến thức, những kinh nghiệm quý báu cũng nhƣ những tình
cảm tốt đẹp cho tôi trong suốt thời gian tôi học Cao học.
Cuối cùng, tôi xin dành tình cảm biết ơn chân thành đến gia đình, bạn bè và
đồng nghiệp, những ngƣời đã luôn ở bên cạnh tôi, động viên, chia sẻ cùng tôi trong
suốt thời gian học Cao học cũng nhƣ quá trình thực hiện luận văn Cao học.
Hà Nội, tháng 05 năm 2014
Nguyễn Thị Thu Hiền
i
LỜI CAM ĐOAN
Tôi xin cam đoan: bản luận văn “Xây dựng các ca kiểm thử an toàn thông tin cho
ứng dụng web” là do chính tôi viết dƣới sự hƣớng dẫn khoa học của TS. Đặng Đức
Hạnh. Nội dung của luận văn có tham khảo nhƣng không sao chép từ bất kỳ tài liệu
nào đã đƣợc công bố.
Hà Nội, tháng 05 năm 2014
Học viên
Nguyễn Thị Thu Hiền
ii
MỤC LỤC
LỜI CẢM ƠN ...................................................................................................................i
LỜI CAM ĐOAN ........................................................................................................... ii
MỤC LỤC ..................................................................................................................... iii
DANH MỤC KÝ HIỆU, TỪ VIẾT TẮT .......................................................................vi
DANH MỤC BẢNG .................................................................................................... vii
DANH MỤC HÌNH VẼ .............................................................................................. viii
MỞ ĐẦU ......................................................................................................................... 1
CHƢƠNG 1. KHÁI NIỆM CƠ BẢN..............................................................................2
1.1.
Các khái niệm cơ bản trong kiểm thử phần mềm ..............................................2
1.1.1.
Khái niệm về kiểm thử phần mềm .............................................................. 2
1.1.2.
Các phƣơng pháp kiểm thử .........................................................................2
1.1.3.
Các chiến lƣợc kiểm thử .............................................................................3
1.2.
Kiểm thử an toàn thông tin cho ứng dụng web ..................................................4
1.2.1.
Khái niệm ứng dụng web ............................................................................4
1.2.2.
Hoạt động của một ứng dụng Web ............................................................. 6
1.2.3.
Kiểm thử ATTT cho ứng dụng web ............................................................ 7
1.2.4.
Quy trình kiểm thử an toàn thông tin .......................................................... 7
CHƢƠNG 2. THIẾT KẾ CA KIỂM THỬ ATTT CHO ỨNG DỤNG WEB ................8
2.1.
Phƣơng pháp thiết kế ca kiểm thử ATTT .......................................................... 9
2.2.
Tổng hợp nguy cơ về ATTT cho ứng dụng web .............................................10
R1. Tƣơng tác với cơ sở dữ liệu tránh lỗ hổng SQL Injection ............................... 10
R2. Xử lý dữ liệu đầu vào tránh lỗ hổng XSS ........................................................ 10
iii
R3. Sử dụng Token trong phƣơng thức GET và POST tránh lỗ hổng CSRF.........11
R4. Kiểm tra quyền truy cập của ngƣời dùng ......................................................... 12
R5. Session Hijacking ............................................................................................. 12
R6. Session fixation ................................................................................................ 12
R7. Kiểm soát các thao tác với file .........................................................................13
R8. Mã hóa dữ liệu nhạy cảm .................................................................................14
R9. User enumeration ............................................................................................. 15
R10. HTTP Only cookie ......................................................................................... 15
R11. Chuyển hƣớng và chuyển tiếp thiếu thẩm tra ................................................15
R12. Thất thoát thông tin và xử lý lỗi không đúng cách ........................................16
R13. Sử dụng captcha an toàn ................................................................................16
R14. Mật khẩu mạnh............................................................................................... 16
2.3.
Các ca kiểm thử ATTT .................................................................................... 17
F1. Ca kiểm thử mức chung.................................................................................... 19
F2. Ca kiểm thử cho chức năng Đăng nhập – Đăng xuất .......................................24
F3. Ca kiểm thử cho chức năng Tìm kiếm ............................................................. 28
F4. Ca kiểm thử cho chức năng Thêm mới ............................................................ 35
F5. Ca kiểm thử cho chức năng Sửa .......................................................................44
F6. Ca kiểm thử cho chức năng Xóa ......................................................................60
F7. Ca kiểm thử cho chức năng Xem thông tin ...................................................... 66
F8. Ca kiểm thử cho chức năng Download ............................................................ 71
F9. Ca kiểm thử cho chức năng Upload .................................................................78
F10. Ca kiểm thử cho chức năng Import ................................................................ 84
F11. Ca kiểm thử cho chức năng Trang có chuyển hƣớng .....................................93
iv
F12. Ca kiểm thử liên quan đến dữ liệu nhạy cảm .................................................94
F13. Ca kiểm thử cho chức năng liên quan đến mật khẩu ......................................96
CHƢƠNG 3. VẬN DỤNG VÀ CÔNG CỤ HỖ TRỢ ..................................................98
3.1.
Minh họa phƣơng pháp kiểm thử .....................................................................98
3.2.
Công cụ hỗ trợ................................................................................................100
3.2.1.
Quản lý các ca kiểm thử an toàn thông tin ..............................................100
3.2.2.
Sinh các ca kiểm thử với từng chức năng của hệ thống website ............101
KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN ..................................................................102
TÀI LIỆU THAM KHẢO ...........................................................................................103
v
DANH MỤC KÝ HIỆU, TỪ VIẾT TẮT
Từ viết tắt
XSS
CSRF
URL
ATTT
HTTP
HTTPS
HTML
DB
SQL
Tiếng Anh
Cross-site script
Cross-site request forgery
Uniform Resource Locator
Information security
HyperText Transfer Protocol
Hypertext Transfer Protocol
Secure
HyperText Markup Language
Database
Structured Query Language
HQL
Hibernate Query Language
IP
ID
MAC
VD
DL
Internet Protocol
identification
Media Access Control
Example
Data
vi
Tiếng Việt
Lỗ hổng XSS
Lỗ hổng CSRF
Định vị Tài nguyên thống nhất
An toàn thông tin
Giao thức truyền tải siêu văn bản
Giao thức truyền tải siêu văn bản
an toàn
Ngôn ngữ Đánh dấu Siêu văn bản
Cơ sở dữ liệu
ngôn ngữ truy vấn mang tính cấu
trúc
Ngôn ngữ truy vấn hƣớng đối
tƣợng
Giao thức liên mạng
Định danh
Điều khiển truy nhập môi trƣờng
Ví dụ
Dữ liệu
DANH MỤC BẢNG
Bảng 2.1. Các ký tự đặc biệt có nguy cơ gây lỗ hổng XSS ...................................................... 11
Bảng 2.2. Bảng tổng hợp các nguy cơ mất ATTT tƣơng ứng với từng chức năng của một ứng
dụng web .................................................................................................................................. 18
Bảng 2.3. Các ca kiểm thử chỉ cần kiểm tra một lần trên toàn bộ hệ thống ............................. 19
Bảng 2.4. Các ca kiểm thử với màn hình có chức năng Đăng nhập – Đăng xuất .................... 24
Bảng 2.5. Các ca kiểm thử với màn hình có chức năng Tìm kiếm........................................... 28
Bảng 2.6. Các ca kiểm thử với màn hình có chức năng Thêm mới.......................................... 35
Bảng 2.7. Các ca kiểm thử với màn hình có chức năng Sửa .................................................... 44
Bảng 2.8. Các ca kiểm thử với màn hình có chức năng Xóa.................................................... 60
Bảng 2.9. Các ca kiểm thử với màn hình có chức năng Xem thông tin chi tiết 1 bản ghi ....... 66
Bảng 2.10. Các ca kiểm thử với màn hình có chức năng Download........................................ 71
Bảng 2.11. Các ca kiểm thử với màn hình có chức năng Upload ............................................ 78
Bảng 2.12. Các ca kiểm thử với màn hình có chức năng Import ............................................. 84
Bảng 2.13. Các ca kiểm thử với màn hình có chức năng Chuyển hƣớng ................................ 93
Bảng 2.14. Các ca kiểm thử với chức năng có dữ liệu nhạy cảm............................................. 94
Bảng 2.15. Các ca kiểm thử với màn hình có chức năng liên quan đến mật khẩu ................... 96
vii
DANH MỤC HÌNH VẼ
Hình 1.1. : Kiến trúc ứng dụng Web và Database ...................................................................... 5
Hình 1.2. : Mô hình hoạt động của một ứng dụng Web ............................................................. 5
Hình 1.3. Quy trình kiểm thử ATTT .......................................................................................... 8
Hình 3.1. Chức năng quản lý sự kiện ....................................................................................... 98
Hình 3.2. Chức năng quản lý các ca kiểm thử ATTT trên ứng dụng web ............................. 100
Hình 3.3. Chức năng sinh tập các ca kiểm thử cho từng chức năng trên ứng dụng web ....... 101
viii
MỞ ĐẦU
Trong thời đại bùng nổ công nghệ thông tin hiện nay, phần mềm đã đi vào mọi
ngõ ngách của cuộc sống và đã có những ảnh hƣởng to lớn đến đời sống của con
ngƣời. Bởi vậy mà hơn bao giờ hết, việc kiểm thử và đảm bảo chất lƣợng phần mềm
càng trở lên quan trọng. Giờ đây, việc kiểm thử phần mềm cũng không chỉ đơn thuần
là kiểm thử cho các chức năng hoạt động tốt, mà còn phải đảm bảo bảo mật phần
mềm. Bởi những nỗ hổng về bảo mật là những nguy cơ rất nguy hiểm có thể dẫn đến
những hậu quả nghiêm trọng.
Các loại tội phạm công nghệ cao, an ninh mạng là những vấn đề thuộc an ninh
phi truyền thống đang ngày càng phổ biến và tác động, ảnh hƣởng đến an ninh quốc
gia. Theo tờ USA Today, năm 2012, tội phạm công nghệ cao gây thiệt hại cho nƣớc
Mỹ khoảng 67,2 tỷ USD, trên toàn cầu khoảng 400 tỷ USD, chỉ đứng sau tội phạm ma
túy (460 tỷ USD) [1].
Thực trạng an toàn thông tin tại Việt Nam đang tiềm ẩn nhiều nguy cơ. An ninh
mạng vẫn chƣa thực sự đƣợc quan tâm tại các cơ quan, doanh nghiệp. Theo nhận định
của các chuyên gia Công ty Bkav [2], 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ế. Vấn đề an ninh mang đang trở lên hiện
hữu, ảnh hƣởng sâu rộng, tác động đến các vấn đề chính trị, kinh tế và an ninh quốc
gia. Việc đảm bảo bảo mật phần mềm đã trở thành yêu cầu cấp thiết và bắt buộc đối
với bất kỳ phần mềm nào. Vì vậy, việc kiểm thử bảo mật cũng trở thành 1 yêu cầu bắt
buộc trong quy trình kiểm thử phần mềm của rất nhiều công ty. Xuất phát từ nhu cầu
thực tế này, chúng tôi đã nghiên cứu và tìm hiểu về an toàn thông tin đối với các ứng
dụng web và các phƣơng pháp kiểm thử để tìm ra các nỗ hổng về bảo mật của ứng
dụng web. Sau một quá trình nghiên cứu dƣới sự hƣớng dẫn của TS. Đặng Đức Hạnh,
tôi đã hoàn thành luận văn “XÂY DỰNG CÁC CA KIỂM THỬ AN TOÀN THÔNG
TIN CHO ỨNG DỤNG WEB”. Luận văn đƣợc cấu trúc thành 3 chƣơng nhƣ sau:
- Chƣơng 1: Khái niệm cơ bản
- Chƣơng 2: Thiết kế các ca kiểm thử ATTT cho ứng dụng web
- Chƣơng 3: Vận dụng và công cụ hỗ trợ
1
CHƢƠNG 1. KHÁI NIỆM CƠ BẢN
Trong Chƣơng 1 chúng tôi trình bày về những khái niệm cơ bản trong kiểm thử
phần mềm và kiểm thử an toàn thông tin.
1.1. Các khái niệm cơ bản trong kiểm thử phần mềm
Chúng tôi xin tóm lƣợc lại những khái niệm cơ bản về kiểm thử phần mềm, các
phƣơng pháp và chiến lƣợc kiểm thử.
1.1.1. Khái niệm về kiểm thử phần mềm
Kiểm thử phần mềm [5] 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 đó.
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 điều kiện
khác nhau.
Có thể định nghĩa một cách dễ hiểu nhƣ sau: Kiểm thử phần mềm [6] là một
tiến trình hay một tập hợp các tiến trình đƣợc thiết kế để đảm bảo mã máy tính thực
hiện theo cái mà chúng đã đƣợc thiết kế để làm, và không thực hiện bất cứ thứ gì
không mong muốn. Đây là một pha quan trọng trong quá trình phát triển hệ thống,
giúp cho ngƣời xây dựng hệ thống và khách hàng thấy đƣợc hệ thống mới đã đáp ứng
yêu cầu đặt ra hay chƣa.
1.1.2. Các phương pháp kiểm thử
Trong thực tế, có 2 phƣơng pháp kiểm thử phần mềm [6] thƣờng đƣợc sử dụng
là phƣơng pháp kiểm thử tĩnh (static testing) và kiểm thử động (dynamic testing).
Kiểm thử tĩnh (static testing): Là phƣơng pháp kiểm thử phần mềm đòi hỏi
phải duyệt lại các yêu cầu và các đặc tả bằng tay, thông qua việc sử dụng giấy, bút để
kiểm tra logic, lần từng chi tiết mà không cần chạy chƣơng trình. Phƣơng pháp này
chủ yếu dùng để kiểm tra tính đúng đắn của mã lệnh, thuật toán và các tài liệu đặc tả.
Ngoài ra, phƣơng pháp này có thể dùng để xem xét các yêu cầu và thông số kỹ thuật.
Kiểm thử tĩnh cũng có thể đƣợc thực hiện một cách tự động. Trong các môi trƣờng lập
trình, thƣờng có sẵn một trình thông dịch hay biên dịch kiểm tra tính đúng đắn của cú
pháp chƣơng trình, đó cũng là một cách kiểm thử tĩnh nhƣng đƣợc thực hiện tự động.
2
Kiểm thử động (dynamic testing): Là phƣơng pháp kiểm thử thông qua việc
dùng máy chạy chƣơng trình để điều tra trạng thái tác động của chƣơng trình. Đó là
kiểm thử dựa trên các ca kiểm thử xác định bằng sự thực hiện của đối tƣợng kiểm thử
hay chạy chƣơng trình. Kiểm thử động là kiểm tra cách thức hoạt động của mã lệnh,
tức là kiểm tra sự phản ứng vật lý từ hệ thống tới các biến luôn thay đổi theo thời gian.
Trong kiểm thử động, phần mềm phải thực sự đƣợc biên dịch và chạy. Kiểm thử động
bao gồm làm việc với phần mềm, nhập các giá trị đầu vào và kiểm tra xem liệu đầu ra
có nhƣ mong muốn hay không.
1.1.3. Các chiến lược kiểm thử
Trong chiến lƣợc kiểm thử, chúng ta có ba chiến lược kiểm thử [6] hay dùng
nhất là: kiểm thử hộp đen, kiểm thử hộp trắng, và kiểm thử hộp xám. Chi tiết các
phƣơng pháp này nhƣ mô tả phần dƣới.
1.1.3.1.
Kiểm thử hộp đen – Black box
Một trong những chiến lƣợc kiểm thử quan trọng là kiểm thử hộp đen, hƣớng
dữ liệu, hay hƣớng vào ra. Kiểm thử hộp đen xem chƣơng trình nhƣ là một “hộp đen”.
Mục đích của bạn là hoàn toàn không quan tâm về cách cƣ xử và cấu trúc bên trong
của chƣơng trình. Thay vào đó, tập trung vào tìm các trƣờng hợp mà chƣơng trình
không thực hiện theo các đặc tả của nó. Ở mức kiểm thử này, kiểm thử viên chỉ xem
xét dữ liệu đầu vào và giá trị đầu ra có giống với mong muốn không, mà không cần
phải quan tâm hệ thống làm thế nào để đƣa đƣợc giá trị đầu ra nhƣ mong muốn. Kiểm
thử dựa trên đặc tả là cần thiết, nhƣng không đủ để ngăn chặn những rủi ro chắc chắn.
Kiểm thử hộp đen không có mối liên quan nào tới mã lệnh và kiểm thử viên chỉ
rất đơn giản tâm niệm là: một mã lệnh phải có lỗi. Sử dụng nguyên tắc “Hãy đòi hỏi và
bạn sẽ đƣợc nhận”, 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, ngƣời ta nói kiểm thử hộp đen “giống nhƣ là đi trong bóng tối
mà không có đèn vậy”, 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. Trong khi đó, một số phần của
chƣơng trình lại không đƣợc kiểm tra chút nào. Do vậy, kiểm thử hộp đen có ƣu điểm
là đánh giá khách quan, nhƣng lại có nhƣợc điểm là một kiểu thăm dò mù.
1.1.3.2.
Kiểm thử hộp trắng – White box
Là một chiến lƣợc kiểm thử khác, trái ngƣợc hoàn toàn với kiểm thử hộp đen,
kiểm thử hộp trắng hay kiểm thử hƣớng logic cho phép bạn khảo sát cấu trúc bên trong
của chƣơng trình. Chiến lƣợc này xuất phát từ dữ liệu kiểm thử bằng sự kiểm thử tính
3
logic của chƣơng trình. Kiểm thử viên sẽ truy cập vào cấu trúc dữ liệu và giải thuật
bên trong chƣơng trình (và cả mã lệnh thực hiện chúng). Phƣơng pháp kiểm thử hộp
trắng cũng có thể đƣợc kết hợp với phƣơng pháp kiểm thử hộp đen để tạo ra bộ các ca
kiểm thử đầy đủ nhằm giảm thiểu rủi ro.
1.1.3.3.
Kiểm thử hộp xám – Gray box testing
Kiểm thử hộp xám đòi hỏi phải có sự truy cập tới cấu trúc dữ liệu và giải thuật
bên trong cho những mục đích thiết kế các ca kiểm thử, nhƣng là kiểm thử ở mức
ngƣời sử dụng hay mức hộp đen. 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. Sự
khác biệt này đặc biệt quan trọng khi quản lý kiểm thử tích hợp – Intergartion testing
giữa 2 modun mã lệnh đƣợc viết bởi hai chuyên viên thiết kế khác nhau, trong đó chỉ
giao diện là đƣợc đƣa ra để kiểm thử. Kiểm thử hộp xám có thể cũng bao gồm cả thiết
kế đối chiếu để quyết định, ví dụ, giá trị biên hay thông báo lỗi.
1.2. Kiểm thử an toàn thông tin cho ứng dụng web
Bên cạnh kiểm thử chức năng cho phần mềm, việc kiểm thử an toàn thông tin
cho mỗi ứng dụng cũng là một vấn đề rất quan trọng. Đặc biệt là với các ứng dụng
web, loại ứng dụng có đối tƣợng ngƣời dùng rất đa dạng và phức tạp. Ứng dụng web
hiện cũng là mục tiêu tấn công của nhiều hacker. Bởi vậy, việc đảm bảo an toàn thông
tin cho các ứng dụng web là một yêu cầu cấp thiết. Để nghiên cứu kỹ hơn về vấn đề
này, chúng ta sẽ đi tìm hiểu từng khái niệm để hiểu rõ hơn thế nào là kiểm thử an toàn
thông tin cho ứng dụng web.
1.2.1. Khái niệm ứng dụng web
Ứ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. Trình khách dành cho ngƣời sử dụng thƣờng là
một trình duyệt Web nhƣ Internet Explorer hay Firefox. Cũng có thể là một chƣơng
trình đóng vai trò đại lý ngƣời dùng hoạt động nhƣ một trình duyệt tự động. Ngƣời
dùng gửi và nhận các thông tin từ trình chủ thông qua việc tác động vào các trang
Web.
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
Gateway Interface) đƣợc chạy trên các trình chủ Web và có thể kết nối vào các cơ sở
dữ liệu đơn giản trên cùng máy chủ. Ngày nay ứng dụng Web thƣờng đƣợc viết bằng
Java (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.
4
Một ứng dụng web thƣờng có kiến trúc gồm:
Hình 1.1. : Kiến trúc ứng dụng Web và Database
-
-
Lớp trình bày: Lớp này có nhiệm vụ hiển thị dữ liệu cho ngƣời dùng, ngoài ra
còn có thể có thêm các ứng dụng tạo bố cục cho trang web.
Lớp ứng dụng: là nơi xử lý của ứng dụng Web. Nó sẽ xử lý thông tin ngƣời
dùng yêu cầu, đƣa ra quyết định, gửi kết quả đến “lớp trình bày”. Lớp này
thƣờng đƣợc cài đặt bằng các kỹ thuật lập trình nhƣ CGI, Java, .NET, PHP hay
ColdFusion, đƣợc triển khai trên các trình chủ nhƣ IBM WebSphere,
WebLogic, Apache, IIS …
Lớp dữ liệu: thƣờng là các hệ quản trị dữ liệu (DBMS) chịu trách nhiệm quản lý
các file dữ liệu và quyền sử dụng.
Mô hình hóa hoạt động của một ứng dụng Web gồm trình khách, trình chủ, hệ
quản trị cơ sở dữ liệu:
Hình 1.2. : Mô hình hoạt động của một ứng dụng Web
Trình khách (hay còn gọi là trình duyệt) thƣờng đƣợc sử dụng là Internet
5
Explorer, Netscap Navigator, Firefox… Trình chủ thƣờng đƣợc dùng nhƣ Apache,
IIS… Hệ quản trị cơ sở dữ liệu phổ biến nhƣ SQL Server, MySQL, DB2, Access …
Một giải pháp dùng để bảo vệ một 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à 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. Ngƣời ta thƣờng dùng firewall vào mục đích:
- Cho phép hoặc cấm những dịch vụ truy xuất ra ngoài
- Cho phép hoặc cấm những dịch vụ từ bên ngoài truy nhập 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ói IP do đó kiểm soát việc truy nhập của máy ngƣời sử
dụng
Trong kỹ thuật phần mềm, một Ứng dụng web [7] là một trình ứng dụng mà có
thể tiếp cận qua web thông qua mạng nhƣ Internet hay intranet. Ứng dụng web phổ
biến nhờ vào sự có mặt vào bất cứ nơi đâu của một chƣơng trình. Khả năng cập nhật
và bảo trì ứng dụng Web mà không phải phân phối và cài đặt phần mềm trên hàng
ngàn máy tính là lý do chính cho sự phổ biến của nó. Ứng dụng web đƣợc dùng để
hiện thực webmail, bán hàng trực tuyến, đấu giá trực tuyến, wiki, diễn đàn thảo luận,
weblog, MMORPG, hệ quản trị nội dung, phần mềm quản lý nguồn nhân lực và nhiều
chức năng khác.
Các ứng dụng web có thể đƣợc viết bởi 1 ngôn ngữ bất kỳ, chạy trên rất nhiều
loại hệ điều hành, nhiều loại trình duyệt khác nhau, và ngƣời dùng cuối có thể hành xử
theo mọi cách mà bạn có thể tƣởng tƣợng. Cốt lõi của một ứng dụng web là sử dụng
các giao thức HTTP để truyền dữ liệu. Dữ liệu từ server gửi về client thƣờng định
dạng HTML và javascript. Dữ liệu đầu vào thƣờng sử dụng phƣơng thức GET, POST
và các phƣơng thức tƣơng tự.
1.2.2. Hoạt động của một ứng dụng Web
Đầu tiên trình duyệt sẽ gửi một yêu cầu (request) đến trình chủ Web thông qua
các lệnh cơ bản GET, POST… của giao thức HTTP, trình chủ lúc này có thể cho thực
thi một chƣơng trình đƣợc xây dựng từ nhiều ngôn ngữ nhƣ Perl, C/C++… hoặc trình
chủ yêu cầu bộ diễn dịch thực thi các trang ASP, JSP… theo yêu cầu của trình khách.
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 trình khách gửi đến và từ đó trả về cho trình 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
6
-
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ì
Với firewall, luồng thông tin giữa trình chủ và trình khách là luồng thông tin
hợp lệ. Vì thế, nếu kẻ tấn công 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 kẻ tấn công 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, kẻ tấn công 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.
1.2.3. Kiểm thử ATTT cho ứng dụng web
Kiểm thử bảo mật web [3] là kiểm tra sự đảm bảo an toàn dữ liệu và bảo vệ tài
nguyên của hệ thống trƣớc sự tấn công nhằm phá vỡ hệ thống hoặc sử dụng trái phép
các tài nguyên của một số đối tƣợng có mục đích xấu. Để làm đƣợc điều này cần có
kiến thức về công nghệ bảo mật, kinh nghiệm thực tế về cách thức thâm nhập các phần
không đƣợc phép trên hệ thống website.
Việc thiết lập bảo mật cho một hệ thống website phụ thuộc vào nhiều yếu tố:
bảo mật về thiết kế, bảo mật về xây dựng mã nguồn, bảo mật về các thiết lập của trình
duyệt, bảo mật tƣờng lửa.
Tuy nhiên, trong khuôn khổ luận văn này, chúng tôi chỉ để cập đến vấn đề bảo
mật khi xây dựng mã nguồn. Phƣơng pháp kiểm tra độ bảo mật của ứng dụng thông
qua mã nguồn chủ yếu dùng để xác định sự an toàn của thuật toán đƣợc dùng trong
ứng dụng. Dựa trên các đặc trƣng của ứng dụng web, việc kiểm thử có thể xác định
nguy cơ rò rỉ thông tin hoặc bị tấn công chiếm quyền kiểm soát hệ thống. Phƣơng pháp
này thƣờng ứng dụng kỹ thuật kiểm thử hộp trắng.
1.2.4. Quy trình kiểm thử an toàn thông tin
Quy trình kiểm thử chức năng có đầu vào là tài liệu mô tả yêu cầu hệ thống và
tài liệu thiết kế hệ thống. Cũng tƣơng tự nhƣ vậy, nhƣng quy trình kiểm thử an toàn
thông tin còn cần thêm tài liệu phân tích các nguy cơ mất an toàn thông tin đối với hệ
thống. Từ đó, đƣa ra các ca kiểm thử trên hệ thống và thực hiện kiểm thử để tìm ra lỗi.
7
Quy trình kiểm thử an toàn thông tin đƣợc mô tả nhƣ hình 1.3 [3]:
Bắt đầu
Tài liệu giải pháp
Phân tích các nguy cơ mất
ATTT đối với hệ thống
Xây dựng các ca kiểm thử ATTT
Thực hiện kiểm thử ATTT
Đúng
Nếu có lỗi
Sai
Kết thúc
Hình 1.3. Quy trình kiểm thử ATTT
8
CHƢƠNG 2. THIẾT KẾ CA KIỂM THỬ ATTT
CHO ỨNG DỤNG WEB
Các ứng dụng web đứng trƣớc rất nhiều nguy cơ về việc mất an toàn thông tin.
Để giảm thiểu những nguy cơ này, quy trình sản xuất phần mềm cần tuân thủ những
nguyên tắc về lập trình an toàn. Cũng giống nhƣ việc đảm bảo các chức năng hoạt
động đúng, các quy trình phát triển phần mềm đều phải qua 2 bƣớc: lập trình và kiểm
thử. Việc đảm bảo các chức năng không bị lỗ hổng về an toàn thông tin cũng cần trải
qua 2 bƣớc nhƣ vậy. Để đảm bảo thực hiện đƣợc điều này, chúng ta sẽ cùng tìm hiểu
cách thức kiểm tra mức độ ATTT của một hệ thống web.
2.1. Phƣơng pháp thiết kế ca kiểm thử ATTT
Để thiết kế các ca kiểm thử ATTT cho các ứng dụng Web, chúng tôi thực
hiện theo các bƣớc sau.
Bước 1: Chƣơng này xác định các nguy cơ về lỗi ATTT. Dƣ̣a trên công bố của thế giới
về các lỗ hổ ng bảo mâ ̣t của mô ̣t ƣ́ng du ̣ng web , chƣơng 2 tâ ̣p hơ ̣p nhƣ̃ng mô tả cu ̣ thể
về tƣ̀ng lỗ hổ ng bảo mâ ̣t , phân tích tƣ̀ng lỗ hổ ng có thể dẫn đế n nhƣ̃ng nguy về mấ t
ATTT của hê ̣ thố ng.
Mô ̣t ví du ̣ điể n hình là l ỗi "SQL Injection". Lỗi này xuấ t hiê ̣n khi lâ ̣p trình viên
sƣ̉ du ̣ng phƣơng pháp cô ̣ng xâu đố i với các dƣ̃ liê ̣u đầ u vào . Nhƣ̃ng kẻ tấ n công có thể
lơ ̣i du ̣ng đă ̣c điể m này để truyề n vào nhƣ̃ng đoa ̣n mã làm sai lê ̣ch mu ̣c đích truy v ấn.
Bước 2: Mỗi l ỗ hổng bảo mật này có thể xuất hiện ở nhiề u ph ần khác
nhau của một hệ thống. Bởi vậy, chúng tôi sẽ phân một ứng dụng web thành
các chức năng và phân tích từng chức năng và các nguy cơ về mấ t ATTT mà ch ức
năng đó có khả năng mắc phải.
Ví dụ, qua phân tić h đă ̣c điể m dƣ̃ liê ̣u đầ u vào của tƣ̀ng chƣ́c năng , chúng tôi
nhâ ̣n thấ y , lỗi "SQL Injection" có nguy cơ mắc phải tại các chức năng : Đăng nhâ ̣p ,
Tìm kiếm, Thêm mới, Sƣ̉a, Xoá, Xem thông tin, Import
Bước 3: Bƣớc này mô tả chi ti ết cách thiế t kế các ca ki ểm thử tƣơng ứng với cặp
"nguy cơ ATTT" và "chức năng".
Ví dụ, với lỗi “SQL injection” và chƣ́c năng “Đăng nhâ ̣p” . Chƣ́c năng Đăng
nhâ ̣p bi ̣lỗi SQL injection khi lâ ̣p trình không tham số hoá dƣ̃ liê ̣u truyề n vào Tên đăng
nhâ ̣p và Mâ ̣t khẩ u , mà sử dụng phƣơng pháp cộng xâu . Kẻ tấn công có thể lợi dụng
đă ̣c điể m này để truyề n vào các xâu dƣ̃ liê ̣u nhằ m phá vỡ cấ u trúc câu SQL kiể m tra
9
tính hợp của Tên đăng nhập và Mật khẩu . Cụ thể câu truy vấ n kiể m tra tính hơ ̣p lê ̣ của
Tên đăng nhâ ̣p và Mâ ̣t khẩ u là select * from user where user = „Tên đăng nhập người
dùng nhập‟ and pass = „Mật khẩu người dùng nhập‟ . Trƣờng hơ ̣p ngƣời dùng nhâ ̣p
Tên đăng nhập = abc‟ or „a‟=‟a có thể dẫn đến việc phá vỡ cấu trúc ban đầu của câu
truy vấ n . Câu truy vấ n mới là select * from user where user = „abc‟ or „a‟ =‟a‟ and
pass = „Mật khẩu người dùng nhập‟ , lúc này biểu thức điều kiện luôn đúng . Bởi vâ ̣y,
dù ngƣời dùng không biết Tên đăng nhập và Mật khẩu vào hệ thống vẫn có thể truy
câ ̣p đƣơ ̣c . Dƣ̣a vào nhƣ̃ng phân tích trên , chúng tôi thiết kế ca kiểm thử tƣơng ứng
nhằ m mu ̣c đić h kiể m tra hê ̣ thố ng có mắ c lỗi SQL injection ở chƣ́c n
ăng đăng nhâ ̣p
không. Phƣơng pháp đƣơ ̣c áp du ̣ng để xây dƣ̣ng lên ca kiể m thƣ trên là phƣơng pháp
kiể m thƣ̉ hô ̣p trắ ng.
Tính đúng đắn của ca kiểm thử đƣợc phân tích và đảm bảo ở bƣớc 3. Trong
phạm vi luận văn, chúng tôi không đi sâu chứng minh tính đúng
đắn của các ca sử kiểm thử. Điểm nhấn mạnh ở đây là phƣơng pháp đề xuất
cho viê ̣c thiế t kế các ca kiểm thử ATTT cho ứng dụng Web.
Trong phần tiếp theo của chƣơng, mục 2.2. sẽ tổng hợp các nguy cơ về lỗi
ATTT, mục 2.3 trình bày các ca kiểm thử đƣợc xây dựng theo phƣơng pháp này.
2.2. Tổng hợp nguy cơ về ATTT cho ứng dụng web
Phần này tổng hợp những vấn đề có thể dẫn đến mất ATTT đối với ứng dụng
web. Mỗi vấn đề đƣợc trình bày gồm 3 phần: mô tả vấn đề, nguy cơ mất ATTT của
vấn đề và cách phòng chống.
R1. Tương tác với cơ sở dữ liệu tránh lỗ hổng SQL Injection
Mô tả: Dữ liệu đầu vào từ ngƣời dùng phải đƣợc truyền dƣới dạng tham số,
không đƣợc sử dụng cách cộng xâu trong các truy vấn tới cơ sở dữ liệu.
Nguy cơ: Khi truy vấn tới cơ sở dữ liệu, lập trình viên thƣờng sử dụng cách
cộng xâu dữ liệu đầu vào từ ngƣời dùng, các câu truy vấn này có thể bị mắc lỗi SQL
Injection hoặc HQL Injection (nếu sử dụng Hibernate). Bằng việc lợi dụng các lỗi này,
kẻ tấn công có thể xem, thêm, sửa, xóa dữ liệu trong database từ đó chiếm đƣợc tài
khoản admin, lấy cắp thông tin ngƣời dùng...
Phòng chống: Để phòng chống các nguy cơ này, truy vấn SQL phải dùng
PrepareStatement, tất cả tham số phải đƣợc add bằng hàm (setParam), không đƣợc xử
dụng cách cộng xâu trong truy vấn. Với truy vấn HQL, tất cả tham số phải đƣợc add
bằng hàm (setParam), không đƣợc xử dụng cách cộng xâu trong truy vấn [8].
R2. Xử lý dữ liệu đầu vào tránh lỗ hổng XSS
10
- Xem thêm -