Thông tin luôn là một tài sản vô giá của doanh nghiệp và cần được bảo vệ bằng mọi giá. Tuy nhiên, với những đòi hỏi ngày càng gắt gao của môi trường kinh doanh yêu cầu doanh nghiệp phải năng động chia sẻ thông tin của mình cho nhiều đối tượng khác nhau qua Internet hay Intranet (mạng “Internet” trong nội bộ doanh nghiệp). Hầu hết các doanh nghiệp ngày nay đều sử dụng các hệ quản trị cơ sở dữliệu (CSDL) để lưu trữ tập trung tất cả các thông tin quý giá của mình. Hiển nhiên hệ thống này sẽ là tiêu điểm tấn công của những kẻ xấu. Nhẹ thì hệ thống CSDL bịhoạt động không ổn định, mất mát dữ liệu.Nặng thì các thông tin bí mật bị tiết lộ và được đem bán cho các doanh nghiệp đối thủ. Tất cả điều đó là những thiệt hại vô cùng lớn lao. Vì vậy việc bảo vệ thông tin trở nên ngày càng quan trọng và khó khăn hơn bao giờ hết. Chính vì thế nênvấn đề bảo mật trong database là một trong những ưu tiên hàng đầu của những người phát triển ứng dụng. Và trong bài tập lớn này này chúng em sẽ tìm hiểu một số vấn đề căn bản về bảo mật Database trong việc phát triển ứng dụng.
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚN MÔN AN TOÀN CƠ SỞ DỮ LIỆU
- Ngô Việt Phương
- Cao Thuỳ Anh
- Dương Văn Thăng
Lớp : AT5B
HÀ NỘI 12/2011
Trang 2KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚN MÔN AN TOÀN CƠ SỞ DỮ LIỆU
ĐỀ TÀI
PHÁT TRIỂN ỨNG DỤNG BẢO
MẬT TRÊN ORACLE
Trang 3I Xây dựng ứng dụng oracle 5
1 Mục đích sử dụng 5
2 Cách thức xây dựng 5
2.1 Giao diện lập trình ứng dụng 5
2.2 Các phương pháp xây dựng 6
3 Hiệu suất ứng dụng 9
II Bảo mật ứng dụng và cơ sở dữ liệu 9
1 Những nguy cơ đối với cơ sở dữ liệu 9
2 Biện pháp bảo vệ 10
3 Mã hóa 11
4 Vài nét về cơ chế quản lý khóa 12
4.1 Vị trí lưu trữ khóa 13
4.2 Kiểm soát truy cập khóa 13
5 Sơ lược về kiến trúc của một hệ bảo mật CSDL 14
6 Các vấn đề bảo mật trong phát triển ứng dụng CSDL Oracle 14
6.1 Lựa chọn mô hình phát triển ứng dụng 16
6.2 Quản lý quyền hạn trong ứng dụng 17
III Demo 18
KẾT LUẬN 23
Trang 4LỜI NÓI ĐẦU
Thông tin luôn là một tài sản vô giá của doanh nghiệp và cần được bảo vệ bằng mọi giá Tuy nhiên, với những đòi hỏi ngày càng gắt gao của môi trường kinh doanh yêu cầu doanh nghiệp phải năng động chia sẻ thông tin của mình cho nhiều đối tượng khác nhau qua Internet hay Intranet (mạng “Internet” trong nội bộ doanh nghiệp) Hầu hết các doanh nghiệp ngày nay đều sử dụng các hệ quản trị cơ sở dữ liệu (CSDL) để lưu trữ tập trung tất cả các thông tin quý giá của mình Hiển nhiên
hệ thống này sẽ là tiêu điểm tấn công của những kẻ xấu Nhẹ thì hệ thống CSDL bị hoạt động không ổn định, mất mát dữ liệu.Nặng thì các thông tin bí mật bị tiết lộ
và được đem bán cho các doanh nghiệp đối thủ Tất cả điều đó là những thiệt hại
vô cùng lớn lao Vì vậy việc bảo vệ thông tin trở nên ngày càng quan trọng và khó khăn hơn bao giờ hết Chính vì thế nênvấn đề bảo mật trong database là một trong những ưu tiên hàng đầu của những người phát triển ứng dụng Và trong bài tập lớn này này chúng em sẽ tìm hiểu một số vấn đề căn bản về bảo mật Database trong việc phát triển ứng dụng
Trang 5I Xây dựng ứng dụng oracle
1 Mục đích sử dụng
Ứng dụng được sử dụng truy cập cơ sở dữ liệu oracle, nhằm xây dựng cho
các công ty, các cửa hàng, siêu thị lớn,… có nhu cầu truy xuất, lưu trữ dữ liệu
Những ứng dụng này cần đáp ứng được sự an toàn, bảo mật tốt Có thể sử dụng cho các nhân viên trong công ty, nâng cao chất lượng phục vụ tới khách hàng hay tăng tốc độ làm việc cho các nhân viên
2 Cách thức xây dựng
2.1 Giao diện lập trình ứng dụng
Giao diện lập trình ứng dụng (Application Programming Interface - API) là
sự mô tả cách thức để phần mềm yêu cầu một chương trình khác thực hiện một dịch vụ nào đó Dịch vụ này có thể là cấp quyền truy cập dữ liệu hay thực hiện một chức năng đặc biệt nào đó API tồn tại trong hầu hết các phần mềm xí nghiệp và là
thành phần quan trọng của hệ điều hành
Hầu như tất cả các phần mềm đều phải yêu cầu phần mềm khác làm một số công việc cho chúng Để làm như vậy, chương trình yêu cầu dùng một tập các lời yêu cầu đã được chuẩn hoá, được gọi là giao diện lập trình ứng dụng (API) Hầu như mọi ứng dụng đều dựa vào các API của hệ điều hành để thực hiện những công
việc căn bản như truy cập hệ thống tập tin
Về bản chất, API của chương trình định ra phương thức thích hợp để nhà phát triển yêu cầu các dịch vụ của chương trình đó Các nhà phát triển sẽ đưa ra yêu cầu bằng cách đưa các lời gọi vào mã chương trình ứng dụng của họ Cú pháp
của những lời gọi này được mô tả trong các tài liệu của chương trình được gọi
Trang 6Bằng cách cung cấp phương tiện để yêu cầu dịch vụ chương trình, API được gọi là cấp quyền truy cập hay “mở cửa” ứng dụng Xây dựng ứng dụng không có API về căn bản cũng như xây nhà không có cửa; API trong mọi mục đích tính toán
là để mở ra cánh cửa và thực hiện việc trao đổi thông tin
2.2 Các phương pháp xây dựng
2.2.1 Xây dựng dựa trên kết nối qua ODBC
Hình 1 : ODBC API Những đặc tính: Giao diện này sử dụng một công nghệ chuyển tiếp cung cấp
ODBC truy cập thông qua trình điều khiển ODBC Là giao diện chuẩn của Mycrosoft OBDC API lần lượt thực hiện để có thể tiếp cận với cơ sở dữ liệu thông qua các trình điều khiển ODBC chuẩn Máy khách cần phải cài đặt các thư viện ODBC gốc, trình điều khiển, và các tập tin hỗ trợ cần thiết, và trong hầu hết các trường hợp, cơ sở dữ liệu của khách hàng là những đoạn mã Đây sẽ là trình điều khiển thích hợp cho một mạng doanh nghiệp và khách hàng cài đặt ở đâu không phải là vấn đề lớn
Ưu điểm: Giao diện này được viết cho phép truy cập và các cơ sở dữ liệu
khác nhau thông qua việc thực hiện trình điều khiển ODBC Trong một số trường
Trang 7hợp, sự lựa chọn duy nhất của khách hàng sẽ là MS Access hoặc Mircosoft SQL Server cho việc gọi tới ODBC, oracle rất ít sử dụng tới ODBC này
Nhược điểm: Trình điều khiển loại 1 không hỗ trợ hoàn toàn các ứng dụng
được cài đặt trên máy khách hàng Các thư viện ODBC và các đoạn mã cơ sở dữ liệu phải nằm trên máy chủ, do đó nó làm giảm hiệu suất
2.2.2 Xây dưng dựa trên kết nối qua server proxy
Hình 2 : Giao diện server proxy Những đặc tính:Đây là một cách thức chuyển đổi từ lời gọi từ giao diện ứng
dụng vào một hệ quản trị cơ sở dữ liệu với một giao thức mạng độc lập, là một lần nữa chuyển dịch lời gọi tới cơ sở dữ liệu cụ thể bơi một máy chủ ở tầng trung gian Cách thức này không yêu cầu bất kỳ cơ sở dữ liệu, thư viện có nguồn gốc cụ thể sẽ được cài đặt trên máy khách Trình điều khiển loại 3 hộ trợ các ứng dụng Web, có thể triển khai tốt trên Internet mà không cần phải cài đặt trên máy client
Ưu điểm:Loại giao diện này có tính linh hoạt cao, nhất là nó không yêu cầu
bất kỳ phần mềm hoặc dịch vụ có nguồn gốc được cài đặt trên máy khách hàng Nó
có một sự thích ứng cao để thay đổi và kiểm soát cơ sở dữ liệu mà không cần phải sửa đổi trình điều khiển ở máy khách hàng
Trang 8Nhược điểm: Cơ sở dữ liệu phải được thực hiện ở tầng máy chủ cụ thể Vì
nó thực hiện các ứng dụng dựa trên Web, nó thực hiện các biện pháp an toàn giống như việc truy xuất qua tường lửa
2.2.3 Xây dựng dựa trên nền tảng TCP/IP
Hình 3 : sử dụng giao thức TCP/IP Những đặc tính: Cách thức này là sự chuyển đổi lời gọi từ giao diện API vào
giao thức mạng để liên lạc trực tiếp với cơ sở dữ liệu thông qua giao thức TCP/IP Đây là liên kết giữa khách hàng gọi trực tiếp tới máy chủ hệ quản trị cơ sở dữ liệu
và cung cấp một giải pháp thiết thực cho việc truy xuất mạng nội bộ Trong hầu các trường hợp, các trình điều khiển cung cấp bởi nhà cung cấp cơ sở dữ liệu Giao thức này cũng không cần một thư viện cụ thể cho cơ sở dữ liệu có nguồn gốc cụ thể để cấu hình trên máy của khách hàng và có thể triển khai trên Web mà không cần khách hàng cài đặt, theo yêu cầu cho các trình điều khiển loại 3
Ưu điểm: Có thể giao tiếp trực tiếp với cơ sở dữ liệu bằng cách sử dụng
TCP/IP, chứ không cần phải thông qua một tầng trung gian hay thư viện gốc nào Đây chính là lý do các trình điều khiển JDBC hoạt động nhanh nhất Nó không cần phải bổ xung thư viện gốc là cần thiết để cài đặt trên máy khách hàng
Trang 9Nhược điểm: Hạn chế duy nhất là client được cơ sở dữ liệu cụ thể Do đó,
nếu trong trường hợp, các thay đổi về sau với cơ sở dữ liệu, thì các nhà phát triển ứng dụng có thể phải mua và triển khai một ứng dụng cụ thể mới cho các cơ sở dữ liệu mới
3 Hiệu suất ứng dụng
Ứng dụng áp dụng cho các cửa hàng, siêu thị lớn, các cơ quan công ty,… nên cần tốc độ truy xuất tốt Chúng ta có thể đáp ứng được mức thời gian thực với mức ứng dụng, và hiệu suất phần mềm được đạt mức tối ưu khi sử dụng giao thức TCP/IP
Mặt khác, ở đây chưa kể đến mức độ authentication của database oracle Khi oracle không mã hoá dữ liệu, đây là trường hợp ứng dụng tối ưu nhất Còn khi database server đã cài đặt cơ chế mã hoá, tốc độ xử lý của ứng dụng sẽ bị giảm đi ít nhất 5%
II Bảo mật ứng dụng và cơ sở dữ liệu
1 Những nguy cơ đối với cơ sở dữ liệu
Hiển nhiên là các đe dọa đối với hệ thống CSDL trước tiên sẽ đến từ các tin tặc Chúng sẽ tấn công hệ thống của doanh nghiệp từ bên ngoài thông qua Internet
từ những trang Web công cộng hay từ các ứng dụng chia sẻ thông tin của doanh nghiệp đối với khách hàng Các kiểu tấn công này có thể bị loại bỏ phần lớn bằng cách sử dụng hệ thống tường lửa Tuy nhiên, hệ thống tường lửa lại thường giới hạn khả năng truy xuất thông tin của những khách hàng hay người dùng chân chính những đối tượng mà bản thân doanh nghiệp luôn luôn mời chào đến với mình Một điểm nữa là tường lửa không thể giúp doanh nghiệp bảo vệ mình khỏi những lỗ hổng bảo mật xuất hiện ngày càng nhiều khi hệ thống CSDL của họ ngày càng trở nên tinh vi và phức tạp
Trang 10Tin tặc không phải là mối lo ngại duy nhất Các đe dọa còn đến từ bên trong,
từ chính các nhân viên của doanh nghiệp - những người mặc nhiên được truy cập vào hệ thống CSDL và được mặc nhiên tin tưởng Điều đặc biệt là hệ thống tường lửa hoàn toàn vô hiệu trước đối tượng này Đáng nói hơn nữa là các biện pháp bảo
vệ thông tin từ bên trong không ít thì nhiều bị các doanh nghiệp đầu tư chưa đúng mức hoặc hoàn toàn bị “quên”
2 Biện pháp bảo vệ
Dĩ nhiên là các hệ CSDL ngày nay đều có sẵn các công cụ bảo vệ tiêu chuẩn như hệ thống định danh (authentication - yêu cầu người dùng phải xác nhận danh tính của mình bằng tên và mật khẩu) và kiểm soát truy xuất (access control - giới hạn các thao tác của người dùng trên một tập dữ liệu xác định) Tuy nhiên, các biện pháp bảo vệ này hầu như không có tác dụng trước các tấn công từ bên trong Chẳng hạn, làm sao doanh nghiệp có thể cấm không cho nhân viên phụ trách việc sao lưu dữ liệu (Backup Operator) đọc dữ liệu trong CSDL ? (vì nhiệm vụ của anh
ta yêu cầu anh ta phải được đọc dữ liệu để có thể sao chép nó sang nơi khác) Một
ví dụ nữa là nếu máy chủ (hoặc ổ cứng) của doanh nghiệp bị mất cắp, làm sao bảo
vệ thông tin trong đó không bị nhìn thấy?
Để bảo vệ thông tin khỏi mối đe dọa này, người ta cần phải thực hiện hai biện pháp cơ bản là: mã hóa các thông tin quan trọng trong CSDL và quản lý thật chặt chẽ các khóa giải mã (key management) Mã hóa thông tin mà không để ý tới quản lý khóa giải mã thì cũng giống như bạn khóa cửa nhà mà lại để lại chìa khóa ngay trước cửa vậy Đáng ngạc nhiên là tác vụ quản lý khóa là tác vụ được quan tâm nhiều hơn hiện nay vì các thuật toán mã hóa thông dụng ngày nay đã đủ an toàn
Bên cạnh đó, để thắt chặt hơn nữa, doanh nghiệp có thể còn phải cài đặt thêm các cơ chế giám sát (security audit) để kịp thời phản ứng trước những kiểu
Trang 11truy xuất hệ thống bất thường hoặc log (ghi nhận toàn bộ thao tác đang diễn ra trên CSDL)
3 Mã hóa
Mã hóa đảm bảo thông tin được mã hóa không thể sử dụng được nếu không
có khóa giải mã Để đảm bảo an toàn, các khóa dùng để mã hóa (và cũng để giải mã) thường được phát sinh một cách ngẫu nhiên trước khi thông tin được mã hóa Trong số các thuật toán mã hóa, 3DES và AES là hai thuật toán mã hóa thông dụng nhất (AES được đánh giá là nhanh hơn nhiều so với 3DES) Vì các thuật toán mã
hóa đã trở thành tiêu chuẩn, chúng ta sẽ không bàn nhiều đến điều này ở đây
Điểm đáng bàn nhất là việc mã hóa sẽ ảnh hưởng đến tính chất của dữ liệu Đầu tiên là ảnh hưởng đến kích thước dữ liệu Các thuật toán mã hóa đều ít nhiều làm tăng kích thước của dữ liệu gốc Thứ hai là làm biến đổi kiểu của dữ liệu Dữ liệu khi được mã hóa sẽ trở thành một “đống” bit vô nghĩa (kiểu binary) nên
thường không thể được lưu trữ như ban đầu
Đối với kiểu dữ liệu dạng text (như char, varchar hay text), ta có thể không cần phải thay đổi kiểu dữ liệu vì ta có thể biểu diễn kiểu binary theo định dạng
Base64
Điểm cần quan tâm kế tiếp là việc mã hóa các trường (field) có chỉ mục có thể sẽ ảnh hưởng trầm trọng đến tốc độ của CSDL Đáng tiếc là các trường này đôi lúc lại cần phải được mã hóa (như số an sinh xã hội - một dạng giống như số Chứng Minh Nhân Dân hay số thẻ tín dụng) Đa số các hệ bảo mật CSDL đều không cho phép mã hóa các trường có chỉ mục hoặc cho phép nhưng luôn luôn
cảnh báo về các hiệu ứng lề
Như vậy, mã hóa thông tin trong CSDL (hay nói gọn là mã hóa CSDL) ít nhiều làm biến đổi cấu trúc của CSDL và ảnh hưởng đến hiệu suất của CSDL đó Thay đổi cấu trúc CSDL sẽ ảnh hưởng đến các ứng dụng sử dụng CSDL đó Một ví
dụ là chẳng hạn ta mã hóa một trường có kiểu ngày tháng, khi ứng dụng truy xuất
Trang 12mà không có khóa giải mã thì sẽ nhận được kiểu dữ liệu binary Kết quả là ứng
dụng sẽ bị treo hoặc hoạt động không ổn định
Để giảm thiểu ảnh hưởng đối với ứng dụng của CSDL người ta có các giải
Để tiến hành mã hóa, các hệ thống bảo mật CSDL phải chọn lựa giữa hai khả năng sau: (1) dùng chính máy tính của hệ quản trị CSDL để tiến hành mã hóa/giải mã, (2) sử dụng một máy tính khác Cả hai cách này đều có những ưu nhược điểm riêng Khuyết điểm dễ thấy của cách (1) là sẽ làm giảm hiệu năng chung của hệ quản trị CSDL trong trường hợp hệ thống phải phục vụ nhiều kết nối cùng lúc (điều này là rất đáng kể đối với các hệ CSDL của các doanh nghiệp lớn) Cách (2) tuy không giảm hiệu năng chung nhưng lại phụ thuộc vào tốc độ mạng (vì phải truyền dữ liệu cần được mã hóa/giải mã qua lại giữa các máy tính) và phải mã hóa các thông tin truyền trên mạng giữa máy tính của hệ CSDL và máy tính dùng
để mã hóa/giải mã để tránh bị kiểu tấn công “nghe lén”
4 Vài nét về cơ chế quản lý khóa
Cơ chế quản lý khóa trong các hệ bảo mật CSDL cần phải giải quyết hai vấn
đề cơ bản là: vị trí lưu trữ các khóa giải mã và kiểm soát các truy cập đến các khóa
Trang 134.1 Vị trí lưu trữ khóa
Có hai tùy chọn cơ bản trong lưu trữ khóa Một là lưu trữ khóa bên trong một bảng (table) riêng ngay bên trong hệ thống CSDL của doanh nghiệp Giải pháp này tuy đơn giản nhưng lại không đủ an toàn đối với các tác nhân bên trong Ví dụ
là các quản trị viên CSDL (Database Administrators) sẽ dễ dàng truy xuất được nội dung của khóa vì họ có khá nhiều “quyền lực” trên hệ thống CSDL của doanh
nghiệp
Giải pháp thứ hai tuy có tốn kém hơn đáng kể nhưng độ an toàn khá cao là lưu trữ khóa trong các phần cứng chuyên dụng – như trong một máy chủ khác Như vậy sẽ đảm bảo được là tất cả các quản trị viên CSDL đều không thể “tự
nhiên” truy xuất được khóa giải mã
4.2 Kiểm soát truy cập khóa
Để kiểm soát truy cập khóa khi khóa được lưu trữ trên một server riêng ta phải giải quyết được vấn đề cơ bản nhất là: xác định danh tính của người dùng truy cập vào khóa Đơn giản nhất là sử dụng tên người dùng và mật khẩu Cách này khá đơn giản nhưng vẫn có nhược điểm cố hữu là dễ bị tấn công nếu người dùng sử dụng các mật khẩu dễ đoán Cách thứ hai mạnh hơn là sử dụng smart-card Smart-card hoạt động giống như các thẻ ATM của ngân hàng Smart-card an toàn hơn vì
nó xác định danh tánh của người dùng thông qua hai yếu tố: (1) một vật mà người dùng sở hữu (cái thẻ) và (2) một thông tin mà người dùng đó biết
Để một “kẻ xấu” có được cả hai điều trên là cực khó Nguyên tắc hoạt động của smart-card cũng khá đơn giản: mật khẩu để truy cập của người dùng được lưu trữ bên trong bộ nhớ của smart-card và được mã hóa Khóa để giải mã ra mật khẩu chính là số PIN của smart-card (hoặc là một mậu khẩu khác mà chỉ có người dùng
đó biết)
Cách thứ ba mạnh nhất là sử dụng các thông tin sinh học (như vân tay, mắt hoặc giọng nói) kết hợp với mật khẩu hoặc smart-card