Deployment e gestione di Oracle Transparent Data Encryption (TDE) su Bare Metal Solution

Questa pagina descrive come eseguire il deployment di Oracle Advanced Security Transparent DataEncryption (TDE) e come gestire Oracle Wallet e le chiavi su Bare Metal Solution.

Panoramica

Oracle Advanced Security TDE cripta in modo trasparente i dati at-rest nei database Oracle e impedisce l'accesso non autorizzato ai file dei database. TDE può criptare interi backup dei database (RMAN) e le esportazioni di Data Pump, così come tabelle e colonne specifiche.

Come funziona la crittografia trasparente dei dati

TDE crea e gestisce più chiavi utilizzate per la crittografia. Queste chiavi devono essere protette perché, se un utente malintenzionato ottiene dati criptati e chiavi corrispondenti, può decriptare facilmente i dati per visualizzare dati chiari.

TDE ha un'architettura delle chiavi a due livelli, con chiavi di crittografia dei dati sottoposte a wrapping da una singola chiave master del database. La chiave master è separata dai dati criptati, archiviata al di fuori del database che può essere un archivio chiavi software Oracle o un modulo di sicurezza hardware (HSM) ed è gestita direttamente dall'amministratore della sicurezza del database in un archivio chiavi.

Per TDE sono disponibili due opzioni di archivio chiavi per supportare ambienti diversi con clienti. Per impostazione predefinita, TDE archivia la sua chiave master in Oracle Wallet, un file di archiviazione delle chiavi basato su standard PKCS#12. I portafogli offrono una soluzione semplice per un numero ridotto di database criptati.

Attiva TDE per il database Oracle 11g sul server Bare Metal Solution:

Puoi eseguire operazioni di crittografia a livello di colonna e di spazio tabella. Puoi anche applicare la TDE ai backup RMAN.

Abilita prerequisito TDE

Devi preparare il database impostando un archivio chiavi (Oracle Wallet per 11g) e creare una chiave master iniziale.

Configura Oracle Wallet nel server Bare Metal Solution

  • Connettiti a uno dei server Bare Metal Solution da una macchina jump host o bastion nel tuo progetto.

        $ ssh customeradmin@192.168.1.10
        $ su - oracle
    
  • Imposta la variabile di ambiente.

    [oracle@svr002 ~]$ . oraenv
     ORACLE_SID = [tdedb] ? DB11G
     The Oracle base has been changed from   /u01/app/oracle to /apps/oracle/oracle_base
    
    [oracle@svr002 ~]$ export ORACLE_SID=DB11G1
    
  • Connetti come sysdba.

    [oracle@svr002 ~]$ sqlplus / as sysdba
    
  • Assicurati che tutte le seguenti variabili di ambiente siano impostate correttamente.

    $ echo $ORACLE_HOME
    $ echo $ORACLE_BASE
    $ echo $DB_UNIQUE_NAME
    
  • Crea una nuova directory per i file Wallet.

    $ mkdir -p $ORACLE_BASE/admin/DB11G/wallet
    
  • Utilizza Utilità orapki per creare il wallet e abilitare l'accesso automatico in modo da non dover abilitare Wallet al riavvio.

    $ orapki wallet create -wallet $ORACLE_BASE/admin/DB11G/wallet -auto_login -pwd Oracle2020
    
  • Oracle utilizza i percorsi predefiniti per il portafoglio.

    $ ORACLE_BASE/admin/$DB_UNIQUE_NAME/wallet
    $ ORACLE_HOME/admin/$DB_UNIQUE_NAME/wallet
    

    Se non utilizzi il percorso predefinito, devi impostare il percorso alternativo nel file sqlnet.ora. Devi impostare uno di questi parametri ENCRYPTION_WALLET_LOCATION o WALLET_LOCATION.

    Per trovare il percorso Wallet:

    SQL> COL wrl_type FORMAT a12
         COL wrl_parameter FORMAT a35
         COL status FORMAT a15
    
    SQL> select * from v$encryption_wallet;
    
    WRL_TYPE     WRL_PARAMETER           STATUS
    --------     -------------           -------
    file        /apps/oracle/oracle_base OPEN_NO_MASTER_KEY
                /admin/DB11G/wallet
    
  • Per impostare il percorso Wallet nel file sqlnet.ora:

    $ vi sqlnet.ora
    
    ENCRYPTION_WALLET_LOCATION=
     (SOURCE=(METHOD=FILE)(METHOD_DATA=
     (DIRECTORY=/apps/oracle/oracle_base/admin/DB11G/wallet))
    
    Or
    
    WALLET_LOCATION =
     (SOURCE=(METHOD=FILE)(METHOD_DATA=
    (DIRECTORY=/apps/oracle/oracle_base/admin/DB11G/wallet))
    
  • Aggiungi un nome utente e una password a Wallet. Per aggiungere un nome utente e una password a un wallet esistente, utilizza il comando mkstore con l'opzione -createCredential come segue:

    mkstore -wrl <wallet_location> -createCredential <TNS_alias> <username> <password>
    
    $ mkstore -wrl apps/oracle/oracle_base/admin/DB11G/wallet -createCredential DB11G testuser testtest123
    

    Puoi accedere con testuser@SID senza inserire la password.

  • Crea una chiave master iniziale.

    SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY Oracle2020;
    

    Controlla che lo stato del portafoglio sia OPEN.

    SQL> COL wrl_type FORMAT a12
         COL wrl_parameter FORMAT a35
         COL status FORMAT a15
    
     SQL> select * from v$encryption_wallet;
    
          WRL_TYPE  WRL_PARAMETER             STATUS
          --------  -------------             ------
          file      /apps/oracle/oracle_base/ OPEN
              admin/DB11G/wallet
    
  • Per aprire e chiudere Wallet:

    SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "Password";
    SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;
    

Abilita TDE a livello di Tablespace

Puoi eseguire operazioni di crittografia utilizzando l'istruzione CREATE TABLESPACE SQL.

Crittografia di nuovi spazi delle tabelle

Quando crei un nuovo spazio tabella, puoi configurare le relative impostazioni di crittografia durante il processo di creazione.

  1. Assicurati che il Parametro di inizializzazione COMPATIBILE per la crittografia dello spazio tabella sia 11.2.0.0 o successivo

    SQL> SHOW PARAMETER COMPATIBLE
    
         NAME        TYPE     VALUE
         ----        ----     ------
         compatible  string   11.2.0.4.0
    
  2. Assicurati di aver configurato la chiave di crittografia master TDE. Puoi verificarla in Crea una chiave master iniziale nella sezione Prerequisiti.

  3. Esegui la creazione dello spazio tabella criptato

    Per verificare il percorso del file di dati, utilizza:

    SQL> select * from dba_data_files ;
    

    Eseguire l'istruzione CREATE TABLESPACE utilizzando le relative clausole di crittografia

      SQL> create TABLESPACE encrypted_ts
           DATAFILE '+DATA/db11g/datafile/encrypted_ts01.dbf' SIZE 5 M
           AUTOEXTEND on NEXT 64K
           ENCRYPTION USING 'AES256'
           DEFAULT STORAGE(ENCRYPT);
    

    La crittografia con "AES256" specifica l'algoritmo di crittografia e la lunghezza della chiave per la crittografia. La clausola ENCRYPT cripta lo spazio delle tabelle.

    Se la clausola USING viene omessa, per impostazione predefinita l'algoritmo di crittografia sarà "AES128". Inoltre, è necessario specificare la clausola di archiviazione predefinita di ENCRYPT. Inoltre, puoi impostare il parametro dinamico TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM per definire l'algoritmo di crittografia predefinito per le future operazioni di creazione dello spazio delle tabelle utilizzando l'istruzione ALTER SYSTEM:

      sql> ALTER SYSTEM SET TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM = value;
    

    Il valore può essere uno dei seguenti algoritmi di crittografia: AES128, AES192, AES256, 3DES168, ARIA128, ARIA192, ARIA256, SEED128 e GOST256. Il valore predefinito è AES128.

    In alternativa, puoi impostare TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM come parametro di inizializzazione nel file init.ora.

    Per verificare se la crittografia dello spazio tabella è configurata o meno, puoi controllare la colonna ENCRYPTED delle viste DBA_TABLESPACES e USER_TABLESPACES che indica se lo spazio tabella è criptato o meno.

    SQL> SELECT tablespace_name, encrypted FROM dba_tablespaces;
    
          TABLESPACE_NAME                ENC
          -----------------------------------
          SYSTEM                         NO
          SYSAUX                         NO
          UNDOTBS1                       NO
          TEMP                           NO
          USERS                          NO
          UNDOTBS2                       NO
          ENCRYPTED_TS                   YES
    
  4. Testa la crittografia

    SQL> CREATE TABLE test (id NUMBER(10),data VARCHAR2(50))TABLESPACE encrypted_ts;
    Table created.
    
    SQL> CREATE INDEX test_idx ON test(data) TABLESPACE encrypted_ts;
    Index created.
    
    SQL> INSERT INTO test  (id, data) VALUES (1, 'Test  Encryptio');
    1 row created.
    
    SQL> COMMIT;
    Commit complete
    

    Svuota la cache del buffer per assicurarti che i dati siano scritti nel file di dati.

      SQL> ALTER SYSTEM FLUSH BUFFER_CACHE;
    

    Leggere i dati all'interno del file di dati utilizzando il comando stringhe.

      export ORACLE_SID=+ASM
      asmcmd
      ASMCMD> strings +DATA/db11g/datafile/encrypted_ts01.dbf
    

    I dati vengono visualizzati in formato binario.

Attiva TDE a livello di colonna della tabella

La crittografia delle colonne TDE può essere utilizzata per criptare i dati di una colonna specifica nelle tabelle di database riservate, come numeri di carte di credito, codici fiscali e numeri di conto personale (PAN).

  1. Creare una tabella con una colonna criptata

    SQL> CREATE TABLE employee (
         first_name VARCHAR2(128),
         last_name VARCHAR2(128),
         empID NUMBER ENCRYPT NO SALT,
         salary NUMBER(6) ENCRYPT USING '3DES168'
         );
    Table created.
    

    SALT è un modo per rafforzare la sicurezza dei dati criptati. È una stringa casuale aggiunta ai dati prima di essere criptati, il che fa sì che la ripetizione del testo in chiaro abbia un aspetto diverso quando viene criptato. SALT rimuove un metodo utilizzato dai malintenzionati per rubare i dati, ovvero i pattern corrispondenti di testo criptato. Puoi utilizzare il parametro SALT o NO SALT specificato con la clausola ENCRYPT.

    Puoi utilizzare il comando ALTER TABLE per criptare le colonne di una tabella esistente aggiungendo una colonna criptata o criptando una colonna già esistente.

    Per aggiungere una colonna criptata a una tabella esistente nel database:

    SQL> ALTER TABLE employee ADD (credit_card_number VARCHAR2(16) ENCRYPT NO SALT);
    Table altered.
    

    Per criptare una colonna esistente in una tabella nel database:

    SQL> ALTER TABLE employee MODIFY (last_name encrypt);
    Table altered.
    

    Per aggiungere SALT a una colonna criptata in una tabella nel database:

    SQL> ALTER TABLE employee MODIFY (last_name encrypt salt);
    Table altered.
    

    Per decriptare una colonna esistente in una tabella nel database:

    SQL> ALTER TABLE employee MODIFY (last_name decrypt);
    Table altered.
    

    Per rimuovere SALT da una colonna criptata in una tabella del database:

    SQL> ALTER TABLE employee MODIFY (last_name encrypt no salt);
    Table altered.
    

    Per modificare la chiave criptata della tabella contenente una o più colonne criptate:

    SQL> ALTER TABLE employee rekey;
    Table altered.
    

    Per modificare l'algoritmo di crittografia per la tabella contenente una o più colonne criptate

    SQL> ALTER TABLE employee rekey USING '3DES168';
    Table altered.
    

Crittografia degli spazi delle tabelle futuri

Puoi configurare il database Oracle per criptare automaticamente i tablespace futuri che creerai utilizzando il parametro di inizializzazione del database ENCRYPT_NEW_TABLESPACES.

Utilizza il seguente comando ALTER SYSTEM:

SQL> ALTER SYSTEM SET ENCRYPT_NEW_TABLESPACES=value;

Il valore può essere:

  • ALWAYS cripta automaticamente lo spazio delle tabelle utilizzando l'algoritmo AES128 o l'algoritmo specificato dal parametro dinamico TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM, se ometti la clausola ENCRYPTION di CREATE TABLESPACE sia per gli scenari cloud che per quelli in locale. Se fornisci la clausola ENCRYPTION, tuttavia, l'algoritmo specificato ha la precedenza su AES128.

  • DDL cripta lo spazio delle tabelle utilizzando l'impostazione specificata della clausola ENCRYPTION di CREATE TABLESPACE, sia per gli ambienti cloud che on-premise.

  • CLOUD_ONLY (non applicabile nel nostro caso d'uso) si applica solo a un ambiente Oracle Cloud. CLOUD_ONLY è l'impostazione predefinita.

Crittografia dello spazio delle tabelle TDE o delle colonne TDE?

SELEZIONA LA CRIPZIONE COLONNA TDE SE SELEZIONA LA CRITTOGRAFIA TDE TABLESPACE SE
La posizione delle informazioni sensibili è nota La posizione delle informazioni sensibili è sconosciuta
Meno del 5% di tutte le colonne della richiesta sono candidati per la crittografia La maggior parte dei dati dell'applicazione è considerata sensibile oppure nel tuo settore si applicano molteplici mandati di sicurezza e privacy a livello nazionale e internazionale
Il tipo e la lunghezza dei dati sono supportati dalla crittografia delle colonne TDE Non tutti i tipi di dati che contengono informazioni sensibili sono supportati dalla crittografia delle colonne TDE
I candidati per la crittografia non sono colonne con chiave esterna I candidati per la crittografia sono colonne di chiave esterna
Gli indici rispetto ai candidati di crittografia sono normali indici B-tree Gli indici di candidati di crittografia sono indici funzionali
L'applicazione non esegue scansioni di intervalli su dati criptati L'applicazione cerca intervalli di dati sensibili
Aumento dello spazio di archiviazione da 1 a 52 byte per valore criptato Nessun aumento dello spazio di archiviazione accettabile
L'impatto sulle prestazioni dipende dalla percentuale di colonne criptate, dalla frequenza di selezione o aggiornamento dei valori criptati, dalle dimensioni dei dati criptati e da altre variabili Impatto costante sul rendimento inferiore al 10%
Se vuoi trarre vantaggio dall'accelerazione di crittografia hardware
Se vuoi sfruttare contemporaneamente i vantaggi di crittografia e compressione.

Crittografia di backup RMAN

I set di backup vengono criptati mediante un algoritmo elencato in V$RMAN_ENCRYPTION_ALGORITHMS. RMAN può criptare in modo trasparente i dati scritti nei set di backup e decriptare questi set di backup quando sono necessari in un'operazione RESTORE. RMAN offre tre modalità di crittografia: transparent, protetta da password e doppia.

  • Per utilizzare la crittografia in modalità trasparente (impostazione predefinita), è necessario usare Oracle Encryption Wallet.

  • Per utilizzare la modalità password, il DBA deve fornire una password che verrà utilizzata per la crittografia. Puoi impostare la modalità password tramite SET ENCRYPTION ON IDENTIFIED BY password only.

  • Utilizzando la crittografia dual mode, puoi utilizzare Oracle Wallet o una password per la decriptazione. Puoi impostare la modalità doppia tramite il giorno SET ENCRYPTION ON IDENTIFIED BY password.

Configurazione della crittografia di backup RMAN

  1. Configura Oracle Wallet.

  2. Configura RMAN per utilizzare la crittografia.

    Configura la modalità di crittografia RMAN. Questo esempio utilizza la modalità doppia. Per farlo, connettiti al database di destinazione RMAN ed esegui il comando SET ENCRYPTION ON IDENTIFIED BY password.

    [oracle@svr002 ~]$ . oraenv
      ORACLE_SID = [tdedb] ? DB11G
      The Oracle base has been changed from /u01/app/oracle to /apps/oracle/oracle_base
    
      export ORACLE_SID=DB11G1
    

    Connettiti a RMAN.

      rman target /
      RMAN> SET ENCRYPTION ON IDENTIFIED BY <password>;
      executing command: SET encryption
    

    SET ENCRYPTION esegue l'override delle impostazioni di crittografia specificate dal comando CONFIGURE ENCRYPTION , che utilizza la crittografia trasparente per impostazione predefinita.

  3. Configura l'algoritmo di crittografia del backup predefinito.

    Per un elenco di algoritmi di crittografia RMAN, esegui una query sulla vista v$rman_encryption_algorithms:

     SQL> COL algorithm_name FORMAT a15
          COL algorithm_description FORMAT a15
          COL is_default FORMAT a15
     SQL> select algorithm_id, algorithm_name, algorithm_description, is_default from v$rman_encryption_algorithms;
    
          ALGORITHM_ID ALGORITHM_NAME  ALGORITHM_DESCR  IS_DEFAULT
          -----------  --------------  ---------------  ----------
          1             AES128          AES 128-bit key  YES
          2             AES192          AES 192-bit key  NO
          3             AES256          AES 256-bit key  NO
    

    Per modificare l'algoritmo predefinito:

     RMAN> CONFIGURE ENCRYPTION ALGORITHM 'AES256';
           using target database control file instead of recovery catalog
           new RMAN configuration parameters:
              CONFIGURE ENCRYPTION ALGORITHM 'AES256';
           new RMAN configuration parameters are successfully stored
    

    Esegui un backup criptato utilizzando il normale comando di backup RMAN. Ad esempio:

     RMAN> backup tablespace users;
    

    Per ripristinare il backup utilizzando la password di crittografia:

    RMAN> set decryption identified by <password>;
    RMAN> restore tablespace users;
    

Note importanti

  • Se sono disponibili le chiavi di decriptazione richieste, i backup criptati vengono decriptati automaticamente durante il ripristino e il ripristino. Ogni set di backup riceve una chiave distinta. La chiave è archiviata in formato criptato nello spazio di backup. Il backup viene decriptato con chiavi ottenute da una password fornita dall'utente o dall'archivio chiavi software Oracle.

  • La crittografia del backup trasparente supporta sia l'archivio chiavi del software di accesso automatico sia l'archivio chiavi del software basato su password. Quando utilizzi l'archivio chiavi del software di accesso automatico, le operazioni di backup criptato possono essere eseguite in qualsiasi momento, poiché l'archivio chiavi di accesso automatico è sempre aperto. Quando utilizzi il keystore del software basato su password, l'archivio chiavi deve essere aperto prima di poter eseguire la crittografia di backup.

  • Se utilizzi un archivio chiavi ad accesso automatico, non eseguirne il backup insieme ai dati di backup criptati perché gli utenti possono leggere i backup criptati se hanno sia i backup sia l'archivio chiavi di accesso automatico. È sicuro eseguire il backup dell'archivio chiavi Oracle perché questo tipo di archivio chiavi non può essere utilizzato senza la password dell'archivio chiavi.

  • Se alcune colonne del database sono criptate con la crittografia delle colonne TDE (Transparent DataEncryption) e se il backup di queste colonne viene eseguito utilizzando la crittografia del backup, queste colonne vengono criptate una seconda volta durante il backup. Quando i set di backup vengono decriptati durante un'operazione di ripristino, le colonne criptate vengono restituite nel formato criptato originale.

  • Se perdi l'archivio chiavi Oracle, non potrai ripristinare backup criptati in modo trasparente. Inoltre, se dimentichi o perdi la password utilizzata per criptare un backup criptato, non puoi ripristinare il backup.