Sinh viên thực hiện:
Nguyễn Nam Thái
Nguyễn Minh Khánh
Lê Viết Tuấn
T n công rootkit trong oracleấ
Giáo viên Hướng dẫn :
Trần Thị Lượng
Học viện kỹ thuậ mật mã
Khoa an toàn thông tin
I : Tìm hiểu về rootkit
II: Tấn công rootkit trong oracle :
Một số kiểu tấn công trong oracle
Tấn công rootkit trong oracle
MỤC LỤC
I:Lịch sử rootkit
Đầ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.
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%.
I: Tìm hiểu về rootkit trong Oracle
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 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.
I: Tìm hiểu về rootkit trong Oracle
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.
Lợi dụng tính mềm dẻo và linh hoạt của kiến trúc Windows.
I: Tìm hiểu về rootkit trong Oracle
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ó.
I: Tìm hiểu về rootkit trong Oracle
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 .
User-mode rootkit và kernel – mode rootkit
Các 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 mức user (DLL) để được chuyển thành thông
điệp mà kernel có thể hiểu.
I: Tìm hiểu về 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ả.
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.
I: Tìm hiểu về rootkit trong Oracle
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.
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. Đố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.
I: Tìm hiểu về rootkit trong Oracle
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.
Tnslsnr (Listener) : 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. Được khởi động bởi tài
khoản sở hữu tiến trình lsnrctl.
Listener Control utility (lsnrctl) : Dùng cho việc start và stop tiến trình
listener(tnslsnr).
II: Tấn công Rootkit trong Oracle
PL/SQL injection
PL/SQL injection là một kỹ thuật tấn công khá quan trọng liên quan tới
các procedure được lưu trữ trong Oracle. Sử dụng PL/SQL injection,
attacker có thể leo thang đặc quyền từ tài khoản Public mức thấp 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 select, insert, delete,
update trong các procedure, package, vào các anonymous PL/SQL block.
II: Tấn công Rootkit trong Oracle
2. Các loại nhãn người dùng
Tại mỗi thời điểm, mỗi người dùng đều có một nhãn gọi là
nhãn người dùng (user label).
Nhãn này có tác dụng cho biết mức độ tin cậy của người dùng
đối với những dữ liệu được chính sách đó bảo vệ
Nhãn người dùng cũng gồm các thành phần giống như nhãn dữ
liệu
Khi một người dùng truy xuất trên bảng được bảo vệ, nhãn
người dùng sẽ được so sánh với nhãn dữ liệu của mỗi dòng
trong bảng để quyết định những dòng nào người dùng đó có thể
truy xuất được.
II: Tấn công Rootkit trong Oracle
Một số data dictionary view
DBA_JOBS
II: Tấn công Rootkit trong Oracle
Column Comments
Job Xác định một job. Không
thể thay đổi nó dù thực
hiện import hay export
nhiều lần.
Log_user Khi user xác nhận job thì
sẽ được ghi lại.
Priv_user User có quyền mặc định
được áp dụng cho job
này.
Schema_user Schema mặc định được
gán cho job khi thực thi.
Last_date Thời điểm gần nhất mà
job được thực hiện thành
công
This_date
Thời điểm mà job
được bắt đầu thực hiện
(là null nếu không
thực thi).
DBA_JOBS_RUNNING
View Dba_jobs_running liệt kê thông tin về tất cả các job đang chạy.
II: Tấn công Rootkit trong Oracle
Column_name Comments
Failures 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.ừ ầ
Instance ID c a instance ch y jobủ ạ
Job ID c a job đang ch yủ ạ
Last_date Ngày g n nh t mà job ch y thành công ầ ấ ạ
Last_sec Tương t như last_date, đó là l n th c ự ầ ự
hi n thành công g n nh tệ ầ ấ
SID ID c a ti n trình đang th c hi n jobủ ế ự ệ
This_date Ngày mà job b t đ u th c hi n (thư ng là ắ ầ ự ệ ờ
null n u không đang th c hi n)ế ự ệ
This_sec Gi ng như this_date. Đó là l n th c hi n ố ầ ự ệ
thành công cu i cùngố
V$PROCESS
Lưu thông tin về các process hiện tại đang chạy.
II: Tấn công Rootkit trong Oracle
C tộ Mô tả
Addr Đ a ch c a processị ỉ ủ
Pid Đ nh danh c a processị ủ
Spid Đ nh danh trên OS c a processị ủ
Username Process đư c ch y b ng tài kho n OS nào.ợ ạ ằ ả
Trace ID Đ nh danh file traceị
Background Nh n di n process có ph i ti n trình background ậ ệ ả ế
không.
Latchwait Đ a ch c a Latch mà process đang đ iị ỉ ủ ợ
Latchspin đ a ch c a latch mà process đang spinning trênị ỉ ủ
Pga_used_me
m
Vùng nh PGA mà process s d ngớ ử ụ
Pga_alloc_me
m
Vùng nh PGA hi n th i đư c c p phát cho processớ ệ ờ ợ ấ
V$Session
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 :
II: Tấn công Rootkit trong Oracle
Colum
n
N i dungộ
Saddr Đ a ch sessionị ỉ
Sid Đ nh danh sessionị
Serial# 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ộ ạ ị ủ
Paddr Đ a ch c a process s h u session.ị ỉ ủ ở ữ
Event Tài nguyên ho c s ki n mà session đang đ iặ ự ệ ợ
Status Tr ng thái c a session(active, inactive, killed, ạ ủ
cached…)
Logon_
time
Th i gian logon.ờ
Userna
me
Tên user
Comma
nd
Câu l nh đang x lý.ệ ử
Type Ki u sessionể
Khai thác các PL/SQL Package
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.
II: Tấn công Rootkit trong Oracle
Package DBMS_METADATA
Để thay đổi thông tin mà các view đưa ra, attacker cần phải tác động tới mã
nguồn (mã tạo ra) các view, table. Trong các function, procedure được viết để
thực hiện ý đồ của mình, attacker sẽ cần phải lấy mã nguồn của các view, table
cần thay đổi, sau đó, thêm vào phần mã của mình và thực hiện tạo lại view,
table. Attacker có thể sử dụng package dbms_metadata của Oracle để lấy được
mã nguồn (DDL) này.
II: Tấn công Rootkit trong Oracle
Table Các column
sys.ku$_parsed_
item
item, values, object_row
sys.ku$_ddl ddlText, parsedItem
sys.ku$_Errorlin
e
errorNumber, errorText
sys.ku$_submitr
esult
ddl, errorlines
Package DBMS_OUTPUT
Dbms_output package cho phép gửi message từ pl/sql. Thường dùng nhất
là kích hoạt package dbms_output và hiển thị nội dung của message buffer.
Trong sql*plus điều này có thể thực hiện bằng lệnh: ‘Set serveroutput on’
hoặc ‘Setserverout on’.
II: Tấn công Rootkit trong Oracle
Subprogram N i dungộ
Dbms_output.ena
ble
Enable các chương trình con Put,
put_line, get_line, get_lines và new_line.
Dbms_output.ne
w_line
Thêm m t end-of-line vào bufferộ
Dbms_output.get
_line(s)
L y 1 ho c nhi u dòng t bufferấ ặ ề ừ
Dbms_output.put Chuy n tham s đư c g i vào bufferể ố ợ ọ
Dbms_output.put
_line
them m t end-of-line vào bufferộ
Package DBMS_JOB
Dbms_job cung cấp một job cho nhiều instance. Mặc định job có thể chạy
trên bất kỳ instance nào, nhưng chỉ một instance sẽ chạy nó. Các job
không thể bị sửa đổi hay xóa ngoài job sở hữu bởi user đó.
II: Tấn công Rootkit trong Oracle
Subprogra
m
N i dungộ
Broken Ch n th c hi n jobặ ự ệ
Change Ch nh s a tham s ngư i dung đ nh nghĩa ỉ ử ố ờ ị
liên quan t i jobớ
Instance Gán m t job cho m t instance ch yộ ộ ạ
Next_date L n th c hi n job ti p theoầ ự ệ ế
Remove Xóa m t job kh i hang đ i jobộ ỏ ợ
Run Th c hi n ch y jobự ệ ạ
Submit Đưa m t job vào hàng đ i jobộ ợ
What Thay đ i đ c t c a m t jobổ ặ ả ủ ộ
Nhiệm vụ của rootkit
Ẩn tài khoản truy nhập
Các DBA và các công cụ sử dụng các view DBA_USERS và
ALL_USERS
để truy nhập table SYS.USER$.
II: Tấn công Rootkit trong Oracle
II: Tấn công Rootkit trong Oracle
Ẩn Process
User process: Bắt đầu khi database user yêu cầu kết nối tới Oracle server
Server process: Xử lý các yêu cầu từ user process kết nối tới instance.
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.
II: Tấn công Rootkit trong Oracle