Python中如何防范Package钓鱼攻击
前几天,我在 PyPI 上投放了 20+ 个 evil package,用于统计随意安装 package 同学的信息。
Python中如何防范Package钓鱼攻击
如何防范?
帖子标题问的是Python里怎么防Package钓鱼攻击,这问题挺关键的,尤其是在用pip装包的时候。核心就两点:验证包的来源和检查包的内容。
最直接的办法就是只用官方源。别乱加来路不明的--index-url。用公司内网的私有源也行,但得确保管理员把好了关。
对于要装的包,上PyPI官网查一下总没错。看看项目主页、维护者、下载量,还有README。如果是个新包或者维护者没名气,就得留个心眼。
更硬核一点,可以用pip的--hash选项。在requirements.txt里这么写:
# requirements.txt
requests==2.31.0 \\
--hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1
这样pip安装时会核对哈希值,文件被篡改了就装不上。
自己写脚本自动化检查也是个路子。比如,用pip-audit扫已知漏洞,用bandit查代码安全问题。下面是个简单的检查脚本框架:
import subprocess
import sys
def install_and_audit(package_spec):
# 1. 安装包
subprocess.check_call([sys.executable, "-m", "pip", "install", package_spec])
# 2. 用pip-audit检查漏洞 (需要先安装pip-audit)
try:
result = subprocess.run(["pip-audit"], capture_output=True, text=True)
print("漏洞审计结果:")
print(result.stdout)
if result.returncode != 0:
print("警告:发现漏洞或审计失败", file=sys.stderr)
except FileNotFoundError:
print("未安装pip-audit,跳过漏洞扫描")
# 3. 用bandit检查已安装包的代码 (需要先安装bandit)
# 这里以检查当前环境site-packages中该包为例,逻辑较复杂,通常直接扫描项目目录
# 此处仅示意
print("\n提示:建议使用 'bandit -r /path/to/your/project' 进行代码安全扫描")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("用法: python check_package.py <package_spec>")
sys.exit(1)
install_and_audit(sys.argv[1])
总结:核心就是只信可靠来源,安装前做点基本调查。
除非每个新 package 新上 pypi 时大家 review vote (或者专人审核)
原来都是你们这些人把好名字都注册了。
浪费。 (这里就不骂人了,简直污染社区
想起了 Arch Linux AUR 仓库的 vote 和 comment 机制
前几页看到了 baidu \ stanford \ jd 的 ?
不如提供一下完整的数据包?大家爬起来也很费事啊。
npm 应该也有类似的问题吧?
删除会释放名字
好奇有没有人测试过 homebrew cask
apt-get install jq
for i in seq 0 20 10685; do curl -s ‘http://evilpackage.fatezero.org/json?order=asc&offset=’$i |jq -r ‘.rows|map([.ip,.username,.hostname,.language,.package]|join(","))|join("\r\n")’; done
暴露 ip 有点过了。。
希望可以引起官方和用户的重视
之前写了两个库,结果最开始想的名字全都被占了,不过好歹别人先来的也就不说啥了,不过楼主这种做法确定不是恶意扰乱社区?
有意思
之前就觉得 PyPI 这种放任上传的方式有点太懒散了,可能会出事. 个人觉得这个锅作者背一半, PyPI 也应该背一半.
那大概就是网络实名制和专人审核制的原因?
光荣榜列出 pypi 的用户名和 ip ?你是会玩的
这些 ip 可以利用起来
让我想起最近知乎上看到的,还有这种操作的帖子
只想说楼主会玩
pypi 已经发生过这样的事了,为什么不补救
防不慎防,尤其是这种陶瓷名字的,很多人真的会不注意
所以骂谁呢?骂热衷发现问题还指出问题所在的人?
我给你讲,宝宝 你会被打的~
brew cask 不是要审核的吗
楼主域名不错
我感到很惊讶, 原来可以不用审核就可以上线啊?
是的,不用任何审核,随便传
楼主会玩儿 666
不错,pip / npm / gem 都可以搞起来
把 ip 都放出来过分了吧。。真正该上榜的是你们这些 evil package
搞事情也是有所为有所不为的
你这样的分分中被社区 dalao 吊打
域名赞
真是个大胆的想 /做法
用户名频率最高的果然是 root
IP 属于 PII, 在公司数据库里都是非常敏感的数据. 建议楼主不要这样公布这些数据.
初略的统计了下 PyPI 上的数据:
import names: 94465
package names: 83129
命名真的是个很蛋碎的事情,楼主这。。
Guido 要回一个名字都要和 pypi 那边扯皮很久,还是那个名字的项目已经很久没维护了


