小米编译并分类
量子位报告|官方帐户
它已成为世界上最受欢迎的编程语言之一。原因当然是简洁且易于使用的脚本语法。您只需要将程序放入.py文件中并快速运行即可。
语言很容易开始使用模块。例如,如果您编写一个模块,则只需在调用此模块的程序中添加一行即可。

该设计的优点是初学者可以很容易地执行命令。但是对于攻击者来说,这相当于为恶意程序打开后门。
特别是一些初学者将在线软件包和代码下载到本地〜/文件夹,并在此路径下直接运行命令。这将为计算机带来巨大的隐藏危险。
停止尝试方便
为什么这样做是危险的?首先,我们需要了解为该计划的安全操作所需的三个条件:
系统路径上的每个条目都位于安全的位置;
“主脚本”所在的目录始终在系统路径中;
如果命令使用-c和-m选项,则可以使用呼叫者安全的目录。
如果正确运行,则安装目录之外的唯一位置和安装目录将自动添加到系统路径中,这是当前主程序的安装目录。

这是安全危害的根源。这是一个告诉您原因的示例。
如果您在 /usr /bin文件夹中安装pip并运行pip命令。由于 /usr /bin是系统路径,因此这是一个非常安全的地方。
但是,有些人不喜欢直接使用PIP,而是喜欢致电/路径/对/-M PIP。
这样做的优点是,它可以避免设置环境变量$路径的复杂性,对于用户,它还可以避免处理各种EXE脚本和文档的安装。
因此,问题在于,如果您在下载文件中有一个名为pip.py的文件,那么您将替换系统自己的PIP并接管您的程序。
下载文件夹不安全
例如,您没有从PYPI下载轮子文件,而是直接从下载了它。您键入以下命令以安装它很自然:
~$ cd Downloads
~/Downloads$ python -m pip install ./totally-legit-package.whl
这似乎是一件非常合理的事情。但是您不知道的是,它很有可能访问带有XSS的站点,并将带有恶意软件的pip.py带入下载文件夹。
这是恶意攻击软件的演示示例:
~$ mkdir attacker_dir
~$ cd attacker_dir
~/attacker_dir$ echo 'print("lol ur pwnt")' > pip.py
~/attacker_dir$ python -m pip install requests
lol ur pwnt
你看过吗?该代码生成pip.py并接管程序而不是系统的PIP。
设置$也不安全
如前所述,仅调用系统路径,虚拟环境路径和当前的主程序路径。
您可能会说,然后我将手动设置$环境变量,而不会将当前目录放在环境变量中。那不是安全吗?
不!不幸的是,您可能会遇到另一种攻击方式。让我们模拟一个“脆弱”程序:
# tool.py
try:
import optional_extra
except ImportError:
print("extra not found, that's fine")
然后创建2个目录:和。将上述程序放入。然后CD将复杂的恶意软件放在此处,并将其名称更改为by tool.py的模块:
# optional_extra.py
print("lol ur pwnt")
让我们运行它:
~/attacker_dir$ python ../install_dir/tool.py
extra not found, that's fine
到这里是一件好事,没有任何问题。
但是这个习语有一个严重的缺陷:当您第一次称呼它时,如果$以前是空或不设置的,它将包含一个空的字符串,该字符串被解析到当前目录中。
让我们再试一次:
~/attacker_dir$ export PYTHONPATH="/a/perfectly/safe/place:$PYTHONPATH";
~/attacker_dir$ python ../install_dir/tool.py
lol ur pwnt
你看过吗?恶意脚本接管了该程序。
出于安全原因,您可能认为可以清除$,对吗?幼稚的!仍然不安全!
~/attacker_dir$ export PYTHONPATH="";
~/attacker_dir$ python ../install_dir/tool.py
lol ur pwnt
这里发生的事情是$变为空,这与不设置不同。
因为在,os..get(“”)==“”和os..get(“”)==没有不同的地方。
如果要确保从外壳中清除$,则需要使用UNSET命令对其进行处理,并且可以。
设置$曾经是建立开发环境的最常见方法。但是最好将来不要使用它,因为它可以更好地满足开发人员的需求。如果您设置了过去的$,那么删除它是一个很好的机会。
如果您确实需要在外壳中使用它,请使用以下方法:
export PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}new_entry_1"
export PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}new_entry_2"
在bash和zsh中,$变量的值变为:
$ echo "${PYTHONPATH}"
new_entry_1:new_entry_2
这样可以确保环境变量$中没有空间和额外的结肠。
如果您仍在使用$,请确保始终使用绝对路径!
此外,直接在下载文件夹中运行同样危险。例如,〜//。ipynb也可以将恶意程序引入代码。
预防措施
最后,让我们总结关键点。
如果您想在下载文件夹中使用书面工具〜/,请养成良好的习惯,并使用PIP所在的路径/路径/到/venv/bin/pip,而不是输入/路径/到/venv/bin/-m pip。
避免使用〜/作为当前工作目录,并在开始之前将要使用的任何软件移至更合适的位置。

知道在哪里获取执行代码非常重要。让他人能够执行任意命令的能力等同于给他对您的计算机的完全控制!
我希望以上文本对初学者有帮助。
原始链接:
- 超过-
本文是帐户[量子位]签署的新闻特殊内容激励程序的原始内容。未经帐户授权,禁止将其繁殖。
每天5分钟抓住行业的发展机会
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。


客服1