量子比特报道 | 官方账号
小查编译
量子比特报道 | 官方账号
它已经成为世界上最流行的编程语言之一,原因当然是简单易用的脚本语法,只要把程序放进.py文件里就能快速运行。
而且该语言使用模块很容易上手,比如你写了一个.py,那么在程序中只需要添加一行调用这个模块即可。
这样设计的好处是,初学者可以轻松执行命令,但对于攻击者来说,这就像是给恶意程序打开了后门。
特别是有些初学者会把网上的软件包和代码下载到本地的~/文件夹下,然后直接在这个路径下运行命令,这样会给电脑带来很大的隐患。
不要试图让事情变得简单
这为什么危险呢?首先我们需要了解程序安全运行需要满足的三个条件:
系统路径上的每个条目都位于安全的位置;
“主脚本”所在的目录始终在系统路径中;
如果命令使用 -c 和 -m 选项,则调用该程序的目录也必须是安全的。
如果您正在运行正确的安装,则除了安装目录之外,唯一会自动添加到系统路径的位置是当前主程序安装目录。
这就是安全风险的来源。下面举个例子来告诉你为什么。
如果您将 pip 安装在 /usr/bin 文件夹中并运行 pip 命令,/usr/bin 是系统路径,因此它是一个非常安全的地方。
但是有些人不喜欢直接使用pip,而更喜欢调用/path/to/-m pip。
这样做的好处是避免了设置环境变量$PATH的复杂性,同时对于用户来说,也避免了安装各种exe脚本和文档。
那么问题来了,如果你下载的文件中有一个叫pip.py的文件,那么它就会取代系统自带的pip,并接管你的程序。
下载文件夹不安全
例如,如果你直接从互联网而不是从 PyPI 下载 wheel 文件,你自然会输入以下命令来安装它:
~$
~/$-./-legit-.whl
这似乎是合理的做法。但您不知道的是,这样做可能会导致访问存在 XSS 的网站,并将含有恶意软件的 pip.py 放入您的下载文件夹中。
以下是某个恶意软件攻击软件的演示:
~$
~$
~/$echo'print(“”)'>pip.py
~/$-
你看到了吗?此代码生成一个 pip.py 并接管程序而不是系统 pip。
设置 $ 也不安全
前面说过了,只会调用系统路径、虚拟环境路径和当前主程序路径
你可能会说,那我手动设置$变量,不把当前目录放到环境变量里,这不是很安全吗?
不!不幸的是,你可能遇到了另一种攻击方法。让我们模拟一个“易受攻击”的程序:
#工具.py
尝试:
:
打印(“,那很好”)
然后创建2个目录:和。将上述程序放在其中。然后cd并将复杂的恶意软件放在这里,并将其名称更改为tool.py调用的模块:
#.py
打印(””)
让我们运行它:
〜/ $.. //工具.py
,没关系
到目前为止一切顺利,没有问题。
但是这个习语有一个严重的缺陷:第一次调用时,如果 $ 之前为空或者未设置,那么它包含一个空字符串,该空字符串被解析为当前目录。
我们再试一次:
~/$="/a//safe/place:$";
〜/ $.. //工具.py
看到了吗?恶意脚本接管了该程序。
出于安全原因,您可能会认为清除 $ 是可以的?太天真了!仍然不安全!
~/$="";
〜/ $.. //工具.py
这里发生的情况是 $ 变为空,这与未设置不同。
因为这里,os..get("") == "" 和 os..get("") == None 不一样。
如果要确定$从shell中被清除,需要先用unset命令处理一次,然后就正常了。
设置 $ 曾经是设置开发环境的最常见方式。但以后最好不要使用它,因为它会更好地满足开发人员的需求。如果您过去设置过 $,现在是删除它的好机会。
如果确实需要在shell中使用它,请使用如下方法:
=“${:+${}:}”
=“${:+${}:}”
在 bash 和 zsh 中,$ 变量的值变成:
$echo“${}”
:
这可确保环境变量 $ 中没有空格或多余的冒号。
如果您仍在使用 $,请确保始终使用绝对路径!
另外直接在下载文件夹中运行也同样危险,比如~//.ipynb,也有可能将恶意程序引入代码中。
预防
最后我来总结一下重点。
如果要使用下载文件夹~/中写的工具,请养成使用pip所在路径/path/to/venv/bin/pip的好习惯,而不是输入/path/to/venv/bin/-m pip。
避免使用 ~/ 作为当前工作目录,并在开始之前将您想要使用的任何软件移动到更合适的位置。
了解可执行代码的来源非常重要。授予某人执行任意命令的能力就相当于授予他们完全控制您计算机的能力!
希望以上内容能够对初学者的你有所帮助。
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。