推荐学习书目
› 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 · Jun 1, 2017 · 6336 views
    This topic created in 3441 days ago, the information mentioned may be changed or developed.

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

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

    Supplement 1  ·  Jun 3, 2017

    提一下我是怎么被 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 replies  •  2017-06-08 19:15:03 +08:00
    ic3z
    ic3z
    Jun 1, 2017
    1
    如何防范?
    run2
    run2
    Jun 1, 2017
    2
    除非每个新 package 新上 pypi 时大家 review vote (或者专人审核)
    Kilerd
    Kilerd
    Jun 1, 2017❤️11
    3
    原来都是你们这些人把好名字都注册了。

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

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

    import names: 94465
    package names: 83129

    命名真的是个很蛋碎的事情,楼主这。。
    arischow
    arischow
    Jun 8, 2017 via iPhone
    36
    Guido 要回一个名字都要和 pypi 那边扯皮很久,还是那个名字的项目已经很久没维护了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1534 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 100ms · UTC 23:02 · PVG 07:02 · LAX 15:02 · JFK 18:02
    ♥ Do have faith in what you're doing.