Bài thực hành Bảo mật hệ thống thông tin - Bài thực hành số 12: Standard Auditing

Bo Mt HThng Thông Tin  
Lab 12  
1
Bài thực hành số 12  
STANDARD AUDITING  
Tóm tắt nội dung:  
Khái quát về Database Auditing  
Kích hoạt các lựa chọn của Standard Auditing  
Statement Auditing  
Privilege Auditing  
Schema Object Auditing  
I. Khái quát về Database Auditing  
1. Định nghĩa:  
Auditing là hoạt động giám sát và ghi lại…. Được dựa trên các hoạt động cá nhân  
như thực hiện câu lệnh SQL, hay dựa trên sự kết hợp các yếu tố bao gồm tên, ứng  
dụng, thời gian,…Các chính sách bảo mật thể dẫn đến việc audit khi những phần  
tử cụ thể trong CSDL Oracle bị truy cập hay thay thế.  
Auditing nhìn chung được sử dụng:  
Cho phép giải trình những hành động hiện tại tham gia vào một schema, bảng,  
dòng riêng biệt, hay một nội dung cụ thể nào đó.  
Ngăn cản user khỏi hành động không thích hợp dựa trên trách nhiệm phải giải  
trình đó.  
Điều tra các hoạt động đáng ngờ. dụ, nếu một user không được phép đang  
xóa dữ liệu từ một bảng nào đó thì người quản trị bảo mật sẽ ghi lại tất cả những  
kết nối CDSL và tất cả những hành động xóa các dòng từ bảng trong CSDL dù  
thành công hay không thành công.  
Thông báo cho người giám sát rằng có user bất hợp phát đang thao tác hay xóa  
dữ liệu hay user có nhiều quyền hệ thống hơn sự cho phép.  
Chương Trình Đào To TXa  
KH & KT Máy Tính – Đi hc Bách Khoa TP.HCM  
Bo Mt HThng Thông Tin  
Lab 12  
2
Giám sát và thu thập dữ liệu về các hoạt động CSDL cụ thể. dụ, người quản  
trị CSDL có thể thu thập thống về thông tin các bảng đang được update, hay  
bao nhiêu users cùng trung cập vào thời điểm cực đỉnh.  
2. Các kiểu giám sát (Types of Auditing)  
Oracle cho phép giám sát theo 2 lựa chọn tập trung hoặc mở rộng.  
Sự thực thi câu lệnh thành công, hoặc không thành công, hoặc cả hai.  
Mỗi lần thực thi câu lệnh trong mỗi session của user, hay bất kì khi nào mà câu  
lệnh được thực thi.  
Hoạt động của tất cả các user hay của một user cụ thể nào đó.  
bốn kiểu giám sát:  
Statement auditing: chia thành hai nhóm  
o Câu lệnh DDL: Ví dụ AUDIT TABLE giám sát tất cả các câu lệnh  
CREATE và DROP TABLE.  
o Câu lệnh DML: Ví dụ AUDIT SELECT TABLE giám sát tất cả câu lệnh  
SELECT trên bảng và trên view  
Privilege auditing: Kiểm tra việc sử dụng quyền hệ thống, dụ AUDIT  
CREATE TABLE. Privilege auditing được chú trọng hơn statement auditing vì  
chỉ kiểm tra việc sử dụng một số quyền nhất định. thể đặt privilege  
auditing giám sát những user được lựa chọn hay giám sát mọi user.  
Schema object auditing: Kiểm tra câu lệnh cụ thể trên đối tượng schema cụ  
thể, dụ AUDIT SELECT ON employees. (Rất được chú trọng). Schema  
object auditing luôn áp dụng cho tất cả các user.  
Fine-grained auditing: Kiểm tra dữ liệu truy xuất và các hoạt động dựa trên  
nội dung của dữ liệu đó. dụ: Sử dụng DBMS_FGA, người quản trị bảo mật  
tạo ra một chính sách kiểm tra trên một bảng. Nếu bất kì dòng nào trả về từ câu  
lệnh DML thỏa điều kiện kiểm tra thì một mục về sự kiện kiểm tra sẽ được chèn  
vào trong audit trail.  
3. Audit Records và Audit Trails:  
Chương Trình Đào To TXa  
KH & KT Máy Tính – Đi hc Bách Khoa TP.HCM  
Bo Mt HThng Thông Tin  
Lab 12  
3
Những thông tin được audit sẽ được lưu trong data dictionary table, gọi database  
audit trail, hoặc lưu trong operating system files, gọi operating system audit  
trail.  
Bản ghi Audit (Audit trail records)  
Chứa những loại thông tin khác nhau, phụ thuộc vào những sự kiện được giám  
sát và tập các lựa chọn giám sát. Thông tin sau đây được bao gồm trong mỗi bản  
ghi audit:  
-
-
-
-
-
-
-
-
-
-
Database user name (DATABASE USER)  
Operating system login user name (CLIENT USER)  
Instance number (không có trong Operation System…)  
Process identifier  
Session identifier  
Terminal identifier  
Name of the schema object accessed  
Operation performed or attempted (ACTION)  
Completion code of the operation  
Date & time stamp in UTC format ( không có trong Operation System Audit  
Trail)  
-
System privileges used (PRIVILEGE)  
Chú ý: Audit trail không lưu thông tin về giá trị của dữ liệu dù nó liên quan đến  
trong câu lệnh được giám sát. Ví dụ, giá trị dữ liệu mới và giá trị dữ liệu cũ của  
hàng được update không được lưu lại khi câu lệnh UPDATE được giám sát.  
Tuy vậy, đối với phương pháp fine-grained auditing có khác.  
Operating System Audit Trail  
Oracle cho phép bản ghi dấu audit (audit trail records) được trực tiếp ghi vào  
operating system audit trail nếu hệ điều hành tạo một audit trail sẵn cho Oracle.  
Nếu không thì bản audit sẽ được ghi vào file bên ngoài CSDL, với định dạng  
tương tự như các file dấu tích Oracle (Oracle trace) khác.  
Oracle cho phép một hoạt động nào đó mà luôn bị giám sát được tiếp tục, thậm  
chí khi mà operating system audit trail ( hay file hệ điều hành chứa bản ghi  
Chương Trình Đào To TXa  
KH & KT Máy Tính – Đi hc Bách Khoa TP.HCM  
Bo Mt HThng Thông Tin  
Lab 12  
4
audit) không được phép ghi lại bản ghi audit do nó bị đầy. Tuy nhiên, chú ý  
rằng cấu hình auditing để sử dụng database audit trail loại bỏ được điểm yếu  
này, bởi hệ CSDL Oracle ngăn ngừa sự kiện được audit khỏi xảy ra nếu audit  
trail không thể tiếp nhận bản ghi database audit cho câu lệnh đó.  
II. Quản lí Standard Audit Trail  
1. Kích hoạt Standard Auditing  
Bất cứ database user hợp pháp nào cũng thể thiết lập lựa chọn giám sát đối với  
câu lệnh, quyền đối tượng bất cứ khi nào. Tuy nhiên hệ CSDL Oracle không  
sinh thông tin audit cho Standart database audit trail trừ khi CSDL giám sát được  
kích hoạt. Người quản trị bảo mật thường có trách nhiệm điều khiển việc giám sát  
này.  
Auditing là chức năng mặc định trong Oracle server. Các tham số khởi tạo ban  
đầu ảnh hưởng đến hành vi của nó có thể được xem bằng cách sử dụng câu lệnh.  
SQL> SHOW PARAMETER AUDIT  
NAME  
TYPE  
VALUE  
--------------------  
audit_file_dest  
-------- ----------------------  
string  
C:\ORACLEXE\APP\ORACLE\  
ADMIN\XE\ADUMP  
audit_sys_operations  
audit_trail  
boolean FALSE  
string NONE  
Chức năng Audit mặc định bị bất hoạt, nhưng thể kích hoạt bằng cách thiết  
lập giá trị cho tham số AUDIT_TRAIL  
AUDIT_TRAIL = { none | os | db | db,extended | xml |  
xml,extended }  
Trong đó:  
none or falsechức năng giám sát bị bất hoạt.  
db or trueBật chức năng giám sát và các bản ghi giám sát được sẽ được  
Chương Trình Đào To TXa  
KH & KT Máy Tính – Đi hc Bách Khoa TP.HCM  
Bo Mt HThng Thông Tin  
Lab 12  
5
lưu trong database audit trail (SYS.AUD$).  
xml- Bật chức năng giám sát với các bản ghi giám sát được sẽ được lưu như  
file OS có định dạng XML.  
os- Bật chức năng giám sát với các bản ghi giám sát được ghi vào operating  
system audit trail.  
Tham số AUDIT_SYS_OPERATIONSdùng để kích hoạt hay bất hoạt giám  
sát các hoạt động của những user kết nối vào hệ thống với quyền SYSDBA  
hay SYSOPER, bao gồm user SYS. Khi đó tất cả các bản ghi giám sát được  
ghi vào OS audit trail.  
Tham số AUDIT_FILE_DESTđặc tả đường dẫn cho audit trail khi các lựa  
chọn OS, XML, EXTENDEDđược sử dụng. cũng vị trí lưu các bản ghi  
giám sát khi tham số AUDIT_SYS_OPERATIONS = true  
Để kích hoạt chức năng giám sát, làm theo các bước sau  
SQL> ALTER SYSTEM SET audit_trail=db SCOPE=SPFILE;  
System altered.  
SQL> SHUTDOWN  
Database closed.  
Database dismounted.  
ORACLE instance shut down.  
SQL> STARTUP  
ORACLE instance started.  
Database mounted.  
Database opened.  
SQL>  
2. Kích hoạt lựa chọn Standard Auditing  
Để sử dụng lệnh AUDIT thiết lập lựa chọn về câu lệnh quyền thì bạn nhất thiết  
phải quyền AUDIT SYSTEM. Còn để thiết lập các lựa chọn giám sát đối  
tượng bạn phải làm chủ đối tượng bị giám sát hay có quyền AUDIT ANY.  
Chương Trình Đào To TXa  
KH & KT Máy Tính – Đi hc Bách Khoa TP.HCM  
Bo Mt HThng Thông Tin  
Lab 12  
6
Lệnh AUDIT thiết lập lựa chọn giám sát câu lệnh quyền thể bao gồm mệnh  
đề BY để cụ thể danh sách những user hay application proxy để giới hạn tầm vực  
của câu lệnh lựa chọn giám sát quyền.  
BY SESSION/ BY ACCESS  
-
BY SESSION:  
Ghi một bản ghi đơn cho tất cả các câu lệnh SQL cùng loại thực thi trên  
cùng những đối tượng schema trong cùng một session. Tuy nhiên nếu sử  
dụng operating system trail cho theo dấu giám sát (khi đó tham số  
AUDIT_FILE_DEST được gán giá trị OS), thì CSDL sẽ viết nhiều mục  
vào file theo dấu ngay cả khi bạn sử dụng mệnh đề BY SESSION.  
BY ACCESS:  
-
Ghi một bản ghi cho mỗi lần truy xuất. Nếu đặc tả lựa chọn câu lệnh hay  
quyền hệ thống mà giám sát câu lệnh DDL thì CSDL sẽ tự động giám sát  
theo BY ACCESS không quan tâm bạn sử dụng mệnh đề BY SESSION  
hay BY ACCESS. Ngoài ra thì nếu không đặc tả thì BY SESSION là mặc  
định.  
WHENEVER SUCCESSFUL/ WHENEVER NOT SUCCESSFUL  
-
-
WHENEVER SUCCESSFUL giám sát những lệnh thành công.  
WHENEVER NOT SUCCESSFUL giám sát những lệnh thất bại hay kết  
quả lỗi. Nếu loại bỏ hai mệnh đề này thì Oracle cũng sẽ ghi lại sự giám sát  
không quan tâm câu lệnh có thành công hay không.  
3. Bất hoạt lựa chọn Standard Auditing  
Câu lệnh NOAUDIT để tắt các lựa chọn giám sát của Oracle 10G.  
Mệnh đề WHENEVER để tắt các giám sát đối với các câu lệnh được thực hiện  
thành công hay không thành công. Nếu không sử dụng mệnh đề đó thì chức năng  
giám sát sẽ tắt cả đối với trường hợp thành công hay thất bại.  
Mệnh đề BY SESSION/BY ACCESS không được hỗ trợ trong câu lệnh NOAUDIT.  
4. Điều khiển sự phát triển và kích cỡ của Standard Audit Trail  
Chương Trình Đào To TXa  
KH & KT Máy Tính – Đi hc Bách Khoa TP.HCM  
Bo Mt HThng Thông Tin  
Lab 12  
7
Nếu audit trail đầy dẫn tới không một bản ghi giám sát nào được ghi thêm vào thì  
những câu lệnh AUDIT không thể thực thi thành công cho tới khi audit trail trống  
trở lại. Do đó, người quản trị bảo mật phải điều khiển sự phát triển và kích cỡ của  
audit trail.  
Khi chức năng giám sát được kích hoạt và các bản ghi giám sát được sinh ra thì  
dung lượng của audit trail phụ thuộc hai yếu tố:  
Số lựa chọn giám sát được sử dụng.  
Tần số thực hiện các câu lệnh được giám sát.  
Để điều khiển sự phát triển của audit trail, bạn thể sử dụng phương pháp:  
Kích hoạt bất hoạt giám sát CSDL. Nếu được kích hoạt thì các bản ghi  
giám sát được sinh ra và lưu trữ trong audit trail. Nếu bất hoạt thì các bản  
ghi sẽ không được sinh ra.  
Chọn lọc kĩ những lựa chọn giám sát được kích hoạt. Nếu nhiều lựa chọn  
giám sát được kích hoạt thì những bản ghi giám sát không cần thiết thể làm  
đầy audit trail.  
Quản chặt khả năng giám sát đối tượng. Điều đó thể được thực hiện bằng  
hai cách khác nhau:  
-
Nhà quản trị bảo mật làm chủ tất cả các đối tượng quyền hệ thống  
AUDIT ANY không bị cấp cho bất một user nào khác.  
Tất cả các đối tượng chứa trong những schema mà không tương ứng với  
database user thực sự (user đó không được cấp quyền CREATE  
SESSION) và người quản trị bảo mật là user duy nhất quyền AUDIT  
ANY.  
-
Xóa một số bản ghi trong audit trail để vừa giải phóng vùng nhớ vừa làm  
thuận tiện cho việc quản lí audit trail.  
dụ:  
Xóa toàn bộ bản ghi trong audit trail:  
DELETE FROM SYS.AUD$;  
Xóa toàn bộ bản ghi được sinh ra do kết quả của việc giám sát bảng emp:  
DELETE FROM SYS.AUD$  
WHERE obj$name = ‘EMP’;  
Chương Trình Đào To TXa  
KH & KT Máy Tính – Đi hc Bách Khoa TP.HCM  
Bo Mt HThng Thông Tin  
Lab 12  
8
Chương Trình Đào To TXa  
KH & KT Máy Tính – Đi hc Bách Khoa TP.HCM  
Bo Mt HThng Thông Tin  
Lab 12  
9
Chú ý: Chỉ có user SYS (user có quyền DELETE ANY TABLE), hay user được  
SYS gán quyền DELETE trên SYS.AUD$ mới thể thực hiện những câu lệnh  
trên.  
III. Cú pháp  
A. Lý thuyết  
1. audit::=  
2. sql_statement_clause::=  
Chú ý: Oracle khuyên rằng nên đặc tả lựa chọn quyền hệ thống và câu lệnh để  
giám sát hơn là nêu chung qua các role hoặc shortcuts.  
3. auditing_by_clause::=  
Giám sát chỉ những câu lệnh SQL gọi bởi những user cụ thể. Nếu không sử dụng  
mệnh đề này thì Oracle sẽ giám sát câu lệnh của tất cả user.  
Chương Trình Đào To TXa  
KH & KT Máy Tính – Đi hc Bách Khoa TP.HCM  
Bo Mt HThng Thông Tin  
Lab 12 10  
4. schema_object_clause::=  
Giám sát các hoạt động trên những đối tượng schema.  
Object_option: đặc tả hoạt động cụ thể cho việc giám sát. Ví dụ như ALTER,  
COMMENT, AUDIT, DELETE, EXECUTE, GRANT, INSERT, READ,…  
ALL: là một shortcut tương ứng với tất cả các object options cho các loại đối  
tượng.  
5. auditing_on_clause::=  
auditing_on_clause: đặc tả đối tượng schema riêng biệt được giám sát.  
ON DEFAULT: thiết lập những lựa chọn đối tượng cụ thể trở thành những lựa  
chọn đối tượng mặc định cho những đối tượng được tạo ra sau đó. Sau khi  
thiết lập những lựa chọn giám sát mặc định, bất đối tượng nào được tạo ra  
sau đó thì được giám sát tự động với những lựa chọn đó. Những lựa chọn  
giám sát mặc định cho một view luôn là sự kết hợp của lựa chọn giám sát cho  
bảng cơ sở của view đó. thể xem lựa chọn giám sát mặc định hiện tại bằng  
cách truy vấn ALL_DEF_AUDIT_OPTS.  
Khi thay đổi lựa chọn giám sát mặc định, lựa chọn giám sát cho những đối  
tượng được tạo lúc trước vẫn giữ nguyên. Bạn thể thay đổi lựa chọn giám  
sát cho đối tượng đã tồn tại chỉ bằng đặt tả đối tượng trong mệnh đề ON của  
câu lệnh AUDIT.  
Chương Trình Đào To TXa  
KH & KT Máy Tính – Đi hc Bách Khoa TP.HCM  
Bo Mt HThng Thông Tin  
Lab 12 11  
6. noaudit::=  
B. Thực hành  
1. Giám sát câu lệnh SQL liên quan đến ROLE  
Giám sát tất cả các câu lệnh SQL liên quan đến ROLE (create, alter, drop, set)  
không quan tâm câu lệnh được thực hiện thành công hay không:  
AUDIT ROLE;  
Giám sát tất cả câu lệnh liên quan đến ROLE mà thực hiện thành công:  
AUDIT ROLE WHENEVER SUCCESSFUL;  
2. Giám sát truy vấn và update câu lệnh SQL  
Giám sát cho bất cứ câu lệnh nào truy vấn hay update bất bảng nào:  
AUDIT SELECT TABLE, UPDATE TABLE;  
Giám sát câu lệnh phát ra bởi user hr và oe mà truy vấn hay update một bảng  
hoặc view nào đó:  
AUDIT SELECT TABLE, UPDATE TABLEBY hr, oe;  
3. Giám sát xóa  
Giám sát câu lệnh sử dụng quyền hệ thống DELETE ANY TABLE:  
AUDIT DELETE ANY TABLE;  
4. Giám sát câu lệnh liên quan tới Directories  
Giám sát câu lệnh sử dụng quyền hệ thống CREATE ANY DIRECTORY:  
AUDIT CREATE ANY DIRECTORY;  
Chương Trình Đào To TXa  
KH & KT Máy Tính – Đi hc Bách Khoa TP.HCM  
Bo Mt HThng Thông Tin  
Lab 12 12  
Giám sát lệnh CREATE DIRECTORY (và DROP DIRECTORY) mà không  
sử dụng quyền hệ thống CREATE DIRECTORY:  
AUDIT DIRECTORY;  
Giám sát mỗi câu lệnh đọc file từ đường dẫn bfile_dir:  
AUDIT READ ON DIRECTORY bfile_dir;  
5. Giám sát truy vấn trên bảng  
Giám sát cho mỗi câu SQL truy vấn tới bảng employees trong schema hr:  
AUDIT SELECT ON hr.employees;  
Giám sát cho mỗi câu truy vấn tới bảng employees trong schema hr và kết quả  
đó trong CSDL Oracle bị lỗi:  
AUDIT SELECT ON hr.employees  
WHENEVER NOT SUCCESSFUL;  
6. Giám sát chèn và update trên bảng  
Giám sát cho mỗi câu lệnh chèn và update một hàng trong bảng customers của  
schema oe:  
AUDIT INSERT, UPDATE  
ON oe.customers;  
7. Thiết lập mặc định cho lựa chọn giám sát  
Đặc tả lựa chọn giám sát mặc định cho các đối tượng được tạo ra trong tương  
lai:  
AUDIT ALTER, GRANT, INSERT, UPDATE, DELETE  
ON DEFAULT;  
Bất đối tượng nào được tạo ra sau đó sẽ tự động bị giám sát với đặc tả được  
lựa chọn đó (trong trường hợp chức năng giám sát được kích hoạt)  
Nếu tạo ra một bảng thì Oracle tự động giám sát các câu lệnh ALTER,  
GRANT, INSERT, UPDATE, DELETEliên quan đến bảng này.  
Chương Trình Đào To TXa  
KH & KT Máy Tính – Đi hc Bách Khoa TP.HCM  
Bo Mt HThng Thông Tin  
Lab 12 13  
Nếu tạo ra một view thì Oracle sẽ tự động giám sát các câu lệnh GRANT,  
INSERT, UPDATE, DELETEliên quan đến view này.  
Nếu tạo ra một procedure, package, hay function thì Oracle sẽ tự động  
giám sát các câu lệnh ALTERhay GRANTliên quan đến nó.  
8. Tắt giám sát  
Tắt giám sát trên câu lệnh:  
NOAUDIT ALL;  
Tắt giám sát trên quyền:  
NOAUDIT ALL PRIVILEGES;  
Chú ý: để bất hoạt giám sát câu lệnh quyền thì phải quyền hệ thống AUDIT  
SYSTEM.  
Tắt giám sát trên đối tượng:  
NOAUDIT DELETE  
ON emp;  
NOAUDIT SELECT, INSERT, DELETE  
ON jward.dept;  
Để tắt giám sát trên đối tượng cụ thể thì bạn phải chủ của đối tượng đó. Để  
tắt giám sát trên đối tượng của một đối tượng thuộc schema của user khác hay  
tắt giám sát mặc định trên đối tượng thì bạn phải quyền hệ thống AUDIT  
ANY.  
9. Các view của Audit Trail  
Các bản ghi giám sát được lưu trong bảng AUD$ trong schema của SYS. Nội  
dung của nó có thể được xem trực tiếp hoặc qua các view.  
Chương Trình Đào To TXa  
KH & KT Máy Tính – Đi hc Bách Khoa TP.HCM  
Bo Mt HThng Thông Tin  
Lab 12 14  
SELECT view_name  
FROM dba_views  
WHERE view_name LIKE 'DBA%AUDIT%'  
ORDER BY view_name;  
VIEW_NAME  
------------------------------  
DBA_AUDIT_EXISTS  
DBA_AUDIT_OBJECT  
DBA_AUDIT_POLICIES  
DBA_AUDIT_POLICY_COLUMNS  
DBA_AUDIT_SESSION  
DBA_AUDIT_STATEMENT  
DBA_AUDIT_TRAIL  
DBA_COMMON_AUDIT_TRAIL  
DBA_FGA_AUDIT_TRAIL  
DBA_OBJ_AUDIT_OPTS  
DBA_PRIV_AUDIT_OPTS  
DBA_REPAUDIT_ATTRIBUTE  
DBA_REPAUDIT_COLUMN  
DBA_STMT_AUDIT_OPTS  
14 rows selected.  
IV. Bài tập  
1. Tạo user mới với username là audit_test. Phân quyền connect, create table và create  
procedure cho user vừa mới tạo.  
2. Thực hiện giám sát các hành vi xem, thêm, sửa, xóa dòng trên bất bảng nào của  
user audit_test.  
3. Đăng nhập vào tài khoản user audit_test. Thực hiện chuỗi hành động sau  
a. Tạo bảng tên TAB (bảng TAB chỉ một cột ID có kiểu là NUMBER)  
b. Insert giá trị vào bảng TAB.  
Chương Trình Đào To TXa  
KH & KT Máy Tính – Đi hc Bách Khoa TP.HCM  
Bo Mt HThng Thông Tin  
Lab 12 15  
c. Update giá trị vừa insert vào.  
d. Xem tất cả dữ liệu của bảng TAB.  
e. Xóa tất cả dữ liệu trong bảng TAB.  
f. Xóa bảng TAB.  
4. Đăng nhập vào user system, kiểm tra những hành vi nào được giám sát lại. Hành vi  
tạo bảng và xóa bảng của user audit_test có bị giám sát không? Nếu có hãy giải thích  
lý do, nếu không hãy tạo câu lệnh giám sát hành vi tạo bảng và xóa bảng của user  
audit_test.  
Chương Trình Đào To TXa  
KH & KT Máy Tính – Đi hc Bách Khoa TP.HCM  
docx 15 trang yennguyen 08/04/2022 3540
Bạn đang xem tài liệu "Bài thực hành Bảo mật hệ thống thông tin - Bài thực hành số 12: Standard Auditing", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • docxbai_thuc_hanh_bao_mat_he_thong_thong_tin_bai_thuc_hanh_so_12.docx