Oracle Audit
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';