it-swarm-eu.dev

Come evitare gli script con password hardcoded?

Ho alcuni script sulla macchina Ubuntu Linux che accede a un server di database per eseguire quotidianamente alcuni interventi di manutenzione. Per accedere al database, ho bisogno di una password e in questo momento è codificata nello script.

Quali sono i modi migliori per eseguire questo script senza codificare/esporre la password?

21
KennyC

È possibile creare coppie di chiavi pubbliche/private e crittografare la password. Ciò dovrebbe offuscare la password dai passanti occasionali, poiché avrebbero solo la parte pubblica della chiave a loro nota.

È inoltre necessario proteggere lo script utilizzando le autorizzazioni di directory e file.

Inoltre, (a seconda del database) dovresti essere in grado di creare un account utente per il database che ha solo i privilegi di backup. Ciò impedirebbe a qualcuno di creare tabelle, scaricare tabelle e sostituire contenuti. È possibile limitare l'accesso a questo utente ai tempi previsti per l'esecuzione dei backup.

Update

Questo post su Comodo in realtà spiega le chiavi un po 'meglio . Poiché sei preoccupato che qualcuno ottenga l'accesso alla password originale presente nel codice, l'utente malintenzionato dovrebbe ascoltare la chiave privata da parte dell'utente attivando lo script (cosa che potrebbe accadere tramite SSH su un cron su un [virtuale] separato macchina). Ovviamente non avrebbe senso se si stessero memorizzando entrambe le chiavi sullo stesso sistema a meno che, ovviamente, non si stia memorizzando la chiave privata con privilegi più alti rispetto alla chiave pubblica.

Entrambe le chiavi insieme = password

Per quanto riguarda le autorizzazioni, se qualcuno ha accesso al tuo sistema ed è molto preoccupante che una password sia memorizzata sulla scatola in un "formato leggibile", sembra che ci siano problemi più profondi con la configurazione delle autorizzazioni sulla scatola stessa. Inoltre, se qualcuno può Sudo e battere i tuoi privilegi (come l'host che esegue la casella), l'hash delle chiavi è davvero l'unica opzione per impedire all'utente amministratore di accedere al database.

Inoltre, dovrai disabilitare l'account root sul database poiché ciò consentirebbe all'autore dell'attacco di leggere comunque le tabelle del database.

12
AbsoluteƵERØ

Come menzionato in altre risposte, le tue credenziali saranno accessibili da qualche parte al tuo script.

Ma vorrei metterli è un file di configurazione separato che verrà letto dal tuo script.

Avrai i seguenti vantaggi:

  • puoi usare lo stesso script per diversi sistemi (con file di configurazione diversi)
  • potrai condividere lo script con altri (o mostrarlo a qualcuno senza compromettere le tue credenziali)
14
Matteo

Considerando la natura automatizzata dello script, non penso che ci sia un modo migliore per archiviare la password oltre a codificarla.

La mia raccomandazione sarebbe di bloccare lo script con le autorizzazioni appropriate per il filesystem unix. Creare lo script -rwx------ e impostare il proprietario e il gruppo su valori appropriati farà molto per proteggere la password.

Naturalmente, sono in atto adeguate misure di registrazione per rilevare se lo script è stato compromesso. In tal caso, modificare immediatamente la password sul server database.

4
user10211

Mi piace la risposta di @ absolute sulla crittografia dei crediti con una coppia di chiavi, aggiungerò anche che per le soluzioni basate su Windows, a volte ho appena usato C # anziché uno script PowerShell; dato che sono entrambi basati su .NET, posso solo compilare la mia soluzione e lanciare i crediti lì dentro.

Quindi, forse puoi creare un eseguibile compilato che chiama lo script e passa le credenziali come parametro, o anche una copia crittografata delle credenziali come parametro che lo script può decrittografare.

, sono consapevole che i crediti possono ancora essere strappati dall'exe in determinate circostanze, ma questo è specificamente per la situazione dei PO di evitare crediti chiari.

3
MDMoore313

Forse stai facendo la domanda sbagliata. Mentre è giusto preoccuparsi degli script con credenziali di autenticazione codificate, la vera domanda è come gestire le credenziali di autenticazione utilizzate dagli script automatizzati e, soprattutto, quali sono le maggiori minacce o rischi associati al sistema. Sistemi diversi hanno rischi diversi. È necessario comprendere i rischi più rilevanti per la propria situazione per valutare quali azioni siano più adatte. In generale

  • Non credenziali di autenticazione codificate. Inseriscili in un file/percorso separato e fai in modo che lo script utilizzi le informazioni. Ciò ha il vantaggio di semplificare la modifica delle password in quanto non è necessario modificare le fonti e è possibile avere più script che utilizzano la stessa fonte, consentendo di modificare le password in un solo posto.

  • Comprendi autorizzazioni, usi e gruppi. Utilizzare le strutture disponibili per limitare l'accesso.

  • Utilizza le funzionalità di protezione avanzata del tuo sistema operativo. Ad esempio, Linux usa SELinux o AppArmor (penso che Ubuntu sia basato su apparmor). Definire politiche appropriate per limitare l'accesso solo a ciò che è assolutamente necessario.

  • Comprendi e usa gli strumenti disponibili - ssh, Sudo, chroot ecc.

Conoscere e capire dove sono le minacce determinerà quali tecniche e strutture sono più adatte e se le strutture predefinite sono sufficienti o se è necessario alzare le cose e installare ulteriori precauzioni. non trascurare l'importanza del controllo e dell'analisi dei log. Una cosa è mettere in atto la protezione. È un altro sapere quando la tua protezione è fallita e sei stato compromesso. Può essere male avere il tuo sistema compromesso, ma è molto peggio che sia compromesso e non lo sappia.

2
Tim X

Se si utilizza ssh per accedere al server di database, è possibile impostare ~/.ssh/authorized_keys sul server di database per includere il file ~/.ssh/id_dsa.pub o ~/.ssh/id_rsa.pub sul tuo sistema Ubuntu. Sarai in grado di accedere senza password.

Se non hai un file in ~/.ssh/id_dsa.pub cerca come crearne uno con ssh-keygen

1
Alan