BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
ĐỒ ÁN TỐT NGHIỆP
PHƯƠNG PHÁP ĐẢM BẢO AN TOÀN THEO KỸ NGHỆ
HƯỚNG U CẦU TRONG PHÁT TRIỂN WEB
Ngành: An tồn thơng tin
Mã số: 7.48.02.02
Sinh viên thực hiện:
Ứng Đình Hướng
Lớp: AT11C
Người hướng dẫn:
TS. Phạm Văn Hưởng
Khoa Công nghệ thông tin – Học viện Kỹ thuật mật mã
Hà Nội, 2019
BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
ĐỒ ÁN TỐT NGHIỆP
PHƯƠNG PHÁP ĐẢM BẢO AN TOÀN THEO KỸ NGHỆ
HƯỚNG U CẦU TRONG PHÁT TRIỂN WEB
Ngành: An tồn thơng tin
Mã số: 7.48.02.02
Sinh viên thực hiện:
Ứng Đình Hướng
Lớp: AT11C
Người hướng dẫn:
TS. Phạm Văn Hưởng
Khoa Công nghệ thông tin – Học viện Kỹ thuật mật mã
2
2
Hà Nội, 2019
3
3
MỤC LỤC
4
4
DANH MỤC TỪ VIẾT TẮT
Từ viết tắt
ATTT
CNTT
CSDL
CSRF
HĐH
LAN
MVC
ORM
OWASP
PDO
SDLC
VPN
WAN
WDLC
XSS
Tiếng anh
Tiếng việt/mô tả
An tồn thơng tin
Cơng nghệ thơng tin
Cơ sở dữ liệu
Lỗ hổng bảo mật
Hệ điều hành
Mạng máy tính cục bộ
Cross-site Request Forgery
Local Area Network
Model – view – controller
Object Relational Mapping
Kỹ thuật chuyển đổi dữ liệu
giữa các hệ thống khác
Open Web Application Security Một tổ chức phi lợi nhuận
Project
PHP Data Objects
Lớp truy xuất cơ sở dữ liệu
Software Development Life Quy trình phát triển phần
Cycle
mềm
Virtual Private Network
Mạng dành riêng
Wide Area Network
Mạng diện rộng WAN
Web development life cycle
Vòng đời phát triển web
Cross-Site Scripting
Lỗ hổng bảo mật
5
5
DANH MỤC CÁC HÌNH VẼ
6
6
DANH MỤC CÁC BẢNG
7
7
LỜI CẢM ƠN
Trong quá trình nghiên cứu và làm đồ án. Em xin gửi lời cảm ơn chân thành
và sự tri ân sâu sắc đối với các thầy cô của trường Học viện Kỹ thuật Mật mã và
đặc biệt là thầy giáo hướng dẫn TS. Phạm Văn Hưởng đã nhiệt tình hướng dẫn
chỉ bảo em trong quá trình thực hiện đề tài.
Những góp ý, định hướng của các thầy, cơ và các bạn đã giúp cho em nâng
cao được trình độ hiểu biết chuyên môn và cải thiện những kiến thức mà em cịn
thiếu. Để từ đó em có thể vận dụng hoàn thành đồ án tốt nghiệp này.
Mặc dù đã cố gắng hoàn thành đồ án trong phạm vi và khả năng cho phép
nhưng chắc chắn sẽ không tránh khỏi những thiết sót. Em rất mong nhận được sự
thơng cảm, góp ý của q thầy cơ và các bạn để đồ án được chỉnh sửa và hoàn
thiện.
Hà Nội, ngày
tháng 06 năm 2019
Sinh viên thực hiện
Ứng Đình Hướng
8
8
LỜI NĨI ĐẦU
Với sự phát triển mạnh của ngành cơng nghệ, nhu cầu sử dụng máy tính và
truy cập internet tăng lên từng ngày. Trong thời đại ngày nay internet đã trở nên rất
quen thuộc và là một công cụ hữu ích để truyền tải và quảng bá thơng tin, thực
hiện các hoạt động kinh doanh, mua bán và quản lý. Tất cả đã kéo theo sự phát
triển không ngừng của các ứng dụng web. Và dần khái niệm ứng dụng web đã trở
nên phổ biến. Kéo theo đó là các cuộc tấn công ứng dụng web cũng phát triển hết
sức phức tạp và ngày càng tăng lên.
Điều này đã đặt ra vấn để cấp thiết cần làm như thế nào để bảo đảm an tồn
thơng tin cho ứng dụng web, thông tin của người sử dụng. Các khái niệm chuyên
môn và tấn công về ứng dụng web cũng dần trở nên phổ biến hơn trong tài liệu
chuyên ngành. Các cơng cụ hỗ trợ người lập trình web, người quản trị mạng cũng
xuất hiện nhiều giúp tìm kiếm lỗ hổng ứng dụng web nhưng nó khơng theo kịp sự
phát triển nhanh đến mức chóng mặt theo xu hướng nhanh hơn đẹp hơn của các
ứng dụng web, và nó khơng thể ngăn chặn hồn tồn. Các cuộc tấn cơng ngày càng
đa dạng và được khai thác triệt để những lỗi của ứng dụng web, của người quản trị,
hay người lập trình.
Thống kê cho thấy 75% cuộc tấn công internet là tấn cơng ứng dụng web
[1], nó gây ra những thiệt hại vơ cùng to lớn, vì vậy việc tìm hiểu về tấn cơng ứng
dụng web là rất cần thiết nhằm có cách phòng chống và bảo mật ứng dụng web
hiệu quả trở thành một yêu cầu cấp thiết.
Do đây là một xu thế tất yếu của thời đại, nên việc tìm hiểu và nghiên cứu về
ứng dụng web sẽ giúp ích rất nhiều cho các nhà lập trình web mới, hay các quản trị
viên mới cịn ít kinh nghiệm trong việc quản trị hệ thống mạng của mình, phịng
tránh, khắc phục những lỗ hổng đó.
Đồ án này nhằm mục đích giới thiệu rõ hơn về ứng dụng web, xây dựng quy
trình phát triển web theo kỹ nghệ hướng yêu cầu và áp dụng vào xây dựng một
website an toàn. Để thực hiện các nội dung trên, luận văn được tổ chức thành các
chương sau:
CHƯƠNG 1: TỔNG QUAN VỀ AN TOÀN ỨNG DỤNG WEB
Nội dung chương này khái quát về khái niệm ứng dụng web, tìm hiểu nguy
cơ gây mất an tồn và tìm hiểu một số lỗ hổng ứng dụng web phổ biến và cách
khắc phục, phịng tránh. Từ đó xác định ra những yếu tố đảm bảo một ứng dụng
9
9
web an tồn và đánh giá nó. Từ những kiến thức cơ bản này sẽ áp dụng để xây
dựng quy trình phát triển ứng dụng web an tồn.
CHƯƠNG 2: ĐẢM BẢO AN TOÀN TRONG PHÁT TRIỂN WEB THEO
KỸ NGHỆ HƯỚNG YÊU CẦU
Nội dung chương tìm hiểu về quy trình phát triển web theo kỹ nghệ hướng
yêu cầu thông thường sau đó nghiên cứu áp dụng các yêu cầu bảo mật theo từng
giai đoạn dựa theo quy trình phát triển ứng dụng web.
CHƯƠNG 3: THỰC NGHIỆM XÂY DỰNG VÀ ĐẢM BẢO AN TOÀN
ỨNG DỤNG WEB THEO KỸ NGHỆ HƯỚNG YÊU CẦU
Chương này mô tả cách triển khai được áp dụng từ quá trình nghiên cứu ở
Chương 2 để phát triển một ứng dụng web an toàn nhỏ, đáp ứng được các yêu cầu
bảo mật cơ bản theo từng giai đoạn.
10
10
CHƯƠNG 1: TỔNG QUAN VỀ AN TOÀN ỨNG DỤNG WEB
1.1. Khái niệm và mơ hình hoạt động ứng dụng web
1.1.1. Khái niệm
Ứng dụng web là một phần mềm ứng dụng nền tảng web để chạy các phần
mềm theo mong muốn và nhu cầu của người sử dụng. Thông qua ứng dụng web
người dùng có thể thực hiện được một số cơng việc như: chia sẻ hình ảnh, mua
sắm, phần mềm quản lý,… thơng qua các tác vụ internet.
Hình 1.1. Q trình hoạt động ứng dụng web
Quá trình hoạt động ứng dụng web được mình hoạ như trên Hình 1.1 bắt đầu
với yêu cầu được tạo ra từ người dùng trên trình duyệt, gửi qua Internet tới máy
chủ ứng dụng web. Ứng dụng truy cập cơ sở dữ liệu để thực hiện nhiệm vụ được
yêu cầu: cập nhật, truy vấn thông tin đang nằm trong cơ sở dữ liệu. Sau đó ứng
dụng web gửi thông tin lại cho người dùng qua trình duyệt.
1.1.2. Mơ hình hoạt động
Tùy thuộc vào số máy chủ và cơ sở dữ liệu được sử dụng cho ứng dụng web,
mơ hình ứng dụng web có thể hoạt động theo 3 cách sau:
a. Một máy chủ web, một cơ sở dữ liệu
Đây là mơ hình ứng dụng web đơn giản nhất nhưng có nhiều rủi ro nhất. Mơ
hình như vậy chỉ sử dụng một máy chủ và một cơ sở dữ liệu duy nhất. Nếu máy
chủ ngừng hoạt động, ứng dụng web cũng vậy. Mơ hình đơn giản như vậy có thể
phù hợp với một số dự án thử nghiệm hoặc cá nhân.
Mơ hình này thường khơng được sử dụng cho các ứng dụng web thực tiễn
với quy mơ lớn. Nó chủ yếu được sử dụng để chạy các dự án thử nghiệm, dự án
nhỏ, tìm hiểu và hiểu các nguyên tắc cơ bản của ứng dụng web.
b. Nhiều máy chủ web, một cơ sở dữ liệu
Để mở rộng máy chủ web theo chiều ngang, cần phải chạy cơ sở dữ liệu trên
một máy chủ web riêng biệt. Khi máy chủ web lấy thông tin từ máy khách sẽ xử lý
tương tự và sau đó ghi vào cơ sở dữ liệu được quản lý bên ngoài máy chủ. Điều
11
11
này cịn được gọi là “kiến trúc khơng trạng thái (stateless architecture)”. Kiến trúc
không trạng thái là thiết kế không lưu dữ liệu của client trên server, chỉ phụ thuộc
vào các tham số đầu vào được cung cấp. Có nghĩa là sau khi client gửi dữ liệu lên
server, server thực thi xong, trả kết quả thì “quan hệ” giữa client và server bị “cắt
đứt” server không lưu bất cứ dữ liệu gì của client.
Ngay cả khi một trong các máy chủ web ngừng hoạt động, một máy chủ
khác sẽ chịu trách nhiệm. Tất cả các yêu cầu được thực hiện sẽ được chuyển hướng
tự động đến máy chủ mới và ứng dụng web sẽ tiếp tục thực hiện. Do đó, độ tin cậy
tốt hơn so với máy chủ đơn với mơ hình cơ sở dữ liệu vốn có. Tuy nhiên, nếu cơ sở
dữ liệu bị treo, toàn bộ hệ thống cũng sẽ tê liệt.
c. Nhiều máy chủ web, nhiều cơ sở dữ liệu
Đây là mơ hình ứng dụng web hiệu quả nhất. Có hai lựa chọn cho loại mơ
hình này. Lưu trữ dữ liệu giống nhau trong tất cả các cơ sở dữ liệu được sử dụng
hoặc phân phối dữ liệu đồng đều giữa chúng. Trong trường hợp đầu tiên, thường
không cần nhiều hơn 2 cơ sở dữ liệu; khi một cái bị hỏng, cái kia có thể thay thế nó
và khơng bị mất. Vì dữ liệu khơng được sao chép trong trường hợp thứ hai, một số
dữ liệu có thể tạm thời không khả dụng nếu một trong nhiều cơ sở dữ liệu gặp sự
cố.
Tuy nhiên, mơ hình này vẫn được coi là mơ hình hiệu quả nhất: cả máy chủ
web và cơ sở dữ liệu vẫn có thể hoạt động nếu 1 trong số máy chủ hoặc cơ sở dữ
liệu khác gặp lỗi. Nếu quy mô lớn hơn 5 máy chủ web hoặc cơ sở dữ liệu nên cài
đặt bộ cân bằng tải.
1.2. Nguy cơ mất an toàn ứng dụng web
Với những tiến bộ trong công nghệ web cùng với sự phát triển ngành công
nghiệp công nghệ thông tin, các ứng dụng web đang dần trở nên phổ biến. Mặc dù
chúng có thể mang lại nhiều lợi ích và giải pháp nhưng đi kèm với đó là một số
mối đe dọa bảo mật ứng dụng web. Chúng có thể gây rủi ro rất lớn tới cơ sở hạ
tầng công nghệ thông tin của tổ chức nếu không được xử lý đúng cách. Sự phát
triển nhanh chóng trong việc triển khai ứng dụng web đã tạo ra các cơ sở hạ tầng
phân tán, phức tạp hơn và khó bảo mật hơn.
Trong hơn một thập kỷ, các tổ chức chỉ phụ thuộc vào các biện pháp bảo mật
ở vùng mạng như tường lửa để bảo vệ cơ sở hạ tầng. Tuy nhiên, hiện nay ngày
càng có nhiều cuộc tấn cơng nhằm vào các lỗ hổng bảo mật trong thiết kế ứng
12
12
dụng web, chẳng hạn như lỗi tiêm chích. Cách bảo vệ an ninh mạng truyền thống
không đủ để bảo vệ các mối đe dọa này. Những mối đe dọa bắt nguồn từ các điểm
truy cập máy khách không đáng tin cậy, các giao thức khơng có phiên, lỗi thời, độ
phức tạp chung của các công nghệ web và sự không an tồn của lớp mạng.
Với các ứng dụng web phía máy khách thường khơng được kiểm sốt chặt
chẽ bởi người sở hữu. Do đó, đầu vào từ máy khách thường không được tin cậy và
xử lý trực tiếp. Kẻ tấn cơng có thể giả mạo danh tính như một người dùng hợp
pháp, sao chép danh tính hoặc tạo các tin nhắn và cookie lừa đảo. Ngoài ra, HTTP
là một giao thức khơng có phiên, và do đó dễ bị phát lại và tấn cơng tiêm chích,
chặn bắt. Nội dung có thể dễ dàng bị sửa đổi và giả mạo.
Năm 2019 đã có rất nhiều sự thay đổi về bảo mật ứng dụng web, số lượng
tăng hơn nhiều so với năm 2018. Do sự phát triển của công nghệ web, một số lỗ
hổng mới ở mức độ nguy hiểm cũng đã xuất hiện nhiều hơn. Trong đó, XSS (Cross
Site Scripting) vẫn là lỗ hổng phổ biến và nguy hiểm nhất trên thế giới, càng nhiều
website xây dựng trên javascript khiến lỗ hổng XSS càng trở lên phổ biến. Việc
cập nhật các lỗ hổng bảo mật này liên tục rất tốn thời gian và chi phí. Nên sử dụng
một nền tảng cơ bản để triển khai các giải pháp bảo mật như: Giám sát, antivirus,
quét lỗ hổng và tường lửa và cập nhật các bản vá… với ứng dụng web là những xu
hướng cần thiết để vận hành một website an toàn và liên tục.
1.2.1. Rò rỉ dữ liệu
Trong năm 2018, xuất hiện nhiều cuộc tấn công mạng nhằm vào các hệ
thống và trang web của nhiều tập đoàn lớn liên tục xuất hiện, đây sẽ là một phần
bối cảnh an ninh mạng trong năm 2019. Rất nhiều cơng ty, tập đồn nối tiếng trên
thế giới và cả các cơ quan chính phủ như Facebook, Google… đã phải chịu những
vi phạm an ninh mạng đáng kể về dữ liệu.
a. Bê bối dữ liệu Cambridge Analytica của Facebook
Việc thông tin tài khoản của 87 triệu người dùng Facebook được sử dụng
nhằm tác động đến kết quả bầu cử tổng thống là tâm điểm của mọi bản tin an tồn
thơng tin. CEO của Facebook, Mark Zuckerberg đã phải điều trần trước Thượng
viện – Hạ viện Mỹ và nghị viện Châu Âu [2].
b. Google+ đóng cửa vì rị rỉ dữ liệu người dùng
Khơng lâu sau bê bối của Facebook, thông tin về việc lộ dữ liệu của 500.000
người dùng Google+ bị công bố. Google buộc phải đóng cửa vĩnh viễn mạng xã
hội này [3].
13
13
14
14
c. FIFA lộ 70 triệu tài liệu và 3,4 terabyte dữ liệu
Tài liệu này được công bố bởi Football Leaks và chứa nhiều thông tin về các
hành vi tham nhũng trong bóng đá. Lượng dữ liệu rị rỉ này đã vượt qua cả vụ Tài
liệu Panama, vốn được coi là vụ lộ lọt dữ liệu lớn nhất thế giới [4].
1.2.2. Bùng nổ mã độc
a. Mã độc đào tiền ảo bùng nổ
Mã độc đào tiền ảo phát tán qua Facebook đang quay trở lại với tốc độ bùng
phát theo cấp số nhân nhờ vào khả năng đăng bài trên các nhóm (group) có đơng
người tham gia.
Đến nay đã có 45.000 máy tính [5] là nạn nhân của dịng mã độc này. Khơng
chỉ chiếm quyền điều khiển máy tính nạn nhân, nó cịn có khả năng kiểm sốt trình
duyệt của người dùng, từ đó update thêm các mã độc khác nhằm chiếm đoạt các
loại mật khẩu, tài khoản ngân hàng.
b. Mã độc trên di động tăng nhanh
Mỗi ngày, 24.000 ứng dụng độc hại [4] bị chặn trước khi được tung ra. Số
chủng loại malware đã tăng 54% trong riêng năm 2018. Số lượng người sử dụng
thiết bị di động ngày một tăng và tính phân mảnh của hệ điều hành Android càng
thúc đẩy sự phổ biến của loại malware này.
c. Tăng cường bảo mật mạng
Google Chrome cảnh báo các website khơng có HTTPS là “Không bảo
mật”. Giao thức HTTPS đã vượt HTTP và được sử dụng bởi hơn một nửa số
website trên tồn thế giới. Trình duyệt đã đưa ra cảnh báo về tính bảo mật của giao
thức HTTP đơn thuần và có các hình thức ưu tiên cho giao thức an tồn HTTPS.
1.2.3. Sử dụng trí tuệ nhân tạo
Trong năm 2019, AI có thể sẽ trở thành chìa khóa của cuộc tấn công mạng
[6]. Những kẻ tấn công sẽ khai thác hệ thống trí tuệ nhân tạo (AI) để hỗ trợ các
cuộc tấn công, các doanh nghiệp sẽ ngày càng lệ thuộc vào AI để chống lại các
cuộc tấn công và xác định các lỗ hổng bảo mật.
Đối với an ninh mạng của các tổ chức, doanh nghiệp
Bảo mật sử dụng học máy để phát hiện các mối đe dọa mới.
Khám phá và sửa các lỗ hổng mới trước khi kẻ tấn cơng tìm thấy chúng.
Mơ phỏng các cuộc tấn cơng mạng nâng cao.
Có thể giúp bảo vệ bảo mật và quyền riêng tư kỹ thuật số cá nhân, ví dụ:
Cảnh báo người dùng để bật xác thực 2 yếu tố khi thiết lập địa chỉ email
15
15
mới. Cảnh báo về rủi ro bảo mật tiềm ẩn và sự đánh đổi khi chấp nhận
cung cấp thông tin cá nhân khi đăng ký một số dịch vụ miễn phí.
Đối với những kẻ tấn cơng
Phá hủy hệ thống doanh nghiệp dựa trên AI tự động.
Tăng cường hoạt động tội phạm để thăm dò các mạng và dò quét các lỗ
hổng mới
Tự động tạo ra các kỹ nghệ xã hội cực kỳ tinh vi với việc làm âm thanh
giả rất thật, video giả, v.v.
Có thể tạo bộ công cụ hỗ trợ AI để dễ cá nhân hóa, tiết kiệm chi phí và
khả năng tiếp cận với tội phạm nhỏ.
1.2.4. Phát triển và áp dụng 5G sẽ bắt đầu mở rộng
Đi kèm với sự phát triển của công nghệ 5G là những mối đe dọa ngày càng
tăng cao.
Nhiều thiết bị IoT 5G sẽ kết nối với mạng 5G, khiến chúng dễ bị tấn
công hơn.
Đối với người dùng gia đình, sẽ khó khăn hơn để giám sát tất cả các thiết
bị IoT.
Sự phụ thuộc trực tiếp hơn vào lưu trữ dựa trên đám mây sẽ lộ ra các
mối hiểm hoạ mới.
1.2.5. Sử dụng các thiết bị IoT để tấn công DDoS
Các thiết bị IoT tại nhà đang trở nên phổ biến hơn, nhiều khả năng sẽ có
những nỗ lực trong tương lai để vũ khí hóa chúng do mạng lưới này cịn q mới.
Thiếu sót trong những biện pháp kiểm soát an ninh cơ bản đã biến các thiết bị IoT
thành mục tiêu dễ tấn công đối với tội phạm mạng và những kẻ tấn công khác.
1.2.6. Tấn công nhắm vào việc truyền dữ liệu
Cả người tiêu dùng và doanh nghiệp sẽ trở thành mục tiêu của hacker.
Đối với người tiêu dùng:
Tấn công các thiết bị IoT cho việc đào tiền ảo
Trộm các thơng tin ngân hàng
Đánh cắp số thẻ tín dụng
Hiển thị trang web giả mạo
Đối với doanh nghiệp:
Tấn công các trang web thương mại điện tử
Tấn công các nhà cung cấp bên thứ 3
16
16
Formjacking attacks
Phần mềm độc hại ảnh hưởng đến bộ định tuyến và mạng
Formjacking attacks là thuật ngữ mô tả việc sử dụng mã JavaScript độc hại
để đánh cắp chi tiết thẻ tín dụng và thơng tin khác từ các hình thức thanh tốn trên
các trang web thương mại điện tử. Formjacking không phải là một kỹ thuật mới,
nhưng các vụ tấn cơng gần đây có quy mơ lớn, tinh vi và tăng lên đáng kể từ giữa
tháng 8 năm 2018 [7].
1.3. Một số lỗ hổng bảo mật web phổ biến
1.3.1. Tấn công XSS
Khái niệm
Cross-Site Scripting (XSS) tạm dịch là kịch bản liên trang, là một trong
những kĩ thuật tấn cơng phổ biến nhất hiện nay, đồng thời nó cũng là một trong
những vấn đề bảo mật quan trọng đối với các nhà phát triển web và cả những
người sử dụng web. Bất kì một website nào cho phép người sử dụng đăng thơng tin
mà khơng có sự kiểm tra chặt chẽ các đoạn mã nguy hiểm thì đều có thể tiềm ẩn
các lỗi XSS.
Lỗi này xảy ra khi ứng dụng web thu nhận các dữ liệu nguy hiểm được nhập
từ hacker. Họ có thể thơng qua lỗi này để chèn code vào site hay link để lấy các
thông tin quan trọng từ nạn nhân. Các thơng tin có thể lấy và thực hiện như:
Cookie, Keylogging, Phishing, …
Phòng chống XSS
Đối với các dữ liệu của người dùng chỉ nên:
Chỉ chấp nhận những dữ liệu hợp lệ.
Từ chối nhận các dữ liệu hỏng.
Liên tục kiểm tra và thanh lọc dữ liệu.
Encode dưới dạng HTML các ký tự đặc biệt do client gửi đến bao gồm: <, >,
&, ’, ”, / trong các trường hợp:
Dữ liệu client gửi lên máy chủ
Dữ liệu lấy ra từ database khi trả về cho client
1.3.2. Tấn công CSRF
17
17
Khái niệm
Cross Site Request Forgery (CSRF) là kỹ thuật tấn công bằng cách sử dụng
quyền chứng thực của người dùng đối với một website. Kỹ thuật này tấn công vào
người dùng, dựa vào đó hacker có thể thực thi những thao tác phải yêu cầu sự
chứng thực. Đây là kỹ thuật tấn công dựa vào mượn quyền trái phép.
Hacker sử dụng phương pháp CSRF để lừa trình duyệt của người dùng gửi
đi các câu lệnh HTTP đến các ứng dụng web. Trong trường hợp phiên làm việc của
người dùng chưa hết hiệu lực thì các câu lệnh trên sẽ được thực hiện với quyền
chứng thực của người sử dụng.
Phòng chống CSRF
Hạn chế thời gian tồn tại của session.
Sử dụng GET và POST đúng cách. Dùng GET nếu thao tác là truy vấn
dữ liệu. Dùng POST nếu các thao tác tạo ra sự thay đổi hệ thống. Nếu
ứng dụng theo chuẩn RESTful, có thể dùng thêm các HTTP verbs, như
PATCH, PUT hay DELETE.
Sử dụng token: Tạo ra một token tương ứng với mỗi form, token này sẽ
là duy nhất đối với mỗi form và thường thì hàm tạo ra token này sẽ nhận
đối số là "SESSION" hoặc được lưu thông tin trong SESSION, chèn
thêm token vào đường link thực hiện thao tác. Khi nhận lệnh HTTP
POST về, hệ thống sẽ thực hiên so khớp giá trị token này để quyết định
có thực hiện hay khơng. Mục đích của token là làm cho hacker khơng
thể xác định được chính xác đường link thực hiện thao tác.
Chèn bước xác nhận trung gian trước những thao tác nhạy cảm: ví dụ
như sử dụng captcha, các thông báo xác nhận, yêu cầu nhập lại password
hoặc sử dụng thêm OTP (One-time password) hay chứng thư số để xác
nhận lại các giao dịch.
Sử dụng cookie riêng biệt cho trang quản trị: Một cookie khơng thể dùng
chung cho các domain khác nhau, chính vì vậy việc sử dụng
"admin.site.com" thay vì sử dụng "site.com/admin" an toàn hơn.
Kiểm tra REFERRER: Kiểm tra xem các câu lệnh HTTP gửi đến hệ
thống xuất phát từ đâu. Một ứng dụng web có thể hạn chế chỉ thực hiện
các lệnh HTTP gửi đến từ các trang đã được chứng thực. Tuy nhiên cách
làm này có nhiều hạn chế và không thật sự hiệu quả.
18
18
Kiểm tra IP: Một số hệ thống quan trọng chỉ cho truy cập từ những IP
được thiết lập sẵn.
1.3.3. Tấn công SQL Injection
Khái niệm
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
của việc kiểm tra dữ liệu đầu vào 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 (DBMS - Data Base Management System) trả về để inject
(tiêm vào) và thi hành các câu lệnh SQL một cách trái phép.
SQL Injection có thể cho phép những kẻ tấn công thực hiện các thao tác như
delete, insert,... trên cơ sở dữ liệu của ứng dụng, thậm chí là của server mà ứng
dụng đó đang chạy. Lỗi SQL Injection thường xảy ra trên các ứng dụng web có dữ
liệu được quản lý bằng DBMS như SQL Server, MySQL, Oracle, DB2…
Phòng chống SQL Injection
Lọc dữ liệu từ người dùng: Cách phòng chống này tương tự như XSS. Sử
dụng filter để lọc các kí tự đặc biệt (; ” ‘) hoặc các từ khoá (SELECT,
UNION) do người dùng nhập vào. Nên sử dụng thư viện/function được
cung cấp bởi framework.
Không cộng chuỗi để tạo SQL: Sử dụng parameter thay vì cộng chuỗi.
Nếu dữ liệu truyền vào khơng hợp lệ, SQL Engine sẽ tự động báo lỗi.
Không hiển thị exception, thông báo lỗi rõ ràng: Hacker dựa vào thơng
báo lỗi để tìm ra cấu trúc database. Khi có lỗi, chỉ hiện thơng báo lỗi
chung và khơng nên hiển thị đầy đủ thông tin về lỗi, tránh hacker lợi
dụng.
Phân quyền rõ ràng trong cơ sở dữ liệu: Nếu chỉ truy cập dữ liệu từ một
số bảng, hãy tạo một account trong DB, gán quyền truy cập cho account
đó khơng dùng account root hay sa. Lúc này, dù hacker có inject được sql
cũng khơng thể đọc dữ liệu từ các bảng chính, sửa hay xố dữ liệu.
Sao lưu dữ liệu thường xuyên: Dữ liệu phải thường xuyên được backup
để nếu dữ liệu xố hoặc hỏng thì vẫn có thể khơi phục được.
1.3.4. Tấn cơng từ chối dịch vụ
Khái niệm
Tấn cơng từ chối dịch vụ (hay cịn gọi là DoS - Denial of Service) là một
trong những thủ đoạn nhằm ngăn cản những người dùng hợp pháp khả năng truy
19
19
cập và sử dụng vào một dịch vụ nào đó. DoS có thể làm ngưng hoạt động của một
máy chủ, một mạng nội bộ thậm chí cả một hệ thống mạng rất lớn. Về bản chất
thực sự của DoS, kẻ tấn công sẽ chiếm dụng một lượng lớn tài nguyên mạng như
băng thông, bộ nhớ... và làm mất khả năng xử lý các yêu cầu dịch vụ từ người
dùng hợp lệ.
Phịng chống tấn cơng từ chối dịch vụ
Giảm Timeout cho Server.
Giới hạn số kết nối đến Server cho mỗi IP
Cấu hình firewall để giới hạn số kết nối đến cổng 80 trên mỗi IP.
Sử dụng dịch vụ chống tấn công DoS từ các công ty cung cấp giải pháp.
Thực hiện cân bằng tải (load balancer), mạng phân phối nội dung (CDN)
kết hợp cả hai hoặc 1 trong 2.
Quét mạng thường xuyên và theo dõi lưu lượng với các cảnh báo cũng có
thể giúp nắm bắt được những nguy cơ của một cuộc tấn công DoS sớm,
cũng như đưa ra những hành động để giảm thiểu thiệt hại.
1.3.5. Một số tấn công khác
Tấn công Path Traversal
Path Traversal, hay Directory Traversal là kỹ thuật tấn công nhằm vào việc
truy cập tới các file, thư mục nằm ngồi thư mục chính của web server. Tấn cơng
này cịn được biết đến với các tên gọi khác như: dot dot slash (../), directory
climbing, backtracking. Điểm yếu cho phép thực hiện tấn công này là sự kém hiệu
quả trong việc kiểm tra, chuẩn hoá tên file mà người dùng yêu cầu trong truy vấn
HTTP, khiến cho kí hiệu “thư mục cha” (../) được chấp nhận.
Tấn công Content Spoofing
Tấn công giả mạo nội dung (Content Spoofing, hay còn gọi là tấn công giả
mạo dữ liệu): đây là dạng tấn công tương tự như XSS, nhưng thay vì chèn mã kịch
bản thì kẻ tấn công thực hiện chèn/sửa nội dung của webpage (phần mà người
dùng nhìn thấy trên màn hình) bị thay đổi so với nội dung gốc. Sự thay đổi này có
thể rất nguy hiểm.
1.4. Những yếu tố đảm bảo an toàn ứng dụng web
20
20
Ứng dụng web khơng thể tự thân nó hoạt động, mà chỉ có thể hoạt động trên
một mơi trường nhất định. Tính an tồn của ứng dụng web khơng chỉ phụ thuộc
vào bản thân nó mà cịn được quyết định bởi mơi trường mà nó hoạt động. Theo
mặc định nó được xây dựng để hoạt động qua mạng. Do vậy, tính an tồn của ứng
dụng web phụ thuộc một phần vào tính chất kết nối mạng. Web client và web
server có thể giao tiếp với nhau qua mạng cục bộ (LAN), qua mạng diện rộng
(WAN) hay qua mạng dùng chung; kết nối mạng có thể là kết nối mở hay kết nối
mạng riêng ảo (VPN). Tùy thuộc vào tính chất của kết nối mà tính an tồn của ứng
dụng web có thể bị đe dọa bởi các tấn cơng: tấn công chặn bắt trên đường truyền,
tấn công xuyên tạc dữ liệu, tấn công xen vào (hay tấn công kẻ ở giữa), tấn công từ
chối dịch vụ.
Ứng dụng web, dù ở phía server hay phía client, phải hoạt động trong mơi
trường của một hệ điều hành nào đó. Nếu hệ điều hành có những lỗ hổng bảo mật
cho phép kẻ tấn công thâm nhập vào hệ thống các dữ liệu mà ứng dụng web bảo vệ
có thể bị lộ, bị sửa chữa hoặc bị phá hủy. Ở phía client, dữ liệu đó có thể là cookie
được lưu trữ dài hạn. Ở phía server, dữ liệu đó là bản thân mã nguồn của ứng dụng
web, các tài khoản được ứng dụng web sử dụng để truy cập cơ sở dữ liệu hay các
dịch vụ khác, thông tin về người dùng và các tài ngun khác của website.
Mặc dù hồn tồn có thể viết được ứng dụng web (phía server) tương tác
trực tiếp với hệ điều hành, nhưng thường thì ứng dụng web hoạt động thơng qua
một web server nào đó như IIS, Apache. Khi đó, tính an tồn của ứng dụng web sẽ
phụ thuộc vào tính an tồn của web server.
Ngày nay việc xây dựng ứng dụng web lập trình CGI (Common Gateway
Interface - Giao diện cổng nối chung) hay ISAPI (Internet Server Application
Programming Interface – Giao diện lập trình ứng dụng máy chủ internet) và
NSAPI (Netscape Server Application Programming Interface - Giao diện lập trình
ứng dụng máy chủ Netscape) đã khơng còn được ưa chuộng; đa phần ứng dụng
web trên Internet được xây dựng bằng PHP và ASP/ASP.NET. Các ứng dụng web
viết bằng PHP hay ASP/ASP.NET không tương tác trực tiếp với web server mà
thông qua một ứng dụng trung gian, tạm gọi là bộ thông dịch (interpretor). Nhờ các
bộ thông dịch khác nhau mà một ứng dụng web (ví dụ viết bằng PHP) có thể làm
việc với các web server khác nhau (ví dụ Apache Và IIS) mà khơng cần thay đổi
mã nguồn. Bản thân PHP và ASP/ASP.NET cũng cung cấp cho các nhà phát triển
web những hỗ trợ đáng kể trong triển khai các chức năng an toàn, đặc biệt là chức
21
21
năng lọc dữ liệu người dùng. Và khi đó, tính an tồn của ứng dụng web lại phụ
thuộc vào tính an toàn của ứng dụng trung gian trên đây.
Ngoài ra, ứng dụng web phải sử dụng dữ liệu từ các nguồn khác nhau (từ cơ
sở dữ liệu, từ hệ thống tập tin, từ các website khác...) để thực hiện các chức năng
theo thiết kế. Tính an tồn của các nguồn dữ liệu trên đây phụ thuộc vào tính an
tồn của hệ thống quản lý chúng. Bên cạnh đó, bản thân các dữ liệu cũng có thể
tiềm ẩn những hiểm họa an toàn đối với ứng dụng web sử dụng dữ liệu.
Như vậy, xét về tổng thể tính an tồn của ứng dụng web phụ thuộc vào các
thành phần có liên quan trong môi trường mà ứng dụng web hoạt động. Để đảm
bảo an toàn ứng dụng web, cần phải đảm bảo an tồn cả từ phía các thành phần
này.
1.5. Đánh giá an tồn ứng dụng web
Thực tế rất khó để có thể tạo được những website khơng có lỗ hổng bảo mật.
Khi phát triển website, cần xác định các hiểm họa an tồn, từ đó đề ra các cơ chế
để chống lại các hiểm họa đó. Tuy nhiên, các cơ chế an tồn khơng phải bao giờ
cũng được xây dựng một cách hồn hảo.
Tổ chức phịng thủ ở các thiết bị mạng không chỉ giúp ngăn chặn mã độc
xâm nhập vào mạng bằng cách khai thác thông tin và lỗ hổng, mà còn giúp chủ
động ngăn cản những truy cập trái phép và không phù hợp vào hệ thống. Tuy
nhiên, điều này không giúp các ứng dụng web tránh khỏi các cuộc tấn cơng, tin tặc
có thể tấn cơng vào ứng dụng trước khi thực hiện tấn công vào hệ thống.
Do vậy, cần có phương pháp kiểm tra, đánh giá các nguy cơ bảo mật cơ bản
trên ứng dụng. OWASP (Open Web Application Security Project) được thực hiện
với mục tiêu đó.
Đánh giá điểm yếu ATTT trên ứng dụng Web
Quy trình đánh giá sử dụng phương thức theo chuẩn OWASP bao gồm các
tháo tác chính sau:
Thu thập thơng tin.
Đánh giá cấu hình
Đánh giá quản lý định danh
Đánh giá quá trình xác thực
Đánh giá quá trình phân quyền
Đánh giá quản lý phiên
Đánh giá quá trình kiểm tra dữ liệu đầu vào
22
22
Đánh giá độ an tồn của mã hóa
Đánh giá hoạt động nghiệp vụ
Tấn công, thâm nhập thử hệ thống dựa trên các điểm yếu tìm kiếm được từ
các cơng cụ cũng như q trình tìm kiếm thủ cơng.
Thực hiện đánh giá trên các ứng dụng web phổ biến: ASP, ASP.NET, PHP,
JSP,…
Thực hiện đánh giá trên các mã nguồn nền tảng ứng dụng phổ biến: Drupal,
Joomla, Dot Net Nuke,…
Thực hiện đánh giá thủ công với sự hỗ trợ bởi các cơng cụ hàng đầu trong
tìm kiếm, phát hiện điểm yếu ứng dụng web: HP WebInspect, IBM AppScan,
Acunetix Web Vulnerability Scanner.
Lập báo cáo, phân tích chi tiết điểm yếu: mức độ nguy hiểm, tác động tới hệ
thống.
Báo cáo theo chuẩn: PCI DSS (Payment Card Industry Data Security
Standard - chuẩn an ninh thông tin bắt buộc dành cho các doanh nghiệp lưu trữ,
truyền tải và xử lý thẻ thanh toán),…
Đưa ra khuyến nghị khắc phục điểm yếu.
1.6. Tổng kết chương
Nội dung chương này trình bày tổng quan về ứng dụng web, các lỗ hổng và
vấn đề an toàn. Bao gồm các mơ hình hoạt động, các nguy cơ mất an tồn hiện nay.
Các hệ lỗ hổng phổ biến có từ lâu nhưng vẫn tồn tại cho đến nay kèm theo một số
lỗ hổng mới. Ngồi ra, trong chương cịn tìm hiểu thêm về những yếu tố đảm bảo
an toàn trong ứng dụng web và cách đánh giá một ứng dụng web có đạt chuẩn, đủ
tiêu chuẩn an tồn bảo mật hay không.
23
23
CHƯƠNG 2: ĐẢM BẢO AN TOÀN TRONG PHÁT TRIỂN WEB
THEO KỸ NGHỆ HƯỚNG YÊU CẦU
2.1. Quy trình phát triển web theo kỹ nghệ hướng yêu cầu
Phát triển trang web là một q trình tồn diện bao gồm các bước thiết yếu
cần phải được tn theo. Nhưng cũng khơng có một số bước cụ thể vì nó có thể
thay đổi tùy thuộc vào khách hàng hoặc nhà phát triển, cơ bản quy trình khá giống
nhau.
Hình 2.1. Quy trình phát triển ứng dụng web
Quy trình phát triển ứng dụng web được thể hiện bao gồm các bước cần thiết
như Hình 2.1 được thực hiện từ đầu đến cuối để hoàn thành một dự án. Nó phân
chia và phân loại cơng việc cụ thể, sau đó chia các phần thành nhiệm vụ, tài
nguyên có thể được sử dụng làm bản hướng dẫn cho mỗi dự án.
Có rất nhiều bước trong quy trình thiết kế và phát triển trang web. Từ việc
thu thập thông tin ban đầu, đến việc tạo trang web và cuối cùng là bảo trì để giữ
cho trang web ln cập nhật.
Q trình chính xác sẽ thay đổi một chút từ thiết kế đến phát triển, nhưng
những bước cơ bản bao gồm:
Thu thập thông tin và xác định yêu cầu
Lập kế hoạch
Thiết kế
Phát triển
Kiểm tra
24
24
Triển khai và bảo trì
2.1.1. Thu thập thơng tin và xác định yêu cầu
Cũng giống như bất kỳ dự án nào khác, bước đầu tiên của việc phát triển
một trang web là thu thập tất cả các thông tin cần thiết. Tất cả các yêu cầu cần phải
làm rõ khi bắt đầu dự án nếu khơng tồn bộ dự án có thể đi sai hướng.
Tất cả các thơng tin liên quan thu thập từ khách hàng mục đích tạo ra sản
phẩm theo mong đợi của họ. Bất kỳ vấn đề nào trong gia đoạn này cũng phải được
giải quyết ngay vì nó quyết định các bước tiếp theo sẽ như thế nào.
Giai đoạn này sẽ xác định các mục tiêu chính. Khi thu thập thơng tin, cần
nghiên cứu mọi thứ để hiểu rõ về các yêu cầu, mục tiêu của ứng dụng web. Theo
cách này sẽ dễ dàng hơn trong việc phát triển, lên kế hoạch phù hợp để phát triển
ứng dụng web. Sau khi thu thập yêu cầu hồn tất, tiếp theo là lập kế hoạch, phân
tích để kiểm tra tính khả thi của dự án.
2.1.2. Lập kế hoạch
Sử dụng thông tin được thu thập từ giai đoạn một kết hợp lập kế hoạch cho
phát triển trang web. Đây là lúc tạo ra sơ đồ trang web.
Sơ đồ trang web là danh sách tất cả các lĩnh vực chủ đề chính của trang web,
cũng như các chủ đề phụ (nếu có). Điều này phục vụ như một hướng dẫn về nội
dung sẽ có trên trang web, và cần thiết để phát triển một hệ thống điều hướng nhất
quán, dễ hiểu.
Chức năng của ứng dụng web phụ thuộc vào đối tượng mục tiêu. Từ đó sử
dụng các cơng nghệ phù hợp với mục đích. Nếu thực hiện chính xác giai đoạn này
có thể tiết kiệm chi phí cho các tài nguyên bổ sung như thêm hoặc thay đổi chức
năng. Vì vậy, lập kế hoạch phù hợp rất quan trọng, giúp thu thập thông tin dễ dàng
hơn rất nhiều. Đây là lúc xác định mục đích và mục tiêu chính của ứng dụng web
đang xây dựng, các kế hoạch trong tương lai cũng như đối tượng mục tiêu hướng
tới.
Khi kế hoạch phát triển ứng dụng web được mô tả kỹ lưỡng và chi tiết, sẽ
giúp tránh khỏi các tài nguyên bị lãng phí trong tương lai do các sự cố khơng mong
muốn như thay đổi thiết kế, thêm tính năng khác khơng có trước đó.
2.1.3. Phân tích, thiết kế
Phân tích là một tập hợp các hoạt động trong đó các nhà phân tích thu thập
các u cầu thơng tin của người dùng, phân tích chúng một cách có hệ thống dưới
25
25