Kettle password decrypt

Kettle e' la componente ETL della Suite Open Source Pentaho. Kettle nasconde le password di connessione ai database con un proprio algoritmo. In qualche caso pero' potrebbe essere utile ottenerle in chiaro (per esempio se si deve prendere in carico un software sviluppato da altri).

Questa pagina spiega come decrifrare le password crittografate di Kettle.

Kettle mantiene le password in modo crittografato sui file .ktr delle trasformazioni o all'interno del repository. In questo modo un utente che abbia accesso ai file non e' in grado di connettersi ai database riferiti da Kettle se non applicando le trasformazioni... ma c'e' un modo per ottenere le password in chiaro!

Trasformazioni

Una trasformazione e' salvata in un file XML <nomeTrasformazione>.ktr con una struttura ben precisa. Vediamo un estratto:

<?xml version="1.0" encoding="UTF-8"?> <transformation> <info> <name>MyTRX</name> <description /> <extended_description /> <trans_version /> <trans_type>Normal</trans_type> <trans_status>0</trans_status> <directory>/</directory> <parameters> </parameters> ... <connection> <name>ZABBIX</name> <server>zabbix.xenialab.it</server> <type>MYSQL</type> <access>Native</access> <database>allarmi</database> <port>3306</port> <username>zabbix_ro</username> <password>Encrypted 4461767665726f50656e73617669446954726dc8f9ddad3fc993b4aa0abd67d180ab85</password> <servername /> <data_tablespace /> <index_tablespace /> <attributes> <attribute> <code>PORT_NUMBER</code> <attribute>3306</attribute> </attribute> <attribute> <code>QUOTE_ALL_FIELDS</code> <attribute>N</attribute> </attribute> </attributes> </connection> ...

A prima vista la password e' crittografata e non e' possibile ricavarla in chiaro...

Codice

Ma c'e' un modo semplice per ottenere le password in chiaro con uno step che richiama la classe Java corretta!

Da Java Script e' possibile richiamare tutte le classi di Kettle, tra cui quelle di decrypting. Per ottenere il risultato cercato basta creare una trasformazione che richiama uno step in Java Script e ne invia il risultato su file.

Pentaho - Kettle Java Script sample Con Spoon si imposta una trasformazione con i tre semplici Step riportati in figura. Il primo Step e' un Input, si utilizza un Generate Rows e si assegna ad una variabile la password da decriptare (Name: pass, Type: String, Value: 446176766572...). Nel secondo Step si utilizza un Modified Java Script Value (tipo Scripting) per creare un nuovo field ed assegnare il valore decriptato. Nello step di Output si salva il risultato su un file (Text file output). Il codice Java Script necessario e':

// Effettua il decrypt della password impostata nello Step precedente

var decr=org.pentaho.di.core.encryption.Encr.decryptPassword(pass);
Eseguendo la trasformazione nel file di output si ottiene il valore in chiaro della password prodotta in input.

A grande richiesta... su questo link la trasformazione d'esempio: basta modificare il valore inserito nello step Generate Rows sostituendolo con quanto si vuole ottenere in chiaro per avere in output il risultato.

Note

Le password vengono crittografate da Kettle con un algoritmo reversibile perche' debbono essere ottenute in chiaro per l'autenticazione sul database. Dal punto di vista teorico il termine corretto e' obfuscation e basta conoscere l'algoritmo per ottenere la password originale.

Avvertenza E' chiaro che i file XML che contengono le password vanno protetti adeguatamente: anche se le password sono crittografate sono facilmente ottenibili in chiaro da un esperto. Quindi i file .ktr non debbono essere accessibili all'esterno. Come in ogni caso, per tutti gli accessi ai database, anche con Kettle debbono essere utilizzati utenti che seguono il principio del minimo privilegio.

Altri documenti di questo tipo su questa pagina. Hack


Titolo: Decriptare le password di Kettle
Livello: Hack (5/5)
Data: 31 Ottobre 2012 - Halloween
Versione: 1.0.1 - 31 Ottobre 2015 🎃 Halloween
Autore: mail [AT] meo.bogliolo.name