作者:outx@SecQuan, nerd@SecQuan
为促进网络空间安全研究的学术交流,了解国际网络空间安全最新学术动态,网络安全研究国际学术论坛(InForSec)于2021年6月5~6日(周六日)在北京举办“网络空间安全国际学术研究交流会(上)”。本次学术活动主题为“网络和系统安全”,分享学者们研究过程中的灵感、经验和体会。本次有幸能到现场聆听会议,第一天的内容主要为顶会论文分享。
随着近年来对深度学习技术在安全领域应用研究的深入,其在许多包括函数边界检测、二进制代码相似性检测、函数原型推理等二进制分析任务中表现出一定优势。在二进制分析任务应用深度学习技术时,需要将考虑以何种形式将原始的二进制代码输入到神经网络中,在多种已有方案中,代码嵌入是现有较好的方法。汇编代码的嵌入,按照作者的话讲,即以一个固定长度的向量表示指令。现有的方法主要基于word2vec/doc2vec等技术,其优势在于能够避免人工选取特征、在一定程度上能提取出高层次语义特征;其不足在于无法表示复杂的指令格式(例如Asm2Vec只考虑一个操作和至多两个操作数)、程序上下文受噪声影响(依赖控制流图,受编译器优化影响大)。因此,针对现有技术存在的问题,作者提出PalmTree(Pre-trained Assembly Language Model for InsTRuction EmbEdding),基于BERT模型,并提出多种自定义训练任务,对汇编代码嵌入技术做出改进。
PalmTree主要分为三部分:指令对取样,Token化,模型训练。
1.指令对取样
使用原始汇编代码、控制流图、数据流图抽取其中的控制关系和def-use关系的指令对。
2.Token化
PalmTree通过将每条指令都视为句子的方法,细粒度地将汇编代码进行Token化。针对指令中出现字符串和数字常量等OOV(Out-Of-Vocabulary)问题,PalmTree以统一的Token([str]、[addr])进行替换。特殊到,对于相对较小的常数(少于四位十六进制数),很可能表示的不是一个内存地址,而是重要的局部变量,因此保留其原值,并使用ONE-HOT编码进行Token化。
3.模型训练
PalmTree基于BERT模型,本文主要介绍了三项训练任务:Masked Language Model(MLM)、Context Window Prediction(CWP)、Def-Use Prediction(DUP)
作者表示PalmTree可以直接用于生成汇编代码嵌入向量,在算力足够的情况下,也可以选择对模型进行fine-tuning。在评估阶段,该预训练模型取得很好的效果,并在多个下游任务(代码相似性检测,函数原型推测)的应用中都强于参考文献中的方法。
Q: 为什么要识别与安全相关的 bug?
作者在探究之初提出了上述这个问题,然后围绕这个问题进行了很多思考,得出了以下的两点继续研究的动机:
以上两点总结起来可以理解为现有的一些项目或者代码的维护者的数量是有限的,同时每个人的精力也是有限的。对于每天上报的 bug 报告,维护者很难及时和全面的审查这些报告。为此,作者提出了以下 Goal:
Goal: 识别与安全相关的漏洞补丁
具体来说,识别与安全相关的漏洞补丁能够让一些项目或者代码的维护者能够及时的打上那些威胁严重的安全漏洞补丁以防止被恶意攻击者攻击,而不用耗费精力在修复那些无关紧要的 bug。
传统方法
传统的识别方法主要有:
但传统方法具有很明显的局限性,一是其精度难以保证,二是维护者难以判断 bug 的影响力。
通用代码安全规则和违规行为
基于以上通用代码安全规则和其对应的违规行为,作者提出了一个定义:给定一个代码和补丁,在没有打补丁的情况下,代码会违反以上安全规则。
SID 整体结构
根据上述定义,作者提出了 SID,这是一个基于 LLVM 的解决方案,其框架如下
主要分为三部分:预处理,剖析补丁,符号规则比较
在预处理部分,作者首先根据 bug 补丁将软件的版本分为打了补丁的版本和没有打补丁的版本,然后分别调用 LLVM 将其编译为对应的 LLVM IRS。
主要是通过静态分析来对不同版本的代码进行分析。在这个阶段,SID 根据补丁模型对补丁进行剖析,以确定关键组件。SID 首先识别出打过补丁和没有打过补丁的版本中的安全操作。接下来,SID 对关键变量进行数据流分析,以收集存在漏洞的代码片段。
通过这两方面的约束,才能够证明这个补丁修复的是一个安全相关的 bug。
方法表现
作者分析了 54K 的补丁,平均对每个补丁的分析时间为 0.83 秒。同时,作者主要从假阳性和假阴性两方面来分析
总结
受到通用数据保护条例(GDPR)的影响,大量WHOIS提供商需要修订其数据以符合条例要求。本文定量地对WHOIS提供商应对政策做出改变、数据修订策略与引用WHOIS数据的应用做出系统研究。
为了广泛地分析WHOIS提供商的数据,面临三大问题:
针对前两项挑战,作者与公司合作,被动采集18年1月至19年12月的WHOIS数据,包含1.2亿WHOIS记录与2.67亿域名的数据集。针对第三项问题,如下图所示,由于大部分WHOIS供应商依据ICANN的规范建议,使用简易的自动化方法修订其记录,其条目在统计学上会呈现出一定规律。因此,作者提出基于聚类算法的无监督方法来表征WHOIS的合规水平。
基于收集到的大量WHOIS数据,作者按WHOIS条目按提供商及年份分类,将数据以(provider; registrant region; data subject; time window)四元组为节点存储。针对data subject,为了减少特定数据对聚类算法的影响,将条目中特定字符串以统一的Token替换(域名、数字等)。特殊的,作者定义四元组以定义邮箱地址条目数据:1.邮箱用户名(@之前)长度2.邮箱地址域名3.web形式链接的域名4.该部分数据子字段的数量。最后,作者使用TF-IDF提取WHOIS条目文本的特征,使用DBSCAN算法进行聚类分析。
其实验结果(提供大量属于EEA域名的WHOIS供应商)如下图所示
根据实验结果可以看到,GDPR对大型WHOIS供应商有较强的影响力,但是并非所有供应商都按要求完全服从保护条例要求。在时间层面,大部分供应商都在GDPR实际生效前对它们的WHOIS条目数据进行修订以符合条例要求,并且这一行为在ICANN发布临时规范建议后尤为明显。在数据保护的手法方面,对于联系方式数据,部分供应商将用户真实信息替换为服务商信息、空信息或类似“redacted for privacy”的提示信息;相似的,对于电子邮箱信息,供应商使用假名邮箱、WEB链接、统一邮箱地址或分层访问系统将用户真实邮箱进行隐藏。鉴于域名持有人需要邮箱进行域名交易、证书验证或接收漏洞通知等原因,ICANN并不推荐将邮箱地址替换为空。
进一步分析大型WHOIS供应商的实验结果,如上图示,虽然GDPR政策只要求保护属于EEA的域名,但是大部分大型供应商对不属于EEA的域名同样进行了保护(既上图中蓝线和黄线同时下降到几乎为0)。不幸的是,小型供应商对于GDPR政策的反应并不积极,如下图左侧所示,在32个不合规的供应商中,有21个的域名份额不到总共的0.07%。
研究动机
首先是微服务之间通过网络 API 的通信方式会带来一些新的攻击面。其次,不安全的容器镜像可能会导致容器被渗透。
一个具体的例子:
现在的微服务应用具有规模庞大且频繁更新的特点,如果手工配置访问控制策略的话,不仅耗时巨大且容易出错,也相对没那么灵活。
现有的分布式系统中的安全策略自动化方法:
设计思路
微服务应用的特点:
结合以上特点,作者采用了通过静态分析的方式从微服务代码中提取其正常的系统行为。
于是作者便提出了:
GOAL: 自动生成、维护、更新微服务的服务间访问控制策略
Challenge:如何获取完整、细粒度的服务间调用逻辑;如何对服务间的访问控制策略进行高效的生成和更新
基于静态分析的微服务间调用请求提取
具体来说分为三步:
基于图的微服务间访问控制策略管理
运行时的策略检查时间随着安装的服务间访问控制策略数目线性增加,这会造成整个微服务应用性能下降。
往往同一微服务可能会存在不同版本在同一时间提供不同的服务,这又会造成冗余,于是作者提出了一种优化思路:将同一服务的各版本共有的权限进行整合。这既消除了冗余,减少了策略总数,又消除了不必要的策略更新。
AUTOARMOR
AUTOARMOR 主要由三部分构成:
策略生成:将与当前权限节点相关的每个请求边翻译成一条服务间访问控制策略;如果一个调用请求的目标微服务尚未部署,就不授予微服务相应的权限
策略更新:版本更新对应版本节点的添加;版本回滚对应版本节点的删除
总结
AUTOARMOR 是第一个微服务间访问控制策略自动生成的解决方案。主要涉及到的一些技术有:
AUTOARMOR 可以有效地实现微服务间访问控制策略的自动生成、维护和更新,但只引入极小的性能开销。
安全学术圈招募队友-ing, 有兴趣加入学术圈的请联系secdr#qq.com