1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tấn công Rootkit trong Oracle

55 354 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 55
Dung lượng 1,47 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ví dụ đối với một vụ tấn công vào hệ cơ sở dữ liệu Oracle: 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ở

Trang 1

MỤC LỤC

MỤC LỤC 1

DANH MỤC HÌNH ẢNH 3

DANH MỤC BẢNG 4

LỜI NÓI ĐẦU 5

CHƯƠNG 1 TỔNG QUAN VỀ ROOTKIT 7

1.1 Tổng quan về mã độc (malware) 7

1.2 Tổng quan về Rootkit 7

Lịch sử Rootkit 7

1.2.1 Khái niệm Rootkit 8

1.2.2 1.3 Cách thức hoạt động của Rootkit 9

Chiếm quyền điều khiển 9

1.3.1 Kỹ thuật Hooking 9

1.3.2 1.4 Phân loại Rootkit 10

User-mode rootkit và kernel – mode rootkit 10

1.4.1 Persistent và non-persistent rootkit 11

1.4.2 CHƯƠNG 2 TẤN CÔNG ROOTKIT TRONG ORACLE 13

2.1 Tổng quan Oracle 13

Oracle instance 13

2.1.1 Oracle Database 14

2.1.2 2.2 Tấn công Rootkit trong Oracle 17

Tìm hiểu 1 số data dictionary view 17

2.2.1 Khai thác các PL/SQL Package 20

2.2.2 Nhiệm vụ của Rootkit 27

2.2.3 Cách thức tấn công của Rootkit 32

2.2.4 Mô tả tấn công Oracle sử dụng Rootkit kết hợp với Backdoor 39

2.2.5 CHƯƠNG 3 PHÁT HIỆN ROOTKIT 44

Trang 2

3.1 Phương pháp phát hiện Rootkit 44

Quét 44

3.1.1 Theo dõi các sự kiện 45

3.1.2 3.2 Một số phần mềm phát hiện và diệt Rootkit 46

CHƯƠNG 4 THỰC HIỆN TẤN CÔNG ROOTKIT TRONG ORACLE 48

4.1 Mục tiêu 48

4.2 Các bước thực hiện 48

KẾT LUẬN 54

TÀI LIỆU THAM KHẢO 55

Trang 3

DANH MỤC HÌNH ẢNH

Hình 2.1 Kiến trúc Oracle Server 13

Hình 2.2 System Global Area SGA 14

Hình 2.3 Trước khi ẩn user Hacker 28

Hình 2.4 Sau khi ẩn user Hacker 29

Hình 2.5 V$session trước khi ẩn session 30

Hình 2.6 V$session sau khi ẩn session 30

Hình 2.7 dba jobs trước khi ẩn job 31

Hình 2.8 dba jobs sau khi ẩn job 31

Hình 2.9.Trước khi thay đổi binary 33

Hình 2.10 Sau khi thay đổi binary 34

Hình 2.11 Đường dẫn thực thi trong Oracle 35

Hình 2.12 Trước khi thay đổi đường dẫn thực thi 35

Hình 2.13 Tạo view mới 36

Hình 2.14 Truy xuất sau khi thay đổi đường dẫn 36

Hình 2.15 Sử dụng PL/SQL native 39

Hình 2.16 Sử dụng PL/SQL native 39

Hình 4.1.Giao diên SQL Plus 48

Hình 4.2 Tạo user hacker 48

Hình 4.3 Gán quyền DBA cho hacker 49

Hình 4.4 Đ ng nhập bằng user hacker 49

Hình 4.5 Truy vấn đến bảng dba_users 49

Hình 4.6 Tạo một view là DBA HACK để ẩn user hacker 50

Hình 4.7 Tạo một synonym có tên là hacker.dba users 50

Hình 4.8 Đ ng nhập user hacker ở chế độ thường và truy vấn đến bảng DBA_USERS 50

Hình 4.9 Xem thông tin log group 51

Hình 4.10 Xem thông tin member trong logfile 51

Hình 4.11 Thêm member trong logfile 52

Hình 4.12 Truy vấn bảng logfile để kiểm tra member vừa tạo 52

Hình 4.13 Xóa 1 member trong logfile 52

Hình 4.14 Kiểm tra lại trong bảng logfile 53

Trang 4

DANH MỤC BẢNG

Bảng 2.1 View dba_jobs 18

Bảng 2.2 View dba_jobs_running 19

Bảng 2.3 V$Process 19

Bảng 2.4 V$Session 20

Bảng 2.5 dbms_metadata 21

Bảng 2.6 Dạng XML của các object 22

Bảng 2.7 dbms_output 23

Bảng 2.8 dbms_jobs 23

Bảng 2.9 dbms_sql 25

Bảng 2.10 Các function cơ bản 27

Bảng 2.11 Thông tin user, job, process 32

Trang 5

LỜI NÓI ĐẦU

Những n m gần đây, bảo mật luôn là vấn đề nhức nhối và làm đau đầu các công ty, tổ chức bởi cùng với những tiện ích to lớn mà công nghệ thông tin, internet mang lại thì những nguy cơ mất an toàn, nguy hiểm khi sử dụng những tiện ích đó cũng ra t ng nhanh chóng: thực tế thì từ những thông tin cá nhân người dùng, dữ liệu của các công ty tổ chức bình thường tới những bí mật quân sự, bí mật quốc gia quan trọng đều đã từng bị hacker đánh cắp qua internet, máy tính Thông tin cá nhân: Hãng bảo mật Hold Security (Mỹ) vừa tiết lộ, tin tặc Nga đang nắm giữ trong tay đến 1,2 tỉ tài khoản người dùng toàn cầu Các

dữ liệu được lưu trữ trong database của các công ty, tổ chức lớn cũng bị đánh cắp rất nhiều như tài khoản ngân hàng, chiến lược kinh doanh Bí mật quân sự,

bí mật quốc gia: Các tài liệu mà cựu nhân viên tình báo của Cơ quan An ninh Quốc gia Mỹ NSA cung cấp cho tạp chí Đức Der Spiegel, cho thấy là gián điệp mạng của Trung Quốc đã đánh cắp một "khối lượng to lớn" thông tin quân sự nhạy cảm liên quan đến chiếc F-35 – máy bay tàng hình tối tân của Mỹ Các Hackers thường lợi dụng các lỗ hổng bảo mật, sử dụng Virus, Trojan, Malware

để thực hiện các hành vi phá hoại, n cắp thông tin Tuy nhiên điều cực kì nguy hiểm là các hành vi đó ngày càng khó phát hiện đối với các công ty tổ chức do gần đây Hackers sử dụng một số biện pháp che dấu các hoạt động trong hệ thống và xóa bỏ dấu vết truy cập ngày càng tinh vi Một trong số đó là kĩ thuật Rootkit

Ví dụ đối với một vụ tấn công vào hệ cơ sở dữ liệu Oracle: 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 Với tốc độ phát triển nhanh chóng và ngày một tinh vi, những n m gần đây Rootkit đã được xếp vào top 10 nguy cơ về bảo mật nguy hiểm nhất

Rootkit là một vấn đề đã và hiện rất nan giải đối với các chuyên gia bảo mật toàn cầu, tuy nhiên tại Việt Nam thì tài liệu và hiểu biết về Rootkit còn khá hạn hẹp nên nhóm chúng em đã thực hiện đề tài này để hiểu biết thêm về Rootkit Tổng kết đề tài gồm các phần chính:

Trang 6

Chương1: Tổng quan về Rootkit, cách thức Rootkit hoạt động trong

Oracle và một số phương pháp phát hiện Rootkit

Chương 2: Tấn công Rootkit trong Oracle

Chương 3: Phát hiện Rootkit

Chương 4: Thực hiện tấn công Rootkit trong Oracle

Với thời gian thực hiện và kiến thức có hạn, mặc dù nhóm đã rất trau dồi,

tỉ mỉ nhưng vẫn không thể tránh khỏi những thiếu sót Nhóm rất mong nhận được các góp ý của thầy cô và bạn đọc để nhóm hoàn thiện tốt hơn nữa đề tài

Chúng em xin chân thành cảm ơn!

Trang 7

CHƯƠNG 1 TỔNG QUAN VỀ ROOTKIT

1.1 Tổng quan về mã độc (malware)

Thuật ngữ Malware là từ viết tắt của Malicious software Malware được định nghĩa là một chương trình được chèn một cách bí mật vào hệ thống với mục đích làm hại đến tính bí mật, tính sẵn sàng của hệ thống Các loại malware như: virus, worms, trojans, backdoor, spyware…

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à hacking Các nội dung tìm kiếm và hiển thị của bạn có thể bị hack 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

Đối với các thông tin cá nhân như: 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 8

N m 1999, Rootkit được công khai trên Windows 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 một cách quy 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%

Khái niệm Rootkit 1.2.2.

Rootkit /ru:tkit/ là bộ công cụ phần mềm che giấu sự tồn tại file nhưng thực ra nó vẫn hoạt động Rootkit thường được bên thứ ba thường là kẻ xâm nhập dùng sau khi chiếm được quyền truy cập vào hệ thống máy tính Các công

cụ này thường nhằm để che dấu dữ liệu hệ thống, tập tin hoặc tiến trình đang chạy, từ đó giúp cho kẻ xâm nhập duy trì quyền truy cập vào hệ thống mà người dùng không biết Rootkit có ở nhiều loại hệ điều hành như Linux, Solaris và các phiên bản Microsoft Windows Một máy tính bị cài rootkit được gọi là bị "chiếm quyền root" ("rooted" trong tiếng Anh)

Trang 9

1.3 Cách thức hoạt động của Rootkit

Chiếm quyền điều khiển

1.3.1.

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

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

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ề

Trang 10

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

1.4 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

1.4.1.

Đâ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

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

Trang 11

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

Persistent và non-persistent rootkit 1.4.2.

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

Trang 12

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 13

CHƯƠNG 2 TẤN CÔNG ROOTKIT TRONG ORACLE

2.1 Tổng quan Oracle

Oracle server là một hệ thống quản trị cơ sở dữ liệu đối tượng quan hệ cho phép quản lý thông tin một cách toàn diện Oracle server bao gồm hai thành phần chính là Oracle instance và Oracle Database

nh 2.1 Kiến trúc Oracle Server

Oracle instance

2.1.1.

Là thành phần liên kết giữa người dùng và thông tin trong Oracle Database Một Oracle Instance chỉ được mở cho duy nhất một Oracle Database cần truy xuất Oracle Instance được tạo nên bởi sự kết hợp của hai thành phần là cấu trúc bộ nhớ và các tiến trình nền Background Process dùng để quản lý CSDL Vùng nhớ của Oracle Instance gọi là SGA System Global Area có vai trò lưu trữ thông tin của Oracle Database và được chia sẻ cho những người đang truy xuất vào cơ sở dữ liệu Tiến trình trong Oracle có 2 loại: tiến trình của người dùng User Process và tiến trình của Oracle (Oracle Process) User Process được hình thành khi người dùng sử dụng công cụ hay ứng dụng kết nối vào Oracle Instance Khi đó, trên máy tính chứa Oracle Server sẽ phát sinh một tiến trình gọi là Server Process dùng để giao tiếp giữa User Process và Oracle

Trang 14

Instance Những xử lý bên trong Oracle Instance sẽ do các tiến trình nền (Background Process) thực hiện

SGA được cấp phát tại vùng nhớ ảo của máy tính đang chạy Oracle SGA gồm có một số cấu trúc vùng nhớ dùng để chứa dữ liệu và quản lý các thông tin

về Oracle Instance SGA còn được biết như là một vùng nhớ chia sẻ, thông tin

về Database có thể được truy xuất bởi các tiến trình đang làm việc trên Database

đó Nếu có nhiều người dùng kết nối với một Instance thì SGA của Instance sẽ chia sẻ cho những người dùng đó SGA bao gồm một số cấu trúc vùng nhớ chính như: Shared Pool, Database Buffer Cache, Redo Log Buffer Ngoài ra, còn có hai cấu trúc vùng nhớ mà SGA có thể sử dụng hay bỏ qua là Large Pool

và Java Pool Kích thước vùng nhớ của SGA phụ thuộc vào kích thước của các thành phần tạo nên nó SGA có một đặc tính quan trọng là ta có thể thay đổi kích thước mà không cần phải ngừng Instance của SGA cần sửa đổi Điều này

có nghĩa là kích thước của các Database Buffer Cache, Shared Pool và Large Pool của SGA có thể được thay đổi trong khi Instance đang chạy

nh 2.2 System Global Area (SGA)

Oracle Database

2.1.2.

Oracle Database dùng để lưu trữ và cung cấp thông tin cho người dùng Việc quản lý dữ liệu trong Oracle Database thông qua cấu trúc lưu trữ logic và vật lý Cấu trúc lưu trữ logic là những thành phần đặc trưng của Oracle Server, cấu trúc vật lý là những tập tin hệ thống tồn tại trong hệ điều hành, nơi Oracle Server đang chạy

Vai trò quan trọng nhất của Oracle Server là lưu trữ và cung cấp thông tin cho người dùng thông qua Oracle Database Oracle Database quản lý thông tin lưu trữ thông qua hai thành phần lưu trữ vật lý và logic Thành phần lưu trữ vật

lý là các tập tin Thành phần lưu trữ logic là các không gian bảng (table space)

Trang 15

Thành phần vật lý dùng để lưu trữ dữ liệu trong Oracle Database là tập hợp một số tập tin tồn tại trên máy tính cài đặt Oracle Server, các tập tin này sẽ được sử dụng khi Oracle Database đang được mở Dữ liệu trong Oracle Database sẽ được tổ chức lưu trữ và quản lý bởi ba loại tập tin sau:

 Một Data File dùng để lưu trữ dữ liệu của duy nhất một Database

 Kích thước của các Data File có thể tự động t ng để theo kích thước của Database

 Một hay nhiều Data File tạo thành một đơn vị Logic của vùng nhớ trong

cơ sở trữ dữ liệu gọi là Tablespace, và một Data File chỉ quan hệ với duy nhất một Tablespace mà thôi

 Redo Log File

Mỗi một Oracle Database có 2 hay nhiều Redo Log File, tập hợp những File này trong một CSDL được gọi là Redo Log của CSDL đó Một Redo Log tạo thành những Redo Entry, còn gọi là Redo Record Chức n ng chính của Redo Log là dùng để ghi lại những thông tin trong CSDL bị thay đổi

Trong trường hợp Database gặp sự cố trước khi dữ liệu thay đổi được ghi nhận chắc chắn xuống các Data File thì những thông tin trong Redo Log sẽ được

sử dụng trong việc phục hồi dữ liệu về trạng thái trước khi dữ liệu thay đổi

 Control File

Mỗi một Oracle Database có 1 Control File, dùng để chứa tất cả các thông tin về cấu trúc vật lý của một Database như là: tên Database, nơi lưu trữ của Data File và Redo Log File, Time stamp tạo Database Mỗi Control File chỉ dùng cho một Database duy nhất

Khi một Instance của Oracale Database được khởi động, Control File của

nó được sử dụng để xác định vị trí của các Data File và Redo Log File, các File này phải được mở trong quá trình làm việc với Database

Trang 16

Dữ liệu trong Oracle Database được tổ chức và quản lý dựa vào những thành phần logic, là những thành phần hỗ trợ DBA và người dùng trong việc lưu trữ và sử dụng thông tin trên Oracle Server

Về mặt logic, Oracle database bao gồm các tablespaces, schema, data blocks, extents và segment Mỗi database có thể phân chia về mặt logic thành một hay nhiều datafiles của nó hoặc bằng kích thước của các tablespaces của nó

 Tablespace

Một Database được chia thành nhiều đơn vị lưu trữ ở mức Logic, những đơn vị lưu trữ đó gọi là Tablespace Các đặc điểm của Tablespace:

- Tablespace chỉ thuộc về một Database duy nhất

- Một Tablespace bao gồm một hay nhiều tập tin vật lý dùng để lưu trữ dữ liệu, đó là Data File

Trong Oracle Database luôn có một Tablespace do Oracle tạo ra trong quá trình tạo Database có tên là SYSTEM Đây là vùng nhớ quan trọng của Database, dùng để lưu trữ tất cả những thông tin về Database như định nghĩa cấu trúc của các đối tượng, thông tin cấp phát và sử dụng vùng nhớ của các đối tượng, Tablespace được tạo nên bởi sự kết hợp của một hay nhiều đơn vị lưu trữ Logic gọi là Segment, một Segment được chia thành nhiều Extent và trong Extent thì có nhiều Data Block liên tục nhau

Header là vùng chứa thông tin chung của Block, như là địa chỉ của Block

và loại Segment chứa Block là Data, Index, Rollback hay Temporary

Vùng Data dùng lưu trữ dữ liệu của các dòng trong bảng Các dòng của một bảng dữ liệu có thể nằm trên nhiều Block khác nhau

Free Space là vùng nhớ nằm giữa Header và Data, vùng nhớ này giúp kích thước của Header và Data có thể t ng lên khi cần, trong trường hợp thêm hay sửa dữ liệu của bảng

 Extent

Trang 17

Tập hợp nhiều Data Block liên tiếp nhau sẽ tạo thành một đơn vị lưu trữ Logic lớn hơn gọi là Extent Số lượng Data Block của một Extent tùy thuộc vào kích thước được chỉ định cho Extent khi tạo đối tượng Table

Khi người dùng tạo một Table thì Oracle sẽ tự động cấp phát cho Table một Data Segment, trong Data Segment sẽ có một Extent với số lượng Data Block tùy thuộc vào kích thước của Extent Nếu không gian lưu trữ trong các Data Block của một Extent trong Segment bị đầy thì Oracle sẽ tự động cấp phát thêm một Extent cho Segment Kích thước của Extent mới cấp phát có thể lớn hơn hay bằng kích thước của Extent ban đầu

Số Extent được cấp phát cho một Segment có thể được xác định thông qua các tham số khi tạo Table, như là MINEXTENT, MAXEXTENT

2.2 Tấn công Rootkit trong Oracle

Tìm hiểu 1 số data dictionary view 2.2.1.

Priv_user User có quyền mặc định được áp dụng cho job này

Trang 18

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 cng

Last_sec Tương tự như last date

This_date Thời điểm mà job được bắt đầu thực hiện là null nếu ko thực

thi) This_sec Tương tự this_date Thời điểm lần thực thi cuối cùng được bắt

đầu Next_date Thời điểm kế tiếp mà job sẽ được thực hiện

Next_sec Tương tự next_date Thời điểm được thực hiện kế tiếp

Total_time Tổng thời gian sử dụng hệ thống của job, tính theo giây

Brocken 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 Interval Lập lịch chạy job lần tiếp thep

Failures 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 What Body của block anonymous PL/SQL mà job này thực hiện

Nls_env Tham số phiên mô tả biến môi trường nls của job

Misc_env Tham số phiên khác áp dụng cho job

instance ID của instance chạy hoặc có thể chạy job Mặc định là 0

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

Trang 19

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

Bảng 2.2 View dba_jobs_running

 VSPROCESS

Lưu thông tin về các process hiện tại đang chạy

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_mem Vùng nhớ PGA mà process sử dụng

Pga_alloc_mem Vùng nhớ PGA hiện thời được cấp phát cho process

Bảng 2.3 V$Process

 V$Session

V$sesion 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$sesion:

Saddr Địa chỉ session

Sarial# 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

Trang 20

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, catched…

Logon_time Thời gian logon

Username Tên user

Command Các lệnh đang xử lý

Bảng 2.4 V$Session

Khai thác các PL/SQL Package 2.2.2.

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ó 2 phần: 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

Để 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 pack 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

 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á 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 mã nguồn DDL này

Trang 21

Thực tế Oracle đưa ra package dbms metadata nhằm làm đơn giản hóa một số công việc trong database mà cần phải trích extract thông tin về các table, index từ Oracle và chueyenr chúng sang hệ thống khác Việc trích DDL của các schema object từ dictionary sẽ rất hữu ích khi phải chuyển sang hệ thống mới và muốn có lại cá object đó trong tablespace miows Oracle cung cấp package dbms metadata giúp các nhà phát triển dễ dàng lấy các metadata về các object từ data dictionary và đưa ra dưới dạng XMI hoặc DDL Sau đó load XMI hoặc chạy DDL để tạo lại object Dbms_metadata sử dụng một số object và table được định nghĩa trong schema SYS Thường gặp nhất là ku$ parsed item và ku$_ddl

Trong dbms_metadata những user thông thường chỉ có thể xem metadata các object mà họ sở hữu, các object họ được gán quyền, các object được public SYS và user có quyền Select catalog role xem được metadata của tất cả các object trong database Trong các procedure, function và các package định nghĩa quyền, các role như select cattalog role không được kích hoạt Vì thế các chương trình PL/SQL chỉ có thể lấy metadata cho các object ở trong schema của chính nó Package dbms metadata định nghĩa trong schema SYS các object và table như sau:

Trang 22

Fetch_xxx Trả về metadata cho object thỏa mãn các tiêu chuẩn thiết

lập bởi open, set_filter, set_count, add_transform Get_query Trả về dạng text của query mà fetch xxx sử dụng

Get_xxx Lấy về metadata cho một object cụ thể

Open Chỉ ra kiểu của object cần lấy, phiên bản metadata của nó Set_count Thiết lập số object được lấy trong một lời gọi fetch_xxx Set_parse_item Xác định một thuộc tính object được phân tích

Set_filter Đặt các tiêu chuẩn để tìm hiểu object ví dụ tên hay

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” Dbms output package thường được dùng trong việc debug Procedure put và put line cho phép đặt thông tin vào buffer để bất kỳ trigger, procedure, package nào cũng có thể đọc được hiển thị thông tin ở vùng buffer bằng cách gọi procedure get line và get lines

Package dbms output được chạy bằng scrip dbmsscrip.sql bởi user Sys.Package này được gán Excute cho tất cả user(public)

Dbms_output.enable Enable các chương trình con Put, put line, get line,

Trang 23

get lines và new line Dbms_output.new_line Thêm một end-of-line vào buffer

Dbms_output.get_line(s) Lấy một 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 Thêm một end-of-line vào buffer

Bảng 2.7 dbms_output

 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ỳ một instance nào, nhưng chỉ có một instance sẽ chạy nó Không yêu cầu phải có system privilege nào để có thể sử dụng dbms job Và cũng không có system privilege nào quản lý dbms job Các job không thể bị sửa đổi hay xóa ngoài job sở hữu bởi user đó Một khi job được start và chạy sẽ không dễ ngừng job lại

Broken Chặn thực hiện job

Change Chỉnh sửa tham số người dùng đị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

Remote Xóa một job khỏi hàng đợi job

Submit Đưa một job vào hàng đợi job

what Thay đổi đặc tả của một job

Bảng 2.8 dbms_jobs

 Package DBMS_SQL

Package dbms sql cho phép truy nhập tới dynamic SQL và dynamic PL/SQL từ ben trong chương trình PL/SQL Dynamic có nghĩa là các câu lệnh SQL trong package sử dụng những tham số chưa được trong chương trình Chugns là các chuỗi ký tự được xây dựng tại thời điểm chạy và sau đó được đưa

Trang 24

vào SQL engine để thực hiện package dbms sql cho phép thực hiện những hành động là không thể trong chương trình PL/SQL bao gồm:

- Executre câu lệnh ddl: câu lệnh ddl như drop table hay create index là không được phép trong native PL/SQL

- Tạo một ad-hoc query interface: với dbms không cần phải nhọn nhằn

gõ các câu lệnh select cho một truy vẫn hay con trỏ Bạn có thể cho user xác định các thứ tự sắp xếp, các điều kiện và bất kỳ trường hợp nào của các câu lệnh select

- Execute dynamic các chương trình PL/SQL đã được tạo: trong table, chúng ta lưu tên của procedure thực hiện cho phép tính toán nào đó Sau đó dùng một front-end cho table đó, để user lực chọn chức n ng phù hợp đưa giá trị đầu vào và thực thi thay vì phải thêm vào hàng và tương tác với khá nhiều giao diện

Với sức mạnh sự ảnh hưởng và linh hoạt của dynamic SQL thông thường chỉ nên gán quyền Execute cho những user mà cần thực hiện dynamic SQL Để che giấu dbms_sql thực hiện lệnh bằng tài khoản sys:

- Revoke execute on dbms_sql from public;

- Để gán quyền execute cho user nào đó, thực hiện :

- Grant execute on dbms_sql to User_name;

Khi thực hiện một chương trình dbms sql từ một anonymous block, chương trình đó được thực hiện với quyền của schema hiện tại Nếu những chương trình dbms SQL sẽ thực hiện sử dụng quyền của người sở hữu chương trình đó Dbms sql còn được gọi là package „run as user‟ hơn là „run as owner‟

Close(open)_curror Đóng mở) con trỏ

Column_value Lấy giá trị từ con trỏ vào biến cục bộ

Fetch_rows Nhập giá trị row từ con trỏ

Is_open Trả về giá trị true true nếu con trỏ đang mở

Last_row_count Trả về tổng số row được fetch từ con trỏ

Trang 25

Last_SQL_function_code Trả về function code cho câu lệnh SQL

Define_column Xác định một column được chọn từ một con trỏ cụ

thể Parse Phân tích cú pháp câu lệnh SQL nếu đó là DDL thủ

tục phân tích sẽ thực thi luôn câu lệnh Variale_value Lấy giá trị một biến trong con trỏ

Bảng 2.9 dbms_sql

Dbms_sql thực sự là một package mạnh nhưng nó cũng là một package khá phức tạp để sử dụng thông thường chúng ta có thể tạo và thực hiện vào các câu lệnh SQL Nhưng việc tạo như vậy khá là thủ công và vất vả, phải xác định tất cả các câu lệnh SQL Nhưng việc tạo như vậy khá thủ công và vất vả, phải xác định tất cả các câu lệnh SQL, với các lời gọi thủ tục, các kiểu, biến…

Quá trình xử lý của Dynamic SQL

- Mở vùng nhớ: trước khi thực hiện bất kỳ sql dynamic nào phải có một con trỏ tới cùng nhớ mà sql dynamic sẽ được quản lý Khi mở vùng nhớ, Rdbms trả về một integer gán với con trỏ Chúng ta sẽ sử dụng giá trị này trong các lời gọi sau đó tới các chương trình dbms sql để thực hiện câu lệnh dynamic này Có thể sử dụng một con trỏ để thực hiện nhiều câu lệnh SQL Nội dung của vùng lưu dữ liệu sẽ được rết nếu một câu lệnh mới được phân tích vì thế không phải close và open lại con trỏ

- Phân tích câu lệnh: sau khi đã xác định con trỏ tới vùng nhớ, để liên kết

nó với câu lệnh sql cần phải phân tích parse câu lệnh bằng lời gọi tới thủ tục parse Nó xác định các câu lệnh này có đúng cấu trúc không và liên kết các câu lệnh với con trỏ Lưu ý khi phân tích một câu lệnh DDL, nó cũng ngay tức khắc được thực thi và rdbms cũng thực hiện một lệnh commit ngầm định

- Ràng buộc tất cả giá trị host: câu lệnh mà chúng ta thực hiện ở dạng chuỗi tại thời điểm chạy Khi sử dụng dynamic sql, tại thời điểm compile chúng

ta chưa biết giá trị vì thế phải chuyển qua giá trị vào câu lệnh sql tai thời điểm chạy Có 2 cách để thực hiện: móc nối concatenation và ràng buộc(binding) Với móc nối, chuyển tất các thành phần tròn câu lệnh sql

Trang 26

thành chuỗi và nối chúng lại Với ràng buộc chúng ta nên chèn nơi lưu trữ placebolder vào chuỗi với dấu „:‟ đặt trước nếu câu lệnh sql chứa tham chiếu tới các biến PL/SQL, chúng ta phải chỉ ra nơi đặt các biến đó trong câu lệnh sql bằng cách đặt dấu „:‟ trước tên Sau đó gán giá trị thật cho biến đó trong câu truy vấn

Nếu nối giá trị vào một chuỗi thì không cần phải gọi các thủ tục bind_varalable hay bind_array Ví dụ:

DBMS_SQL_PARSE (the_cursor, SELECT COUNT(*) freq FROM call WHERE call date =:call date‟|| „AND call type cd = :call type‟, DBMS_SQL.V7);

DBMS SQLBIND VARIABLE the cursor,‟call date‟,:call.last date called ; DBMS_SQL_BIND_VARIABLE(the_cursor,‟call type‟,:call.call status ;

Để tránh phải tạo các lời gọi riêng rẽ tới bind variable có thể đưa các giá trị này vào câu lệnh tại thời điểm phân tích Ví dụ trên có thể viết thành: DBMS_SQL.PARSE (the_cursor, „SELECT COUNT * freq FROM call WHERE call date=‟‟‟|| TO_CHAR(:call.last_date_called || “AND call type cd

= „‟‟||:call.call status ||‟‟‟, DBMS_SQL.V7);

Các dấu „‟‟ được nhóm lại thành cùng nhau 3 dấu „‟‟ ở cuối chuỗi sẽ trở thành một dấu „ ở cuối giá trị được đưa vào câu lệnh sql, móc nối hay kiểu giá trị

- Định nghĩa các cột trong lệnh select: mỗi cột trong danh sách mà câu lệnh sql liệt kê với các biến PL/SQL nhận giá trị đó Bước này chỉ dành cho câu lệnh select

- Thực thi câu lệnh: thực thi tại vùng nhớ đã chỉ ra-tức là câu lệnh tại vùng nhớ đó Nếu câu lệnh sql là insert, update hay delete, lệnh execute sẽ trả về số các hàng được xử lý Còn lại, chúng ta có thể bỏ qua giá trị trả về

- Lấy các hàng từ truy vấn sql dynamic: nếu thực thi truy vấn, sau đó phải lấy các hàng từ vùng nhớ Tuy nhiên, không lấy trực tiếp vào các biến PL/SQL cục bộ

Trang 27

- Tìm hiều các giá trị việc thực thi sql dynamic: nếu câu lệnh SQL là một truy vấn, tìm kiếm các giá trị trả về của lệnh select bằng column_value

- Đóng con trỏ: giải phóng vùng nhớ liên quan tới con trỏ

 Utl_tcp

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 dât Hơn nữa,không có giới hạn trong định dạng của data này, tức là có thể ở dạng binary hoặc text-based

Nó cho phép rdbms giao tiếp với bất kỳ 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

Các function cơ bản:

Read_raw Đọc dữ liệu binary từ socket

Write_raw Viết dữ liệu binary tới socket

Read_text Đọc dữ liệu ASCII từ socket

Write_text Viết dữ liệu ASCII từ socket

Bảng 2.10 Các function cơ bản

Nhiệm vụ của Rootkit

2.2.3.

2.2.3.1 Ẩn tài khoản truy nhập

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‟

Ngày đăng: 22/03/2018, 17:56

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w