关于PackjPackj是一个强大的代码安全检测工具,本质上是一个命令行界面工具套件,可以帮助研究人员检测软件代码包潜在的恶意或高风险旨在减轻软件供应链攻击的风险代码。该工具支持识别当前流行的开源软件管理工具,如NPM、RubyGems、PyPI等提供的软件代码包。借助这个工具,我们可以持续审查软件包并获得免费的风险评估报告。工具下载由于该工具是基于Python3开发的,我们首先需要在本地安装并配置Python3环境。接下来使用如下命令将项目源码克隆到本地:gitclonehttps://github.com/anil-yelken/Vulnerable-Soap-Service.gitPackj提供了如下工具:Audit:用于检测高危属性;沙箱:安全安装软件包的环境;$python3main.py--helpusage:main[options]argsoptions:audit审计一个包是否存在恶意软件/风险属性"属性,可能使他们容易受到供应链攻击的因素。例如,包含过期电子邮件(缺少2FA)的包裹、过长的发布间隔、敏感的API或访问权限问题等。该工具支持审计以下内容:多个包:python3main.py-ppypi:requestsruby??gems:overcommit依赖文件:python3main.py-fnpm:package.jsonpypi:requirements.txt我们还可以运行Docker/Podman执行容器中的审计操作:$dockerrun-v/tmp:/tmp/packj-itossillate/packj:latestaudit--trace-pnpm:browserify[+]从npm中获取'browserify'...OK[ver17.0.0][+]检查版本...警报[598天前][+]检查发布历史...确定[484版本][+]检查发布时间间隔...确定[自上次以来68天发布][+]正在检查作者...OK[mail@substack.net][+]正在检查电子邮件/域有效性...ALERT[过期的作者电子邮件域][+]正在检查自述文件...OK[26838字节][+]正在查看主页...OK[https://img.ydisp.cn/news/20220922/3jswuogb4di正在查看下载...OK[2.2Mweekly][+]正在查看repo_urlURL...OK[https://github.com/browserify/browserify][+]正在检查回购数据...OK[stars:14077,forks:1236][+]检查repo活动...OK[commits:2290,贡??献者:207,标签:413][+]检查CVEs...OK[未找到][+]正在检查依赖项...警报[已找到48个][+]从npm下载软件包“browserify”(版本17.0.0)...确定[163.83KB][+]正在分析代码...警报[需要3个perms:进程、文件、codegen][+]检查文件/函数...确定[429个文件(383.js),744个函数,LoC:9.7K][+]安装包和跟踪代码...确定[发现['process','files','network']系统调用]================================================[+]发现5个风险,包裹不受欢迎!=>完整报告:/tmp/packj_54rbjhgm/report_npm-browserify-17.0.0_hlr1rhcz.json{“不受欢迎”:[“旧包:598天”,“无效或没有作者电子邮件:过期的作者电子邮件域”,“生成新的codeatruntime","readsfilesanddirs","forksorexitsOSprocesses",]}package沙盒安装Packj提供了一个轻量级的沙盒环境,可用于安全地安装和测试软件包。具体来说,它可以防止恶意包提取敏感数据、访问敏感文件(如SSH密钥)、植入持久性恶意软件等。操作命令如下:$python3main.pysandboxgeminstallovercommit获取:overcommit-0.59.1.gem(100%)通过在Git存储库中运行overcommit--install来安装挂钩已成功安装overcommit-0.59.1解析overcommit-的文档0.59.1Installingridocumentationforovercommit-0.59.1##############################查看汇总活动#############################[+]网络连接[+]DNS(1个IPv4地址)在端口53[规则:允许][+]ruby??gems。org(4个IPv6地址)在端口443[规则:不支持IPv6规则][+]ruby??gems.org(4个IPv4地址)在端口443[规则:允许][+]文件系统更改/└──home└──ubuntu└──.ruby├──gems│├──iniparse-1.5.0[新:DIR,15个文件,46.6K字节]│├──rexml-3.2.5[新:DIR,77个文件,455.6K字节]│├──overcommit-0.59.1[new:DIR,252files,432.7Kbytes]│└──childprocess-4.1.0[new:DIR,57files,141.2Kbytes]├──缓存│├──iniparse-1.5.0.gem[新:FILE,16.4K字节]│├──rexml-3.2.5.gem[新:FILE,93.2K字节]│├──childprocess-4.1.0.gem[新:文件,34.3K字节]│└──overcommit-0.59.1.gem[新:文件,84K字节]├──规范│├──rexml-3.2.5.gemspec[新:FILE,2.7K字节]│├──overcommit-0.59.1.gemspec[新:FILE,1.7K字节]│├──childprocess-4.1.0.gemspec[新:FILE,1.8K字节]│└──iniparse-1.5.0.gemspec[新:FILE,1.3K字节]├──bin│└──overcommit[新:FILE,622字节]└──doc├──iniparse-1.5.0│└──ri[新:DIR,119个文件,131.7K字节]├──rexml-3.2.5│└──ri[新:DIR,836个文件,841K字节]├──overcommit-0.59.1│└──ri[new:DIR,1046files,1.5Mbytes]└──childprocess-4.1.0└──ri[new:DIR,272files,297.8Kbytes][C]ommitallchanges,[Q|q]uit&discardchanges,[L|l]ist详细信息:恶意软件检测在测试这个工具时,我们成功地在PyPI上发现了40个恶意软件包,其中一些已经被删除:$python3main.pyauditpypi:krisqian[+]Fetching'krisqian'frompypi...OK[ver0.0.7][+]正在检查版本...确定[256天前][+]正在检查发布历史...确定[7个版本][+]正在检查发布时间间隔...确定[距上次1天发布][+]正在检查作者...OK[KrisWuQian@baidu.com][+]正在检查电子邮件/域名有效性...OK[KrisWuQian@baidu.com][+]正在检查自述文件...ALERT[无自述文件][+]正在检查主页...OK[https://www.bilibili.com/bangumi/media/md140632][+]正在检查下载...OK[13weekly][+]正在检查repo_urlURL...OK[无][+]正在检查CVE...确定[未找到][+]正在检查依赖关系...确定[未发现][+]正在从pypi下载软件包“KrisQian”(版本0.0.7)...确定[1.94KB][+]分析代码...ALERT[需要3个权限:进程、网络rk,file][+]正在检查文件/函数...OK[9个文件(2.py),6个函数,LoC:184]=================================================[+]发现6个风险,包裹不受欢迎!{"undesirable":["noreadme","wonlydownloadsonly45","nosourcerepofound","generatesnewcodeatruntime","fetchsdataoverthenetwork:['KrisQian-0.0.7/setup.py:40','KrisQian-0.0.7/setup.py:50']","读取文件和目录:['KrisQian-0.0.7/setup.py:59','KrisQian-0.0.7/setup.py:70']"]}=>完整报告:pypi-KrisQian-0.0.7.json=>在https://packj.dev/package/PyPi/KrisQian/0.0.7查看预先审查的包报告,其中Packj将KrisQian(v0.0.7)标记为可疑,因为在安装包时(在setup.py中)缺少源代码库和使用敏感API(用于网络通信、代码生成)经过进一步研究和分析,我们验证了此代码包确实是安全问题。许可协议本项目的开发和发布遵循AGPL-3.0开源许可协议。项目地址Packj:【GitHub传送门】参考https://packj.dev/https://www.you*tube.com/watch?v=Rcuqn56uCDkhttps://speakerdeck.com/ashishbijlani/pyconus22-slideshttps://www.blackhat.com/asia-22/arsenal/schedule/#mitigating-open-source-software-supply-chain-attacks-26241https://www.blackhat.com/us-22/arsenal/schedule/#detecting-typo-squatting-backdoored-abandoned-and-other-risky-open-source-packages-using-packj-28075https://osseu2022.sched.com/overview/type/SupplyChainSecurityConhttps://nullcon.net/goa-2022/unearthing-malicious-and-other-risky-open-source-packages-using-packjhttps://www.you*tube.com/watch?v=PHfN-NrUCoo?https://speakerdeck.com/ashishbijlani/mitigating-open-source-software-supply-chain-attacks
