TẤN CÔNG ROOTKIT TRONG ORACLE 10G
Trang 1HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA AN TOÀN THÔNG TIN
BÁO CÁO BÀI TẬP LỚN
TẤN CÔNG ROOTKIT TRONG ORACLE
10G.
Giảng viên hướng dẫn: Nguyễn Thị Hồng Hà
HÀ NỘI, 11/2016
Trang 3MỤC LỤC
Trang 410 SMON System Monitor
11 PMON Process Monitor
12 Package Chứa các procedure,function
Trang 5DANH MỤC CÁC BẢNG
Trang 6DANH MỤC CÁC HÌNH VẼ
Trang 7LỜ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ôngphải ai cũng biết rằng rootkit còn có thể được sử dụng và đang được cáctin tặc sử dụng trong cơ sở dữ liệu vì 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ằmtrong tầm kiểm soát của tội phạm Internet Lấy cắp thông tin đã trở thànhmột nguy cơ chính, thông tin đã trở thành mỏ vàng cho tội phạm Thôngtin 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 tylớn bị xâm phạm Nhất là các ngân hàng, nhà băng, dịch vụ thẻ thanh toánnhư 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à quantrọng Không nghi ngờ gì, Oracle đã trở thành đích ngắm hấp dẫn trongcá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ấumọ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 tin tặc trong cơ sở dữ liệu Người quản trị sẽ khó lòng biếtđược cơ sở dữ liệu của mình có đang bị nhìn ngó hay bị tấn công haykhô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 giandà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
Các tin tặc thường lợi dụng các lỗ hổng bảo mật, sử dụng Virus, Trojan
để 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ì nguyhiể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 dogần đây các tin tặc 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 đượccài đặt sau khi đã đột nhập thành công vào một Oracle database, để che giấu mọidấ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ệncủa attacker trong database Người quản trị sẽ khó lòng biết được database củamình có đang bị nhìn ngó hay bị tấn công hay không Với tốc độ phát triển
Trang 8nhanh chóng và ngày một tinh vi, những năm gần đây Rootkit đã được xếp vào
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ảomậ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
Nội dung đề tài gồm ba chương:
Chương 1 Tổng quan về Rootkit Giới thiệu chung về mã độc, Rootkit,
cách thức hoạt động và phân loại Rootkit
Chương 2 Tấn công Rootkit trong Oracle Giới thiệu về hệ quản trị
Oracle, tấn công Rootkit trong Oracle
Chương 3 Phát hiện và phòng tránh Rootkit Các phương phápphát hiện
và phòng chống Rootkit
Nhóm em xin chân thành cảm ơn cô Nguyễn Thị Hồng Hà đã tận tình chỉbảo và giúp đỡ nhóm em hoàn thành đề tài này Do thời gian có hạn nên đề tàinghiên cứu của nhóm em vẫn còn nhiều thiếu sót Nhóm em mong nhận được sựđóng góp ý và chỉ bảo của thầy cô
Nhóm em xin chân thành cảm ơn!
Hà Nội, tháng 11/2016
Trang 9CHƯƠNG 1 TỔNG QUAN VỀ ROOTKIT
1.1.Giới thiệu chung về mã độc hại
Mã độc hại (Malware) viết tắt của malicious software Mã độc là một loạiphần mềm hệ thống do các tay tin tặc hay các kẻ nghịch ngợm tạo ra nhằm mụcđích truy cập, chỉnh sửa và phá hại các phần mềm khác trên máy tính Mã độcgồm nhiều loại: Virus, Spyware, Trojan/Backdoor, Adware, Worm, và cácbiến thể khác xuất hiện từng ngày
Mục tiêu của mã độc có thể là thông tin cá nhân, dữ liệu, tài nguyên, máytính bằng cách ghi dấu các 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
mã độc 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, mã độc 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ị hacking sang trang mà malware chỉ định Điều này cóthể đưa đến nhiều phiền toái với các pop up liên tục xảy ra, và tệ hơn nữa 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ậpvà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ậpvào tài khoản ngân hàng, chuyển tiền, rút tiền Nếu dùng mật khẩu, tin tặc 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 anninh, ví dụ 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 người dùng Cuối cùng, tin tặc sẽ lợidụ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, ẩnnấp sau hệ thống nhằm che giấu hành tung của mình Để thực hiện được cácmục đích này, mã độc sẽ thực hiện dễ dàng hơn nếu có sự trợ giúp của rootkit
Vì thế các mã độc đầ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 mã độc Thực tế, rootkit là xấu hay tốt là do mục đích nóđược sử dụng
1.2.Giới thiệu chung về Rootkit
1.2.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ấynă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 dựa 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 trìnhwebsite rootkit.com Thuật ngữ rootkit bắt nguồn từ root- mức truy nhập caonhất vào hệ thống, có quyền admin và từ kit-một tập hợp các công cụ để chegiấu và chiếm quyền
Việc phát hiện Sony Rootkit (rootkit quản lý bản quyền số) với MarkRusonovich 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 đó, rootkitchỉ là một cái gì đó khêu gợi sự tò mò hơn một hiểm họa cận kề Sự kiện Sony
Trang 10Rootkit xảy ra ngày 31/10/2005 đã đưa ra rootkit thành trung tâm chú ý Nócũng chứng tỏ, hãng đã nghiên cứa và phát triển kỹ thuật rootkit quy củ Sau sựkiện này, Sony đã phải tiến hành gỡ bỏ rootkit trên đĩa CD và tốn khoản bồithường không ít.
Sự kiện này được cho là trước sau gì cũng xảy ra, khó mà các nhà cungcấ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 ra mã độc 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ữngtin tặc máy tính đã tìm ra cách mới là hiệu quả để tấn công Các chương trìnhche giấu rootkit cho thấy một nguy cơ cận kề về an ninh Thực tế, ngày6/12/2005 tạp chí eweek đã công bố rằng có tới 20% malware bị phát hiện trênWindows XP SP2 là các rootkit trong số các malware là 14%, trong khi tại thờiđiểm của sự kiện Sony Rootkit con số đó là 8%
1.2.2 Định nghĩa
Rootkit (ru:tkit) là bộ công cụ phần mềm che giấu sự tồn tại file nhưngthực ra nó vẫn hoạt động Rootkit thường là kẻ xâm nhập dùng sau khi chiếmđược quyền truy nhậ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.Nói cách khác, rootkit là một tập các chương trình và đoạn mã cho phép tồn tạimột cách bền vững, lâu dài và gần như không thể phát hiện trên máy vi tính.Rootkit có ở nhiều loại hệ điều hành như Linux, Solaris và các phiên bảnMicrosoft Windows Một máy tính bị cài rootkit được gọi là bị “chiếm quyềnroot”
Rootkit cũng được cho là gần nghĩa với “undetectable” (không thể pháthiện) Hầu hết các công nghệ và kỹ thuật mà rootkit sử dụng đều được thiết kế
để ẩn mã chương trình và dữ liệu trên hệ thống Phần lớn các rootkit có thể ẩnđược các tệp tin, các thư mục, khối bộ nhớ, ngoài ra, rootkit cũng có tính năngnhư cho phép truy cập điều khiển từ xa, keyloger và thực hiện bắt cóc gói tintrong mạng Khi các công nghệ này kết hợp lại thì rootkit trở nên gần như khôngthể phát hiện được Rootkit không mang nghĩa xấu, và không phải thường được
sử dụng để lấy trộm thông tin cá nhân
Thuật ngữ “rootkit” lúc đầu được dùng đề chỉ một bộ công cụ Unix đượcbiên dịch lại như “ps”,”netstat”,”w” and ”passwd” có thể che giấu kỹ lưỡng vếttích của kẻ xâm nhập mà bình thường sẽ bị hiển thị bởi các lệnh trên Vì vậy nócho phép kẻ xâm nhập duy trì quyền “root” trên hệ thống mà ngay cả ngườiquản trị hệ thống cũng không thể thấy họ
Ngày nay thuật ngữ này không chỉ giới hạn ở các hệ điều hành dựa trênUnix mà còn được dùng để chỉ các công cụ thực hiện tác vụ tương tự trên hệđiều hành không Unix như Microsoft Windows (ngay cả khi hệ điều hành đókhông có tài khoản “root”)
Trang 111.3 Cách thức hoạt động của Rootkit
1.3.1 Chiếm quyền điều khiển
Bất kỳ khi nào người dùng hay một chương trình nào cần 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ềnquản trị hệ thống để có thể điều khiển hệ thống làm cho nó Vì thế chiếm quyềnadmin là một bước vô cùng quan trọng và quyết định
1.3.2 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ềuhà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ấuvết gì về sự tồn tại của nó Hook sẽ chuyển hướng các chương trình bìnhthường, sang các hàm của rootkit thay vì các hàm của hệ thống Cả chế độ nhân
hệ điều hành và chế độ người dùng, rootkit đều sử dụng kỹ thuật hooking để lọccác kết quả trả về bởi hệ điều hành và giấu đi sự tồn tại của nó Các chươngtrì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 rootkitthông qua các công cụ như Task Manager, windows explorer hay regedit.Windows sử dụng các bảng để lưu trữ và ghi dấu các thông tin quan trọng Cácbảng này có thể bị hook, thay đổi và bẻ gẫy bởi rootkit
Rookit ở chế độ người dùng và chế độ nhân đề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 độngcủa chúng Rootkit ở chế độ người dùng chỉ có thể hook các bảng trong phạm vikhông gian địa chỉ dành cho người dùng (các bảng IAT, EAT) hoặc có thể chèncác jump vào API mức user để thay các lời gọi hệ thống sang hàm của roorkit
Có hai kiểu hook là hook đặc quyền và hook không đặc quyền Rootkit ởchế độ người dùng là hook không đặc quyền còn rootkit ở chế độ nhân là hookđặc quyền Ở mỗi kiểu hook khác nhau về quyền hệ thống đều sử dụng kỹ thuậthook giống nhau Kỹ thuật hooking API và thay đổi địa chỉ API: rootkit ở chế
độ người dùng sẽ chặn các lời gọi hàm API và thay đổi địa chỉ API trong IAT(Import Address Table) thuộc tiến trình của người dùng, sau đó trỏ tới hàmrootkit thay vì Windows API trong hàm IAT Cả Rootkit ở chế độ người dùng
và chế độ nhân đều 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ó.Rootkit ở chế độ người dùng chỉ cho thể chỉnh sửa bảng nào thuộc về chươngtrình người dùng Mỗi chương trình người dùng có IAT riêng chứa thông tin vềcác hàm mà nhân sẽ thực hiện cho nó Để hiệu quả, rootkit ở chế độ người dùngphải tìm cách để thay đổi bảng của mọi chương trình người dùng và điều khiểnbất kỳ chương trình nào sắp sửa chạy để có nó có thể hook API tương ứng củachương trình đó Rootkit không nhất thiết phải hook mọi API, chỉ những APInà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 tiến trình hoặc API mà dùng bởi Windows Explorer để liệt kê danhsách các tài liệu 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 rootkit ở chế độ nhân
Trang 12Rootkit ở chế độ nhân chỉ cần hook một cấu trúc mà tất cả chương trình ngườidùng sử dụng
1.4 Phân loại Rootkit
Rootkit được phân loại dựa trên sự duy trì sau khi khởi động lại hoặc hoạtđộng ở chế độ người dùng hay ở chế độ cấp hệ thống
1.4.1 Rootkit ở chế độ người dùng và Rootkit ở chế độ nhân hệ điều hành
Rootkit ở chế độ người dùng: Những rootkit này sẽ sửa (chỉnh) các tiến trình
đang chạy trong bộ nhớ và qua đó nhận được những thông tin cần thiết Rootkit
ở chế độ người dùng sử dụng nhiều phương pháp khác nhau để lẩn trốn không bịphát hiện
Ví dụ: rootkit ở chế độ người dùng sẽ chặn tất cả các hàm gọi hệ thống như:FindFirstFile/FindNextFile hay như để Task Manager của Windows có thể hiện
ra danh sách các tiến trình đang chạy, nó sẽ gọi một hàm Windows API(EnumProcesses) và nhận về danh sách các ID tiến trình được lấy từ một cấutrúc dữ liệu của nhân Những hàm này còn được gọi bởi các chương trình quản
lý tập tin của Windows như Explorer để liệt kê toàn bộ các thư mục, tập tin hệthống Khi một ứng dụng thực thi liệt kê danh sách thư mục và các tập tin có thểchứa rootkit, các rootkit này sẽ chặn các hàm này và thay đổi các kết quả dữ liệuđầu ra nhằm loại bỏ các tập tin chứa rootkit khỏi danh sách liệt kê
Những rootkit ở chế độ người dùng phức tạp hơn sẽ chặn các tập tin hệ thống,Registry, và các hàm liệt kê các tiến trình từ các hàm API hệ thống Các kết nốimạng có thể được giấu bằng những phương pháp tương tự nhau bằng cách thayđổi kết quả của những lời gọi hàm tương ứng Vì hầu hết các trình diệt virus vàchống phần mềm gián điệp đều dựa vào những lời gọi hàm này (như lời gọi hàmtìm kiếm file để quét), khi đó những file được các rootkit che giấu sẽ trở nên vôhình với những trình diệt virus này Máy tính có thể vẫn bị lây nhiễm nhưngtrình diệt virus lại không thể phát hiện ra
Rootkit ở chế độ nhân: Rootkit chế độ nhân nguy hiểm hơn các loại trên,
chúng không chỉ chặn các hàm API hệ thống mà còn có thể thao tác trực tiếp cáccấu trúc dữ liệu trong chế độ nhân Các rootkit ở chế độ nhân thì cần phải cóthêm một số đoạn mã để có thể được nạp vào nhân (thường là một trình điềukhiển thiết bị hoặc một file sys) Để đạt được mục đích này, chúng có thể theotrình tự hợp lệ mà các trình điều khiển thiết bị mức thấp vẫn dùng (thông quatrình quản lý điều khiển dịch vụ services.exe) Ngoài ra cũng còn một số phươngpháp bất thành văn khác để chèn mã vào kernel Một khi đã vào được trongHĐH, đoạn mã có thể chỉnh sửa các kết quả trả về từ lời gọi hàm bên trong lõihoặc chỉnh sửa chính các cấu trúc lõi HĐH Một kĩ thuật chung cho việc ẩn nấpcác tiến trình mã độc là loại bỏ các tiến trình này ra khỏi danh sách các tiến trình
ở chế độ nhân Bởi vì các hàm API quản lý các tiến trình đều phải phụ thuộc vàonội dung trong các cấu trúc dữ liệu này, nên khi rootkit thay đổi nội dung cấu
Trang 13trúc dữ liệu hệ thống thì các công cụ như Task Manager hoặc Process Explorercũng không thể phát hiện được.
Một ví dụ: Rootkits copy một bản sao của chúng với tên malware.exe vàspy.dll cũng như một phần của chúng vào một thư mục Sau đó chúng sẽ chỉnh,sửa lại nhân để những thành phần chúng vừa copy không bị phát hiện nữa (cảvới windows-explorer lẫn một chương trình filemanager bất kỳ Chúng hoàntoàn “tàng hình” và dưới cái lốt đó chúng có thể làm bất cứ một điều gì đó cóhại đến hệ thống của bạn
1.4.2 Rootkit bền bỉ và Rootkit dựa trên bộ nhớ
Rootkit bền bỉ: là một loại rootkit kết hợp với các mã độc khác hoạt động mỗi
khi hệ thống khởi động Bởi vì các mã độc chứa mã phá hoại sẽ được thực thi tựđộng mỗi khi hệ thống khởi động hoặc khi người sử dụng đăng nhập vào hệthống Chúng cần phải lưu trữ các đoạn mã thực thi chương trình trong Registry,các tập tin hệ thống và các phương pháp cho phép âm thầm chạy các đoạn mã
mà người sử dụng không hay biết
Rootkit dựa trên bộ nhớ: loại rootkit này chính là các mã độc không có
những đoạn mã "dai dẳng" - chỉ lưu trong bộ nhớ, chính vì thế loại rootkit nàykhông tồn tại sau khi khởi động lại máy
Trang 14CHƯƠNG 2 TẤN CÔNG ROOTKIT TRONG ORACLE
2.1 Giới thiệu về kiến trúc Oracle
Hình 1 Kiến trúc Oracle
Máy chủ Oracle là một hệ thống quản trị cơ sở dữ liệu đối quan hệ cho phép quản lý thông tin một cách toàn diện Máy chủ Oraclebao gồm hai thành phần chính là thể hiện của Oracle và cơ sở dữ liệuOracle
tượng-2.1.1 Thể hiện của Oracle
Thể hiện của Oracle bao gồm một cấu trúc bộ nhớ hệ thống vùng cục
bộ (SGA) và các tiến trình nền (background processes) được sử dụng đểquản trị cơ sở dữ liệu Thể hiện của Oracle được xác định qua tham sốmôi trường ORACLE_SID của hệ điều hành
Trang 15Hình 3 Kiến trúc Database buffer cache
Bộ đệm ẩn cơ sở dữ liệu ( Database buffer cache ) : Khi thực hiệnmột truy vấn, tiến trình máy chủ sẽ tìm các khối cần thiết trong vùng nhớđệm dữ liệu Nếu không tìm thấy khối trong bộ đệm ẩn cơ sở dữ liệu, tiếntrình máy chủ mới đọc các khối từ file dữ liệu và tạo luôn một bản saocủa khối đó vào trong vùng nhớ đệm Như vậy, với các lần truy xuất tớikhối đó sau này sẽ không cần thiết phải truy xuất vào file dữ liệunữa.Tương tự như kích thước của các khối dữ liệu được xác định bởi tham
Trang 16số DB_BLOCK_SIZE, kích thước của vùng đệm trong vùng nhớ đệmcũng được xác định bởi tham số DB_BLOCK_BUFFERS.
Hình 4 Kiến trúc Redo log buffer
Redo log buffer (Bộ đệm phục hồi): Được sử dụng cho việc dò tìmlại các thay đổi trong cơ sở dữ liệu và được thực hiện bởi các tiến trìnhnền Kích thước được xác định bởi tham số LOG_BUFFER Nó lưu trữcác bản ghi hồi phục mỗi khi có thay đổi dữ liệu Redo log buffer được sửdụng một cách thường xuyên và các thay đổi bởi một giao dịch có thểnằm đan xen với các thay đổi của các giao dịch khác Bộ đệm được tổchức theo kiểu bộ đệm nối vòng tức là dữ liệu thay đổi sẽ tiếp tục đượcnạp lên đầu sau khi vùng đệm đã được sử dụng hết
Các tiến trình nền thực hiện các chức năng thay cho lời gọi tiến trình
xử lý tương ứng Nó điều khiển vào ra, cung cấp các cơ chế xử lý songsong nâng cao hiệu quả và độ tin cậy Tùy theo từng cấu hình mà thể hiệncủa Oracle có các tiến trình nền như:
Hình 5 Tiến trình DBWn
Trang 17Ghi cơ sở dữ liệu (DBWn): Ghi lại các thay đổi trong bộ nhớ đệm dữliệu ra các file dữ liệu.
Ghi lại (LGWR): Ghi lại các thay đổi được đăng ký trong bộ đệmlàm lại vào các file làm lại Ghi lại là một trong các tiến trình nền có tráchnhiệm quản lý bộ đệ làm lại để ghi lại các thông tin trong Redo log buffervào Redo log file
Giám sát hệ thống (SMON): Tiến trình giám sát hệ thống thực hiệnphục hồi các sự cố ngay tại thời điểm thể hiện của oracle được khởi động,nếu cần thiết SMON cũng có trách nhiệm dọn dẹp các phân đoạn tạmthời không còn được sử dụng nữa trong quản lý từ điển tablespaces.SMON khôi phục lại các giao dịch bị chết mỗi khi xảy ra sự cố SMONđều đặn thực hiện kiểm tra và khắc phục các sự cố khi cần Trong môitrường Oracle Parallel Server, tiến trình giám sát hệ thống của một thểhiện có thể thực hiện khôi phục thể hiện trong trường hợp thể hiện hayCPU của máy tính đó gặp sự cố
Giám sát tiến trình (PMON): Giám sát tiến trình thực hiện quá trìnhphục hồi mỗi khi có một tiến trình người dùng gặp lỗi PMON có tráchnhiệm dọn dẹp bộ đệm phục hồi cơ sở dữ liệu và giải phóng tài nguyên
mà tiến trình người dùng đó sử dụng Ví dụ, nó thiết lập lại trạng thái củacác bảng đang thực hiện trong giao dịch, giải phóng các khóa trên bảngnày, và huỷ bỏ ID tiến trình của nó ra khỏi danh sách các tiến trình hoạtđộng PMON kiểm tra trạng thái của nơi gửi và các server processes, khởiđộng lại mỗi khi xảy ra sự cố PMON cũng còn thực hiện việc đăng kýcác thông tin về thể hiện của oracle và những tiến trình gửi đi với cổnglắng nghe mạng Tương tự như SMON, PMON được gọi đến mỗi khi xảy
ra sự cố trong hệ thống
Tiến trình Checkpoint (CKPT): Cập nhật lại trạng thái của thông tintrong kiểm soát file và file dữ liệu mỗi khi có thay đổi trong buffer cache.Khi tất cả các dữ liệu trong database buffers đã bị thay đổi tính cho đếnthời điểm checkpointed sẽ được background process DBWRn ghi lên datafiles Tiến trình Checkpoint cập nhật phần các phần đầu của các file dữliệu và các file điều khiển
2.1.2 Cơ sở dữ liệu Oracle
Cơ sở dữ liệu Oracle được xem xét dưới hai góc độ cấu trúc logic vàcấu trúc vật lý Cơ sở dữ liệu Oracle được xác định bởi tên một tên duynhất và được quy định trong tham số DB_NAME của thông số Về mặtvật lý, cơ sở dữ liệu gồm các file điều khiển, redo log file và file dữ liệu Datafile: Mỗi một cơ sở dữ liệu Oracle đều có thể có một hay nhiềudatafiles Các database datafiles chứa toàn bộ dữ liệu trong cơ sở dữ liệu
Trang 18Các dữ liệu thuộc cấu trúc logic của cơ sở dữ liệu như các bảng hay cácchỉ số đều được lưu trữ dưới dạng vật lý trong các file dữ liệu của cơ sở
dữ liệu
- Redo log file: Mỗi cở sở dữ liệu Oracle đều có một tập hợp từ hairedo log files trở lên Các redo log files trong cơ sở dữ liệu thường đượcgọi là database's redo log Một redo log được tạo thành từ nhiều redoentries Chức năng chính của redo log là ghi lại tất cả các thay đổi đổi với
dữ liệu trong cơ sở dữ liệu Redo log files được sử dụng để bảo vệ cơ sở
dữ liệu khỏi những hỏng hóc do sự cố Oracle cho phép sử dụng cùng mộtlúc nhiều redo log gọi là multiplexed redo log để cùng lưu trữ các bản saocủa redo log trên các ổ đĩa khác nhau Các thông tin trong redo log file chỉđược sử dụng để khôi phục lại cơ sở dữ liệu trong trường hợp hệ thốnggặp sự cố và không cho phép viết trực tiếp dữ liệu trong cơ sở dữ liệu lêncác file dữ liệu trong cơ sở dữ liệu
-File điều khiển (Control file): Mỗi cơ sở dữ liệu Oracle đều có ítnhất một file điều khiển.File điều khiển chứa các mục thông tin quyđịnh cấu trúc vật lý của cơ sở dữ liệu như:
+Tên của cơ sở dữ liệu
+Tên và nơi lưu trữ các file dữ liệu hay redo log files
+ Mốc thời gian tạo lập cơ sở dữ liệu
Trang 19- Init file: Đây là file tham số khởi động Có dạng file văn bản đượctạo bởi quá trình cài đặt hoặc do quản trị viên Tùy thuộc vào hệ điềuhành, tên của file có thể là init <database sid>.ora Oracle sử dụng nó đểthiết lập các giá trị khởi động cho các tham số khi khởi động cơ sở dữliệu File init chứa các tham số về kích cỡ vùng nhớ SGA, cache, buffer,tên cơ sở dữ liệu, một số thông tin về file điều khiển, file dữ liệu.
Về mặt logic, cơ sở dữ liệu Oracle bao gồm các tablespaces, schema,data blocks, extents, và segments Mỗi database có thể phân chia về mặtlogic thành một hay nhiều tablespace Mỗi tablespace lại được tạo nên, vềmặt vật lý, bởi một hoặc nhiều datafiles Kích thước của một tablespacebằng tổng kích thước của các datafiles của nó hoặc bằng tổng kích thướccủa các tablespaces của nó
- Lược đồ (Schema) và lược đồ đối tượng (schema object): Schema làtập hợp các đối tượng có trong database Schema objects là các cấu trúclogic cho phép tham chiếu trực tiếp tới dữ liệu trong cơ sở dữ liệu.Schema objects bao gồm các cấu trúc như tables, views, sequences, storedprocedures, synonyms, indexes, clusters, và database links
- Data Blocks, Extents, and Segments: Oracle điểu khiển không gian lưutrữ trên đĩa cứng theo các cấu trúc logic bao gồm các data blocks, extents, vàsegments Oracle Data Blocks là mức phân cấp logic thấp nhất, các dữ liệucủa Oracle database được lưu trữ trong các khối dữ liệu Một khối dữ liệutương ứng với một số lượng nhất định các bytes vật lý của cơ sở dữ liệutrong không gian đĩa cứng Kích thước của một khối dữ liệu được chỉ ra chomỗi cơ sở dữ liệu Oracle ngay khi cơ sở dữ liệu được tạo lập Cơ sở dữ liệu
sử dụng, cấp phát và giải phóng vùng không gian lưu trữ thông qua các khối
dữ liệu Oracle Extents là mức phân chia cao hơn về mặt logic các vùngkhông gian trong cơ sở dữ liệu Một extent bao gồm một số khối dữ liệuliên tiếp nhau, cùng được lưu trữ tại một thiết bị lưu giữ Extent được sửdụng để lưu trữ các thông tin có cùng kiểu Segments là mức phân chia caohơn nữa về mặt logic các vùng không gian trong cơ sở dữ liệu Một segment
là một tập hợp các extents được cấp phát cho một cấu trúc logic Segment cóthể được phân chia theo nhiều loại khác nhau
- Data segment, mỗi một non-clustered table có một data segment Các dữliệu trong một bảng được lưu trữ trong các extents thuộc data segment đó.Với một partitioned table thì mỗi each partition lại tương ứng với một datasegment Mỗi Cluster tương ứng với một data segment Dữ liệu của tất cảcác table trong cluster đó đều được lưu trữ trong data segment thuộc Cluster
đó Index segment, mỗi một index đều có một index segment lưu trữ các dữliệu của nó Trong partitioned index thì mỗi partition cũng lại tương ứng vớimột index segment
- Rollback segment: một hoặc nhiều rollback segments của database được
Trang 20tạo lập bởi người quản trị database để lưu trữ các dữ liệu trung gian phục vụcho việc khôi phục dữ liệu Các thông tin trong Rollback segment được sửdụng để tạo sự đồng nhất các thông tin đọc được từ cơ sở dữ liệu và sử dụngtrong quá trình khôi phục dữ liệu, phục hồi lại các giao dịch chưa commit đốivới mỗi user.
- Temporary segment: Temporary segments được tự động tạo bởiOracle mỗi khi một câu lệnh SQL statement cần đến một vùng nhớ trunggian để thực hiện các công việc của mình như sắp xếp dữ liệu ( như câulệnh Group by, join, hash…) Khi kết thúc câu lệnh đó, các extent thuộctemporary segment sẽ lại được hoàn trả cho hệ thống
Oracle thực hiện cấp phát vùng không gian lưu trữ một cách linh hoạtmỗi khi các extents cấp phát đã sử dụng hết
- Các cấu trúc vật lý khác: Ngoài ra, Oracle Server còn sử dụng các filekhác để lưu trữ thông tin Các file đó bao gồm:
+ Parameter file: Parameter file chỉ ra các tham số được sử dụng trongdatabase Người quản trị cơ sở dữ liệu có thể sửa đổi một vài thông tin cótrong file này Các tham số trong parameter file được viết ở dạng văn bản.+ Password file: Xác định quyền của từng người dùng trong cơ sở dữliệu Cho phép người sử dụng khởi động và tắt một Oracle instance
+ Archived redo log files: Là bản off line của các redo log files chứacác thông tin cần thiết để phục hồi dữ liệu
Các thành phần này lại bao gồm các đối tượng Các đối tượng là bất kỳmột entry nào trong từ điển dữ liệu hoặc là được tạo bởi người dùng Cácđối tượng trong Oracle gồm table, synonym, view, index, storedprocedure, trigger, privilege, role, profile
2.1.3 Khung nhìn từ điền dữ liệu và khung nhìn hiệu năng động
2.1.3.1 Khung nhìn từ điển dữ liệu
Khung nhìn từ điển dữ liệu hay từ điển dữ liệu hệ thống là phần rấtquan trọng trong cơ sở dữ liệu Oracle, là trái tim của cơ sở dữ liệu oracle,chứa các thông tin về chính cơ sở dữ liệu Việc truy nhập trực tiếp vàobảng từ điển dữ liệu là không thể, nhưng có thể lấy thông tin trong đó quacác khung nhìn từ điển dữ liệu Từ điển dữ liệu được tạo bởi file scriptsql.bsq trong quá trình tạo cơ sở dữ liệu Nó gồm các bảng chỉ đọc, cungcấp thông tin về mọi khía cạnh của cơ sở dữ liệu Oracle, các định nghĩa
về lược đồ đối tượng, không gian lưu trữ, database security, thông tinaudit… Các dữ liệu trên từ điển cơ sở dữ liệu Oracle là chỉ đọc nên chỉcho phép các truy vấn select tới các bảng và khung nhìn này Mọi cố gắngthay đổi hoặc thao tác trên từ điển dữ liệu Oracle có thể ảnh hưởng tớitính toàn vẹn của database Từ điển dữ liệu được máy chủ Oracle tự động
Trang 21cập nhật mỗi khi thực hiện lệnh định nghĩa dữ liệu (Data DefinitionLanguage – DDL) Để biết khung nhìn từ điển dữ liệu mà chúng ta có thểxem, truy vấn khung nhìn từ điển.
Khung nhìn từ điển dữ liệu đặt trong tablespace SYSTEM do UserSYS quản lý Khung nhìn từ điển được chia thành 3 nhóm chính: Userview, All view, Dba view
USER_: Các truy vấn tới view có tiền tố User chỉ trả về thông tin vềdatabase của user đang logon Nghĩa là bạn chỉ nhìn thấy các thông tin vềcác schema mà bạn sở hữu Ví dụ: USER_TABLES sẽ chứa thông tin vềcác bảng dữ liệu của User hiện thời
ALL_: Các truy vấn tới view với tiền tố All chỉ chứa thông tin về cơ
sở dữ liệu của người dùng đang đăng nhập và các cơ sở dữ liệu mà ngườidùng được cấp quyền truy nhập Ví dụ: ALL_TABLES sẽ chứa thông tin
về các bảng dữ liệu mà người dùng hiện thời có thể truy nhập
DBA_: Các khung nhìn có tiếp đầu ngữ DBA chứa thông tin về cácđối tượng có trong cơ sở dữ liệu Các khung nhìn này là cần thiết choquản trị viên cơ sở dữ liệu Một người dùng bất kỳ cũng có thể xem đượcthông tin trong các khung nhìn DBA nếu người dùng đó được cấp quyền
SELECT ANY TABLE.
Trang 22Một số data dictionary view:
Tên View Nội dung
Các thông tin kiểm tra
Bảng 1 Data dictionary view
Trang 232.1.3.2 Khung nhìn hiệu năng động Oracle
Oracle chứa một tập các khung nhìn được duy trì bởi máy chủ cơ sở dữliệu và user SYS có thể truy nhập tới Đó là các khung nhìn hiệu năng động,
vì chúng thường xuyên được cập nhật trong khi cơ sở dữ liệu mở và hoạtđộng, và nội dung của chúng liên quan tới hiệu năng Mặc dù các khungnhìn này có vẻ như là các bảng thông thường trong cơ sở dữ liệu, nhưngthực ra thì không Các khung nhìn này lấy thông tin trên cấu trúc ổ đĩa bêntrong và bộ nhớ Có thể lấy thông tin từ chúng nhưng không thể cập nhậthay thay đổi gì đối với thông tin nguồn Có thể truy vấn các khung nhìn hiệunăng động để xuất dữ liệu Tuy nhiên, chỉ có các truy vấn đơn giản được hỗtrợ Nếu cần phải dùng các câu truy vấn như sorts, joins, group by thì nênsao chép thông tin từ mỗi khung nhìn sang một bảng ( dùng lệnh create table
… as select…) và sau đó truy vấn từ các bảng này Và bởi vì thông tin trongcác V$ view là động nên việc thống nhất dữ liệu giữa các lần Select làkhông đảm bảo
V$ view: khung nhìn hiệu năng động thực sự được xác định bằngtiền tố V_$ Các bí danh công khai (public synonym) cho các view này cótiền tố V$ Các quản trị database và người dùng khác chỉ truy nhập V$,không truy nhập V_$ Khung nhìn hiệu năng động được sử dụng bởiOracle Enterprise Manager, để lấy thông tin về hiệu năng hệ thống Saukhi instance được khởi động, chúng ta có thể truy xuất các thông tin vềV$ view mà đọc thông tin từ bộ nhớ Các khung nhìn đọc thông tin từ ổđĩa chỉ truy xuất được khi database mount, hoặc mở cơ sở dữ liệu
Tùy thuộc vào các tính năng được cài đặt và cấu hình, trong Oracle10g có tới gần 350 khung nhìn hiệu năng động Hầu hết các khung nhìn
có tên bắt đầu bằng V$ Một số dynamic performance view:
V$databas
e
Chứa thông tin về chính database như tên, thời gian tạo
V$version Cho biết phiên bản đang cài
V$option Hiển thị các thành phần tùy chọn được cài trên database.V$sql Hiển thị thông tin về các câu lệnh SQL mà user đã thực
hiện
V$session Liệt kê thông tin về các session hiện thời
V$sga Thông tin về system global area
V$process Thông tin về các process đang hoạt động hiện tại
Bảng 2 Bảng Dynamic performance view
Trang 24Chúng ta có thể phân biệt data dictionary view và dynamicperformance view như sau:
Data Dictionary views Dynamic Performance Views
DBA_ view thường có tên dài ( ví
dụ Dba_data_files)
Tên của V$ view thường gắn liền(ví dụ V$Datafile)
Dba_ view chỉ có mặt khi
database đã open và chạy
Một số V$ view có mặt khidatabase chưa được open hoàntoàn
Dữ liệu thường ở dạng chữ hoa Dữ liệu thường ở dạng chữ
2.3.1 Đặc quyền trong Oracle
Đặc quyền là quyền thực hiện một thao tác nhất định đối với cơ sở
dữ liệu Đặc quyền cho phép người dùng truy nhập vào các đối tượng cơ
sở dữ liệu hoặc thực thi lưu trữ chương trình (thủ tục, hàm, gói) được sởhữu bởi đối tượng khác Đặc quyền cũng cho phép người dùng thực hiệncác hoạt động mức hệ thống như kết nối tới cơ sở dữ liệu, tạo bảng, chỉnhsửa cơ sở dữ liệu Các đặc quyền có thể được gán cho người dùng, ngườidùng đặc biệt như công khai, hoặc cho một role qua lệnh Grant và cũng cóthể được thu hồi qua lệnh Revoke Người dùng công khai là một lối vàođặc biệt trong từ điển dữ liệu Các đặc quyền gán cho public sẽ được dànhcho tất cả người dùng trong hệ thống có quyền Create session Gán truynhập public thường dành cho những bảng chứa các dữ liệu công khai,hoặc những đối tượng mà việc truy nhập tới chúng không làm ảnh hưởng
cơ sở dữ liệu Oracle có hai loại quyền chính là: đặc quyền đối tượng, đặcquyền hệ thống để quản lý truy nhập của người dùng vào dữ liệu và hạnchế kiểu câu lệnh SQL mà người dùng có thể thực thi
Đặc quyền đối tượng là các quyền trên các lược đồ đối tượng nhưtable, view, sequence, procedure, function, package, directories, libraries,kiểu người dùng định nghĩa, operator, index Để sử dụng một lược đồ đốitượng thuộc sở hữu của người dùng khác, cần có đặc quyền trên đối tượng
đó Xem thông tin về các đặc quyền đối tượng các viewall_tab_privs_made hoặc user_tab_privs_made Có nhiều kiểu đặc quyềnđối tượng Một số đặc quyền chỉ áp dụng được với một số schema objectnhất định Như index privilige chỉ áp dụng trên bảng, đặc quyền truy vấnchỉ áp dụng cho table, view và sequence Quyền trên các hàm, thủ tục, gói
và Java: Oracle 10g chỉ cung cấp hai quyền đối tượng đối với các chươngtrình PL/SQL được lưu trữ là quyền thực thi và gỡ rối
Trang 25Đặc quyền hệ thống là quyền cho phép vận hành mức cơ sở dữ liệu,như kết nối đến cơ sở dữ liệu, tạo người dùng, chỉnh sửa cơ sở dữ liệu, sửdụng dung lượng của tablespace Các câu lệnh được thực hiện bởi quyền
hệ thống như là các câu lệnh DDL như Create, alter, drop, hay DML:alter, delete, insert Oracle 10g có hơn 170 quyền hệ thống, được liệt kêtrong khung từ điển dữ liệu System_privilige_map Một số đặc quyền hệthống
Quyền đối với
Create, alter, drop, execute
Quyền đối với role Create, alter, drop, grant
Quyền đối với
sequence
Create, alter, drop, select
Quyền đối với session Create, alter
Quyền đối với
Synonym
Create(any), drop(any)
Quyền đối với table Create(any), alter(any), select(any),
insert(any), update(any), delete(any),lock(any),
flashback(any)
Quyền đối với
tablespace
Create, alter, drop, manage
Quyền đối với Triggers Create, alter (any), drop (any)
Quyền đối với User Create, alter, drop
Quyền đối với View Create (any), drop(any)
Bảng 4 Một số system privilege
Oracle cung cấp hai quyền hệ thống đặc biệt là Sysdba và Sysoper.Người quản trị phải được gán một trong hai quyền này Quyền hệ thốngsysdba và sysoper cho phép truy nhập vào database instance ngay cả khi
cơ sở dữ liệu chưa mở Quyền hệ thống sysdba và sysoper có thể thựchiện các hoạt động sau:
Quyền Hoạt động
Sysdba Startup, shutdown database Create, drop, database
Thiết lập các chế độ backup, recover Tạo spfile Quyềnrestricted session
Connect tới database với tài khoản sys Khi kết nốidatabase với quyền sysdba, schema của user là sys
Trang 26Sysoper Startup, shutdown database.
Thiết lập chế độ backup, recover database
Quyền restricted session
Thực hiện các nhiệm vụ vận hành cơ bản, không xemđược dữ liệu của người dùng
Khi kết nối database và có quyền sysoper, schema củauser là public
Bảng 5 Quyền hệ thống sysdba và sysoper
Cùng với Sysdba và sysoper là một quyền cũng rất mạnh là selectany dictionary: cho phép select table thuộc các data dictionary của Sys,như table TAB$ hay Sysauth$
User sở hữu các object và system privilige thông qua các role Role
là tập hợp các privilige được nhóm lại nhằm mục đích quản trị dễ dàng
Có thể thêm bớt, xóa, sửa các role rồi gán cho nhiều user cùng có mộtrole thay vì gán cho từng user một, và có thể dễ dàng thu hồi role về.Oracle định nghĩa trước một số role Đó là:
Role Quyền
Connect Create session, alter session, create synnonym, create
view, create database link, create table, create cluster,create sequence
Resourc
e
Create table, create cluster, create sequence, create trigger,create procedure, create type, create indextype, createoperator
Dba Mọi quyền cơ bản đi kèm với ‘with admin option’
Sysoper Có quyền startup và shutdown database
Sysdba Mọi quyền của role Dba cùng với create, startup,
shutdown và recover database
Bảng 6 Một số role Oracle định nghĩa
Role quan trọng trong hệ thống là role DBA Đó là role được gán chouser Sys và System Role DBA chứa nhiều quyền quan trọng nhưngkhông có quyền Sysdba và sysoper Quyền trên các role rất mạnh Nếugán quyền Grant any role cho user, user đó sẽ có quyền gán hoặc thu hồibất kì administrative role nào như Scheduler_admin và imp_full_database
từ hoặc đến user nào, bao gồm chính user khác hoặc DBA khác Vì thếphải cẩn trọng đối với các quyền này
Trang 282.3.2 Tài khoản SYS
Khi tạo cơ sở dữ liệu, user SYS được tạo tự động cùng và được gánrole DBA Mật khẩu mặc định là change_on_install Đây là tài khoản sởhữu cơ sở dữ liệu và từ điển dữ liệu
Tất cả các base table và view trong database data dictionary được lưutrong schema SYS Các table và view này là thiết yếu đối với sự vận hànhcủa Oracle Database Để duy trì tính toàn vẹn của data dictionary, cáctable trong schema SYS chỉ được thao tác bởi database Không nên tạocác table hay chỉnh sửa gì trong schema của user SYS Dù có thể thay đổitham số lưu trữ của data dictionary nếu cần
2.3.3 Tài khoản System
Đây cũng là tài khoản được tạo khi tạo database và nó cũng được gánrole DBA User system thường sở hữu các table do Oracle cung cấp hơn
là các dictionary User system có thể tạo thêm các table và view để cungcấp thông tin quản trị cũng như về các table và view được dùng bởi cáccông cụ quản trị Không nên tạo các object bằng tài khoản này
2.3.4 PL/SQL và một số khái niệm
SQL – ngôn ngữ truy vấn cấu trúc- là cách thức hay dùng để truynhập để lấy dữ liệu từ cơ sở dữ liệu SQL cho chúng ta khả năng truynhập hoàn toàn vào dữ liệu, tức là có thể lấy mọi thông tin dù có thểthông qua cách thức không lý tưởng lắm SQL không có sự đảm bảo vềtính hiệu quả, không có vòng lặp, chỉ có thể thực hiện chúng tại một thờiđiểm, không có sự bảo vệ các mã lệnh, lưu mã lệnh trên server thay vìclient, không xử lí ngoại lệ, không làm việc với các biến, các tham số,object, record, array, con trỏ, …
Dù SQL khá là một công cụ mạnh mẽ nhưng nó vẫn chỉ là mộtphương thưc truy nhập database hơn là một ngôn ngữ lập trình PL/SQLkhắc phục những nhược điểm của SQL và có thêm những tính năng mới.PL/SQL là ngôn ngữ sử dụng cho việc tạo các procedure, function,trigger, và object được lưu trữ trong Oracle Nó là viết tắt của ProceduralLanguage/SQL và dựa trên ngôn ngữ lập trình ADA và là một mở rộngcủa SQL, kết hợp vào trong đó rất nhiều đặc tính của các ngôn ngữ lậptrình gần đây Nó cho phép các thao tác dữ liệu và các câu lệnh querySQL bao gồm các đoạn mã có cấu trúc khối và tính thủ tục, làm choPL/SQL trở thành một ngôn ngữ xử lý transaction mạnh mẽ
2.3.4.1 Khối nặc danh
Khối nặc danh (Anonymous block) là mã không được lưu trữ, khôngđược đặt tên Chúng được thực thi trong một session và từ session kháckhông thể gọi tới Để thực hiện lại các anonymous block code, phải lưu
nó lại thành file và chạy lại hoặc thêm nó vào một chương trình khác.Khối nạc danh lý tưởng cho việc thực hiện các công việc không phải lặp
Trang 29lại Nó bắt đầu bằng Declare hoặc begin.
2.3.4.2 Thủ tục
Thủ tục (Procedure) là khối lệnh được đặt tên và được lưu trữ Chúng
có thể trả về một giá trị khi được thực thi nhưng không bắt buộc Điềuduy nhất phải đảm bảo đó là việc thực hiện thủ tục thành công hay thấtbại Thủ tục được đặt tên tại thời điểm tạo, và mặc định người sở hữu làngười tạo nó Có thể thực thi các thủ tục từ dấu nhắc SQL*Plus, từ bêntrong một mã SQL hoặc từ khối lệnh PL/SQL khác
2.3.4.3 Hàm
Hàm cũng là khối code được lưu trữ và đặt tên Cấu trúc của nó giốngvới thủ tục chỉ khác ở chỗ, luôn có giá trị trả về Hàm có thể được thực thi từdấu nhắc SQL*Plus, từ bên trong một mã SQL hoặc từ khối lệnh PL/SQLkhác Khi thực thi một hàm, phải có quyền xử lí giá trị trả về
2.3.4.4 Gói
Là tập hợp các thủ tục và hàm Chúng có 2 phần phần đặc tả và phầnbody Phần đặc tả là công khai, chỉ ra cấu trúc của gói Khi miêu tả mộtpackage trong SQL*Plus, phần được hiển thị chính là phần đặc tả Phầnđặc tả luôn được tạo và biên dịch trước phần body Có thể tạo các gói vớiphần đặc tả mà không cần phải có body
2.3.4.5 Xử lý các câu lệnh PL/SQL
Khi thực thi một khối PL/SQL, lệnh được chuyển tới PL/SQLengine Engine có thể ở trong chính máy chủ dữ liệu hoặc là một trongcác tool có tích hợp PL/SQL engine Tiếp theo, code được phân tích cúpháp thành mã SQL chuyển tới SQL engine hoặc SQL statement executor.Các câu lệnh thủ tục được chuyển tới nơi thực thi thủ tục để xử lý
Các lệnh PL/SQL có thể được interpret, tức là các thủ tục, hàm, góiđược biên dịch và lưu trữ ở dạng PL/SQL sau đó được Oracle chuyển đổithành ngôn ngữ C ở thời điểm chạy Ở chế độ interpreted, biên dịchPL/SQL nhanh hơn nhưng việc thực thi code chậm hơn so với nativecompilation
Native compilation, có mặt đầu tiên trong phiên bản Oracle 9iR1 vàđược cải tiến trong 10gR1 Nó chuyển PL/SQL thành C ngay tại thời điểmbiên dịch Điều này giúp việc thực thi nhanh hơn 30% vì không có sựchuyển đổi nào tại thời điểm chạy
2.4 Tấn công Rootkit trong Oracle
Cơ sở dữ liệu Oracle và hệ điều hành khá tương đồng đối với nhau về mặtcấu trúc Cả cơ sở dữ liệu và OS đều có user, process, Job, và symbolic link Vìvậy, tin tặc 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 cơ sở dữ liệuOracle
Trang 31Một số 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 1234 Alter system kill session '12,55’Executables View, Package, Procedures and
FunctionsExecute Select * from view;
execprocedure
current_schema=user01
Rm Delete bal (put in correct sytax)Fdisk Drop tablespaces
Bảng 7 Sự tương đồng giữa Database và OS
Thông thường có một thủ thuật của Rootkit OS thế hệ đầu tiên khi ẩn mộtkhoản lệnh ở trong OS*NIX như ps, who và top đã bị thay thế bằng phiên bảncủ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àycũng có thể được áp dụng đối với DB Rootkit database cũng cần che giấu cáchà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ác databse table
và các data dictionary view là sys.user$, v$pwfile_user Vì vậy attacker cầncan thiệp vào source code của view này
Đầu tiên, chúng ta thử tìm hiểu một số khung nhìn từ điển mà cung cấpthông tin về người dùng cũng như thông tin về các tiến trình có liên quan tớihoạt động của user trong DB Và tìm hiểu một số gói PL/SQL sẵn có của Oracleđược sử dụng cho việc tấn công của tin tặc
2.4.1 Tìm hiểu một số khung nhìn từ điển dữ liệu
DBA_JOBS
View dba_jobs lưu thông tin về tất cả Jobs trong cơ sở dữ liệu Thông tin
về các cột trong khung nhìn này:
Trang 32Column Comments
Job Xác định một Job Không thay đổi
nó dù thực hiện import hay exportnhiều lần
Log_user Khi user xác định Job thì sẽ được ghi
lạiPriv_user User có quyền mặc định được áp
dụng cho job nàySchema_user Schema mặc định được gán cho một
job khi thực hiệnLast_date Thời điểm gần nhất mà job được
thực hiện thành côngLast_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 không thực thi)This_sec Tương tự this_date Thời điểm lần
thực thi cuối cùng bắt đầu
Next_date Thời điểm kế tiếp mà job được thực
hiệnNext_sec Tương tự như 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âyBrocken Nếu là Y, nghĩa là không có một số
cố gắng chạy job này Nếu là N cómột số cố gắng để chạy job
Interval Lập lịch chạy job lần tiếp theo
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ấtWhat Body của block anonymous PL/SQL
mà job này thực hiệnNls_env Tham số phiên mô tả biến môi
trường nls của jobMisc_env Tham số phiên khác áp dụng cho jobInstance ID của instance chạy hoặc có thể
chạy job Mặc định là 0
Bảng 8 View DBA_Jobs
Trang 33Job ID của job đang chạy
Last_date Ngày gần nhất của job chạy thành
côngLast_sec Tương tụ last_date, đó la lần thực
hiện thành công gần nhấtSID ID của tiến trình đang thực hiện jobThis_date Ngày mà job bắt đầu thực hiện
(thường là null nếu không đang thựchiệ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 9 View dba_job_running
Trang 34Lư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àoTrace ID Định danh file trace
Background Nhận diện process có phải tiến trình
background khôngLatchwait Địa chỉ của Latch mà process đang
đợiLatchspin Địa chỉ của Latch mà process đang
spinning trênPga_used_mem Vùng nhớ PGA mà process sử dụngPga_alloc_mem Vùng nhớ PGA hiện thời được cấp
phát cho process
Bảng 10 V$Process