如果使用的NPM包是最新版,且发布时间小于1个月,则报异常
攻击者获取NPM包发布权限后,需要发布一个新NPM包以植入恶意代码,但安全社区往往能在一段时间内发现并发布安全通告
使用babel解析js文件,并提取出js文件访问的所有全局变量。对于操作DOM、发起网络请求的全局变量发出告警,需要手工检查这些敏感调用点是否正常
从过往的恶意代码Payload来看,攻击者外带信息都是通过fetch,还没有做什么隐藏手段
如果js文件内出现了被混淆代码的特征,则告警
过往的恶意代码中大部分经过了 obfsucator.io 这一JS混淆器处理,该混淆器产生的代码有明显特征,可以识别
如果js文件内出现 ethereum 等关键字,则直接告警
非Crypto领域的NPM包不应该出现这类关键字,但从过往的恶意代码Payload看,有时会通过 ethereum 这一全局变量窃取信息
目前支持PNPM, YARN等包管理工具,不支持处理默认的NPM包管理工具
通过对比2个分支的差异,确定NPM依赖变更,并做扫描
npx prscan branch <基础分支> <变更分支> -o <报告输出文件名, 默认输出到stdout> -r <仓库路径, 默认为当前路径>npx prscan github <PR链接> -o <报告输出文件名, 默认输出到stdout> -t <GitHub TOKEN, 公开项目不需要>