Tải bản đầy đủ (.pdf) (28 trang)

TẤN CÔNG LEO THANG ĐẶC QUYỀN ( Demo )

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.48 MB, 28 trang )

BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ

AN TỒN CƠ SỞ DỮ LIỆU
ĐỀ TÀI: TÌM HIỂU VỀ TẤN CÔNG LEO THANG ĐẶC
QUYỀN (PRIVILEGE ESCALATION) TRÊN ORACLE VÀ
THỰC NGHIỆM

Sinh viên thực hiện :
Nguyễn Hồng Lưu - AT140132
Đinh Văn Giang - AT140118
Trần Văn Dương - AT140112
Vũ Đức Toàn - AT140149
Giảng viên hướng dẫn: ThS. Trần Thị Lượng
Khoa An Tồn Thơng tin – Học viện Kỹ thuật Mật Mã
Hà Nội, tháng 10 năm 2020
1


LỜI NÓI ĐẦU
Cơ sở dữ liệu là một trong những ngành được quan tâm nhiều trong khoa học
máy tính nói chung và trong cơng nghệ thồn tin nói riêng. Từ khi có mơ hình cơ sở
dữ liệu đầu tiên vào những năm 60 đến nay, tuy không phải là chặng đường dài so với
các ngành khoa học khác, nhưng với ngành khoa học máy tính và đặc biệt là cơ sở dữ
liệu thì đó là thời gian đáng kể. Cơ sở dữ liệu đã trải qua nhiều thế hệ của hệ quản trị
cơ sở dữ liệu đã có nhiều ứng dụng trong khoa học và các ngành kinh tế quốc dân. Hệ
quản trị cơ sở dữ liệu ORACLE là một trong những hệ quản trị cơ sở dữ liệu lưu trữ
thơng tin an tồn và chắc chắn đồng thới lại truy cập chính xác, dễ dàng.
Cơ sở dữ liệu (CSDL) của các tổ chức, doanh nghiệp luôn là mục tiêu của nhiều
cuộc tấn công. Bởi đây là nơi lưu trữ các thông tin về khách hàng và nhiều dữ liệu bí
mật khác. Một trong những nguyên nhân khiến cho các CSDL dễ bị tổn thương bởi


các tấn công là do các tổ chức, doanh nghiệp chưa có biện pháp bảo vệ đầy đủ cho tài
nguyên này. Khi kẻ xấu truy nhập vào dữ liệu nhạy cảm, có thể thực hiện tất cả các
công việc để gây mất mát về tài chính hoặc phá hoại danh tiếng của tổ chức, doanh
nghiệp. Và sau đây nhóm em xin trình bày đề tài các tấn cơng vào cơ sở dữ liệu
ORACLE.
Do cịn hạn chế nhiều về thời gian, kiến thức và kinh nghiệm thực tế nên đề tài
của nhóm khơng tránh khỏi những thiếu sót và khuyết điểm. Nhóm thực hiện đề tài
rất mong nhận được sự đánh giá, nhận xét của Cô và sự góp ý của các bạn sinh viên
để giúp đề tài này được hồn thiện hơn, từ đó nhóm chúng em có thể rút kinh nghiệm
trong nghiên cứu và cơng việc sau này.
Nhóm chúng em xin chân thành cảm ơn!

2


MỤC LỤC
LỜI NÓI ĐẦU .................................................................................................. 2
CHƯƠNG 1. TỔNG QUAN VỀ LEO THANG ĐẶC QUYỀN ................. 4
1.1.

Giới thiệu tấn công leo thang đặc quyền ........................................ 4

1.2.

Các dạng leo thang đặc quyền ......................................................... 4

1.2.1.

Leo thang đặc quyền dọc ............................................................. 5


1.2.2.

Leo thang đặc quyền ngang ......................................................... 6

1.3.

Các biện pháp bảo vệ hệ thống giảm thiểu leo thang đặc quyền . 7

CHƯƠNG 2. LEO THANG ĐỘC QUYỀN TRONG ORACLE ............... 9
2.1.

Giới thiệu về Oracle.......................................................................... 9

2.1.1.

Kiến trúc oracle............................................................................ 9

2.1.2.

Quản trị Oracle .......................................................................... 11

2.2.

Một số kỹ thuật tấn công leo thang đặc quyền trong oracle ...... 14

2.2.1.

SQL Injection ............................................................................. 14

2.2.2.


Leo thang đặc quyền với Oracle Indexes ................................... 20

2.2.3.

Tấn công chèn mã PL/SQL ........................................................ 20

2.2.4. Sử dụng công cụ Odat .................................................................... 22
2.3.4.

Tấn công rookit trong oracle ..................................................... 23

CHƯƠNG 3. THỰC NGHIỆM .................................................................... 25
3.1.Leo thang đặc quyền với Oracle Indexes ........................................... 25
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN .................................................... 27
TÀI LIỆU THAM KHẢO ............................................................................. 28

3


CHƯƠNG 1.
1.1.

TỔNG QUAN VỀ LEO THANG ĐẶC QUYỀN

Giới thiệu tấn cơng leo thang đặc quyền
(Escalating Privilege) Về cơ bản có định nghĩa là thêm nhiều quyền hơn hoặc

cho phép một tài khoản người dùng thêm quyền, leo thang đặc quyền làm cho một tài
khoản người dùng có quyền như là tài khoản quản trị.

Nói chung, các tài khoản quản trị viên có yêu cầu mật khẩu nghiêm ngặt hơn,
và mật khẩu của họ được bảo vệ chặt chẽ hơn. Nếu khơng thể tìm thấy một tên người
dùng và mật khẩu của một tài khoản với quyền quản trị viên, một hacker có thể chọn
sử dụng một tài khoản với quyền thấp hơn. Tại trường hợp này, các hacker sau đó
phải leo thang đặc quyền để có nhiều quyền như quyền của quản trị.
Cái này được thực hiện bằng cách nắm lấy quyền truy cập bằng cách sử dụng
một tài khoản người dùng không phải là quản trị viên. Thường bằng cách thu thập các
tên người dùng và mật khẩu thông qua một bước trung gian để gia tăng các đặc quyền
trên tài khoản với mức độ quản trị viên.
Một khi hacker đã có một tài khoản người dùng hợp lệ và mật khẩu, các bước
tiếp theo là để thực thi các ứng dụng nói chung hacker cần phải có một tài khoản có
quyền truy cập cấp quản trị viên để cài đặt chương trình. Đó là lý do tại sao leo thang
đặc quyền là rất quan trọng. 2 Một khi hacker đã có thể truy cập tài khoản với quyền
quản trị, điều tiếp theo cần làm là thực thi các ứng dụng trên hệ thống đích. Mục tiêu
của việc thực thi ứng dụng có thể cài đặt một cửa sau trên hệ thống, cài đặt một
keylogger để thu thập thông tin bí mật, sao chép các tập tin, hoặc chỉ gây thiệt hại cơ
bản cho hệ thống, bất cứ điều gì hacker muốn làm trên hệ thống. Lúc này, hacker có
thể thực thi các ứng dụng, họ có thể chiếm toàn quyền trên hệ thống hệ thống.

1.2.

Các dạng leo thang đặc quyền
Kẻ tấn công bắt đầu bằng cách khai thác lỗ hổng leo thang đặc quyền trong

một hệ thống hoặc ứng dụng mục tiêu, cho phép chúng ghi đè các giới hạn của tài
khoản người dùng hiện tại. Sau đó, họ có thể truy cập chức năng và dữ liệu của người
dùng khác (leo thang đặc quyền theo chiều ngang) hoặc có được các đặc quyền nâng
cao, thường là của quản trị viên hệ thống hoặc người dùng quyền lực khác (leo thang

4



đặc quyền dọc). Sự leo thang đặc quyền như vậy thường chỉ là một trong những bước
được thực hiện để chuẩn bị cho cuộc tấn cơng chính.
1.2.1. Leo thang đặc quyền dọc
Leo thang đặc quyền dọc (Vertical privilege escalation): còn gọi là độ cao
đặc quyền, trong đó người dùng hoặc ứng dụng đặc quyền thấp hơn truy cập vào các
chức năng hoặc nội dung dành cho người dùng hoặc ứng dụng có đặc quyền cao hơn
(ví dụ: người dùng Internet Banking có chức năng quản trị hệ thống và sửa đổi cơ sở
dữ liệu).
Với các đặc quyền nâng cao này, kẻ tấn cơng có thể phá hủy tất cả các tài
nguyên trong hệ thống máy tính và ứng dụng của bạn: đánh cắp thông tin truy cập và
thông tin nhạy cảm khác, tải xuống và thực thi phần mềm độc hại, xóa dữ liệu hoặc
thực thi mã tùy ý. Tệ hơn nữa, những kẻ tấn cơng có thể sử dụng các đặc quyền nâng
cao để che dấu vết của chúng bằng cách xóa nhật ký truy cập và bằng chứng khác về
hoạt động của chúng. Điều này có khả năng khiến nạn nhân không biết rằng một cuộc
tấn công đã xảy ra. Bằng cách đó, tội phạm mạng có thể ngấm ngầm đánh cắp thông
tin hoặc cài đặt phần mềm độc hại trực tiếp trong hệ thống.
Một số ví dụ leo thang đặc quyền dọc:
Trong một số trường hợp, một ứng dụng đặc quyền cao giả định rằng nó sẽ chỉ
được cung cấp với đầu vào khớp vớp đặc tả giao diện của nó. Kẻ tấn cơng có thể khai
thác giả định này để chạy mã trái phép với đặc quyền của ứng dụng:
Buffer Overflow: về bản chất cuộc tấn công tràn bộ đệm gửi quá nhiều thông
tin cho một biến nào đó trong ứng dụng, có thể gây lỗi ứng dụng. Một lỗ hổng như
tràn bộ đệm có thể được sử dụng để thực thi mã tùy ý với đặc quyền được nâng lên
Administrator.
Cross Zone Scripting: là một kiểu tấn cơng leo thang đặc quyền trong đó một
trang web thay đổi mơ hình bảo mật của trình duyệt web, cho phép chạy mã độc trên
máy khách


5


Một ứng dụng có thể thực thi các dịng lệnh Command line hoặc shell có thể
có lỗ hổng Shell Ịnection nếu nó sử dụng đầu vào khơng có giá trị giống như một phần
của lệnh được thực thi, kẻ tấn cơng sau đó có thể chạy các lệnh hệ thống bằng các đặc
quyền ứng dụng.
iOS jaibreaking: là sự leo thang đặc quyền của thiết bị Apple với mục đich xóa
bỏ các hạn chế phần mềm do Apple áp đặt lên có hệ điều hành iOS, iPadOS, tvOS và
watchOS. Jailbreak cho phép truy cập root trong hệ điều hành di động của Apple, cho
phép cài đặt phần mềm không được Apple chấp thuận, như tùy chỉnh và chỉnh sửa
giao diện người dùng.
Root (Android): là quá trình cho phép người dùng điện thoại thơng minh, máy
tính bảng hay các thiết bị sử dụng hệ điều hành android để đạt được quyền truy cập
root. Vì android sử dụng nhân linux, việc root thiết bị Android cho phép truy cập
tương tự các quyền quản trị như trên linux hoặc bất kì hệ điều hành nào giốn như Unix
(FreeBSD, macOS). Root cung cấp quyền thay đổi hoặc thay thế ứng dụng và cài đặt
hệ thống, các ứng dụng chuyên dụng yêu cầu quyền cấp quản trị viên hoặc các hoạt
động khác mà người dùng Android khơng thê truy cập được
Rootkit: là một loại chương trình thường được sử dụng để che dấu các tiện ích
trên hệ thống bị xâm nhập. Rootkit bao gồm cái gọi là back doors, nó giúp cho kẻ tấn
cơng đó truy cập vào hệ thống sẽ dễ dàng hơn trong lần sau. Ví dụ, các rootkit có thể
ẩn một ứng dụng, ứng dụng này có thể sinh ra một lệnh kết nối vào một cổng mạng
cụ thể trên hệ thống. Back door cho phép các quá trình bắt đầu bởi một người khơng
có đặc qun, dùng để thực hiện chức năng thường dành cho các quản trị viên
1.2.2. Leo thang đặc quyền ngang
Leo thang đặc quyền ngang (Horizontal privilege escalation): kẻ tấn công mở
rộng đặc quyền của họ bằng cách chiếm tài khoản khác và lạm dụng các đặc quyền
hợp pháp được cấp cho người dùng khác.
Giả sử rằng kẻ tấn cơng đã có quyền truy cập vào tài khoản ngân hàng trực

tuyến. Cơ ấy đang tìm cách ăn cắp tiền và số tiền cô ấy bị đánh cắp từ một tài khoản
này là khơng đủ. Cơ ấy sẽ thăm dị thông tin hoặc thử nhiều cách khai thác khác nhau
để có quyền truy cập vào các tài khoản khác. Đây được gọi là leo thang đặc quyền
theo chiều ngang vì kẻ tấn công của chúng ta đang di chuyển theo chiều ngang qua
các tài khoản có đặc quyền tương tự.

6


Làm thế nào để cô ấy di chuyển ngang? Kẻ tấn cơng của chúng ta có thể kiểm
tra các siêu liên kết mà ngân hàng này trả về sau khi cơ ấy đăng nhập để xem liệu
chúng có tiết lộ bất kỳ thông tin nào về cách tổ chức nội dung trên trang web ngân
hàng hay khơng. Cơ ấy có thể phát hiện ra rằng ngân hàng mã hóa số tài khoản của
khách hàng theo một cách cụ thể trong các siêu liên kết. Cô ấy sẽ soạn và đưa các siêu
liên kết đến trang web để kiểm tra xem hệ thống ngân hàng có bảo mật khơng và lỗ
hổng này có cho phép cơ ấy xem dữ liệu tài khoản khách hàng khác hay (tốt hơn) để
chuyển tiền. Nếu thành cơng, cơ ấy có thể truy cập vào một số tài khoản trước khi
ngân hàng phát hiện ra các hoạt động của cô ấy hoặc khách hàng báo cáo có hành vi
trộm cắp. Đây được gọi là kỹ thuật tham chiếu đối tượng trực tiếp .
Một số nguy cơ leo thang đặc quyền ngang:
 Có thể dự đốn được session ID trong HTTP cookie của người dùng
 Session fixation
 Cross-site scripting
 Mật khẩu dễ đoán
 Trộm cắp hoặc chiếm quyền điều khiển
 Keystroke logging

1.3.

Các biện pháp bảo vệ hệ thống giảm thiểu leo thang đặc quyền

Những kẻ tấn công sử dụng nhiều kĩ thuật leo thang đặc quyền để đạt được

mục tiêu của họ. Nhưng để cố gắng leo thang đặc quyền ở bước đầu tiên, họ thường
cần có quyền truy cập vào tài khoản người dùng ít đặc quyền hơn. Điều này có nghĩa
là tài khoản người dùng thơng thường cần bảo vệ đầu tiên, do đó cần thực hiện các
biện pháp để kiểm soát truy cập:
 Thực thi chính sách mật khẩu: mật khẩu cần phải đủ mạnh và thay đổi mật
khẩu thường xuyên để bảo mật, nhưng không gây bất tiện cho người dùng.
 Tạo người dùng và nhóm chuyên biệt với quyền truy cập và quyền truy cập tệp
tối thiểu cần thiết: áp dụng quy tắc quyền tối thiều cần thiết để giảm thiểu rủi ro khi
bất kỳ tài khoản người dùng bị xâm phạm.
Các ứng dụng cung cấp điểm vào dễ dàng nhất cho bất kỳ cuộc tấn cơng nào, vì
vậy điều quan trọng là giữ an toàn cho chúng:

7


 Tránh các lỗi lập trình phổ biến trong các ứng dụng của bạn: tránh các lỗi lập
trình phổ biến thường bị kẻ tấn công nhắm tới như tràn bộ dệm, code injection và đầu
vào của người dùng không được xác thực.
 Bảo mật cơ sở dữ liệu và lọc đầu vào của người dùng: các hệ thống cơ sở dữ
liệu thường là mục tiêu tấn cơng vì nhiều ứng dụng web hiện nay và frameworks lưu
trữ tất cả dữ liệu của chúng trong cơ sở dữ liệu bao gồm cài đặt cấu hình, thơng tin
đăng nhập và dữ liệu người dùng. Chỉ với một cuộc tấn công SQL injection, kẻ tấn
cơng có thể có quyền truy cập vào tất cả thông tin này sử dụng để cho cuộc tấn công
tiếp theo.
Không phải tất cả các cuộc tấn công leo thang đặc quyền nhắm trực tiếp vào
tài khoản người dùng, đặc quyền của quản trị viên cũng có thể có được bằng cách khai
thác lỗi ứng dụng và hệ điều hành hay lỗi cấu hình. Để giảm thiểu:
 Giữ cho hệ thống và ứng dụng được vá và cập nhật: Nhiều cuộc tấn cơng khai

thác lỗi đã biết, vì vậy ta cần giữ cập nhật để hạn chế tấn công
 Đảm bảo quyền chính xác cho tất cả các tệp và thư mục: cũng như tài khoản
người dùng, các tệp và thư mục cần tuân theo quy tắc quyền tối thiểu, nếu có gì đó
khơng cần ghi hãy giữ ở chế độ đọc.
 Đóng các cổng khơng cần thiết và xóa tài khoản người dùng khơng sử dụng:
cấu hình hệ thống mặc định thường bao gồm các dịch vụ không cần thiết chạy trên
các cổng mở và mỗi cổng là một lỗ hổng tiềm năng. Bạn có thể xóa hoặc đổi tên tài
khoản người dùng mặc định để tránh kẻ tấn cơng bắt đầu dễ dàng.
 Xóa và hạn chế tất các các chức năng truyền tệp: kẻ tấn công thường cần một
cách để tài xuống tập lệnh khai thác và mã độc, vì vậy hãy xem kĩ tất cả các cơng cụ,
tiện ích hệ thống cho phép truyền tập như FTP, wget, curl... Xóa các cơng cụ bạn
khơng cần và khóa những cơng cụ cịn lại, hạn chế sử dụng chúng cho các thư mục,
người dùng và ứng dụng cụ thể.
 Thay đổi thông tin đăng nhập mặc định trên tất cả các thiết bị bao gồm cả định
tuyến và máy in: chỉ cần bộ định tuyến có mật khẩu mặc định của quản trị viên hay
một máy in mạng có cổng telnet đang mở có thể cung cấp cho kẻ tấn công chỗ đứng.

8


CHƯƠNG 2.
2.1.

LEO THANG ĐỘC QUYỀN TRONG ORACLE

Giới thiệu về Oracle
Trong q trình quản lý việc xử lý thơng tin là vấn đề phức tạp vì lượng thơng

tin nhận được ngày một lớn và thường xuyên. Ngày nay có rất nhiều chương trình ứng
dụng giúp ta quản lý và lưu trự thơng tin dễ dàng. Trong đó có thể kể đến Oracle, là

một trong những chương trình ứng dụng, nó có cơ chế bảo mật dữ liệu rất chặt chẽ
giúp cho hệ thống hoạt động rất tốt và rất an toàn trong việc cập nhật và truy cập dữ
liệu, tránh được việc mất mát dữ liệu, dễ dàng bảo trì và nâng cấp, có cơ chế quyền
hạn rõ ràng vì vậy nó được sử dụng ở nhiều tổ chức lớn như ngân hàng, chính phủ…Nó
khơng chỉ có lợi cho những nhà phát triển như dễ cài đặt, dễ triển khai, dễ nâng cấp
lên phiên bản mới mà còn thuật lợi cho lập trình viên như viết các Trigger, Package
vì trong Oracle cịn tích hợp thêm PL/SQL là một ngơn ngữ lập trình có cấu trúc (
Structure Language) và đây chính là điểm rất mạnh của Oracle so với các cơ sở dữ
liệu khác. Ngồi ra Oracle cịn tương tác tốt với nhiều hệ điều hành như Windows ,
Linux.
Oracle là bộ giải pháp được cung cấp bởi công ty Oracle. Đây là một hệ quản trị CSDL
có tính bảo mật cao, hỗ trợ tốt các mơ hình truy cập dữ liệu tập trung cũng như phân
tán. Giải pháp của Oracle bao gồm các sản phẩm sau:
Hệ quản trị CSDL Oracle Database được cài đặt trên máy chủ Database Server Oracle
Client được cài đặt trên máy trạm cho phép các ứng dụng tại máy trạm truy cập và
thao tác với ứng dụng tại máy chủ.
Công cụ cho việc thiết kế và quản trị CSDL như Oracle Designer, SQL Plus. PL/SQL
là ngôn ngữ thủ tục cho được Oracle dùng để xây dựng đối tượng trong Oracle
Database.
2.1.1. Kiến trúc oracle
Oracle được xây dựng trên 3 kiến trúc gồm:


Kiến trúc bộ nhớ (memory structure)



Kiến trúc process (process structure)




Kiến trúc về lưu trữ (storage structure)

9


Trong đó bộ nhớ và các process sẽ tạo thành instance, phần lưu trữ là
database.
Instance: Bao gồm cấu trúc memory và các background process (tiến trình
ngầm - nền).

Cấu trúc memory gồm 2 phần :

System Global Area (SGA): Nhóm cấu trúc bộ nhớ chia sẻ, chứa dữ liệu và
điều khiển thong tin cho 1 Oracle instance.

10


Program Global Area (PGA): Vùng nhớ mà chứa dữ liệu và điều khiển thông
tin cho 1 server process đơn giản hoặc các background process.
PGA không chia sẻ bộ nhớ bởi Oracle db khi server process đơn giản hoặc
background process khởi động. Nó là bộ nhớ riêng của các tiến trình hệ thống hoặc
thread mà ko chia sẻ bởi các tiến trình khác. Vì PGA là tiến trình cụ thể, nó không
bao giờ phân bổ trong SGA.
Kiến trúc process:
Server process : khi user mở 1 tool ứng dụng lên, chẳng hạng như sqlplus và
kết nối với database ta gọi nó là user process. Server process là các tiến trình được
sinh ra để phục vụ các yêu cầu từ user process. Công việc của Server process cơ bản
có 3 nhiệm vụ:

 Phân tích và chạy các câu lệnh SQL từ client (user process)
 Đọc dữ liệu cần thiết từ disk lên database buffer cache nếu chưa có
 Trả kết quả về cho client
Background process: thực hiện các công việc nội tại của database: quản lý
memory, process, quản lý I/O, giao tiếp giữa các thành phần…
Kiến trúc lưu trữ:
Kiến trúc vật lý: là các tập tin, những gì thấy được trên hệ điều hành được lưu
trữ trong hệ thống lưu trữ

Kiến trúc logic: phân bổ không gian logic cho tất cả dữ liệu trong database
,lưu trữ logic tổ chức phức tạp, phân theo nhiều cấp:
Database -> Tablespace -> Segment -> Extent -> Data block.
2.1.2. Quản trị Oracle
Phân loại người dùng:

11


Oracle là một hệ quản trị cơ sở dữ liệu lớn, chạy trên môi trường mạng. Để
vận hành hệ thống được tốt, có thể có nhiều người sẽ cùng tham gia vào hệ thống với
những vai trò khác nhau gọi là các user. Có thể phân ra làm một số loại user chính
sau:
 Database Administrators
 Security Officers
 Application Developers
 Application Administrators
 Database Users
 Network Administrators
 Database Administrators
 Security Officers

 Application Developers
 Application Administrators
 Database Users
 Network Administrators
Database Administrator: là hệ thống Oracle database có thể là rất lớn và có nhiều
users cùng tham gia vào hệ thống, và khi đó sẽ có một hay một số người chịu trách
nhiệm quản lý hệ thống. Những người có vai trị như vậy được gọi là database
administrator (DBA). Mỗi một database cần ít nhất 01 người để thực hiện công việc
quản trị.
Một database administrator có trách nhiệm thực hiện một số cơng việc sau:
 Cài đặt và nâng cấp Oracle server và các công cụ ứng dụng khác.
 Phân phối hệ thống lưu trữ và lên kế hoạch lưu trữ cho hệ thống cơ sở dữ liệu
trong tương lai.
 Tạo những cấu trúc lưu trữ cơ bản như tablespaces phục vụ cho việc phát triển
và hoạt động của các ứng dụng.
 Tạo các đối tượng trong database như tables, views, indexes sử dụng cho các
ứng dụng được thiết kế.
 Thay đổi cấu trúc database khi cần thiết tuỳ theo các thông tin của các
application.

12


 Quản lý các users và đảm bảo bảo mật hệ thống.
 Đảm bảo tương thích về bản quyền, phiên bản với hệ thống Oracle
 Điều khiển và quản trị các user access truy xuất tới database.
 QUản lý và tối ưu các truy xuất tới database.
 Lên kế hoạch backup (sao lưu) và recovery (phục hồi) các thông tin có trong
database.
 Lưu trữ các archive data.

 Sao lưu và khôi phục database.
 Cập nhật các công nghệ mới đưa ra các câu hỏi bổ ích.
Security Officers: Trong một số trường hợp, hệ thống đòi hỏi chế độ bảo mật
cao. Khi đó cần đến một hay một nhóm người chuyên thực hiện công tác bảo vệ
database gọi là security officers. Security officer có thể kết nối tới database, điều khiển
và quản lý việc truy cập database của các users và bảo mật hệ thống.
Application developer là người thiết kế và viết các ứng dụng database.
Application developer có trách nhiệm thực hiện một số yêu cầu sau:
 Thiết kế và phát triển ứng dụng database.
 Thiết kế cấu trúc database cho từng ứng dụng.
 Đánh giá yêu cầu lưu trữ cho ứng dụng.
 Quy định các hình thức thay đổi cấu trúc database của ứng dụng.
 Thiết lập biện pháp bảo mật cho ứng dụng được phát triển.
Database users tương tác với database thông qua các ứng dụng và các tiện ích.
Một user điển hình có thể thực hiện được một số cơng việc sau:
 Truy nhập, sửa đổi, và xóa huỷ các dữ liệu được phép
 Tạo các báo cáo đối với dữ liệu
Network Administrators: Đối với database Oracle hoạt động trên mơi trường
mạng, khi đó cần có một user thực hiện cơng việc quản trị mạng. User này có trách
nhiệm đảm bảo các ứng dụng Oracle hoạt động trên môi trường mạng được tốt.
Đặc quyền trong Oracle là quyền thực hiện một thao tác nhất định đối với cơ
sở dữ liệu. Đặc quyền có thể gán(Grant) hoặc thu hồi(Revoke) đối với người
dùng.Phân loại:

13


 Đặc quyền đối tượng: quyền thực hiện một thao tác cụ thể lên một schema
object cụ thế. Ví dụ như quyền thêm, xóa, sửa các hàng dữ liệu khỏi bảng.
 Đặc quyền hệ thống: quyền thực hiện một tác vụ cơ sở dữ liệu cụ thể hoặc

quyền thực hiện một loại hành động trên tất cả những đối tượng schema của hệ thống.
Ví dụ: quyền ALTER SYSTEM, quyền CREATE TABLE, quyền DELETE ANY
TABLE ...
Trong Oracle có các tài khoản quản trị được xác định sẵn:Mặc định sau khi cài đặt
Oracle Database thì ta có các Database Administrator (DBA) như là SYS, SYSTEM,
DBSNMP,…
 SYS: Có đầy đủ các quyền cũng như quyền cấp lệnh cho User khác (ADMIN
OPTION). Có thể startup, shutdown và maintenance Database. Sở hữu Data
Dictionary và Automatic Workload Repository (AWR).
 SYSTEM:



các

quyền

DBA,

MGMT_USER



roles

AQ_ADMINISTRATOR_ROLE.
 DBSNMP: Có role OEM_MONITOR.
 SYSMAN:




các

quyền

MGMT_USER,

RESOURCE



roles

SELECT_CATALOG_ROLE.
2.2.

Một số kỹ thuật tấn công leo thang đặc quyền trong oracle

2.2.1. SQL Injection
- Khơng kiểm tra ký tự thốt truy vấn
Đây là dạng lỗi SQL injection xảy ra khi thiếu đoạn mã kiểm tra dữ liệu đầu
vào trong câu truy vấn SQL. Kết quả là người dùng cuối có thể thực hiện một số
truy vấn không mong muốn đối với cơ sở dữ liệu của ứng dụng
Ví dụ: Dùng đoạn mã sau để minh họa lỗi này
statement = "SELECT * FROM users WHERE name = '" + userName + "';"
Câu lệnh được thiết kế để trả về các bản ghi tên người dùng cụ thể từ bảng
người dùng. Tuy nhiên, nếu biến useName được nhập chính xác theo một cách nào
đó bởi người dùng ác ý, nó có thể trở thành một câu truy vấn SQL với mục đích
khác hẳn so với mục đích của tác giả của đoạn mã trên. Ví dụ như biến useName
thành như sau:

a' or 't'='t

14


Khiến câu truy vấn được hiểu như sau:
SELECT * FROM users WHERE name = 'a' OR 't'='t';
Nếu đoạn mã trên được sử dụng trong một thủ tục xác thực thì ví dụ trên có thể
được sử dụng để bắt buộc lựa chọn một tên người dùng hợp lệ bởi 't'='t' luôn đúng.
Trong khi hầu hết các SQL server cho phép thực hiện nhiều truy vấn cùng lúc chỉ
với một lần gọi, tuy nhiên một số SQL API như mysql_query của php lại khơng
cho phép điều đó vì lý do bảo mật. Điều này chỉ ngăn cản tin tặc tấn công bằng
cách sử dụng các câu lệnh riêng rẽ mà không ngăn cản tin tặc thay đổi các từ trong
cú pháp truy vấn. Các giá trị của biến "userName" trong câu truy vấn dưới đây sẽ
gây ra việc xoá những người dùng từ bảng người dùng cũng tương tự như việc xóa
tất cả các dữ liệu được từ bảng dữ liệu (về bản chất là tiết lộ các thông tin của mọi
người dùng), ví dụ này minh họa bằng một API cho phép thực hiện nhiều truy vấn
cùng lúc:
a';DROP TABLE users; SELECT * FROM data WHERE 't' = 't
Điều này đưa tới cú pháp cuối cùng của câu truy vấn như sau:
SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT *
FROM DATA WHERE 't' = 't';
-

Xử lý không đúng kiểu
Lỗi SQL injection dạng này thường xảy ra do lập trình viên hay người dùng

định nghĩa đầu vào dữ liệu không rõ ràng hoặc thiếu bước kiểm tra và lọc kiểu dữ
liệu đầu vào. Điều này có thể xảy ra khi một trường số được sử dụng trong truy vấn
SQL nhưng lập trình viên lại thiếu bước kiểm tra dữ liệu đầu vào để xác minh kiểu

của dữ liệu mà người dùng nhập vào có phải là số hay khơng
Ví dụ:
statement:= "SELECT * FROM data WHERE id = " + a_variable + ";"
Ta có thể nhận thấy một cách rõ ràng ý định của tác giả đoạn mã trên là nhập
vào một số tương ứng với trường id - trường số. Tuy nhiên, người dùng cuối, thay
vì nhập vào một số, họ có thể nhập vào một chuỗi ký tự, và do vậy có thể trở thành
một câu truy vấn SQL hồn chỉnh mới mà bỏ qua ký tự thốt. Ví dụ, ta thiết lập giá
trị của biến a_variable là:
1;DROP TABLE users

15


Khi đó, nó sẽ thực hiện thao tác xóa người dùng có id tương ứng khỏi cơ sở dữ
liệu, vì câu truy vấn hoàn chỉnh đã được hiểu là:
SELECT * FROM DATA WHERE id=1;DROP TABLE users;
-

Blind SQL Injection
Lỗi SQL injection dạng này là dạng lỗi tồn tại ngay trong ứng dụng web nhưng

hậu quả của chúng lại không hiển thị trực quan cho những kẻ tấn cơng. Nó có thể
gây ra sự sai khác khi hiển thị nội dung của một trang chứa lỗi bảo mật này, hậu
quả của sự tấn cơng SQL injection dạng này khiến cho lập trình viên hay người
dùng phải mất rất nhiều thời gian để phục hồi chính xác từng bit dữ liệu. Những kẻ
tấn cơng cịn có thể sử dụng một số cơng cụ để dị tìm lỗi dạng này và tấn cơng với
những thông tin đã được thiết lập sẵn.
-

Thay đổi giá trị kiểu truy vấn

Dạng lỗi này khiến kẻ tấn cơng có thể thay đổi giá trị điều kiện trong câu lệnh

truy vấn, làm sai lập sự hiển thị của một ứng dụng trong lỗi này
SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=1;
Sẽ hiển thị một cách bình thường trong khi:
SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=2;
Sẽ hiển thị một nội dung khác, hoặc không hiển thị gì nếu ứng dụng web có
chứa lỗi SQL injection dạng này. Lỗ hổng dạng này còn cho phép tin tặc không chỉ
gây ảnh hưởng tới bảng hay dữ liệu hiện tại mà còn ảnh hưởng tới những dữ liệu
hay bảng khác phụ thuộc vào nội dung của dữ liệu hay bảng hiện tại.
-

Điều kiện lỗi
Lỗi SQL injection dạng này dẫn tới việc buộc cơ sở dữ liệu chỉ được phép đánh

giá khi mà giá trị của câu lệnh WHERE là đúng.
Ví dụ:
SELECT 1/0 FROM users WHERE username='Ralph';
Phép chia cho 0 chỉ được đánh giá là lỗi khi mà người dùng có tên "Ralph" tồn
tại trong cơ sở dữ liệu.
-

Thời gian trễ
Lỗi SQL injection dạng này tồn tại khi thời gian xử lý của một hay nhiều truy

vấn SQL phụ thuộc vào dữ liệu logic được nhập vào hoặc quá trình xử lý truy vấn

16



của SQL engine cần nhiều thời gian. Tin tặc có thể sử dụng lỗi SQL injection dạng
này để xác định thời gian chính xác mà trang cần tải khi giá trị nhập vào là đúng.
Một số dạng tấn công thường gặp với ứng dụng Web

-

Dạng tấn công vượt qua kiểm tra lúc đăng nhập
Với dạng tấn công này, tin tặc 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ập và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 đăng nhậ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.
Ví dụ:
Trong trường hợp sử dụng ASP, người ta có thể dùng 2 trang: 1 trang HTML để
hiển thị Form nhập liệu và 1 trang ASP để xử lý thông tin nhập vào từ phía người
dùng như sau:
Trang nhập liệu: login.html
<form action="ExecLogin.asp" method="post">
Username: <input type="text" name="fUSRNAME">

Password: <input type="password" name="fPASSWORD">

<input type="submit">
</form>
Trang xử lý nhập liệu: execlogin.asp
<%
Dim vUsrName, vPassword, objRS, strSQL
vUsrName = Request.Form("fUSRNAME")

vPassword = Request.Form("fPASSWORD")
strSQL = "SELECT * FROM T_USERS " & _
"WHERE USR_NAME=' " & vUsrName & _
" ' and USR_PASSWORD=' " & vPassword & " ' "
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."
If (objRS.EOF) Then

17


Response.Write "Invalid login."
Else
Response.Write "You are logged in as " & objRS("USR_NAME")
End If
Set objRS = Nothing %>
Chỗ sơ hở trong đoạn mã xử lý nhập liệu trên nằm ở chỗ dữ liệu nhập vào từ
người dùng được dùng để xây dựng trực tiếp câu lệnh SQL. Chính điều này cho
phép tin tặc có thể điều khiển câu truy vấn sẽ được thực hiện. Ví dụ, nếu người
dùng nhập chuỗi trong ngoặc sau vào trong cả 2 ô nhập liệu username/password
của trang login.htm là:('OR='). Lúc này, câu truy vấn sẽ được gọi thực hiện là:
SELECT * FROM T_USERS WHERE USR_NAME =''OR''='' AND
USR_PASSWORD= ''OR''=''
Câu truy vấn này là hợp lệ và sẽ trả về tất cả các bản ghi của T_USERS và
đoạn mã tiếp theo xử lí người dùng đăng nhập bất hợp pháp này như là người dùng
đăng nhập hợp lệ.
Dạng tấn công sử dụng câu lệnh SELECT
Dạng tấn công này phức tạp hơn. Để thực hiện được kiểu tấn công này, kẻ tấn
cơng phải có khả năng hiểu và lợi dụng các sơ hở trong các thông báo lỗi từ hệ
thống để dị tìm các điểm yếu khởi đầu cho việc tấn cơng. Ví dụ, trong các trang

tìm kiếm. Các trang này cho phép người dùng nhập vào các thông tin tìm kiếm như
Họ, Tên, … Đoạn mã thường gặp là:

Tương tự như trên, tin tặc có thể lợi dụng sơ hở trong câu truy vấn SQL để
nhập vào trường tên tác giả bằng chuỗi giá trị:

18


Lúc này, ngồi câu truy vấn đầu khơng thành cơng, chương trình sẽ thực hiện
thêm lệnh tiếp theo sau từ khóa UNION nữa. Giả sử đoạn mã nhập vào là:

Câu truy vấn sẽ thực hiện việc xóa bảng
Dạng tấn cơng sử dụng câu lệnh INSERT
Thông thường các ứng dụng web cho phép người dùng đăng kí một tài khoản
để tham gia. 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. SQL injection 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
Ví dụ: Một câu lệnh insert có dạng

Nếu đoạn mã xây dựng câu lệnh SQL có dạng:

Thì chắc chắn sẽ có lỗi SQL vì nếu ta nhập vào câu lệnh thứ nhất ví dụ như:

Lúc này câu truy vấn sẽ là:

Khi đó, lúc thực hiện lệnh xem thơng tin, xem như bạn đã yêu cầu thực hiện
thêm một lệnh nữa đó là:

19



2.2.2. Leo thang đặc quyền với Oracle Indexes

Index là một database object được tạo ra trên table với mục đích tăng tốc
tốc độ truy xuất dữ liệu. Với ý nghĩa như mục lục của cuốn sách, index được
tạo trên 1 hoặc nhiều column. Khi đó index sẽ lưu giữ các giá trị trong các
column đó, cùng với rowId( địa chỉ vật lý trên disk) của tường row dữ liệu.
Nhờ vậy khi truy vấn 1 lượng data nhỏ, Oracle có thể lấy được ngày dữ liệu
nhờ việc truy xuất đúng vị trí row dữ liệu trên disk, thay vì phải dị tồn bộ bảng
để tìm dữ liệu.Trong Oracle, để có thể tạo các Index trên bảng, người dùng phải
sở hữu bảng hoặc có đặc quyền hệ thống CREATE ANY INDEX. Nếu người
dùng có một trong 2 đặc quyền này, thì lỗ hổng bảo mật sẽ được mở ra, theo đó
họ có thể thực thi SQL tùy ý như là chủ sở hữu của bảng bằng cách tạo một
functionbased index trên bảng. Nếu bảng trong question được sở hữu bởi
người dùng có đặc quyền cao như SYS hoặc SYSTEM thì máy chủ cơ sở dữ
liệu sẽ bị lộ nguy hiểm vì nó cung cấp cho kẻ tấn cơng khả năng thỏa hiệp
hồn tồn hệ thống.
2.2.3. Tấn cơng chèn mã PL/SQL
Bạn có thể sử dụng các phương pháp khác nhau để nâng cao đặc quyền trong
Oracle từ tràn bộ đệm và DLL patching đến các cuộc tấn công chuyên biệt chống lại
cơ sở dữ liệunhư PL/SQL Injection.Không giống như hệ quản trị SQL Server, nơi kẻ
tấn công thể thể tiêm ‘xp_cmdshell’ gần như ngay lập tức sau khi ‘SELECT’ bằng
cách đóng nó bằng dấu ngoặc kép, Oracle DB từ chối thẳng thừng các thủ thuật đó.
Do đó ta xem xét sử dụng tiêm PL/SQL, đang sửa đổi quy trình thực hiện một
thủ tục hàm (function, trigger, và đối tượng khác) bằng cách nhúng các lệnh ngẫu
nhiên vào các tham số đầu vào có sẵn. Người tấn cơng tìm thấy lỗ hổng tiêm PL/SQL,
họ có thể tiêm mã PL/SQL để tăng đặc quyền và bắt đầu các lệnh hệ điều hành trên
máy chủ cơ sở dữ liệu
Sử dụng PL/SQL injection, người tấn cơng có thể leo thang đặc quyền từ tài

khoản Public tới tài khoản đặc quyền mức DBA. Kỹ thuật này xuất hiện ở tất cả các
phiên bản của Oracle và có thể dùng để tấn công các procedure của khách hàng cũng
như của chính Oracle. Có thể inject vào các câu lệnh insert, select, delete, update trong
các procedure, package, vào các anonymous PL/SQL Blook.

20


Để nhúng các tải trọng (payload), tìm một function trong đó các tham số đầu
vào khơng được lọc. Do Oracle không cho phép truy vấn đa câu lệnh nên bạn cần sử
dụng một số thủ tục “đặc biệt” có tính năng này. Ý tưởng đằng sau cuộc tấn công như
sau:Theo mặc định, trừ khi có quy định khác, thủ tục được thực hiện thay mặt chủ sở
hữu và không thay mặt người dùng đã bắt đầu nó. Nói các khác, nếu một thủ tục thuộc
sở hữu của tài khoản SYS có sẵn để thực thi và bạn có thể nhúng mã của mình vào
nó, các tải trọng của bạn cũng sẽ được thực hiện trong ngữ cảnh của tài khoản SYS.
Như đã đề cập,đây không phải là điều luôn xảy ra vì có các thủ tục với tham số ‘authid
current_user’, có nghĩa là thủ tục này sẽ được thực thi với đặc quyền của người dùng
hiện tại. Tuy nhiên,thường trong mỗi phiên bản ban có thể tìm một số chức năng dễ
bị tổn thương khi tiêm PL/SQL.
Hãy xem xét quy trình PL / SQL sau với SQL động:

Hình 2.3 Khai thác PL/SQL
Giả sử chủ sở hữu của thủ tục này sẽ là SYS và hãy cấp quyền thực thi cho SCOTT
của người dùng bình thường.

Hình 2.4 Khai thác PL/SQL
Thực hiện bình thường:

Hình 2.5 Khai thác PL/SQL


21


Ví dụ sau minh họa cách SQL injection cho phép truy xuất dữ liệu trái phép:

Hình 2.6 Khai thác PL/SQL
Chúng ta có thể thấy cách lập trình khơng chính xác có thể trở thành điểm
khởi đầu cho cuộc tấn cơng vào cơ sở dữ liệu. Chỉ sử dụng các quyền tối thiểu (THỦ
TỤC THỰC HIỆN) và các đặc quyền (TẠO PHIÊN BẢN), chúng ta có thể lấy mã
băm của mật khẩu SYS. Từ đó cho chúng ta cơ hội sử dụng để giải mã mật khẩu
SYS
2.2.4. Sử dụng công cụ Odat
Odat (Oracle Database Attacking Tool) là một công cụ kiểm tra thâm nhập mã
nguồn mở kiểm tra tính bảo mật của cơ cở dữ liệu Oralce từ xa (áp dụng cho Oracle
10g, 11g, 12c).
Một số ví dụ sử dụng Odat:
Bạn có tài khoản Oralce hợp lệ để kết nối với cơ sở dữ liệu và muốn leo
thang đặc quyền của mình để trở thành DBA hoặc SYSDBA
Bạn có tài khoản Oracle và bạn muốn thực thi các lệnh hệ thống (ví dụ:
reverse shell– một loại shell mà mục tiêu giao tiếp ngược lại với kẻ tấn công) để
chiếm quyền trên hệ điều hành lưu trữ cơ sở dữ liệu. Sử dụng all module là module
đầu tiên được sử dụng khi bạn gặp cơ sở dữ liệu Oracle.
Bạn có thể sử dụng lệnh này để bắt đầu:
Bạn có thể cung cấp SID nếu bạn biết:
./odat.py all -s 192.168.1.254 -p 1521
./odat.py all -s 192.168.1.254 -p 1521 -d ORCL
Nếu bạn biết một tài khoản hợp lệ, bạn có thể sử dụng module sau :
./odat.py all -s 192.168.1.254 -p 1521 -d ORCL -U SYS -P password
Để trở thành DBA với các đặc quyền hệ thống ta sử dụng module privesc của
Odat. Module privesc có được quyền truy cập đặc quyền (ví dụ DBA) bằng cách sử


22


dụng các kết hợp đặc quyền hệ thống sau đây:
 CREATE ANY PROCEDURE (cho phép người dùng tạo thủ tục, hàm hoặc gói
PL/SQL do bất kỳ người dùng nào sở hữu trong cơ sở dữ liệu)
 CREATE PROCEDURE (Cho phép người dùng tạo thủ tục, hàm hoặc gói PL
SQL do người dùng đó sở hữu) và EXECUTE ANY PROCEDURE (Cho phép
người dùng thực hiện bất kỳ thủ tục, hàm hoặc gói PL / SQL nào trong cơ sở dữ
liệu)
 CREATE ANY TRIGER (và CREATE PROCEDURE)
 ANALYZE ANY (và CREATE PROCEDURE)
 CREATE ANY INDEX (Cho phép người dùng tạo một chỉ mục trên bất kỳ bảng
hoặc chế độ xem cụ thể hóa trong cơ sở dữ liệu) (và CREATE PROCEDURE)
Với module privesc, bạn có thể gán quyền DBA cho người dùng Oracle sử dụng
module này. Một ví dụ sử dụng đặc quyền CREATE/ EXCUTE ANY
PROCEDURE:
./odat.py privesc -s $SERVER -d $ID -U $USER -P $PASSWORD --dba-with-create
any-trigger
Ngồi ra, có thể thực hiện các truy vấn SQL dưới dạng SYS theo cách thủ công.
Dưới đây là một ví dụ sử dụng đặc quyền CREATE/ EXCUTE ANY PROCEDURE:
./odat.py privesc -s $SERVER -d $ID -U $USER -P $PASSWORD --exec-with
execute-any-procedure 'GRANT dba TO $USER'

Bạn có thể thu hồi vai trò DBA bằng sử dụng lệnh sau:
./odat.py privesc -s $SERVER -d $ID -U $USER -P $PASSWORD --revoke-dba-role
Lệnh –get-detailed-privs có thể được sử dụng để có được đặc quyền và vai trò
hệ thống gán cho người dùng Oracle đã chạy module này:
./odat.py privesc -s $SERVER -d $ID -U $USER -P $PASSWORD --get-privs


2.3.4. Tấn công rookit trong oracle
Rootkit là một loại mã độc được thiết kế để che giấu không chỉ chính nó
mà cịn có thể che giấu được các thành phần liên quan khác như: tiến trình, tệp,
người dùng, nhật ký, mạng, cửa hậu (Backdoor). Rootkit là một tập các chương

23


trình, đoạn mã cho phép tồn tại một cách bền vững, lâu dài, khó có thể phát hiện
trên máy tính. Đặc điểm của Rootkit khác với virus là nó khơng có khả năng
nhân bản, khơng tự lây nhiễm, và nó cần chiếm được quyền cao nhất của hệ
thống (quyền root) để có thể thực hiện được. Tuy nhiên, Rootkit rất khó phát hiện bởi
nó có khả năng ẩn chính mình.
Khi nắm được quyền cao nhất, người dùng có thực hiện các thao tác thêm, sửa,
xóa…trong cơ sở dữ liệu và làm những hành động mà người quản trị và người dùng
khác không phát hiệnđược nếu họ không sử dụng các phần mềm dò quét rootkit

24


CHƯƠNG 3. THỰC NGHIỆM
3.1.Leo thang đặc quyền với Oracle Indexes
Để tăng tốc độ truy vấn các tập dữ liệu lớn, hầu hết các máy chủ cơ sở dữ liệu
đều cho phép lập chỉ mục dữ liệu bảng. Trong Oracle, để có thể tạo chỉ mục trên bảng,
người dùng phải sở hữu bảng hoặc có đặc quyền đối tượng INDEX trên bảng hoặc có
hệ thống TẠO BẤT KỲ CHỈ SỐ đặc quyền. Nếu người dùng có một trong hai đặc
quyền này, thì một lỗ hổng bảo mật sẽ được mở ra, theo đó họ có thể thực thi SQL tùy
ý với tư cách là chủ nhân của bảng bằng cách tạo một chỉ mục dựa trên hàm trên bàn.
Nếu bảng được đề cập thuộc sở hữu của người dùng có đặc quyền cao như SYS

hoặc SYSTEM thì máy chủ cơ sở dữ liệu trở nên nguy hiểm vì nó cung cấp cho kẻ
tấn cơng khả năng thỏa hiệp hệ thống.
Vai trị PUBLIC (trước đây) đã được cấp đặc quyền INDEX trên các bảng sản
phẩm và các tùy chọn phụ thuộc:
SYS.DUAL
SYS.OLAPTABLEVELS
SYS.OLAPTABLEVELTUPLES
SYSTEM.OLAP_SESSION_CUBES
SYSTEM.OLAP_SESSION_DIMS
SYSTEM.PLAN_TABLE
FLOWS_FILES.WWV_FLOW_FILE_OBJECT$
TOAD.TOAD_PLAN_TABLE
Bản ghi sau minh họa cách kẻ tấn cơng có thể tận dụng đặc quyền INDEX để
thực thi SQL tùy ý. Giả sử có một bảng được gọi là FOO thuộc sở hữu của SYS và
PUBLIC đã được cấp Đặc quyền INDEX trên đó. Người dùng có tên TSS kết nối với
máy chủ cơ sở dữ liệu và cố gắng thiết lập DBA vai trị khơng thành cơng vì TSS chưa
được cấp thành viên của vai trò này. Người dùng TSS sẽ nhận được DBA đặc quyền
bằng cách khai thác lỗ hổng INDEX. TSS đầu tiên tạo một hàm gọi là GETDBO sẽ
thực hiện công việc. TSS tiếp theo tạo một chỉ mục có tên EXPLOIT_INDEX trên
bảng SYS.FOO gọi hàm GETDBA. Tiếp theo, TSS chọn từ bảng DUAL tạo ra chỉ
mục EXPLOIT INDEX để thực thi hàm GET DBA với các đặc quyền SYS. Hàm GET
DBA chứa SQL để CẤP vai trò DBA cho vai trị CƠNG. Khi điều này đã được thực

25


×