Tải bản đầy đủ (.docx) (37 trang)

các tấn công vào cơ sở dữ liệu ORACLE.

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 (975.05 KB, 37 trang )

MỤC LỤC
Lời nói Đầu
Cơ sở dữ liệu là một trong những ngành được quan tâm nhiều trong khoa học máy
tính nói chung và trong công nghệ thồn tin nói riêng. Từ khi có mô hình cơ sở dữ
liệu đầu tiên vào những năm 60 đến nay, tuy không phải là chặng đường dài so với
các ngành khoa học khác, nhưng với ngành khoa học máy tính và đặc biệt là cơ sở
dữ liệu thì đó là thời gian đáng kể. Cơ sở dữ liệu đã trải qua nhiều thế hệ của hệ
quản trị cơ sở dữ liệu đã có nhiều ứng dụng trong khoa học và các ngành kinh tế
quốc dân. Hệ quản trị cơ sở dữ liệu ORACLE là một trong những hệ quản trị cơ sở
dữ liệu lưu trữ thông tin an toàn và chắc chắn đồng thới lại truy cập chính xác, dễ
dàng.
Cơ sở dữ liệu (CSDL) của các tổ chức, doanh nghiệp luôn là mục tiêu của nhiều
cuộc tấn công. Bởi đây là nơi lưu trữ các thông tin về khách hàng và nhiều dữ liệu
bí mật khác. Một trong những nguyên nhân khiến cho các CSDL dễ bị tổn thương
bởi các tấn công là do các tổ chức, doanh nghiệp chưa có biện pháp bảo vệ đầy đủ
cho tài nguyên này. Khi kẻ xấu truy nhập vào dữ liệu nhạy cảm, có thể thực hiện
tất cả các công việc để gây mất mát về tài chính hoặc phá hoại danh tiếng của tổ
chức, doanh nghiệp. Và sau đây nhóm em xin trình bày đề tài các tấn công vào cơ
sở dữ liệu ORACLE.
Do còn hạn chế nhiều về thời gian, kiến thức và kinh nghiệm thực tế nên đề tài
của nhóm không tránh khỏi những thiếu sót và khuyết điểm. Nhóm thực hiện đề
tài rất mong nhận được sự đánh giá, nhận xét của các Thầy, các Cô và sự góp ý
của các bạn sinh viên để giúp đề tài này được hoàn thiện hơn, từ đó nhóm chúng
em có thể rút kinh nghiệm trong nghiên cứu và công việc sau này.
Nhóm chúng em xin chân thành cảm ơn!
1
Chương 1: Cơ sở lý thuyết
1.1Giới thiệu về Oracle
Trong quá trình quản lý việc xử lý thông tin là vấn đề phức tạp vì lượng thông tin
nhận được ngày một lớn và thường xuyên. Ngày nay có rất nhiều chương trình ứng
dụng giúp ta quản lý và lưu trự thông tin dễ dàng. Trong đó có thể kể đến Oracle, là


một trong những chương trình ứng dụng, nó có cơ chế bảo mật dữ liệu rất chặt chẽ
giúp cho hệ thống hoạt động rất tốt và rất an toàn trong việc cập nhật và truy cập dữ
liệu, tránh được việc mất mát dữ liệu, dễ dàng bảo trì và nâng cấp, có cơ chế quyền
hạn rõ ràng vì vậy nó được sử dụng ở nhiều tổ chức lớn như ngân hàng, chính phủ…
Nó không chỉ có lợi cho những nhà phát triển như dễ cài đặt, dễ triển khai, dễ nâng cấp
lên phiên bản mới mà còn thuật lợi cho lập trình viên như viết các Trigger, Package vì
trong Oracle còn tích hợp thêm PL/SQL là một ngôn ngữ lập trình có cấu trúc
( Structure Language) và đây chính là điểm rất mạnh của Oracle so với các cơ sở dữ
liệu khác. Ngoài ra Oracle còn tương tác tốt với nhiều hệ điều hành như Windows ,
Linux.
Oracle là bộ giải pháp được cung cấp bởi công ty Oracle
( ) - Đây là một hệ quản trị CSDL có tính bảo mật
cao, hỗ trợ tốt các mô hình truy cập dữ liệu tập trung cũng như phân tán. Giải pháp của
Oracle bao gồm các sản phẩm sau:
- Hệ quản trị CSDL Oracle Database được cài đặt trên máy chủ Database Server
- Oracle Client được cài đặt trên máy trạm cho phép các ứng dụng tại máy trạm truy cập
và thao tác với ứng dụng tại máy chủ.
- Công cụ cho việc thiết kế và quản trị CSDL như Oracle Designer, SQL Plus.
- PL/SQL là ngôn ngữ thủ tục cho được Oracle dùng để xây dựng đối tượng trong
Oracle Database.
2
1.2 Quá trình cài đặt Oracle
Bước 1: Dowload phiên bản Oracle database 11g Release 2. Ở đây ta dùng phiên
bản cho Windows 64 bit.
Bước 2: Sau khi download thành công ta tiến hành cài đặt.
Thực hiện lần lượt:
- Điền địa chỉ email để được support hoặc tích vào ô checkbox để bỏ rồi click next
3
- Chọn “ Desktop Class ” rồi click next
- Điền thông tin quan trọng:

Thư mục cài đặt mặc định là C:\app\{user name}.
Global database name: mặc định không nên thay đổi là orcl( cần nhớ SID để đăng
nhập lần sau)
Nhập Password: Ví dụ mật khẩu do Oracle hướng dẫn là orcl1234
4
- Click next để tự động kiểm tra các bước cài đặt
- Click Finish để bắt đầu cài đặt
5
- Trong quá trình cài đặt cần xác nhận cho java runtime bởi Firewall và đừng để phần
mềm diện virus xóa hay lock file nào. Nếu quá trình cài đặt thành công chờ một lát sẽ
hiện ra:
6
- Ở đây HTTP Server Control chạy lên: https://localhost:1158/em
Cài đặt hoàn thành
7
Chương 2: Các hình thức tấn công phổ biến trên Oracle
2.1 Tấn công SQL Injection
2.1.1 Định nghĩa
SQL Injection là một kỹ thuật cho phép những kẻ tấn công lợi dụng lỗ hổng vào
việc kiểm tra dữ liệu đầu vào trong các ứng dụng web và các thông báo lỗi của hệ quản
trị cơ sở dữ liệu trả về để inject ( tiêm vào) và thi hành các câu lệnh SQL bất hợp pháp.
SQL injection có thể cho phép kẻ tấn công thực hiện thao tác , delete, insert, update…
trên cơ sở dữ liệu của các ứng dụng, thậm trí là cả trên sever mà ứng dụng đó đang
chạy, lỗi này thường xảy ra trên các ứng dụng web có dữ liệu quản lý bằng các hệ
quản trị cơ sở dữ liệu như SQL sever , My SQL , Oracle…
2.1.2 Các dạng lỗi thường gặp
- Không kiểm tra ký tự thoát truy vấn
Đây là dạng lỗi SQL injection xảy ra khi thiếu đoạn mã kiểm tra dữ liệu đầu vào
trong câu truy vấn SQL. Kết quả là người dùng cuối có thể thực hiện một số truy vấn
không mong muốn đối với cơ sở dữ liệu của ứng dụng

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

Ví dụ:
statement:= "SELECT * FROM data WHERE id = " + a_variable + ";"
Ta có thể nhận thấy một cách rõ ràng ý định của tác giả đoạn mã trên là nhập vào
một số tương ứng với trường id - trường số. Tuy nhiên, người dùng cuối, thay vì nhập
vào một số, họ có thể nhập vào một chuỗi ký tự, và do vậy có thể trở thành một câu
truy vấn SQL hoàn chỉnh mới mà bỏ qua ký tự thoát. Ví dụ, ta thiết lập giá trị của biến
a_variable là:
1;DROP TABLE users
Khi đó, nó sẽ thực hiện thao tác xóa người dùng có id tương ứng khỏi cơ sở dữ
liệu, vì câu truy vấn hoàn chỉnh đã được hiểu là:
SELECT * FROM DATA WHERE id=1;DROP TABLE users;
- Blind SQL Injection
Lỗi SQL injection dạng này là dạng lỗi tồn tại ngay trong ứng dụng web nhưng
hậu quả của chúng lại không hiển thị trực quan cho những kẻ tấn công. Nó có thể gây
ra sự sai khác khi hiển thị nội dung của một trang chứa lỗi bảo mật này, hậu quả của sự
tấn công SQL injection dạng này khiến cho lập trình viên hay người dùng phải mất rất
9
nhiều thời gian để phục hồi chính xác từng bit dữ liệu. Những kẻ tấn công còn có thể
sử dụng một số công cụ để dò tìm lỗi dạng này và tấn công với những thông tin đã
được thiết lập sẵn.
- Thay đổi giá trị kiểu truy vấn
Dạng lỗi này khiến kẻ tấn công có thể thay đổi giá trị điều kiện trong câu lệnh truy
vấn, làm sai lập sự hiển thị của một ứng dụng trong lỗi này
SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=1;
Sẽ hiển thị một cách bình thường trong khi:
SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=2;
Sẽ hiển thị một nội dung khác, hoặc không hiển thị gì nếu ứng dụng web có chứa
lỗi SQL injection dạng này. Lỗ hổng dạng này còn cho phép tin tặc không chỉ gây ảnh
hưởng tới bảng hay dữ liệu hiện tại mà còn ảnh hưởng tới những dữ liệu hay bảng
khác phụ thuộc vào nội dung của dữ liệu hay bảng hiện tại.

- Điều kiện lỗi
Lỗi SQL injection dạng này dẫn tới việc buộc cơ sở dữ liệu chỉ được phép đánh
giá khi mà giá trị của câu lệnh WHERE là đúng.
Ví dụ:
SELECT 1/0 FROM users WHERE username='Ralph';
Phép chia cho 0 chỉ được đánh giá là lỗi khi mà người dùng có tên "Ralph" tồn tại
trong cơ sở dữ liệu.
- Thời gian trễ
Lỗi SQL injection dạng này tồn tại khi thời gian xử lý của một hay nhiều truy vấn
SQL phụ thuộc vào dữ liệu logic được nhập vào hoặc quá trình xử lý truy vấn của SQL
engine cần nhiều thời gian. Tin tặc có thể sử dụng lỗi SQL injection dạng này để xác
định thời gian chính xác mà trang cần tải khi giá trị nhập vào là đúng.
10
- Một số dạng tấn công thường gặp với ứng dụng Web
Dạng tấn công vượt qua kiểm tra lúc đăng nhập
Với dạng tấn công này, tin tặc có thể dễ dàng vượt qua các trang đăng nhập nhờ
vào lỗi khi dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu của ứng dụng web.
Thông thường để cho phép người dùng truy cập vào các trang web được bảo mật, hệ
thống thường xây dựng trang đăng nhập để yêu cầu người dùng nhập thông tin về tên
đăng nhập và mật khẩu. Sau khi người dùng nhập thông tin vào, hệ thống sẽ kiểm tra
tên đăng nhập và mật khẩu có hợp lệ hay không để quyết định cho phép hay từ chối
thực hiện tiếp.
Ví dụ:
Trong trường hợp sử dụng ASP, người ta có thể dùng 2 trang: 1 trang HTML để hiển
thị Form nhập liệu và 1 trang ASP để xử lý thông tin nhập vào từ phía người dùng như
sau:
Trang nhập liệu: login.html
<form action="ExecLogin.asp" method="post">
Username: <input type="text" name="fUSRNAME"><br />
Password: <input type="password" name="fPASSWORD"><br />

<input type="submit">
</form>
Trang xử lý nhập liệu: execlogin.asp
<%
Dim vUsrName, vPassword, objRS, strSQL
vUsrName = Request.Form("fUSRNAME")
vPassword = Request.Form("fPASSWORD")
strSQL = "SELECT * FROM T_USERS " & _
"WHERE USR_NAME=' " & vUsrName & _
" ' and USR_PASSWORD=' " & vPassword & " ' "
11
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN= "
If (objRS.EOF) Then
Response.Write "Invalid login."
Else
Response.Write "You are logged in as " & objRS("USR_NAME")
End If
Set objRS = Nothing %>
Chỗ sơ hở trong đoạn mã xử lý nhập liệu trên nằm ở chỗ dữ liệu nhập vào từ
người dùng được dùng để xây dựng trực tiếp câu lệnh SQL. Chính điều này cho phép
tin tặc có thể điều khiển câu truy vấn sẽ được thực hiện. Ví dụ, nếu người dùng nhập
chuỗi trong ngoặc sau vào trong cả 2 ô nhập liệu username/password của trang
login.htm là:('OR='). Lúc này, câu truy vấn sẽ được gọi thực hiện là:
SELECT * FROM T_USERS WHERE USR_NAME =''OR''='' AND
USR_PASSWORD= ''OR''=''
Câu truy vấn này là hợp lệ và sẽ trả về tất cả các bản ghi của T_USERS và đoạn
mã tiếp theo xử lí người dùng đăng nhập bất hợp pháp này như là người dùng đăng
nhập hợp lệ.
Dạng tấn công sử dụng câu lệnh SELECT

Dạng tấn công này phức tạp hơn. Để thực hiện được kiểu tấn công này, kẻ tấn
công phải có khả năng hiểu và lợi dụng các sơ hở trong các thông báo lỗi từ hệ thống
để dò tìm các điểm yếu khởi đầu cho việc tấn công. Ví dụ, trong các trang tìm kiếm.
Các trang này cho phép người dùng nhập vào các thông tin tìm kiếm như Họ, Tên, …
Đoạn mã thường gặp là:
12
Tương tự như trên, tin tặc có thể lợi dụng sơ hở trong câu truy vấn SQL để nhập
vào trường tên tác giả bằng chuỗi giá trị:
Lúc này, ngoài câu truy vấn đầu không thành công, chương trình sẽ thực hiện
thêm lệnh tiếp theo sau từ khóa UNION nữa. Giả sử đoạn mã nhập vào là:
Câu truy vấn sẽ thực hiện việc xóa bảng
Dạng tấn công sử dụng câu lệnh INSERT
Thông thường các ứng dụng web cho phép người dùng đăng kí một tài khoản để
tham gia. Chức năng không thể thiếu là sau khi đăng kí thành công, người dùng có thể
xem và hiệu chỉnh thông tin của mình. SQL injection có thể được dùng khi hệ thống
không kiểm tra tính hợp lệ của thông tin nhập vào
Ví dụ: Một câu lệnh insert có dạng
Nếu đoạn mã xây dựng câu lệnh SQL có dạng:
13
Thì chắc chắn sẽ có lỗi SQL vì nếu ta nhập vào câu lệnh thứ nhất ví dụ như:
Lúc này câu truy vấn sẽ là:
Khi đó, lúc thực hiện lệnh xem thông tin, xem như bạn đã yêu cầu thực hiện thêm
một lệnh nữa đó là:
2.2 Tấn công chèn mã PL/SQL
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, người tấn công có thể
leo thang đặc quyền từ tài khoản Public tới tài khoản đặc quyền mức DBA. Kỹ thuật
này xuất hiện ở tất cả các phiên bản của Oracle và có thể dùng để tấn công các
procedure của khách hàng cũng như của chính Oracle. Có thể inject vào các câu lệnh
insert, select, delete, update trong các procedure, package, vào các anonymous

PL/SQL Blook.
Ví dụ: Inject vào câu lệnh select trong procedure sau, giả sử nó thuộc sở hữu của user
SYS và được thực thi bởi Public:
Create or replace procedure list_libraries(p_owner varchar2) as
Type c_type is ref cursor;
Cv c_type;
Buffer varchar2(200);
14
Begin
Dbms_output.enable(100000);
Open cv for ‘select object_name from all_objects where owner=’’’
|| p_owner || ‘’’ and object_type=’’library’’’;
Loop
Fetch cv into buffer;
Dbms_output.put_line(buffer);
Exit when cv%notfound;
End loop;
Close cv;
End;
/
Procedure này liệt kê tất cả các thư viện sở hữu bởi user được chỉ ra. Danh sách
thư viện được đưa ra thông qua dbms_output.put_line. Để thực hiện procedure chúng
ta gõ lệnh sau:
Set serveroutput on
Exec sys.list_libraries(‘sys’);
Procedure này là lỗ hổng đối với SQL injection. User thực thi procedure có thể
nhập vào một single quote để thoát ( break out ) khỏi chuỗi lệnh và thực hiện chuỗi
lệnh tự chèn vào. Inject toán tử union select để trả về mã băm password cho mỗi user
được lưu trong table sys.user$:
Set serveroutput on

Exec sys.list_libraries(‘foo’’union select password from sys.user$ ‘);
Khi đó câu lệnh trong procedure đã bị chuyển thành:
Select object_name from all_objects where owner=’foo’ union select password from
sys.user$ ‘ and object_type=’library’
Ký tự “ ” đánh dấu phần comment ‘ and object_type=’library’ và phần này sẽ bị bỏ
qua. Vì thế cấu truy vấn sẽ trả về password ở dạng băm.
15
2.3 Tấn công Rootkit trong Oracle
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ì 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
Một số tương đồng về command và object giữa Oracle và OS*Nix
*NIX
command/object
Oracle command/object
Ps SELECT * FROM V$PROCESS
kill<processnumner
>
ALTER SYSTEM KILL SESSION '12,55'
Executables Views, Packages, Functions and procedures
Execute SELECT * FROM MY_VIEW EXEC
PROCEDURE
Cd ALTER SESSION SET
CURRENT_SCHEMA=USER01
Rm delete bla (put in correct sytax)
fdisk drop tablespaces
Hình 1: Tương đồng giữu database và OS
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.
2.3.1 Ẩn tải khoản Oracle Rootkit
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:
AND U.NAME !=’tên cần ẩn’
16
Hình 2: Trước khi ẩn User Hacker
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 đó:
17
Hình 3: Sau khi ẩn User Hacker
18
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$.
2.3.2 Ẩn process
Oracle process được chia làm 3 loại:
User process: Bắt đầu khi database user yêu cầu kết nối tới Oracle server
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.
V$session trước và sau khi ẩn tiến trình của attacker.
Hình 4: v$session trước khi ẩn session
Hình 5:v$session sau khi ẩn session
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.
19
2.3.3 Ẩn Database Jobs
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.
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.
Dba_jobs trước và sau khi ẩn job của attacker.
Hình 6: dba_jobs trước khi ẩn job
Hình 7: dba_jobs sau khi ẩn job
2.3.4 Mô tả tấn công Oracle sử dụng rootkit kết hợp với backdoor
Để 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.
20
Ở đâ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.
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.
2.4 Tấn công Oracle Listener
Trong cấu trúc cơ sở dữ liệu (CSDL) của Oracle thì Listener là một tiến trình
mạng của CSDL Oracle. Nó chờ đợi các yêu cầu kết nối từ máy ở xa. Nếu tiến trình
này bị tổn hại thì có thể ảnh hưởng đến sự sẵn sàng của CSDL.
Listener trong CSDL Oracle được coi là cổng vào cho các kết nối từ xa đến một
CSDL Oracle. Nó lắng nghe yêu cầu kết nối và xử lý chúng cho phù hợp. Theo mặc
định, Listener lắng nghe trên cổng 1521 (cổng 2483 là cổng đăng ký chính thức mới
TNS Listener và 2484 cho TNS Listener sử dụng SSL). Nếu Listener "tắt" thì truy cập
từ xa vào CSDL sẽ ngừng. Nếu trường hợp này xảy ra, ứng dụng ngừng, tức là tạo ra
một cuộc tấn công từ chối dịch vụ.
2.4.1 Khai thác thông tin CSDL Oracle qua Listener
Khi khám phá cổng trên đó Listener hoạt động, người ta có thể đánh giá Listener
bằng cách chạy một công cụ được phát triển bởi Integrigy:
21
Công cụ ở trên kiểm tra thông tin sau đây:
Mật khẩu Listener. Trên nhiều hệ thống Oracle, mật khẩu Listener có thể không
được thiết lập. Công cụ ở trên xác minh điều này. Nếu mật khẩu không được thiết lập,
một kẻ tấn công có thể thiết lập mật khẩu và chiếm quyền điều khiển Listener, mặc dù
mật khẩu có thể được gỡ bỏ tại cục bộ bằng cách chỉnh sửa tập tin listener.ora.
Kích hoạt tính năng logging. Các công cụ ở trên cũng kiểm tra xem nếu logging đã
được kích hoạt. Nếu không, người ta không phát hiện bất kỳ thay đổi cho Listener
hoặc có một bản ghi của nó. Ngoài ra, phát hiện các cuộc tấn vét cạn vào Listener sẽ
không được ghi lại.

Hạn chế quản trị. Nếu hạn chế quản trị không được kích hoạt, có thể sử dụng lệnh
"SET" từ xa.
Ví dụ: Nếu bạn tìm thấy một cổng TCP/1521 mở trên một máy chủ, và Listener Oracle
chấp nhận kết nối từ bên ngoài. Nếu Listener không được bảo vệ bởi một cơ chế xác
thực, hoặc nếu bạn có thể tìm thấy dễ dàng thông tin xác thực, thì có thể khai thác lỗ
hổng này để liệt kê các dịch vụ Oracle. Ví dụ, bằng cách sử dụng lsnrctl.exe. (Có trong
tất cả các bản cài đặt Oracle client), bạn có thể có được kết quả như sau:
22
Trong ví dụ này mô tả cách thông qua Listener lấy quyền quản trị CSDL Oracle 9i
The Oracle Listener cho phép liệt kê tài khoản người dùng mặc định trên Oracle
Server:
Trong trường hợp này, chúng ta không tìm thấy tài khoản có quyền DBA, nhưng
tài khoản OUTLN và BACKUP giữ một quyền cơ bản: EXECUTE ANY
PROCEDURE. Điều này có nghĩa rằng nó là có thể thực hiện bất kỳ thủ tục nào, ví dụ
như sau:
exec dbms_repcat_admin.grant_admin_any_schema('BACKUP');
Thực hiện lệnh này cho phép một người nhận được quyền DBA. Bây giờ người dùng
có thể tương tác trực tiếp với DB và thực thi, ví dụ:
select * from session_privs;
Đầu ra là các ảnh chụp màn hình sau đây:
23
Vì vậy, người dùng bây giờ có thể thực hiện rất nhiều hoạt động, cụ thể là: DELETE
ANY TABLE và DROP ANY TABLE.
2.4.2 Tấn công từ chối dịch vụ
Một vấn đề khác liên quan đến tấn công từ chối dịch vụ Listener của Oracle 9i trở
về trước nhưng nếu không chú ý có thể bị ở Oracle phiên bản 10g trở về sau. Trước
đây, Oracle 9i cho phép chạy lệnh lsnrctl.exe từ xa để tắt hoặc mở dịch vụ Listener. Lý
do là thông số LOCAL_OS_AUTHENTICATE_LISTENER mặc định ở chế độ OFF.
Chế độ này cho phép lệnh lsnrctl.exe từ xa không cần xác thực cục bộ tại máy chủ
Oracle. Thông số này được điều chỉnh mặc định ở chế độ ON trong Oracle 10g trở về

sau, nên dùng lsnrctl.exe từ xa phải xác thực tại máy chủ, do đó cách này không dùng
được từ Oracle 10g trở lên trừ trường hợp khai báo thông số trên ở chế độ OFF.
Để thử nghiệm, ta có thể khai báo trong file listener.ora như sau:
LOCAL_OS_AUTHENTICATE_LISTENER=OFF
Khởi động lại Listener, sau đó từ xa dùng lệnh:
Lsnrctl.exe stop <IP address>
Với IP address là địa chỉ máy chủ Oracle.
24
2.5 Sâu Oracle
Chức năng của Worm-FS thường được mặc định và thời gian lưu giữ tùy chỉnh,
dữ liệu và đường dẫn không thay đổi. WORM-FS có thể hoạt động ở một trong hai chế
độ:
- Sun standard compliance mode ( chế độ tiêu chuẩn)
- Sun emulation compliance mode ( chế độ thi đua): được thiết kế để cung cấp khả
năng tương thích với các chế độ thi đua của StorageTek 5320 lưu trữ gắn mạng (NAS)
Thiết bị và tương tự với một giao diện được định nghĩa bởi Network Appliance.
Một sự khác biệt giữa các chế độ tiêu chuẩn và thi đua là một hạn chế về bản chất
của tập tin có thể được giữ lại. Cụ thể, trong chế độ tiêu chuẩn, các tập tin với bất cứ
điều khoản thực thi UNIX có thể không được giữ lại. Chế độ thi đua không có hạn chế
này. Những hạn chế trong chế độ tiêu chuẩn tồn tại bởi vì cò giữ được định nghĩa cho
NFS và FTP xác định rằng chế độ setuid được thiết lập trên các tập tin. Khi một tập tin
được giữ lại, một khách hàng sẽ thấy các thiết lập chế độ bit setuid. Tuy nhiên, những
hạn chế trên các tập tin thực thi sẽ ngăn chặn các lỗ hổng bảo mật có thể cho phép một
tập tin thực thi sở hữu của người sử dụng gốc được thực hiện Worm và do đó không
thể loại bỏ. Một lợi ích của phương pháp này là người dùng hay ứng dụng có thể dễ
dàng xác định các tập tin trên hệ thống là các tập tin được bảo vệ Worm.
2.5.1 Sử dụng WORM-FS với NFS Khách hàng
Nếu bạn đang sử dụng WORM-FS trên Oracle Solaris 10g hoặc sau đó với khách
hàng NFS kết nối với nó, đảm bảo rằng NFS phiên bản 4 được kích hoạt trên các máy
khách NFS và cắt đứt.

Nếu bạn đang chạy một phiên bản cũ hơn của hệ điều hành Solaris của Oracle
(Oracle Solaris 10 trước) và NFS phiên bản 3, khách hàng NFS có thể không hiển thị
các tập tin WORM-FS. Thêm dòng sau vào / etc / file hệ thống và sau đó khởi động lại
hệ thống: đặt nfs: nfs_allow_preepoch_time = 1
25

×