• Mô hình dữ liệu thực thể kết hợp Entity – Relationship Model: Cáckhái niệm được sử dụng trong mô hình này là: các thực thể, thuộc tínhcủa các loại thực thể, khóa của loại thực thể, các
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
Ngành An Toàn Thông Tin
&
BẢN BÁO CÁO ĐỒ ÁN MÔN HỌC
Tìm hiểu và triển khai giải pháp phát hiện và phòng
Trang 2NHẬN XÉT GIẢNG VIÊN HƯỚNG DẪN
TP.HCM, ngày tháng năm 2021
(kí và ghi gõ họ tên )
Trang 3NHẬN XÉT GIẢNG VIÊN CHẤM PHẢN BIỆN
TP.HCM, ngày tháng năm 2021
(kí và ghi gõ họ tên )
TP.HCM, ngày tháng năm 2021
(kí và ghi gõ họ tên )
Trang 4Mục lục
Trang 5Danh mục hình ảnh
Trang 6Danh mục từ viết tắt
SQL Structured Query Language
SQLi Structured Query Language InjectionCSDL Cơ sở dữ liệu
WAF Web Application Firewall
DVWA Damn Vulnerable Web Application
Trang 7Chương 1: Cơ sở lí thuyết
1 Giới thiệu cơ sở dữ liệu
1.1 Cơ sở dữ liệu (Database):
Là những thông tin về một tổ chức hay cá nhân (một trường học, công
ty, nhà máy ) chúng có mối quan hệ với nhau Được lưu trữ trên máytính và các thiết bị ( như USB, thẻ nhớ, đĩa từ ) để phục vụ cho nhucầu khai thác thông tin với nhiều mục đích khác nhau
1.2 Hệ quản trị CSDL
Là một phần mềm hệ thống nhằm tương tác với người dùng cho phépngười dùng thực hiện những điều sau:
• Trình bày chi tiết về cấu trúc của dữ liệu
• Lưu trữ dữ liệu trên các thiết bị
• Tìm kiếm, lưu, xóa và chỉnh sửa thông tin trên database
1.3 Ngôn ngữ giao tiếp giữa người sử dụng và CSDL
- Ngôn ngữ truy vấn dữ liệu (Structured Query Language - SQL): dùng
để truy vấn các thông tin cần thiết trong CSDL
• Ngôn ngữ mô tả dữ liệu (Data Definition Language - DDL): chophép tạo cấu trúc các bảng của CSDL, các mối liên hệ của dữ liệu(như các ràng buộc toàn vẹn hay khóa)
• Ngôn ngữ thao tác dữ liệu (Data Manipulation Language - DML):cho phép người dùng chọn, thêm, xóa và sửa dữ liệu trong CSDL
- Ngôn ngữ quản lý dữ liệu (Data Control Language - DCL): cho phépnhững người quản trị thay đổi cấu trúc các bảng, kiểm soát bảo mậtthông tin,cấp quyền truy cập và khai thác vào CSDL cho người dùng 1.4 Các loại mô hình dữ liệu
• Mô hình dữ liệu phân cấp (Hierarchical Model): Dữ liệu ở mô hìnhnày được chia thành các nút nhỏ và được dùng để thể hiện cho mộtthực thể nhất định để tạo nên một cấu trúc dạng cây cây Giữa nút con
và nút cha được liên hệ với nhau theo một mối quan hệ xác định Nóphù hợp trong việc phân cấp nhân viên trong một công ty, cơ quan hay
tổ chức nào đó
• Mô hình mạng (Network Model): Mô hình được biểu diễn bởi một đồthị có hướng Các thức thực nằm trên các đỉnh còn đường đi từ đỉnhnày sang đỉnh khác còn được gọi là mỗi quan hệ giữa hai đỉnh đó
Trang 8• Mô hình dữ liệu quan hệ (Relation Data Model): Trong mô hình quan
hệ, dữ liệu được tổ chức thành từng bảng, mỗi bảng tương ứng vớimột thực thể trong hệ thống Những khái niệm sử dụng trong mô hìnhbao gồm: thuộc tính, quan hệ, lược đồ quan hệ, bộ, khóa
• Mô hình dữ liệu hướng đối tượng (Object Oriented Model): Dựa trên
tiếp cận hướng đối tượng bao gồm các khái niệm: lớp, kế thừa Đặctrưng cơ bản về tính chất của mô hình này là tính đóng gói, đa hình,tính tái sử dụng và kế thừa Đây là loại mô hình tiên tiến nhất hiệnnay
• Mô hình dữ liệu thực thể kết hợp (Entity – Relationship Model): Cáckhái niệm được sử dụng trong mô hình này là: các thực thể, thuộc tínhcủa các loại thực thể, khóa của loại thực thể, các mối kết hợp
2 Giới thiệu về an ninh cơ sở dữ liệu
2.1 An ninh cơ sở dữ liệu là gì?
Là việc sử dụng các thủ thuật cho việc kiểm soát bảo mật thông tinnhằm bảo vệ cơ sở dữ liệu, chống lại sự xâm phạm để đảm bảo tính bảomật, toàn vẹn và khả dụng của dữ liệu
2.2 Thành phần an ninh cơ sở dữ liệu
• Database Activity Monitoring: Giám sát các máy chủ cơ sở dữ liệu,cảnh báo, ngăn chặn các hành vi xấu đến cơ sở dữ liệu trong thời gianthực, kể cả khi chạy trên nền tảng ảo hoá hoặc trên môi trường đámmây
• Virtual Patching: Không cần làm gián đoạn hoạt động của hệ thốngvirtual patching phát hiện những bản vá còn thiếu và nhờ việc quét lỗhổng ta có thể sửa các lỗ hổng bảo mật nhằm nâng cao khả năng khảnăng bảo mật cơ sở dữ liệu của hệ thống
• Vulnerability Manager for Database: Tự động quét cơ sở dữ liệu cótrong hệ thống mạng, quyết định việc thực thi các bản vá cuối cùngchưa được áp dụng, kiểm tra các lỗ hổng như mật khẩu yếu hay kiểm
ta xem các lỗ hổng thông thường có gây hại gì cho hệ thống haykhông
2.3 Ưu điểm
- Vulnerablility Manager:
• Hầu hết các lỗ hổng mới được cập nhật trong vòng 72 giờ
Trang 9• Tự động ngăn chặn các cuộc tấn công dựa vào các hành vi củangười dùng thực thi trên cơ sở dữ liệu đồng thời tự động cập nhậtlại các chính sách.
- Database Activity Monitor:
• Theo dõi các mối đe doạ bên trong cơ sở dữ liệu
• Ngăn chặn trước các cuộc tấn công
• Tiết kiệm thời gian và tiền bạc
• Xây dựng đơn giản, nhanh chóng
• Không cần ngắt hoạt động hệ thống trong khi cài đặt hay cậpnhật
- Virtual Patching
• Tích hợp với giám sát hành vi người dùng trên cơ sở dữ liệu Đểphát hiện và ngăn chặn kịp thời các hành vi gây hại đến cơ sở dữliệu
• Không cần thay đổi cấu hình cũng thể thể bảo về được cơ sở dữliệu khỏi những lỗ hổng và những điểm yếu về bảo mật
• Việc bảo vệ lỗ hổng được thực thi với 48-72 giờ sau khi lỗ hổnghoặc bản vá được công bố bởi nhà cung cấp
3 Tìm hiểu về SQL Injection
Hình 1.3 1: Cơ chế tấn công SQL Injection
3.1 SQL là gì?
Trang 10- SQL (Structured Query Language) là ngôn ngữ truy vấn có cấu trúccho phép người sử dụng có thể khai thác cơ sở dữ liệu, truy vấn cácthông tin cần thiết trong cơ sở dữ liệu.
- Ưu điểm của SQL:
• Dùng SQL có thể truy cập dữ liệu trong hệ thống cơ sở dữ liệu
• Cho phép mô tả dữ liệu
• Thao tác với dữ liệu trong cơ sở dữ liệu và xác định dữ liệu đó
• Cho phép nhúng trong các ngôn ngữ khác sử dụng mô-đun SQL,thư viện và trình biên dịch trước
• Cho phép tạo các cơ sở dữ liệu và các bảng
• Cho phép tạo chế độ view, thủ tục lưu trữ, chức năng trong cở dữliệu
• Cho phép thiết lập quyền trên các bảng thủ tục và view
- Hạn chế của SQL:
• Giao diện của SQL tương đối phức tạp khiến một số người dùngkhó truy cập
• Không được toàn quyền kiểm soát
• Phần mở rộng của các chương trình cơ sở dữa liệu SQL đều là độcquyền của các nhà cung cấp
• Khó tiếp cận đến SQL đối với những người lập trình vì chi phívận hành cho các phiên bản của SQL tương đối cao
3.2 SQL Injection là gì?
- Là kỹ thuật dùng những đoạn SQL làm sai đi câu truy vấn ban đầu của
cơ sở dữ liệu, từ đó kẻ tấn công có thể khai thác dữ liệu và có thể thaotác như một người quản trị Nhờ vào những lỗ hổng câu truy vấn củaứng dụng
- Các thành phần dễ bị tấn công
• Form đăng nhập
• Form tìm kiếm
• Form nhận xét
• Liên kết của website
- Một số thao tác phổ biến để tấn công:
• Kiểm tra đăng nhập ứng dụng
• Thao tác lưu comment của user xuống database
Trang 11• Tìm kiếm thông tin như user, sản phẩm cũng có thể tìm đượcmật khẩu của user.
- Phân loại các kiểu tấn công SQL Injection
o Union-based SQLi
Là một kỹ thuật tấn công SQL Injection dựa vào của toán tửUNION trong ngôn ngữ SQL cho phép tổng hợp kết quả của
2 hay nhiều câu truy vấn SELECTION trong cùng 1 kết quả
và được trả về như một phần của HTTP response
Inferential SQLi (Blind SQLi)
Trang 12• Không giống như In-band SQLi, Inferential SQL Injection tốnnhiều thời gian hơn cho việc tấn công do không có bất kì dữliệu nào được thực sự trả về thông qua web application vàhacker thì không thể theo dõi kết quả trực tiếp như kiểu tấncông In-band
• Thay vào đó, kẻ tấn công sẽ cố gắng xây dựng lại cấu trúc cơ sở
dữ liệu bằng việc gửi đi các payloads, dựa vào kết quả phản hồicủa web application và kết quả hành vi của database server
• Inferential SQLi chia làm 2 loại
o Blind-boolean-based SQLi
Là kĩ thuật tấn công SQL Injection dựa vào việc gửi cáctruy vấn tới cơ sở dữ liệu Thông qua việc xem xét cácphản hồi kẻ tấn có thể suy ra việc tiêm có thành công haykhông Vì phản hồi trả về True hoặc False và nó sẽ khôngchứa bất kì dữ liệu nào từ cơ sở dữ liệu
Kiểu tấn công này thường chậm (đặc biệt với cơ sở dữliệu có kích thước lớn) do người tấn công cần phải liệt kêtừng dữ liệu, hoặc mò từng kí tự
o Time-based-blind SQLi
Time-base Blind SQLi là kĩ thuật tấn công dựa vào việcgửi những câu truy vấn tới cơ sở dữ liệu và buộc cơ sở dữliệu phải chờ một khoảng thời gian (thường tính bằnggiây) trước khi phản hồi
Thời gian phản hồi (ngay lập tức hay trễ theo khoảng thờigian được set) cho phép kẻ tấn công suy đoán kết quả truyvấn là TRUE hay FALSE
Kiểu tấn công này cũng tốn nhiều thời gian tương tự nhưBoolean-based SQLi
Out-of-band SQLi
• Out-of-band SQLi không phải dạng tấn công phổ biến, chủ yếubởi vì nó phụ thuộc vào các tính năng được bật trên DatabaseServer được sử dụng bởi Web Application
Trang 13• Kiểu tấn công này xảy ra khi hacker không thể trực tiếp tấncông và thu thập kết quả trực tiếp trên cùng một kênh (In-bandSQLi), và đặc biệt là việc phản hồi từ server là không ổn định
• Kiểu tấn công này phụ thuộc vào khả năng server thực hiện cácrequest DNS hoặc HTTP để chuyển dữ liệu cho kẻ tấn công
- Hậu quả khi bị tấn công:
• Dữ liệu trong cơ sở dữ liệu bị lộ Hậu quả để lại nhiều hay ít phụthuộc vào tầm quan trọng của dữ liệu bị lấy đi Ví dụ như việc khimột công ty bị lộ thông tin khách hàng, làm mất lòng tin của họviệc họ chuyển sang dùng dịch vụ khác công ty khác là việc hiểnnhiên làm cho công ty mình gặp khó khăn hoặc có thể nặng hơndẫn đến phá sản
• Lỗ hổng cũng có thể xuất phát từ những khách hàng Họ thườnghay dùng một mật khẩu cho nhiều tài khoản hoặc mật khẩu dểdoán Khi kẻ tấn công phát hiện được một tài khoản thì những tàikhoản còn lại cũng bị lộ theo
• Có những trường hợp kẻ tấn công có thể có thể chiếm tài khoảncủa người quản trị cơ sở dữ liệu, hắn không chỉ đọc mà có thể xóatoàn bộ dữ liệu của hệ thống làm hệ thống bị ngưng hoạt động
Trang 14Chương 2: Kỹ thuật tấn công
1 Lý thuyết
Các cuộc tấn công SQL Injection được thực hiện bằng cách gửi lệnhSQL độc hại đến các máy chủ cơ sở dữ liệu thông qua các yêu cầu củangười dùng mà website cho phép Bất kỳ kênh input nào cũng có thểđược sử dụng để gửi các lệnh độc hại như chuỗi truy vấn (query strings)
và tệp tin
- Các dạng tấn công SQL Injection:
• Dạng tấn công vượt qua kiểm tra đăng nhập: Với dạng tấn côngnày, kẻ tấn công có thể dễ dàng vượt qua các trang đăng nhập nhờvào lỗi khi dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu củaứng dụng web Thông thường để cho phép người dùng truy cậpvào các trang web được bảo mật, hệ thống thường xây dựng trangđăng nhập để yêu cầu người dùng nhập thông tin về tên đăngnhập và mật khẩu Sau khi người dùng nhập thông tin vào, hệthống sẽ kiểm tra tên đăng nhập và mật khẩu có hợp lệ hay không
để quyết định cho phép hay từ chối thực hiện tiếp
• Dạng tấn công sử dụng câu lệnh SELECT: Để thực hiện đượckiểu tấn công này, kẻ tấn công phải có khả năng hiểu và lợi dụngcác sơ hở trong các thông báo lỗi từ hệ thống để dò tìm các điểmyếu khởi đầu cho việc tấn công Chúng ta có tể gặp các websitetin tức có các tham số được truyền vào như: index.php?id=21,index.asp?id=6, thì chúng ta chỉ cần thêm các kí tự dấu nháy đơn('), dấu nháy kép ("), phần trăm 27 (%27), 00 phần trăm (00%)vào sau id để kiểm tra nếu nó hiện ra lỗi hoặc không hiện ra 1 cái
gì (khác hoàn toàn với lúc ban đầu thì 90% có khả năng khai thácđược lỗi này)
• Dạng tấn công sử dụng câu lệnh INSERT: Thông thường các ứngdụng web cho phép người dùng đăng kí một tài khoản để thamgia Chức năng không thể thiếu là sau khi đăng kí thành công,người dùng có thể xem và hiệu chỉnh thông tin của mình SQLinjection có thể được dùng khi hệ thống không kiểm tra tính hợp
lệ của thông tin nhập vào
Trang 15• Dạng tấn công sử dụng stored-procedures: Stored Procedure được
sử dụng trong lập trình web với mục đích nhằm giảm sự phức tạptrong ứng dụng và tránh sự tấn công trong kỹ thuật SQL Injection.Tuy nhiên những kẻ tấn công vẫn có thể lợi dụng những storedprocedure để tấn công vào hệ thống
Hình 2.2 1: Câu lệnh tìm kiếm website bị lỗi
• Bước 2: Sau khi thực hiện câu lệnh ở bước 1 ta sẽ có danh sách nhữngtrang web bị lỗi nhóm chúng em chọn trang wed
thinhnguyenplastic.com để demo SQL Injection.
Trang 16Hình 2.2 2: Trang thinhnguyenplactic.com
• Bước 3: Kiểm tra lỗi
- Bằng công cụ Vega trên website thinhnguyenplatic.com
Hình 2.2 3: Sử dụng công cụ Vega
+ Chọn Injections Modules và chọn phần liên quan đến SQL Injection
để quét
Trang 17Hình 2.2 4: Các phần liên quan đến SQL
Hình 2.2 5: Các phần liên quan đến SQL
Trang 18+ Kết quả đã quét ra được 3 cảnh báo liên quan đến SQLInjection.
Hình 2.2 6: Kết quả khi dùng Vega
- Ngoài công cụ Vega ta có thể kiểm tra trên HackBar Quantum bằngcách thêm dấu ‘ vào sau đường link
+ Kết quả trước khi chạy
Hình 2.2 7: thinhnguyenplastic.com trước khi dùng SQL Injection
Trang 19+ Kết quả sau khi chạy
Hình 2.2 8: Kết quả sau khi thêm ‘
• Bước 4: Tìm số cột của table mà câu lệnh SQL truy vấn dùng câu lệnhorder by
Hình 2.2 9: Hình ảnh khi chưa hết cột
Trang 20Ta sẽ tiếp tục tăng con số của order by cho đến khi thấy website bị lỗinhư hình dưới đây
Hình 2.2 10: Kết quả khi tìm hết các cột
Khi đến số 63 thì website bị lỗi nên ta nhận ra được trong database sẽ
có các dòng từ 0 đến 62 để hiện các cột này ta chọn SQL -> UnionSelect Statement -> điền vào ô số 62 -> ok
Hình 2.2 11: Thực hiện lệnh Union Select
- Kết quả khi thực hiện
Trang 21Hình 2.2 12: Kết quả sau khi thực hiện lệnh
• Bước 5: Hiện số cột bị lỗi bằng cách dùng union select
- Kết quả cho ta thấy số cột 37 bị lỗi
Hình 2.2 13: Hình ảnh cột 37 làm trang bị lỗi
Trang 22Lưu ý: Khi dùng câu lệnh union seclect để tim cột bị lỗi chúng ta phảithêm dấu - trước 635 Nếu không ghi thì nó sẽ không hiện lỗi như hìnhdưới đây.
Trang 24• Bước 7: Liệt kê các bảng trong database bằng câu lệnh unhex (hex(group-concat (table_name))) tại cột bị lỗi và FROMinformation_schema.tables WHERE table_schema=database () sau sốcột 62
Hình 2.2 18: Liệt kê các bảng 1
Hình 2.2 19: Liệt kê các bảng 2
Trang 25• Bước 8: Liệt kê các cột trong bảng chứa thông tin Login(tbl-member)bằng câu lệnh unhex (hex (group-concat (column_name))) tại cột bị lỗi
table_name=tbl_member sau số cột 62
Hình 2.2 20: Câu lệnh liệt kê các cột trong bảng
Hình 2.2 21: Câu lệnh liệt kê các cột trong bảng
Trang 26- Tiếp tục dùng câu lệnh trên đổi tbl_member thành CHAR (116, 98,
108, 95, 109, 101, 109, 98, 101,114)
Hình 2.2 22: Kết quả sau khi đổi tbl_member
• Bước 9: Xem thông tin các cột trong bảng tbl_member (id, uid, pwd)bằng câu lệnh unhex (hex (group-concat (id, 0x3a, uid, 0x3a, pwd))) vàcâu lệnh FROM tbl_member sau số cột 62
Hình 2.2 23: Thông tin trong các cột
Trang 27• Bước 10: Đăng nhập thông tin vừa tìm được ở bước 9
Hình 2.2 24: Hình ảnh đăng nhập
- Đăng nhập thành công
Hình 2.2 25: Kết quả đăng nhập thành công
Trang 28Chương 3: Phòng chống tấn công SQL Injection sử dụng Firewall Mod Security
• Không cộng chuỗi để tạo SQL: Sử dụng parameter thay vì cộngchuỗi Nếu dữ liệu truyền vào không hợp pháp, SQL Engine sẽ tựđộng báo lỗi, ta không cần dùng code để check
• Không hiển thị exception, message lỗi Hacker dựa vào message lỗi
để tìm ra cấu trúc database Khi có lỗi, ta chỉ hiện thông báo lỗi chứđừng hiển thị đầy đủ thông tin về lỗi, tránh hacker lợi dụng
• Tạo một tài khoản trong cơ sở dữ liệu, gán quyền truy cập cho tàikhoản đó hạn chế dùng tài khoản root Dù kẻ tấn công có vào được
cơ sở dữ liệu cũng không thể đọc dữ liệu từ các bảng chính, sửa hayxoá dữ liệu
• Sao lưu dữ liệu thường xuyên để khi có kẻ tấn công xóa đi mất dữliệu thì ta vẫn khôi phục được
Giới thiệu sơ lược về Mod Security
• ModSecurity là một bộ máy phát hiện và phòng chống xâm nhập dành cho các ứng dụng Web gọi là Web application firewall Hoạt động nhưmột module của máy chủ web Apache, mục đích của ModSecurity là tăng cường bảo mật cho các ứng dụng Web, bảo vệ chúng khỏi các loạitấn công đã biết và chưa biết