lOMoARcPSD| 58647650
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Khoa Công nghệ Thông tin 2
---------------------------------------
AN TOÀN ỨNG DỤNG WEB VÀ CƠ SỞ DỮ LIỆU
ĐỒ ÁN MÔN HỌC
Xây dựng website nghe nhạc có sử dụng các biện pháp bảo mật website & cơ sở dữ
liệu
Giảng viên: ThS Phan Nghĩa Hiệp
Sinh viên thực hiện: Võ Tiến Đạt – N19DCAT016
Trần Việt Hoàng – N19DCAT033
Hoàng Anh Nhàn – N19DCAT056
Nguyễn Cao Phong – N19DCAT060
Đoàn Hồng Tiến – N19DCAT072
Lớp: D19CQAT01-N
TP. HỒ CHÍ MINH - 2022
lOMoARcPSD| 58647650
2
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
Giảng viên hướng dẫn
(Ký và ghi rõ họ tên)
LỜI CẢM ƠN
Đầu tiên, chúng em xin gửi lời cảm ơn chân thành đến trường PTITHCM đã đưa môn An
toàn ứng dụng web và sở dữ liệu vào trương trình giảng dạy. Bên cạnh đó để thực hiện
hoàn thành tốt đồ án này, chúng em cũng nhận được sự giúp đỡ hướng dẫn rất tận
tình của các thầy cô thuộc khoa Công Nghệ Thông Tin 2. Các thầy cô thuộc bộ môn chuyên
ngành đã cung cấp cho chúng em các thông tin, kiến thức cùng quý báu cần thiết
trong suốt thời gian qua để chúng em thể thực hiện và hoàn thành đồ án của mình. Đặc
biệt, chúng em xin gửi lời cảm ơn sâu sắc đến giảng viên bộ môn - Thầy Ths. Phan Nghĩa
lOMoARcPSD| 58647650
3
Hiệp - người đã trực tiếp hướng dẫn chúng em trong suốt thời gian học tập và thực hiện đồ
án vừa qua.
Trong thời gian tham gia lớp học An toàn ứng dụng web và cơ sở dữ liệu của thầy, chúng
em đã có thêm cho mình nhiều kiến thức bích, tinh thần học tập hiệu quả, nghiêm túc.
Đây chắc chắn sẽ là những kiến thức quý báu,hành trang để chúng em có thể vững bước
sau này. Bộ môn An toàn ứng dụng web và cơ sở dữ liệu là môn học thú vị, vô cùng bổ ích
và có tính thực tế cao. Đảm bảo cung cấp đủ kiến thức, gắn liền với nhu cầu thực tiễn của
sinh viên.
Tuy nhiên, do vốn kiến thức còn nhiều hạn chế khả năng tiếp thu thực tế còn nhiều
bỡ ngỡ. Mặc dù chúng em đã cố gắng hết sức nhưng chắc chắn bài báo cáo khó có thể tránh
khỏi những thiếu sót nhiều chỗ còn chưa chính xác. Kính mong thầy thông cảm, xem
xét và góp ý để bài báo cáo của chúng em được hoàn thiện hơn.
Chúng em xin chân thành cảm ơn!
MỤC LỤC
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN........................................................2
LỜI CẢM ƠN................................................................................................................3
MỤC LỤC.....................................................................................................................4
DANH MỤC HÌNH ẢNH.............................................................................................6
LỜI GIỚI THIỆU..........................................................................................................7
CHƯƠNG 1. BẢO MẬT ỨNG DỤNG VÀ MÁY CHỦ WEB.....................................8
1.1 XSS..................................................................................................................8
1.2 CSRF..............................................................................................................12
1.3 SQL Injection.................................................................................................13
1.4 Tấn công các cơ chế xác thực.........................................................................19
1.5 Các lỗ hổng trong cấu hình máy chủ web.......................................................20
CHƯƠNG 2. BẢO MẬT CƠ SỞ DỮ LIỆU...............................................................23
2.1 Mật khẩu yếu hoặc mặc định..........................................................................23
2.2 SQL Injection.................................................................................................24
2.3 Đặc quyền quá mức cho người dùng hoặc nhóm người dùng.........................25
2.4 Cho phép các tính năng không sử dụng trong DBMS.....................................26
2.5 Leo thang đặc quyền (Privilege Escalation)...................................................26
2.6 Denial of Service............................................................................................27
2.7 Không mã hóa dữ liệu....................................................................................28
CHƯƠNG 3. THỰC NGHIỆM...................................................................................30
3.1 XSS................................................................................................................30
lOMoARcPSD| 58647650
4
3.2 CSRF..............................................................................................................32
3.3 SQL Injection.................................................................................................33
3.4 Tấn công các cơ chế xác thực.........................................................................34
3.5 Các lỗ hổng trong cấu hình máy chủ web.......................................................34
3.6 Mật khẩu yếu hoặc mặc định..........................................................................34
3.7 Đặc quyền quá mức cho người dùng hoặc nhóm người dùng.........................34
3.8 Cho phép các tính năng không sử dụng trong DBMS.....................................35
3.9 Leo thang đặc quyền.......................................................................................35
3.10 Denial of Service............................................................................................35
3.11 Không mã hóa dữ liệu....................................................................................35
CHƯƠNG 4. TỔNG KẾT...........................................................................................36
TÀI LIỆU THAM KHẢO...........................................................................................37
BẢNG PHÂN CÔNG CÔNG VIỆC...........................................................................38
lOMoARcPSD| 58647650
5
DANH MỤC HÌNH ẢNH
Hình 1.1: Chèn script vào thanh search ........................................................................... 8
Hình 1.2: Chèn script độc hại ở các ô input .................................................................... 9
Hình 1.3: Script độc hại được render ra giao diện người dùng ....................................... 9
Hình 1.4: Script code trong source code ......................................................................... 9
Hình 1.5: Form search ..................................................................................................... 9
Hình 1.6: URL form search ............................................................................................. 9
Hình 1.7: Lấy giá trị của query search .......................................................................... 10
Hình 1.8: Alert xuất hiện ............................................................................................... 10
Hình 1.9: Đoạn code sử dụng method POST ................................................................ 11
Hình 1.10: Form code dùng để tiến hành tấn công CSRF............................................. 11
Hình 1.11: Tham số truyền vào của form ...................................................................... 12
Hình 1.12: Mục favourite của user ................................................................................ 13
Hình 1.13: Query get tất cả album với mode = public .................................................. 13
Hình 1.14: Form đăng nhập ........................................................................................... 13
Hình 1.15: Sử dụng tool BurpSuite (Repeater) ............................................................. 14
Hình 1.16: Tab Repeater ................................................................................................ 15
Hình 1.17: Tab Intruder ................................................................................................. 15
Hình 1.18: Ký tự khi chạy brute force ........................................................................... 16
Hình 1.19: Chế độ Sniper .............................................................................................. 16
Hình 1.20: Tab Payloads ................................................................................................ 16
Hình 1.21: Kết quả brute force ...................................................................................... 17
Hình 1.22: Tài khoản ngầm định trên một số máy chủ web ......................................... 19
Hình 1.23: Trang phpinfo.php dùng cho quản trị cho phép đọc thông tin cấu hình ..... 20
Hình 1.24: Nội dung một thư mục của website được liệt kê ......................................... 20
Hình 2.1: Máy tấn công quét các máy có trong mạng LAN ......................................... 22
Hình 2.2 Kẻ tấn công dò ra được port của MySQL ...................................................... 22
Hình 2.3: Kẻ tấn công tìm ra được user và password ................................................... 22
Hình 3.1: File tag_black_list ......................................................................................... 28
Hình 3.2: File attributes_black_list ............................................................................... 28
Hình 3.3: Kết quả từ tìm kiếm trong ô Search hiện ra .................................................. 29
Hình 3.4: HTML thymeleaf “th:text” mặc định value đó luôn là text .......................... 29
Hình 3.5: Source HTML ............................................................................................... 29
Hình 3.6: Cấu hình để ngăn chặn XSS .......................................................................... 29
Hình 3.7: Form code của tin tặc dùng để tiến hành tấn công CSRF ............................. 30
Hình 3.8: Người dùng mở form từ link của hacker và truyền tham số ......................... 30
Hình 3.9: Kết quả website từ chối request truyền tham số từ link bên ngoài ............... 30
Hình 3.10: Xác thực session đến từ chính máy của client ............................................ 30
LỜI GIỚI THIỆU
Trong thời đại ngày nay, Internet đã trở nên quen thuộc và là một công cụ hữu ích phục vụ
các hoạt động, nhu cầu sống của tất cả mọi người, đặc biệt là nhu cầu giải trí trong đó
nghe nhạc chiếm một phần không nhỏ. Nắm bắt được nhu cầu này, nhóm đã lên ý tưởng và
lOMoARcPSD| 58647650
6
đưa ra kế hoạch thực hiện xây dựng một trang web nghe nhạc. Trong quá trình phát triển
ứng dụng web nghe nhạc, nhóm đã nhận thấy những vấn đề nguy hiểm đe dọa đến sở
dữ liệu cũng như ứng dụng web nghe nhạc. Điều này đã đặt ra vấn đề cấp thiết cần làm như
thế nào để bảo đảm an toàn thông tin cho ứng dụng web và thông tin người sử dụng. Đồ án
này được thực hiện nhằm mục đích giới thiệu hơn về những mối nguy đến ứng dụng
web, máy chủ web sở dữ liệu, từ đó đưa ra cách phòng chống cũng như các phương
thức bảo mật cho ứng dụng web nghe nhạc.
Nội dung của đồ án môn học này được biên soạn thành 3 phần ứng với 3 chương. Phần I
Bảo mật ứng dụng máy chủ web, Phần II Bảo mật sở dữ liệu Phần III Thực
nghiệm trên ứng dụng web nghe nhạc. Nội dung tóm tắt các chương như sau:
Chương 1 Bảo mật ứng dụng máy chủ web giới thiệu khái quát về một số dạng tấn
công lên ứng dụng và máy chủ web mà nhóm đã lên kịch bản tấn công và đưa ra được cách
phòng chống như: tấn công XSS, tấn công CSRF, SQL Injection, tấn công c chế xác
thực và các lỗ hổng trong cấu hình máy chủ web.
Chương 2 Bảo mật sở dữ liệu khái quát các mối nguy hại tới cơ sở dữ liệu như: mật
khẩu yếu hoặc mặc định, SQL Injection, đặc quyền quá mức cho người dùng hoặc nhóm
người dùng, cho phép các tính năng không sử dụng trong DBMS, leo thang đặc quyền, tấn
công từ chối dịch vụ (denial of service) không hóa dữ liệu. Bên cạnh đó chương cũng
đề cập tới các kịch bản tấn công và phương pháp phòng chống những nguy cơ trên.
Chương 3 Thực nghiệm trình bày về mô hình triển khai ứng dụng web nghe nhạc và các
kết quả thành công trong việc ngăn chặn những yếu tố nguy hại đã kể ở trên.
Bài báo cáo được biên soạn dựa trên những kiến thức được học từ môn An toàn Ứng dụng
Web sở dữ liệu một số môn học liên quan trong suốt quá trình học tập của nhóm
tác giả tại Học viện Công nghệ Bưu chính Viễn thông. Trong quá trình biên soạn triển
khai hình, mặc dù nhóm tác giả đã rất cố gắng song không thể tránh khỏi những thiếu
sót. Nhóm mong rằng sẽ nhận được ý kiến phản hồi và góp ý, cũng như ý kiến về cập nhật,
hoàn thiện đồ án.
1 CHƯƠNG 1. BẢO MẬT ỨNG DỤNG VÀ MÁY CHỦ WEB
1.1 XSS
1.1.1. Khái quát
Tấn công Cross-Site Scriting (XSS script liên site, liên miền) một
trong các dạng tấn công phổ biến nhất vào các ứng dụng web. XSS xuất hiện từ khi
trình duyệt bắt đầu hỗ trợ ngôn ngữ JavaScript (ban đầu được gọi là LiveScript
trên trình duyệt Netscape). tấn công XSS được nhúng trong trang web chạy trong
lòng trình duyệt với quyền truy nhập của người dùng, có thể truy nhập các thông tin
nhạy cảm của người dụng lưu trong trình duyệt. Do XSS chạy trong lòng trình
duyệt n miễn nhiễm với c trình quét các phần mềm độc hại các công cụ
bảo vệ hệ thống.
XSS thể được xem một dạng của chèn HTML (HTML Injection).
Trên thực tế, thể thực hiện tấn công bằng chèn HTML không cần
JavaScript và cũng không cần liên site, hoặc liên miền. Kẻ tấn công khai thác các lỗ
hổng bảo mật để chèn mã XSS vào trang web, trong đó dữ liệu web (như tên và địa
lOMoARcPSD| 58647650
7
chỉ email) (cú pháp các phần tử như <script>) của XSS được trộn lẫn vào
mã gốc của trang web.
Tấn công XSS thường xuất hiện khi trang web cho phép người dùng nhập dữ
liệu và sau đó hiển thị dữ liệu lên trang. Kẻ tấn công có thể khéo léo chèn mã script
vào trang và mã script của kẻ tấn công được thực hiện khi người dùng khác thăm lại
trang web đó. Tùy theo mục đích mức độ tinh vi, XSS thể cho phép kẻ tấn
công thực hiện các thao tác sau trên hệ thống nạn nhân: - Đánh cắp thông tin nhạy
cảm của người dùng lưu trong Cookie của trình duyệt
- Giả mạo hộp đối thoại đăng nhập để đánh cắp mật khẩu
- Bắt phím từ người dùng để đánh cắp thông tin về tài khoản
ngânhàng, email, thông tin đăng nhập các dịch vụ trả tiền, ... - Sử dụng
trình duyệt để quét các cổng dịch vụ trong mạng LAN - Lén lút cấu hình lại
bộ định tuyến nội bộ để bỏ qua tường lửa của mạng nội b
- Tự động thêm người ng ngẫu nhiên vào tài khoản mạng xã hội- Tạo
môi trường cho tấn công CSRF.
Nhìn chung, tấn công HTML/XSS thể được chèn vào mọi vị trí trong
địa chỉ (URI) và nội dung trang web. Các vị trí cụ thể có thể chèn mã:
- Các thành phần của URI (URI Components)
- Các trường nhập liệu (Form Fields) - HTTP Request Header & Cookie
- JavaScript Object Notation (JSON)
- Các thuộc tính của DOM (Document Object Model)
- CSS (Cascade Style Sheet)
- Các nội dung do người dùng tạo ra
thể chia tấn công XSS thành 3 loại chính: Stored XSS (XSS lưu trữ),
Reflected XSS (XSS phản chiếu) DOM-based/Local XSS (XSS dựa trên DOM
hoặc cục bộ).
Stored XSS:Stored XSS thường được nhúng vào trong nội dung của trang
web và được lưu trữ trong cơ sở dữ liệu của website. Các website có nguy cao bị tấn
công Stored XSS là các diễn đàn cho phép người dùng đăng các bài viết và gửi các
phản hồi, các website thương mại điện tử cho phép người dùng thêm nhận xét
(comment) về sản phẩm, hoặc các mạng xã hội, các ứng dụng nhắn tin cho phép gửi
tin nhắn qua các trang web. Kẻ tấn công khéo léo nhúng mã script vào các đoạn văn
bản, hình ảnh, ... sử dụng các thẻ HTML.
Reflected XSS: Tấn công Reflected XSS thường xuất hiện khi dữ liệu do người
dùng cung cấp được sử dụng bởi script trên máy chủ để tạo ra kết quả và hiển thị lại
ngay cho người dùng. Dạng tấn công XSS này thường xuất hiện trên các máy tìm
kiếm, hoặc các trang tính năng tìm kiếm, trong đó XSS được nhập vào ô t
khóa tìm kiếm, hoặc vào chuỗi truy vấn trong địa chỉ URL được thực hiện khi
trình duyệt tải kết quả tìm kiếm.
DOM-based XSS: Tấn công DOMBased XSS liên quan đến việc các script
máy khách trong một trang web sử dụng các đối tượng, hoặc các thuộc tính của đối
tượng của cây DOM, như "document.URL" và
lOMoARcPSD| 58647650
8
"document.location". Lỗ hổng cho phép tấn công DOM-based XSS có thể xuất hiện
trong trường hợp các script sử dụng các đối tượng DOM để ghi HTML
không mã hóa các thẻ HTML đúng cách. Điều này là có thể do mã HTML được ghi
ra lại được trình duyệt thực hiện và nội dung của chúng có thể chứa các script khác.
Một dạng tấn công XSS khác dựa trên DOM liên quan đến việc sử dụng các trang
web trên hệ thống file cục bộ của người dùng. Trong đó, lỗi XSS cho phép mã script
xa của kẻ tấn công được thực hiện với quyền của người dùng cục bộ. Đây còn được
gọi là tấn công liên vùng (cross-zone 36 attack). Các bước điển hình được thực hiện
trong tấn công DOM-based XSS tương tự như các bước được thực hiện trong tấn
công Reflected XSS.
1.1.2. Kịch bản tấn công
Reflected Cross-site scripting:
Tiến hành tiêm các đoạn mã vào ô tìm kiếm của ứng dụng.
<script> alert(‘Hacked")</script>
<a href=”javascript:alert(1)”>Hacked</a> vào các ô input đầu
vào ở ô tìm kiếm.
Hình 1.1: Chèn script vào thanh search
Trong trường hợp này phía server không có một sự kiểm tra nào cho giá trị
đầu vào này mà chèn ngay lập tức vào response thì đây là điều kiện cho các
attackers khai thác lỗ hổng Reflected XSS.
Stored cross-site scripting:
Ứng dụng có chức năng thêm mới bài hát.
Ta tiến hành Thêm thông tin bài hát. tuy nhiên đây ta cố tình chèn vào các
đoạn script độc hại, script này sẽ được lưu trực tiếp xuống Database. Và tất nhiên là
nội dung này sẽ được render ra một giao diện nào đó. Đến khi ai đó một tác
động (click) vào nội dung đó thì lập tức script sẽ được thực thi.
lOMoARcPSD| 58647650
9
Hình 1.2: Chèn script độc hại ở các ô input
Hình 1.3: Script độc hại được render ra giao diện người dùng
DOM-based cross-site scripting:
Chức năng tìm kiếm của ứng dụng
Ta nhấn tổ hợp phím Ctrl+U: phát hiện có một đoạn script nhỏ bên dưới.
Hình 1.4: Script code trong source code
Hình 1.5: Form search
Ta thấy form search với method là GET, do đó người dùng submit search thì
value sẽ hiện trên URL như sau:
Hình 1.6: URL form search
URLSearchParams là một Object, object này định nghĩa các methods để làm
có thể xử lý với query string trên URL. Cụ thể như sau:
lOMoARcPSD| 58647650
10
Hình 1.7: Lấy giá trị của query search
Sau khi get ra được giá trị từ ô search, ta thử thêm một malicious code để khai
thác XSS (DOM based).
<img src="1" onerror=alert("Hacked")>
Hình 1.8: Alert xuất hiện
Ứng dụng đã bị lỗi hổng XSS (DOM based), Từ đó Attackers thể tiếp tục
khai thác và lấy ra các thông tin quan trọng như cookie của người dùng…vv
1.1.3. Phòng chống
Sử dụng một blacklist các tags và attributes không được phép nhập vào. Khi
mà đầu vào của người dùng chứa các ký tự nằm trong blacklist được khai báo như
trên sẽ bị từ đối request và trả về một message lỗi.
Tuy nhiên, việc khai báo ra các tags, attributes này là thủ công và ta không
thể lường trước được các trường hợp. Attacker có thể brute force để tìm ra các tags
cũng như attributes có thể nhập mã độc vào thì hắn có thể khai thác được Reflected
XSS.
Sử dụng các framework và các thư viện có sẵn sẽ đặt hiệu quả cao hơn.
1.2 CSRF
1.2.1. Khái quát
CSRF (Cross-Site Request Forgery) dạng tấn công bẫy nạn nhân tải một
trang web có chứa yêu cầu độc hại. Tấn công CSRF sử dụng thông tin nhận dạng
quyền truy nhập của nạn nhân để thực hiện các thao tác không mong muốn thay mặt
họ, như thay đổi địa chỉ email, thay đổi địa chỉ nhà, thực hiện giao dịch mua bán, ...
CSRF hoạt động bằng cách gửi các yêu cầu độc hại đến cho người dùng nạn
nhân nhằm đánh cắp các thông tin cá nhân, quyền truy cập và dữ liệu nhạy cảm. Hầu
hết các trang web không thể xác định các yêu cầu là giả mạo hay thực khi có người
dùng đang được xác thực.
CSRF tấn công trực tiếp vào các trạng thái trên máy chủ như thay đổi địa chỉ
IP hoặc mật khẩu của nạn nhân. Đầu tiên, kẻ tấn công sẽ yêu cầu nạn nhân đăng nhập
lOMoARcPSD| 58647650
11
vào tài khoản chúng đang kiểm soát để bổ sung các thông tin như thẻ tín dụng,
tài khoản ngân hàng hay địa chỉ nhà. Sau đó, chúng sẽ tiến hành lấy các dữ liệu
nhân vừa thu thập được để đăng nhập tài khoản trên ứng dụng web.
Lỗ hổng lưu trữ CSRF là các cuộc tấn công có sẵn trên các trang web bảo mật
kém được thực hiện bằng thẻ IMG/IFRAME trong môi trường HTML. Bởi vì CSRF
được lưu trữ trên trang web nên nó có thể đem đến nhiều mối nguy hại như các cuộc
tấn công sẽ được kích hoạt và mở rộng bất cứ lúc nào.
CSRF còn được gọi bằng một số tên khác như XSRF, Sea Surf, Session
Riding, Cross-Site Reference Forgery Hostile Linking. Microsoft coi CSRF
một cuộc tấn công nhấp chuột có thể đe dọa đến nhiều tài liệu quan trọng.
1.2.2. Kịch bản tấn công
Giả thiết trang web tồn tại lỗi cho phép tấn công CSRF:
Đoạn code này sử dụng để ghi tên bài hát và tên ca sĩ vào cơ sở dữ liệu
Gồm có hai tham số truyền vào có “name” lần lượt là “album_name”,
“singer_name”
Hình 1.9: Đoạn code sử dụng method POST
Đoạn code method post có thể dẫn đến CSRF
Hình 1.10: Form code dùng để tiến hành tấn công CSRF
Kẻ tấn công tạo ra một đường link giả mạo chức năng nhập name album
name singer nhằm thay đổi giá trị 2 biến album_name singer_name của
website trong hình 1.9
lOMoARcPSD| 58647650
12
Hình 1.11: Tham số truyền vào của form
Khi request này được gửi lên cùng tham số đó sẽ lưu lại vào cơ sở dữ liệu của
website.
1.2.3. Phòng chống
- Nâng cao ý thức bảo mật của user, không ấn vào các đường link lạ.
- Sử dụng các framework, thư viện chuẩn có phòng chống CSRF
- Với mỗi request gửi lên đều được kiểm tra session phải từ chính y client
gửi hay không
1.3 SQL Injection
1.3.1. Khái quát
Tấn công chèn SQL (SQL Injection) một kỹ thuật cho phép kẻ tấn công
chèn SQL vào dữ liệu gửi đến máy chủ cuối cùng được thực hiện trên máy
chủ sở dữ liệu. Tùy vào mức độ tinh vi, tấn công chèn SQL có thể cho phép
kẻ tấn công (1) vượt qua các khâu xác thực người dùng, (2) chèn, sửa đổi, hoặc xóa
dữ liệu, (3) đánh cắp các thông tin trong sở dữ liệu và (4) chiếm quyền điều khiển
hệ thống máy chủ sở dữ liệu. Tấn công chèn SQL dạng tấn công thường
gặp ở các ứng dụng web, các trang web có kết nối đến cơ sở dữ liệu.
2 nguyên nhân của lỗ hổng trong ứng dụng cho phép thực hiện tấn công
chèn mã SQL:
- Dữ liệu đầu vào từ người dùng hoặc từ các nguồn khác không đượckiểm tra
hoặc kiểm tra không kỹ lưỡng;
- Sử dụng các câu lệnh SQL động trong ứng dụng, trong đó thao tácnối dữ
liệu người dùng với mã lệnh SQL gốc.
1.3.2. Kịch bản tấn công
rất nhiều thuật để thực hiện tấn công SQL injection trong các tình
huống khác nhau thì các kĩ thuật này có thể thay đổi:
- Retrieving hidden data: can thiệp vào query tới database để lấy thêm dữ liệu
ẩn
- Bypass login: sử dụng SQL injection để qua mặt cơ chế authentication.
- SQL injection union attack: sử dụng union trong sql để lấy dữ liệu table
khác.
- Examining the database: Lấy dữ liệu về version của database.
- Blind SQL injection: Dữ liệu từ SQL query không được trả về theo ứng dụng
web. Đây một thuật khó hơn phức tạp hơn nhiều để thực hiện so với
4 kỹ thuật trên.
Retrieving hidden data:
Giả sử trên ứng dụng chức năng show toàn bộ albums, playlists, sound trang
home
lOMoARcPSD| 58647650
13
Hình 1.12: Mục favourite của user
Với một điều kiện toàn bộ album, playlist, sound với một trường mode=public. Vì
mặc định sẽ không được hiển thị những album, playlist, sound ở mode=private.
Query như sau:
Hình 1.13: Query get tất cả album với mode = public
Gửi query lên server:
Như đã biết “--” là bắt đầu cho comment trong SQL, do đó toàn bộ phần
mode=’public’ sẽ xem như bị bỏ đi trong SQL query này. Mà “1=1” là điều kiện
luôn luôn đúng, do đó câu query này liệt kê toàn bộ giá trị có trong bảng. Như vậy
attacker đã có thể lấy được tất cả dữ liệu kể cả mode=’private’.
Bypass login:
Hình 1.14: Form đăng nhập
Khi mà người dùng nhập username và password sau đó bấm Login thì ngay lập tức
một SQL query được thực hiện:
Thay đổi giá trị username hoặc password bằng cách thêm --”, comment syntax
trong SQL:
Như vậy and password=’password’ đã bị biến thành comment bị bỏ đi khi thực
hiện query.
SQL injection union attack
Mệnh đề UNION trong SQL dùng để kết hợp các kết quả của hai hay nhiều câu
lệnh SELECT lại với nhau mà không trả về bất kỳ hàng nào trùng. Attacker có thể
lợi dụng tính năng của UNION để thực hiện kết hợp các câu lệnh SELECT trên
nhiều bảng lại với nhau, từ đó trả về cho attacker nhiều thông tin cần thiết hơn.
lOMoARcPSD| 58647650
14
Để sử dụng mệnh đề UNION, mỗi câu lệnh SELECT phải thỏa:
Cùng số cột được chọn
Cùng kiểu dữ liệu
Như vậy, một điều tối quan trọng để có thể thực hiện được mệnh đề UNION đó là
các câu lệnh SELECT phải trả về các bảng có cùng số cột. Như vậy ta cần phải xác
định SQL query của web application thực hiện sẽ trả về bao nhiêu cột để áp dụng
mệnh đề UNION vào sao cho phù hợp. Để có thể đạt được mục đích này, ta có th
sử dụng ORDER
Ta lần lượt thay đổi để truy xuất ra số lượng cột trong Table
Thay đổi cho đến khi server hết báo lỗi thì dừng lại. và đó chính số cột mà Table
hiện có.
Ta sử dụng tool BurpSuite (Repeater):
Hình 1.15: Sử dụng tool BurpSuite (Repeater)
Blind SQL injection:
lOMoARcPSD| 58647650
15
Blind SQL injection được sử dụng khi ứng dụng web không bất cứ phản hồi
(error, message) được gửi về sau một lần request.
Do đó toàn bộ những cách tấn công, các thuật sử dụng UNION như đã trình bày
ở trên dường như không có tác dụng.
Ở chức năng login của ứng dụng. Ta tiến hành sử dụng query như sau: Note:
Thông thường ở những trang web thông account admin thường sẽ có
username là: admin,administrator,root… Ta tiến hành thử một vài trường hợp:
Query truy vấn:
Hình 1.16: Tab Repeater
Để tiến hành brute force ta tiến hành đẩy package đến tab Intruder (mục ta ta có
thể tự tay config các value để tiến hành brute force)
Hình 1.17: Tab Intruder
Ở đây ta nhận thấy các value của package đều nằm trong ký tự $. Đây là ký tự khi
chạy brute force thì các giá trị này sẽ được thay đổi và chèn vào các giá trị từ file
(chứa list key, giá trị) để brute force.
lOMoARcPSD| 58647650
16
Hình 1.18: Ký tự khi chạy brute force
Ở trường hợp này ta muốn tìm ra độ dài password, chỉ cần đặc bộ tải trọng bọc số
6. Chế độ brute force là Sniper (vì chỉ có 1 trọng tải cần brute force) Ngoài ra:
Hình 1.19: Chế độ Sniper
Chuyển sang tab payload:
Hình 1.20: Tab Payloads
mục Payload Options: Chính danh sách các giá trị sẽ được chèn vào bộ trọng
tải (ở số 6 lúc nãy). Nhấn Start attack
lOMoARcPSD| 58647650
17
Hình 1.21: Kết quả brute force
Đây là quá trình brute force. Sau khi brute force nếu nhận thấy một package nào
khác hoặc bất thường so với các gọi tin còn lại chẳng hạn (length, status…). Có thể
đó chính là giá trị mà chúng ta cần tìm
Trong trường hợp này nếu như server trả về một dòng lỗi (500 Internal Server
Error) ở Response. Attacker biết rằng query trên là hợp lệ và có thể dựa vào
Condition Error này để khai thác tiếp tục và tìm được độ dài của password. Tiếp
tục là tìm ra lần lượt các ký tự của password. Query truy vấn:
Attacker thể sử dụng hàm substring ng cụ BurpSuite (Intruder) thể tìm
lần lượt các ký tự của password.
1.3.3. Phòng chống
- Mã hóa (filter) các ký tự đầu vào có thể gây lỗi SQL Injection
- Sử dụng các framework, thư viện chuẩn phòng chống SQL Injection
1.4 Tấn công các cơ chế xác thực
1.4.1. Khái quát
Xác thực (authentication) trong một mức độ nào đó nhằm xác minh thông tin
nhận dạng của một cá nhân hoặc một thực thể. Trao quyền (authorization) xác định
các quyền truy nhập o các đối tượng, tài nguyên mà người dùng được cấp, sau khi
người dùng đã được xác thực. Tấn công vào các cơ chế xác thực (Authentication
attacks) các loại tấn công vào khâu xác thực thông tin định danh người dùng (User
authentication) và trao quyền cho người dùng (User authorization). Để phá được cơ
chế xác thực ứng dụng web, kẻ tấn công 2 lựa chọn: (1) Đánh cắp mật khẩu tài
lOMoARcPSD| 58647650
18
khoản người dùng và (2) Bỏ qua khâu xác thực người dùng. Cả 2 lựa chọn trên đều
được các tin tặc sử dụng trong từng điều kiện khác nhau trên các hệ thống khác nhau.
Các dạng tấn công vào các chế xác thực bao gồm các dạng sau: phát lại
chuỗi định danh phiên, vét cạn, nghe lén, khởi tạo lại mật khẩu XSS / SQL
Injection.
1.4.2. Kịch bản tấn công
Phát lại chuỗi định danh phiên: Giao thức HTTP không hỗ trợ phiên (session)
làm việc. Tuy nhiên, đa số các máy chủ hỗ trợ phiên làm việc bằng việc sử dụng
cookie để nhận dạng người dùng. Cookie một mẩu thông tin mà máy chủ web lưu
lên trình duyệt. Theo đó, cookie có thể lưu thông tin về phiên như chuỗi định danh
(ID) của phiên và các thông tin xác thực người dùng. Các phiên làm việc thể được
xác thực bằng 1 tên người dùng (username) một mật khẩu (password). Kẻ tấn
công thể đánh cắp thông tin xác thực giả danh người dùng để đăng nhập vào
hệ thống.
Vét cạn: Tấn công vét cạn (Brute force) sử dụng kiểu quét, hoặc thử tất cả các
trường hợp để tìm tên người dùng mật khẩu. Kẻ tấn công thể dựa vào các tín
hiệu phản hồi, hoặc báo lỗi của hệ thống để nhận biết dấu hiệu thành công hoặc thất
bại trong vét cạn m mật khẩu. Chẳng hạn, nếu báo lỗi "Invalid username and
password" nghĩa là username password đều sai, nếu báo lỗi "Invalid
password" thì chỉ password sai, còn username đã đúng. Kẻ tấn công cũng có thể dựa
vào thời gian xử lý để nhận biết: Nếu không tìm thấy username có nghĩa là thời gian
tìm kiếm thường dài hơn do phải quét hết 50 danh sách. Ngược lại, nếu tìm thấy
username thì thời gian tìm kiếm thường ngắn hơn do không phải quét hết danh sách
người dùng.
Nghe lén: Nghe lén (Sniffing) việc chặn bắt lưu ợng mạng truyền qua
card mạng hoặc các thiết bị mạng như router hoặc switch để phân tích lấy thông tin
nhạy cảm. Các mạng WLAN dễ bị nghe lén hơn do môi trường truyền tín hiệu qua
không khí. Lưu lượng HTTPthể dễ dàng bị nghe lén do không được mã hóa. Một
số công cụ, thư viện nghe lén điển hình, gồm: Tcpdump, Wireshark, Pcap/Wincap
và Firesheep plugin.
Khởi tạo lại mật khẩu: Khởi tạo lại mật khẩu (Password resetting) là kỹ thuật
khai thác điểm yếu trong tính năng khởi tạo lại mật khẩu cho người dùng hỗ trợ bởi
nhiều website. Một website thể 51 gửi mật khẩu dạng cho người dùng qua
email, hoặc cung cấp một chế xác thực bằng các câu hỏi an ninh thông tin
nhân. Website cũng có thể gửi 1 liên kết (link) vào hộp thư của người dùng cho phép
người dùng khởi tạo lại mật khẩu. Kẻ tấn ng thể nghe lén để đánh cắp các thông
tin xác thực phụ, hoặc mật khẩu nếu được gửi dưới dạng rõ. Hắn cũng thể nghe
lén để đánh cắp link cho phép khởi tạo lại mật khẩu thực hiện đổi mật khẩu của
người dùng.
XSS / SQL Injection: Ktấn công thể sử dụng tấn công XSS để đánh cắp
thông tin phiên làm việc, cookie chứa thông tin xác thực người dùng trên các website
tồn tại lỗi cho phép tấn công XSS. Tương tự, nếu website tồn tại lỗi chèn SQL,
lOMoARcPSD| 58647650
19
kẻ tấn công cũng thể sử dụng các kỹ thuật tấn công chèn SQL để đăng nhập
vào hệ thống không cần mật khẩu, hoặc thậm chí đăng nhập không cần tên truy
nhập và mật khẩu.
1.4.3. Phòng chống
- Sử dụng và lưu trữ mật khẩu dưới dạng mã hóa.
- Tạo mật khẩu có độ bảo mật cao, có các ký tự đặc biệt.
- Áp dụng các cách phòng chống các dạng tấn công khác như XSS,
SQLInjection, brute force, …
1.5 Các lỗ hổng trong cấu hình máy chủ web
1.5.1. Khái quát
Cấu hình máy chủ web thiết lập các tùy chọn cho phép điều khiển hoạt động
của máy chủ web, theo đó có ảnh hưởng đến tất cả các website chạy trên máy
chủ đó. Các điểm yếu, lỗ hổng trong cấu hình máy chủ web bao gồm: các tài
khoản quản trị ngầm định, các nội dung ngầm định, liệt kê nội dung thư mục
và các phương thức nguy hiểm.
Các tài khoản quản trị ngầm định
Hầu hết máy chủ web đều các tài khoản quản trị ngầm định với mật khẩu
yếu hoặc thậm chí không mật khẩu, đặc biệt với các phiên bản của
máy chủ web và hệ điều hành nền.
Hình 1.22: Tài khoản ngầm định trên một số máy chủ web
Các nội dung ngầm định
Nhiều phần máy chủ web được xuất xưởng m theo các nội dung ngầm định,
có thể là "đòn bẩy" giúp tin tặc tấn công máy chủ và các ứng dụng web. Một
số nội dung ngầm định có thể gây rủi ro cho hệ thống:
- Các tính năng gỡ rối và kiểm thử cho người quản trị.
- Các tính năng mẫu được thiết kế cho các công việc dùng chung.
- Một số tính năng đặc biệt được thiết kế dùng trong nội bộ, nhưng lại
vôtình để người ngoài có thể truy nhập.
lOMoARcPSD| 58647650
20
- Tài liệu hướng dẫn sử dụng, hoặc quản trị máy chủ web thể là
côngcụ hỗ trợ đắc lực cho tin tặc.
Hình 1.23: Trang phpinfo.php dùng cho quản trị cho phép đọc thông tin cấu
hình
Liệt kê nội dung thư mục
Hình 1.24: Nội dung một thư mục của website được liệt kê
Khi máy chủ web nhận được yêu cầu truy nhập là 1 thư mục, các hành động
sau có thể được thực hiện:
- Nếu trong thư mục tồn tại trang ngầm định (index.html,
default.htm, ...), trang ngầm định được gửi cho trình duyệt;
- Nếu trong thư mục không tồn tại trang ngầm định, máy chủ web có thể: +
Trả về thông báo lỗi 403 (cấm truy nhập) nếu không cho phép liệt
thư mục;
+ Trả vdanh sách các file trong tmục nếu cho phép liệt kê thư mục

Preview text:

lOMoAR cPSD| 58647650
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Khoa Công nghệ Thông tin 2
---------------------------------------
AN TOÀN ỨNG DỤNG WEB VÀ CƠ SỞ DỮ LIỆU ĐỒ ÁN MÔN HỌC
Xây dựng website nghe nhạc có sử dụng các biện pháp bảo mật website & cơ sở dữ liệu
Giảng viên: ThS Phan Nghĩa Hiệp
Sinh viên thực hiện: Võ Tiến Đạt – N19DCAT016
Trần Việt Hoàng – N19DCAT033
Hoàng Anh Nhàn – N19DCAT056
Nguyễn Cao Phong – N19DCAT060
Đoàn Hồng Tiến – N19DCAT072 Lớp: D19CQAT01-N
TP. HỒ CHÍ MINH - 2022 lOMoAR cPSD| 58647650 2
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
Giảng viên hướng dẫn
(Ký và ghi rõ họ tên) LỜI CẢM ƠN
Đầu tiên, chúng em xin gửi lời cảm ơn chân thành đến trường PTITHCM đã đưa môn An
toàn ứng dụng web và cơ sở dữ liệu
vào trương trình giảng dạy. Bên cạnh đó để thực hiện
và hoàn thành tốt đồ án này, chúng em cũng nhận được sự giúp đỡ và hướng dẫn rất tận
tình của các thầy cô thuộc khoa Công Nghệ Thông Tin 2. Các thầy cô thuộc bộ môn chuyên
ngành đã cung cấp cho chúng em các thông tin, kiến thức vô cùng quý báu và cần thiết
trong suốt thời gian qua để chúng em có thể thực hiện và hoàn thành đồ án của mình. Đặc
biệt, chúng em xin gửi lời cảm ơn sâu sắc đến giảng viên bộ môn - Thầy Ths. Phan Nghĩa lOMoAR cPSD| 58647650 3
Hiệp - người đã trực tiếp hướng dẫn chúng em trong suốt thời gian học tập và thực hiện đồ án vừa qua.
Trong thời gian tham gia lớp học An toàn ứng dụng web và cơ sở dữ liệu của thầy, chúng
em đã có thêm cho mình nhiều kiến thức bổ ích, tinh thần học tập hiệu quả, nghiêm túc.
Đây chắc chắn sẽ là những kiến thức quý báu, là hành trang để chúng em có thể vững bước
sau này. Bộ môn An toàn ứng dụng web và cơ sở dữ liệu là môn học thú vị, vô cùng bổ ích
và có tính thực tế cao. Đảm bảo cung cấp đủ kiến thức, gắn liền với nhu cầu thực tiễn của sinh viên.
Tuy nhiên, do vốn kiến thức còn nhiều hạn chế và khả năng tiếp thu thực tế còn nhiều
bỡ ngỡ. Mặc dù chúng em đã cố gắng hết sức nhưng chắc chắn bài báo cáo khó có thể tránh
khỏi những thiếu sót và nhiều chỗ còn chưa chính xác. Kính mong thầy thông cảm, xem
xét và góp ý để bài báo cáo của chúng em được hoàn thiện hơn.
Chúng em xin chân thành cảm ơn! MỤC LỤC
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN........................................................2
LỜI CẢM ƠN................................................................................................................3
MỤC LỤC.....................................................................................................................4
DANH MỤC HÌNH ẢNH.............................................................................................6
LỜI GIỚI THIỆU..........................................................................................................7
CHƯƠNG 1. BẢO MẬT ỨNG DỤNG VÀ MÁY CHỦ WEB.....................................8 1.1
XSS..................................................................................................................8 1.2
CSRF..............................................................................................................12 1.3
SQL Injection.................................................................................................13 1.4
Tấn công các cơ chế xác thực.........................................................................19 1.5
Các lỗ hổng trong cấu hình máy chủ web.......................................................20
CHƯƠNG 2. BẢO MẬT CƠ SỞ DỮ LIỆU...............................................................23 2.1
Mật khẩu yếu hoặc mặc định..........................................................................23 2.2
SQL Injection.................................................................................................24 2.3
Đặc quyền quá mức cho người dùng hoặc nhóm người dùng.........................25 2.4
Cho phép các tính năng không sử dụng trong DBMS.....................................26 2.5
Leo thang đặc quyền (Privilege Escalation)...................................................26 2.6
Denial of Service............................................................................................27 2.7
Không mã hóa dữ liệu....................................................................................28
CHƯƠNG 3. THỰC NGHIỆM...................................................................................30 3.1
XSS................................................................................................................30 lOMoAR cPSD| 58647650 4 3.2
CSRF..............................................................................................................32 3.3
SQL Injection.................................................................................................33 3.4
Tấn công các cơ chế xác thực.........................................................................34 3.5
Các lỗ hổng trong cấu hình máy chủ web.......................................................34 3.6
Mật khẩu yếu hoặc mặc định..........................................................................34 3.7
Đặc quyền quá mức cho người dùng hoặc nhóm người dùng.........................34 3.8
Cho phép các tính năng không sử dụng trong DBMS.....................................35 3.9
Leo thang đặc quyền.......................................................................................35 3.10
Denial of Service............................................................................................35 3.11
Không mã hóa dữ liệu....................................................................................35
CHƯƠNG 4. TỔNG KẾT...........................................................................................36
TÀI LIỆU THAM KHẢO...........................................................................................37
BẢNG PHÂN CÔNG CÔNG VIỆC...........................................................................38 lOMoAR cPSD| 58647650 5 DANH MỤC HÌNH ẢNH
Hình 1.1: Chèn script vào thanh search ........................................................................... 8
Hình 1.2: Chèn script độc hại ở các ô input .................................................................... 9
Hình 1.3: Script độc hại được render ra giao diện người dùng ....................................... 9
Hình 1.4: Script code trong source code ......................................................................... 9
Hình 1.5: Form search ..................................................................................................... 9
Hình 1.6: URL form search ............................................................................................. 9
Hình 1.7: Lấy giá trị của query search .......................................................................... 10
Hình 1.8: Alert xuất hiện ............................................................................................... 10
Hình 1.9: Đoạn code sử dụng method POST ................................................................ 11
Hình 1.10: Form code dùng để tiến hành tấn công CSRF............................................. 11
Hình 1.11: Tham số truyền vào của form ...................................................................... 12
Hình 1.12: Mục favourite của user ................................................................................ 13
Hình 1.13: Query get tất cả album với mode = public .................................................. 13
Hình 1.14: Form đăng nhập ........................................................................................... 13
Hình 1.15: Sử dụng tool BurpSuite (Repeater) ............................................................. 14
Hình 1.16: Tab Repeater ................................................................................................ 15
Hình 1.17: Tab Intruder ................................................................................................. 15
Hình 1.18: Ký tự khi chạy brute force ........................................................................... 16
Hình 1.19: Chế độ Sniper .............................................................................................. 16
Hình 1.20: Tab Payloads ................................................................................................ 16
Hình 1.21: Kết quả brute force ...................................................................................... 17
Hình 1.22: Tài khoản ngầm định trên một số máy chủ web ......................................... 19
Hình 1.23: Trang phpinfo.php dùng cho quản trị cho phép đọc thông tin cấu hình ..... 20
Hình 1.24: Nội dung một thư mục của website được liệt kê ......................................... 20
Hình 2.1: Máy tấn công quét các máy có trong mạng LAN ......................................... 22
Hình 2.2 Kẻ tấn công dò ra được port của MySQL ...................................................... 22
Hình 2.3: Kẻ tấn công tìm ra được user và password ................................................... 22
Hình 3.1: File tag_black_list ......................................................................................... 28
Hình 3.2: File attributes_black_list ............................................................................... 28
Hình 3.3: Kết quả từ tìm kiếm trong ô Search hiện ra .................................................. 29
Hình 3.4: HTML thymeleaf “th:text” mặc định value đó luôn là text .......................... 29
Hình 3.5: Source HTML ............................................................................................... 29
Hình 3.6: Cấu hình để ngăn chặn XSS .......................................................................... 29
Hình 3.7: Form code của tin tặc dùng để tiến hành tấn công CSRF ............................. 30
Hình 3.8: Người dùng mở form từ link của hacker và truyền tham số ......................... 30
Hình 3.9: Kết quả website từ chối request truyền tham số từ link bên ngoài ............... 30
Hình 3.10: Xác thực session đến từ chính máy của client ............................................ 30 LỜI GIỚI THIỆU
Trong thời đại ngày nay, Internet đã trở nên quen thuộc và là một công cụ hữu ích phục vụ
các hoạt động, nhu cầu sống của tất cả mọi người, đặc biệt là nhu cầu giải trí mà trong đó
nghe nhạc chiếm một phần không nhỏ. Nắm bắt được nhu cầu này, nhóm đã lên ý tưởng và lOMoAR cPSD| 58647650 6
đưa ra kế hoạch thực hiện xây dựng một trang web nghe nhạc. Trong quá trình phát triển
ứng dụng web nghe nhạc, nhóm đã nhận thấy những vấn đề nguy hiểm đe dọa đến cơ sở
dữ liệu cũng như ứng dụng web nghe nhạc. Điều này đã đặt ra vấn đề cấp thiết cần làm như
thế nào để bảo đảm an toàn thông tin cho ứng dụng web và thông tin người sử dụng. Đồ án
này được thực hiện nhằm mục đích giới thiệu rõ hơn về những mối nguy đến ứng dụng
web, máy chủ web và cơ sở dữ liệu, từ đó đưa ra cách phòng chống cũng như các phương
thức bảo mật cho ứng dụng web nghe nhạc.
Nội dung của đồ án môn học này được biên soạn thành 3 phần ứng với 3 chương. Phần I –
Bảo mật ứng dụng và máy chủ web, Phần II – Bảo mật cơ sở dữ liệu và Phần III – Thực
nghiệm trên ứng dụng web nghe nhạc. Nội dung tóm tắt các chương như sau:
Chương 1 – Bảo mật ứng dụng và máy chủ web giới thiệu khái quát về một số dạng tấn
công lên ứng dụng và máy chủ web mà nhóm đã lên kịch bản tấn công và đưa ra được cách
phòng chống như: tấn công XSS, tấn công CSRF, SQL Injection, tấn công các cơ chế xác
thực và các lỗ hổng trong cấu hình máy chủ web.
Chương 2 – Bảo mật cơ sở dữ liệu khái quát các mối nguy hại tới cơ sở dữ liệu như: mật
khẩu yếu hoặc mặc định, SQL Injection, đặc quyền quá mức cho người dùng hoặc nhóm
người dùng, cho phép các tính năng không sử dụng trong DBMS, leo thang đặc quyền, tấn
công từ chối dịch vụ (denial of service) và không mã hóa dữ liệu. Bên cạnh đó chương cũng
đề cập tới các kịch bản tấn công và phương pháp phòng chống những nguy cơ trên.
Chương 3 – Thực nghiệm trình bày về mô hình triển khai ứng dụng web nghe nhạc và các
kết quả thành công trong việc ngăn chặn những yếu tố nguy hại đã kể ở trên.
Bài báo cáo được biên soạn dựa trên những kiến thức được học từ môn An toàn Ứng dụng
Web và cơ sở dữ liệu và một số môn học liên quan trong suốt quá trình học tập của nhóm
tác giả tại Học viện Công nghệ Bưu chính Viễn thông. Trong quá trình biên soạn và triển
khai mô hình, mặc dù nhóm tác giả đã rất cố gắng song không thể tránh khỏi những thiếu
sót. Nhóm mong rằng sẽ nhận được ý kiến phản hồi và góp ý, cũng như ý kiến về cập nhật, hoàn thiện đồ án.
1 CHƯƠNG 1. BẢO MẬT ỨNG DỤNG VÀ MÁY CHỦ WEB 1.1 XSS 1.1.1. Khái quát
Tấn công Cross-Site Scriting (XSS – Mã script liên site, liên miền) là một
trong các dạng tấn công phổ biến nhất vào các ứng dụng web. XSS xuất hiện từ khi
trình duyệt bắt đầu hỗ trợ ngôn ngữ JavaScript (ban đầu được gọi là LiveScript –
trên trình duyệt Netscape). Mã tấn công XSS được nhúng trong trang web chạy trong
lòng trình duyệt với quyền truy nhập của người dùng, có thể truy nhập các thông tin
nhạy cảm của người dụng lưu trong trình duyệt. Do mã XSS chạy trong lòng trình
duyệt nên nó miễn nhiễm với các trình quét các phần mềm độc hại và các công cụ bảo vệ hệ thống.
XSS có thể được xem là một dạng của chèn mã HTML (HTML Injection).
Trên thực tế, có thể thực hiện tấn công bằng chèn mã HTML mà không cần mã
JavaScript và cũng không cần liên site, hoặc liên miền. Kẻ tấn công khai thác các lỗ
hổng bảo mật để chèn mã XSS vào trang web, trong đó dữ liệu web (như tên và địa lOMoAR cPSD| 58647650 7
chỉ email) và mã (cú pháp và các phần tử như •
Hacked vào các ô input đầu vào ở ô tìm kiếm.
Hình 1.1: Chèn script vào thanh search
Trong trường hợp này phía server không có một sự kiểm tra nào cho giá trị
đầu vào này mà chèn ngay lập tức vào response thì đây là điều kiện cho các
attackers khai thác lỗ hổng Reflected XSS.
Stored cross-site scripting:
Ứng dụng có chức năng thêm mới bài hát.
Ta tiến hành Thêm thông tin bài hát. tuy nhiên ở đây ta cố tình chèn vào các
đoạn script độc hại, script này sẽ được lưu trực tiếp xuống Database. Và tất nhiên là
nội dung này sẽ được render ra ở một giao diện nào đó. Đến khi ai đó có một tác
động (click) vào nội dung đó thì lập tức script sẽ được thực thi. lOMoAR cPSD| 58647650 9
Hình 1.2: Chèn script độc hại ở các ô input
Hình 1.3: Script độc hại được render ra giao diện người dùng
DOM-based cross-site scripting:
Chức năng tìm kiếm của ứng dụng
Ta nhấn tổ hợp phím Ctrl+U: phát hiện có một đoạn script nhỏ bên dưới.
Hình 1.4: Script code trong source code Hình 1.5: Form search
Ta thấy form search với method là GET, do đó người dùng submit search thì
value sẽ hiện trên URL như sau: Hình 1.6: URL form search
URLSearchParams là một Object, object này định nghĩa các methods để làm
có thể xử lý với query string trên URL. Cụ thể như sau: lOMoAR cPSD| 58647650 10
Hình 1.7: Lấy giá trị của query search
Sau khi get ra được giá trị từ ô search, ta thử thêm một malicious code để khai thác XSS (DOM based). 1
Hình 1.8: Alert xuất hiện
Ứng dụng đã bị lỗi hổng XSS (DOM based), Từ đó Attackers có thể tiếp tục
khai thác và lấy ra các thông tin quan trọng như cookie của người dùng…vv 1.1.3. Phòng chống
Sử dụng một blacklist các tags và attributes không được phép nhập vào. Khi
mà đầu vào của người dùng chứa các ký tự nằm trong blacklist được khai báo như
trên sẽ bị từ đối request và trả về một message lỗi.
Tuy nhiên, việc khai báo ra các tags, attributes này là thủ công và ta không
thể lường trước được các trường hợp. Attacker có thể brute force để tìm ra các tags
cũng như attributes có thể nhập mã độc vào thì hắn có thể khai thác được Reflected XSS.
Sử dụng các framework và các thư viện có sẵn sẽ đặt hiệu quả cao hơn. 1.2 CSRF 1.2.1. Khái quát
CSRF (Cross-Site Request Forgery) là dạng tấn công bẫy nạn nhân tải một
trang web có chứa yêu cầu độc hại. Tấn công CSRF sử dụng thông tin nhận dạng và
quyền truy nhập của nạn nhân để thực hiện các thao tác không mong muốn thay mặt
họ, như thay đổi địa chỉ email, thay đổi địa chỉ nhà, thực hiện giao dịch mua bán, ...
CSRF hoạt động bằng cách gửi các yêu cầu độc hại đến cho người dùng nạn
nhân nhằm đánh cắp các thông tin cá nhân, quyền truy cập và dữ liệu nhạy cảm. Hầu
hết các trang web không thể xác định các yêu cầu là giả mạo hay thực khi có người
dùng đang được xác thực.
CSRF tấn công trực tiếp vào các trạng thái trên máy chủ như thay đổi địa chỉ
IP hoặc mật khẩu của nạn nhân. Đầu tiên, kẻ tấn công sẽ yêu cầu nạn nhân đăng nhập lOMoAR cPSD| 58647650 11
vào tài khoản mà chúng đang kiểm soát để bổ sung các thông tin như thẻ tín dụng,
tài khoản ngân hàng hay địa chỉ nhà. Sau đó, chúng sẽ tiến hành lấy các dữ liệu cá
nhân vừa thu thập được để đăng nhập tài khoản trên ứng dụng web.
Lỗ hổng lưu trữ CSRF là các cuộc tấn công có sẵn trên các trang web bảo mật
kém được thực hiện bằng thẻ IMG/IFRAME trong môi trường HTML. Bởi vì CSRF
được lưu trữ trên trang web nên nó có thể đem đến nhiều mối nguy hại như các cuộc
tấn công sẽ được kích hoạt và mở rộng bất cứ lúc nào.
CSRF còn được gọi bằng một số tên khác như XSRF, Sea Surf, Session
Riding, Cross-Site Reference Forgery và Hostile Linking. Microsoft coi CSRF là
một cuộc tấn công nhấp chuột có thể đe dọa đến nhiều tài liệu quan trọng. 1.2.2. Kịch bản tấn công
Giả thiết trang web tồn tại lỗi cho phép tấn công CSRF:
Đoạn code này sử dụng để ghi tên bài hát và tên ca sĩ vào cơ sở dữ liệu
Gồm có hai tham số truyền vào có “name” lần lượt là “album_name”, “singer_name”
Hình 1.9: Đoạn code sử dụng method POST
Đoạn code method post có thể dẫn đến CSRF
Hình 1.10: Form code dùng để tiến hành tấn công CSRF
Kẻ tấn công tạo ra một đường link giả mạo có chức năng nhập name album
và name singer nhằm thay đổi giá trị 2 biến album_name và singer_name của website trong hình 1.9 lOMoAR cPSD| 58647650 12
Hình 1.11: Tham số truyền vào của form
Khi request này được gửi lên cùng tham số đó sẽ lưu lại vào cơ sở dữ liệu của website. 1.2.3. Phòng chống
- Nâng cao ý thức bảo mật của user, không ấn vào các đường link lạ.
- Sử dụng các framework, thư viện chuẩn có phòng chống CSRF
- Với mỗi request gửi lên đều được kiểm tra session có phải từ chính máy client gửi hay không 1.3 SQL Injection 1.3.1. Khái quát
Tấn công chèn mã SQL (SQL Injection) là một kỹ thuật cho phép kẻ tấn công
chèn mã SQL vào dữ liệu gửi đến máy chủ và cuối cùng được thực hiện trên máy
chủ cơ sở dữ liệu. Tùy vào mức độ tinh vi, tấn công chèn mã SQL có thể cho phép
kẻ tấn công (1) vượt qua các khâu xác thực người dùng, (2) chèn, sửa đổi, hoặc xóa
dữ liệu, (3) đánh cắp các thông tin trong cơ sở dữ liệu và (4) chiếm quyền điều khiển
hệ thống máy chủ cơ sở dữ liệu. Tấn công chèn mã SQL là dạng tấn công thường
gặp ở các ứng dụng web, các trang web có kết nối đến cơ sở dữ liệu.
Có 2 nguyên nhân của lỗ hổng trong ứng dụng cho phép thực hiện tấn công chèn mã SQL:
- Dữ liệu đầu vào từ người dùng hoặc từ các nguồn khác không đượckiểm tra
hoặc kiểm tra không kỹ lưỡng;
- Sử dụng các câu lệnh SQL động trong ứng dụng, trong đó có thao tácnối dữ
liệu người dùng với mã lệnh SQL gốc. 1.3.2. Kịch bản tấn công
Có rất nhiều kĩ thuật để thực hiện tấn công SQL injection và trong các tình
huống khác nhau thì các kĩ thuật này có thể thay đổi:
- Retrieving hidden data: can thiệp vào query tới database để lấy thêm dữ liệu ẩn
- Bypass login: sử dụng SQL injection để qua mặt cơ chế authentication.
- SQL injection union attack: sử dụng union trong sql để lấy dữ liệu ở table khác.
- Examining the database: Lấy dữ liệu về version của database.
- Blind SQL injection: Dữ liệu từ SQL query không được trả về theo ứng dụng
web. Đây là một kĩ thuật khó hơn và phức tạp hơn nhiều để thực hiện so với 4 kỹ thuật trên.
Retrieving hidden data:
Giả sử trên ứng dụng có chức năng show toàn bộ albums, playlists, sound ở trang home lOMoAR cPSD| 58647650 13
Hình 1.12: Mục favourite của user
Với một điều kiện toàn bộ album, playlist, sound với một trường mode=public. Vì
mặc định sẽ không được hiển thị những album, playlist, sound ở mode=private. Query như sau:
Hình 1.13: Query get tất cả album với mode = public Gửi query lên server:
Như đã biết “--” là bắt đầu cho comment trong SQL, do đó toàn bộ phần
mode=’public’ sẽ xem như bị bỏ đi trong SQL query này. Mà “1=1” là điều kiện
luôn luôn đúng, do đó câu query này liệt kê toàn bộ giá trị có trong bảng. Như vậy
attacker đã có thể lấy được tất cả dữ liệu kể cả mode=’private’. Bypass login:
Hình 1.14: Form đăng nhập
Khi mà người dùng nhập username và password sau đó bấm Login thì ngay lập tức
một SQL query được thực hiện:
Thay đổi giá trị username hoặc password bằng cách thêm “--”, là comment syntax trong SQL:
Như vậy and password=’password’ đã bị biến thành comment và bị bỏ đi khi thực hiện query.
SQL injection union attack
Mệnh đề UNION trong SQL dùng để kết hợp các kết quả của hai hay nhiều câu
lệnh SELECT lại với nhau mà không trả về bất kỳ hàng nào trùng. Attacker có thể
lợi dụng tính năng của UNION để thực hiện kết hợp các câu lệnh SELECT trên
nhiều bảng lại với nhau, từ đó trả về cho attacker nhiều thông tin cần thiết hơn. lOMoAR cPSD| 58647650 14
Để sử dụng mệnh đề UNION, mỗi câu lệnh SELECT phải thỏa: •
Cùng số cột được chọn • Cùng kiểu dữ liệu
Như vậy, một điều tối quan trọng để có thể thực hiện được mệnh đề UNION đó là
các câu lệnh SELECT phải trả về các bảng có cùng số cột. Như vậy ta cần phải xác
định SQL query của web application thực hiện sẽ trả về bao nhiêu cột để áp dụng
mệnh đề UNION vào sao cho phù hợp. Để có thể đạt được mục đích này, ta có thể sử dụng ORDER
Ta lần lượt thay đổi để truy xuất ra số lượng cột trong Table
Thay đổi cho đến khi server hết báo lỗi thì dừng lại. và đó chính là số cột mà Table hiện có.
Ta sử dụng tool BurpSuite (Repeater):
Hình 1.15: Sử dụng tool BurpSuite (Repeater) Blind SQL injection: lOMoAR cPSD| 58647650 15
Blind SQL injection được sử dụng khi mà ứng dụng web không có bất cứ phản hồi
(error, message) được gửi về sau một lần request.
Do đó toàn bộ những cách tấn công, các kĩ thuật sử dụng UNION như đã trình bày
ở trên dường như không có tác dụng.
Ở chức năng login của ứng dụng. Ta tiến hành sử dụng query như sau: Note:
Thông thường ở những trang web thông account admin thường sẽ có
username là: admin,administrator,root… Ta tiến hành thử một vài trường hợp: Query truy vấn: Hình 1.16: Tab Repeater
Để tiến hành brute force ta tiến hành đẩy package đến tab Intruder (Ở mục ta ta có
thể tự tay config các value để tiến hành brute force) Hình 1.17: Tab Intruder
Ở đây ta nhận thấy các value của package đều nằm trong ký tự $. Đây là ký tự khi
chạy brute force thì các giá trị này sẽ được thay đổi và chèn vào các giá trị từ file
(chứa list key, giá trị) để brute force. lOMoAR cPSD| 58647650 16
Hình 1.18: Ký tự khi chạy brute force
Ở trường hợp này ta muốn tìm ra độ dài password, chỉ cần đặc bộ tải trọng bọc số
6. Chế độ brute force là Sniper (vì chỉ có 1 trọng tải cần brute force) Ngoài ra:
Hình 1.19: Chế độ Sniper Chuyển sang tab payload: Hình 1.20: Tab Payloads
Ở mục Payload Options: Chính là danh sách các giá trị sẽ được chèn vào bộ trọng
tải (ở số 6 lúc nãy). Nhấn Start attack lOMoAR cPSD| 58647650 17
Hình 1.21: Kết quả brute force
Đây là quá trình brute force. Sau khi brute force nếu nhận thấy một package nào
khác hoặc bất thường so với các gọi tin còn lại chẳng hạn (length, status…). Có thể
đó chính là giá trị mà chúng ta cần tìm
Trong trường hợp này nếu như server trả về một dòng lỗi (500 Internal Server
Error) ở Response. Attacker biết rằng query trên là hợp lệ và có thể dựa vào
Condition Error này để khai thác tiếp tục và tìm được độ dài của password. Tiếp
tục là tìm ra lần lượt các ký tự của password. Query truy vấn:
Attacker có thể sử dụng hàm substring và công cụ BurpSuite (Intruder) có thể tìm
lần lượt các ký tự của password. 1.3.3. Phòng chống
- Mã hóa (filter) các ký tự đầu vào có thể gây lỗi SQL Injection
- Sử dụng các framework, thư viện chuẩn phòng chống SQL Injection
1.4 Tấn công các cơ chế xác thực 1.4.1. Khái quát
Xác thực (authentication) trong một mức độ nào đó nhằm xác minh thông tin
nhận dạng của một cá nhân hoặc một thực thể. Trao quyền (authorization) xác định
các quyền truy nhập vào các đối tượng, tài nguyên mà người dùng được cấp, sau khi
người dùng đã được xác thực. Tấn công vào các cơ chế xác thực (Authentication
attacks) là các loại tấn công vào khâu xác thực thông tin định danh người dùng (User
authentication) và trao quyền cho người dùng (User authorization). Để phá được cơ
chế xác thực ứng dụng web, kẻ tấn công có 2 lựa chọn: (1) Đánh cắp mật khẩu tài lOMoAR cPSD| 58647650 18
khoản người dùng và (2) Bỏ qua khâu xác thực người dùng. Cả 2 lựa chọn trên đều
được các tin tặc sử dụng trong từng điều kiện khác nhau trên các hệ thống khác nhau.
Các dạng tấn công vào các cơ chế xác thực bao gồm các dạng sau: phát lại
chuỗi định danh phiên, vét cạn, nghe lén, khởi tạo lại mật khẩu và XSS / SQL Injection. 1.4.2. Kịch bản tấn công
Phát lại chuỗi định danh phiên: Giao thức HTTP không hỗ trợ phiên (session)
làm việc. Tuy nhiên, đa số các máy chủ hỗ trợ phiên làm việc bằng việc sử dụng
cookie để nhận dạng người dùng. Cookie là một mẩu thông tin mà máy chủ web lưu
lên trình duyệt. Theo đó, cookie có thể lưu thông tin về phiên như chuỗi định danh
(ID) của phiên và các thông tin xác thực người dùng. Các phiên làm việc có thể được
xác thực bằng 1 tên người dùng (username) và một mật khẩu (password). Kẻ tấn
công có thể đánh cắp thông tin xác thực và giả danh người dùng để đăng nhập vào hệ thống.
Vét cạn: Tấn công vét cạn (Brute force) sử dụng kiểu quét, hoặc thử tất cả các
trường hợp để tìm tên người dùng và mật khẩu. Kẻ tấn công có thể dựa vào các tín
hiệu phản hồi, hoặc báo lỗi của hệ thống để nhận biết dấu hiệu thành công hoặc thất
bại trong vét cạn tìm mật khẩu. Chẳng hạn, nếu báo lỗi là "Invalid username and
password" có nghĩa là username và password đều sai, nếu báo lỗi là "Invalid
password" thì chỉ password sai, còn username đã đúng. Kẻ tấn công cũng có thể dựa
vào thời gian xử lý để nhận biết: Nếu không tìm thấy username có nghĩa là thời gian
tìm kiếm thường dài hơn do phải quét hết 50 danh sách. Ngược lại, nếu tìm thấy
username thì thời gian tìm kiếm thường ngắn hơn do không phải quét hết danh sách người dùng.
Nghe lén: Nghe lén (Sniffing) là việc chặn bắt lưu lượng mạng truyền qua
card mạng hoặc các thiết bị mạng như router hoặc switch để phân tích lấy thông tin
nhạy cảm. Các mạng WLAN dễ bị nghe lén hơn do môi trường truyền tín hiệu qua
không khí. Lưu lượng HTTP có thể dễ dàng bị nghe lén do không được mã hóa. Một
số công cụ, thư viện nghe lén điển hình, gồm: Tcpdump, Wireshark, Pcap/Wincap và Firesheep plugin.
Khởi tạo lại mật khẩu: Khởi tạo lại mật khẩu (Password resetting) là kỹ thuật
khai thác điểm yếu trong tính năng khởi tạo lại mật khẩu cho người dùng hỗ trợ bởi
nhiều website. Một website có thể 51 gửi mật khẩu ở dạng rõ cho người dùng qua
email, hoặc cung cấp một cơ chế xác thực bằng các câu hỏi an ninh và thông tin cá
nhân. Website cũng có thể gửi 1 liên kết (link) vào hộp thư của người dùng cho phép
người dùng khởi tạo lại mật khẩu. Kẻ tấn công có thể nghe lén để đánh cắp các thông
tin xác thực phụ, hoặc mật khẩu nếu được gửi dưới dạng rõ. Hắn cũng có thể nghe
lén để đánh cắp link cho phép khởi tạo lại mật khẩu và thực hiện đổi mật khẩu của người dùng.
XSS / SQL Injection: Kẻ tấn công có thể sử dụng tấn công XSS để đánh cắp
thông tin phiên làm việc, cookie chứa thông tin xác thực người dùng trên các website
có tồn tại lỗi cho phép tấn công XSS. Tương tự, nếu website tồn tại lỗi chèn mã SQL, lOMoAR cPSD| 58647650 19
kẻ tấn công cũng có thể sử dụng các kỹ thuật tấn công chèn mã SQL để đăng nhập
vào hệ thống không cần mật khẩu, hoặc thậm chí đăng nhập mà không cần tên truy nhập và mật khẩu. 1.4.3. Phòng chống -
Sử dụng và lưu trữ mật khẩu dưới dạng mã hóa. -
Tạo mật khẩu có độ bảo mật cao, có các ký tự đặc biệt. -
Áp dụng các cách phòng chống các dạng tấn công khác như XSS,
SQLInjection, brute force, …
1.5 Các lỗ hổng trong cấu hình máy chủ web 1.5.1. Khái quát
Cấu hình máy chủ web thiết lập các tùy chọn cho phép điều khiển hoạt động
của máy chủ web, theo đó có ảnh hưởng đến tất cả các website chạy trên máy
chủ đó. Các điểm yếu, lỗ hổng trong cấu hình máy chủ web bao gồm: các tài
khoản quản trị ngầm định, các nội dung ngầm định, liệt kê nội dung thư mục
và các phương thức nguy hiểm.
Các tài khoản quản trị ngầm định
Hầu hết máy chủ web đều có các tài khoản quản trị ngầm định với mật khẩu
yếu hoặc thậm chí không có mật khẩu, đặc biệt là với các phiên bản cũ của
máy chủ web và hệ điều hành nền.
Hình 1.22: Tài khoản ngầm định trên một số máy chủ web
Các nội dung ngầm định
Nhiều phần máy chủ web được xuất xưởng kèm theo các nội dung ngầm định,
có thể là "đòn bẩy" giúp tin tặc tấn công máy chủ và các ứng dụng web. Một
số nội dung ngầm định có thể gây rủi ro cho hệ thống: -
Các tính năng gỡ rối và kiểm thử cho người quản trị. -
Các tính năng mẫu được thiết kế cho các công việc dùng chung. -
Một số tính năng đặc biệt được thiết kế dùng trong nội bộ, nhưng lại
vôtình để người ngoài có thể truy nhập. lOMoAR cPSD| 58647650 20 -
Tài liệu hướng dẫn sử dụng, hoặc quản trị máy chủ web có thể là
côngcụ hỗ trợ đắc lực cho tin tặc.
Hình 1.23: Trang phpinfo.php dùng cho quản trị cho phép đọc thông tin cấu hình
Liệt kê nội dung thư mục
Hình 1.24: Nội dung một thư mục của website được liệt kê
Khi máy chủ web nhận được yêu cầu truy nhập là 1 thư mục, các hành động
sau có thể được thực hiện:
- Nếu trong thư mục tồn tại trang ngầm định (index.html,
default.htm, ...), trang ngầm định được gửi cho trình duyệt;
- Nếu trong thư mục không tồn tại trang ngầm định, máy chủ web có thể: +
Trả về thông báo lỗi mã 403 (cấm truy nhập) nếu không cho phép liệt kê thư mục;
+ Trả về danh sách các file trong thư mục nếu cho phép liệt kê thư mục