Script avançado em Bash (bash + md5) para proteger 'algo' (+ explicação detalhada)

Alguns dias atrás Eu disse a eles sobre FlatPress, um aplicativo da web (CMS) por meio do qual eles podem ter um blog ou algo semelhante sem usar bancos de dados ou ficar muito complicado 🙂

Bem, eu tenho no meu laptop um FlatPress para notas pessoais, coisas que não quero esquecer e é por isso que as escrevo neste blog pessoal. Mas, como vários de vocês já devem saber ... Eu sou um tanto paranóico com segurança, e, se se trata da segurança de MEUS pensamentos, vocês não têm idéia de como posso ser paranóico

Então, me deparei com o problema: como, usando o FlatPress, posso proteger todo o conteúdo dele?

Pensei em vários aplicativos que permitem a criptografia de dados, mas ... nenhum deles fazia exatamente o que eu queria, então assumi a tarefa de programar o que eu queria.

Agora vou mostrar um script que fiz, que faz o seguinte:

O script é projetado para trabalhar no KDE, se eles não têm KDE caixas de diálogo não aparecerão para eles.

1. Ele mostra uma caixa de diálogo perguntando se você é KZKG ^ Gaara, se você pressionar NÃO o script fecha, se você pressionar SIM, tudo continuará normalmente.

2. Mostre uma caixa de texto perguntando qual é a senha:

3. Se você pressionar Cancelar, o script fecha, agora vem um dos truques do script 😉 ...

3.1. A lógica é que o script compara a senha que escrevemos com uma que já está predefinida no mesmo script e, se as senhas corresponderem, ele continuará a ser executado e, se as senhas não corresponderem, aparecerá uma mensagem de erro. O problema é que, se colocarmos a senha correta dentro do script assim, qualquer pessoa que abrir o script com um editor de texto poderá ver a senha correta com muita clareza .. e isso meus amigos, é simplesmente uma falha imperdoável 🙂

3.2. Para evitar colocar a senha como esta em texto simples no script, usei MD5. Ou seja, no início do script, declarei que a senha correta é «2dac690b816a43e4fd9df5ee35e3790d«, E este é o MD5 de:«desdelinux«. ... Não entendo nada!! …😀

Vamos detalhar um pouco mais. Se eu escrever em um arquivo (por exemplo ~ / pass.txt) de texto: desdelinux

Se em um terminal escrevo: md5sum ~ / pass.txt

Ele vai voltar para mim: 2dac690b816a43e4fd9df5ee35e3790d sum

E ... como você pode ver, aquela primeira coluna que tem muitos números e letras em nenhuma ordem aparente, é idêntica à que coloquei acima, e é a que está no script declarado.

Bem, essa primeira coluna é o MD5 de desdelinux 😉

Se colocarem o seguinte, retornará apenas a 1ª coluna, que é a que nos interessa: md5sum ~/pass.txt | awk '{print $1}'

4. Portanto, a operação do script nesta parte específica é:

4.1. O script irá colocar a senha que você escreveu em um arquivo temporário chamado temp.txt, e ele extrairá o MD5 do conteúdo desse arquivo usando o comando:

md5sum temp.txt | awk '{print $1}'

4.2. Se o MD5 da senha que você acabou de escrever NÃO for o mesmo que foi definido (ou seja, o que está escrito no script), ele será fechado e exibirá um erro:

4.3. Se a senha corresponder, perfeito ... o script continua 😀

5. Quando a senha corresponder, o script executará uma série de etapas, no meu caso:

5.1. Vai entrar na pasta / home / compartilhado / hospedado / - » cd / home / compartilhado / hospedado /

5.2. A pasta FlatPress se chama "me" e está compactada em .RAR protegida por uma senha (a senha é a mesma que deveria ser definida antes), então o script descompactará esse arquivo (me.rar) - » rar x me.rar -hp $ MWORD

raro x - »O que ele faz é descompactar arquivos e pastas mantendo a mesma ordem que estão.

eu.raro - »Este é o arquivo que desejo descompactar.

-hp $ MWORD - »Aqui te digo que você deve usar senha para descompactar o arquivo, e a senha é a variável $ MWORD (esta variável é a senha que inserimos antes)

5.3. Então, se ele foi descompactado corretamente, eu prossigo para excluir o arquivo me.rar ... por quê? Bem, porque não faz sentido que o .rar exista se eu estiver trabalhando com os arquivos que tenho dentro, e esses arquivos estão mudando porque estou escrevendo coisas novas no blog - » rm me.rar

5.4. Devo alterar as permissões para que tudo funcione bem - » chmod 777 -R me / (lembre-se que a pasta me / é o que continha o me.rar compactado)

5.5. Ele vai me mostrar uma janela que me diz que tenho 10 segundos para abrir "o" navegador…. WTF!, O que isso significa? ...

5.5 (a). Simples, muito simples… 🙂… abro o navegador (neste caso rekonq) e estou trabalhando em uma nova postagem, mas quando fecho o navegador, o script compacta a pasta me / novamente em .rar (permanecendo em me.rar).

Isso é possível porque o script verifica a cada 3 segundos se o Rekonq está aberto ou não, se detectar que está aberto, o script não faz nada, mas se detectar que NÃO está aberto, ele executa: rar a me.rar -hp $ MWORD me / * && rm -R me /

O que significa que irá compactar a pasta mim/ en eu.raro (e vai colocar uma senha, que seria a mesma que já vimos), e depois de compactá-lo e se não houver erros, ele excluirá a pasta mim/ com todo o seu conteúdo.

5.5 (b). Como isso nos ajuda? ... simples, isso evita que tenhamos que lembrar que devemos proteger o nosso conteúdo novamente, pois só precisamos parar de trabalhar nele (feche o navegador) e o script fará todo o resto do trabalho 😉

6. Pronto, tudo isso foi explicado de uma forma geral 🙂

... embora haja ainda outro detalhe 😀

O script tem uma proteção ainda maior, a proteção que está desabilitada (comentada) são estas linhas:

if [ "$USER" != "$ME" ]; then
rm *.sh
kdialog --error "Sorry but u are not me. Auto-destroying..." --title "Im Me..."
exit
fi

O que isso faz é simples. A variável $ USER é uma variável global do sistema, se em um terminal colocar:

echo $USER

Você verá o que seu usuário mostra a você ... bem, a lógica dessas linhas é simples.

Se $ USER não corresponder à variável $ ME (e foi declarado por mim no script, e é: "gaara") o script excluirá TODOS os arquivos .sh que estão nessa pasta, ou seja, vão se autodestruir 😉

Isso evita que outra pessoa execute o script em outro computador hehehehe.

E bem, acho que não há muito mais a explicar, deixo o roteiro:

Download de arquivo .SH
Veja o script em nosso colar

Eu sei que muitos acharão isso extremamente complexo, mas na verdade é mais assustador do que deveria ... o script tem uma lógica de trabalho muito simples, para um propósito simples.

Fiz isso para atender a uma necessidade muito específica minha, compartilho na esperança de que alguma outra linha ou ideia explicada aqui possa servir a alguém 😉

A propósito, o script é destinado ao KDE, porque as caixas de diálogo (janelas) que ele exibe são do KDE (usando o KDialog), mas pode ser adaptado para o Gnome / Unity / Cinnamon / Mate usando Zenidade, ou use-o 100% no terminal simplesmente usando o comando de diálogo.

E sim, o script ainda tem algumas outras falhas, por exemplo, se o script descompacta o .rar, e então alguém fecha (mata) o script à força, o conteúdo do .rar ficará desprotegido, há alguns detalhes que ainda precisam ser polido ... mas hey, também devemos controlar que ninguém pode verificar nosso computador 😀

Para finalizar quero esclarecer que NÃO sou programador, muito menos, não me considero tal, imagino que você possa otimizar linhas no código, ou usar alguma função para melhorar o funcionamento do script ... mas eu disse, eu não sou um programador 😉

Qualquer dúvida que eles tenham sobre isso, eles me dizem, embora o script possa não servir para eles porque eles não precisam dele, eles sempre podem aprender alguma outra dica com ele 😀

lembranças

PD: Sei que elav. ele vai dizer que sou muito paranóico ... ou que perco meu tempo, mas não é assim. Eu queria algo muito específico, um sistema de segurança muito específico, e eu mesmo o programei ... quão geek é isso? … RI MUITO!!


41 comentários, deixe o seu

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   HacKanGenericName dito

    Isso é interessante, mas acho que a questão do sim / não é muito peido xD
    E o que você acha, em vez de usar o rar que é proprietário e não oferece segurança verdadeira, troque-o pelo gpg, que é um software de segurança mais do que comprovado ao longo dos anos e que existe em praticamente todas as distros 😉
    Outra coisa, você pode passar uma string ao md5sum, você não precisa criar um arquivo temporário. Aqui também recomendo que você vá para o sha que é muito mais seguro, experimente no terminal: shasum

    SAludos!

    1.    KZKG ^ Gaara dito

      Olá e obrigado pelo seu comentário 😀
      GPG me permite empacotar um diretório com todo o seu conteúdo? Na verdade, só o usei para arquivos individuais, não para diretórios que contêm subdiretórios e arquivos.

      ooo ... ótimo sobre shasum, eu não o conhecia 😀
      Continuarei modificando o script para usar este e ... sim !! verdade, com simplesmente: echo "$ PASSWORD" | shasum Já recebi a string, na verdade não há necessidade de gravá-la em um arquivo :)

      Muito obrigado pelo seu comentário, já aprendi algo novo 🙂
      lembranças

    2.    sieg84 dito

      é a mesma coisa que eu estava perguntando ...

      1.    KZKG ^ Gaara dito

        O que você precisa é descobrir como criptografar um arquivo com GPG e passar a senha na mesma linha ... por exemplo:
        gpg -e arquivo.tar.gz –password elpassword qualquer

        Alguma ideia de como fazer isso? 🙂

        1.    HacKanGenericName dito

          Para criptografar um diretório c / gpg, você deve primeiro compactá-lo com tar.
          então, para este caso, é conveniente usar criptografia simétrica, com o parâmetro -c (veja a wikipedia para a diferença entre criptografia simétrica e assimétrica).
          isso seria algo como:
          tar -czf destination.tgz source_directory / && echo $ passwd | gpg –batch –compress-level 0 -c –passphrase-fd 0
          isso criará um arquivo compactado chamado "destination.tgz" e o arquivo criptografado chamado "destination.tgz.gpg". tanto o diretório de origem quanto a própria compactação devem ser removidos por segurança (observe o comando shred)

          para descriptografar:
          echo $ passwd | gpg –batch -d –passphrase-fd 0 encryption_file.tgz.gpg | tar -xz
          que extraia os arquivos do diretório atual (então mv pode ser usado para movê-los para outro lugar)

          Qualquer dúvida, responda a este comentário 🙂

          saudações!

          1.    HacKanGenericName dito

            ehm, cuidado com os hifens duplos (-) e os hifens simples (-) ... existe uma maneira de escrever algo como se fosse um código para que o formato não mude?
            prueba de codigo -- -
            [código] código de teste - - [/ código]

          2.    HacKanGenericName dito

            Eu gasto mais prolixo

            compactar e criptografar:
            tar -czf destino.tgz directorio_fuente/ && echo $passwd | gpg –batch –compress-level 0 -c –passphrase-fd 0
            Observe que aqui estão duas etapas: primeiro crie o arquivo compactado e, em seguida, se não houver erro, continue com a criptografia (encadeamento com &&)

            descriptografar e descompactar:
            echo $passwd | gpg –batch -d –passphrase-fd 0 archivo_cifrado.tgz.gpg | tar -xz

            saudações!

          3.    KZKG ^ Gaara dito

            Sim, na verdade ontem em casa eu li o gpg man e havia tudo que eu precisava 😀
            Na verdade eu não fiz bem assim, não usei eco nem compressão, fiz um post sobre isso, acabei de postar.

            Muito obrigado pela ajuda amigo, realmente agradeço.

  2.   Josh dito

    Que maravilha! Eu estava procurando algo assim e me deparei com seu artigo. Vou testá-lo para proteger meus dados. Quando se trata de segurança de computador, você nunca pode ser muito paranóico. Obrigado

    1.    KZKG ^ Gaara dito

      Obrigada haha.
      Você entendeu como o script funciona, certo?

      Parece muito mais complexo do que realmente é lol.

      Obrigado pelo comentário, sério 😀

      lembranças

      PS: Na verdade, segurança nunca é suficiente hahaha.

      1.    Josh dito

        Demorei um pouco para entender (li 3 vezes), já que uso o Linux há pouco tempo. Mas é muito simples e é sempre bom aprender coisas assim. Saudações e obrigado novamente.

        1.    KZKG ^ Gaara dito

          O importante é entender hehe. Tentei explicar tudo extremamente detalhado, mas acho que estendi muito hahaha.
          Graças a você 🙂

  3.   auroszx dito

    Nossa, roteiro muito bom 🙂

    PS: Paranóia é mais de 9000! xD

    1.    KZKG ^ Gaara dito

      hahahahahahaha esse sou eu… LOL !!

  4.   Rafael dito

    Olhando para o seu script, acho que pode ser feito com xdialog caso você não tenha o kde :)! Felicidades

    1.    KZKG ^ Gaara dito

      Oh, eu não sabia sobre xdialog ... Vou ter que dar uma olhada para ver 😀
      Obrigado pela dica.

  5.   sieg84 dito

    em vez de rar, por que não usar tar.xz / gz e gpg?

    1.    Rafael dito

      é porque você já tem em rar onde você tem seu CMS

  6.   Cidade dito

    Excelente @ KZKG ^ Gaara dias atrás eu estava pensando em algo assim, mas estou fazendo exames, então não tive tempo para nada, e de repente vejo seu artigo….
    Vou tentar na próxima semana 🙂

    1.    KZKG ^ Gaara dito

      Obrigado, qualquer detalhe aqui estou 😀

  7.   truko22 dito

    xD Eu não entendi nada uu, mas se eu gostaria de como usar o kdialog corretamente nos scripts, como obter uma mensagem no notificador do KDE

    1.    KZKG ^ Gaara dito

      Para obter mensagens nas notificações do KDE, tente instalar o pacote: libnotify-bin
      Então, em um terminal você coloca:
      notify-send "texto texto texto"

      E você verá como é legal 😀… e isso funciona para KDE, Gnome, Unity, Cinnamon, Mate e Xfce 😉

      No entanto, neste script, não uso notificações como tal, mas apenas janelas do KDialog. Em um tipo de terminal:
      kdialog

      E você verá a ajuda lá 😉

      Saudações 😀

      1.    truko22 dito

        Muito obrigado o /

  8.   Joel antonio vasquez dito

    Olá, bom post, só uma sugestão, vale a pena que com o md5 não seja visto a olho nu, mas alguns curiosos podem usar uma rainbow table para ver se a senha convertida para md5 está lá dentro, recomendo usar bcrypt (http://bcrypt.sourceforge.net/), é apenas uma sugestão, você pode aproveitar para qualquer ocasião, Saudações.

    1.    KZKG ^ Gaara dito

      obrigado
      Na verdade sim, o MD5 não é perfeito e tem quem conseguisse obter senhas, vou dar uma olhada neste aplicativo 😉

      Obrigado pelo seu comentário.

  9.   sieg84 dito

    com o simétrico apenas no kdialog ele pede a senha
    e com o assimétrico usando uma chave pública.

    Devo esclarecer que não tenho nenhum vestígio de programador.

    1.    KZKG ^ Gaara dito

      Sim, já consegui criptografar com GPG (na verdade acabei de colocar um post sobre isso) hehe.

  10.   Querido dito

    KZKG ^ Gaara sempre lê sua postagem.
    Crie um para usar com o XFCE.
    Beijo. Caro

    1.    KZKG ^ Gaara dito

      Olá e antes de mais nada seja bem vindo ao blog 😀
      hahaha obrigado, sei que às vezes fica difícil porque escrevo coisas um tanto técnicas, mas procuro sempre explicar tudo da forma mais clara possível 🙂

      Vou experimentar um pouco com o XDialog ou o Zenity para ver se funciona para o Xfce haha, farei os testes em um Xubuntu virtual 🙂

      lembranças

  11.   Elinx dito

    Homem bastante útil, obrigado!

    Saudações!

  12.   damian rivera dito

    Obrigado, vai me ajudar muito a proteger alguns arquivos

    Tive que adaptá-lo para o zenity porque não tenho o kde no momento: \

    Deixo aqui o esqueleto que vou usar adaptado ao zenity

    http://paste.desdelinux.net/4641

    Obrigado novamente e saudações 😀

    1.    KZKG ^ Gaara dito

      oooo ótimo, muito obrigado 😀 😀
      Eu lembro que alguém pediu isso mas para o Xfce, com o Zenity funcionaria no Xfce certo?

      1.    damian rivera dito

        Sim, só que sobrou o comando para adicionar os comandos a executar, após passar a senha do shasum ou md5

        Teria que ser modificado para necessidades diferentes de cada pessoa, para proteger coisas diferentes em rotas diferentes com comandos diferentes

        Ou talvez adicionando outra parte (GUI) para criar a configuração de segurança do nosso arquivo

        Saudações 😀

        1.    damian rivera dito

          Tive tempo e xfce (no Archlinux) e já adaptei totalmente o script como estava, para xfce usando zenity (eu acho), já que o que deixei acima era apenas o esqueleto que usei

          http://paste.desdelinux.net/4644

          Ele pode ser editado se tiver um bug da pasta?

          O que acontece é que tenho vários shells gráficos e não sei se vai funcionar no clean xfce, por exemplo no xubuntu

          Saudações 😀

  13.   Matias Gaston dito

    Che interessante !!! Boa contribuição !!!!!!

    Eu sou muito novo em programação, estou aprendendo BASH aos poucos ... mas algumas coisas me ocorreram e podem ou não ser úteis para você.
    Quando você diz que o script despojado tem a senha incorporada e seria imperdoável alguém abri-lo e lê-lo dali ... você propõe todo esse truque de embutir o MD5 como medida de proteção.

    O que é muito bom como um primeiro passo para tornar a vida difícil para o possível intruso, mas verifique as seguintes ideias (que podem até ser aplicadas uma em cima da outra)

    IDÉIA 1) E se você salvar a senha em um arquivo em sua máquina e não hospedá-la no script?

    EJ: em um txt coloque a chave e salve em / home / /bla/bla/key.txt
    Em seu script você chama a chave como KEY = "$ (cat $ HOME / blah / bla / key.txt)", então você joga o if $ questionkey = $ KEY, então .. etc etc

    Desta forma, você está conseguindo 3 coisas +1 vantagem:
    1) Que a senha nunca estava no script. (Você evita o MD5)
    2) O caminho onde a senha está, depende do nome de usuário. (Quem quiser abri-lo redireciona para qualquer lugar) Em 99.9% dos casos o script irá falhar.
    3) Caso deseje mais segurança, remova todas as permissões do arquivo key.txt para todos os outros usuários, exceto o seu.
    4) Vantagem: Portabilidade para alterar a senha sempre que quiser, sem editar o script. Porque a verificação é externa por meio de um arquivo.

    IDEIA 2) Que tal você ofuscar todo o script bash, para que ele nem possa ser aberto?

    Uma maneira de fazer isso é aproveitar o fato de que você precisa compilar em C.
    Então, ele introduz o script dentro de um código C que tudo o que ele faz é chamar aquele Script (mas isso está dentro do programa). Na hora de compilar ... tudo é deixado dentro e sua saída é um executável ... e não mais um script. Tem uma pessoa que já fez um “script” que faz o processo de ofuscação, que é muito prático.

    Mais informações aqui: http://es.wikibooks.org/wiki/El_Manual_de_BASH_Scripting_B%C3%A1sico_para_Principiantes/Compilar_%28ofuscar%29_BASH_scripts_con_C_-_SHC

    IDÉIA 3) E se você colocar uma condição virtual no script em que é necessária uma senha de administrador?

    Por exemplo, execute uma condição usando "sudo" e continue com o script, se não, pare.
    Desta forma, toda a proteção seria uma ponte sobre sua senha ROOT.

    Bem, nada mais ...
    Felicidades!!!!!!!! e segure BASH.

    1.    KZKG ^ Gaara dito

      HAHAHAHA Obrigado 😀
      Na verdade, agora estou usando SHA512 porque é muito melhor que MD5: https://blog.desdelinux.net/como-saber-la-suma-md5-o-sha-de-una-palabra-oracion-o-archivo/
      Bem como GPG como meio de proteção em vez de compactar com .RAR: https://blog.desdelinux.net/como-proteger-datos-con-gpg-de-forma-simple/

      O problema de colocar a senha em um arquivo diferente, é que então colocaria a senha em outro lugar, sim, mas seria em texto simples? Se eu tiver que criptografá-lo (o que é recomendado), deixo no mesmo script, bom ... duvido muuuito que alguém possa quebrar o SHA512 hahahaha (veja o primeiro link e você entenderá)

      Em relação às permissões, se alguém usa um LiveCD, pode abrir o .txt usando a raiz do LiveCD, portanto, as permissões não são inteiramente a melhor opção.

      Sobre ofuscar o código do Bash ... sim, já tinha pensado nisso e a ideia é ÓTIMA, o problema é que não sei como fazer, na verdade nem sei se dá para fazer HAHAHA.

      Oh espere ... agora eu li o resto do comentário O_O ... hehe, eu não sabia que você poderia fazer isso. Não tenho ideia de C ou C ++, mas valeria a pena tentar rs.

      Sobre a ideia 3, nada mal 😀

      Fiz várias melhorias no script desde que publiquei este post, 2 são as que mencionei nos links no início deste comentário, outra é que se você alterar qualquer caractere no script, ele será excluído. E agora eu tenho que tentar isso para ofuscar o código hahahaha.

      Obrigado pelo seu comentário e ... sim, espere um pouco, bash !!! HAHA

    2.    KZKG ^ Gaara dito

      WTF!
      Já usei o SHC… GE-NI-AL !!!! O_O

  14.   Atheus dito

    Muito bom script, hey e se você usa um verificador de raiz, para poder executar o script como sudo ./script

    Você só teria que adicionar este código no início

    http://paste.desdelinux.net/4663

    Uma saudação

  15.   Neo61 dito

    KZKG ^ Gaara, meu amigo, acho que elaborar uma explicação não é o problema, isso é bom para quem não tem tanto conhecimento. Artigos que não ensinam foram publicados aqui mesmo, eles só dão informações sobre algo que existe. Portanto, não se desculpe e deixe haver mais explicações detalhadas.

  16.   caçador dito

    Para coisas assim eu uso http://www.truecrypt.org/

  17.   Abel dito

    Alguém poderia compartilhar o script? Estou curioso e todos os links estão fora do ar. 🙁

    Obrigado.