导读:武汉冠状病毒爆发及蔓延引发人们对全球公共卫生危机的广泛担忧,威胁行为者利用人类的恐惧情感——尤其是当一个全球性事件已经造成了恐惧和恐慌的时候进行网络犯罪。

暗影实验室在日常检测中发现了一个以“Coronavirus”命名的应用。而“Coronavirus”翻译过来就是冠状病毒的意思。威胁行为者通过将应用命名成与武汉冠状病毒相关的名字有利于博取用户的关注从而增加病毒传播感染的机率。

从Coronavirus的行为上来看,该恶意软件属于木马类病毒且具备较为详尽的窃取用户信息的功能,可定期从服务器更新加载恶意代码。除此之外该病毒还具备使用Teamviewer实现远程控制安卓设备的功能。

图片1.png

图1.1 应用图标

Coronavirus的加载方式

通过两次动态加载恶意代码的方式来完成恶意行为的执行:

(1)通过解析解密Asset目录下的json文件加载恶意代码

第一阶段加载有效负荷:

· 请求开启可访问性服务(可以自动进行各种 UI 交互并模拟用户点击屏幕上的项目)

监听处理用户点击事件,以下部分行为是通过该项服务配合完成。

 图片2.png

图2-1 遍历节点

· 从服务器下载恶意代码并配置参数设置(作为第二阶段恶意代码动态调用的参数传入。)

图片3.png 

图2-2 第二阶段加载恶意代码的参数配置

· 使用Teamviewer实现远程控制安卓设备。

图片4.png

 图2-3 远程控制安卓设备

(2)从服务器动态获取恶意代码动态加载调用,服务器地址:http://kr**l.ug/。

第二阶段加载有效负荷:

图片5.png 

图2-4  从服务器获取恶意代码

(3)解析第一阶段配置的参数信息(指令)执行窃取用户隐私信息、发送短信、呼叫转移等操作,并将窃取的隐私信息上传至服务器:http://k**ll.ug/。

表2-1 指令列表

image.png

Coronavirus自我保护手段

(1)通过加密字符串,无用函数调用来增加研究员逆向分析难度。

(2)将自身加入白名单对进程进行保活从而防止进程被系统杀死。

 图片6.png

图3-1 将应用加入白名单进行进程保活

(3)隐藏图标,用户无法通过常规方式卸载应用。当用户通过进入应用详细界面卸载应用时,打开应用列表界面使用户无法进入应用详细界面。

 图片7.png

图3-2 防止用户卸载应用

(4)绕过google GMS认证。

图片8.png 

图3-3 绕过google GMS认证

总结

Coronavirus通过“冠状病毒”安装名称以及图标吸引用户安装使用,对用户的隐私信息造成了极大的安全隐患。由于武汉冠状病毒事件仍处于热点阶段,不少不法分子会利用该热点事件制作恶意软件、发送恶意邮件或短信目的在于侵害用户隐私信息、财产。用户应该提高双重警惕,在免于遭受冠状病毒对身心健康遭受侵害的同时,谨防该类恶意软件对自身隐私财产造成损害。

安全建议

· 由于恶意软件对自身进行了保护,用户通过正常方式无法卸载。可采取以下方式卸载。

(1)将手机连接电脑,在控制端输入命令:adb shell pm uninstall 包名。

(2)进入手机/data/data目录或/data/app目录,卸载文件名带有该应用包名的文件夹,应用将无法运用。

(3)安装好杀毒软件,能有效识别已知病毒。

· 坚持去正规应用商店或官网下载软件,谨慎从论坛或其它不正规的网站下载软件。

2020新年伊始,新型冠状肺炎疫情引发全国乃至全球的关注。全国各部门、系统、单位、企业都在为防控疫情贡献力量。不久前,360发起“百城战疫”活动,全力支持各地政企单位抗“疫”工作。

在疫情面前,为保障网络空间安全人才的培养工作的顺利推进,360网络安全大学集合优势课程资源,发挥线上学习优势,打造“网络空间安全教学航母”——“360网络空间安全教育云平台”,现全面向广大学员、教师、专业人士免费开放,助力网安行业人才培养,共克时艰。

image.png

360网络空间安全教育云平台

360网络空间安全教育云平台是打造的开放性人才安全教育生态平台,为客户提供涵盖线上直播教学、录播学习、实验练习、考试测评、备课组课、意识普及、答疑互动、专家课程、安全认证以及人才对接的一站式在线人才安全教育解决方案。

360网络空间安全教育云平台秉承“大安全”和“安全大脑”的战略理念,正与越来越多的合作伙伴一起,为提升全民安全意识,培养基于防御体系下专业安全人才团队而努力,以平台为依托将提供多行业高价值的人才教育应用方案。

平台功能——十大硬核 抢鲜体验

一、直播互动:直播免费参与,大咖实时互动。

二、名师讲堂:最新热点趋势,海量学习资源。

三、保密宣贯:钓鱼真实体验,防护意识调研。

四、政企培训:专注体系构建,构筑人才防线。

五、学科教育:配套教学实训,助力知识成长。

六、专属课程:专家咨询服务,方案按需定制。

七、仿真靶场:业务靶场模拟,真实漏洞演练。

八、安全竞赛:线上攻防竞赛,万人战力支持。

九、技能认证:实践技能培养,行业资格认证。

十、综合测评:在线能力测试,评估报告解析。

image.png

战“疫”正酣——网络虚拟世界的威胁与挑战

疫情期间,有黑客利用新型冠状肺炎疫情相关热词开展的网络攻击行为。一些攻击者恶意制造传播电脑病毒,这些病毒均带有“冠状病毒”、“疫情”、“武汉” 等热门字样,病毒被激活后可使系统盘、主机被远程控制、信息被盗取以及删除操作系统核心文件导致无法开机的严重后果。360根据公众、企业、疫情抗击一线单位所面临的网络安全管理问题,推出如何防护网络疫情的专题内容,助力科学打赢网络疫情防控阻击战。

综合赋能——网络安全人才能力全面发展与提升

由360资深专家联合国内知名大学网络安全专家教授,系统深入的研发了web安全、网络安全、主机安全、恶意软件分析、渗透测试、代码审计等方面共计9大类60门人才培养体系标准化课程,目前累计达1600多个学时。培养各类网络安全人才近万人,广受好评,助力学员获得能力提升,实现网络空间安全英雄梦。

守卫城市——护航关键信息基础设施安全运行

城市正常运转离不开电力、水务、交通等关键基础设施的平稳运行,针对城市关键基础设施安全运行所涉及的工业控制系统网络安全知识,360网络安全大学面向推出目前全国最全的工业控制网络安全课程,涵盖工业控制网络安全基础、工业协议分析、工业控制系统漏洞分析、行业工业控制网络安全防护方案等内容。通过对理论知识的讲授及平台实验指导,快速掌握工业控制网络安全知识体系,进而护航城市关键信息基础设施安全运行。

直播课程——教学同乐 跃然此刻

360网络空间安全教育云平台突破知识传承时空之限,开通线上直播课程实时授课。培训行业资深网络安全讲师、360技术专家、知名高校信息安全教授线上互动教学,课中自动录制课程,云端监控课上细节,教学过程一览无遗。完善的课程管理及学习系统,让线上教学更便捷,教学效果全程量化,数据指导教学目标,为网安学员呈现更智能的全方位线上教学解决方案。

1.jpg

关注【360网络安全大学】官网并注册学习账号,点击“公开课”可解锁相关课程

官方网站:https://university.360.cn


概述

在2020年1月,FireEye连续观察到多个有针对性的网络钓鱼活动,这些恶意活动的最终目的是下载并部署MINEBRIDGE后门。此次恶意活动的目标主要针对美国的金融服务组织,这一范围比我们此前使用FireEye产品进行遥测所获得的结果要更为广泛。我们观测到,攻击者曾针对韩国的组织发动攻击,其中涉及到一家营销机构。

在这些恶意活动中,攻击者精心制作了网络钓鱼的文档,并且利用了一些公开记录的文件。但根据我们的经验,此次攻击所使用的TTP并不常见,这可能是为了降低恶意文档中的宏代码被检测出来的概率。攻击者还在多次攻击中使用了自托管的电子邮件营销解决方案。值得关注的是,在这些恶意活动中使用的Payload,其加壳工具与之前我们发现的某个威胁参与者相关联,我们将在后面进行详细讨论。

本文主要分析这些恶意活动的主题及目标,说明攻击者所采用的独特攻击手法,对MINEBRIDGE后门(C++)进行分析,揭示一些潜在的关联性。最后,通过种种蛛丝马迹,我们发现威胁参与者对说唱音乐表现出不同寻常的喜爱。

发现恶意活动

我们在2019年12月首次发现了MINEBRIDGE恶意样本,并在2020年1月初首次观察到与该恶意活动相关的网络钓鱼活动。为了开展此次攻击,攻击者专门注册了与邮件内容相一致的域名,并使用这些域名上的邮件地址发送网络钓鱼信息。

攻击者可能正在使用名为Acelle的自托管电子邮件营销解决方案。在通过Acelle平台发出的电子邮件中,都会添加格式为“X-Acelle-

我们发现,在全部恶意活动中,都使用了相同的TTP,即“Customer-Id”值均为“X-Acelle-Customer-Id: 5df38b8fd5b58”。除了这个值之外,在我们所观察到的全部恶意活动中,还具有相同的“X-Acelle-Sending-Server_Id”和“X-Acelle-Campaign-Id”值。所有消息都包含一个“List-Unsubscribe”标头,该标头提供了一个托管在45.153.184.84的链接,说明这个服务器是网络钓鱼活动所使用的Acelle服务器。我们发现的样本详细信息如下。

时间戳:2020年1月7日 16:15

发件人:[email protected]

标题:tax return file

x-acelle-subscriber-id:25474792e6f8c

x-acelle-sending-server-id:5e14a2664ffb4

x-acelle-customer-id:5df38b8fd5b58

x-acelle-campaign-id:5e14a2664ffb4

时间戳:2020年1月7日 15:59

发件人:[email protected]

标题:tax return file

x-acelle-subscriber-id:22e183805a051

x-acelle-sending-server-id:5e14a2664ffb4

x-acelle-customer-id:5df38b8fd5b58

x-acelle-campaign-id:5e14a2664ffb4

时间戳:2020年1月7日

发件人:[email protected]

标题:tax return file

x-acelle-subscriber-id:657e1a485ed77

x-acelle-sending-server-id:5e14a2664ffb4

x-acelle-customer-id:5df38b8fd5b58

x-acelle-campaign-id:5e14a2664ffb4

时间戳:2020年1月7日 16:05

发件人:[email protected]

标题:tax return file

x-acelle-subscriber-id:ddbbffbcb5c6c

x-acelle-sending-server-id:5e14a2664ffb4

x-acelle-customer-id:5df38b8fd5b58

x-acelle-campaign-id:5e14a2664ffb4

恶意文档所请求的URL与恶意活动中交付最终MINEBRIDGE Payload的URL具有重合,这些域名都使用相同的托管安全防护服务。用于下载最终Payload的URI是“/team/invest.php”或“/team/rumba.php”。在这里,我们发现了一个最有趣的相似点。在大多数情况下,如果我们对这些域名的父目录“/team/”发出GET请求,将会返回Onyx乐队的“Bang 2 Dis”歌词。由于这一返回内容非常明确,我们在这里就不具体展现歌词的内容。

综合来看,这一系列恶意活动所注册的域名相同、诱饵内容相同、恶意文档宏代码相同,并且钓鱼邮件的主题相同。自首次发现相关恶意活动以来,我们已经先后发现了3次不同的攻击活动。

攻击活动1:2020年1月7日 – 税收相关主题

· 在这一系列攻击中,攻击者使用了在2019年11月下旬注册的CPA相关域名rogervecpa.com,向目标用户发送标题为“Tax Return File”的电子邮件,在邮件正文中包含与IRS相关的文本。

· 邮件附带的Payload经过精心设计,仿冒成与H&R Block相关的报税表格。

· 该攻击活动所针对的目标是金融部门。

1.png

2.png

攻击活动2:2020年1月8日 – 营销相关主题

· 在这一系列攻击中,攻击者使用了在2019年11月下旬注册的CPA相关域名rogervecpa.com和pt-cpaaccountant.com,后一个域名同样是在2019年11月下旬注册。

· 该钓鱼邮件的标题和正文主要提供虚假的营销合作机会。

· 邮件附带的Payload使用了通用的主题,以图片方式诱导用户启用宏内容。

· 该攻击活动主要针对韩国的营销机构。

3.png

4.png

攻击活动3:2020年1月28日 – 招聘相关主题

· 在这一系列攻击中,攻击者使用了多个不同的电子邮件地址发送钓鱼邮件,这些邮箱地址都使用了与招聘主题相关的域名agent4career.com,该域名在2020年1月20日注册。

· 该钓鱼邮件的标题和正文主要伪装成具有金融相关工作经验的应聘信息。

· 邮件附带的Payload被伪装为与正文内容相匹配的金融相关工作经验应聘者的简历。

· 该攻击活动主要针对金融部门发动攻击。

5.png

6.png

详细分析恶意宏代码

在钓鱼邮件中所包含的恶意文档中,使用了许多有趣的TTP,包括利用Office GUI隐藏宏内容,以及VBA Stomping技术(删除Office文档中的VBA源代码,仅保留称为p-code的宏代码编译版本,能有效规避基于VBA源代码的恶意文档检测技术)。

VBA Stomping是一种逃避检测的技术,适用于处理恶意Office文档,使文档中所包含宏的源代码与伪代码(以下简称p-code)不匹配。为了避免重复研究同时节约读者的时间,我们将参考其他研究人员的研究成果进行讲解。首先,我们建议阅读Outflank发布的EvilClippy工具的说明文章。Walmart的安全团队还发表了关于该技术的深入研究。Vesselin Bontchev开发了一个开源的实用程序,可以从Office文档中转储p-code。我们可以利用这个工具,检查文档中与VBA源代码相分离的p-code。此外,可以使用开源分析工具包oletools,通过对VBA源代码中提取的关键字与p-code助记符进行比较,以检测是否存在VBA Stomping技术。

对于感兴趣的读者来说,我们已经列举了很多高质量的研究文章。但简而言之,我们汇总一下上述文章中的关键结论:

1、针对VBA宏中源代码进行提取的静态分析工具,可能无法有效检测使用VBA Stomping技术的恶意p-code代码。

2、在VBA源代码被删除,并且在未编译p-code的Office版本中打开文档时,宏将无法正确执行,从而导致潜在的动态分析失败。

3、如果使用与创建文档时所用的Office版本不同的VBA版本打开文档,VBA源代码将会重新编译为p-code。

4、在Office中打开文档并使用GUI查看宏时,嵌入的p-code将被反编译,以实现查看。

在这里,最后两点说明了,攻击者可以更广泛地应用此类技术,从而增强复杂性。由于EvilClippy这类工具包利用Office版本遍历的功能来解决,因此就导致其版本控制的过程变得非常复杂。攻击者使用VBA Stomping技术生成的文档中包含良性的VBA源代码,但其中的恶意p-code必须要知道创建p-code的Office版本,否则恶意文档将不能发挥作用。除此之外,在攻击者使用VBA Stomping技术生成恶意文档后,一旦用户或研究人员在Office编辑器中打开了宏的内容,他们就会直接看到恶意代码。

实际上,攻击者利用了EvilClippy实用程序的另一个功能,来规避上述问题。攻击者通过修改文档的PROJECT流,使用户或研究人员在Office中无法查看宏的源代码。我们以其中一个恶意样本(SHA-256:18698c5a6ff96d21e7ca634a608f01a414ef6fbbd7c1b3bf0f2085c85374516e)为例来详细说明。

恶意文档的PROJECT流:

ID="{33C06E73-23C4-4174-9F9A-BA0E40E57E3F}"
Document=ThisDocument/&H00000000
Name="Project"
HelpContextID="0"
VersionCompatible32="393222000"
CMG="A3A1799F59A359A359A359A3"
DPB="87855DBBA57B887C887C88"
GC="6B69B1A794A894A86B"
[Host Extender Info]
&H00000001={3832D640-CF90-11CF-8E43-00A0C911005A};VBE;&H00000000
[Workspace]
ThisDocument=0, 0, 0, 0, C
Module1=26, 26, 388, 131, Z

上面的PROJECT流已经被修改。在PROJECT流的工作空间中,引用了一个模块。然而,这个模块没有被定义。最后,我们得到在使用工具对其进行修改之前的PROJECT流:

ID="{33C06E73-23C4-4174-9F9A-BA0E40E57E3F}"
Document=ThisDocument/&H00000000
Module=”Module1”
Name="Project"
HelpContextID="0"
VersionCompatible32="393222000"
CMG="A3A1799F59A359A359A359A3"
DPB="87855DBBA57B887C887C88"
GC="6B69B1A794A894A86B"
[Host Extender Info]
&H00000001={3832D640-CF90-11CF-8E43-00A0C911005A};VBE;&H00000000
[Workspace]
ThisDocument=0, 0, 0, 0, C
Module1=26, 26, 388, 131, Z

有趣的是,我们最初识别出该威胁参与者仅对恶意文档执行了上述操作(避免出现版本不同而增加的复杂性),而实际上并没有对p-code进行Stomping以使得VBA源代码不匹配。这似乎是一个不太寻常的做法,似乎表示攻击者正在评估其恶意活动的效果。上面的恶意文档,是攻击者利用这两种技术的示例,如下图中使用Web公开服务IRIS-H Digital Forensics所展示的截图所示:

7.png

我们可以看到,恶意文档的VBA源代码是空白的Sub过程定义。通过迅速浏览p-code,我们发现该代码可以识别基于网络或基于主机的指标,我们可以借助它们,来确定在正确的Office版本上运行恶意样本时将会执行的操作。当我们尝试在GUI编辑器中打开宏时,Office将报错:

8.png

在研究过程中,我们建议各位研究人员关注以下注意事项:

1、GUI隐藏功能会更改PROJECT流,其中包含一个模块,但在流中没有对模块、类或基础类进行定义。我们可以利用这一点,进行静态检测。

2、尽管不再存在宏的源代码,但样本中的Module1仍然包含静态字符串,这可能表明恶意样本利用了Windows API。同样也可以利用这一点进行静态检测。

9.png

3、在上文提到的oletools实用程序可以进行此类恶意文档的检测。一旦发现误报、漏报或BUG,开源项目的维护人员会定期对其进行修复,以此来实现工具的不断优化:

10.png

攻击者使用上述技术,无疑会额外增加制作样本时所花费的时间,侧面上增加利用该方法扩大恶意活动规模的难度。尽管像EvilClippy这样的工具提供了创建难以检测的恶意文档的方法,但恶意文档中的Payload需要完成额外的工作,必须首先对目标进行指纹识别,才能保证Payload的成功执行。对于威胁参与者来说,如果具备一定资源和技术能力,可以满足上述要求。同时,对于安全研究人员来说,了解上述方法将有助于针对此类恶意活动进行有针对性的检测。实际上,我们还稽查了使用此类技术的恶意样本,发现了一些使用Cobalt Strike BEACON和POSHC2 Payload的其他恶意活动。

近期,我们扩展了FireEye内部的威胁行为树,以确保囊括这些攻击技术。在发布本文时,我们还暂时无法将上述技术(操纵PROJECT流和VBA Stomping)对应到MITRE ATT&CK Matrix for Enterprise中的现有技术上。我们的团队已经将上述内容提交至ATT&CK知识库,同时提交了一些相关的数据。

越过卡扎督姆桥:MINEBRIDGE的感染链

在恶意文档成功运行后,会调用URLDownloadToFileA访问URL hxxps://marendoger[.]com/team/rumba.php,以创建“uCWOncHvBb.dll”。返回的MINEDOOR加壳的MINEBRIDGE样本保存在执行用户的AppData目录下(例如:C:\Users\username\AppData\Roaming\uCWOncHvBb.dll),随后通过调用“regsvr32.exe /s %AppData%\uCWOncHvBb.dll”来执行DllRegisterServer导出:

11.png

随后,将利用Windows API URLDownloadToFileW,从hxxps://creatorz123[.]top/~files_tv/~all_files_m.bin中检索ZIP文件。检索到的ZIP文件将写入到%TEMP%中,并解压缩到新创建的目录“%AppData%\Windows Media Player”下。在解压缩完成后,原始的ZIP文件会被删除:

12.png

在ZIP文件中,包含执行TeamViewer副本所需的合法文件,这些文件在最后威胁指标一章中详细列出。在解压缩名为TeamViewer.exe的文件后,将该文件重命名为wpvnetwks.exe:

13.png

完成上述任务后,uCWOncHvBb.dll会将其自身移动到%AppData%\Windows Media Player\msi.dll。恶意宏随后关闭msi.dll的句柄,并使用wpvnetwks.exe调用CreateProcessA,这将导致重命名的TeamViewer实例对同目录下的msi.dll进行侧加载。该恶意软件通过在%CISDL_STARTUP%\Windows WMI.lnk中创建指向%AppData%\Windows Media Player\wpnetwks.exe的链接文件来确保重启后的持久性,在每次用户登录时启动该文件。

最终,将导致一个合法的老版本TeamViewer(版本11,编译时间为2018年9月17日10:30:12 UTC)被恶意的侧加载DLL(MINEBRIDGE)劫持。

MINEBRIDGE是一个32位的C++后门,通过DLL侧加载劫持技术对老版本、未打补丁的合法TeamViewer远程桌面客户端进行劫持。后门程序会挂钩Windows API,以防止受害者看到TeamViewer程序。默认情况下,MINEBRIDGE通过HTTPS POST请求与硬编码的C2域名进行命令和控制(C2)通信。POST请求中包含一个GUID,该GUID根据系统的卷序列号、TeamViewer唯一ID和密码、用户名、计算机名称、操作系统版本和信标间隔来生成。MINEBRIDGE还可以通过使用自定义窗口过程挂钩的方式,发送TeamViewer聊天消息,与C2服务器进行通信。上述两种C2方式都支持以下命令:下载和执行Payload、下载任意文件、自我删除和更新、列出进程、关闭或重新启动系统、执行任意Shell命令、进程提升、打开或关闭TeamViewer的麦克风、收集系统UAC信息。

MINEBRIDGE的默认通信方式是通过TCP/443端口发送HTTPS POST请求。但是,信标间隔时间可以通过命令进行更改。在发送任何C2信标之前,样本会等待通过SetWindowsTextW挂钩收集TeamViewer生成的唯一ID(< tv_id >)和密码(< tv_PASS >)。

该样本使用TCP/443端口,通过URI ~f83g7bfiunwjsd1/g4t3_indata.php连续向下述主机发送HTTP POST请求,直至收到响应为止:

· 123faster[.]top

· conversia91[.]top

· fatoftheland[.]top

· creatorz123[.]top

· compilator333[.]top

其中,POST正文中包含格式化的字符串uuid=< guid >&id=< tv_id >&pass=< tv_pass >&username=< user_name >&pcname=< comp_name >&osver=< os_version >&timeout=< beacon_interval >,其中< guid >是从系统卷序列号派生的GUID,并使用格式字符串%06lX-%04lX-%04lX-%06lX格式化。此外,请求使用硬编码的HTTP用户代理字符串“Mozilla/5.0(iphone;cpu iphone OS 11_1_1,类似MacOS X)AppleWebKit/604.3.5(KHTML,像Gecko)版本/11.0 Mobile/15B150 Safari/604.1”。

在收到响应后,将会对命令进行处理。一个响应可能会包含多个命令。对于每个执行的命令,样本都会通过TCP/443端口发送HTTPS POST请求,指示命令是否成功执行。该恶意样本响应以下命令:

1、drun:根据命令中提供的URL,下载并执行可执行文件,将文件保存到%TEMP%\

2、rundll_command:根据命令中提供的URL,下载经过XOR编码和LZNT1压缩的自定义DLL,并将其保存到%TEMP%\

3、update_command:将恶意样本文件重命名为

4、restart_command:使用命令行参数COM1_重新启动托管的TeamViewer应用程序。

5、terminate_command:终止托管的TeamViewer应用程序。

6、kill_command:创建并执行自删除的批处理脚本tvdll.cmd,以删除所有解压缩的文件和样本文件。最后结束托管的TeamViewer应用程序。

7、poweroff_command:关闭系统。

8、reboot_command:重新启动系统。

9、setinterval_command:更新C2信标间隔时间。

在响应中执行所有命令之后,样本将在指定的C2信标间隔时间内睡眠。随后,重复上述过程,发送下一个C2信标。这一行为将会无限次重复。

自删除的批处理脚本tvdll.cmd中包含以下内容,其中< 重命名_TeamVeiwer >是重命名的TeamViewer可执行文件(即wpvnetwks.exe),< sample_name >是此示例的名称(即msi.dll)。

@echo off
ping 1.1.1.1 -n 1 -w 5000 > nul
goto nosleep1
:redel1
ping 1.1.1.1 -n 1 -w 750 > nul
:nosleep1
attrib -a -h -s -r %~d0%~p0TeamViewer_Resource_en.dll
del /f /q %~d0%~p0TeamViewer_Resource_en.dll
if exist  "%~d0%~p0TeamViewer_Resource_en.dll" goto redel1
goto nosleep2
:redel2
ping 1.1.1.1 -n 1 -w 750 > nul
:nosleep2
attrib -a -h -s -r %~d0%~p0TeamViewer_StaticRes.dll
del /f /q %~d0%~p0TeamViewer_StaticRes.dll
if exist  "%~d0%~p0TeamViewer_StaticRes.dll" goto redel2
goto nosleep3
:redel3
ping 1.1.1.1 -n 1 -w 750 > nul
:nosleep3
attrib -a -h -s -r %~d0%~p0TeamViewer_Desktop.exe
del /f /q %~d0%~p0TeamViewer_Desktop.exe
if exist  "%~d0%~p0TeamViewer_Desktop.exe" goto redel3
goto nosleep4
:redel4
ping 1.1.1.1 -n 1 -w 750 > nul
:nosleep4
attrib -a -h -s -r %~d0%~p0TeamViewer.ini
del /f /q %~d0%~p0TeamViewer.ini
if exist  "%~d0%~p0TeamViewer.ini" goto redel4
goto nosleep5
:redel5
ping 1.1.1.1 -n 1 -w 750 > nul
:nosleep5
attrib -a -h -s -r %~d0%~p0del /f /q %~d0%~p0if exist  "%~d0%~p0" goto redel5
goto nosleep6
:redel6
ping 1.1.1.1 -n 1 -w 750 > nul
:nosleep6
attrib -a -h -s -r %~d0%~p0del /f /q %~d0%~p0if exist  "%~d0%~p0" goto redel6
attrib -a -h -s -r %0
del /f /q %0

与另一个恶意活动的关联性

我们识别出的MINEBRIDGE样本使用名为MINEDOOR的加载工具包装。自2019年秋季以来,我们观察到一个名为TA505的网络钓鱼组织,在恶意活动中使用MINEDOOR交付FRIENDSPEAK后门。MINEDOOR和FRIENDSPEAK的组合此前也被名为Get2的组织使用过。

我们发现,使用MINEBRIDGE的恶意活动和使用FRIENDSPEAK的恶意活动之间所使用的战术、技术和程序(TTP)只有有限的交集,这可能表明MINEDOOR并非TA505组织所独有。近期,FRIENDSPEAK相关的恶意活动中似乎使用了具有欺骗性的发件人地址、包含嵌入式Payload的Excel表格和伪装成通用技术服务的特定域名。与此同时,MINEBRIDGE相关的恶意活动使用了攻击者控制的电子邮件地址、从远程服务器下载包含Payload的恶意Word文档以及使用各种主题的域名,其中的一些域名在恶意活动开展的数周前进行了注册。与使用FRIENDSPEAK的恶意活动相比,使用MINEBRIDGE的恶意活动在数量和范围上都明显要更小一些。最后,我们在东正教圣诞节期间,发现有俄罗斯地区的攻击者使用MINEBRIDGE恶意软件进行攻击。我们在圣诞假期前后,没有观察到有攻击者投放FRIENDSPEAK恶意软件。根据恶意软件中使用的语言资源,我们认为TA505攻击者可能使用俄语。

这些恶意活动可能代表TA505恶意活动中的一个子集,比如TA505的一个特定客户,或由恶意组织中特定成员进行的操作。上述两组恶意活动所使用的域名都是在Eranet上注册,并且注册者所在地点是JL, US或Fujian, CN,但这并不是普遍的特征,所以我们怀疑TA505使用他人的信息来注册域名。

根据攻击后进行的恶意活动,可以揭示出这些恶意活动是由TA505还是另外的威胁组织进行的。但是,FireEye尚未观察到任何主机被MINEBRIDGE成功入侵的实例。因此,FireEye暂时将该恶意活动与TA505恶意活动区分开来。

致谢

FireEye在这里要感谢文章中所引用开源工具和公开研究成果的作者们。此外,感谢TeamViewer在威胁研究过程中与我们开展的紧密合作。在本篇文章中描述的DLL加载问题已经在2019年10月22日发布的TeamViewer 11.0.214397版本中实现修复。此外,TeamViewer正在努力针对该恶意软件的功能添加更多的缓解措施。

威胁指标

启动进程:

Microsoft Word启动TeamViewer

创建目录:

%APPDATA%\Windows Media Player

创建文件:

%APPDATA%\Windows Media Player\msi.dll

%APPDATA%\Windows Media Player\msi.dll.old

%APPDATA%\Windows Media Player\tvdll.cmd

%APPDATA%\Windows Media Player\wpvnetwks.exe

%APPDATA%\Windows Media Player\TeamViewer_Resource_en.dll

%APPDATA%\Windows Media Player\TeamViewer_StaticRes.dll

%APPDATA%\Windows Media Player\TeamViewer_Desktop.exe

%APPDATA%\Windows Media Player\TeamViewer.ini

%CSIDL_STARTUP%\Windows WMI.lnk

%CSIDL_PROFILE%\

%TEMP%\

%TEMP%\

%TEMP%\~8426bcrtv7bdf.bin

网络活动:

使用HTTPS POST请求,发送到C2 URL。User-Agent字符串:“Mozilla/5.0 (iPhone; CPU iPhone OS 11_1_1 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0 Mobile/15B150 Safari/604.1”

C2域名:

123faster[.]top

conversia91[.]top

fatoftheland[.]top

creatorz123[.]top

compilator333[.]top

下载域名:

neurogon[.]com

tiparcano[.]com

seigortan[.]com

marendoger[.]com

badiconreg[.]com

发件人域名:

pt-cpaaccountant[.]com

rogervecpa[.]com

agent4career[.]com

bestrecruitments[.]com

网络钓鱼恶意文档:

01067c8e41dae72ce39b28d85bf923ee

80e48391ed32e6c1ca13079d900d3afad62e05c08bd6e929dffdd2e3b9f69299

1601137b84d9bebf21dcfb9ad1eaa69d

3f121c714f18dfb59074cbb665ff9e7f36b2b372cfe6d58a2a8fb1a34dd71952

1c883a997cbf2a656869f6e69ffbd027

de7c7a962e78ceeee0d8359197daeb2c3ca5484dc7cf0d8663fb32003068c655

2ed49bd499c9962e115a66665a6944f6

b8f64a83ad770add6919d243222c62471600e64789264d116c560b7c574669ec

3b948368fe1a296f5ed18b11194ce51c

999d4f434bbc5d355656cc2a05982d61d6770a4c3c837dd8ec6aff8437ae405a

4148281424ff3e85b215cd867746b20c

9812123d2367b952e68fa09bd3d1b3b3db81f0d3e2b3c03a53c21f12f1f4c889

54f22fbc84f4d060fcbf23534a02e5f6

7b20e7e4e0b1c0e41de72c75b1866866a8f61df5a8af0ebf6e8dbd8f4e7bdc57

5a3d8348f04345f6687552e6b7469ac1

77a33d9a4610c4b794a61c79c93e2be87886d27402968310d93988dfd32a2ccf

607d28ae6cf2adb87fcb7eac9f9e09ab

f3917832c68ed3f877df4cd01635b1c14a9c7e217c93150bebf9302223f52065

9ba3275ac0e65b9cd4d5afa0adf401b4

18698c5a6ff96d21e7ca634a608f01a414ef6fbbd7c1b3bf0f2085c85374516e

9becd2fd73aa4b36ad9cd0c95297d40b

30025da34f6f311efe6b7b2c3fe334f934f3f6e6024e4d95e8c808c18eb6de03

9cce3c9516f0f15ce18f37d707931775

bf0adb30ca230eee6401861e1669b9cfeaa64122cc29c5294c2198f2d82f760e

9faf9e0c5945876c8bad3c121c91ea15

88c4019e66564ad8c15b189b903276910f9d828d5e180cac30f1f341647278fc

a37e6eeb06729b6108649f21064b16ef

e895dc605c6dcaf2c3173b5ec1a74a24390c4c274571d6e17b55955c9bd48799

ab8dc4ba75aad317abb8ee38c8928db0

212793a915bdd75bede8a744cd99123e2a5ac70825d7b2e1fc27104276a3aafd

b8817253288b395cb33ffe36e0072dc9

ba013420bd2306ecb9be8901db905b4696d93b9674bd7b10b4d0ef6f52fbd069

cb5e5d29f844eb22fecaa45763750c27

4ff9bfde5b5d3614e6aa753cacc68d26c12601b88e61e03e4727ee6d9fe3cdc2

cffda37453e1a1389840ed6ebaef1b0d

c9f6ba5368760bf384399c9fd6b4f33185e7d0b6ea258909d7516f41a0821056

dc0e1e4ec757a777a4d4cc92a8d9ef33

ac7e622e0d1d518f1b002d514c348a60f7a7e7885192e28626808a7b9228eab6

e5c7e82670372e3cf8e8cab2c1e6bc17

eba3c07155c47a47ee4d9b5201f47a9473255f4d7a6590b5c4e7b6e9fc533c08

f93062f6271f20649e61a09c501c6c92

3f4f546fba4f1e2ee4b32193abcaaa207efe8a767580ab92e546d75a7e978a0b

MINEBRIDGE/MINEDOOR恶意样本:

05432fc4145d56030f6dd6259020d16c

182ccc7f2d703ad732ffee0e1d9ae4ae5cf6b8817cc33fd44f203d31868b1e97

0be9911c5be7e6dfeaeca0a7277d432b

65ead629a55e953b31668aac3bd373e229c45eb1871d8466f278f39ebcd5d26b

0dd556bf03ecb42bf87d5ea7ce8efafe

48f6810e50d08c2631f63aae307a7724dba830430f5edd4b90b4b6a5b3c3ca85

15edac65d5b5ed6c27a8ac983d5b97f6

03ff2b3067aa73ecd8830b6b0ea4f7cfa1c7476452b26227fb433265e7206525

1e9c836f997ddcbd13de35a0264cf9f1

23da418912119a1358c9a1a4671ba60c396fff4c4de225fe6a225330147549a7

21aa1066f102324ccc4697193be83741

86d839e1d741445f194965eee60d18bd292bec73e4889089e6caf9877581db12

22b7ddf4983d6e6d84a4978f96bc2a82

fc39cb08cae90c661e00718e2a0051b5de3dcb7cddde919b9ffd2d79bf923d1f

2333fbadeea558e57ac15e51d55b041c

57671d5154e707da0ee6139485f45a50fa9221852ebb65781d45a2660da7d0cb

2b9961f31e0015cbcb276d43b05e4434

e41b89869c2b510c88acd1ed9fd4a6dfe89222a81c6c1241a69af3b7f812f712

2c3cb2132951b63036124dec06fd84a8

b6dbb902125e7bf6f6701b654cbff4abaf2e853441cf34045ac19eff5ed8ce84

4de9d6073a63a26180a5d8dcaffb9e81

7b1d4774176976ffcb2075889557f91a43c05fb13f3bc262bbaec4d7a0a827e6

505ff4b9ef2b619305d7973869cd1d2b

abb05ba50f45742025dd4ebff2310325783da00fb7bc885783e60a88c5157268

52d6654fe3ac78661689237a149a710b

d6a0e62fe53116c9b5bccd2a584381e2ca86e35490d809ce1900603d5e6b53eb

53e044cd7cea2a6239d8411b8befb4b7

6e76d648d446e6a70acdd491f04c52d17f9f0e1ef34890c6628c4f48725b47c8

5624c985228288c73317f2fa1be66f32

99559a5f06b0279ed893d2799b735dae450a620f6cea2ea58426d8b67d598add

598940779363d9f4203fbfe158d6829b

1358b0ccae9dbb493228dc94eb5722c8d34c12227a438766be83df8c1c92a621

60bdea2c493c812428a8db21b29dd402

383c86deed8797e0915acf3e0c1b6a4142c2c5ecb5d482517ed2ade4df6f36fd

681a77eba0734c0a17b02a81564ae73f

0aaa66dc983179bffdb181079f3b786b6cd587c38c67ba68b560db0bd873278a

6b7d9268c7000c651473f33d088a16bd

6e39ffecab4ca0bd7835a2e773ebfc3f6d909a0a680f898e55f85ed00728666d

6d6f50f7bba4ae0225e9754e9053edc0

ddf33eff293ffc268dfd0a33dddef97aefe9e010ec869dc22c221d197eb85740

6de77c1b4e8abaaf304b43162252f022

8f50ddc1519e587597882a6bd0667653c36a8064b56ee5ff77665db2faf24710

7004fadfa572d77e24b33d2458f023d1

cccd6b46f950caec5effdd07af339be78691974fec5f25d923932b35edb95c4a

71988460fd87b6bff8e8fc0f442c934b

8167d41ad30f5d451791878815e479965b2f5213231f26819ecaf4fcc774ab12

722981703148fa78d41abbae8857f7a2

a3070ee10dd5bcd65a45b72848c926db2602e5297641452edff66e7133cdce9c

818f7af373d1ec865d6c1b7f59dc89e5

cbe4b73c0c95c207ccde9d9bd80f541cf90cad18ba5abc3fe66a811ead1601c2

832052b0f806f44b92f6ef150573af81

e162a70a6e27fe23379d3a17a3a727d85a94b79416d81ec3b4ea80d329e96830

836125ae2bed57be93a93d18e0c600e8

0fbde653bef4642626f2996a41a15a635eb52cd31eacce133d28301b902d67df

86d60bce47c9bb6017e3da26cab50dcf

6c134908ad74dfa1468a1166e7d9244695f1ffeff68bfd4eec4b35820b542b8a

8919458aec3dcc90563579a76835fc54

aad0537924bacddd0d5872f934723e765dbb182f2804c6f594f9b051937495ec

8d7e220af48fceee515eb5e56579a709

3eefa7072344e044c0a6abb0030f3f26065bf6a86bb50ea38473dd7ac73904fb

91b8ec04d8b96b90ea406c7b98cc0ad6

0520e68a4b73c3b41e566cf07be54e1f1cb59c59c303fe3390e0687f9af1a58a

959eb0696c199cbf60ec8f12fcf0ea3c

ccb5f8734befd6ab218513e16a57679a8fb43b2732e19233ee920d379045e318

95ec5e8d87111f7f6b2585992e460b52

3f8e38ccf71f122b65fdc679db13e3de3bb4b4fc04b8ab6f955d02e0bca10fae

9606cf0f12d6a00716984b5b4fa49d7d

f4f062fd7b98365ed6db993b1da586dd43e5cdcc2f00a257086734daf88c9abb

9f7fed305c6638d0854de0f4563abd62

6c5f72ddf0262838a921107520cdc12ba8e48dbafab4a66732a350095dd48e9f

a11c0b9f3e7fedfe52b1fc0fc2d4f6d1

d35ac29ea6e064b13d56f6a534022f253cf76b98e10a7ea1cbfa086eefd64f4b

a47915a2684063003f09770ba92ccef2

7b16ce0d2443b2799e36e18f60fe0603df4383b1a392b0549c3f28159b1ca4d4

a917b2ec0ac08b5cde3678487971232a

8578bff803098bf5ca0d752d0a81f07659688a32cbfc946728e5ab0403f5c4ba

ad06205879edab65ed99ed7ff796bd09

d560f8717f4117d011f40c8880081d02d1455a41c93792e1600799d3e5ee9421

ad910001cb57e84148ef014abc61fa73

c9a6f7b0603779690c1d189850403f86608a3c5e1cd91e76fd31c4f119ae256b

b1ce55fca928cf66eaa9407246399d2c

c6214ec7909ce61d6ec3f46f5a7ec595d8cc8db48965c5baee8a346632cbe16d

b9249e9f1a92e6b3359c35a8f2a1e804

0695e5e49a297c980b96f76bf10e5540de188d6a6a162e38f475418d72a50032

bd6880fb97faceecf193a745655d4301

23840c587e4e9588b3d0795d4d76a4f3d4d5b2e665ce42dde0abcd1e0a2ba254

be2597a842a7603d7eb990a2135dab5e

6288d3de1f1aa05fa0a5f0c8eb9880d077f034fc79fc20f87cbfcc522aa803cb

cf5470bfe947739e0b4527d8adb8486a

6357fdb8f62948d489080b61caf135e6aaba32dcdb7dc49b0efafef178b3b54f

d593b7847ec5d18a7dba6c7b98d9aebf

5df3a6afb1a56fa076c6db716d5a050455158941ec962546a8799fc80ccfa573

d7ee4ffce21325dfe013b6764d0f8986

92e94482dee75261c8ebdcbb7ace382a097cca11bcdc675bbe2d7b3f67525f84

de4d7796006359d60c97a6e4977e4936

ee8ba1c5329d928d542bfa06eec2c0a3e3b97dcc20382ddbc27bc420ceaeb677

e0069cd3b5548f9fd8811adf4b24bf2e

6046d6aed3f4ee2564d6be540d46bcdc0bebce11a1ced4b9ddbfa1a41084411c

e1ea93fa74d160c67a9ff748e5254fe0

92c10ef23209e09abb17e41d67301f0e3f7d9e7ddfc7c1a66140c4986d72bee7

ea15d7944c29f944814be14b25c2c2b1

5898b41ca4f4777ad04d687f93548129ccb626d2f5e6e100b0a037c3d40a7444

f22a4abd5217fa01b56d064248ce0cc5

858b4070f8b83aa43fd6a5189a8ed226ce767a64972db893e36550a25b20be94

f3cb175e725af7f94533ecc3ff62fa12

5a5385df469459cd56f6eecbf4b41b8c75aa17220c773501eaec22731f3a41bb

f6533e09a334b9f28136711ea8e9afca

9136c36ccd0be71725e8720a6cfdbdd38d7eea3998228c69ed4b52e78ba979c4

f7daaea04b7fe4251b6b8dabb832ee3a

6abd90d718113482a5bcd36e35b4ea32c469f94fc2cfb9c1c98214efbf64c352

fb1555210d04286c7bcb73ca57e8e430

36da56815dc0c274fc8aacdfffbc4d5e500025ccd1147cad513d59b69ab9557d

今天,度小满安全应急响应中心(简称 DXMSRC)正式上线!

image.png

度小满金融,前身是百度金融。2018年4月,百度宣布旗下金融服务事业群组正式完成拆分融资协议签署,实现独立运营,启用全新品牌“度小满金融”。度小满金融依托于百度人工智能的技术优势,以智能金融为发展方向,重点发展消费信贷、财富管理、支付、金融科技等业务,旗下产品包括度小满钱包、度小满理财、有钱花等。

作为一家金融科技公司,信息安全是我们的底线,我们非常重视信息安全并关注安全风险的本质。

为了加深与业界的合作交流,提高度小满各产品和业务等安全保障,在2020年2月17日,度小满安全应急响应中心(简称 DXMSRC)正式上线!

URL:https://security.duxiaoman.com

度小满相关漏洞范围如下:

APP产品

·有钱花APP

·度小满金融APP

·度小满理财APP

·百度股市通APP

域名

·dxmns.com

·dxmyqh.com

·dxmxmf.com

·dxmjinr.com

·duxiaomanbaoxian.net

·duxiaomanbaoxian.com

·dxmumoney.com

·dxmbaoxian.net

·dxmbaoxian.cn

·dxmbaoxian.com

·duxiaomanbaoxian.cn

·xianfae.com

·dxm.one

·duxiaoman.one

·duxiaoman.credit

·duxiaoman.loan

·dxmpay.com

·dxmstatic.com

·duxiaomanfund.com

·duxiaoman.com

·combofin.com

我们真诚的邀请安全领域的专家、白帽子、社会团体向我们反馈度小满产品和业务相关的安全漏洞,共同守护亿万用户的安全在线生活。

度小满安全应急响应中心

Du Xiaoman Security Response Center

image.png

目录

· 引言

· 评估范围

· 已识别的漏洞

             · SSH-01-003 客户端:在错误的状态下缺少NULL检查导致崩溃(低危)

             · SSH-01-004 SCP:未经过滤的位置参数导致命令执行(高危)

             · SSH-01-006 通用:各种未检查的空指针解引用导致DOS(低危)

             · SSH-01-007 PKI Gcrypt:潜在的使用 RSA 公钥的 UAF/双重释放(中危)

             · SSH-01-010 SSH:指纹识别中使用了弃用的哈希函数(低危)

             · SSH-01-011 SSH:X25519和Ed25519上缺少点验证(中危)

             · SSH-01-011 SSH:X25519和Ed25519上缺少点验证(中危)

             · SSH-01-014 配置解析:整数下溢导致OOB数组访问(低危)

· 杂项问题

             · SSH-01-001 状态机:应明确设置初始计算机状态(信息)

             · SSH-01-002 Kex:用于迭代同一数组的不同绑定的宏(信息)

             · SSH-01-005 代码质量:分配期间的整数符号混乱(低危)

             · SSH-01-008 SCP:通过未转义的文件名进行协议注入(低危)

             · SSH-01-009 SSH:未实现 RFC4255(信息)

             · SSH-01-012 PKI:通过未初始化的堆栈缓冲区泄漏信息(低危)

· 结论

引言

“libssh是一个在客户端和服务器端实现SSHv2协议的多平台C语言库。通过libssh,你可以远程执行程序、传输文件、使用安全和透明的通道、管理公钥等等。”

来自:https://www.libssh.org/

本报告记录了针对libssh软件的安全性评估的结果。这个项目由Cure53在2019年9月和10月进行渗透测试和源代码审计。重点放在libssh软件上,该软件可作为开源软件使用,当前版本为v0.9。Cure53已经在评估范围内发现了十四个与安全有关的问题,其中一个被标记为“高危”问题。

需要澄清的是,这项评估是由Mozilla慷慨资助的。预算来源于Mozilla开源支持(MOSS)计划框架,特别是安全开源资助计划。Mozilla将Cure53介绍给libssh团队及其维护者。从那时起,就开始计划合作计划。在资源方面,Cure53与一个由六名高级测试人员组成的团队完成了libssh的评估工作。完成这次评估的总时长达到了三十二人日。所有涉及核心测试、文档、报告和编写的工作都在2019年9月底和10月初完成。

为了有组织地实现这一评估的目标,我们创建了三个工作包(WP)。WP1包括libssh源代码审计,在此期间,Cure53侧重于研究可用的源代码,总体目标是确定易受攻击的部分。在WP2期间执行了代码辅助渗透测试,这种测试依赖于参考服务器和客户端实现的使用,以及由Cure53创建的本地设置。最后,WP3将通过使用AFL的libssh协议进行模糊测试和形式验证。后半部分工作将与测试工作并行执行,同时也伴随着形式验证工具的使用。为了阐明这一目标,应该说明的是,Cure53试图找出协议握手是否像预期应该的那样安全。

为了准备评估工作,我们举行了几次简报会议。此外,libssh团队向Cure53提供了一个评估范围文档,其中包含与测试设置相关的说明、有趣的区域以及关于测试和评估结果的预期的一般信息。因此,项目可以按时开始并有效地进行。评估期间的交流沟通发生在Freenode上的IRC频道中,由libssh项目的维护人员提供。Cure53 定期更新评估状况,并在报告产出时提供相关调查结果,而不是等待报告最后完成。

在发现的十四个问题中,8个被归类为安全漏洞,6个被定为一般的缺陷和较低的潜在利用价值。虽然有一个项目收到了“高危”标记,但必须指出,它的可利用性并不扩展到利用libssh API的每一个软件。然而,已经证明,像cURL这样的流行软件容易受到本报告中提及的攻击场景的影响,从而导致漏洞被标记为比最初提议的级别要更高一些。令人印象深刻的是,所有其他问题只有“中等”和较低的分数,这表明Cure53 对 libssh 软件的这个评估报告的总体结果是很不错的。

在接下来的章节中,报告将首先简要地重申评估范围和三个具体的WP。然后是专门的按时间顺序阐述评估过程,这些品谷过程逐一揭示了发现的问题。除了PoC之类的技术方面的东西,Cure53还提供了今后改进libssh的缓解建议。该报告以一个更广泛的结论作为结束,其中Cure53总结了2019年秋天的项目,并对测试范围做出了定论。此外,关于libssh软件的安全性和隐私状况的详细建议和说明将在本文的最后部分提供。

评估范围

libssh服务器和客户端代码

· WP1:libssh源代码审计,源码地址:https://www.libssh.org/files/0.9/

· WP2:libssh渗透测试,代码辅助(使用参考服务器和客户端)

· WP3:libssh协议fuzzing&amp

· Libssh维护人员向Cure53提供了一个详细的范围文档

· 提供了构建说明 

已识别的漏洞

以下部分列出了测试期间发现的漏洞和实现问题。请注意,调查结果是按时间顺序列出的,而不是按其严重程度和影响程度列出的。上述严重性等级只是在每个漏洞的标题后面的括号中给出。每个漏洞都会额外获得一个唯一标识符(例如SSH-01-001),以方便日后的跟进沟通。

SSH-01-003客户端:在错误的状态下缺少NULL检查导致崩溃(低危)

我们发现加密函数不能正确检查空指针,从而允许恶意服务器导致基于libssh的客户端应用程序崩溃。在某些情况下,这可能导致信息泄露攻击,例如当核心转储被写入并提供给攻击者时。

当SSH客户端建立连接时,服务器发回其公钥。如果无法正确解析此密钥,libssh客户端就无法设置所需的加密参数。因此,它会导致sshconnect()函数返回一个错误。如果在这种错误状态下调用sshdisconnect()函数,客户端将在加密disconnect-message时崩溃。这是因为所需的数据结构尚未初始化。下面的代码片段显示了崩溃发生的位置。可以看到,out_cipher 没有初始化,在尝试访问out_cipher->blocksized时导致空指针解引用(Null Pointer Dereference)。

受影响的文件:

libssh-0.9.0/src/packet.c

受影响的代码:

image.png

尽管这个库在连接失败时返回一个错误,但在这种状态下调用disconnect函数时不应发生崩溃。经过进一步研究,发现这个问题会影响使用libssh编译时的cURL等应用程序。建议根据NULL值检查out_cipher 指针。

SSH-01-004SCP:未经过滤的位置参数导致命令执行(高危)

当libssh SCP客户端连接到服务器时,将在服务器端执行包含用户提供的路径的SCP命令。如果以用户可以影响 ssh_scp_new() 的第三个参数的方式使用该库时,那么攻击者就有可能注入任意命令,导致远程目标的被入侵。如下面的代码片段所示,提供的位置是直接传递的,而不需要事先转义。

受影响的文件:

libssh-0.9.0/src/scp.c

受影响的代码:

image.png

危险的库调用:

image.png

虽然这个问题需要应用程序将未经过滤的用户输入传递给libssh API,但是用户控制的数据到达接收器的设置是切合实际的。这一点尤其重要,因为libssh文档在提供位置参数时没有提到任何形式的安全风险。

我们对受影响的 API 调用的危险使用方式进行进一步分析后还表明使用libssh支持编译的libcurl的漏洞。

使用libcurl+“--with-libssh”的概念验证(PoC):

$curl-uuserscp://localhost:”/etc/passwd;touch/tmp/xxx”

使用 PHP+libcurl+“--with-libssh”的概念验证(PoC):

image.png

因此,我们建议正确地转义位置参数,并将其置于单引号之间。这也应该可以解决包含特定字符的路径的问题。

SSH-01-006通用:各种未检查的空指针解引用导致DOS(低危)

在应用 Semmle  的扩展污点跟踪查询时,可能会注意到未检查的函数调用导致的一些空指针解引用。下面的Semmle 查询表明可能的结果是完整的。

使用 Semmle Query: 

image.png

LGTM 链接:

https://lgtm.com/query/8016580153808805310/

下面的列举了一些解释潜在问题的值得注意的发现。每当调用突出显示(黄色部分)的函数之一时,其返回值都是经过检查的。这将导致赋值操作左侧的变量未初始化或为NULL。因此,下一个解引用将访问空指针,导致依赖于底层代码内存区段错误的应用程序崩溃。

值得注意的发现:

libssh-0.9.0/src/gssapi.c:

image.png

libssh-0.9.0/src/messages.c:

image.png

libssh-0.9.0/src/packetcrypt.c:

image.png

建议检查上面的 Semmle 结果,并确保正确检查所有函数调用的返回值。每当调用失败时,也需要相应地将它们从控制流中保留出来。

SSH-01-007PKI Gcrypt:潜在的使用 RSA 公钥的 UAF/双重释放(中危)

libssh的内存分配功能提供了一个名为SAFE_FREE的宏。释放指针后,这个宏将指针变量设置为NULL。但是,如果宏在包装函数中使用,指针变量仍然可能是非NULL的。其中一个包装函数是ssh_string_free,而该函数的调用方保留一个非NULL指针。这可能导致双重释放或释放后使用(UAF)漏洞。

下面是一段代码摘录,显示了一个潜在的双重释放漏洞,并突出显示了其相关部分。

受影响的文件:

libssh-0.9.0/src/pkigcrypt.c

受影响的代码:

image.png

在处理给定switch语句的特定情况之后,使用的指针e和n释放后又由ssh_string_free使用。但是,如果在switch语句失败后执行的两个函数中有一个失败,那么同样的指针将再次释放,从而导致双重释放。

建议在调用ssh_string_free 之后显式地将指针变量设置为NULL,因为这是在src/pkicrypto.c中定义的类似函数中完成的。

SSH-01-010SSH:指纹识别中使用了弃用的哈希函数(低危)

SSH 协议标准目前通过指纹为带外公共密钥认证定义了一种方法。这是通过RFC4251完成的,RFC4251(https://tools.ietf.org/html/rfc4251)引用FIPS-180-2,并在公钥和相关身份信息上表示SHA-1哈希的十六进制编码字节。除了libssh之外,大部分SSH实现都默认支持这种带外相互身份验证方法。

虽然使用SHA-1作为指纹哈希函数并不存在明显的安全问题,但应注意到SHA-1目前正在几乎所有主要因特网协议中被弃用,最明显的是TLS协议和证书协议。此外,在SHA-1上发现了许多实际的攻击,使得碰撞攻击变得可行。

由于这些原因,建议尽可能不推荐在libssh中使用SHA-1。不幸的是,这个建议会受到与其他SSH实现的交叉兼容性概念的限制,因此如果不在SSH生态系统的其他主要实现之间进行协调,可能无法实现交叉兼容。

SSH-01-011SSH:X25519和Ed25519上缺少点验证(中危)

libssh实现了对RFC4253的扩展,允许在密钥交换阶段使用更现代的Diffie-Hellman和签名原语,即X25519和Ed25519。但是,这些原语的实现方式使得点或密钥验证不会在标量乘法步骤中发生。在Curve25519的案例中,这为小型子群攻击提供了可能性,同时在Ed25519中提出了各种可塑性问题。

Cas Cremers等人最近发表了两篇论文,特别是第一篇论文(https://eprint.iacr.org/2019/779.pdf)的第3.4节和第二篇论文(https://eprint.iacr.org/2019/526.pdf)的第7.1节,展示了基于这些缺陷的实际攻击。在本次审计的时间框架内,我们作出了相当大的努力,以确定类似的问题是否适用于RFC4253第8节所述的Diffie-Hellman密钥交换。到目前为止,还没有得到任何缺陷的明确确认。但是,这可能完全是由于需要对在Ed25519中获取碰撞签名的要求条件进行更多研究。分析工作的其他部分暗示了更多的确定性。例如,如果强制使用低阶子群,则前向保密性可能会降低。

如果有可能在不修改服务器公钥的情况下获得碰撞签名或通过中间人攻击获得服务器的公钥(正如上面引用的文章的第3.4节强烈建议的那样),那么在某些协议执行中使用Curve25519和Ed25519可能会导致所有SSH的安全性降低,而不仅仅是libssh。再加上可能通过主动攻击在SSH实现中强制使用某些密码套件,如果这些错误得到确认,这将成为一个严重的问题。

鉴于在审计范围内没有足够的时间进行研究以确认这种复杂的攻击,所以我们提出这个问题是为了强烈鼓励Curve25519中的点验证。这样,无论如何都可以避免潜在的攻击。需要注意的是,在这两个原语上执行点验证并不会破坏与其他SSH实现的互操作性——除非概率极低。这意味着可以在不产生任何问题的情况下部署该方法。

SSH-01-013 配置解析:解析主机名中的递归通配符导致DOS(低危)

虽然对parse_config.c和knownhosts.c进行模糊测试后发现使用了诸如“*”(星号)这样的通配符会导致底层解析逻辑中的递归问题,最终导致拒绝服务。这个问题的根本原因是match.c中的匹配模式函数试图在出现两个通配符时,递归地将子模式与主机名进行匹配。受影响的文件和代码行的两个PoC 如下所示。

image.png

受影响的文件:

libssh-0.9.0/src/match.c

受影响的代码:

image.png

建议要么以迭代的方式编写代码,要么使用静态计数器来跟踪递归的深度,这样在深度太大时就可以跳出来。必须为该计数器找到合理的值。

SSH-01-014 配置解析:整数下溢导致OOB数组访问(低危)

在对 SSH 配置文件的解析过程进行模糊测试时,发现空行(即只有一个空字节的行)会导致整数下溢。反过来,这表示一个超出界限的数组访问。受影响的文件和代码如下所示。

受影响的文件:

libssh-0.9.0/src/config.c

受影响的代码:

image.png 

为了捕获这样的边缘情况,建议检查所提供的行的长度是否大于0,或重构循环初始化。

1月7日,研究人员在WP Database Reset插件中发现多个安全漏洞,CVE编号分别是CVE-2020-7048和CVE-2020-7047。该插件安装量超过80000次。其中一个漏洞允许非认证的用户来重置数据库中的表到初始化WordPress安装状态,另一个漏洞允许非认证的用户在drop其他用户的适合授予账户管理权限。

CVE-2020-7048

CVE-2020-7048漏洞是WP Database Reset插件中的漏洞,属于非认证的数据库重置漏洞,v 3.1及更低版本都受到该漏洞的影响,该漏洞CVSS 3.0评分为9.1。

WP Database Reset插件提供给用户重置数据库表密码的一个便捷的数据库重置插件,管理员可以在无需重装WordPress的情况下对网站进行测试。由于该插件功能强大,如果不进行合理的保护,可能会带来巨大的危害。这也就是研究人员发现漏洞的所在。

插件中的数据库重置函数中没有一个进行了检查或使用了安全随机数。由于没有适当的安全控制,WP Database Reset插件中的安全漏洞使得任意非认证的用户可以重置数据库中的任意表。重置还会引发数据可用性的破坏。攻击者发送一个简单的请求就可以将站点重置到WordPress标准默认状态。

有漏洞的插件代码如下:

public function reset( array $tables ) {    
         if ( in_array('users', $tables ) ) {
           $this->reset_users = true;
         }
       
         $this->validate_selected( $tables );
         $this->set_backup();
         $this->reinstall();
         $this->restore_backup();
       }
        
       private function validate_selected( array $tables ) {
         if ( ! empty( $tables ) && is_array( $tables ) ) {
           $this->selected = array_flip( $tables );

使用安全随机数检查后的插件代码如下所示:

public function reset(array $tables)
{
  if (wp_verify_nonce(@$_REQUEST['submit_reset_form'], 'reset_nounce') && current_user_can('administrator')) {
     // Check if current user is Admin and check the nonce
 
    if (in_array('users', $tables)) {
      $this->reset_users = true;
    }
 
    $this->validate_selected($tables);
    $this->set_backup();
    $this->reinstall();
    $this->restore_backup();
  } else {
    throw new Exception(__('Please reload the page and try again. Double check your security code.', 'wordpress-database-reset'));
  }
}

由于WordPress数据库中保存了所有页面、用户、站点选项、评论等数据。由于该漏洞,使得非认证的用户可以通过一个请求就擦除整个WordPress安装数据。

CVE-2020-7047

CVE-2020-7047是WP Database Reset插件中的一个权限提升漏洞,影响版本为v3.1及更低版本,CVSS评分为8.8分。

为进一步利用前述漏洞,认证为订阅者的用户也可以重置wp_users表。乍一看,这个漏洞可能并不严重。但是在数据库重置过程中删除所有用户看起来问题就很大了,但是还可以重新重置用户。当wp_users表被重置了之后,就会从user表中删除所有的用户,包括管理员和登入的用户。发送请求的用户会自动进行权限提升到管理员,即使只是一个订阅者用户。攻击者就会成为唯一的管理员,利用该漏洞可以完全控制WordPress站点。

有漏洞的代码如下所示:

private function update_user_settings() {
 global $wpdb;
 
 $user_id = $this->reset_users? 1: $this->user->ID;
 
 $wpdb->query(
   $wpdb->prepare(
    "UPDATE $wpdb->users
     SET user_pass = '%s', user_activation_key = ''
     WHERE ID = '%d'",
     $this->user->user_pass, $user_id
   )
 );
 
 if ( $this->reset_users ) {
   wp_clear_auth_cookie();
   wp_set_auth_cookie( true );
 }
}

下面是漏洞利用的PoC视频:

 https://www.wordfence.com/wp-content/uploads/2020/01/POCWPDatabaseReset.mp4

总结

该漏洞给我们的启示是对站点进行备份对网站安全和可用性是非常重要的。文中介绍了WP Database Reset插件中的的2个安全漏洞。这2个漏洞在3.15版本中都修复了,研究人员建议用户尽快更新插件到最新版本。


永久清退15家涉嫌销售问题口罩的店铺后,淘宝网近日又将一家销售假冒飘安口罩的店铺诉至法院,索赔百万并要求被告在淘宝网向消费者、守法商家和平台道歉。

记者获悉,杭州互联网法院已正式受理此案,并将于近期在线公开审理。这是抗疫以来第一起电商平台起诉售假口罩商家并获得法院立案的案件。

 “售假是底线问题!”阿里巴巴法务部诉讼部门负责人说,目前他们已经拟定一个起诉清单,对于发现的任何疑似假货链接,淘宝会立刻封杀,同时会将线索推送到行政执法部门线下溯源打击,“为了让制造假货和卖假货的倾家荡产,淘宝还会去起诉这些人,总之所有手段全用上,一定要让这些人疼得不敢售假。”

2020年2月3日,在阿里巴巴打假特战队协助下,苏州工业园区市场监督管理局对苏州某生物科技有限公司进行检查。现场发现一次性口罩1万余只,外包装上标注有“河南飘安集团有限公司”字样。根据品牌方河南飘安集团有限公司出具的《声明函》,现场口罩均为假冒产品。随后,执法人员对假口罩当场予以扣押。与此同时,在发现该公司售假行为后,阿里第一时间下架商品链接、关闭店铺,并对店铺做永久清退。

asbudo.png

(图说:苏州园区市场监管局在苏州某生物科技有限公司查获上万只假冒“飘安”口罩。)

此前,阿里曾向全体商家发出最严“口罩令”,并宣布永久清退15家严重违规店铺。目前,阿里已拦截、删除57万条可疑口罩链接,协助全国14个省份30个地市执法机关,侦办、查处制售假冒伪劣口罩等违法案件128起。

adsfbo.png

(图说:阿里宣布永久清退15家违规口罩类店铺。)

“被告的售假行为不仅严重侵害消费者合法权益,还给淘宝造成了经济和商誉上的严重负面影响,应当赔偿损失、并消除影响。”在本起诉讼中,淘宝在诉状中称,被告在注册淘宝店时签署的《淘宝服务协议》中明确规定:不得在淘宝平台上销售侵犯他人知识产权或其它合法权益的商品,由此给平台造成的所有损失应当赔偿。

中国社会科学院大学互联网法治研究中心执行主任刘晓春表示,阿里协助执法机关对假口罩开展行政监管惩戒、刑事打击这些必要的公权力治理手段,表明了其打击假货的决心和疫情当前的社会责任感。淘宝网平台对售假者发起民事诉讼,则可更加充分调动企业的积极性和能动性,联动全社会构建一个更为立体、更为完备的社会化治理体系,与公权力治理体系“并肩作战”,对售假、售劣行为形成合围效果。


Fedora 是一个 Linux 发行版,是一款由全球社区爱好者构建的面向日常应用的快速、稳定、强大的操作系统。 [1] 它允许任何人自由地使用、修改和重发布,无论现在还是将来。它由一个强大的社群开发,这个社群的成员以自己的不懈努力,提供并维护自由、开放源码的程序和开放的标准。

尽管许多Linux用户是开发人员,但相当一部分开发人员在使用时会经常干预或扩展已发行的程序包。当程序包中有待处理的功能,或者程序包中有漏洞时,用户通常会等待发行维护者对其进行修复,或者使用独立的解决方案(例如自制程序)来自行构建。

幸运的是,在Fedora中,开发人员可以处理每个程序包自身的问题,并使构建修改版本变得异常容易。

安装原始程序包

首先,我们从安装几个基本系统程序包开始,这些程序包将帮助我们处理程序包构建:

$ sudo dnf install fedpkg make

假设我们要考虑zsh(Z Shell)的补丁或功能,就需要考虑什么是生成二进制文件的源程序包项目。查询rpm工具很容易,根据已安装程序包的文件名,可以显示源程序包RPM的名称。例如:

$ rpm -qif /usr/bin/zsh | grep 'Source RPM'
Source RPM  : zsh-5.7.1-4.fc30.src.rpm

源RPM名称也是zsh,这并不奇怪。但是,其他包可能不是这样。

通常,源程序包的RPM名称与 Git存储库的名称相匹配,这意味着,Fedora在该Git存储库中维护允许构建它的脚本。从Fedora的Git服务器克隆源程序包非常容易,并且不需要成为Fedora社区成员或使用任何其他凭据。对于zsh,我们可以使用fedpkg执行以下命令:

$ fedpkg co -a zsh
Cloning into 'zsh'...
remote: Counting objects: 1023, done.
remote: Compressing objects: 100% (777/777), done.
remote: Total 1023 (delta 556), reused 423 (delta 216)
Receiving objects: 100% (1023/1023), 235.29 KiB | 271.00 KiB/s, done.
Resolving deltas: 100% (556/556), done.

对于每个程序包,每个版本的Fedora的源都保存在不同的分支中。因此,我们可以找出与我们要为其构建的发行版本匹配的分支:

$ cd zsh
$ git checkout -b f31 origin/f31
Branch 'f31' set up to track remote branch 'f31' from 'origin'.
Switched to a new branch 'f31'

从现在开始,我们将在程序包的工作目录中调用fedpkg。

设置构建环境

对于正常运行的开发环境,不同的程序包将有不同的要求。幸运的是,Fedora的dnf可以帮助我们引入它可以构建的任何程序包所需的依赖项。这可以通过dnf builddep命令来完成。对于我们的用例,我们可以引入zsh依赖项:

$ sudo dnf builddep zsh

直接建立可分配的RPM

在修改包之前,有必要测试一下,看看我们是否能够在不进行任何修改的情况下正确地构建它,以下命令将尝试从代码的当前状态构建二进制RPM:

$ fedpkg local

我们可以观察到已经生成了以下RPM:

$ ls -l1 x86_64/ noarch/
noarch/:
total 452
-rw-rw-r--. 1 user user 459748 Jan 14 13:58 zsh-html-5.7.1-4.fc31.noarch.rpm

x86_64/:
total 5476
-rw-rw-r--. 1 user user 2999294 Jan 14 13:58 zsh-5.7.1-4.fc31.x86_64.rpm
-rw-rw-r--. 1 user user 1771784 Jan 14 13:58 zsh-debuginfo-5.7.1-4.fc31.x86_64.rpm
-rw-rw-r--. 1 user user  829306 Jan 14 13:58 zsh-debugsource-5.7.1-4.fc31.x86_64.rpm

或者,在模拟容器中构建RPM。

甚至在Docker容器流行之前,Fedora就向我们提供了一个名为mock的工具,该工具会创建了一个用于构建程序包的独立环境。因此,可以使用它独立于开发环境来构建程序包。

首先,我们需要确保安装了mock。

$ sudo dnf install mock

然后,我们可以告诉fedpkg使用mock来构建包:

$ fedpkg mockbuild

mock的构建输出全部被移动到一个目录,其中包含构建的日志文件以及程序包的版本和名称:

$ ls -lR results_zsh/*/*
results_zsh/5.7.1/4.fc31:
total 9852
-rw-rw-r--. 1 user user  190779 Jan 14 14:10 build.log
-rw-rw-r--. 1 user user    2744 Jan 14 14:03 hw_info.log
-rw-rw-r--. 1 user user   52642 Jan 14 14:08 installed_pkgs.log
-rw-rw-r--. 1 user user  614047 Jan 14 14:10 root.log
-rw-rw-r--. 1 user user     998 Jan 14 14:10 state.log
-rw-r--r--. 1 user mock 3146067 Jan 14 14:06 zsh-5.7.1-4.fc31.src.rpm
-rw-r--r--. 1 user mock 2999346 Jan 14 14:10 zsh-5.7.1-4.fc31.x86_64.rpm
-rw-r--r--. 1 user mock 1772488 Jan 14 14:10 zsh-debuginfo-5.7.1-4.fc31.x86_64.rpm
-rw-r--r--. 1 user mock  829174 Jan 14 14:10 zsh-debugsource-5.7.1-4.fc31.x86_64.rpm
-rw-r--r--. 1 user mock  459682 Jan 14 14:10 zsh-html-5.7.1-4.fc31.noarch.rpm

使用mock执行构建的优势在于,它可以验证构建的依赖项是否正确指定,并且还可以用于在同一台计算机上针对发行版的不同版本进行构建。另外,它也是Fedora自己的构建服务器(即Copr)背后的运行设备。

添加补丁

要为程序包生成补丁,我们需要包本身的源代码,而不是告诉我们如何构建它的Fedora脚本的源代码。

有多种获取源代码的方法,其中一种是使用fedpkg。我们可以让它创建一个目录,其中包含已准备好构建的修补程序包源代码。这个过程将执行RPM规范源代码的准备阶段,结果通常是工作树下的一个目录。

$ fedpkg prep

因为Fedora源代码包不会考虑源代码控制方面的问题,所以它们只包含某个版本源代码的压缩文件。在源代码控制中不跟踪创建的目录,如果要修改它,通常最好将它移到另一个目录,并使用Git对其进行初始化。如下所示:

$ mv zsh-5.7.1 ../zsh-5.7.1
$ cd ../zsh-5.7.1
$ git init && git add -f . && git commit -m "Base version"

在这个示例中,我们的zsh-5.7.1只是该Fedora维护版本的代表,它可能已经被Fedora进行了某种程度的修补,但是它可以并且应该被用作我们进一步修补的基础。但是,我们可能想要克隆完整的项目,在这种情况下,zsh方便于完整的Git历史浏览。

$ cd ..
$ git clone git://git.code.sf.net/p/zsh/code zsh-upstream
Cloning into 'zsh-upstream'...
remote: Enumerating objects: 94026, done.
remote: Counting objects: 100% (94026/94026), done.
remote: Compressing objects: 100% (25128/25128), done.
remote: Total 94026 (delta 73505), reused 87930 (delta 68487)
Receiving objects: 100% (94026/94026), 16.60 MiB | 1.07 MiB/s, done.
Resolving deltas: 100% (73505/73505), done.

回到任何一个源代码克隆,我们都可以继续提交更改并通过提交生成补丁,以下就是一个简单补丁的示例:

$ git diff HEAD
diff --git a/Src/hist.c b/Src/hist.c
index dbdc1e4..cdb1dd1 100644
--- a/Src/hist.c
+++ b/Src/hist.c
@@ -580,7 +580,7 @@ histsubchar(int c)
      */
     lexraw_mark = zshlex_raw_mark(-1);-    /* look, no goto's */+    /* look, no goto's! */     if (isfirstch && c == hatchar) {
        int gbal = 0;

$ git commit -m "Adding an exclamation mark to Src/hist.c"
[f31 c00d68b] Adding an exclamation mark to Src/hist.c
 2 files changed, 100 insertions(+), 1 deletion(-)
 create mode 100644 0001-zsh-5.7.1-zle-history-avoid-crash.patch

$ git format-patch HEAD~1 -o ../zsh
../zsh/0001-Adding-an-exclamation-mark-to-Src-hist.c.patch

git format-patch是一个方便的命令,可以将git提交为文件,它的输出可以作为程序包构建过程的输入,因为Fedora中的程序包标准要求其上层的源代码与在其上生成的补丁分开。

将补丁文件添加到Fedora程序包的源规范中可能会有些棘手,但是经过几次之后,你了解到打包格式比起初看起来更简单。对于zsh,我们只需要在zsh.spec开头的Patch

$ git diff
diff --git a/zsh.spec b/zsh.spec
index 0d77f70..0022a90 100644
--- a/zsh.spec
+++ b/zsh.spec
@@ -14,6 +14,7 @@ Source6: dotzshrc

 # make failed searches of history in Zle robust (#1722703)
 Patch1:  0001-zsh-5.7.1-zle-history-avoid-crash.patch+Patch2:  0001-Adding-an-exclamation-mark-to-Src-hist.c.patch
 BuildRequires: autoconf
 BuildRequires: coreutils

较旧的程序包可能需要更多更改,例如,在文件中进一步添加与上述准备阶段有关的额外%patch行。

识别修补过的程序包

如果没有其他的.spec字段被更改,我们修改后的包在元数据中与原始包几乎没有区别。通常情况下这是不需要的。因此,最好将.spec修改为在程序包的Release字段中包含一个字符串。例如:

diff --git a/zsh.spec b/zsh.spec
index 0022a90..78c362e 100644
--- a/zsh.spec
+++ b/zsh.spec
@@ -1,7 +1,7 @@
 Summary: Powerful interactive shell
 Name: zsh
 Version: 5.7.1-Release: 4%{?dist}+Release: 4%{?dist}.daloni License: MIT
 URL: http://zsh.sourceforge.net/
 Source0: https://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.xz

我们可以看到,在构建之后。

$ ls -l1 x86_64/ noarch/

noarch/:
total 452
-rw-rw-r--. 1 user user 459790 Jan 14 15:15 zsh-html-5.7.1-4.fc31.daloni.noarch.rpm

x86_64/:
total 5476
-rw-rw-r--. 1 user user 2999482 Jan 14 15:15 zsh-5.7.1-4.fc31.daloni.x86_64.rpm
-rw-rw-r--. 1 user user 1773094 Jan 14 15:15 zsh-debuginfo-5.7.1-4.fc31.daloni.x86_64.rpm
-rw-rw-r--. 1 user user  829124 Jan 14 15:15 zsh-debugsource-5.7.1-4.fc31.daloni.x86_64.rpm

安装程序包

可以通过dnf install安装新程序包,一旦安装了修补程序包,就可以通过各种方式安装的dnf list的输出进行重复查找,从而轻松发现它们。

$ sudo dnf install x86_64/zsh-5.7.1-4.fc31.daloni.x86_64.rpm

$ dnf list installed | grep @@commandline
zsh.x86_64              5.7.1-4.fc31.daloni                    @@commandline

$ dnf list installed | grep daloni
zsh.x86_64              5.7.1-4.fc31.daloni                    @@commandline

避免补丁在版本升级时被覆盖

当Fedora发布新版本的程序包时,自动系统升级可能会覆盖补丁。虽然有几种方法可以防止这个情况的发生,但我最喜欢的一种方法是从dnf的配置中排除对此类程序包的升级。

$ grep exclude /etc/dnf/dnf.conf
exclude=zsh

不过,处理程序包的话题已经超出了本文的范围。

保留debuginfo!

如果修补的程序包崩溃并生成了一个核心文件,那么构建中生成的特殊的debuginfo程序包在检查这个corefile时可能很方便。因此,你可能需要保留这些debuginfo程序包,特别是因为复制的构建有时很难与原始的二进制兼容性完全匹配。这取决于构建包的确定性如何,这是程序包自身构建系统固有的问题。