Tuesday, November 25, 2008

Chèn mã SQL, PL/SQL đoạt quyền DBA với DBMS_EXPORT_EXTENSION

Giới thiệu

Trong lĩnh vực bảo mật thông tin, kỹ thuật chèn mã SQL khá phổ biến đối với những người quan tâm về bảo mật, và ở Việt Nam kỹ thuật này thường được ứng dụng cho những Cơ sở dữ liệu đơn giản, ít được sử dụng tại các doanh nghiệp lớn như SQL Server, MySQL. Vì lý do này, tính nguy hiểm của chèn mã SQL vẫn chưa được đánh giá đúng mức tại Việt Nam. Đối với Cơ sở dữ liệu Oracle (Oracle Database), kỹ thuật này được biến đổi khá đa dạng và nguy hiểm, cho phép một tài khoản với quyền hạn thấp có thể tùy biến nâng, đoạt được quyền quản trị DBA theo nhiều cách khác nhau, giúp tin tặc có thể điều khiển toàn hệ thống máy chủ Oracle. Bài viết này sẽ minh họa mã khai thác điểm yếu chèn mã SQL, PL/SQL đối với gói lệnh sẵn có DBMS_EXPORT_EXTENSION.

Gói lệnh sẵn có DBMS_EXPORT_EXTENSION của Oracle Database, mặc định cho phép bất kì tài khoản nào trong Oracle cũng có thể truy cập.

Mã minh họa

Để minh họa kỹ thuật chèn mã vào gói DBMS_METADATA, chúng ta sẽ dùng File mã lệnh dbms_exp_ext_c_local.sql: File lệnh này sử dụng kỹ thuật chèn mã con trỏ nên cho phép một tài khoản bất kì chỉ có quyền CREATE SESSION có thể nâng quyền thành DBA.
(Nhằm mục đích minh họa, File lệnh này áp dụng cho kết nối đến Oracle Database cụ thể)

Mặc định tài khoản SCOTT được gán 2 nhóm quyền CONNECT, RESOURCE, ứng với các quyền đơn lẻ sau:

F:\demo>sqlplus scott/tiger

SQL*Plus: Release 9.2.0.1.0 - Production on Mon Oct 20 08:35:25 2008

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

SQL> SELECT * FROM user_role_privs;

USERNAME GRANTED_ROLE ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
SCOTT CONNECT NO YES NO
SCOTT RESOURCE NO YES NO

2 rows selected

Thực hiện File mã lệnh sau để nâng quyền tài khoản SCOTT thành DBA:

SQL> @dbms_exp_ext_c_local.sql

dbms_exp_ext_c: Release 1.0 - Production on Tue Oct 20 08:38:38 2008
Copyright (c) 2008 WWW.VIETPACE.COM Limited. All rights reserved.

USERNAME TO CHECK [SCOTT]:
PRIVS CONTROL Grant/Revoke [G]:

--- CHECK CURSOR INJECTION
--- WE GOT THE POWAH!!

PL/SQL procedure successfully completed.

For updates please visit WWW.VIETPACE.COM | WWW.BAOMATORACLE.COM

Tài khoản SCOTT đã nâng quyền lên thành DBA:

SQL> SELECT * FROM user_role_privs;

USERNAME GRANTED_ROLE ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
SCOTT CONNECT NO YES NO
SCOTT DBA NO YES NO
SCOTT RESOURCE NO YES NO

3 rows selected.

Để gỡ quyền DBA khỏi tài khoản SCOTT, chúng ta làm như sau:

SQL> @dbms_exp_ext_c_local.sql

dbms_exp_ext_c_local: Release 1.0 - Production on Mon Oct 20 08:58:57 2008
Copyright (c) 2008 WWW.VIETPACE.COM Limited. All rights reserved.

USERNAME TO CHECK [SCOTT]:
PRIVS CONTROL Grant/Revoke [G]: R

--- REVOKING DBA FROM SCOTT...
--- DONE!

PL/SQL procedure successfully completed.

For updates please visit WWW.VIETPACE.COM | WWW.BAOMATORACLE.COM

SQL>

Tài khoản SCOTT chỉ còn 2 nhóm quyền như lúc đầu:

SQL> SELECT * FROM user_role_privs;

USERNAME GRANTED_ROLE ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
SCOTT CONNECT NO YES NO
SCOTT RESOURCE NO YES NO

2 rows selected.

Phiên bản ảnh hưởng

  • Oracle Database 9.2.0.1, 9.2.0.4, 9.2.0.6, 9.2.0.8
  • Oracle Database 10.1.0.3, 10.2.0.1

Giải pháp khắc phục

Để khắc phục lỗi này, người sử dụng cần cập nhật bản vá lỗi mới nhất cho hệ thống Oracle Database sớm nhất. Tuy nhiên việc cập nhật bản vá lỗi không đúng cách có thể khiến hệ thống Oracle Database không thể hoạt động được nữa.Vì vậy cần kiểm thử nhiều lần trước khi thực hiện vá lỗi,

No comments: