接收任意文件有多安全?


77

有时,当我cat误将一个二进制文件时,终端混乱了。很快reset就无法解决,但是从理论上讲,攻击者无法创建一个文件,当该文件显示在终端上时,该文件将执行一些任意代码吗?通过终端仿真器中的漏洞利用或其他方式。


3
有时,当我这样做时,我的shell会在末尾说“ <garbage> unknown command”。这使我想知道这是否真的可能。
基思

5
终端仿真器有很多利用,例如linuxsecurity.com/content/view/104657securityfocus.com/bid/6936/discuss,因此不必特别安全
Ulrich Dangel 2013年

1
这就是为什么最好使用会破坏二进制文件的东西(如more)或具有终端意识的东西(less)检查文件内容的原因。这不仅不会使您的终端处于怪异状态,而且整个文件也不会一shot而就。
Blrfl 2013年

stty sane命令重置已切换到例如不同字符集的xterm(或类似名称)。
托尔比约恩Ravn的安德森

mosh文档对此有一些想法:mosh.mit.edu/#techinfo
Max Ried

Answers:


34

是否可以利用这种输出取决于终端程序,并且该终端做什么取决于所发送的转义码。我不知道具有此类可利用功能的终端程序,现在唯一的问题是如果有未知的缓冲区溢出或类似的东西可以被利用。

对于某些较旧的hardware终端,当您通过在硬件中存储该按键的命令序列来对具有此类转义序列的功能键进行编程时,可能会出现问题。您仍然需要物理按键来激活它。

但是总是有人(正如Hauke这样严格地标记为“ braindead”),如果它为他们解决了一个问题,但他们不了解他们造成的漏洞,他们总是愿意添加这样的功能。根据我在开放源代码软件方面的经验,由于有很多人在看代码,因此与封闭源代码相比,这种情况不太可能发生。(我记得,在Silicon Grahpics的Irix的邮件程序中,九十年代中期,您可能包括要在接收方机器上执行的命令,可执行文件的真实路径等。)


3
“您可以包括要在接收方计算机上执行的命令”您的意思是类似于在电子邮件VBScript中包括调用Windows Scripting Host的内容?:)
CVn

不完全是,您可以启动计算机上已经存在的可执行文件,例如播放声音。我既不记得确切的语法(大约20年前),也不记得是否可以在设置中关闭该“功能”。尽管可以自动播放存储在网络中的视频,但我们还是很有趣。
Anthon

您不是在谈论NeWS吗?IIRC SGI是最后的坚持者之一。
luser droog

@luserdroog不,这是Irix
Anthon

1
@Anthon我不确定是否仍然可行,但是可以使用转义码使终端“重复” write命令中的文本,从而以拥有终端的用户身份执行命令/脚本。据推测,这是为什么许多人建议mesg -n大多数时候root 始终为用户关闭消息的原因。AFAIK,实际上已经完成了-尽管我不知道它是否曾经被利用过。因此cat可以执行来自ted可执行文件的随机文本。
Baard Kopperud 2013年

33

如果大多数终端仿真器收到某些转义序列,则它们将返回一些响应(请参阅xterm控制序列文档)。例如,您可以将其发送\e[0c到类似VT100的仿真器,它将发送回设备属性,例如\e[?1;2c (这可能是Keith观察到的结果)。但是这些答案不是任意字符串。但是,2c在系统中的某个位置命名可执行文件会致命的事情还是个坏主意。

更新:由于设置xterm窗口标题并使用适当的转义序列发送标题的可能性,风险实际上比我想象的要大(http://www.securityfocus.com/bid/6940/) 。与上面的示例相比,标题可以是几乎任意的字符串。


这已经使它非常接近。
Gunchars

还有一个更老的功能-“应答信息”,用于响应ENQ(Ce)字符而发送。在真实的VT100上,它是由用户在终端的SETUP菜单中设置的;也许有些终端仿真器允许远程设置它...
sendmoreinfo

16

这会更改GNOME Terminal 3.6.1中的终端标题,除非被PS1之类的东西覆盖:

printf "\033]2;Script Kiddie was here\007"

现在打开一个新的GNOME Terminal窗口来测试cat版本:

printf "\033]2;Script Kiddie was here\007" > test.bin
cat test.bin

是的,这也设置了终端标题。

过去使用转义码存在一个安全问题,导致标题打印到命令行,因此您可以有效地创建一个文件,在cated版本中可以打印该文件(我不确定是否可以在其中放置换行符)任意命令。哎哟!


8

虽然使用cat可能不会导致代码执行,但转义代码将得到处理,因此您很容易被误导认为该脚本实际上是恶意的,因此是无害的。

这是您可以运行的示例命令,该命令将创建“恶意” shell脚本:

echo -e '#!/bin/sh\necho "...doing something bad here..."\nexit\n\033[A\033[Aecho "Hello dear reader, I am just a harmless script, safe to run me!"' > demo.sh
chmod a+x demo.sh

当您检查文件时,它似乎无害:

$ cat demo.sh
#!/bin/sh
echo "Hello dear reader, I am just a harmless script, safe to run me!"

但是您是否应该实际运行它...

$ ./demo.sh 
...doing something bad here...

该脚本通过包含原始转义代码来将光标向上移动几行而起作用,因此脚本的其余部分被写在恶意代码的顶部,将其隐藏。

几乎任何其他程序都会显示脚本的含义。只有不处理文件的内容(如节目catmoreless -r)会产生误导输出。

请注意,tail并且head还会产生相同的误导性输出。因此,使用“ + F”比“ -F”更安全。


这是相当有问题的...您可以通过运行echo $(cat demo.sh)cat demo.sh | grep . --color=yes(或注:--color=yes此处显示的是“恶意”代码)或内置插件来查看实际发生的情况cat -v demo.sh
查理

是非题,这是一个不同问题的答案:cat显示文件内容的可信度如何。
Incnis Mrsi 2015年

@IncnisMrsi:这实际上不是另一个问题的答案。此答案警告cat将显示转义码,并提供了仅包含一种转义码的简单示例,但还有许多其他类型。当与某些终端结合使用时,它们可以重新映射密钥,覆盖文件,并且从理论上讲甚至可以执行命令。因此,一旦意识到了显示转义码的危险,您就会明白cat,如所提问题,它有时对任意文件都是不安全的!
Malvineous

6

我肯定经历过xterm将任意字符插入自身的感觉,就像我键入它们一样。有时这显然包括换行符,所以我得到ngwerm:0riu: command not found了回应。我看不出有人为什么不能制作将发送特定有害命令的文件。因此,是的,至少某些终端容易受到任意影响的攻击。


2

嗯,终端仿真器基本上只是打印出发送给它的字符。

除了简单地在当前位置上打印字符外,其他任何操作(例如设置新位置,更改颜色,更改标题等)都可以通过转义序列来完成。

受支持的转义序列集通常由定义明确的标准(如ANSI)组成,该标准未定义启动其他进程的方式。尽管可以实现这样的序列,但是我不知道有任何终端仿真器有意允许这样的事情。

理论上,可能会使用诸如缓冲区溢出之类的错误来触发任意功能。但这在几乎所有其他二进制文件中也是可能的。


0

通常,通常没有任何风险来吸引任意文件。我通常用于分析文件的方法是执行以下操作:

$ file <mystery file>
$ strings <mystery file> | less

上面的内容使我可以通过file命令确定文件的类型,并且该strings命令使我可以从不确定二进制文件的潜在二进制文件中转储任何可识别的字符串。

文件输出
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
字符串输出
$ strings /bin/ls|less
...
across
vertical
single-column
force
never
auto
if-tty
slash
%b %e  %Y
%b %e %H:%M
long-iso
main
posix-
sort_files
?pcdb-lswd
dev_ino_pop
Try `%s --help' for more information.
Usage: %s [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort.
Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
...

3
在未知文件上运行字符串也会产生问题。lcamt​​uf.blogspot.fi/2014/10/...
扬Wikholm

@IncnisMrsi-阅读第一句话!!!!
slm

好的,撤回我先前的声明,答案很简短,使用令人困惑的术语,毫无根据,而且显然是不完整的。请注意,在安全性方面,“任意”≠随机分布在您喜欢的操作系统中。
Incnis Mrsi 2015年
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.