跳至主要内容

博文

目前显示的是 三月, 2022的博文

主流VoIP应用中出现RCE漏洞

  目前世界上最流行的一些通信应用程序都使用了一个充满了安全漏洞的开源库。 这个开源的、含有大量漏洞的库与12月爆发的Apache Log4J日志库漏洞都有一个共同点:他们被各个行业广泛使用。 这个PJSIP库,是一个开源的多媒体通信库,Asterisk程序一直在使用它进行开发。Asterisk是一个企业级的、开源的PBX(专用分支交换机)工具包,在大量的工程中用于IP语音(VoIP)服务。 据Asterisk网站称,该软件每年被下载超过200万次,在170个国家的将近100万台服务器上运行。Asterisk为IP PBX系统、VoIP网关和会议服务器提供支持,它也被大量中小企业、呼叫中心、运营商和政府所使用。 周一,开发平台提供商JFrog Security披露了PJSIP的五个内存泄露漏洞。PJSIP提供了一个API,该API可以被IP电话和会议应用等IP电话应用使用。 JFrog研究人员解释说,攻击者成功利用这些漏洞后,可以在使用PJSIP库的应用程序中打开远程代码执行(RCE)的开关。 在Jfrog进行披露之后,PJSIP的维护者已经修复了这五个CVE漏洞,如下图所示。   漏洞产生的原因 在其分析报告中,JFrog研究人员解释说,PJSIP框架提供了一个名为PJSUA的库,该库为SIP应用提供了一个API。他们说, PJSUA提供了丰富的媒体处理API,我们在那里发现了五个漏洞。其中的三个漏洞是堆栈溢出漏洞,可导致RCE,它们在CVSS严重性评级表上被评为8.1。其余的两个是PJSUA API中的一个越界读取漏洞和一个缓冲区溢出漏洞,这两个漏洞都可能会导致拒绝服务攻击(DoS),这两个漏洞的CVSS评分为5.9。 含有漏洞的位置 JFrog说,那些使用PJSIP库2.12版之前的项目,如果向以下任何一个API传递攻击者控制的参数,都会受到攻击。 l  pjsua_player_create - 文件名参数必须是攻击者可控制的 l  pjsua_recorder_create - 文件名参数必须是攻击者可控制的 l  pjsua_playlist_create - 文件名参数必须是攻击者可以控制的 l  pjsua_call_dump - 缓冲区参数容量必须小于128字节 JFrog建议将PJSIP升级到2.12版本来解决这些漏洞。 这不是第一次爆发漏洞 P

生活日志 By Shanghai 20220331

 今天的继续隔离,说过了今天,浦西这边就要全面继续封闭了。这几天小区的情况也更复杂了。 小区已经有人感染了,让我们都有些像世界末日一样的。 尸毒遍地,大家都要被感染的趋势。都要发生变异。 食物已经吃的差不多了。前两天政府这边发了些下来,看是否可以再扛几天。不行的话,大家就都要暴动了吧。现在已经有些小区开始在动作了。是有失控的风险了吗?

Java 反序列化漏洞技术浅析

  一、从Java原生反序列化开始 1. 简介 自JDK1.1,为方便程序之间共享数据,Java便提供了对象序列化机制。其允许将Java对象转换为字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以后恢复成原来的对象。开发者可通过ObjectInputStream、ObjectOutputStream类来实践序列化或反序列化。 2. 原理 关注一下 序列化后的字节序列 : 根据可读部分简单观察可得, 字节序列中包含了序列化对象的类名、字段类型、字段值。不包含类的完整定义(如方法信息等...) - 造个轮子: 字节序列可视化工具 字节序列的协议官方文档文档: https://docs.oracle.com/javase/8/docs/technotes/guides/serialization/index.html https://docs.oracle.com/javase/8/docs/platform/serialization/spec/protocol.html 纯协议解析,无类加载解析可视化反序列化字节序列: SerializationProtocols - 序列化中的其他备注点: 反序列化时, 会对字节序列中涉及的类进行实例化,若在当前classpath下加载到该类,将抛出ClassNotFoundException,这对分析反序列化payload会带来一些基础阻碍。 反序列化时, 会对字节序列中的字段类型与当前classpath下的类定义做匹配,不匹配将反序列化失败,故无法通过定制字节序列伪造字段类型。 3. 攻击 当应用对外提供服务或依赖外部服务时(如Http、RPC), 一定会涉及数据交互,而交互的数据形式无论是字节流或者文本类型,均无法方便的直接进行操作,往往需要将数据转换成一个对象方便使用,此时便涉及到了反序列化行为,如之前文章提到的RMI,就使用了JDK序列化来做数据交互支持。攻击者可以对服务提交恶意反序列化字节流来实践攻击。 - 构造恶意反序列化字节序列, 复现攻击 举个例子 备注: 这里使用 ysoserial 来构造恶意字节序列, ysoserial是一个java序列化安全研究工具。在Github上可以找到。 查看恶意字节序列内容 可以看到这是一个 javax.management.BadAttributeValueExpExce

Xloader的C2网络加密分析

  Xloader 是一种信息窃取恶意软件,是 Formbook 的迭代版本,自 2016 年初以来一直在黑客论坛上被出售。2020 年 10 月,Formbook 更名为 Xloader,并进行了一些重大改进,特别是与命令和控制(C2)网络加密相关的改进。随着Xloader的到来,恶意软件的开发者也停止了出售面板的代码和恶意软件的可执行文件。当出售Formbook时,一个基于web的命令和控制(C2)面板被提供给客户,以便他们可以自行管理自己的僵尸网络。 2017 年,Formbook 的面板源被泄露,随后,Xloader 背后的攻击者转向了不同的商业模式。Xloader C2基础设施不是传播一个功能齐全的犯罪软件套件,而是出租给客户。这种“恶意软件即服务”(MaaS)的商业模式可能更有利可图,并使窃取变得更加困难。 Xloader的功能包括: 从网络浏览器和其他应用程序窃取凭证; 捕获按键信息; 截屏; 窃取存储的密码; 下载并执行其他二进制文件; 执行命令; 之前的文章已经分析了 Formbook 和 Xloader 混淆的各个方面。在这篇文章中,我们对 Xloader 的 C2 网络加密和通信协议进行了详细的分析。请注意,Xloader 是跨平台的,能够在 Microsoft Windows 和 MacOS 上运行。此分析专门针对 Windows 版本的 Xloader。 技术分析 Xloader 和 Formbook 使用 HTTP 与 C2 服务器通信。 HTTP GET 查询作为一种注册形式发送。之后,恶意软件向 C2 发出 HTTP POST 请求,以窃取屏幕截图、被盗数据等信息。在这两种情况下,GET 参数和 POST 数据共享相似的格式并被加密,如下图所示,我们将解释以下部分中的加密算法。 Xloader C2 通信捕获 诱饵和真实的C2服务器 在整个Xloader恶意软件有多个结构的加密块的数据和代码,这些块旨在通过使用函数序言 push ebp 和 mov ebp, esp 的汇编指令来混淆恶意软件分析人员和反汇编程序,如下图所示。我们将这些结构命名为 PUSHEBP 加密块。这些块使用基于 RC4 的算法结合编码层和自定义虚拟机 (VM) 进行解密。 Xloader PUSHEBP 加密块 其中一个 PUSHEBP 块包含加密字符串和诱饵

俄乌热战背景下的NODE-IPC供应链投毒攻击

  一、情报背景 Node-ipc是使用广泛的npm开源组件,其作者出于其个人政治立场在代码仓库中进行了投毒,添加的恶意js文件会在用户桌面创建反战标语。根据进一步的深挖,该作者还曾在仓库中加入将俄罗斯与白俄罗斯区域用户数据抹除的恶意代码,但在随后改为看起来更温和的手段。目前各大开源组件托管商(例如npmmirror)已采取行动封杀恶意版本。Vue.js生态中的vue-cli包、开发工具Unity Hub也受到了该事件的波及,并通过更新进行处理。该事件是继color.js事件后又一开发者发起的供应链攻击事件,已经被分配CVE编号CVE-2022-23812,事件影响还在继续中。 组织名称 无 战术标签 初始访问,影响 技术标签 供应链投毒,开源组件,信任关系滥用(T1199) 情报来源 https://snyk.io/blog/peacenotwar-malicious-npm-node-ipc-package-vulnerability/ 二、 攻击技术分析 亮点一:隐匿于间接依赖的开源组件投毒 攻击阶段一: Node-ipc项目的维护者RIAEvangelist在3月7日在Node-ipc开源仓库中引入了覆写俄罗斯与白俄罗斯区域用户的磁盘文件的恶意代码,受影响版本为10.1.1和10.1.2。 第一阶段的攻击中,攻击者利用api.ipgeolocation.io的API获取用户所在区域,对指定区域执行恶意代码。但由于该做法过于直接露骨,或是攻击者意识到抹除文件这一极端行为将会承受极大的法律风险,在之后的版本中移除了该磁盘覆写的功能。 // 利用公开API获取用户所在区域(key已失效) const n = "https://api.ipgeolocation.io/ipgeo?apiKey=ae511e1627824a968aaaa758a5309154" ;    https.get(n.toString( "utf8" ), function (t) {        t.on( "data" , function (t) {             try {                 const s = JSON.parse(t.toString( "utf8&qu