Evitando senha de texto simples em http_proxy

5

Estou atrás de um firewall corporativo, o que traz muitas dificuldades na área de proxies. Existem duas abordagens principais que encontrei para trabalhar:

  1. Use o Cntlm ao custo de não conseguir se conectar (da linha de comando) a HTTPS e locais SSH externos. (Cntlm permite que você crie seu nome de usuário e senha usando PassNTLMv2 (evitando assim texto sem formatação) e defina http://localhost:3128/ como seu proxy que redireciona para o seu proxy "real". Como mencionei, não consigo me conectar ao HTTPS e ao SSH externo usando este método.)
  2. Coloque meu nome de usuário e senha em texto simples na variável http_proxy ao custo de ter meu nome de usuário e senha em texto simples.

Claramente, se a segurança não fosse uma preocupação, eu apenas faria com a opção 2.

Eu encontrei um pouco de uma solução, fazendo isso no meu .babrunrc (eu uso o Babun, é basicamente o Cygwin com um pouco mais, o mesmo poderia estar em um .bashrc ou .zshrc )

export http_proxy="http://'echo "Y21hbjpwYXNzd29yZA==" | base64 -d'@20.20.20.20:20/"

Desta forma, minha senha é pelo menos codificada. Se alguém acessasse meu computador e digitasse echo $http_proxy , ele veria minha senha, mas não acho que haja alguma maneira de contornar isso.

Existe alguma abordagem alternativa para isso? Ou talvez uma maneira de criptografar a string em vez de codificá-la? Eu não me importaria de digitar alguma senha quando eu abrir um prompt, se não houvesse maneira de contornar isso.

    
por Captain Man 01.03.2016 / 16:42

2 respostas

5

O uso da base64 é inútil, é apenas uma transformação simples. Usar criptografia com uma chave que é armazenada junto com os dados criptografados também é inútil porque ainda é apenas uma transformação simples. Se você está preocupado com o acesso de alguém aos seus arquivos de configuração, então você precisa criptografar com uma chave que não está em seus arquivos de configuração, e isso significa que você terá que digitar uma senha¹ quando fizer o login.

Em vez de criar o seu próprio, use um mecanismo de criptografia existente.

No Linux, se você usar a criptografia de arquivos, criptografe seu diretório pessoal com eCryptfs ou criptografe todo o disco com a camada de criptografia de disco do Linux ( dm-crypt, cryptsetup command), ou crie um pequeno sistema de arquivos criptografado por arquivo com encfs . No último caso, tenha um script que monte o sistema de arquivos encfs e, em seguida, execute um script armazenado lá.

No Windows, coloque o arquivo em um TrueCrypt / VeraCrypt .

Como alternativa, use um gerenciador de senhas (defina uma senha mestra, é claro). O gerenciador de senhas do gnome (gnome-keyring) pode ser consultado na linha de comando com o secret-tool utilitário . O Seahorse oferece uma GUI conveniente para explorar e modificar o chaveiro e definir uma senha mestra.

secret-tool store --label='Corporate web proxy password' purpose http_proxy location work.example.com

export http_proxy="http://cman:$(secret-tool lookup purpose http_proxy location work.example.com)@192.0.2.3/"

Isso exigiu o D-Bus, que normalmente está disponível por padrão no Linux (a maioria dos ambientes de desktop modernos exige isso), mas precisa ser iniciado manualmente no Cygwin (não sei exatamente como).

ou de outro modo fornecer material secreto, e. armazenado em um smartcard.

    
por 02.03.2016 / 02:22
5

Eu encontrei uma solução: adicionando openssl enc -aes-128-cbc -a -d ao mix.

Primeiro, coloque a combinação de senha do nome de usuário (ou equivalente codificado na base64) aqui,

echo "<put it here>" | openssl enc -aes-128-cbc -a

Ele solicitará uma senha duas vezes. Esta senha é a senha que você terá que inserir sempre que http_proxy for definido.

Então, em .babunrc (ou onde quer que você coloque),

export http_proxy="http://'echo "<output from above command>" | openssl enc -aes-128-cbc -a -d'@20.20.20.20:20/"

Se a entrada foi codificada em base64, você precisará disso:

export http_proxy="http://'echo "<output from above command>" | openssl enc -aes-128-cbc -a -d | base64 -d'@20.20.20.20:20/"

Se o <output from above command> tiver uma nova linha, \n funcionará para ele.

    
por 01.03.2016 / 20:15