Invia password sicura per lo script come parametro

1

Ho uno script previsto sul mio server che apre una connessione WebDAV ad un altro server, si aspetta un nome utente e una password, quindi invia $ arg1 e $ arg2 rispettivamente come nome utente e password.

Esempio: esecuzione dello script:

# ./script.exp username password

Questo esegue lo script con nome utente e password come argomenti. Nello specifico, questo script viene eseguito con php, che acquisisce le variabili da un database:

<?php
    exec("expect script.exp $username $password");

Il problema principale con questo è che quei parametri possono essere visti con una ps aux call.

Q) Supponendo che solo io abbia accesso al server e al filesystem, sarebbe comunque sicuro anche se la password può essere vista elencando ps aux?

Un pseudo esempio del mio script expect:

    //Webdav connection established, target server prompts me for username
    expect "Enter Username" 
    send "$arg1\r" 
    //Target server accepts username, now prompts me for password
    expect "Enter Password"
    send "$arg2\r"

Se questo non è sicuro, o se php exec () non è sicuro, qual è un modo migliore per eseguire il mio script e passarci il nome utente e la password?

    
posta suhdo 06.09.2014 - 13:51
fonte

1 risposta

0

Se qualcuno ha avuto accesso al filesystem del server, potrebbe anche leggere la password. Se esegui un comando ls -al /proc/<pid-of-another-users-process>/cmdline , puoi vedere che può essere letto da tutti.

Ci sono diversi modi per risolvere questo problema.

Il primo approccio con stdin

In primo luogo, si avvia un processo in php e poi si comunica con esso attraverso pipe stdin / stdout: tutorial , manuale .

Lo script expect legge dallo stdin e memorizza il nome utente e la password in variabili:

#!/usr/bin/expect
# Read input to stdin
expect_user -re "(.*)\n"
set username $expect_out(1,string)
expect_user -re "(.*)\n"
set password $expect_out(1,string)
#only for testing purposes:
puts "got $username!"
puts "got $password!"

Il secondo approccio di stdin

Se esegui expect nella console, puoi vedere che accetta il suo programma da stdin. Puoi invocare un nuovo processo expect e dargli uno script previsto creato nel tuo script php, con la password hardcoded, tramite stdin. Potrebbe essere possibile chiudere il flusso per ottenere l'esecuzione del codice. Assicurati di creare le giuste fughe per non trasformarla in una vulnerabilità legata all'iniezione di codice previsto.

L'approccio al file temporaneo

Puoi scrivere il nome utente e la password in un file temporaneo (nome file univoco per l'invocazione corrente!) e leggerlo dallo script expect in seguito. Oppure puoi anche generare uno script di previsione temporanea con la password codificata, ma ti consiglio di non farlo, poiché è troppo hacky. Il file dovrebbe essere accessibile solo dal tuo utente corrente.

    
risposta data 06.09.2014 - 16:28
fonte

Leggi altre domande sui tag