Nghiên cứu tìm hiểu một số dạng tấn công sql injection vào hệ quản trị csdl microsoft sql server
Trang 2HÀ NỘI 2011
Trang 3MỤC LỤC
MỤC LỤC 1
CÁC TỪ VIẾT TẮT 4
DANH MỤC HÌNH VẼ 5
LỜI MỞ ĐẦU 6
CHƯƠNG I: TỔNG QUAN VỀ AN NINH, AN TOÀN TRONG HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MICROSOFT SQL SERVER 8
1.1 GIỚI THIỆU CHUNG VỀ HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MICROSOFT SQL 8
1.1.1 Kiến trúc hệ thống lưu trữ dữ liệu SQL Server 10
1.1.1.1 Cấu trúc page và extent 10
1.1.1.2 Cấu trúc file và filegroup 11
1.1.1.3 Cấu trúc nhật ký giao tác (transaction log) 13
1.1.1.4 Cấu trúc bảng và cấu trúc dữ liệu chỉ số 14
1.1.2 Giải pháp nhân bản dữ liệu trong SQL Server 15
1.1.2.1 Thành phần trong mô hình nhân bản 15
1.1.2.2 Phương pháp nhân bản 17
1.2 KIẾN TRÚC AN NINH AN TOÀN TRONG HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MICROSOFT SQL 20
1.2.1 Cấu trúc hệ thống bảo vệ 20
1.2.2 Các mức bảo vệ 21
1.3 MÃ HÓA CƠ SỞ DỮ LIỆU TRONG MICROSOFT SQL 23
1.3.1 Mã hóa dữ liệu trong suốt (TDE – Transparent Data Encrryption)23 1.3.2 Tìm hiểu cơ bản về TDE trong SQL Server 2008 24
1.3.2.1 Hệ thống phân cấp khóa mã trong TDE 25
1.3.2.2 Phương pháp thiết lập TDE 26
1.3.2.3 Phương pháp dữ liệu được mã hóa 28
1.3.2.4 Dạng thông tin mà TDE có thể mã hóa 28
CHƯƠNG II: TÌM HIỂU VỀ MỘT SỐ KỸ THUẬT TẤN CÔNG SQL INJECTION 30
2.1 MỘT SỐ TẤN CÔNG CƠ SỞ DỮ LIỆU PHỔ BIẾN 30
2.2 MỘT SỐ KỸ THUẬT TẤN CÔNG SQL INJECTION 31
Trang 42.2.1 Khái niệm về tấn SQL injection: 31
2.2.2 Các cơ chế thực hiện tiêm 32
2.2.2.1 Kỹ thuật tiêm thông qua đầu vào người dùng 32
2.2.2.2 Kỹ thuật tiêm thông qua các coockie 32
2.2.2.3 Kỹ thuật tiêm thông qua các biến môi trường 32
2.2.2.4 Kỹ thuật tiêm bậc hai 33
2.2.3 Các mục tiêu khi thực hiện tấn công SQL injection 34
2.2.4 Các kiểu tấn công SQL injection 35
2.2.4.1 Tấn công dựa vào tính dư thừa (Tautologies) 37
2.2.4.2 Tấn công dựa vào các truy vấn trái phép/sai logic 38
2.2.4.3 Tấn công dựa vào truy vấn kết hợp 39
2.2.4.4 Tấn công dựa vào các truy vấn Piggy-Backed 40
2.2.4.5 Tấn công dựa vào các thủ tục lưu trữ 41
2.2.4.6 Tấn công dựa vào sự suy đoán 42
2.2.4.7 Tấn công dựa vào các biến đổi thay thế 45
2.2.5 Phương pháp ngăn chặn tấn công SQL injection 46
2.2.5.1 Các phương pháp viết mã lệnh có bảo vệ 46
2.2.5.2 Các kỹ thuật phát hiện và ngăn chặn (Detection and Prevention Techniques) 48
CHƯƠNG III: TẤN CÔNG SQL INJECTION TRÊN SQL SERVER VÀ XÂY DỰNG MODULE MÔ PHỎNG TẤN CÔNG 52
3.1 KỸ THUẬT TẤN CÔNG SQL INJECTION TRONG CÁC ỨNG DỤNG SQL SERVER 52
3.1.1 Thu thập thông tin qua các thông báo lỗi 52
3.1.2 Leo thang quyền kiểm soát 56
3.2 XÂY DỰNG CHƯƠNG TRÌNH DEMO THỰC HIỆN TẤN CÔNG SQL INJECTION 59
3.2.1 Nội dung kịch bản demo 59
3.2.2 Giới thiệu chương trình ứng dụng sẽ được áp dụng cho demo 60
3.2.2.1.Cấu trúc cơ sở dữ liệu QuanLyTinNhan 60
3.2.2.2 Các chức năng của chương trình ứng dụng QuanLyTinNhan 62 3.2.3 Áp dụng thức tấn công SQL injection trong ứng dụng 65
Trang 53.2.3.1 Áp dụng cách tấn công SQL injection nhằm làm vô hiệu hóa
điều kiện truy vấn 65
3.2.3.2 Áp dụng cách tấn công SQL injection nhằm làm thay đổi dữ liệu trong bảng 67
3.2.3.3 Áp dụng cách tấn công SQL injection nhằm xóa toàn bộ dữ liệu trong bảng 69
KẾT LUẬN 71
PHỤ LỤC 73
TÀI LIỆU THAM KHẢO 85
Trang 6CÁC TỪ VIẾT TẮT
Trang 7DANH MỤC HÌNH VẼ
Hình 1.1 Cấu trúc extent 11
Hình 1.2 Cách tổ chức của một bảng 14
Hình 1.3 Các thành phân cơ bản trong mô hình nhân bản 15
Hình 1.4 Mô hình nhân bản Snapshot 17
Hình 1.5 Mô hình nhân bản Transaction 18
Hình 1.6 Mô hình nhân bản Merge 19
Hình 1.7 Kiến trúc phân cấp khóa TDE 26
Hình 3.1 Giao diện chương trình demo 62
Hình 3.2 Giao diện kết nối tới SQL Server 63
Hình 3.3 Giao diện đăng ký thông tin cá nhân 63
Hình 3.4 Giao diện thông tin cá nhân 64
Hình 3.5 Giao diện gửi tin nhắn 64
Hình 3.6 Giao diện gửi tin nhắn 65
Hình 3.7 Hiển thị tin nhắn 66
Hình 3.8 Giao diện thể hiện truy vấn 66
Hình 3.9 Danh sách toàn bộ các tin nhắn 67
Hình 3.10 Giao diện hiển thị thông tin cá nhân 68
Hình 3.11 Thông tin cá nhân của tất cả người dùng 69
Hình 3.12 Giao diện thực hiện chèn thêm truy vấn làm thay đổi dữ liệu 70
Hình 3.13 Giao diện thực hiện chèn thêm truy vấn để xóa dữ liệu trong bảng .71
Trang 8LỜI MỞ ĐẦU
Ngày nay vấn đề bảo vệ các cơ sở dữ liệu là một trong những vấn đề hếtsức quan trọng Đặc biệt là các trung tâm lưu trữ cơ sở dữ liệu của các cơquan tổ chức doanh nghiệp Để có thể khai thác trái phép các thông tin này, kẻtấn công thực hiện mọi phương pháp và sử dụng nhiều công cụ khác nhau.Nhằm bảo vệ tốt các cơ sở dữ liệu, đề phòng, phát hiện và ngăn chặn cáctấn công vào tài nguyên hệ thống thì chúng ta cần phải hiểu rõ các cách thứctấn công Một trong những cách thức tấn công được thực hiện phổ biến hiệnnay và khá hiệu quả đó là tấn công SQL injection vào các ứng dụng cơ sở dữliệu Đó là một hướng tấn công tuy không mới, nhưng các kỹ thuật cụ thểđược áp dụng thì luôn thay đổi Nếu tấn công này được thực hiện thành côngthì kẻ tấn công có thể đạt được tới mức có thể lấy được toàn bộ dữ liệu trong
cơ sở dữ liệu, cũng như thay đổi dữ liệu hoặc cấu trúc các đối tượng cơ sở dữliệu
“Nghiên cứu và tìm hiểu một số tấn công dạng SQL Injection vào hệ quản trị cơ sở dữ liệu Microsoft SQL Server” Bố cục của đề tài được chia
ra làm ba chương:
Chương 1: “Tổng quan về an ninh, an toàn trong hệ quản trị cơ sở dữliệu” Trong chương này em tập trung tìm hiểu về kiến trúc hệ thống lưu trữ
dữ liệu SQL Server, vấn đề mã hóa cơ sở dữ liệu trong Microsoft SQL
Chương 2: “Kỹ thuật tấn công SQL injection” Nội dung chính củachương nghiên cứu về một số kỹ thuật tấn công SQL Injection, cơ chế thựchiện và phương pháp ngăn chặn tấn công
Chương 3: “Tấn công SQL Injection trên SQL Server và xây dựngmodule mô phỏng tấn công” Trong chương này tìm hiểu về kỹ thuật tấn côngSQL injection trong các ứng dụng SQL Server, xây dựng chương trình demothực hiện tấn công
Sau hơn ba tháng nỗ lực nghiên cứu và tìm hiểu, đến nay đồ án tốtnghiệp của em đã hoàn thành Trước hết cho phép em được bày tỏ lòng biết
ơn sâu sắc và lời cảm ơn chân thành tới thầy giáo PGS.TS Lê Mỹ Tú đã hết
Trang 9lòng chỉ bảo và tận tình hướng dẫn em, các thầy cô giáo trong khoa An toànThông tin đã tạo điều kiện tốt nhất, cám ơn bạn bè và gia đình đã ủng hộ vàđộng viên em trong suốt quá trình hoàn thành đồ án.
Hà Nội, ngày 6 tháng 6 năm 2011
Sinh viên thực hiện
Lã Huyền Châm
Trang 10CHƯƠNG I: TỔNG QUAN VỀ AN NINH, AN TOÀN TRONG
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MICROSOFT SQL SERVER1.1 GIỚI THIỆU CHUNG VỀ HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
MICROSOFT SQL
SQL Server bao gồm một số công nghệ phân tích và quản lý dữ liệu sau:
Đây là dịch vụ lõi (core service) thực hiện nhiệm vụ lưu trữ, xử lý và antoàn dữ liệu Bộ máy cơ sở dữ liệu cung cấp cách truy cập có kiểm soát và xử
lý nhanh các giao tác để đáp ứng các yêu cầu dữ liệu từ ứng dụng
Bộ máy cơ sở dữ liệu được sử dụng để tạo ra các cơ sở dữ liệu quan hệcho các giao tác trực tuyền hoặc dữ liệu xử lý phân tích trực tuyến Cơ sở dữliệu quan hệ gồm các bảng để lưu trữ dữ liệu và các đối tượng cơ sở dữ liệunhư chỉ số (index), khung nhìn (view) và các thủ tục lưu trữ (storedprocedure) để xem, quản lý và an toàn dữ liệu SQL Server ManagementStudio là công cụ được sử dụng để quản lý các đối tượng cơ sở dữ liệu vàSQL Server Profiler dùng để thu thập các sự kiện
Nhiệm vụ chính của bộ máy cơ sở dữ liệu:
o Thiết kế và tạo cơ sở dữ liệu để lưu trữ các bảng quan hệ hoặc các tàiliệu XML được yêu cầu từ hệ thống
o Thực thi hệ thống để truy cập và thay đổi dữ liệu được lưu trữ trong
cơ sở dữ liệu Công việc này bao gồm thực hiện các Website hoặccác ứng dụng làm việc với dữ liệu và xây dựng các thủ tục làm việcvới dữ liệu
o Hỗ trợ việc quản trị hàng ngày để tối ưu hiệu năng của cơ sở dữ liệu
o Đối với dữ liệu đa chiều (Microsoft SQL Server Analysis Services –Multidimensional Data): Cho phép thiết kế, tạo, và quản lý các cấutrúc đa chiều, bao gồm dữ liệu chi tiết và dữ liệu đã được tập hợp từ
Trang 11nhiều nguồn dữ liệu, như cơ sở dữ liệu quan hệ, trong mô hình logicđơn lẻ được cung cấp bởi các tính toán bên trong.
o Dịch vụ phân tích này cung cấp việc phân tích từ trên xuống dưới,trực quan đối với lượng lớn dữ liệu trong mô hình dữ liệu đơn lẻ
o Nó hoạt động với các kho dữ liệu, các cơ sở dữ liệu sản xuất và cácnơi lưu trữ dữ liệu vận hành, hỗ trợ việc phân tích cả về dữ liệu thờigian thực và dữ liệu lịch sử
o Đối với khai phá dữ liệu (Microsoft SQL Server Analysis Services –Data Mining): bao gồm các đặc tính và các công cụ cần thiết để tạo
ra các giải pháp khai phá dữ liệu phức tạp như:
− Các thuật toán khai phá dữ liệu chuẩn
− Bộ thiết kế khai phá dữ liệu (Data Mining Designer), được dùng
để tạo, quản lý và khảo sát các mô hình khai phá dữ liệu và sau
đó tạo các tiên đoán bằng cách sử dụng các mô hình này
Ngôn ngữ mở rộng khai phá dữ liệu (Data Mining Extensions) được dùng
để quản lý các mô hình khai phá và tạo các truy vấn tiên đoán phức tạp
Sử dụng kết hợp các đặc tính và các công cụ trên để khám phá các xuhướng và các mẫu đang tồn tại trong dữ liệu và sau đó sử dụng các xu hướng
và các mẫu này để đưa ra các quyết định thông minh cho các vấn đề khó trongthương mại
dựng các giải pháp biến đổi dữ liệu và tích hợp dữ liệu Dịch vụ nàyđược sử dụng để giải quyết các vấn đề thương mại phức tạp bằng cáchsao chép, tải các tệp tin, gửi thông báo email để đáp ứng các sự kiện,cập nhật các kho dữ liệu, làm sạch và khai phá dữ liệu, quản lý các đốitượng SQL Server và dữ liệu Các gói (package) có thể làm việc độclập hoặc liên quan đến các gói khác nhằm đưa ra được nhu cầu cơ bảntrong thương mại
như các tệp dữ liệu XML, tệp tin phẳng (flat file), và các nguồn dữ
Trang 12liệu quan hệ, sau đó dữ liệu này được nạp vào trong một hoặc nhiềuđích.
dựng bên trong (built-in) và các công cụ để xây dựng các package
Cung cấp đầy đủ các công cụ và dịch vụ hỗ trợ việc tạo, triển khai vàquản lý các báo cáo của tổ chức, cũng như khả năng lập trình để mởrộng và lựa chọn chức năng báo cáo Dịch vụ này gồm tập đầy đủ cáccông cụ để tạo, quản lý và phân phối các báo cáo và các hàm API chophép người phát triển có thể tích hợp hoặc mở rộng công việc xử lý dữliệu và báo cáo trong ứng dụng
1.1.1 Kiến trúc hệ thống lưu trữ dữ liệu SQL Server
1.1.1.1 Cấu trúc page và extent
Đơn vị lưu trữ dữ liệu cơ bản trong SQL Server là trang (page) Khônggian đĩa được cấp phát cho một tệp dữ liệu (.mdf hoặc ndf) trong cơ sở dữliệu được chia thành các trang và được đánh số tuần tự từ 0 tới n Các thao tácvào/ra đĩa được thực hiện tại mức trang Trong SQL Server, kích thước củamỗi trang là 8 KB, do vậy cơ sở dữ liệu SQL Server có 128 trang cho mỗi
MB Mỗi trang bắt đầu với 96 byte header được dùng để lưu thông tin hệthống về trang đó Thông tin này bao gồm số trang, kiểu trang, số lượngkhông gian trống trong trang đó và ID đơn vị cấp phát của đối tượng sở hữutrang
Đơn vị cơ bản trong quản lý không gian đó là extent Một extent gồm 8trang liên tiếp hoặc 64 KB Nghĩa là các cơ sở dữ liệu SQL Server có 16extent cho mỗi MB
Để đảm bảo việc cấp phát không gian hiệu quả, SQL Server không cấpphát toàn bộ extent cho các bảng có kích thước dữ liệu nhỏ SQL Server có 2kiểu extent:
extent đó chỉ được sử dụng bởi đối tượng sở hữu nó
Trang 13 Các extent hỗn hợp được chia sẻ lên tới 8 đối tượng; mỗi trang (trong
số tám trang) của extent đó có thể được sở hữu bởi mỗi đối tượng khácnhau
Thường thì một bảng mới hoặc một chỉ số mới được cấp phát các trang từextent hỗn hợp này Khi kích thước của bảng hoặc chỉ số đó tăng lên đến 8trang, thì khi đó sẽ chuyển sang sử dụng các extent chuẩn cho lần cấp pháttiếp theo Nếu tạo chỉ số trên một bảng đang tồn tại mà có đủ dòng để tạo 8trang trong chỉ số đó thì tất cả việc cấp phát cho chỉ số đó là trong các extentchuẩn
Hình 1.1 Cấu trúc extent
1.1.1.2 Cấu trúc file và filegroup
SQL Server ánh xạ một cơ sở dữ liệu lên một tập tệp tin hệ điều hành.Thông tin về dữ liệu (data) và nhật lý (log) không bao giờ được đặt trongcùng một file, và các tệp này chỉ được sử dụng cho một cơ sở dữ liệu Nhómtệp tin (filegroup) được đặt tên cho một tập các tệp tin và được dùng để hỗ trợcho quản trị và sắp đặt dữ liệu, ví dụ như các thao tác sao lưu và khôi phục dữliệu
Cơ sở dữ liệu SQL Server có 3 kiểu tệp tin:
cơ sở dữ liệu đó và nó chỏ tới các tệp tin khác trong cơ sở dữ liệu.Mọi cơ sở dữ liệu có một tệp dữ liệu sơ cấp Phần mở rộng của tên tệpthường là (.mdf)
tệp dữ liệu, ngoại trừ tệp dữ liệu sơ cấp Một cơ sở dữ liệu có thể
Trang 14không có, hoặc cũng có thể nhiều tệp dữ liệu thứ cấp Phần mở rộngcủa tên của tệp dữ liệu thứ cấp thường là (.ndf).
được sử dụng để khôi phục cơ sở dữ liệu Mỗi cơ sở dữ liệu phải có ítnhất một tệp log hoặc cũng có thể có nhiều hơn một tệp log Phần mởrộng của tên cho tệp log thường là (.ldf)
SQL Server không bắt buộc các phần mở rộng tên tệp là mdf, ndf, ldf,nhưng các phần mở rộng này giúp chúng ta dễ dàng nhận dạng và sử dụng cáctệp
Trong SQL Server, vị trí của tất cả các tệp trong một cơ sở dữ liệu đượcghi trong tệp sơ cấp của cơ sở dữ liệu và trong cơ sở dữ liệu master SQLServer Database Engine thường xuyên sử dụng thông tin vị trí của tệp từ cơ
sở dữ liệu master
Tuy nhiên, Database Engine sử dụng thông tin vị trí tệp từ tệp sơ cấp đểkhởi tạo các lối vào lưu trữ tệp trong cơ sở dữ liệu master theo các tình huốngsau:
DATABASE với tùy chọn FOR ATTACH hoặc FOR
ATTACH_REBUILD_LOG
Các tệp tin trong SQL Server có thể tự động tăng kích thước theo kíchthước được chỉ định ban đầu Khi định nghĩa một tệp, chúng ta có thể xácđịnh một kích thước tăng Mỗi khi tệp được ghi đầy thì nó tăng kích thướccủa nó lên bằng kích thước tăng đã thiết lập Đây là một đặc tính đặc biệt hữuích giúp người quản trị giảm gánh nặng công việc quản trị, giám sát khônggian trống và cấp phát không gian thêm vào cho cơ sở dữ liệu
1.1.1.3 Cấu trúc nhật ký giao tác (transaction log)
Nhật ký giao tác trong SQL Server hoạt động logic ngay cả khi nhật kýgiao tác đó chỉ là một dãy các bản ghi nhật ký Mỗi bản ghi nhật ký được xácđịnh bởi giá trị số tuần tự Các bản ghi nhật ký được lưu trữ tuần tự theo như
Trang 15thứ tự chúng được tạo ra Mỗi bản ghi log chứa cả ID của giao tác đó Đối vớimỗi giao tác, tất cả các bản ghi nhật ký được liên kết thành một chuỗi sửdụng các con trỏ backward để có thể thực hiện nhanh việc rollback.
Khi thực hiện sửa đổi dữ liệu, các bản ghi nhật ký ghi lại thao tác logicđược thực hiện hoặc ghi lại các ảnh trước và sau khi dữ liệu được sửa đổi.Ảnh trước là bản sao của dữ liệu trước khi thao tác được thực hiện, ảnh sau làbản sao của dữ liệu sau khi thao tác thực hiện
Các bước để khôi phục thao tác phụ thuộc vào kiểu bản ghi log:
o Cuộn tới hoạt động logic phía trước
o Cuộn tới hoạt động logic phía sau
o Cuộn tới hoạt động phía trước, thì ảnh sau được áp dụng
o Cuộn tới hoạt động phía sau, thì ảnh trước được áp dụng
Một số kiểu hoạt động được ghi lại trong nhật ký giao tác, bao gồm:
đổi do các thủ tục lưu trữ hệ thống (system stored procedure) hoặc cáccâu lệnh định nghĩa dữ liệu (DDL - data definition language) cho bảngbất kỳ (bao gồm cả bảng hệ thống)
1.1.1.4 Cấu trúc bảng và cấu trúc dữ liệu chỉ số
Một bảng được chứa trong một hoặc nhiều vùng (partition) và mỗipartition chứa các dòng dữ liệu theo cấu trúc heap hoặc cấu trúc chỉ số được
bó cụm (clustered index) Các trang của heap và clustered index được quản lýtrong một hoặc nhiều đơn vị (unit) cấp phát, phụ thuộc vào kiểu cột trongdòng dữ liệu đó
Trang 16Các bảng trong SQL Server sử dụng một trong hai phương pháp tổ chứccác trang dữ liệu trong một partition.
Clustered index này được cài đặt là cấu trúc chỉ số B-tree, dùng đểviệc truy xuất nhanh các dòng dựa vào giá trị khóa clustered index
được lưu trữ theo thứ tự cụ thể và không có sắp xếp thứ tự cho cáctrong dữ liệu
Trang 171.1.2 Giải pháp nhân bản dữ liệu trong SQL Server
SQL Server replication là tập các công nghệ để sao chép, phân phối dữliệu và các đối tượng cơ sở dữ liệu từ một cơ sở dữ liệu này tới cơ sở dữ liệukhác, sau đó đồng bộ giữa các cơ sở dữ liệu này để duy trì tính nhất quán.Việc nhân bản có thể được chia thành 2 trường hợp là:
với người dùng di dộng, nơi các ứng dụng bán hàng và tích hợp dữliệu từ nhiều site
cải tiến tính mở rộng, sẵn sàng, lưu trữ dữ liệu, lập báo cáo và tích hợp
dữ liệu từ nhiều site và từ nhiều nguồn dữ liệu khác nhau
1.1.2.1 Thành phần trong mô hình nhân bản
Hình 1.3 Các thành phân cơ bản trong mô hình nhân bản
phục vụ cho các nơi khác thông qua nhân bản dữ liệu Publisher có thể
có 1 hoặc nhiều publication, mỗi publication sẽ định nghĩa một tập cácđối tượng có quan hệ logic và dữ liệu để nhân bản
trữ cho dữ liệu nhân bản được gắn kết với một hoặc nhiều Publishers.Mỗi Publisher được gắn kết với một cơ sở dữ liệu (đó là cơ sở dữ liệudistribution) tại Distributor Cơ sở dữ liệu distribution lưu dữ liệutrạng thái nhân bản, siêu dữ liệu (metadata) về publication và trong
Trang 18một số trường hợp đóng vai trò như là hàng đợi để dữ liệu di chuyển
từ Publisher đến các Subcriber Trong một số trường hợp, một thểhiện dịch vụ cơ sở dữ liệu có thể đóng vai trò vừa là Publisher vàDistributor, khi đó Distributor được gọi là Distributor cục bộ (localDistributor) Khi Publisher và Distributor được cấu hình trên các thểhiện dịch vụ cơ sở dữ liệu khác nhau thì khi đó Distributor được gọi làDistributor từ xa (remote Distributor)
bản Một Subcriber có thể nhận dữ liệu từ nhiều Publishers vàPublications Phụ thuộc vào các kiểu nhân bản được chọn màSubcriber có thể đưa các thay đổi dữ liệu tới Publisher hoặc tạo bảnsao dữ liệu đó chuyển tới Subcriber khác
chứa trong một publication Một publication có thể bao gồm các loạiarticle khác nhau như bảng, views, thủ tục lưu trữ và các đối tượngkhác Khi bảng được công bố là article, thì các bộ lọc có thể được sửdụng để hạn chế các cột, dòng của dữ liệu được gửi sang choSubcriber
Việc nhóm nhiều article vào trong một publication sẽ làm đơn giảnhóa việc xác định tập các đối tượng cơ sở dữ liệu có quan hệ và dữliệu được nhân bản
Subcriber Subcription định nghĩa những gì mà publication sẽ đượcnhận, được nhận tại đâu và nhận khi nào Có hai kiếu subcription:
o Push subcription: Publisher sẽ truyền các thay đổi tới Subcriber
mà không có một yêu cầu nào từ Subcriber Các thay đổi đượctruyền về Subcriber theo nhu cầu, liên tục hoặc đã được lập lịch
o Pull subcription: Subcriber yêu cầu các thay đổi trên Publisher.Pull Subcription cho phép người dùng xác định khi nào các thayđổi dữ liệu được đồng bộ
1.1.2.2 Phương pháp nhân bản
Microsoft SQL Server cung cấp ba phương pháp nhân bản:
Trang 19 Phương pháp nhân bản Snapshot (Snapshot replication):
Phương pháp nhân bản này phân phối dữ liệu một cách chính xác như nóhiện diện tại thời điểm xác định và không giám sát các cập nhật tới dữ liệu.Đây là một giải pháp rất hiệu quả đối với việc nhân bản những dữ liệu ít bịthay đổi Khi sự đồng bộ hoá xảy ra, toàn bộ snapshot được sinh ra và gửi tớiSubscribers
Quá trình nhân bản snapshot được mô tả trong hình sau:
Hình 1.4: Mô hình nhân bản Snapshot
Nhân bản snapshot được thực hiện bởi Snapshot Agent và DistributionAgent Snapshot Agent chuẩn bị các file chứa sơ đồ và dữ liệu của các bảng
và đối tượng cơ sở dữ liệu cần công bố, lưu trữ các file này trong thư mụcsnapshot và ghi lại các công việc đồng bộ hoá trong cơ sở dữ liệu phân phốitrên Distributor Ngầm định, thư mục snapshot được đặt trên Distributor,nhưng chúng ta có thể thiết lập lại Distribution Agent chuyển snapshot trongcác bảng cơ sở dữ liệu phân phối tới các bảng đích ở tại Subscribers
Trang 20Với kiểu nhân bản này snapshot ban đầu được áp dụng tại Subscribers vàsau đó khi các thay đổi dữ liệu xảy ra tại Publisher thì các giao tác được lấy
về và thực thi tại Subscribers Quá trình nhân bản này được mô tả trong hìnhsau:
Hình 1.5 Mô hình nhân bản Transaction
Nhân bản giao tác được thực hiện bởi Snapshot Agent, Log Reader Agent,and Distribution Agent Snapshot Agent chuẩn bị các file chứa sơ đồ và dữliệu của các bảng và đối tượng cơ sở dữ liệu cần công bố, lưu trữ các file nàytrong thư mục snapshot và ghi lại các công việc đồng bộ hoá trong cơ sở dữliệu phân phối trên Distributor Log Reader Agent giám sát nhật ký giao táccủa từng cơ sở dữ liệu được cấu hình cho phương pháp này và sao chép cácgiao tác được đánh dấu cho việc nhân bản từ nhật ký giao tác tới cơ sở dữ liệuphân phối Distribution Agent chuyển các công việc snapshot ban đầu và cácgiao tác được lưu trong các bảng cơ sở dữ liệu phân phối tới Subscribers
Trang 21Kiểu nhân bản kết hợp này là quá trình phân phối dữ liệu từ Publisher tớiSubscribers, cho phép Publisher và Subscribers thực hiện các cập nhật khi kếtnối hoặc không có kết nối và sau đó hợp nhất các kết nối site khi chúng đượckết nối với nhau Quá trình nhân bản này được mô tả trong hình sau:
Hình 1.6 Mô hình nhân bản Merge
Merge replication được thực hiện bởi Snapshot Agent và Merge Agent.Snapshot Agent chuẩn bị các file chứa sơ đồ và dữ liệu của các bảng và đốitượng cơ sở dữ liệu cần công bố, lưu trữ các file này trong thư mục snapshot,
và chèn các thao tác đồng bộ hoá trong cơ sở dữ liệu công bố (publication).Snapshot Agent cũng tạo ra các thủ tục lưu trữ, các trigger và các bảng hệthống dành cho nhân bản Merge Agent áp dụng các thao tác snapshot banđầu được lưu trong các bảng cơ sở dữ liệu công bố đối với Subscriber Nócũng hợp nhất các thay đổi dữ liệu mà xảy ra tại Publisher và Subscribers saukhi snapshot ban đầu được tạo và làm tương thích các xung đột dựa trên cácquy tắc mà ta cấu hình Vai trò của Distributor trong phương pháp nhân bảnnày là rất hạn chế, vì vậy việc sử dụng Distributor cục bộ (trên cùng mộtserver với Publisher) là tối ưu nhất Distribution Agent không được sử dụng
Trang 22trong toàn bộ quá trình nhân bản và cơ sở dữ liệu phân phối trên Distributorchỉ chứa các thông tin về quá trình nhân bản.
1.2 KIẾN TRÚC AN NINH AN TOÀN TRONG HỆ QUẢN TRỊ CƠ SỞ
DỮ LIỆU MICROSOFT SQL
1.2.1 Cấu trúc hệ thống bảo vệ
Cấu trúc hệ thống bảo vệ của Microsoft SQL Server dựa trên những người
sử dụng (users) và các nhóm người sử dụng (groups of users) Mô hình saucho thấy người sử dụng và các nhóm người sử dụng trong MicrosoftWindows NT 4.0 và Windows 2000 có thể ánh xạ tới các tài khoản bí mậttrong Microsoft SQL Server như thế nào và Microsoft SQL Server có thểquản lý các tài khoản bí mật một cách độc lập đối với các tài khoản trongMicrosoft Windows NT4.0 và Windows 2000 như thế nào
Nhóm local CORPUSERS có hai người sử dụng và một nhóm globalMktg, nhóm này có hai người sử dụng, SQL Server cho phép các nhóm local
và global của Windows NT 4.0 và Windows 2000 được sử dụng trực tiếp đểthiết lập nên các tài khoản người sử dụng của SQL Server Hơn nữa người sửdụng Windows NT 4.0 là Fred và Jerry, mà không thuộc một nhóm người sửdụng nào trong Windows NT 4.0, được thêm vào SQL Server hoặc trực tiếpnhư là người sử dụng Windows NT 4.0 (ví dụ Fred) hoặc như là người sửdụng của SQL Server (như Jerry)
SQL Server mở rộng mô hình này cùng với việc sử dụng các role Cácrole là các nhóm người sử dụng được tổ chức cho mục đích quản trị, tương tựnhư các nhóm của Windows NT 4.0 hoặc Windows 2000, nhưng các role nàykhông được tạo trong SQL khi mà các nhóm tương ứng của Windows NT 4.0hoặc Windows 2000 chưa tồn tại Ví dụ, role Managers chứa nhóm globalMktg của Windows NT 4.0 và những người sử dụng của Windows NT 4.0 làFrank và Fred
SQL Server cũng cung cấp khả năng bảo vệ ở mức ứng dụng thông quaviệc sử dụng các role ứng dụng cơ sở dữ liệu cá nhân (database applicationrole)
Trang 231.2.2 Các mức bảo vệ
Để làm việc với Microsoft SQL Server người sử dụng phải vượt qua đượchai giai đoạn bảo vệ xác thực và quyền hạn được cấp
và chỉ kiểm tra khả năng kết nối tới Microsoft SQL Server của người sửdụng Nếu quá trình xác thực thành công, người sử dụng kết nối tớiMicrosoft SQL Server
người sử dụng cần các quyền hạn truy nhập tới cơ sở dữ liệu, mà đượcthực hiện bởi việc gán quyền truy nhập tới tài khoản người sử dụngtrong mỗi cơ sở dữ liệu, được ánh xạ tới việc đăng nhập của người sửdụng Giai đoạn này kiểm soát các thao tác của người sử dụng đượccho phép thực hiện trên cơ sở dữ liệu SQL Server
Các chế độ xác thực:
Microsoft SQL Server có thể thực hiện hai chế độ xác thực:
Chế độ xác thực của Windows (Windows Authentication).
Chế độ xác thực của Windows cho phép người sử dụng kết nối thông quatài khoản người sử dụng của Microsoft Windows NT 4.0 hoặc Windows
2000 Khi người sử dụng kết nối thông qua tài khoản người sử dụng củaMicrosoft Windows NT 4.0 hoặc Windows 2000, SQL Server xác nhận lạitên tài khoản và mật khẩu của người sử dụng này bằng cách gọi ngược lại tớiWindows NT 4.0 hoặc Windows 2000
Chế độ xác thực hỗn hợp – Mixed Mode (Windows Authentication
và SQL Server Authentication)
Chế độ này cho phép người sử dụng kết nối tới SQL Server sử dụng hoặcchế độ xác thực của Windows hoặc chế độ xác thực của SQL Server Nhữngngười sử dụng mà kết nối thông qua tài khoản của Windows có thể thiết lậpđược các kết nối an toàn hoặc trong chế độ xác thực của Windows hoặc trongchế độ xác thực hỗn hợp
Khi người sử dụng kết nối với tên đăng nhập và mật khẩu được xác định
từ kết nối không an toàn, SQL Server thực hiện việc xác thực của riêng mìnhbằng cách kiểm tra xem tài khoản đăng nhập SQL Server đã được thiết lập
Trang 24chưa và mật khẩu đã được xác định trùng với mật khẩu đã được ghi lại trước
đó hay không Nếu SQL Server không có tập hợp tài khoản đăng nhập, quátrình xác thực không thành công và người sử dụng sẽ nhận được thông báolỗi
Chế độ xác thực SQL Server được cung cấp để tương thích với các ứngdụng được viết cho SQL Server phiên bản 7.0 hoặc trước đó mà có thể đòi hỏiviệc sử dụng các tài khoản đăng nhập SQL Server và các mật khẩu Hơn nữachế độ xác thực SQL Server cần thiết khi SQL Server chạy trên Windows 98
vì chế độ xác thực của Windows không hỗ trợ trên Windows 98 Như vậy,SQL Server sử dụng chế độ xác thực hỗn hợp trên Windows 98 (nhưng chỉ hỗtrợ chế độ xác thực của SQL Server)
Kiểm tra quyền truy cập:
Sau khi người sử dụng đã được xác thực và được phép đăng nhập vàoMicrosoft SQL Server, một tài khoản độc lập của người sử dụng được yêu cầucho mỗi cơ sở dữ liệu mà người sử dụng cần phải truy nhập Việc yêu cầu tàikhoản người sử dụng trong mỗi cơ sở dữ liệu nhằm ngăn chặn người sử dụngkết nối tới SQL Server và truy nhập vào tất cả các cơ sở dữ liệu trên server
Ví dụ, nếu server chứa cơ sở dữ liệu personnel và cơ sở dữ liệu recruiting, người sử dụng có thể truy nhập vào cơ sở dữ liệu recruiting nhưng không được truy nhập vào cơ sở dữ liệu personnel, sẽ có tài khoản được tạo ra chỉ ở trong cơ sở dữ liệu recruiting
Tài khoản người sử dụng được dùng để áp dụng cơ chế phân quyền đốivới các đối tượng (ví dụ, các bảng, các view và các store procedure) trong cơ
sở dữ liệu này Tài khoản người sử dụng này có thể được ánh xạ từ các tàikhoản người sử dụng Microsoft Windows NT 4.0 hoặc Windows 2000, cácnhóm người sử dụng Windows NT 4.0 hoặc Windows 2000 trong đó người sửdụng là thành viên hoặc các tài khoản đăng nhập của SQL Server Nếu không
có tài khoản được ánh xạ trực tiếp, người sử dụng có thể được phép làm việc
trong cơ sở dữ liệu dưới tài khoản guest, nếu tài khoản này tồn tại Các thao
tác mà người sử dụng được phép thực hiện được kiểm soát bởi các quyền cấpcho tài khoản người sử dụng mà từ tài khoản này người sử dụng có được truynhập tới cơ sở dữ liệu
Trang 25SQL Server nhận các lệnh từ người sử dụng có quyền truy nhập tới cơ sở
dữ liệu Tất cả các thao tác người sử dụng thực hiện trong cơ sở dữ liệu đượctruyền tới SQL Server thông qua các câu lệnh Transact-SQL Khi SQL Servernhận được câu lệnh Transact-SQL, nó đảm bảo người sử dụng có quyền thựchiện câu lệnh trong cơ sở dữ liệu Nếu người sử dụng không có quyền thựchiện câu lệnh hoặc quyền truy nhập đối tượng được sử dụng bởi câu lệnh,SQL Server trả về lỗi phân quyền
1.3 MÃ HÓA CƠ SỞ DỮ LIỆU TRONG MICROSOFT SQL
1.3.1 Mã hóa dữ liệu trong suốt (TDE – Transparent Data Encrryption)
Mã hóa dữ liệu trong suốt (TDE – Transparent Data Encryption) được sửdụng để mã hóa và giải mã các tệp dữ liệu và tệp nhật ký (log) Phép mã hóa
sử dụng khóa mã cơ sở dữ liệu (DEK – Database Encryption Key), khóa nàyđược lưu trong bản ghi khởi động cơ sở dữ liệu (database boot record) đểcung cấp khả năng sẵn sàng trong quá trình khôi phục Khóa này là khóa phiđối xứng, được an toàn bởi một chứng chỉ được lưu trong cơ sở dữ liệumaster TDE là một công nghệ được sử dụng để giải quyết các vấn đề an toàntrên thiết bị lưu dữ liệu bằng cách mã hóa các cơ sở dữ liệu trên đĩa cứng vàtrên thiết bị sao lưu Microsoft SQL Server 2008 áp dụng công nghệ này để
mã hóa nội dung cơ sở dữ liệu TDE mã hóa dữ liệu trước khi dữ liệu đượcghi ra đĩa và giải mã dữ liệu trước khi dữ liệu được trả về cho ứng dụng Quátrình mã hóa, giải mã được thực hiện tại lớp SQL, hoàn toàn trong suốt vớiứng dụng và người dùng
TDE được sử dụng để ngăn cặn việc truy cập bất hợp pháp tới cơ sở dữliệu bí mật, làm giảm chi phí quản lý người dùng, và thuận tiện trong việcquản lý tính bí mật Ngày nay TDE có thể là lựa chọn tốt nhất để mã hóa đặcbiệt khi dữ liệu có kích thước lớn, đáp ứng yêu cầu điều chỉnh hoặc các chuẩn
an toàn dữ liệu
TDE có ba lợi ích quan trọng:
cũ Ngày nay các quyết định kinh doanh được đưa ra từ thông tin đượcthu thập trong quá trình khai phá hàng terabyte dữ liệu Bảo vệ thôngtin nhạy cảm là chìa khóa để duy trì khả năng cạnh tranh kinh doanh
Trang 26Thông tin có giá trị có thể được gán cho mỗi người đã được nhận dạng
và xác thực một cách chính xác Kiểm tra định danh người dùng liênquan đến việc thu thập nhiều thông tin hơn so với mức bình thường làtên người dùng và mật khẩu
người gửi là đúng và một cột, bảng, không gian bảng hoặc tệp tinkhông bị sửa đổi Việc mã hóa có thể được sử dụng để cung cấp việcxác nhận tính hợp lệ bằng cách đưa ra chứng chỉ số của thông tin đượcchứa trong cơ sở dữ liệu Nhờ vào việc nhận tính hợp lệ, người dùng
đó có thể chắc chắn rằng dữ liệu này đến từ một người tin cậy và nộidung dữ liệu đó không bị sửa đổi
Bảo vệ dữ liệu: Hầu hết các ứng dụng được sử dụng phổ biến nhất về mãhóa trong suốt là trong các lĩnh vực bảo vệ dữ liệu Đối với người chủ kinhdoanh, thông tin này là vô giá đối với hoạt động sản xuất Do đó việc bảo vệthông tin này là rất quan trọng
1.3.2 Tìm hiểu cơ bản về TDE trong SQL Server 2008
bộ csdl ở nơi lưu trữ mà không làm ảnh hưởng đến các ứng dụng đang tồn tại.Cài đặt mã hóa trong một csdl truyền thống liên quan đến những thay đổi ứngdụng phức tạp như sửa đổi các table schema, loại bỏ chức năng và làm giảmđáng kể hiệu năng Ví dụ, để sử dụng mã hóa trong Microsoft SQLServer 2005, kiểu dữ liệu cột phải được thay đổi thành kiểu varbinary, việctìm kiếm trong phạm vi và tìm kiếm bằng là không cho phép và ứng dụng đóphải gọi các hàm xây dựng sẵn trong SQL Server (hoặc các thủ tục lưu trữ,hoặc các views có sử dụng tự động các hàm có sẵn này) để thực hiện mã hóa
và giải mã, tất cả các hàm này có hiệu năng truy vấn chậm Các vấn đề nàykhông phải là chỉ duy nhất cho SQL Server; tất cả các hệ quản trị cơ sở dữliệu khác đều gặp phải các giới hạn tượng tự Các cách sắp xếp hệ thống theoyêu cầu của khách hàng thường được sử dụng để giải quyết vấn đề tìm kiếmbằng nhâu và tìm kiếm trong khoảng thường không thể áp dụng được hoàntoàn
Trang 27Ngay cả các thành phần cơ sở dữ liệu cơ bản như tạo chỉ số hoặc sử dụngcác khóa ngoại thường không làm việc với lược đồ mã hóa mức ô hoặc mứccột bởi vì việc sử dụng các đặc tính này vốn đã làm lộ thông tin TDE giảiquyết các vấn đề này bằng cách đơn giản là mã hóa mọi thứ Do đó, tất cả cáckiểu dữ liệu, khóa, chỉ số, … có thể được dùng đầy đủ khả năng của chúng
mà không quên đi tính an toàn hoặc rò rit thông tin trên đĩa Trong khai mã
được sử dụng cho các lý do tương tự như TDE – chúng cung cấp cách bảo vệtrên phạm vi tương tự và trong suốt với người dùng
1.3.2.1 Hệ thống phân cấp khóa mã trong TDE
Gốc của cây mã hóa là Windows Data Protection API (DPAPI), nó antoàn kiến trúc khóa tại mức máy và được sử dụng để bảo vệ khóa SMK(service master key) cho thể hiện dịch vụ cơ sở dữ liệu (database serverinstance) đó Khóa SMK bảo vệ khóa DMK (database master key), DMK nàyđược lưu ở mức cơ sở dữ liệu người dùng và nó dùng để bảo vệ các chứng chỉ
và khóa phi đối xứng Các khóa này lần lượt bảo vệ khóa đối xứng, khóa đốixứng là khóa dùng để bảo vệ dữ liệu Sự khác biệt chính là khi sử dụng TDE,DMK và chứng chỉ phải được lưu trữ trong cơ sở dữ liệu master hơn là trong
cơ sở dữ liệu người dùng Một khóa mới, chỉ được sử dụng bởi TDE và đượcbiết đến là khóa DEK (database encryption key), được tạo và được lưu trong
cơ sở dữ liệu người dùng
Kiến trúc này cho phép server tự động mở các khóa và giải mã dữ liệu.Trong TDE, toàn bộ chuỗi từ DPAPI xuống đến DEK phải được duy trì đếnmức server đó có thể cung cấp việc truy cập tự động tới các tệp được bảo vệbởi TDE
Trang 28Hình 1.7 Kiến trúc phân cấp khóa TDE.
1.3.2.2 Phương pháp thiết lập TDE
Để cho phép TDE, chúng ta phải có các quyền thông thường được gắn kếtvới thao tác tạo một khóa chủ cơ sở dữ liệu (DMK – database master key) và
các chứng chỉ trong cơ sở dữ liệu master Chúng ta phải có các quyền
CONTROL trên cơ sở dữ liệu người dùng
Sau đây là các bước thực hiện trong cơ sở dữ liệu master:
cơ sở dữ liệu master Đảm bảo rằng DMK được mã hóa bởi khóa chủdịch vụ (SMK)
Sử dụng câu lện SQL sau để tạo khóa:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘some password’;
khóa mã cơ sở dữ liệu (DEK) Để đạt được sự toàn cao nhất, chúng tanên tạo một chứng chỉ mới chỉ có chức năng dùng để bảo vệ khóaDEK Đảm bảo rằng chứng chỉ này được bảo vệ bởi DMK
Mức hệ điều hành
Mức thể hiện SQL Server 2008
Cơ sở dữ liệu master
Cơ sở dữ liệu người dùng
Khóa chủ dịch vụ
(Service Master Key)
Khóa chủ cơ sở dữ liệu
(Database Master Key)
Chứng chỉ lưu trong cơ sở dữ liệu
master (Database Master Key)
Khóa mã cơ sở dữ liệu
(Database Encryption Key)
Cơ sở dữ liệu master
DP API
(Data Protect API)
Trang 29Sử dụng câu lệnh SQL sau để tạo chứng chỉ:
CREATE CERTIFICATE tdeCert WITH SUBJECT = ‘TDE Certificate’;
giữ nó tại một nơi an toàn Khóa riêng được lưu trong một tệp tinriêng biệt Đảm bảo rằng giữ lại các bản sao của chứng chỉ khi dữ liệu
có thể bị mất
BACKUP CERTIFICATE tdeCert TO FILE = ‘path_to_file’
WITH PRIVATE KEY ( FILE = ‘path_to_private_key_file’, ENCRYPTION BY PASSWORD = ‘cert password’);
truyền
Thực hiện các bước tiếp theo trong cơ sở dữ liệu người dùng:
Chứng chỉ này được tham chiếu như là một chứng chỉ server để phânbiệt nó với các chứng chỉ khác mà được lưu trong cơ sở dữ liệu ngườidùng
Sử dụng câu lệnh SQL sau để tạo khóa DEK:
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE tdeCert
ALTER DATABASE myDatabase SET ENCRYPTION ON
Để giám sát quá trình này, thực hiện truy vấn trên view (Yêu cầu cóquyền VIEW SERVER STATE):
sys.dm_database_encryption_keys
Trang 30Ví dụ câu lệnh SQL:
SELECT db_name(database_id), encryption_state
FROM sys.dm_database_encryption_keys 1.3.2.3 Phương pháp dữ liệu được mã hóa
Khi TDE được cho phép (hoặc bị cấm), cơ sở dữ liệu được đánh dấu là
mã hóa trong view sys.databases và trạng thái DEK được thiết lập là
“Encryption In Progress” Server khởi động một luồng (thread), thực hiện
quét tất cả các tệp tin cơ sở dữ liệu và mã hóa chúng (hoặc giải mã chúng nếunhư TDE đang bị cấm) Trong khi câu lệnh DDL thực thi, một khóa cập nhậtxuất hiện trên cơ sở dữ liệu đó Bộ quét mã hóa, không chạy đồng thời với cáclệnh DDL, tạo một khóa chia sẻ Các hoạt động bình thướng khác mà khôngxung đột với các khóa này có thể được xử lý Các hoạt động bị ngăn chặn baogồm sửa đổi cấu trúc file, gỡ cơ sở dữ liệu
Trong khi cơ sở dữ liệu ghi dữ liệu từ pool đệm ra đĩa thì dữ liệu này được
mã hóa Khi bộ quét mã hóa hoàn thành, trạng thái DEK được thiết lập làEncrypted Tại thời điểm này tất cả các tệp cơ sở dữ liệu trên đĩa được mã hóa
và tệp cơ sở dữ liệu và nhật ký khi ghi ra đĩa được mã hóa Các thuật toán mãhóa được hỗ trợ là AES với 128 bit, 192 bit, 256 bit khóa hoặc Triple DES
Dữ liệu được mã hóa trong chế độ mã hóa CBC
1.3.2.4 Dạng thông tin mà TDE có thể mã hóa
TDE hoạt động tại mức I/O thông qua pool đệm Do vậy, bất kỳ dữ liệuđược ghi vào các tệp cơ sở dữ liệu (*.mdf) được mã hóa Các Snapshot và cácbản sao cũng được TDE hỗ trợ và chúng cũng được mã hóa trên đĩa Tuynhiên dữ liệu trong khi sử dụng không được mã hóa, bởi vì TDE không cungcấp việc bảo vệ mức bộ nhớ hoặc mức trên đường truyền Nhật ký giao táccũng được bảo vệ
Đối với dữ liệu trong sử dụng, tất cả các trang được giải mã khi chúngđược đọc và lưu trong các pool đệm và tồn tại dạng rõ trong bộ nhớ Hệ điềuhành có thể phân trang dữ liệu ra ngoài bộ nhớ giống như phần quản lý bộnhớ Trong quá trình này, dữ liệu được giải mã có thể được ghi ra đĩa.Windows và SQL Server có thể cấu hình để ngăn chặn việc này tuy nhiên
Trang 31hiệu năng sẽ bị giảm Dữ liệu trong khi truyền không được bảo vệ bởi vìthông tin thực sự đã được giải mã trước khi dữ liệu được truyền SSL có thểđược thiết lập để bảo vệ giao tiếp giữa server và clients.
Khi tệp trang cơ sở dữ liệu được ghi ra đĩa thì các phần header là khôngđược mã hóa bởi vì thông tin này là cần thiết để trang đó được tải lại Phầnheader này gồm: mức tương thích của cơ sở dữ liệu, phiên bản cơ sở dữ liệu,trạng thái phản ánh,… Bất kỳ dữ liệu quan trọng (như DEK) được mã hóatrước khi được chèn vào header Header bao gồm kiểm tra hỏng dữ liệu(CRC) Người dùng có thể có một checksum trên bản rõ và một checksumtrên bản mã Checksum này chỉ để phát hiện hỏng dữ liệu (kiểm tra xem dữliệu có thể đọc được) và không toàn vẹn dữ liệu (kiểm tra xem dữ liệu có bịsửa đổi) Tất cả dữ liệu người dùng khác được lưu trong trang cơ sở dữ liệu làđều được mã hóa, bao gồm các phần dữ liệu chưa sử dụng (hoặc các phần dữliệu đã bị xóa trước đó) để tránh làm rò rỉ thông tin
Trang 32CHƯƠNG II: TÌM HIỂU VỀ MỘT SỐ KỸ THUẬT TẤN
CÔNG SQL INJECTION2.1 MỘT SỐ TẤN CÔNG CƠ SỞ DỮ LIỆU PHỔ BIẾN
Một số tấn công vào cơ sở dữ liệu thường thấy:
ứng dụng) được gán các quyền cơ sở dữ liệu vượt quá các yêu cầu củachức năng công việc thì các quyền này có thể bị lạm dụng để thựchiện truy cập tới thông tin bí mật Ví dụ, công việc người quản lý ởtrường đại học chỉ có yêu cầu xem thông tin về các sinh viên Nếu nhưngười này được gán quyền quá mức cần thiết – đó là quyền cập nhật,thì họ có thể thay đổi điểm số Giải pháp giải quyết vấn đề này là điềukhiển truy cập mức truy vấn Điều khiển truy cập mức truy vấn sẽ hạnchế tối thiểu các quyền khi thực hiện yêu cầu và dữ liệu
pháp cho các mục đích trái phép Giải pháp giải quyết vấn đề này làcác chính sách điều khiển truy cập không chỉ áp dụng cho dữ liệu nào
có thể truy cập, mà còn áp dụng cho cách thực truy cập dữ liệu dữ liệuđó
lỗ hổng trong phần mềm quản trị cơ sở dữ liệu để chuyển đổi cácquyền truy cập mức thấp thành các quyền truy cập mức cao Giải phápgiải quyết vấn đề này là kết hợp giữa điều khiển truy cập mức truy vấnvới các hệ thống ngăn chặn truy nhập (IPS)
hổng trong hệ điều hành để truy cập và thay đổi dữ liệu trái phép Ví
dụ, sâu Blaster lấy ưu thế của các lỗ hổng trong Windows 2000 để tấncông lên các server mục tiêu
là người đã đưa ra các lợi thế cho các lỗ hổng trong các ứng dụngWeb và thủ tục lưu trữ, để gửi các câu truy vấn trái phép với các
Trang 33quyền đã được nâng cao Sử dụng SQL Injection, kẻ tấn công có thểđạt được việc truy cập không hạn chế tới toàn bộ cơ sở dữ liệu.
(audit) còn yếu trong việc mô tả, ngăn cản, phát hiện, pháp lý và khôiphục Hầu hết các giải pháp kiểm tra hệ quản trị cơ sở dữ liệu đểuthiếu tính chất cần thiết Ví dụ các sản phẩm hiếm khi ghi lại nhật ký
mà ứng dụng truy cập đến cơ sở dữ liệu, địa chỉ IP nguồn và các truyvấn lỗi
bộ đệm, sửa đổi làm sai lệch dữ liệu, làm ngập lụt mạng Tuy nhiêntrong môi trường cơ sở dữ liệu, kỹ thuật làm tiêu thụ tài nguyênthường bị bỏ quên
truy cập dữ liệu trái phép Ví dụ con sâu SQL Slammer nhận các ưuthế của lỗ hổng giao thức Microsoft SQL Server để thực hiện mã tấncông trên các server cơ sở dữ liệu Các tấn công giao thức có thể đượcchống bằng cách phân tích và xác nhận các giao tiếp SQL để đảm bảochúng là không khác thường
chiếm lấy được định danh của người dùng cơ sở dữ liệu
quan đến lấy việc trộm các bằng từ và đĩa cứng chứa bản sao cơ sở dữliệu Do vậy tất cả các bản sao này cần phải được mã hóa Trong thực
tế, một số nhà chế tạo đã đề nghị trong tương lai các sản phẩm có thểkhông hỗ trợ việc tạo các bản sao mà không được mã hóa
2.2 MỘT SỐ KỸ THUẬT TẤN CÔNG SQL INJECTION
2.2.1 Khái niệm về tấn SQL injection:
Một tấn công SQL injection (SQLIA - SQL Injection Attack) bao gồmviệc chèn (insertion) hoặc “tiêm” (injection) một truy vấn SQL thông qua dữliệu đầu vào từ client đến ứng dụng Khi việc khai thác SQL injection thànhcông thì kẻ tấn công có thể đọc được dữ liệu nhạy cảm từ cơ sở dữ liệu, sửa
Trang 34đổi dữ liệu trong cơ sở dữ liệu (chèn, cập nhật, xóa), thực hiện các thao tácquản trị trên cơ sở dữ liệu (như tắt hệ quản trị cơ sở dữ liệu), khám phá nộidung của các tệp tin được lưu trong cơ sở dữ liệu, và trong một số trường hợpthực hiện các lệnh của hệ điều hành Các tấn công SQLIA là một dạng củakiểu tấn công “tiêm”, trong đó các lệnh SQL được chèn vào dữ liệu đầu vào
để thực hiện các lệnh SQL đã được chuẩn bị trước
2.2.2 Các cơ chế thực hiện tiêm
Các câu lệnh SQL nguy hiểm có thể được đưa vào trong ứng dụng dễ bịtấn công bằng cách sử dụng nhiều cơ chế đầu vào khác nhau Dưới đây trìnhbày các cơ chế phổ biến
2.2.2.1 Kỹ thuật tiêm thông qua đầu vào người dùng
Trong trường hợp này, kẻ tấn công tiêm các lệnh SQL bằng cách cung cấpđầu vào đã bị thay đổi theo cách thích hợp Tùy vào môi trường triển khai,ứng dụng Web có thể đọc dữ liệu đầu vào Trong hầu hết các SQLIA mà mụctiêu là các ứng dụng Web, dữ liệu đầu vào được lấy từ các đệ trình form màđược gửi tới ứng dụng Web thông qua các yêu cầu HTTP GET hoặc POST.Các ứng dụng Web có thể truy cập tới dữ liệu đầu vào này giống như cáchtruy cập tới các biến trong môi trường đó
2.2.2.2 Kỹ thuật tiêm thông qua các coockie
Các coockie là các tệp tin có chứa thông tin trạng thái được ứng dụngWeb tạo ra và được lưu trên máy client Khi một máy client quay trở lại ứngdụng Web thì các cookies đó có thể được dùng để khôi phục lại thông tintrạng thái của client Bởi vì client đã kiểm soát được nơi lưu trữ cookie, chonên một client hiểm độc có thể can thiệp vào nội dung của cookie Nếu nhưứng dụng Web sử dụng nội dung các cookie này để xây dựng nên các truy vấnSQL, thì kẻ tấn công có thể dễ dàng thực hiện một tấn công bằng cách nhúng
nó vào trong cookie
2.2.2.3 Kỹ thuật tiêm thông qua các biến môi trường
Các biến server là tập các biến lưu các header HTTP, header mạng và cácbiến môi trường Ứng dụng Web sử dụng các biến server này theo một sốcách, như thống kê số lần đăng nhập và xác định xu hướng Nếu các biến này
Trang 35đăng nhập tới cơ sở dữ liệu mà không được kiểm soát, điều này có thể tạo các
lỗ hổng cho tấn công SQL Injection Bởi vì kẻ tấn công có thể giả mạo các giátrị đó, các giá trị này được đặt trong các header HTTP và header mạng Chúng
có thể khai thác điểm yếu này bằng cách đặt trực tiếp một SQLIA vào trongcác header này Khi truy vấn lưu lại biến server vào cơ sở dữ liệu thì ngay sau
đó tấn công trong header bị giả mạo được kích hoạt
2.2.2.4 Kỹ thuật tiêm bậc hai
Trong các kỹ thuật tiêm bậc hai, kẻ tấn công thêm dữ liệu đầu vào nguyhại tới hệ thông hoặc cơ sở dữ liệu, để khi đầu vào đó được sử dụng ở lần sauthì sẽ gián tiếp kích hoạt SQLIA Mục tiêu của kiểu tấn công này khác so vớikiểu tấn công tiêm thông thường (tiêm bậc nhất) Kỹ thuật tiêm bậc hai khônggây ra tấn công đó khi dữ liệu đầu vào nguy hại đó tới được cơ sở dữ liệu lầnđầu tiên Thay vì đó kẻ tấn công biết được tri thức về vị trí của dữ liệu đầuvào sẽ được sử dụng tiếp theo và tấn công được thực hiện đồng thời trong quátrình người dùng làm việc Dưới đây trình bày một ví dụ tấn công tiêm bậchai Trong ví dụ này, người dùng đăng ký trên website sử dụng một tên ngườidùng đã bị thay đổi, ví dụ “admin’ ” Tại thời điểm người dùng thay đổi mậtkhẩu và toán tử liên quan đến việc kiểm tra xem người dùng có biết mật khẩuhiện tại và thay đổi mật khẩu nếu như việc kiểm tra này thành công Để thựchiện được công việc này, ứng dụng Web có thể xây dựng câu truy vấn nhưsau:
queryString="UPDATE users SET password=’" + newPassword +
"’ WHERE userName=’" + userName + "’ AND password=’" + oldPassword + "’"
newPassword và oldPassword là mật khẩu mới và mật khẩu cũ, và userName là tên của người dùng hiện tại Giả sử newPassword và oldPassword là “newpwd” và “oldpwd”, thì truy vấn được gửi tới cơ sở
dữ liệu là:
UPDATE users SET password=’newpwd’
WHERE userName= ’admin’ ’ AND password=’oldpwd’
Trang 36Do “ ” là toán tử chú thích SQL, mọi thứ sau nó sẽ bị cơ sở dữ liệu bỏqua Bởi vậy, kết quả của câu truy vấn là cơ sở dữ liệu thay đổi mật khẩu củangười quản trị thành giá trị mà kẻ tấn công chỉ định.
Kỹ thuật tiêm bậc hai có thể là khó phát hiện và ngăn chặn bởi vì điểmtiêm là khác so với điểm mà tấn công thực sự xuất hiện Người phát triểnhoàn toàn có thể tránh, kiểm tra kiểu, và lọc dữ liệu đầu vào và khẳng địnhđầu vào này là an toàn Tuy nhiên khi dữ liệu này được sử dụng trong ngữcảnh khác, hoặc để xây dựng kiểu truy vấn khác thì dữ liệu đã được làm sạchtrước đó cũng có thể gây ra tấn công injection
2.2.3 Các mục tiêu khi thực hiện tấn công SQL injection
Các tấn công có thể được mô tả cụ thể hóa dựa vào mục đích của kẻ tấncông Dưới đây là một số mục tiêu tấn công
Xác định các tham số có thể bị tiêm
Kẻ tấn công muốn thăm dò một ứng dụng Web để khám phá các tham số
và các trường dữ liệu đầu vào có thể tấn công SQL Injection
Thực hiện tìm fingerprint cơ sở dữ liệu
Kẻ tấn công muốn khám phá kiểu và phiên bản của cơ sở dữ liệu mà ứngdụng Web đang sử dụng Đối với mỗi loại cơ sở dữ liệu thì phản hồi các truyvấn theo các cách khác nhau và các tấn công khác nhau, và thông tin này cóthể được sử dụng để “fingerprint” cơ sở dữ liệu đó Biết được loại và phiênbản của cơ sở dữ liệu được ứng dụng Web sử dụng, kẻ tấn công có thể thựchiện các tấn công cụ thể vào cơ sở dữ liệu
Xác định giản đồ cơ sở dữ liệu
Để trích được dữ liệu từ cơ sở dữ liệu một cách chính xác, kẻ tấn côngthường muốn biết thông tin về các giản đồ cơ sở dữ liệu, như tên các bảng,tên các cột và các kiểu dữ liệu Các tấn công sẽ được tạo ra để thu thập hoặcsuy luận các dạng thông tin kiểu này
Trích dữ liệu
Là các kiểu tấn công sử dụng các công nghệ trích dữ liệu từ cơ sở dữliệu Phụ thuộc vào các kiểu ứng dụng Web, thông tin này có thể là nhạy
Trang 37cảm và kẻ tấn công đang cần đến Đây là kiểu tấn công phổ biến nhất củaSQLIA.
Thêm và sửa dữ liệu
Mục đích của các tấn công này là thêm hoặc thay đổi thông tin trong cơ sở
dữ liệu
Từ chối dịch vụ
Các tấn công dạng này được thực hiện để tắt cơ sở dữ liệu của ứng dụngWeb, do vậy từ chối phục vụ các người dùng khác Các tấn công yêu cầu việckhóa (locking) hoặc xóa các bảng cơ sở dữ liệu sẽ thuộc kiểu tấn công này
Tránh việc phát hiện
Dạng này đề cập đến các kỹ thuật tấn công mà có thể tránh việc theo dõi
và phát hiện bởi các cơ chế bảo vệ hệ thống
Bỏ quá quá trình xác thực
Mục đích của các kiểu tấn công này là cho phép kẻ tấn công bỏ qua các cơchế xác thực cơ sở dữ liệu và ứng dụng Bỏ qua các cơ chế xác thực có thểcho phép kẻ tấn chiếm được các đặc quyền và các quyền gắn kết với ngườidùng ứng dụng khác
Thực hiện các lệnh từ xa
Các kiểu tấn công cố gắng thực hiện các lệnh bất kỳ trên cơ sở dữ liệu.Các lệnh này có thể là các thủ tục, hàm lưu trữ mà người dùng cơ sở dữ liệu
có thể thực hiện được
Thực hiện leo thang đặc quyền
sót logic trong cơ sở dữ liệu để leo thang các quyền của kẻ tấn công.Trái với các tấn công bỏ qua bước xác thực, các tấn công dạng này tậptrung vào việc khai thác các quyền người dùng cơ sở dữ liệu
2.2.4 Các kiểu tấn công SQL injection
Trong phần này mô tả các dạng SQLIA khác nhau được biết cho đến nay.Mỗi dạng tấn công SQLIA sẽ được miêu tả thành các phần:
Trang 38 Tên tương ứng với kiểu tấn công
Nói chung, các kiểu tấn công khác nhau là không được thực hiện độc lập.Phụ thuộc vào mục tiêu của kẻ tấn công mà nhiều kiểu tấn công có thể đượcthực hiện với nhau hoặc tuần tự Chú ý có vô số các biến thể của mỗi kiểu tấncông
Dưới đây là đoạn chương trình mẫu có chứa lỗ hổng cho tấn công SQLinjection Ví dụ này được sử dụng để thực hiện các kiểu tấn công trên đó
1 String login, password, pin, query
2 login = getParameter("login");
3 password = getParameter("pass");
3 pin = getParameter("pin");
4 Connection conn.createConnection("MyDataBase");
5 query = "SELECT accounts FROM users WHERE login=’" +
6 login + "’ AND pass=’" + password +
7 "’ AND pin=" + pin;
8 ResultSet result = conn.executeQuery(query);
Đoạn chương trình trên thực hiện chức năng đang nhập của một ứngdụng Nó thực hiện các bước đăng nhập đơn giản mà có thể tìm thấy trong cácứng dụng Web Đoạn mã trong ví dụ này sử dụng các tham số đầu vào để tạocâu truy vấn SQL và gửi tới cơ sở dữ liệu
Trang 39Ví dụ, nếu như người dùng gửi login, password, pin là “doe”, “secret”, và
“123” thì ứng dụng tự động tạo và gửi câu truy vấn sau:
SELECT accounts FROM users WHERE
login=’doe’ AND pass=’secret’ AND pin=123
Nếu như thông tin login, password, pin tìm thấy trong cơ sở dữ liệu thì
thông tin tài khoản của doe được trả lại và được hiển thị bởi hàm
displayAccounts() Ngược lại, nếu không tìm thấy thì hàm displayAuthFailed() hiển thị thông báo lỗi.
2.2.4.1 Tấn công dựa vào tính dư thừa (Tautologies)
Mục tiêu: Bỏ qua bước xác thực, xác định tham số có thể tiêm, trích dữ
liệu
Mô tả: Kiểu tấn công này là tiêm mã vào trong một hoặc nhiều các lệnh
điều kiện để làm cho các câu lệnh này luôn luôn đánh giá là đúng Kết quảcủa tấn công phụ thuộc vào các kết quả của truy vấn được sử dụng bên trongứng dụng Kiểu tấn công này thường được sử dụng để bỏ qua các trang xácthực và trích dữ liệu Kẻ tấn công khai thác một trường có thể tiêm mà được
sử dụng trong điều kiện WHERE của câu truy vấn Biến đổi điều kiện nàythành điều kiện không cần thiết làm cho câu truy vấn thực hiện trả lại tất cảcác dòng trong bảng cơ sở dữ liệu
Ví dụ: Trong ví dụ này, kẻ tấn công gửi chuỗi “ ’ or 1=1 - -” tới trường
đầu vào đăng nhập (đầu vào này được đưa tới làm cho các trường khác trởnên không cần liên quan đến) Khi đó câu truy vấn là:
SELECT accounts FROM users WHERE
login=’’ or 1=1 AND pass=’’ AND pin=
Đoạn mã được tiêm vào trong điều kiện (OR 1=1) làm biến đổi toàn bộmệnh đề WHERE thành một điều kiện thừa Cơ sở dữ liệu dùng điều kiện đó
để đánh giá mỗi dòng và quyết định những dòng nào sẽ trả về cho ứng dụng.Bởi vì điều kiện là thừa, nên câu truy vấn luôn đánh giá là đúng đối với mỗidòng trong bảng và trả về tất cả các dòng cho ứng dụng Trong ví dụ này tập
dữ liệu được trả về là khác NULL, cho nên ứng dụng kết luận việc xác thực
Trang 40người dùng là thành công Bởi vậy ứng dụng thực hiện phương thứcdisplayAccounts() và hiển thị toàn bộ các tài khoản được trả về
2.2.4.2 Tấn công dựa vào các truy vấn trái phép/sai logic
Mục đích: Xác định các tham số có thể tiêm, nhận dạng fingerprint của cơ
sở dữ liệu, trích dữ liệu
Mô tả: Tấn công này cho phép kẻ tấn công thu thập thông tin quan trọng
về kiểu và cấu trúc của cơ sở dữ liệu back-end của ứng dụng Web Tấn côngnày được xem như là bước thu thập thông tin, tài liệu để hỗ trợ cho các tấncông khác Kiểu tấn công này đưa ra các lỗ hổng dựa vào các trang thông báolỗi mặc định được trả về từ các server ứng dụng vì các lỗi này thường được
mô tả chi tiết Trong thực tế, thông báo lỗi được tạo ra thường liên quan đếncác tham số mà kẻ tấn công tiêm vào Ban đầu thông tin lỗi thêm vào dự định
hỗ trợ cho lập trình viên gỡ rối ứng dụng, sau này kẻ tấn công sử dụng nó đểthu thập thông tin về giản đồ của cơ sở dữ liệu
Khi thực hiện tấn công này, kẻ tấn công cố gắng tiêm các lệnh làm gây ralỗi cú pháp, lỗi chuyển đổi kiểu hoặc lỗi logic vào cơ sở dữ liệu
Các lỗi cú pháp có thể được sử dụng để xác định các tham số có thể bịtiêm Các lỗi định kiểu có thể được sử dụng để suy luận ra kiểu dữ liệu củacác cột hoặc để trích dữ liệu Các lỗi logic thường liên quan đến tên của cácbảng và cột
Ví dụ: Theo ví dụ, tấn công này gây ra một lỗi khi chuyển đổi kiểu dữ
liệu Để thực hiện điều này, kẻ tấn công tiêm đoạn lệnh sau vào trường pin :
“convert(int,(select top 1 name from sysobjects where xtype=’u’))”
Và kết quả của truy vấn sẽ như sau:
SELECT accounts FROM users WHERE login=’’ AND
pass=’’ AND pin= convert (int,(select top 1 name from
sysobjects where xtype=’u’))
Trong chuỗi tấn công này, câu truy vấn cố gắng trích bảng người dùngđầu tiên (xtype=’u’) từ bảng metadata của cơ sở dữ liệu (giả định sử dụngMicrosoft SQL Server, thì các bảng metadata được gọi là sysobjects) Sau đó