被忽视的攻击面:Python package 钓鱼

本文讲的是被忽视的攻击面:Python package 钓鱼


一.概述

2017年6月2日,paper.seebug.org 收录了一篇 fate0 的《Package 钓鱼》 文章,该文章讲述了作者在 PyPI 上投放恶意的 Python 包钓鱼的过程。当用户由于种种原因安装这些恶意包时,其主机名、Python 语言版本、安装时间、用户名等信息会被发送到攻击者的服务器上。在钓鱼的后期,作者已经将 Github上的相关项目 中获取相应主机信息改成了提示用户安装恶意的 Python 包。

相比于传统的钓鱼方式,上传恶意 Python 包,不通过邮件、网页等方式传播,用户很难有相关的防护意识。与此同时,由于 Pypi 源的全球性和 Python 语言的跨平台性,相关的恶意包可以在世界各国的任意操作系统上被执行。由于执行恶意包的多数是互联网从业人员,通过恶意的 Python 包钓鱼也具有一定的定向攻击性,在原作者公布的钓鱼数据中,疑似多家知名互联网公司均有中招。试想通过如此方式进行针对全球的APT攻击,将无疑是一场灾难。

本文,就让我们聊一聊这个被隐藏的攻击面—— Python package 钓鱼。

二.Python package钓鱼简析

2.1 Python package钓鱼方式

Python 有两个著名的包管理工具 easy_install.py 和 pip 。这次我们的主角就是 pip 这个包管理工具。在 Python 语言中,需要安装第三方库时,通过命令 pip install package_name 就可以迅速安装。我们将该安装过程中的相关步骤简化成如下流程图:

可以看到,通过 pip 安装恶意的 smb 包时,最终将运行 setup.py 文件。由于任意 Python 开发者可以将自己的开发包上传至 Pypi 时,所以当上传的包名字被攻击者精心构造时,就可以达到钓鱼的目的。

例如前段时间的 samba 远程命令执行漏洞的 POC 中导入了如下包:

from smb.SMBConnection import SMBConnection  from smb import smb_structs  from smb.base import _PendingRequest  from smb.smb2_structs import *  from smb.base import *

经过查询,可以知道我们需要安装 pysmb 这个包就可以成功执行该 POC 。但是,很多安全研究人员会根据经验直接执行 pip install smb,然而 smb 这个包却是原文作者上传的恶意程序包。所以当我们执行 pip install smb 命令后,主机的相关信息就会发送至攻击者的服务器。

2.2 Pypi 上传限制绕过

原作者 fate0 还注意到一个细节,在平时使用过程中,一般通过命令 pip install –r requirements.txt 来安装整个项目的依赖文件。但是往往会错敲成 pip install requirements.txt 。

这就意味着,requirements.txt 也是一个好的恶意程序包名称。原作者据此进行研究,发现了一个上传限制绕过的方法。

在 https://github.com/pypa/pypi-legacy/blob/master/webui.py 中有如下代码段

我们可以看到 PyPI 直接硬编码这些文件名禁止用户上传同名文件。

而当用户利用 pip 安装 Python 包,PyPI 在查询数据库时会对文件名做以下正则处理

https://github.com/pypa/warehouse/blob/master/warehouse/migrations/versions/3af8d0006ba_normalize_runs_of_characters_to_a_.py

这意味者以下方式安装的将会是同一个包

基于这点,我们可以绕过 requirements.txt 等一系列包被硬编码而无法上传的限制。

PyPI 官方已对该漏洞做出回应:https://github.com/pypa/pypi-legacy/issues/644

截止发文,官方尚未发布针对该漏洞的补丁。

三.钓鱼数据分析

根据 fate0 公开的钓鱼数据,我们根据 country, language, package, username 这几个关键字来进行数据汇总,得到如下排名:

·受影响国家 TOP 10:

由上述数据可以看到,美国、中国、印度等国家纷纷中招,美国受到的影响最为严重,其次是中国及印度等国家,这也从一定程度上,反映了各个国家的互联网发展水平。

·Python版本分布排名:

从 Python 的版本分布上我们可以看到绝大多数用户都在使用 2.7、3.5、3.6 等版本,具体的来说, python2 占比 48%, python3 占比 52%。这也从侧面反映出, python3 已经开始逐渐普及。

·恶意包命中排名:

恶意包命中率最高的为 opencv、tkinter 等流行的软件,可见很多用户在安装软件包之前,没有养成检查的良好习惯,最终被钓鱼。

·以root权限安装的恶意包排名:

同时绝大多数用户是以最高权限 root 直接运行安装命令,一旦遭受钓鱼攻击,用户隐私和服务器安全将无法保障。

·主机用户排名:

对这批数据的 hostname 字段进行深入分析,我们发现此次钓鱼事件中,有56家公司、企业、组织,22所学校,3家政府单位可能受到影响,其中包括4家中国公司。值得一提的是, 2017 年全球 500 强企业有5家在此次钓鱼中可能也受到影响。(理论上 hostname 可修改,结果仅供参考)

根据 hostname 字段和 username 字段的信息对操作系统进行粗略估计,我们发现中招的系统包括:Linux、Mac、Windows、RaspberryPi 等,其中以 Mac、Linux 居多。显然,Python 的跨平台性决定了这种钓鱼攻击也是跨平台的。

·可识别的系统分布如下:

  我们还发现以下IP多次中招:

经过进一步分析,我们发现部分重复中招IP的 hostname 都相同且均符合 docker hostname 特征,同时操作权限均为 root,我们怀疑这可能是安全研究人员在借助 docker 环境对钓鱼后续行为进行跟踪分析。

四.后续钓鱼事件

在对 python package 钓鱼进行持续跟进时,有人恶意的在 PyPI 上提交了 zoomeye-dev 的 Python 安装包,,截图如下:

根据前期的分析,轻车熟路地找到关键恶意代码所在:

可以看到,当用户误安装 zoomeye_dev 这个包时,会被收集操作系统名称,主机名,用户名,Python 语言版本等系统并发送至指定地址,同时返回一个 callback 地址,如果 callback 地址非空,将从这个地址下载文件并执行。在实际的测试过程中,该 callback 地址并未返回具体内容。如果钓鱼者怀有恶意的目的,而同时我们还以最高权限 root 安装了这个恶意的包,那恶意程序就已经在我们的电脑中畅行无阻了!

目前,该恶意程序包已经被删除,从该恶意程序包被上传至 Pypi 源到被发现被删除,仅仅用时两个小时。但我们无法想象,非互联网安全公司发现自己公司的相关恶意程序包被上传到 Pypi 源上会需要多久。也许,到最终被发现的时候,已经造成了巨大的损失。

五.小结

Package 钓鱼巧妙利用了用户误操作的不可避免性以及开源仓库的松散审查,并利用流行软件名称来扩大钓鱼范围,往往这种思路的攻击比一般漏洞危害更大。就比如说这次钓鱼事件中一些网络巨头也纷纷中招,它们的安全防护能力肯定是毋庸置疑的,但谁能想到问题出在开源仓库,开源仓库一旦被污染,那么后果将是可怕的,举个例子,如果上述那个 callback 真的非空,那么渗透企业内网也并非什么难事。

仅仅是针对 Python 开源仓库平台进行钓鱼的一次尝试,影响就已经如此广泛。试想再结合Ruby等也面临着同样问题的语言,将会再次扩大潜在的攻击范围。甚至于如果公开的镜像源平台被攻陷,正常的第三方库被替换成恶意的程序包,那么通过该镜像源安装程序的主机都会受到影响。

我们可以想象如果利用其他攻击面,比如说针对开源组件的开发者进行攻击,从而控制相关开源组件代码,并在开发者未察觉的情况下长期潜伏,最终发起全球 APT 攻击,我们该如何防御?

当今世界,各种开源的软件、工具无处不在,我们在享受着自由软件所提供的便利时,是否考虑过它们的安全性?

开源本身极大的促进了信息时代的发展,但若是缺乏有效审查的开源,被不怀好意的人拿来作恶,那么杀伤力将是无法想象的。

为了世界更安全,我们一直在努力,但同时用户的安全意识才是重中之重!

原文发布时间为:2017年6月16日

本文作者:知道创宇

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-10-14 13:18:39

被忽视的攻击面:Python package 钓鱼的相关文章

关于Python Package下的Module import方式[转]

2012年有一个目标我没有达成,那就是深入学习和使用Python语言.这个目标被其他学习任务和工作无情的抢占了,当然最主要的原因还是我重视不够^_^. 近期恰逢有一些Python工程的开发工作要做,就顺便略微深入地学习了一下Python:看了几本Python的英文大部头,比如<Learning Python 4th Edition>.<Python Essential Reference 4th Edition>.<Programming Python 4th Edition

保证安全 认清五种易被忽视的攻击方式

本文将给大家展示五种不被人们特别关注的黑客攻击方式,以提醒大家在防范黑客攻击的过程中必需将它们与防范其它黑客攻击方式一样被重视,以进一步减少被黑客攻击的风险. 一.盗取密码 密码被盗取问题每年都被不断地提起,但是,就是没有多少人能吸取这些教训,以及采取实际的行动来解决这个问题.从这里可以看出,同样的安全问题之所以年年都在发生,有时并不是用户不了解,而是用户不愿意按解决它的要求去做. 现在的计算机应用当中有许多方面都在使用密码提供身份认证,但如果我们所处的网络环境中仅仅使用密码来进行身份认证,由于

python package 的两种组织方式

  方式一/package1/ .../__init__.py # 空文件   .../class1.py class Class1: def __init__(self): self.name = "class one" def printInfo(self): print("i am class One!") .../class2.py class Class2: def __init__(self): self.name = "class two&q

网络钓鱼大讲堂 Part1 | 网络钓鱼攻击定义及历史

何为网络钓鱼攻击? 首先,我们看一下网络钓鱼攻击的定义:网络钓鱼攻击(phishing与fishing发音相近)是最初通过发送消息或邮件,意图引诱计算机用户提供个人敏感信息如密码.生日.信用卡卡号以及社保账号的一种攻击方式.为实施此类网络诈骗,攻击者将自己伪装成某个网站的官方代表或与用户可能有业务往来的机构(如PayPal.亚马逊.联合包裹服务公司(UPS)和美国银行等)的代表. 攻击者发送的通信内容的标题可能包含"iPad赠品"."欺诈告警"或其他诱惑性内容.邮件

钓鱼攻击之猖獗程度已达历史新高的十项理由

冒充尼日利亚王子之类的伎俩早已过时--如今钓鱼欺诈活动已经成为极为复杂的业务体系,即使是最具经验的安全专家都有可能被其骗倒. 几十年来,网络钓鱼邮件已经成为计算机领域中的一大安全祸根,当然我们也使出了浑身解数.努力将其扼杀在摇篮当中.时至今日,大多数普通用户已经能够通过标题行意识到其邪恶本质,并在发现之后直接将其删除.而如果大家无法完全确定其性质并将其打开,那么其中过于正式的问候方式.诡异的国外发送地址.拼写错误.荒谬到无法形容的奖励内容描述乃至过于殷勤的产品推销言辞都能够让我们立刻发现其背后潜

网络钓鱼大讲堂 Part3 | 网络钓鱼攻击向量介绍

网络钓鱼攻击的目的包括: 窃取数据及金融诈骗 高级持续性威胁(APT) 恶意软件传播 网络钓鱼这种攻击方式早就存在,但至今仍受攻击者青睐.在搭建了合适的钓鱼网络.收集了信息以及放置诱饵之后,攻击者可入侵任何公司.组织甚或政府机构,造成极大破坏.实际上,时至今日,网络钓鱼仍是最有效.最受攻击者欢迎的攻击向量. 数据窃取与金融诈骗 根据PhishLabs于2016年所作研究,2015年22%的鱼叉式钓鱼攻击的动机均为金融诈骗或其他相关犯罪.通过这种攻击方式,攻击者获利颇丰,所以该类事件不胜枚举.例如

电子身份证助力打击钓鱼攻击

本文讲的是 :  电子身份证助力打击钓鱼攻击  ,  据称,去年钓鱼攻击感染了3730万人,致使网上密码盗窃增加300%.为了打击这种类型的网络攻击,伦敦大学皇家霍洛威学院的研究人员开发了一个被称为"Uni-IDM"的系统,使用户能够为他们访问的每个网站创建电子身份证. 为什么要创建电子身份证?研究人员称,因为这些身份证"可以安全地存储,当持证人想重新登录时,他们只需要简单地点击即可,数据就会发送到正确的网站." 对于有些读者来说,ID卡的概念可能听起来有些熟悉,U

Radware:防御现代鱼叉式网络钓鱼攻击的方法

在网络安全领域工作的人都知道,网络钓鱼攻击,特别是针对大型企业的网络钓鱼攻击正在崛起.由于攻击依赖的是任何可利用的人为因素,因此,攻击者对这类攻击十分青睐. 多年以来,网络钓鱼攻击在不断地发展,而在过去,这些攻击仅仅只是简单的攻击.攻击者会发送一条带有可以跳转到虚假网站的链接的信息,诱骗用户在自己的电脑上运行恶意代码.现在,网络钓鱼攻击却变得非常复杂,可以给受害者带来极其严重甚至是无法挽回的损失. 目前,反安全领域中最有效的网络钓鱼攻击就是鱼叉式网络钓鱼,该攻击可以侵入所有的防御层.近年来,多数

企业防钓鱼攻击需结合技术优势+意识

本文讲的是企业防钓鱼攻击需结合技术优势+意识,攻击者通常使用各种技术来窃取数据,包括恶意软件.篡改硬件等.然而,旨在窃取企业知识产权的更严重的间谍攻击活动并没有那么简单,攻击者会物理地窃取硬件,以用于对业务部门的员工进行社会工程攻击.根据Verizon公司2013年数据泄露事故调查报告显示,95%的间谍攻击活动涉及网络钓鱼组件,该调查对发现的47000起数据安全事故进行了调查. 对企业来说,这些调查结果凸显出他们的网络安全薄弱环节:即使是部署了近乎无处不在的反垃圾邮件技术,鱼叉式钓鱼攻击仍然能够