『功守道』软件供应链安全大赛?PE二进制赛季启示录:上篇

目前,由阿里巴巴集团安全部主办、SecZone开源 安支持的『功守道』软件供应链安全大赛 · PE二进制赛季已圆满结束。

0. 综述:办公软件系统供应链安全

软件供应链安全态势,以及阿里安全『功守道』比赛整体的目标和愿景,请参考系列前篇:上篇/下篇。一言以蔽之,就是针对构成互联 全链路的软件系统中,以往被无条件信任、但实则仅仅因为曾被集体忽视的薄弱环节,尝试挖掘各种非传统的攻击面、攻击姿势,激发应对威胁的规模化前摄性缓解方案研究。

每个赛季,我们关注软件供应链中的一个关键环节。在之前结束的赛季中,我们探讨了针对互联 最基础软件设施——Linux操作系统、基础开源软件组件的可能风险。而在刚刚结束的第二赛季中,我们关注的场景放在了与“人”更贴近的方面。

在近两年,运行在个人电脑上的终端软件被从源头进行污染,造成的软件供应链安全事件发生越来越稠密。2015年9月,XCode应用污染,非正规渠道分发拷贝含有对开发工具链的污染;2017年8月,远程终端软件XShell爆出上游污染,会进行管理员账 密码搜集泄漏;2017年9月,CCleaner被黑客篡改,植入了远程恶意代码下载器。这三类客户端软件恰好分别对应了企业员工办公和开发环境下使用的三类客户端软件,我们的本次比赛也从这三个场景切入探讨了这个领域内的潜在意外风险。

1. 威胁定义

Windows上软件的分发一般采用PE二进制程序文件的形式,这决定了从本质上讲,相比于海量开源软件代码,这一赛季中载体内攻击载荷的隐蔽性、开放性更强,威胁场景也更为泛化:

对于给定的二进制文件,你将采用静态还是动态的方法去扫描或测试?针对有可参考源代码的二进制分发包,是否有能力通过同源性判断察觉异样?这是道开放题目。

PE二进制赛季共两轮分站赛。相比于C源代码赛季按照难度递进方式划分的三轮分站赛,PE赛季则针对不同的场景进行设计,两轮比赛分别针对“软件供应链上游(生产者)”和“软件供应链下游(消费者)”场景设计。而受制于比赛对抗形式和二进制特殊性限制,我们在这两个子场景上都不强调覆盖问题的全面性,而聚焦在一个特定的问题上。

软件供应链上游场景

企业作为软件和服务供给侧,软件开发者是上游源头角色,而使用工作电脑进行开发的的工具链(如各类IDE软件、开发库),就是处于软件供应链最上游的存在。

针对个人开发环境,如果能够污染到开发集成工具链,那么对于企业最核心的资产——代码,就能够最直接地获取甚至篡改。因此在这个场景下,我们将聚焦在一个特定的开发工具上,对开发工具链安全进行反思。

软件供应链下游场景

企业员工办公电脑上当然有很多的高价值资产,如各种文档文件;但最重要的资产永远是企业线上环境的稳定和安全,从这角度说,员工直接无条件信赖使用、但潜在风险最高的软件,就先要说到远程连接客户端软件。如果能够污染到企业运维人员的远程连接终端程序,那么不止能够有机会掌控本应加密渠道内传送的信息,甚至可以将隔离的线上生产环境撕开一个入侵的口子。

此外,考虑从一个看似无害的客户端软件,从其大量正常操作中区分辨识出可疑的行为,那么最高级的隐藏性就体现为对载体程序原有功能、逻辑的复用。沿此思路,在一个 络客户端软件中潜藏的信息获取和 络外传泄漏最难发现,因此也是我们重点考察的一个赛点。

2. 比赛具体设置

赛题环境

每一轮分站赛,我们都将把目标设定到一到两个代表性软件,以及围绕该软件的若干支撑或扩展程序、组件上。比赛目标设置为Windows 32位。

软件本身可能由一个或多个可执行文件、动态链接库文件组成,相关程序、组件或扩展也为PE文件。所有相关PE文件都可能搭载有恶意代码。作为题目的软件不保证在直接执行时就会直接触发任意形式的恶意行为,所以解题队需要自行保证环境安全;而软件也不会进行无关的、极大提升解题难度的加壳保护;但可能会做贴近真实场景,对二进制程序进行一定程度上的置乱和混淆,以确保解题队通过简单的比对方法就能够进行问题定位。

形式与内容

释放最终二进制可执行文件的题目形式,根据前期设计,有多种备选方案,考量和取舍为:

  • 备选方案一为,题目本身选用公开发布的软件二进制文件,并在其上将题目部分的代码作为独立的代码段附加到PE文件上,并可选地将对恶意代码片段的调用,以补丁等形式插入到原有代码逻辑中。这种方案在当前真实场景中有最高可能存在,考虑到大量下载站或者国内非法软件分销商可能在软件发布层面对软件进行篡改,而这样的篡改仅可以在二进制文件层面以上述形式存在,所以这种形式贴近这样的现状。但是这样的文件篡改,在二进制文件的结构方面有很明显的痕迹和特征,在真实场景中极易检出,其存在仅依赖于大量软件在分发和使用阶段没有简单的检查;但作为题目,这样的出题方式基本无效,而如果仅为了提升题目难度而额外附加大量诱导误 的无意义代码,又失去了比赛本身解决真实问题的意义。
  • 备选方案二为,类似C源代码赛季,出题者无需关注载体,仅提供大量恶意代码片段,由我们将其随机插入到选用的载体项目代码当中,编译为二进制文件作为题目发布。这种形式从操作层面有C源代码赛季的模式可借鉴。但是,一方面,C++语言层面进行代码片段的随机插入,经过试验面临语法层面的复杂限制,为保证修改后的代码可编译,相比C源代码项目而言,还需要大量工作;另一方面更为重要,即这样的题目插入虽然可以保证题目数量,但是恶意代码本身与载体工程和函数完全无关,无论从结构还是功能上都很生硬、突兀,仅从恶意对象分析角度来讲不够好,也比较容易检出,所以也不予采用。
  • 备选方案三为,选用开源客户端软件工程,由多支出题队在源代码上自行选定功能位置,直接插入恶意行为代码片段;各支队伍代码合并后,添加适当的特殊版本警示功能后,编译成为PE二进制文件并针对关键警示功能代码进行保护,形成最终赛题。这种方案的劣势是,题目本身需要经过出题队的设计,考虑功能性、隐蔽性,所以必然难以要求很高的数量。除此以外,这种方案既具有对真实场景的贴合性,即软件本身很可能是在开发、生成环节被黑客污染的情况;又具有作为比赛题目的可操作性,出题难度、解题难度从设计时来看比较均衡;同时作为PE赛季的考量,本身需要自动化解题的工作量就很大,因此不需要太大题目数量。所以我们最终选用了这套方案
  • 备选方案四为,题目舍弃二进制文件的载体,转而提供的是二进制程序指令级的动态执行记录。这个方案的初衷是,当前针对二进制文件分析(黑盒分析)的领域,动态分析(将目标程序执行起来,根据运行时的过程、特征进行分析)比静态分析(不做执行,在文件反汇编的二进制指令、反编译的伪代码)的工作和尝试更为普遍,对学术界更为友好。此外,程序分析的主要问题是构造潜在可达的执行路径;对于一个二进制文件,如果插入的题目代码,被分析程序判定为没有一个可能的路径执行到它,那么就会被忽略,这样也会造成题目的无效性。而如果我们发布的,就是程序执行的指令级控制流,这其实就是当前做程序动态分析的各种工作的基础输入,这样可以让解题者使用最擅长的方法执行分析;我们在出题的操作上,也只需要向正常的控制流当中随机杂糅一段恶意行为的控制流即可。该方案原本设计用来与上一方案一起,作为该赛季的两种比赛模式,供参赛队二选一;但因为组织方种种考虑,最终舍弃。
  • 软件供应链上恶意行为范畴

    Windows上二进制程序向来是恶意程序的主要战场,各式各样的恶意行为不胜枚举;本次比赛不排斥使用典型已知恶意代码,但是均紧扣“软件供应链安全”主题以及上述场景。

    类似的,业界与学术界针对PE程序进行分析的方法和研究,也非常丰富,涵盖了静态、动态,人工、自动。各种方法往往有其专长的适用问题域,也可以进行整合,这些都将是我们欢迎的思路。

    因此,我们针对本赛季,从题目设计和解题预期两方面,都将不设严格的限制,不给出条例清晰的“考题范围”;但是为了有效引导出题脑洞方向,以及解题队知识积累、方法选用,我们做如下一些形式化要求:

  • 目标、行为与软件供应链的强关联性。通过污染程序文件,使得执行该程序的个人电脑不可用、文件丢失、被控制等等,均可以达到破坏效果,但是本身仅是病毒木马的“常规操作”,无助于以该受害者电脑为突破点,对其后的企业或组织造成更大的威胁。因此,我们首先强调,“攻击”行为选定的目标和本身达成的目标,都应当与个人工作电脑在软件供应链中的角色有关,并且和一般恶意程序在目的上具有可解释的差异性。例如,单纯地进行键盘hook来无差别地进行记录,只能认定为一般的恶意行为;而在特殊场景上下文下通过hook偷取、泄漏的用户输入,例如针对特定远程连接登录、代码仓库提交的密码的监听外传,即认定为相关行为。
  • 非单纯、单点破坏性。典型的破坏行为和特征,仅以一个工作站为攻击目标,造成的危害有限,目标可以恢复状态,单纯破坏行为也容易被早期、中期检出。因此,如果是以破坏为主要攻击载荷,那么要求这样的行为仅可以以运行程序的个人电脑为跳板、以更大的对象为间接目标,且鼓励新颖的攻击方式,已知的、可被当前杀毒引擎或主动防御等技术检出的尽量回避。
  • 趋利性与隐藏性。除了破坏行为之外,软件供应链污染最符合常理的目标,就是针对目标核心资产的侵害,亦即攻击者己方的获利。但为了保证这样的不当获利最大化,高级的攻击也就要求行为本身的特意隐藏,不论是一次性恶意行为实施本身消除痕迹,或是后台不定时恶意触发行为的长期潜伏,还是污染行为可能造成的长期、扩散的遗留效果。
  • 赛题选用

    软件供应链上游攻防战场

    在本轮比赛中,我们唯一选定一款开源IDE软件:Code::Blocks,作为目标载体。该软件有扩展机制,并有一定数量的官方、第三方插件,软件本体、插件均为C++语言开发。软件本身工程模块化,若干功能模块为开源项目纳入,因此该软件本身功能代码基本自包含。

    同时,围绕该软件展开,比赛指定若干开发工具链通用工具,也是该软件中污染代码可能针对的攻击目标、数据窃取渠道,包括开发库,代码版本控制终端软件等;除此以外,任何在终端电脑上可能存在的开发资源和工具,如各种语言的代码文件、工程文件,都是本轮比赛赛题可能针对的目标。

    软件供应链下游攻防战场

    在本轮比赛中,我们选定了两款开源客户端软件为目标载体。

    其中一款是一个本地客户端软件ConEmu,它是很多第三方Windows系统上cmd替代软件的底层实现。作为一款终端,其中本身出现文件操作、 络行为都是貌似合理的。同时,该外壳类软件结合、集成有多类远程连接和shell工具,因此作为一个出口,可能在这个层面对多种基础客户端软件进行信息窃取或攻击。另外,该软件自身的实现,依赖于对其中执行进程的hook等不常见操作,攻击者可以借用、仿照这样的行为和逻辑,而解题方则面临从中进行恶意行为判别的更高难度。

    另外一款是一个 络客户端软件eMule,它是一个老牌开源p2p下载管理软件。作为p2p软件,其自然地以磁盘文件访问甚至遍历、下载与本地资源上传、 络端口探测等行为作为基本常规操作,因此很多预想中的软件供应链攻击行为,例如搜索本地特定数据文件、代码资产文件并进行 络传出泄漏的模式,在这个软件中更难以区分,是一个具备很强欺骗性的对象。

    3.预告

    以上进行了本赛季的考量与详细设计陈述。本系列文章下篇,将对我们本赛季中最能代表场景意图、代表出题脑洞、代表迫切风险的精选题目进行讲解,同时还对头部解题队的解题思路进行公开,欢迎参阅。

    另外,本次大赛截至目前,已经完成预选分站赛中的前两个赛季,还有最后一个赛季——Java开发生态安全赛季即将开始。该赛季聚焦类似互联 业界大量使用二三方Java开发包的企业中,开发生态上供应链安全问题。该赛季切入企业安全正面战场,欢迎来战!了解及 名请参见:https://softsec.security.alibaba.com/

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2018年7月26日
    下一篇 2018年7月26日

    相关推荐