Oracle Audit

Da Emigar.
Jump to navigation Jump to search

Audit Classico

Da manualistica: "Oracle recommends that you include the BY ACCESS clause for all AUDIT statements, which results in a more detailed audit record."

Generalmente, tutto ciò che per essere fatto necessita di un privilegio, può essere tracciato. è conveniente redirigere tutti gli eventi di audit nel syslog:

ALTER SYSTEM SET AUDIT_TRAIL='OS' SCOPE=SPFILE;
ALTER SYSTEM SET AUDIT_SYS_OPERATIONS=TRUE SCOPE=SPFILE;
ALTER SYSTEM SET AUDIT_SYSLOG_LEVEL='SYSLOG.INFO' SCOPE=SPFILE;

Vedere cosa viene tracciato

Per verificare quali eventi sono tracciati:

set linesize 200 pagesize 200
col user_name for a20
col proxy_name for a20
SELECT * FROM ALL_DEF_AUDIT_OPTS;
SELECT * FROM DBA_STMT_AUDIT_OPTS ORDER BY AUDIT_OPTION;
SELECT * FROM DBA_PRIV_AUDIT_OPTS ORDER BY PRIVILEGE;

Privilegi sugli oggetti soggetti a tracciatura:

col owner for a20
col object_name for a20
SELECT * FROM DBA_OBJ_AUDIT_OPTS ORDER BY OWNER,OBJECT_NAME;


Configurare regole di tracciamento

Impostazioni minime (12.2) Tracciare chi si connette:

AUDIT SESSION BY ACCESS;

Tracciare tutte le operazioni privilegiate (sconsigliato perché molto oneroso e prolisso):

AUDIT DBA BY ACCESS;

oppure, con logica per utente:

AUDIT ALL PRIVILEGES BY <username> BY ACCESS;

tracciamento di tutto ciò che fa un utente:

AUDIT ALL STATEMENTS BY <username> BY ACCESS;

Con logica più granulare: Elencare tutti i privilegi:

select distinct  privilege from dba_sys_privs order by 1;

Attivare tracciamento solo sui privilegi distruttivi, come DROP ANY,UPDATE ANY,DELETE ANY.

audit delete table,update table,insert table,index,procedure by <username> by access;
AUDIT TABLE,INDEX,PROCEDURE BY <username> BY ACCESS;

Per avere un elenco degli statement:

create user bubba identified by bubba;
audit all statements by bubba by access;
select * from dba_stmt_audit_opts where user_name='BUBBA';
noaudit all statements by bubba;
drop user bubba cascade;

Cancellare regole di tracciamento

per disattivare auditing:

NOAUDIT ALL;
NOAUTID ALL STATEMENTS;
NOAUDIT ALL PRIVILEGES;

Con questi comandi vengono cancellate alche le regole di audit di default. Per ripristinarle è necessario lanciare:

@?/rdbms/admin/secconf

Unified Audit

https://oracle-base.com/articles/12c/auditing-enhancements-12cr1

Può essere rediretto sul syslog solo dalle versione 18.0 in avanti. Nella 12.2 esiste, ma scrive solo nel database.

abilitare unified audit

How To Enable The New Unified Auditing In 12c ? (Doc ID 1567006.1)

SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
VALUE
----------------------------------------------------------------
FALSE

Da sistema operativo come utente oracle:

cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk uniaud_on ioracle
SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
VALUE
----------------------------------------------------------------
TRUE

configurazione minima verso rsyslog

alter session set unified_audit_systemlog='SYSLOG.INFO' scope=spfile sid='*';
alter session set unified_audit_common_systemlog='SYSLOG.INFO' scope=spfile sid='*';

prime regole di audit

https://www.oracle.com/it/a/tech/docs/dbsec/unified-audit-best-practice-guidelines.pdf

CREATE AUDIT POLICY table_pol PRIVILEGES CREATE ANY TABLE, DROP ANY TABLE;
SELECT *
 FROM audit_unified_policies
 WHERE policy_name = 'TABLE_POL';
AUDIT POLICY table_pol;
SELECT policy_name, enabled_option, entity_name
 FROM audit_unified_enabled_policies
 WHERE policy_name = 'TABLE_POL';