PE赛季报名启动 |『功守道』软件供应链安全大赛

背景

软件供应链安全,这可以说是一个新近人造的概念热词。泛泛来讲,如今的软件系统中任何一方都不是孤立的;套用到企业的场景,就有了供应链的概念。

以典型互联网企业为例。线上生产环境所依赖的操所系统,配套的基础软件,是最基础设施,这方面RedHat、Linux的开源生态、Oracle等底层平台供应者是供应链上游,企业是下游;而每个企业都有大量的PC端、移动端等通过各式渠道分发的客户端软件,很多企业近些年开始有对开源界的贡献,这些软件、代码运行在终端设备上,这里企业是上游,客户是下游。类似的二元关系可以用来定义如今这个行业的所有链路。

没有一条链路,是我们能够自信完整掌控的;对此的隐忧,在之前或许只是杞人忧天,但如今却已真实来到面前。且看外部关注点,面对过去两年事件频发的看似独立的情况,在RSA上已经将软件供应链安全作为问题抛出。孤立的事件我们总可以依靠事件响应来应对,这样至少我们不会比别人更容易成为众矢之的;但沿着这个思路考虑下去,我们还能不能相信RedHat、开源社区的那些作为基石的操作系统环境?能不能相信大量存在的Java三方包?能不能相信每个员工工作电脑上安装每一个任意渠道而来的软件?甚至于在互联网快速迭代的大环境下,那些开发者们从GitHub上借鉴来的代码是不是被埋入了源码级的特洛伊木马?

这一切都未知。隐患其实已经发展成了何种真实风险,未知。最致命的是问题完全发散,任何针对已知来收敛问题的尝试都很可笑。没有任何一方在此中有任何优势。谁先捅开这个庞杂问题,都无异于打开潘多拉的盒子。

但盒子总会被打开;看热闹甚至先在软件供应链整体崩坏进程中闷声作大死的,都将自食其果;而阿里安全,就决定做这样的角色,振臂高呼让大家知道黑盒子里的可能有多么可怕的恶魔,然后在纠集起防护力量的同时,慢慢地打开盒子。

C源码赛季:混沌初开

C赛季最终共实施3场分站赛。为了比赛当中,攻防双方逐步对抗升级,我们将比赛对于系统与基础软件代码的恶意行为嵌入检测,在恶意行为维度,按照行为组成,划分为如下三类,分别对应三场比赛:

| 单点恶意行为对抗

5月19日第一场分站赛为单点恶意行为对抗。题目覆盖所有考点清单的恶意行为类型中,全部仅“单点即恶意”类型特征。例如,部分系统和应用的数据文件与配置文件,仅应当由特定的应用,或程序经由特定的API合法访问,直接访问这些文件即为足够判定非法。

| 二阶段恶意行为对抗

6月2日第二场分站赛为二阶段恶意行为对抗。题目覆盖清单中,全部仅可以描述为二阶段联合的恶意行为,即从时间上看,可分为时序上的“上游行为”和“下游行为”。上下游行为之间一般应具有数据相关性,且数据相关性本身可作为出题点(如诱导误报)的一部分考虑。

| 复合(多阶段与开放性)恶意行为对抗

6月23日第三场分站赛为复合(多阶段与开放性)恶意行为对抗。题目侧重于不在之前两场分站赛所覆盖的范围内的题目,如需要更多阶段联合组成的恶意行为的定义与检测。更重要的是,本轮中添加了一部分进阶题目,即恶意代码充分结合载体的已有功能、API调用等进行混淆,并更结合载体代码逻辑完成恶意行为。

重点需要强调的概念是,在作为软件供应链污染可以达成的恶意攻击,污染者与攻击面是两个独立的范畴:攻击者完全可以将恶意行为污染嵌入到一个基础软件中,实现对另外一套系统的打击。以下应用环境,并非是指在这些基础应用自身代码中进行污染;而是指在应用代码中插入代码、以这些服务端基础应用攻击面为对象的恶意行为。

整个比赛设置的基本形式是国内前所未有的攻防模式。通过对外公开招募,形成了具有红蓝对抗关系的两支队伍:出题队(蓝军)与解题队(红军)。

困兽:经典赛题示例

| thttpd后门陷阱

从基础软件或应用上面入手,稳定可控的后门是最佳选择。而在一个无关应用中突兀地出现网络连接,隐蔽性总归很差;在thttpd当中,以很袖珍的代码实现稳定的后门,是这里首先要呈现的一个题目。在thttpd项目,恶意代码嵌入到libhttpd.c文件中,上下游恶意代码相关上下文:

| 代码


后门会根据http头判断是否开启cgi功能,并根据http头Accept-Language决定解析执行文件的路径。上述代码段中,首先通过http头TE:设置开启cgi功能(对应上述代码中,httpd_parse_request函数中插入的else if ( strncasecmp( buf, "TE:", 3 ) == 0) {...}代码块)。而下游代码同样巧妙,指定特殊的Accept-Language: en;q=1.1决定是否执行指定的系统命令(即cgi_child函数插入的if ( strstr( hc->acceptl, "en;q=1.1") != (char*)0 ) {...}代码块)。

本例恶意行为的主要特点:

该后门的嵌入,新增代码量极小(共7行),巧妙借用了thttpd处理用户请求、cgi的原本逻辑,借用了execve的调用,没有任何新增的API调用等行为,可以躲避有意识的行为特征匹配检测。

该后门在代码中的插入,分布在了存在逻辑关联的上下游两个位置,在源代码分析领域,属于过程间代码扫描问题,对于基于语义的源代码静态扫描方案也提出了很高的要求。

功守:面对虚无的对抗

安全行业从来不是一个攻守双方旗鼓相当的领域,攻击技巧相对于防守体系而言始终拥有很大的杠杆。从这一角度讲,本次比赛中思路夺人的蓝军固然是明星,而参与解题的红军破题者,更是代表出路和希望。

从最终结果来看,按客观评价百分制,三轮分站赛加权求总分,前五强队伍得分分布如下:


| 决赛启动仪式

想必业界对于这些参赛队伍的思路、工具和成果,都有着浓厚的兴趣。此处先卖个关子:这些红军队伍的思路,我们将在8月22日的北京,阿里巴巴2018网络安全生态峰会的分论坛——软件供应链大赛研讨会暨决赛阶段启动仪式上,邀请这些胜出队伍代表进行分享,敬请期待!

未来已来:PE二进制赛季

至此,我们完整的『功守道』软件供应链安全大赛,在预选赛阶段,刚刚完成约1/3。大赛完整的时间线如下图所示;而其中从7月开始,我们将马上实施大赛第二赛季——Windows PE二进制程序赛季(简称PE赛季)。


相比C源代码的攻防,PE二进制上面的安全风险与对抗,历史安全事件更多、更触目惊心,不论是XShell污染,还是CCleaner投毒,抑或针对集成开发环境插件生态的污染,都是领域内耳熟能详,却又缺乏系统性关联分析的热点,也更能够起安全从业者和爱好者的兴趣。针对这些繁杂的事件,我们对主要风险做了抽象,该赛季由此设置场景如下:

| 场景

IT企业员工工作电脑环境复杂且无法收口:安装软件来源往往跳出白名单,而鱼龙混杂的下载服务往往包藏祸心;遑论即便是开放软件的提供商,也可能存在被入侵并在二进制文件层面植入恶意代码的情形,导致潜在的官方不可信,亟需二进制审查,或源码二进制等价证明。

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

在这个更贴近每个互联网企业从业者实际,符合安全圈从业者的兴趣口味的题目设计赛季,我们将期望能够收获更广泛的关注、影响力,更多让人拍案叫绝的恶意代码攻击思路,以及更让人叹为观止的防守者解题方案。这里欢迎所有安全技术兴趣者持续关注到该赛季的过程中;也希望对于比赛的赛制形式和细节有见解建议的同学能够协助我们将比赛的价值发挥到极致。

| 题目下载

PE赛季的基础概念题目,请到这里下载。更多比赛相关概念题目、信息和动态,欢迎访问比赛官网(https://softsec.security.alibaba.com/)了解,与来自阿里安全和该领域其它玩家一起切磋。

PE赛季本周开赛

7月7日测试赛

7月21日第一场分站赛

报名通道保持开启,只等你来

特别感谢

以上文章摘于“『功守道』软件供应链安全大赛•C源代码赛季启示录”,并在此感谢SecZone开源网安、OWASP中国、昂楷科技对此项目的大力支持。