V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
fate0
V2EX  ›  Python

Package 钓鱼

  •  
  •   fate0 ·
    fate0 · 2017-06-01 21:53:48 +08:00 · 4995 次点击
    这是一个创建于 2732 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前几天,我在 PyPI 上投放了 20+ 个 evil package,用于统计随意安装 package 同学的信息。

    详细的记录在 http://blog.fatezero.org/2017/06/01/package-fishing/

    第 1 条附言  ·  2017-06-03 11:47:24 +08:00

    提一下我是怎么被 PyPI 官方发现的,原因非常简单, 我之前每个 evil package 都是用同一个 cookiecutter 模版生成, 而每个模版的 short desc 都是 just for fun : ),所以在 PyPI 首页 刷了一排 just for fun : )。 就是因为这样简单的理由被发现。

    但是如果,我为每个 evil package 准备不同模版,为每个 evil package 准备文档, 为每个 evil package 准备不同的 PyPI account 上传,每次上传使用不同 ip,在 PyPI 没有审核机制的情况下, 是很难将所有的 evil package 一网打尽,只能靠别人 report。

    所以防御方案就完全不可能期待 PyPI 会做什么,只能提升自我对信息安全意识,对 PyPI 上不熟悉的项目一律采取不可信的态度, 意识到随意 pip install 就和随意的执行 exe 一样危险。

    另外觉得名字被抢的同学,如果你的项目非常厉害,然后发现别人已经在 PyPI 上注册了个和你一样的名字占坑,你是可以直接找 PyPI 管理员去要回 package 名字,前提是你的项目非常厉害。其实 PyPI 里占坑的项目远远要比 Node.js 之类的要少非常多。

    至于 ip 信息,之前我一直都觉得 username 和 hostname 才是比较敏感的信息...

    ip 不隐藏是因为:

    • 我觉得这样的攻击并非主动攻击,很难针对性的再对同一个 ip 进行攻击。
    • 有些公司安全部门需要知道自己公司出口 ip 是否在列表之内。
    • 有些 ip 属于个人家庭 ip

    至于说要收集 evil package 列表的同学,我只能说加油,我支持你。

    36 条回复    2017-06-08 19:15:03 +08:00
    ic3z
        1
    ic3z  
       2017-06-01 22:30:19 +08:00
    如何防范?
    sobigfish
        2
    sobigfish  
       2017-06-01 22:49:46 +08:00
    除非每个新 package 新上 pypi 时大家 review vote (或者专人审核)
    Kilerd
        3
    Kilerd  
       2017-06-01 22:52:11 +08:00   ❤️ 11
    原来都是你们这些人把好名字都注册了。

    浪费。 (这里就不骂人了,简直污染社区
    nujabse
        4
    nujabse  
       2017-06-01 23:50:53 +08:00 via Android
    想起了 Arch Linux AUR 仓库的 vote 和 comment 机制
    voocel
        5
    voocel  
       2017-06-01 23:50:57 +08:00
    会玩
    0915240
        6
    0915240  
       2017-06-01 23:53:53 +08:00
    前几页看到了 baidu \ stanford \ jd 的 ?
    66CCFF
        7
    66CCFF  
       2017-06-02 00:17:42 +08:00
    不如提供一下完整的数据包?大家爬起来也很费事啊。
    Shura
        8
    Shura  
       2017-06-02 00:24:18 +08:00 via Android
    npm 应该也有类似的问题吧?
    RqPS6rhmP3Nyn3Tm
        9
    RqPS6rhmP3Nyn3Tm  
       2017-06-02 00:35:40 +08:00 via iPhone
    @Kilerd 删除会释放名字
    Kirscheis
        10
    Kirscheis  
       2017-06-02 01:57:26 +08:00
    好奇有没有人测试过 homebrew cask
    anoymoux
        11
    anoymoux  
       2017-06-02 02:21:16 +08:00   ❤️ 1
    @66CCFF
    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
    Trim21
        12
    Trim21  
       2017-06-02 03:26:46 +08:00 via iPad
    暴露 ip 有点过了。。
    zhangneww
        13
    zhangneww  
       2017-06-02 07:13:02 +08:00 via Android
    希望可以引起官方和用户的重视
    laike9m
        14
    laike9m  
       2017-06-02 08:24:33 +08:00 via Android
    之前写了两个库,结果最开始想的名字全都被占了,不过好歹别人先来的也就不说啥了,不过楼主这种做法确定不是恶意扰乱社区?
    wormcy
        15
    wormcy  
       2017-06-02 08:36:52 +08:00 via Android
    有意思
    xiaket
        16
    xiaket  
       2017-06-02 08:39:31 +08:00
    之前就觉得 PyPI 这种放任上传的方式有点太懒散了,可能会出事. 个人觉得这个锅作者背一半, PyPI 也应该背一半.
    imlonghao673
        17
    imlonghao673  
       2017-06-02 09:27:52 +08:00 via Android
    那大概就是网络实名制和专人审核制的原因?

    光荣榜列出 pypi 的用户名和 ip ?你是会玩的
    prasanta
        18
    prasanta  
       2017-06-02 09:36:59 +08:00
    这些 ip 可以利用起来
    7654
        19
    7654  
       2017-06-02 09:48:09 +08:00
    让我想起最近知乎上看到的,还有这种操作的帖子
    只想说楼主会玩
    pypi 已经发生过这样的事了,为什么不补救
    Jacky001
        20
    Jacky001  
       2017-06-02 10:01:17 +08:00
    @ic3z 防不慎防,尤其是这种陶瓷名字的,很多人真的会不注意
    t333st
        21
    t333st  
       2017-06-02 10:03:49 +08:00
    @Kilerd 所以骂谁呢?骂热衷发现问题还指出问题所在的人?
    yzmm
        22
    yzmm  
       2017-06-02 10:03:50 +08:00
    我给你讲,宝宝 你会被打的~
    aristotll
        23
    aristotll  
       2017-06-02 10:15:13 +08:00
    @Kirscheis brew cask 不是要审核的吗
    bertonzh
        24
    bertonzh  
       2017-06-02 10:29:04 +08:00
    楼主域名不错
    recall704
        25
    recall704  
       2017-06-02 10:31:17 +08:00
    我感到很惊讶, 原来可以不用审核就可以上线啊?
    Kilerd
        26
    Kilerd  
       2017-06-02 10:55:50 +08:00 via iPhone
    @recall704 是的,不用任何审核,随便传
    wujunze
        27
    wujunze  
       2017-06-02 11:53:29 +08:00
    楼主会玩儿 666
    jhsea3do
        28
    jhsea3do  
       2017-06-02 12:17:10 +08:00
    不错,pip / npm / gem 都可以搞起来
    xcodebuild
        29
    xcodebuild  
       2017-06-02 12:27:56 +08:00
    把 ip 都放出来过分了吧。。真正该上榜的是你们这些 evil package
    icedx
        30
    icedx  
       2017-06-02 12:46:43 +08:00
    搞事情也是有所为有所不为的
    你这样的分分中被社区 dalao 吊打
    HGladIator
        31
    HGladIator  
       2017-06-02 12:56:32 +08:00
    域名赞
    xiongbiao
        32
    xiongbiao  
       2017-06-02 13:15:40 +08:00
    真是个大胆的想 /做法
    wizardoz
        33
    wizardoz  
       2017-06-02 13:20:53 +08:00
    用户名频率最高的果然是 root
    aifreedom
        34
    aifreedom  
       2017-06-03 02:37:56 +08:00
    IP 属于 PII, 在公司数据库里都是非常敏感的数据. 建议楼主不要这样公布这些数据.
    Damnever
        35
    Damnever  
       2017-06-03 10:14:31 +08:00
    初略的统计了下 PyPI 上的数据:

    import names: 94465
    package names: 83129

    命名真的是个很蛋碎的事情,楼主这。。
    arischow
        36
    arischow  
       2017-06-08 19:15:03 +08:00 via iPhone
    Guido 要回一个名字都要和 pypi 那边扯皮很久,还是那个名字的项目已经很久没维护了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   992 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 19:46 · PVG 03:46 · LAX 11:46 · JFK 14:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.