Tải bản đầy đủ (.doc) (59 trang)

Tấn công rootkit trong Oracle (doc)

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.03 MB, 59 trang )

Tấn công rootkit trong Oracle
MỤC LỤC
1.1 13
DANH MỤC CÁC HÌNH VẼ 13
API 14
Application Program Interface 14
ARCn 14
Archive 14
CSDL 14
Cơ sở dữ liệu 14
DB 14
Database 14
DCL 14
Data Control Language 14
DDL 14
Data dictionary Language 14
DML 14
Data Manipulate Language 14
DBWn 14
Database Written 14
DLL 14
Thư viện liên kết động 14
Function 14
Hàm 14
Instance 14
Thành phần logic của DB 14
LGWR 14
Log writer 14
OS 14
Hệ điều hành 14
Package 14


Chứa các procedure, function 14
PGA 14
Private Global Area 14
PL/SQL 14
Ngôn ngữ truy vấn có thủ tục 14
Procedure 14
Thủ tục 14
RDBMS 14
Hệ quản trị cơ sở dữ liệu quan hệ 14
Rootkit 14
Chương trình che giấu hành vi của hacker 14
SQL 14
Trang 1
Tấn công rootkit trong Oracle
Ngôn ngữ truy vấn 14
SGA 14
System Global Area 14
Table 14
Bảng 14
Tablespace 14
Tập hợp các table, view, index… 14
View 14
Table chứa metadata 14
Rootkit trong OS không còn xa lạ với chúng ta. Chúng đã được các kẻ xâm nhập sử
dụng để che giấu các dấu vết từ rất lâu. Tuy nhiên, không phải ai cũng biết rằng rootkit
còn có thể được sử dụng và đang được các hacker sử dụng trong cơ sở dữ liệu, thường
chứa các dữ liệu quan trọng của các công ty, tổ chức 14
Theo ước tính, khoảng 100 triệu người có thông tin cá nhân nằm trong tầm kiểm soát
của tội phạm Internet. Lấy cắp thông tin đã trở thành một nguy cơ chính, thông tin đã
trở thành mỏ vàng cho tội phạm. Thông tin cá nhân được chia thành nhiều loại với mức

giá khác nhau. Ví dụ, thông tin về địa chỉ, số điện thoại, ngày sinh, số dịch vụ xã hội, số
đăng ký băng lái…đều được đặt giá. Rất nhiều cơ sở dữ liệu của các công ty lớn bị xâm
phạm. Nhất là các ngân hàng, nhà băng, dịch vụ thẻ thanh toán như CardSystems,
Citigroup, Bank of America, DSW Shoe Warehouse… đều đã bị tội phạm nhòm ngó và
gây ra thiệt hại nhất định 15
Oracle là hãng dẫn đầu trong thị trường cơ sở dữ liệu và thường được sử dụng ở các cơ
quan, tổ chức lớn. Với khối lượng dữ liệu lớn và quan trọng. Không nghi ngờ gì, Oracle
đã trở thành đích ngắm hấp dẫn trong các cuộc tấn công 15
Oracle database rootkit là hướng tấn công khá mới. Rootkit được cài đặt sau khi đã đột
nhập thành công vào một Oracle database, để che giấu mọi dấu vết của cuộc đột nhập,
và trở thành tấm bình phong che chắn sự hiện diện của attacker trong database. Người
quản trị sẽ khó lòng biết được database của mình có đang bị nhìn ngó hay bị tấn công
hay không, dù có sử dụng các công cụ tìm kiếm rootkit. Và vì thế không có biện pháp
cải thiện hay áp dụng phương pháp tự bảo vệ, qua một thời gian dài thiệt hại sẽ rất
đáng kể. Khi mà cơ sở dữ liệu là một tài nguyên vô cùng quan trọng có ý nghĩa sống
còn đối với doanh nghiệp, tổ chức 15
15
TÌM HIỂU VỀ ROOTKIT 16
Hiểu biết chung về mã độc hại(malware) 16
Thuật ngữ malware là từ viết tắt của malicious software. Malware được tạo với mục
đích truy nhập, chỉnh sửa và phá hoại các software khác trên máy tính. Malware có
nhiều loại: virus, worms, trojans, backdoor, spyware… và các biến thể khác xuất hiện
từng ngày 16
Mục tiêu của malware có thể là thông tin cá nhân, dữ liệu, tài nguyên máy tính… Bằng
cách ghi dấu thói quen lướt Web của bạn, chúng biết những vấn đề bạn quan tâm và
những quảng cáo mà sẽ phù hợp với ý định của bạn. Những malware này cho phép các
công ty quảng cáo thiết kế các pop up nắm bắt mục đích của từng cá nhân. Xa hơn nữa,
malware có thể điều khiển nội dung những gì được hiển thị trên trình duyệt của bạn.
Đó là hijacking. Các nội dung tìm kiếm và hiển thị của bạn có thể bị hijack sang trang
mà malware chỉ định. Điều này có thể đưa đến nhiều phiền toái khi các pop up liên tục

nhảy ra, và tệ hơn nữa nó có thể chứa các virus, worm mà khi vô tình kích phải chúng
sẽ ngay lập tức xâm nhập vào máy tính của bạn 16
Mục tiêu thứ ba, là thông tin cá nhân. Những thông tin dùng để đăng nhập vào tài
khoản ngân hàng, chuyển tiền, rút tiền. Nếu bạn dùng password, hacker có thể dùng
chương trình giải mã mật khẩu. Hoặc nó có thể giả một chương trình an ninh, dụ bạn
cài vào mà không biết trong đó có thể có chương trình keylogger, spyware… sẵn sàng
lấy cắp thông tin của bạn. Cuối cùng, hacker sẽ lợi dụng tài nguyên hệ thống vào
Trang 2
Tấn công rootkit trong Oracle
những mục đích như tấn công hệ thống khác, ẩn nấp sau hệ thống của bạn nhằm che
giấu hành tung của mình. Để thực hiện được các mục đích này, malware sẽ thực hiện
dễ dàng hơn nếu có sự trợ giúp của rootkit. Vì thế các malware đầu tiên sẽ cài đặt
rootkit vào máy, tới lượt mình rootkit sẽ che giấu hành vi của malware. Thực tế, rootkit
là xấu hay tốt do mục đích mà nó được sử dụng 16
Khái niệm Rootkit 17
1.1.1. Lịch sử Rootkit 17
Kỹ thuật Rootkit thực ra không phải là mới. Nó đã tồn tại gần mười mấy năm. Đầu tiên
được phát triển trên hệ điều hành Unix-like (Solaris và Linux) và sau đó là trên
Windows. Rootkit đầu tiên được công khai trên Windows là vào năm 1999 bởi Greg
Hoglund- một chuyên gia về bảo mật và người lập website rootkit.com. Thuật ngữ
rootkit bắt nguồn từ root – mức truy nhập cao nhất vào hệ thống, có quyền admin và
từ kit- một tập các công cụ để che giấu và chiếm quyền 17
Việc phát hiện Sony Rootkit ( rootkit quản lí bản quyền số) bởi Mark Russonovich của
Sysinternal đã khiến rootkit được quan tâm một cách đặc biệt và nhiều người đã bắt
đầu tìm hiểu hoạt động của nó. Cho tới sự kiện đó, rootkit chỉ là một cái gì đó khêu gợi
sự tò mò, hơn là một hiểm họa cận kề. Sự kiện Sony Rootkit xảy ra ngày 31/10/2005
đã đưa rootkit thành trung tâm chú ý. Nó cũng chứng tỏ, hãng đã nghiên cứu và phát
triển kỹ thuật rootkit qui củ. Sau sự kiện này, Sony đã phải tiến hành gỡ bỏ rootkit trên
các đĩa CD và tốn khoản bồi thường không ít 17
Sự kiện này được cho là trước sau gì cũng xảy ra, khi mà các nhà cung cấp bảo mật

đưa ra nhiều biện pháp để chống lại các kiểu nguy cơ có thể, thì những người tạo
malware cũng sẽ tương ứng đáp lại bằng các kỹ thuật ăn cắp và tinh ranh hơn. Bằng
cách sử dụng rootkit và khả năng lén lút của nó, những hacker máy tính đã tìm ra cách
mới và hiệu quả để tấn công. Các chương trình che giấu và rootkit cho thấy một nguy
cơ cận kề về an ninh mạng. Thực tế, ngày 6/12/2005 tạp chí eweek đã công bố rằng có
tới 20% malware bị phát hiện trên Windows XP SP2 là các rootkit. Một số liệu sau đó
vào ngày 6/12/2006 cũng ghi nhận rằng tỉ lệ rootkit trong số malware là 14%, trong
khi tại thời điểm của sự kiện Sony Rootkit con số đó là 8% 17
1.1.2. Định nghĩa Rootkit 17
Rootkit là một chương trình được thiết kế để che giấu không chỉ chính nó mà còn các
thành phần liên quan khác như process, file, folder, registry keys, ports và driver.
Rootkit có thể có mục đích tốt whitehat (nhưng vẫn tiềm ẩn nguy cơ mất an toàn) hay
mục đích xấu – blackhat. Các rootkit độc hại thường dùng cho việc xâm nhập và duy trì
điều khiển từ xa một cách bất hợp pháp. Rootkit độc hại che giấu các malware,
malwware sẽ cài đặt các backdoor cho phép hacker truy nhập tới máy bị điều khiển 17
Rootkit cho thấy một lỗ hổng cơ bản của hệ điều hành. Khó mà biết được tính toàn vẹn
của hệ thống tới đâu, hay độ tin cậy các bản báo cáo, các kết quả quét mã độc. Chúng
ta sẽ không thể chắc chắn rằng máy tính của mình không đang chứa chấp những mã
độc hại ngấm ngầm hoạt động và tác hại của chúng 18
Cách thức hoạt động của Rootkit 18
Sự xuất hiện của Rootkit trên máy tính hay mạng cho thấy khả năng bị vi phạm của
các hệ thống mà bạn phải làm việc và tin tưởng và đó cũng là lỗ hổng an ninh lớn nhất.
Không nghi ngờ gì nữa, rootkit có khả năng quanh quẩn ở đâu đó để thực hiện những
nhiệm vụ mà nhờ đó nó được tạo ra. Vậy làm thế nào rootkit có thể lợi hại như vậy? Đó
là nhờ lợi dụng tính mềm dẻo và linh hoạt của kiến trúc Windows. Phần này chúng ta sẽ
tìm hiểu cách thức ẩn nấp và hoạt động của Rootkit 18
1.1.3. Chiếm quyền điều khiển 18
Bất kì khi nào user hay một chương trình nào truy vấn hệ thống, kết quả trả về sẽ
được mặc định tin tưởng không gợn chút nghi vấn. Rootkit lợi dụng sự tin tưởng cơ bản
này. Đầu tiên nó phải chiếm được quyền quản trị hệ thống để có thể điều khiển hệ

thống làm gì cho nó. Vì thế chiếm quyền admin là một bước vô cùng quan trọng và
quyết định 18
1.1.4. Kỹ thuật Hooking 18
Là kỹ thuật mà Rootkit sử dụng để thay đổi đường dẫn thực thi của hệ điều hành- nó
chặn các lời gọi hệ thống và điều chỉnh kết quả sao cho không có dấu vết gì về sự tồn
Trang 3
Tấn công rootkit trong Oracle
tại của nó. Hook sẽ chuyển hướng các chương trình bình thường, sang các hàm của
rootkit thay vì các hàm của hệ thống. Cả kernel mode và user mode rootkit đều sử
dụng kỹ thuật hooking để lọc các kết quả trả về bởi OS và giấu đi sự tồn tại của nó. Các
chương trình phân tích và quét sẽ không phát hiện ra thông tin về sự tồn tại của nó
trong Registry, cũng như các port mà rootkit sử dụng. Đó là vì các chương trình này
dựa trên thông tin lấy từ OS. Chúng ta sẽ không phát hiện được rootkit thông qua các
công cụ như Task Manager, windows explorer hay regedit. Windows sử dụng các table
để lưu trữ và ghi dấu các thông tin quan trọng. Các table này có thể bị hook, thay đổi
và bẻ gẫy bởi rootkit. User mode và kernel mode rootkit đều sử dụng kỹ thuật hook và
mỗi loại bị hạn chế bởi những gì mà chúng có thể hook do phạm vi hoạt động của
chúng. User mode rootkit chỉ có thể hook các table trong phạm vi không gian địa chỉ
dành cho user (các bảng IAT, EAT) hoặc có thể chèn các jump vào API mức user để
thay các system call sang function của rootkit 18
Có hai kiểu hook là priviledge hook và unpriviledged hooks. User mode rootkit là các
unpriviledge hook, trong khi kernel mode rootkit là priviledge hook. Ở mỗi kiểu hook
khác nhau về quyền hệ thống đều sử dụng kỹ thuật hook giống nhau. Kỹ thuật hooking
API: user mode rootkit sẽ chặn các lời gọi hàm API và thay đổi địa chỉ API trong IAT
thuộc tiến trình của user, sau đó trỏ tới rootkit function thay vì Windows API functions.
Cả user mode và kernel mode rootkit sử dụng API hooking để đảm bảo OS chỉ trả về
kết quả đã được sàng lọc, vốn sẽ bỏ rơi bất kì sự tiết lộ nào về rootkit hay tung tích của
nó. User mode rootkit chỉ có thể chỉnh sửa table nào thuộc về chương trình user. Mỗi
chương trình user có IAT riêng chứa thông tin về các function mà kernel sẽ thực hiện
cho nó. Để hiệu quả, user mode rootkit phải tìm cách để thay đổi table của mọi user

program và điều khiển bất kỳ chương trình nào sắp sửa chạy để nó có thể hook API
tương ứng của chương trình đó. Rootkit không nhất thiết phải hook mọi API, chỉ những
API nào có thể liên quan tới nó. Ví dụ nó có thể hook API của Task Manager dùng để
liệt kê các process hoặc API mà dùng bởi Windows Explorer để liệt kê danh sách các
file, folder. Và bởi vì nó phải hook cùng một API của mọi tiến trình đang được kích hoạt
nên user mode rootkit ít hiệu quả bằng kernel mode rootkit. Kernel mode rootkit chỉ
cần hook một cấu trúc mà tất cả user program sử dụng 19
Phân loại Rootkit 19
Rootkit được chia thành hai loại– user mode và kernel mode rootkit, phụ thuộc vào
phạm vi ảnh hưởng và liệu chúng chỉ tồn tại trong bộ nhớ hay sau khi khởi động
lại( được ghi lên ổ đĩa) persisten và non-persistent rootkit 19
1.1.5. User-mode rootkit và kernel – mode rootkit 19
Đây là rootkit có cơ chế điều khiển và phạm vi ảnh hưởng lên hệ điều hành khác nhau.
Cơ chế điều khiển thông qua đặc quyền mà nó giành được. Đặc quyền càng lớn, phạm
vi ảnh hưởng càng tăng 19
Bất kể là chế độ nào đi nữa, thì mọi rootkit đều dựa trên cơ sở: các chương trình giao
tiếp với nhau nhờ các lời gọi hàm. Tùy vào mức đặc quyền của chương trình, nó có thể
tạo lời gọi trực tiếp tới kernel hay gián tiếp qua một bên xử lí thứ ba đứng giữa nó và
kernel. Hay người ta gọi là User mode và kernel mode 20
Rootkit mức user, là mức đặc quyền thấp nhất, nó phải sử dụng giao diện ứng dụng
chương trình API để gửi yêu cầu tới hệ thống. Các lời gọi này sẽ thông qua thư viện liên
kết động mức user (DLL) để được chuyển thành thông điệp mà kernel có thể hiểu. Thực
tế thì chương trình mức user không tự chứa tất cả các khả năng xử lí, nó sẽ phải dùng
tạo các system call tới kernel. Ví dụ, khi user click nút OK. Windows chuyển thông tin
đó thành một system call để hệ thống xử lí. Ngôn ngữ mà Window cung cấp để thực
hiện giao tiếp giữa kernel và chương trình mức user gọi là API. Để vận hành tốt hơn,
mỗi chương trình user tự tạo một bảng riêng chứa địa chỉ của tất cả API hoặc system
function mà nó sẽ cần gọi tới. Bảng đó được gọi là IAT ( import address table). Gián
tiếp liên lạc với kernel làm hạn chế mức ảnh hưởng của user mode rootkit. Nó chỉ có
thể chạy trong một ứng dụng nhất định, với một số user nhất định. Nó có thể bị phát

hiện bởi các chương trình phát hiện rootkit. Lợi điểm của nó là dễ tạo, không làm hệ
thống bị treo hay gặp sự cố. Nhưng để có kết quả nhất định, user mode rootkit còn khá
nhiều việc phải làm 20
Trang 4
Tấn công rootkit trong Oracle
Kernel mode rootkit: kernel là phần mềm tương ứng với đơn vị xử lí trung tâm- bộ não
của hệ điều hành, là thành phần căn bản. Kernel duy trì và điều khiển nhiều tài nguyên
quan trọng, và các hàm như thông tin bộ nhớ, an ninh, lập lịch xử lí, giao tiếp giữa
phần cứng và phần mềm. Kernel vì thế có phạm vi ảnh hưởng toàn bộ hệ thống, phần
cứng và tất cả các ứng dụng. Tất cả các chương trình đều phải tương tác với kernel
theo một cách nào đó. Và nếu rootkit thao túng được kernel, nó sẽ ở vị trí điều khiển
tất cả 20
Không giống user mode rootkit hoạt động ở Ring 3, kernel mode rootkit hoạt động ở
Ring 0, tương tác trực tiếp với kernel. Kernel mode rootkit sẽ cài đặt một device driver
để lấy quyền điều khiển mức kernel. Sau đó, rootkit driver sẽ chuyển hướng các system
function call sang mã lập trình của nó để thi hành 20
1.1.6. Persistent và non-persistent rootkit 21
Một khía cạnh để phân loại rootkit nữa là khả năng tồn tại của nó sau khi hệ thống
khởi động 21
Persistent rootkit: để có thể tồn tại sau khi hệ thống khởi động rootkit phải thay đổi
được nội dung ổ cứng. Rootkit sẽ chèn một mục autostart vào Registry, nhờ đó nó được
load vào bộ nhớ và tự động thực thi mỗi lần máy tính khởi động. Dù các thay đổi vật lí
làm tăng khả năng bị phát hiện nhưng vẫn rất nhiều tiện ích hệ thống cũng như
chương trình quét malware lại bỏ qua rootkit 21
Non-Persistent rootkit: chỉ tồn tại trên bộ nhớ và mất đi khi hệ thống khởi động lại.
Các chương trình mà bỏ qua việc quét các nơi lưu trữ vật lí sẽ không phát hiện ra
rootkit này. Non-persistent rootkit có vẻ như ít đe dọa tới những ai mà việc khởi động
lại máy tính là thường xuyên. Nhưng đối với một mạng server- với hàng trăm máy tính
client, việc reboot thường rất hiếm. Các rootkit nằm trên bộ nhớ thường lợi dụng điểm
này, hơn nữa, rootkit kiều này không để lại manh mối vật lý nào để có thể bị phát hiện.

21
22
TẤN CÔNG ROOTKIT TRONG ORACLE 22
Một số kiểu tấn công trong Oracle 22
1.1.7. Tấn công SQL injection 22
1.1.8. Hack listener 25
1.1.9. PL/SQL injection 27
Tấn công Rootkit trong Oracle 28
Oracle database và OS khá tương đồng với nhau về mặt cấu trúc. Cả database và OS
đều có user, process, job, executable và symbolic link. Vì vậy, hacker có thể lợi dụng sự
tương đồng này để triển khai các rootkit cũng như các mã độc khác như virus, từ phạm
vi của OS sang lãnh địa của Oracle database 28
Một số tương đồng về command và object giữa Oracle và OS *Nix 28
Thông thường có một thủ thuật của rootkit OS thế hệ đầu khi ẩn một tài khoản. Lệnh ở
trong OS *Nix như ps, who và top đã bị thay thế bằng phiên bản của trojan, liệt kê tất
cả trừ tài khoản của kẻ xâm nhập. Hướng tiếp cận này cũng có thể được áp dụng đối
với DB. Rootkit database cũng cần che giấu các hành tung của nó, cụ thể là các
process, job, login. Bằng cách tác động vào nơi sẽ lưu trữ và cung cấp các thông tin
này, cũng như tác động vào cách thức truy xuất các thông tin này. Oracle lưu trữ thông
tin về user trong các base table và các data dictionary view là sys.user$,
v$pwfile_users… Vì vậy attacker cần can thiệp vào source code của các view này 29
Đầu tiên, chúng ta thử tìm hiểu một số data dictionary view mà cung cấp thông tin về
user cũng như thông tin về các tiến trình có liên quan tới hoạt động của user trong DB.
Và tìm hiểu một số PL/SQL package sẵn có của Oracle được sử dụng cho việc tấn công
của attacker 29
1.1.10. Tìm hiểu một số data dictionary view 29
View dba_jobs lưu thông tin về tất cả các jobs trong database. Thông tin về các cột
trong view này: 29
Trang 5
Tấn công rootkit trong Oracle

Column 29
Comments 29
Job 29
Xác định một job. Không thể thay đổi nó dù thực hiện import hay export nhiều lần 29
Log_user 29
Khi user xác nhận job thì sẽ được ghi lại 29
Priv_user 29
User có quyền mặc định được áp dụng cho job này 29
Schema_user 29
Schema mặc định được gán cho job khi thực thi 29
Last_date 29
Thời điểm gần nhất mà job được thực hiện thành công 29
Last_sec 29
Tương tự như last_date 29
This_date 29
Thời điểm mà job được bắt đầu thực hiện (là null nếu không thực thi) 29
This_sec 29
Tương tự this_date. Thời điểm lần thực thi cuối cùng được bắt đầu 29
Next_date 30
Thời điểm kế tiếp mà job sẽ được thực hiện 30
Next_sec 30
Tương tự next_date. Thời điểm được thực hiện kế tiếp 30
Total_time 30
Tổng thời gian sử dụng hệ thống của job, tính theo giây 30
Broken 30
Nếu là y, nghĩa là không có một cố gắng chạy job này. Nếu là N có một cố gắng để
chạy job 30
Interval 30
Lập lịch chạy job lần tiếp theo 30
Failures 30

Số lần khởi động job và không thành công kể từ lần thành công gần nhất 30
What 30
Body của block anonymous PL/SQL mà job này thực hiện 30
Nls_env 30
Tham số phiên mô tả biến môi trường nls của job 30
Misc_env 30
Tham số phiên khác áp dụng cho job 30
Instance 30
ID của instance chạy hoặc có thể chạy job. Mặc định là 0 30
View Dba_jobs_running liệt kê thông tin về tất cả các job đang chạy 30
Column_name 30
Comments 30
Failures 30
Số lần job được khởi hoạt và thất bại kể từ lần thành công sau cùng 30
Instance 30
ID của instance chạy job 30
Job 30
Trang 6
Tấn công rootkit trong Oracle
ID của job đang chạy 30
Last_date 30
Ngày gần nhất mà job chạy thành công 30
Last_sec 30
Tương tự như last_date, đó là lần thực hiện thành công gần nhất 30
SID 30
ID của tiến trình đang thực hiện job 30
This_date 30
Ngày mà job bắt đầu thực hiện (thường là null nếu không đang thực hiện) 30
This_sec 30
Giống như this_date. Đó là lần thực hiện thành công cuối cùng 30

Lưu thông tin về các process hiện tại đang chạy 30
Cột 30
Mô tả 30
Addr 30
Địa chỉ của process 30
Pid 30
Định danh của process 30
Spid 31
Định danh trên OS của process 31
Username 31
Process được chạy bằng tài khoản OS nào 31
Trace ID 31
Định danh file trace 31
Background 31
Nhận diện process có phải tiến trình background không 31
Latchwait 31
Địa chỉ của Latch mà process đang đợi 31
Latchspin 31
địa chỉ của latch mà process đang spinning trên 31
Pga_used_mem 31
Vùng nhớ PGA mà process sử dụng 31
Pga_alloc_mem 31
Vùng nhớ PGA hiện thời được cấp phát cho process 31
V$session liệt kê các thông tin về mỗi session hiện tại. Rootkit cần tìm cách che giấu
thông tin về các process ở trong các view này. Một số thông tin trong view v$sessions:
31
Column 31
Nội dung 31
Saddr 31
Địa chỉ session 31

Sid 31
Định danh session 31
Serial# 31
Số serial của session. Dùng để xác định duy nhất một object của session. Đảm bảo
rằng các câu lệnh được thực thi đúng đối tượng khi session kết thúc và một session
khác dùng ID lại định danh của session 31
Paddr 31
Trang 7
Tấn công rootkit trong Oracle
Địa chỉ của process sở hữu session 31
Event 31
Tài nguyên hoặc sự kiện mà session đang đợi 31
Status 31
Trạng thái của session(active, inactive, killed, cached…) 31
Logon_time 31
Thời gian logon 31
Username 31
Tên user 31
Command 31
Câu lệnh đang xử lý 31
Type 31
Kiểu session 31
1.1.11. Khai thác các PL/SQL Package 31
Package là một schema object nhóm các kiểu, biến và chương trình PL/SQL có liên
quan. Package thường có hai phần, phần đặc tả (spec) và phần thân (body), đôi khi
phần body không cần thiết. Phần đặc tả là phần giao tiếp của package. Nó khai báo các
kiểu, các biến, hằng, ngoại lệ, con trỏ và các chương trình con mà bên ngoài có thể
tham chiếu tới. Phần body định nghĩa các truy vấn cho con trỏ và mã cho các chương
trình con (các procedure, function…). Phần spec được coi là phần hộp trắng, phần body
là hộp đen. Có thể debug, thay đổi phần body mà không ảnh hưởng tới phần spec 31

Để tạo package spec, dùng lệnh: Create package. Lệnh Create package body định
nghĩa phần body. Phần spec sẽ được public với tất cả các procedure và code khác bên
ngoài package. Phần body chứa các thực thi và các khai báo riêng, không được hiển thị
đối với bên ngoài 32
Utl_tcp là package cơ bản nhất có thể truy xuất network. UTL_TCP có thể tạo các kết
nối TCP tới server khác, gửi và nhận data. Hơn nữa, không có giới hạn trong định dạng
của data này, tức là nó có thể ở dạng binary hoặc text-based. Nó cho phép rdbms giao
tiếp với bất kỳ kiểu server nào trên network mà nó cần, web server hay RPC server.
Đây là một package rất hữu ích cho attacker. Ví dụ, attacker có thể dựa vào utl_tcp để
tạo một chương trình quét cổng TCP 38
Các function cơ bản: 38
Open_connection 38
Mở một socket tới host 38
Read_raw 38
Đọc dữ liệu binary từ socket 38
Write_raw 38
Viết dữ liệu binary tới socket 38
Read_text 38
Đọc dữ liệu ASCII từ socket 38
Write_text 38
Viết dữ liệu ASCII tới socket 38
1.1.12. Nhiệm vụ của rootkit 38
User Oracle được lưu trong table SYS.USER$ cùng với database role. User có flag
TYPE#=1 và role có flag TYPE#=0. Để việc truy nhập dễ dàng hơn, và đảm bảo tính
tương thích với các phiên bản trước, Oracle đưa ra 2 view là DBA_USERS và
ALL_USERS thông qua public synonym. Hầu hết các DBA và các công cụ sử dụng các
view này để truy nhập table SYS.USER$. Vì vậy để ẩn đi các user muốn che giấu cần
sửa các view source: 38
AND U.NAME !=’tên cần ẩn’ 38
39

Trang 8
Tấn công rootkit trong Oracle
Mọi thay đổi trên view thuộc về SYS yêu cầu quyền SYSDBA( Cần có một mục về các
tài khoản và quyền hạn trên Oracle). Sau đó truy vấn trở lại view trên sẽ không thấy
xuất hiện tài khoản đó: 39
39
40
40
Thông thường attacker sẽ chọn các username khó phát hiện(ví dụ MTSYS) và một câu
điều kiện không dễ nhận ra( ví dụ AND U.USER#<> 17, trong đó 17 là chỉ số của user
mới được tạo). Vì thế Developer hoặc các DBA không nên dựa vào view, mà nên truy
nhập các table căn bản như SYS.USER$ 40
Oracle process được chia làm 3 loại: 40
User process: Bắt đầu khi database user yêu cầu kết nối tới Oracle server 40
Server process: Xử lý các yêu cầu từ user process kết nối tới instance 40
Background process: Là các tiến trình tương tác lẫn nhau và với hệ điều hành để quản
lý bộ nhớ, quản lý các tín hiệu nhập xuất để ghi dữ liệu ra đĩa, và một số nhiệm vụ
khác. Nó được bắt đầu khi Oracle instance hoạt động 40
V$session trước và sau khi ẩn tiến trình của attacker 40
41
41
Các tiến trình được lưu trong view v$session nằm ở schema Sys. Ngoài ra thông tin về
mỗi session còn xuất hiện trong gv_$sessions, flow_sessions, v_$process 41
Job là những tác vụ cần được thực hiện tại một thời điểm nào đó và có thể lặp lại. Lập
lịch chạy job giúp tự động hóa công việc quản trị. Ví dụ lập lich update, import, export
dữ liệu. Thông tin về tất cả các job có trong dba_jobs, sys.job$, dba_jobs_running 41
Giả sử hacker cần tạo một job để chạy tại một thời điểm nào đó ví dụ export dữ liệu,
thì cần là phải ẩn các job này. Để job này không hiển thị khi truy vấn dba_jobs thì cần
phải giấu đi priv_user: quyền của user mà job được sử dụng. Do chỉ có job do tài khoản
hacker tạo sẽ chạy bằng quyền của hacker 41

Dba_jobs trước và sau khi ẩn job của attacker 42
42
42
Trong quá trình ghi log, các thông tin được log trong listener.log của TNS-listener(nếu
kích hoạt logging). Gỡ bỏ các dấu vết có trong các file này là điều cần thiết với
attacker. Oracle đưa ra nhiều cách để thực hiện điều này. Cách dễ nhất là dùng
package utl_file. Package này cho phép đọc (UTL_FILE.GET_LINE), viết
(UTL_FILE.PUT_LINE) hay xóa (UTL_FILE.REMOVE) file. Log file không bị cấm(lock)
bởi TNS listener, nhờ đó có thể thay đổi nội dung ở tại thời điểm đang hoạt động
(runtime) 42
Các dấu vết của một attack cũng lưu trong bộ nhớ của database(SGA, System Global
Area). Mọi câu lệnh SQL đã thực thi bởi mỗi user cũng có trong view V_$SQLAREA. Để
gỡ các thông tin này từ SGA, xóa shared pool bằng lệnh sau: 42
Alter system flush shared_pool; 42
Nhớ rằng xóa share pool sẽ ảnh hưởng tới hiệu suất của database, và user có thể sẽ
than phiền về tốc độ truy nhập 42
Mọi transaction tạo thay đổi lên database được lưu trong Redo-Log file và cũng lưu
trong archive log, nếu database chạy ở chế độ archive log mode. Attacker cũng sẽ phải
xóa các dấu vết này. Đầu tiên chạy lệnh để database switch một redo-log: 43
Alter system switch logfile; 43
Sau khi cài đặt rootkit, rootkit cần switch các redo log file trong tất cả redo log group
để nội dung trong đó bị thay thế. Nếu database có thiết lập chế độ archive log, cần phải
xóa tất cả archive file gần nhất bằng package utl_file.fremove 43
1.1.13. Cách thức tấn công của rootkit 43
Trang 9
Tấn công rootkit trong Oracle
Oracle lưu các thông tin về username, job, process trong các data dictionary view. Và
người quản trị sẽ truy vấn các view này để có được thông tin về cơ sở dữ liệu mình
quản lý, các process, các job đang hoạt động. Cụ thể, thông tin về user có trong
sys.user$, dba_users, all_user, 43

Thông tin về 43
Có trong các table, view 43
User 43
sys.user$, dba_users, all_users 43
Job 43
dba_jobs, dba_jobs_running, sys.job$ 43
Process 43
v$session, gv_$process, flow_session, v_$process 43
Đầu tiên xem source của view trong v$fixed_view_definition như sau: 43
Select view_definition From v_$fixed_view_definition where view_name =
‘V$PWFILE_USERS’; 43
Ta được: 43
select USERNAME , SYSDBA , SYSOPER from GV$PWFILE_USERS where inst_id =
USERENV 43
('Instance') 43
Nhưng vấn đề là view GV$PWFILE_USERS là fixed view (view cố định). Oracle user
bao gồm cả Sysdba không thể thay đổi source code của nó. Attacker sẽ tìm cách nào đó
thay đổi source code của view này để che giấu tài khoản sysdba Hacker của hắn: 43
Select view_definition from v$fixed_view_definition where view_name =
‘GV$PWFILE_USERS’; 44
Kết quả: 44
VIEW_DEFINITION 44
44
select inst_id,username,decode(sysdba,1,'TRUE','FALSE'),
decode(sysoper,1,'TRUE','FALSE') from x$kzsrt where valid=1 and username !=
'INTERNAL' 44
Attacker sẽ muốn thay đổi source code của gv$pwfile_users thành: 44
select inst_id,username,decode(sysdba,1,'TRUE','FALSE'),
decode(sysoper,1,'TRUE','FALSE') from x$kzsrt where username not in ('INTERNAL',
‘HACKER’) 44

Vì thế, attacker sẽ phải tác động tới phần binary để source của fixed view mới bị ảnh
hưởng. Sử dụng công cụ như hexeditor search hoặc tương tự để tìm chuỗi
‘GV$PWFILE_USERS’ 44
44
45
Sau đó, copy binary đã edit vào file ban đầu 45
Đối với việc thay đổi đường dẫn thực thi, điều mà chúng ta quan tâm là cách thức DB
Oracle phân giải tên các object được truy vấn như thế nào. Trong rootkit OS, đường
dẫn tới các lệnh *NIX như ps, who, top bị sẽ bị thay đổi. Trong database, một phiên
bản bị trojan sẽ được gọi thay vì phiên bản ban đầu. Hướng tiếp cận này có lợi thế đối
với attacker, việc kiểm tra mã checksum cũng không phát hiện được thay đổi này. Ví
dụ, xem xét truy vấn: 45
Select user_name from DBA_USERS 45
Oracle sẽ phân giải tên object user_name này như thế nào? Đầu tiên Oracle kiểm tra
xem liệu có một local object(table hay view) là DBA_USERS. Nếu có, object này được
dùng cho query. Nếu không, Oracle tiếp tục tìm một private synonym có tên như vậy.
Nếu không có nó sẽ kiểm tra một public synonym. Dựa trên cấu trúc của đường dẫn
thực thi của Oracle, sẽ có một số cách có thể cho việc thi hành một rootkit như sau:. .45
Trang 10
Tấn công rootkit trong Oracle
- Tạo một local object mới với tên giống với trong user schema 46
- Tạo một object mới tham chiếu tới object ban đầu( view hay table) hoặc một object
mới chứa bản sao của data trong object ban đầu. Bảng DBA_USERS nên được cập nhật
với một trigger trên SYS.USER$ 46
- Tạo một private synonym và một local object mới 46
- Chỉnh sửa một public synonym và tạo một local object mới 46
46
Tạo view mới system.all_users2: 47
47
Sau đó, tạo một private synonym system.all_users cho system.all_users2: 47

Create synonym system.all_users for system.all_users2; 47
Khi đó, truy xuất tới all_users, thông tin sẽ xuất phát từ view mới được tạo trên 47
47
Điểm bất lợi của ba phương pháp đầu là chỉ schema của người sở hữu bị ảnh hưởng
bởi các thay đổi này. Attacker phải tạo các object khác nhau cho các tài khoản admin
khác nhau. Hầu hết attacker sẽ dùng cách thứ 4 vì view nguyên bản không bị sửa đổi
và nó áp dụng với mọi tài khoản ngoại trừ SYS 48
Các source code của package dễ bị chỉnh sửa. Hầu hết các package do Oracle tạo ra
đều được wrap và bảo vệ không bị chỉnh sửa. Đây chính là lỗ hổng mà rootkit sử dụng
để hoạt động 48
Thông thường, sau khi tạo một thủ tục lưu trữ, có thể truy nhập mã nguồn thông qua
bảng SOURCE, như sau: 48
SQL> SELECT text FROM USER_SOURCE 48
SQL> WHERE name = 'WRAPTEST' order by line; 48
Kết quả: 48
PROCEDURE wraptest IS 48
TYPE emp_tab IS TABLE OF emp%ROWTYPE INDEX BY PLS_INTEGER; 48
all_emps emp_tab; 48
BEGIN 48
SELECT * BULK COLLECT INTO all_emps FROM emp; 48
FOR i IN 1 10 LOOP 48
DBMS_OUTPUT.PUT_LINE('Emp Id: ' || all_emps(i).empno); 48
END LOOP; 48
END; 48
Làm thế nào để tránh điều này? Nhiều lập trình viên Oracle không load các procedure
này vào database mà đặt nó vào một file SQL trên server và thực hiện từ xa. Bất kì ai
có thể truy nhập tới server sẽ đọc được file này, nhưng bằng cách này bạn cũng đã
phần nào hạn chế được truy nhập theo ý mình. Còn trong trường hợp, nếu code để ở
database, nó nên được wrap thành một hoặc một phần của package 48
Wrapping là một phương pháp thay đổi mã PL/SQL dạng rõ thành các kí tự mà chỉ

Oracle đọc được. Như vậy, nó vẫn được biên dịch và thực hiện như bình thường, mà
vẫn được bảo vệ an toàn. Nhưng hacker có thể dùng các công cụ wrap và unwrap để
sửa đổi lại mã các procedure, package với các phiên bản Oracle không sử dụng
checksum 48
1.1.14. Mô tả tấn công Oracle sử dụng rootkit kết hợp với backdoor 50
Để lấy dữ liệu từ database, cách thức phù hợp nhất là kết hợp rootkit database và
backdoor database. Backdoor cho phép attacker thực hiện câu lệnh và truy vấn
database từ xa và nhận hồi đáp từ server. Attacker rõ ràng không muốn các hành vi
của mình bị DBA phát hiện, vì vậy attacker thường kết hợp cài backdoor với rootkit để
che giấu hoạt động của backdoor 50
Trang 11
Tấn công rootkit trong Oracle
Ở đây chúng ta sẽ tạo một chương trình backdoor, sử dụng một chức năng network có
sẵn để mở một kết nối tới vị trí của attacker. Chương trình sẽ đọc kết nối và thực hiện
các câu lệnh attacker gửi tới. Sau đó gửi lại kết quả thực hiện của câu lệnh. Chương
trình backdoor có thể được lập lịch, sử dụng chức năng job để nếu kết nối bị mất hoặc
database instance bị restart thì attacker vẫn có thể kết nối tại thời điểm sau đó. Để
tránh bị phát hiện, kết nối giữa backdoor và attacker có thể được mã hóa hoặc đóng
gói theo một cách nào đấy nhằm tránh sự phát hiện của hệ thống IDS, IPS 51
Backdoor cài đặt trên database server, còn backdoor console chạy trên host của
attacker sẽ giao tiếp qua giao thức TCP/IP. Backdoor console lắng nghe trên một TCP
port xác định trước, đợi kết nối từ backdoor 51
Chúng ta sẽ tạo một các rootkit và backdoor bằng mã PL/SQL 51
Mã này sẽ tạo một function để chỉnh sửa data dictionary view Dba_jobs,
dba_jobs_running, Ku$_job_view để che giấu backdoor job. Function này có thể được
inject vào bất kỳ lỗ hổng SQL injection nào 51
Code ẩn connection giữa backdoor và backdoor console: 51
Code ẩn connection giữa backdoor và backdoor console trong sys.dba_jobs: 51
Code ẩn connection giữa backdoor và backdoor console trong sys.dba_jobs_running:
52

Code ẩn connection giữa backdoor và backdoor console trong sys.ku$_job_t: 52
Database được coi là những tài sản có giá trị nhất của một công ty. Nếu database
không hoạt động, công ty đó cũng không thể thực hiện các giao dịch, và chúng ta có
thể thấy thiệt hại sẽ được tính theo từng giờ không hoạt động của database. DB là
phần trong cùng của hệ thống, bao bọc phía ngoài nó có thể là web application,
internal networks, partner network, và cũng là từng ấy điểm để có thể truy nhập vào
database. Và cho dù OS và network được đảm bảo an toàn thì database vẫn có thể bị
tấn công qua các lỗ hổng tràn bộ đệm, SQL injection, đoán password, rootkit,
backdoor… Vì vậy việc đảm bảo an toàn cho DB (bao gồm đảm bảo tính bí mật, toàn
vẹn và sẵn sang của dữ liệu) cũng quan trọng và cần thiết không kém gì an toàn cho
OS hay các ứng dụng khác 58
Trang 12
Tấn công rootkit trong Oracle
1.1.
DANH MỤC CÁC HÌNH VẼ
Hinh 1: Tương đồng giữa database và OS 19
Hinh 2:View dba_jobs 20
Hinh 3: View dba_jobs_running 21
Hinh 4: V$Process 21
Hinh 5:V$Session 22
Hinh 6: dbms_metadata 23
Hinh 7: dbms_output 25
Hinh 8: dbms_jobs 25
Hinh 9: dbms_sql 26
Hinh 10: Trước khi ẩn user Hacker 30
Hinh 11: Sau khi ẩn user Hacker 31
Hinh 12: v$session trước khi ẩn session 32
Hinh 13:v$session sau khi ẩn session 32
Hinh 14:dba_jobs trước khi ẩn job 33
Hinh 15:dba_jobs sau khi ẩn job 33

Hinh 16:Truoc khi thay đôi binary 35
Hinh 17:Sau khi thay đổi binary. 36
Hinh 18: Đường dẫn thực thi trong Oracle 37
Hinh 19: Trước khi thay đổi đường dẫn thực thi 37
Hinh 20: Tạo view mới 38
Hinh 21: Truy xuất sau khi thay đổi đường dẫn 38
Hinh 22 :Sử dụng PL/SQL native 41
Trang 13
Tấn công rootkit trong Oracle
DANH MỤC CÁC THUẬT NGỮ VÀ TỪ VIẾT TẮT
API Application Program Interface
ARCn Archive
CSDL Cơ sở dữ liệu
DB Database
DCL Data Control Language
DDL Data dictionary Language
DML Data Manipulate Language
DBWn Database Written
DLL Thư viện liên kết động
Function Hàm
Instance Thành phần logic của DB
LGWR Log writer
OS Hệ điều hành
Package Chứa các procedure, function
PGA Private Global Area
PL/SQL Ngôn ngữ truy vấn có thủ tục
Procedure Thủ tục
RDBMS Hệ quản trị cơ sở dữ liệu quan hệ
Rootkit Chương trình che giấu hành vi
của hacker

SQL Ngôn ngữ truy vấn
SGA System Global Area
Table Bảng
Tablespace Tập hợp các table, view, index…
View Table chứa metadata
LỜI NÓI ĐẦU
Rootkit trong OS không còn xa lạ với chúng ta. Chúng đã được các kẻ
xâm nhập sử dụng để che giấu các dấu vết từ rất lâu. Tuy nhiên, không
phải ai cũng biết rằng rootkit còn có thể được sử dụng và đang được các
Trang 14
Tấn công rootkit trong Oracle
hacker sử dụng trong cơ sở dữ liệu, thường chứa các dữ liệu quan trọng của
các công ty, tổ chức.
Theo ước tính, khoảng 100 triệu người có thông tin cá nhân nằm trong
tầm kiểm soát của tội phạm Internet. Lấy cắp thông tin đã trở thành một
nguy cơ chính, thông tin đã trở thành mỏ vàng cho tội phạm. Thông tin cá
nhân được chia thành nhiều loại với mức giá khác nhau. Ví dụ, thông tin về
địa chỉ, số điện thoại, ngày sinh, số dịch vụ xã hội, số đăng ký băng lái…
đều được đặt giá. Rất nhiều cơ sở dữ liệu của các công ty lớn bị xâm phạm.
Nhất là các ngân hàng, nhà băng, dịch vụ thẻ thanh toán như CardSystems,
Citigroup, Bank of America, DSW Shoe Warehouse… đều đã bị tội phạm
nhòm ngó và gây ra thiệt hại nhất định.
Oracle là hãng dẫn đầu trong thị trường cơ sở dữ liệu và thường được
sử dụng ở các cơ quan, tổ chức lớn. Với khối lượng dữ liệu lớn và quan
trọng. Không nghi ngờ gì, Oracle đã trở thành đích ngắm hấp dẫn trong các
cuộc tấn công.
Oracle database rootkit là hướng tấn công khá mới. Rootkit được cài
đặt sau khi đã đột nhập thành công vào một Oracle database, để che giấu
mọi dấu vết của cuộc đột nhập, và trở thành tấm bình phong che chắn sự
hiện diện của attacker trong database. Người quản trị sẽ khó lòng biết được

database của mình có đang bị nhìn ngó hay bị tấn công hay không, dù có sử
dụng các công cụ tìm kiếm rootkit. Và vì thế không có biện pháp cải thiện
hay áp dụng phương pháp tự bảo vệ, qua một thời gian dài thiệt hại sẽ rất
đáng kể. Khi mà cơ sở dữ liệu là một tài nguyên vô cùng quan trọng có ý
nghĩa sống còn đối với doanh nghiệp, tổ chức.
Trang 15
Tấn công rootkit trong Oracle
TÌM HIỂU VỀ ROOTKIT
Hiểu biết chung về mã độc hại(malware)
Thuật ngữ malware là từ viết tắt của malicious software. Malware
được tạo với mục đích truy nhập, chỉnh sửa và phá hoại các software khác
trên máy tính. Malware có nhiều loại: virus, worms, trojans, backdoor,
spyware… và các biến thể khác xuất hiện từng ngày.
Mục tiêu của malware có thể là thông tin cá nhân, dữ liệu, tài nguyên
máy tính… Bằng cách ghi dấu thói quen lướt Web của bạn, chúng biết
những vấn đề bạn quan tâm và những quảng cáo mà sẽ phù hợp với ý định
của bạn. Những malware này cho phép các công ty quảng cáo thiết kế các
pop up nắm bắt mục đích của từng cá nhân. Xa hơn nữa, malware có thể
điều khiển nội dung những gì được hiển thị trên trình duyệt của bạn. Đó là
hijacking. Các nội dung tìm kiếm và hiển thị của bạn có thể bị hijack sang
trang mà malware chỉ định. Điều này có thể đưa đến nhiều phiền toái khi
các pop up liên tục nhảy ra, và tệ hơn nữa nó có thể chứa các virus, worm
mà khi vô tình kích phải chúng sẽ ngay lập tức xâm nhập vào máy tính của
bạn.
Mục tiêu thứ ba, là thông tin cá nhân. Những thông tin dùng để đăng
nhập vào tài khoản ngân hàng, chuyển tiền, rút tiền. Nếu bạn dùng
password, hacker có thể dùng chương trình giải mã mật khẩu. Hoặc nó có
thể giả một chương trình an ninh, dụ bạn cài vào mà không biết trong đó có
thể có chương trình keylogger, spyware… sẵn sàng lấy cắp thông tin của
bạn. Cuối cùng, hacker sẽ lợi dụng tài nguyên hệ thống vào những mục

đích như tấn công hệ thống khác, ẩn nấp sau hệ thống của bạn nhằm che
giấu hành tung của mình. Để thực hiện được các mục đích này, malware sẽ
thực hiện dễ dàng hơn nếu có sự trợ giúp của rootkit. Vì thế các malware
đầu tiên sẽ cài đặt rootkit vào máy, tới lượt mình rootkit sẽ che giấu hành
vi của malware. Thực tế, rootkit là xấu hay tốt do mục đích mà nó được sử
dụng.
Trang 16
Tấn công rootkit trong Oracle
Khái niệm Rootkit
1.1.1. Lịch sử Rootkit
Kỹ thuật Rootkit thực ra không phải là mới. Nó đã tồn tại gần mười
mấy năm. Đầu tiên được phát triển trên hệ điều hành Unix-like (Solaris và
Linux) và sau đó là trên Windows. Rootkit đầu tiên được công khai trên
Windows là vào năm 1999 bởi Greg Hoglund- một chuyên gia về bảo mật
và người lập website rootkit.com. Thuật ngữ rootkit bắt nguồn từ root –
mức truy nhập cao nhất vào hệ thống, có quyền admin và từ kit- một tập
các công cụ để che giấu và chiếm quyền.
Việc phát hiện Sony Rootkit ( rootkit quản lí bản quyền số) bởi Mark
Russonovich của Sysinternal đã khiến rootkit được quan tâm một cách đặc
biệt và nhiều người đã bắt đầu tìm hiểu hoạt động của nó. Cho tới sự kiện
đó, rootkit chỉ là một cái gì đó khêu gợi sự tò mò, hơn là một hiểm họa cận
kề. Sự kiện Sony Rootkit xảy ra ngày 31/10/2005 đã đưa rootkit thành
trung tâm chú ý. Nó cũng chứng tỏ, hãng đã nghiên cứu và phát triển kỹ
thuật rootkit qui củ. Sau sự kiện này, Sony đã phải tiến hành gỡ bỏ rootkit
trên các đĩa CD và tốn khoản bồi thường không ít.
Sự kiện này được cho là trước sau gì cũng xảy ra, khi mà các nhà cung
cấp bảo mật đưa ra nhiều biện pháp để chống lại các kiểu nguy cơ có thể,
thì những người tạo malware cũng sẽ tương ứng đáp lại bằng các kỹ thuật
ăn cắp và tinh ranh hơn. Bằng cách sử dụng rootkit và khả năng lén lút của
nó, những hacker máy tính đã tìm ra cách mới và hiệu quả để tấn công. Các

chương trình che giấu và rootkit cho thấy một nguy cơ cận kề về an ninh
mạng. Thực tế, ngày 6/12/2005 tạp chí eweek đã công bố rằng có tới 20%
malware bị phát hiện trên Windows XP SP2 là các rootkit. Một số liệu sau
đó vào ngày 6/12/2006 cũng ghi nhận rằng tỉ lệ rootkit trong số malware là
14%, trong khi tại thời điểm của sự kiện Sony Rootkit con số đó là 8%.
1.1.2. Định nghĩa Rootkit
Rootkit là một chương trình được thiết kế để che giấu không chỉ chính
nó mà còn các thành phần liên quan khác như process, file, folder, registry
keys, ports và driver. Rootkit có thể có mục đích tốt whitehat (nhưng vẫn
tiềm ẩn nguy cơ mất an toàn) hay mục đích xấu – blackhat. Các rootkit độc
hại thường dùng cho việc xâm nhập và duy trì điều khiển từ xa một cách
Trang 17
Tấn công rootkit trong Oracle
bất hợp pháp. Rootkit độc hại che giấu các malware, malwware sẽ cài đặt
các backdoor cho phép hacker truy nhập tới máy bị điều khiển.
Rootkit cho thấy một lỗ hổng cơ bản của hệ điều hành. Khó mà biết
được tính toàn vẹn của hệ thống tới đâu, hay độ tin cậy các bản báo cáo,
các kết quả quét mã độc. Chúng ta sẽ không thể chắc chắn rằng máy tính
của mình không đang chứa chấp những mã độc hại ngấm ngầm hoạt động
và tác hại của chúng.
Cách thức hoạt động của Rootkit
Sự xuất hiện của Rootkit trên máy tính hay mạng cho thấy khả năng bị
vi phạm của các hệ thống mà bạn phải làm việc và tin tưởng và đó cũng là
lỗ hổng an ninh lớn nhất. Không nghi ngờ gì nữa, rootkit có khả năng
quanh quẩn ở đâu đó để thực hiện những nhiệm vụ mà nhờ đó nó được tạo
ra. Vậy làm thế nào rootkit có thể lợi hại như vậy? Đó là nhờ lợi dụng tính
mềm dẻo và linh hoạt của kiến trúc Windows. Phần này chúng ta sẽ tìm
hiểu cách thức ẩn nấp và hoạt động của Rootkit.
1.1.3. Chiếm quyền điều khiển.
Bất kì khi nào user hay một chương trình nào truy vấn hệ thống, kết

quả trả về sẽ được mặc định tin tưởng không gợn chút nghi vấn. Rootkit lợi
dụng sự tin tưởng cơ bản này. Đầu tiên nó phải chiếm được quyền quản trị
hệ thống để có thể điều khiển hệ thống làm gì cho nó. Vì thế chiếm quyền
admin là một bước vô cùng quan trọng và quyết định.
1.1.4. Kỹ thuật Hooking
Là kỹ thuật mà Rootkit sử dụng để thay đổi đường dẫn thực thi của hệ
điều hành- nó chặn các lời gọi hệ thống và điều chỉnh kết quả sao cho
không có dấu vết gì về sự tồn tại của nó. Hook sẽ chuyển hướng các
chương trình bình thường, sang các hàm của rootkit thay vì các hàm của hệ
thống. Cả kernel mode và user mode rootkit đều sử dụng kỹ thuật hooking
để lọc các kết quả trả về bởi OS và giấu đi sự tồn tại của nó. Các chương
trình phân tích và quét sẽ không phát hiện ra thông tin về sự tồn tại của nó
trong Registry, cũng như các port mà rootkit sử dụng. Đó là vì các chương
trình này dựa trên thông tin lấy từ OS. Chúng ta sẽ không phát hiện được
rootkit thông qua các công cụ như Task Manager, windows explorer hay
regedit. Windows sử dụng các table để lưu trữ và ghi dấu các thông tin
quan trọng. Các table này có thể bị hook, thay đổi và bẻ gẫy bởi rootkit.
Trang 18
Tấn công rootkit trong Oracle
User mode và kernel mode rootkit đều sử dụng kỹ thuật hook và mỗi loại bị
hạn chế bởi những gì mà chúng có thể hook do phạm vi hoạt động của
chúng. User mode rootkit chỉ có thể hook các table trong phạm vi không
gian địa chỉ dành cho user (các bảng IAT, EAT) hoặc có thể chèn các jump
vào API mức user để thay các system call sang function của rootkit.
Có hai kiểu hook là priviledge hook và unpriviledged hooks. User
mode rootkit là các unpriviledge hook, trong khi kernel mode rootkit là
priviledge hook. Ở mỗi kiểu hook khác nhau về quyền hệ thống đều sử
dụng kỹ thuật hook giống nhau. Kỹ thuật hooking API: user mode rootkit
sẽ chặn các lời gọi hàm API và thay đổi địa chỉ API trong IAT thuộc tiến
trình của user, sau đó trỏ tới rootkit function thay vì Windows API

functions. Cả user mode và kernel mode rootkit sử dụng API hooking để
đảm bảo OS chỉ trả về kết quả đã được sàng lọc, vốn sẽ bỏ rơi bất kì sự tiết
lộ nào về rootkit hay tung tích của nó. User mode rootkit chỉ có thể chỉnh
sửa table nào thuộc về chương trình user. Mỗi chương trình user có IAT
riêng chứa thông tin về các function mà kernel sẽ thực hiện cho nó. Để hiệu
quả, user mode rootkit phải tìm cách để thay đổi table của mọi user
program và điều khiển bất kỳ chương trình nào sắp sửa chạy để nó có thể
hook API tương ứng của chương trình đó. Rootkit không nhất thiết phải
hook mọi API, chỉ những API nào có thể liên quan tới nó. Ví dụ nó có thể
hook API của Task Manager dùng để liệt kê các process hoặc API mà dùng
bởi Windows Explorer để liệt kê danh sách các file, folder. Và bởi vì nó
phải hook cùng một API của mọi tiến trình đang được kích hoạt nên user
mode rootkit ít hiệu quả bằng kernel mode rootkit. Kernel mode rootkit chỉ
cần hook một cấu trúc mà tất cả user program sử dụng.
Phân loại Rootkit
Rootkit được chia thành hai loại– user mode và kernel mode rootkit,
phụ thuộc vào phạm vi ảnh hưởng và liệu chúng chỉ tồn tại trong bộ nhớ
hay sau khi khởi động lại( được ghi lên ổ đĩa) persisten và non-persistent
rootkit
1.1.5. User-mode rootkit và kernel – mode rootkit
Đây là rootkit có cơ chế điều khiển và phạm vi ảnh hưởng lên hệ điều
hành khác nhau. Cơ chế điều khiển thông qua đặc quyền mà nó giành
được. Đặc quyền càng lớn, phạm vi ảnh hưởng càng tăng.
Trang 19
Tấn công rootkit trong Oracle
Bất kể là chế độ nào đi nữa, thì mọi rootkit đều dựa trên cơ sở: các
chương trình giao tiếp với nhau nhờ các lời gọi hàm. Tùy vào mức đặc
quyền của chương trình, nó có thể tạo lời gọi trực tiếp tới kernel hay gián
tiếp qua một bên xử lí thứ ba đứng giữa nó và kernel. Hay người ta gọi là
User mode và kernel mode.

Rootkit mức user, là mức đặc quyền thấp nhất, nó phải sử dụng giao
diện ứng dụng chương trình API để gửi yêu cầu tới hệ thống. Các lời gọi
này sẽ thông qua thư viện liên kết động mức user (DLL) để được chuyển
thành thông điệp mà kernel có thể hiểu. Thực tế thì chương trình mức user
không tự chứa tất cả các khả năng xử lí, nó sẽ phải dùng tạo các system call
tới kernel. Ví dụ, khi user click nút OK. Windows chuyển thông tin đó
thành một system call để hệ thống xử lí. Ngôn ngữ mà Window cung cấp
để thực hiện giao tiếp giữa kernel và chương trình mức user gọi là API. Để
vận hành tốt hơn, mỗi chương trình user tự tạo một bảng riêng chứa địa chỉ
của tất cả API hoặc system function mà nó sẽ cần gọi tới. Bảng đó được
gọi là IAT ( import address table). Gián tiếp liên lạc với kernel làm hạn chế
mức ảnh hưởng của user mode rootkit. Nó chỉ có thể chạy trong một ứng
dụng nhất định, với một số user nhất định. Nó có thể bị phát hiện bởi các
chương trình phát hiện rootkit. Lợi điểm của nó là dễ tạo, không làm hệ
thống bị treo hay gặp sự cố. Nhưng để có kết quả nhất định, user mode
rootkit còn khá nhiều việc phải làm.
Kernel mode rootkit: kernel là phần mềm tương ứng với đơn vị xử lí
trung tâm- bộ não của hệ điều hành, là thành phần căn bản. Kernel duy trì
và điều khiển nhiều tài nguyên quan trọng, và các hàm như thông tin bộ
nhớ, an ninh, lập lịch xử lí, giao tiếp giữa phần cứng và phần mềm. Kernel
vì thế có phạm vi ảnh hưởng toàn bộ hệ thống, phần cứng và tất cả các ứng
dụng. Tất cả các chương trình đều phải tương tác với kernel theo một cách
nào đó. Và nếu rootkit thao túng được kernel, nó sẽ ở vị trí điều khiển tất
cả.
Không giống user mode rootkit hoạt động ở Ring 3, kernel mode
rootkit hoạt động ở Ring 0, tương tác trực tiếp với kernel. Kernel mode
rootkit sẽ cài đặt một device driver để lấy quyền điều khiển mức kernel.
Sau đó, rootkit driver sẽ chuyển hướng các system function call sang mã
lập trình của nó để thi hành.
Trang 20

Tấn công rootkit trong Oracle
1.1.6. Persistent và non-persistent rootkit
Một khía cạnh để phân loại rootkit nữa là khả năng tồn tại của nó sau
khi hệ thống khởi động.
Persistent rootkit: để có thể tồn tại sau khi hệ thống khởi động rootkit
phải thay đổi được nội dung ổ cứng. Rootkit sẽ chèn một mục autostart
vào Registry, nhờ đó nó được load vào bộ nhớ và tự động thực thi mỗi lần
máy tính khởi động. Dù các thay đổi vật lí làm tăng khả năng bị phát hiện
nhưng vẫn rất nhiều tiện ích hệ thống cũng như chương trình quét malware
lại bỏ qua rootkit.
Non-Persistent rootkit: chỉ tồn tại trên bộ nhớ và mất đi khi hệ thống
khởi động lại. Các chương trình mà bỏ qua việc quét các nơi lưu trữ vật lí
sẽ không phát hiện ra rootkit này. Non-persistent rootkit có vẻ như ít đe
dọa tới những ai mà việc khởi động lại máy tính là thường xuyên. Nhưng
đối với một mạng server- với hàng trăm máy tính client, việc reboot thường
rất hiếm. Các rootkit nằm trên bộ nhớ thường lợi dụng điểm này, hơn nữa,
rootkit kiều này không để lại manh mối vật lý nào để có thể bị phát hiện.
Trang 21
Tấn công rootkit trong Oracle

TẤN CÔNG ROOTKIT TRONG ORACLE
Một số kiểu tấn công trong Oracle
1.1.7. Tấn công SQL injection
SQL injection là kiểu tấn công cơ bản dùng để chiếm quyền truy nhập
database hoặc lấy thông tin trực tiếp từ database. Attacker truyền một chuỗi
input vào ứng dụng nhằm biến đổi cách thức thực hiện câu lệnh SQL. Sự
phức tạp của cuộc tấn công liên quan tới việc khai thác các câu lệnh SQL mà
attacker không biết. Vì thế các ứng dụng open source và các ứng dụng công
bố source code thường dễ bị tấn công hơn. Mọi chương trình hoặc ứng dụng
đều có khả năng bị tấn công SQL injection bao gồm các procedure với kết nối

database trực tiếp, Oracle Form, web application… Rất nhiều lỗ hổng SQL
injection đã được tìm thấy thông qua các gói Oracle Database chuẩn như
DBMS_DATAPUMP, DBMS_RESGISTRY và DBMS_METADATA. Web
application có mức rủi ro cao nhất đối với tấn công này vì attacker có thể khai
thác lỗ hổng SQL injection từ xa mà không phải xác thực database hay
application. Hầu hết các nhà phát triển ứng dụng đánh giá thấp sự nguy hiểm
của tấn công SQL injection trong các ứng dụng sử dụng Oracle là database.
Các kết quả kiểm toán các ứng dụng web cho thấy nhiều nhà phát triển ứng
dụng không đánh giá đầy đủ nguy cơ của tấn công SQL injection và các kỹ
thuật cơ bản để tránh các tấn công như vậy.
Có 4 kiểu tấn công SQL injection: SQL Manipulation, code injection,
function call injection, buffer overflow .
1.1.7.1. SQL Manipulation
Đây là kiểu tấn công SQL injection thường thấy. Attacker cố gắng biến
đổi các câu lệnh SQL bằng cách thêm vào các mệnh đề Where, hoặc các câu
lệnh SQL có các toán tử như Union, intersect hoặc minus. Kiểu thao tác SQL
cổ điển là thông qua quá trình login. Một ứng dụng web đơn giản có thể kiểm
tra xác thực bằng cách thực hiện câu truy vấn sau và kiểm tra nếu có hàng trả
về:
Trang 22
Tấn công rootkit trong Oracle
Select * from users
Where username=’bob’ and Password=’mypassword’
Attacker sẽ biến đổi câu lệnh thành:
Select * from users
Where username =’bob’ and password=’my password’ or ‘a’=’a’
Rõ ràng mọi row sẽ thỏa mãn mệnh đề Where và attacker lấy được quyền
truy nhập vào application.
Toán tử Union cũng thường được dùng trong tấn công SQL injection.
Mục tiêu là biến đổi các câu lệnh vào các hàng trả về từ table khác. Một web

form có thể thực hiện chuỗi truy vấn sau để trả về danh sách các sản phẩm:
Select product_name from all_products
Where product_name like ‘%chairs%’
Attacker sẽ biến đổi câu truy vấn trên thành:
Select product _name from all_products
Where product_name like ‘%chairs%’
Union select username from dba_users
Where username like ‘%’
Danh sách trả về cho web form sẽ bao gồm tất cả product được lựa chọn,
nhưng còn có cả danh sách các database user trong ứng dụng.
1.1.7.2. Code injection
Tấn công code injection thêm các câu lệnh SQL vào câu lệnh SQL đã có.
Kiểu tấn công này thường gặp ở Microsoft SQL server application. Câu lệnh
Execute trong SQL server là đích ngắm của kiểu injection này, và nó không
có câu lệnh tương ứng trong Oracle. Tuy nhiên, PL/SQL và java application
có thể thực thi các khối anonymous PL/SQL, đây là sơ hở cho code injection.
Ví dụ khối một ứng dụng web sẽ thực hiện khối PL/SQL sau:
Begin encrypt_password(‘bob’, ‘mypassword’);
end;
Một procedure encrypt_password với chức năng mã hóa và lưu mật khẩu
của user sẽ được gọi tới. Attacker sẽ cố gắng biến đổi nó:
Begin encrypt_password(‘bob’, ‘mypassword’); delete from users
Where upper(username)=upper(‘admin’);
end;
Trang 23
Tấn công rootkit trong Oracle
1.1.7.3. Function Call injection
Function call injection là việc chèn các function của oracle hay do người
dùng định nghĩa vào các câu lệnh SQL. Các function call này có thể dùng để
tạo lời gọi hệ điều hành hoặc thao tác với data trong database.

Oracle database cho phép các function hoặc các function trong các
package được thực thi như là một phần của câu lệnh SQL. Mặc định Oracle
hỗ trợ hơn 1000 function trong 175 package chuẩn, mặc dù số lượng function
có thể dùng trong kiểu tấn công này ít hơn rất nhiều. Một số function này thực
hiện các chức năng network có thể hay bị sử dụng. Các function được thực thi
là một phần của câu lệnh Select sẽ không tạo được thay đổi nào với database
trừ khi function được đánh dấu là ‘Pragme transaction’. Tức là nó có thể được
thực thi dưới bất kỳ trường hợp nào xảy ra đối với application. Không có
function Oracle nào được thực thi là autonomous transaction. Các function
trong các câu lệnh insert, update, hay delete sẽ có thể thay đổi được data.
Các nhà phát triển ứng dụng thường sử dụng các function của database
thay vì native code( như Java) để thực hiện những tác vụ thông thường.
Không có công cụ tương ứng với function Translate của database trong Java,
nên nhà lập trình quyết định đánh dấu function là ‘pragma transaction’ để nó
có thể ghi vào database trong lệnh Select. Câu lệnh SQL như sau :
Select translate (‘user input’,
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '0123456789')
From dual;
Kẻ tấn công sẽ biến đổi nó thành:
SELECT TRANSLATE('' || myappadmin.adduser('admin', 'newpass') || '',
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'0123456789')
FROM dual;
Thực hiện truy vấn này, attacker đã tạo được một user mới.
1.1.7.4. Buffer Overflows
Buffer overflow được xác định trong nhiều function chuẩn của một
database. Một số function Oracle có khả năng mắc lỗi buffer overflow và dễ
Trang 24
Tấn công rootkit trong Oracle
bị khai thác. Các lỗi buffer overflow trong database functon tz_offset,

to_timestamp_tz và bfilename.
Hầu hết application và web server không xử lý việc bị ngưng kết nối
database do buffer overflow. Thường thì tiến trình web sẽ bị treo cho tới khi
kết nối tới client bị ngắt vì thế, thường xảy ra tình trạng tấn công từ chối dịch
vụ.
1.1.8. Hack listener
Oracle Database Listener là thành phần software database server mà
quản lý network traffic giữa Oracle Database và client. Oracle Database
Listener lắng nghe trên một port, mặc định là 1521 và chuyển tiếp kết nối tới
Database. Tất cả kết nối client đến DB đều thông qua listener. Listener gồm
hai thành phần: tnslsnr, chính là Listener và Listener Control utility (lsnrctl)
dùng để quản lý Listener trên server hoặc remote. Lsnrctl dùng cho việc start
và stop tiến trình listener(tnslsnr). Tnslnsr start và đọc file listener.ora và
sqlnet.ora để biết thông tin cấu hình, như số port và tên dịch vụ database. Tiến
trình tnslnsr được khởi động bởi tài khoản sở hữu tiến trình lsnrctl.
Transparent Network Substarte (TNS) là network protocol dùng bởi Oracle để
kết nối tới Oracle Database. Listener có thể được cấu hình trong 1 hoặc 3
mode ( trong file listener.ora):
- Mode database thường được dùng và là mode chuẩn. Cung cấp network
access tới một Oracle database instance.
- PLSExtProc: cho phép các package PL/SQL truy nhập các chương trình
external( các chương trình của OS), chế độ này được cấu hình mặc định bởi
nhiều instances.
- Executable: cung cấp network access tới các chương trình OS. Mode
này cho phép một chương trình ngoài được định nghĩa và được truy nhập
thông qua kết nối TNS. Có rất ít tài liệu về mode này và thường chỉ được
dùng bởi các sản phẩm Oracle, như Oracle E-Business Suite và Oracle
Collaboration Suite.
1.1.8.1. Điểm yếu của Listener
Một trong những vấn đề an toàn trong Oracle Database là Listener. DBA

thường không nhận ra rằng attacker có thể dễ dàng điều khiển Listener từ xa
và chiếm quyền điều khiển server. Chương trình mặc định cài đặt các phiên
bản trước Oracle 10g, cho phép bất kì client nào quản trị Listener từ xa dùng
Trang 25

×