国际权威研究机构Gartner的专业报告素来被业内人士奉为“行业发展的风向标”,近日,360政企安全集团联合Gartner在全球发布了EDR白皮书——《数字时代EDR 技术发展趋势》。白皮书指出:面向数字时代的EDR技术应该致力于真正解决终端所面临的各类高级威胁问题,以云端能力为核心,以安全大数据、威胁情报、高精度异常数据采集等核心技术为支撑,有效规避传统终端安全产品(EPP)检测技术的弊端,打造高维度的威胁检测对抗能力,做到事前预防、事中检测和事后修复。

基于多年实战经验积累,360政企安全集团以体系化作战/对抗/攻防思维的新战法为指导,打造了一套以云端安全大脑为核心的数字安全能力框架。在此框架下,构建了面向未来的EDR方案——360终端检测响应系统(简称“360EDR”)。360EDR依靠云端安全大脑在数据、情报、专家等方面的赋能,以及核心安全大脑“运营商”级的分析算力支撑,构建了“云地一体化”架构,以低成本、高效率、易部署的优势满足互联网和隔离网场景下的安全防护需求。

下一代EDR演进方向:三大安全能力必不可少

2013年,Gartner首次提出了终端威胁检测与响应(Endpoint Detection & Response,EDR)的概念。2014 年,Gartner正式发布 EDR 市场指南,2016-2019 年,EDR连续进入 Gartner 的十大技术之列。

根据Gartner 2021年的Hyper Cycle报告中,在终端安全和风险管理领域,EDR是现阶段最成熟、采用范围最广泛的安全解决方案,能有效防止终端被攻击和突破,保证远程访问安全。EDR作为下一代终端安全的核心技术,其重点在于监视终端以检测可疑活动,并捕获可疑数据进行分析以及安全取证和调查,并提供修复建议。

根据Gartner的定义,EDR产品必不可少的能力是:

1、具备大数据存储及处理能力:安全大数据是支撑构建覆盖面足够广、精确度足够高的检测防御模型,以及发现攻击者痕迹的必要基础。

2、具备安全分析能力:需要有各种安全检测分析技术,能对海量多异构数据进行分析,同时结合全网高级威胁情报,确保各类威胁全面可视。

3、具备能够部署及使用产品的专业人士:由于产品使用对专业性要求较高,多数企业选择采用驻场或远程托管给专业人士(MSS、MDR服务)。缺少专业人士过硬的技术能力,EDR的安全分析能力将大打折扣。

以能力成熟度模型为准绳:360打造“特级标准”EDR产品

360基于Gartner对EDR定义的必要能力,从实战层面提出了360 EDR的关键功能,并将EDR能力成熟度模型定义为4个等级:初级是EPP、中级是具备有限的EDR、高级是满足Gartner定义的标准化EDR、特级是SaaS化和智能化的EDR。

初级:企业在只有EPP的情况下,直接面对高级威胁是非常脆弱的。不仅无法进行有效防护,还无法检测到高级威胁的攻击,包括攻击的时间点和行为方式等都没有任何记录,企业的数据和网络安全面临着极大风险。

中级:在有限的EDR场景下,终端能够将收集到的攻击行为数据以及系统级事件上传到云端。但云端的大数据处理能力和安全分析能力都比较欠缺,面对海量大数据,缺少安全知识和具备专业技能的安全专家,无法有效存储、处理以及利用这些安全大数据。

高级:满足Gartner定义的标准EDR,能够检测和调查安全事件,限制终端漏洞利用,提供安全修复指导建议。理想状态下,能够实时检测到安全攻击事件,同时基于云端的数据和安全能力分析,为终端提供快速响应,还具备一定的攻击后修复和清理能力,能够最大程度减少企业用户的损失。

特级:SaaS化和智能化的EDR,在云端采用SaaS部署模式,提供安全大数据的存储、数据实时处理、关联分析、并行查询以及秒级响应能力,支撑安全专家随时进行主动的威胁狩猎。同时基于查杀引擎、知识图谱和AI技术实现技术提升,使得EDR越来越智能化,包括对海量安全事件的自动分类、自动分优先级和对攻击行为采取自动响应等,极大地体现了下一代EDR的智能化特点。

7e0f03917a6188c89c359d3756edc8b.png

随着数字时代下网络威胁持续演进,政企用户需要更加全面、主动、以新技术驱动威胁发现的终端防御能力。EDR能力成熟度模型能够帮助政企用户追踪终端安全领域的创新技术和实践,对于应对终端安全的问题和挑战具有重要参考意义。而要具备“特级”EDR产品的能力门槛极高,考验的是前端数据采集能力,后端的安全大数据支撑及分析和策略控制能力,这正是360 EDR的独特优势所在。

数字时代终端防御利器:360 EDR如何落地“特级”标准?

360 EDR是基于360云端安全大脑EB级数据情报赋能、360核心安全大脑“运营商”级分析算力、超内核级的精准威胁捕获技术、以及360安全团队17年威胁狩猎的实战攻防对抗知识打磨而成的,面向未来的EDR产品。

d9e6c16998794b7dfe660942a8c4536.png

360 EDR能帮助政企用户消除视觉盲点、认清风险的同时,自动化处置藏匿其中的恶意行为,深度追踪溯源取证攻击源头。同时,还支持轻量化部署,打造出一套超智能终端防御模式。具体而言:

360 EDR 能为政企用户提供云端轻量级部署(SaaS化)和本地私有化两种部署模式,满足互联网和隔离网双场景的安全防护需求。SaaS 化EDR是未来终端最有效的防护方式,除了天然具备的低成本、高效率、易部署优势,更通过终端各类安全事件和云端大数据的联动,使得针对高级威胁的事件检测和溯源能力大幅提升,实现了安全能力从孤岛式、被动式的单点防护到主动式、全局式的纵深防御的有序演进。对于隔离网终端安全防御场景,360 EDR 提供了本地私有化部署方式,可以把云端能力下沉到本地网络中,实现自运营的 EDR 管理模式。

360 EDR 将政企用户的风险处置能力指数级提升,实现了安全事件零损失。仅在 2021 年,360EDR发现并处理了勒索病毒、暴力破解、挖矿木马、WebShell 后门、恶意程序等重大攻击事件数百起;在用户内部风险管控方面,发现并处理了异常邮件发送,数据泄露,账号异常、违规外联等严重违规事件近百起。保障了多家用户关键业务运行安全,关键数据不受影响,从根本上解决了用户对网络安全的隐忧。

360 EDR 提供安全风险综合评估、SOAR 自动化响应处置能力,可以实现自动化安全事件闭环处置流程,提高安全事件处置效率和效果。利用 360 核心安全大脑提供的威胁情报自动关联分析能力,360 EDR 让高级威胁不再隐匿,攻击过程中所有关键环节全部可视,防护效果不再模糊,实现防护指标全部量化,让用户业务运行的更安全、更稳定、更高效。

此次360政企安全集团联合Gartner发布的白皮书,实际上更加明确了EDR未来的发展方向,面对数字时代高级威胁层出不穷的现状,传统终端安全产品依托本地有限的检测能力往往束手无措,因此EDR需要以更全面的安全分析能力、攻击溯源能力、可视化展现能力、快速响应能力、以及丰富的订阅服务等各类安全能力,帮助政企用户实时检测并防御高级威胁、防范内部风险、保障业务连续、提升处置效率等,这是真正面向未来终端安全防御理念的革新。

目前,360 EDR已经凭借云端轻量级部署和超智能分析算力,以SaaS化、智能化的方式服务于广大政企用户,帮助用户大幅度提升安全风险的识别、保护、检测、响应、恢复等各项能力,是真正面向未来的防御新一代终端防护利器!

点击阅读白皮书原文:

https://www.gartner.com/technology/media-products/pdf.jsp?g=Qihu-1-297FFQ0W-CHS

当我们没办法在技术上与勒索技术对抗,就要从业务上用逻辑对抗技术”是李宗晖应对勒索威胁的思路,作为一名安全架构师,他更擅长从业务视角解决终端勒索威胁。

5月12日,某企业安全架构师李宗晖在FreeBuf甲方社群第三场内部直播中担任主讲嘉宾,向大家分享安全业务视角下如何解决终端勒索威胁。

黑客已开始利用最近修补的关键漏洞,漏洞编号为CVE-2022-30525,该漏洞会影响企业的 Zyxel防火墙和VPN设备。如成功利用则允许远程攻击者在没有身份验证的情况下远程注入任意命令,从而可以设置反向shell。该漏洞是由Rapid7的首席安全研究员Jacob Baines发现的,他在一份简短的技术报告中解释了如何在攻击中利用该漏洞。Jacob Baines说,“命令以nobody用户

Bleeping Computer 资讯网站披露,房地产经纪巨头链家的前数据库管理员韩冰,因登录公司系统并删除公司数据,被判处 7 年有期徒刑。1652674054_62								</div>
			</article>
					<article itemscope itemtype=

近日,网络安全供应商SonicWall发布了关于安全移动访问 (SMA) 1000设备的三个安全漏洞的紧急报告,其中包括一个高

现下,互联网及移动互联网的发展与广泛应用导致企业安全边界消失,提升数据安全治理能力成为数字经济时代的紧迫议题。由于数据分布在云、数据中心、终端、移动设备等各个位置,传统的基于防火墙、入侵防御系统构建的企业安全边界防护手段失效,很难进行有效的数据保护,数据安全存在极大的隐患。

对此,嘶吼对北京天空卫士网络安全技术有限公司董事、合伙人、高级技术总监杨明非进行了人物专访,就企业如何建设数据安全治理体系进行了深度访谈。

微信图片_20220516105321.png

创业就该做点不一样的事

谈及加入天空卫士的初衷,杨明非还是坚信那句话:创业就是要做点没做过的事情,有挑战才有意思。

性格使然,如同他大学选择了自己并不擅长的英语专业。因本身还是喜欢理工科,杨明非一直都在自学计算机。源于兴趣,从初二开始,他就开始“捣弄”无线电,家里装满了好几大箱子的电路板、集成电路、CPU、三极管等各种电子元器件,直到现在还在组装功放、音箱。

1995年毕业之后的杨明非进了工厂,负责管理IT设备,正式进入了计算机行业。1997年开始接触负载均衡、数据库、灾备等专业领域,涉及到大量与安全相关的东西。

加入F5 Networks之后,他把全国大型银行的网银安全接入全部做了个遍,包括参与编写和制定网银建设的安全标准规范。F5的每一个安全相关产品推出,他总是第一个冲上去学习、理解并和客户做深入的讨论。

2015年,云计算刚刚兴起,云涉及到很多大型项目,渴望往上走的杨明非,希望能接触到更多的高层资源,有更广阔的发展空间。于是他加入了一家当时正在上升期的云计算公司,后来因为种种原因离开后,他重新开始看下一个增长点。

对于杨明非而言,之所以最终选择数据安全方向,基于两个原因:第一,彼时的F5 Networks一直期望转型做安全领域,但由于外企背景以及317号文要求银行100%使用国产化的安全产品,使个人发展空间受到很大限制;第二,在他看来,数据安全将来会是一个很大的机会发展点。

于是在2016年,他选择加入才成立一年的天空卫士,有充足的时间去学习和了解数据安全行业,直到第一个用户产品真正诞生。

构建数据安全治理体系

综合数据安全建设产品类型来看,传统国内厂商普遍提供通道型、终端类、工具级DLP产品,而国际主流厂商多提供集成型、整合功能(邮件安全网关或安全代理)为主的产品。

对于天空卫士而言,早在2017年,就开始实施UCS系统产品,把Web、数据、邮件、终端和移动设备安全等技术有效结合到统一的管控平台,把整个企业内部员工的办公网络进行全面覆盖,并且做到垃圾邮件防护和从内向外的敏感数据的防护。

杨明非表示,后来通过与客户的深度需求讨论和业界趋势分析,天空卫士在标准的数据安全的基础之上加入了人的行为分析。因为所有数据都是人在操作,无论是内部的坏分子或者内鬼,还是外部的黑客,而这些人的目标是都是数据资产。人对数据资产的操作行为,会体现出最主要的数据安全风险,也就是数据的流动性风险。

而在数字化转型的过程中,数据会被大量的分享和共享,这个过程中存在大量的数据安全风险。我们没有办法通过单一的策略去做判断数据的好坏,所以只能通过行为分析来识别。在网络安全体系中,即使是级别最高的零信任体系,也只是细化到应用的授权管理。但应用的访问授权并不能代表数据授权。因此,安全到最终需要解决的一个核心的问题,就是人和数据之间的关系,每个个体,是否能访问对应级别的数据。

历经2年的时间,杨明非和团队把整个产品体系推进了一步,融合统一内容安全技术(UCS)和内部威胁管理技术(ITM)推出内部威胁防护体系 (ITP),最终构建以人和数据为中心的数据安全体系,全面覆盖企业IT架构,在无边界的网络中保护企业的核心数据资产。

在数据安全法和个人信息保护法发布后,数据安全治理、数据分类分级保护被提高到了法律的高度,但对很多企业而言,对于数据安全治理如何能切合到企业的实际数据安全保护仍然是一个困惑的问题。而天空卫士一直以来的重点ITP体系,正好是对分类分级保护支撑,能对数据安全整理在企业中落地的最佳手段。因此,整合过去的经验,结合用户的实际需求,团队对内部威胁防护体系进行了革命性的升级,于2021年年底推出了数据安全治理自动化平台(DSAG)。

在DSAG中提出了更为宏大的平台体系设计,从数据的分类分级流程自动化开始,到数据识别模板的生成,通过对与应用系统数据处理的对接和传统办公环境中的关键节点通道分析。使用DSAG可以形成一个完整的以数据为中心的安全平台,提供分类分级保护和数据的存储、使用和流转的可视化管理。

数据安全建设处于“裸奔”阶段

在企业的数据安全体系建设里,杨明非发现,很多用户的数据安全建设,是处于一个“裸奔”的状态。

很多用户对数据安全的概念没有特别清晰的认识,认为修好了墙,数据就一定安全了。比如用虚拟桌面来处理所有的敏感数据,认为所有的数据都出不去,就认为已经安全了,然而事实上并非如此。任何的隔离系统都存在有外部数据交换通道,只要这些通道的传输内容没有进行很好的分析和保护,那对于数据安全来说就是“裸奔”。

举个简单的例子,在任何一个银行、金融机构或者很多企业都有第三方互联,以前拉个点到点的专线,两边防火墙一架,只允许两台机器之间进行通讯就认为高枕无忧,网络安全建设就到此为止。

但实际上,每家从不同的业务系统里面究竟取走了多少个人敏感信息,这些从数据安全角度来说,全部都是在盲区。很多时候在企业里,从生产到测试、数据的大量迁移的这些过程,以及一些内部的数据处理等系统,都是数据安全建设的一些高风险点,存在着很大的风险。

杨明非强调,数据安全从要充分考虑到和业务之间的平衡度。既要让业务跑的很好很顺畅,又要保证业务能去安全地保护这些数据。

这就需要从业务战略与合规的要求入手,首先对数据进行分类分级,区分出敏感数据和数据资产。然后按照数据的存储、使用和传输的情况制定整体的数据安全策略,通过对数据在哪里、如何被使用、被哪些人使用、如何被传输、如何被分享进行审计,根据需求选用相应的数据安全的产品和技术,从上至下从企业的整个业务框架到IT构架,实现为整个数据资产安全性的体系编排统一的策略。

随着《数据安全法》的发布,整个行业将处于一个爆发式的发展趋势。数据分类分级是数据安全治理中的第一步,之后就是数据安全保护体系的建设,这两个必须联系在一起,会有一个逐步的过程,但必然会进入一个爆发期。

“从数据安全这个行业来说,我们要做的事,就是顺势而为。大家要一起努力,把数据安全这个蛋糕往大了做。”杨明非最后表示。

人物简介:

北京天空卫士网络安全技术有限公司董事、合伙人、高级技术总监。华东理工大学EMBA,在安全相关工作领域有超过20年的从业经验,目前主要专注于数据安全治理平台与SASE安全接入服务边界体系的研究工作。现任中国信息协会信息安全专业委员会数据安全组长单位技术负责人;中关村可信联盟专家委员会专家委员;中国网络空间安全协会数据安全工作组成员;中国网络安全产业联盟专家委员;健康医疗信创与大数据分会专家成员;CCIA技术专家库专家。参与过全国30多家银行的双活数据中心建设,网上银行安全体系建设。

参与过金融、制造业、高科技、物流等多家大型企业的数据安全体系建设。曾参与人民银行、银保监的多个金融数据安全的行业规范制定。专注数据安全治理,熟悉金融行业的数据生命周期、场景化数据安全治理、各类数据安全技术应用等。

现下,互联网及移动互联网的发展与广泛应用导致企业安全边界消失,提升数据安全治理能力成为数字经济时代的紧迫议题。由于数据分布在云、数据中心、终端、移动设备等各个位置,传统的基于防火墙、入侵防御系统构建的企业安全边界防护手段失效,很难进行有效的数据保护,数据安全存在极大的隐患。

对此,嘶吼对北京天空卫士网络安全技术有限公司董事、合伙人、高级技术总监杨明非进行了人物专访,就企业如何建设数据安全治理体系进行了深度访谈。

微信图片_20220516105321.png

创业就该做点不一样的事

谈及加入天空卫士的初衷,杨明非还是坚信那句话:创业就是要做点没做过的事情,有挑战才有意思。

性格使然,如同他大学选择了自己并不擅长的英语专业。因本身还是喜欢理工科,杨明非一直都在自学计算机。源于兴趣,从初二开始,他就开始“捣弄”无线电,家里装满了好几大箱子的电路板、集成电路、CPU、三极管等各种电子元器件,直到现在还在组装功放、音箱。

1995年毕业之后的杨明非进了工厂,负责管理IT设备,正式进入了计算机行业。1997年开始接触负载均衡、数据库、灾备等专业领域,涉及到大量与安全相关的东西。

加入F5 Networks之后,他把全国大型银行的网银安全接入全部做了个遍,包括参与编写和制定网银建设的安全标准规范。F5的每一个安全相关产品推出,他总是第一个冲上去学习、理解并和客户做深入的讨论。

2015年,云计算刚刚兴起,云涉及到很多大型项目,渴望往上走的杨明非,希望能接触到更多的高层资源,有更广阔的发展空间。于是他加入了一家当时正在上升期的云计算公司,后来因为种种原因离开后,他重新开始看下一个增长点。

对于杨明非而言,之所以最终选择数据安全方向,基于两个原因:第一,彼时的F5 Networks一直期望转型做安全领域,但由于外企背景以及317号文要求银行100%使用国产化的安全产品,使个人发展空间受到很大限制;第二,在他看来,数据安全将来会是一个很大的机会发展点。

于是在2016年,他选择加入才成立一年的天空卫士,有充足的时间去学习和了解数据安全行业,直到第一个用户产品真正诞生。

构建数据安全治理体系

综合数据安全建设产品类型来看,传统国内厂商普遍提供通道型、终端类、工具级DLP产品,而国际主流厂商多提供集成型、整合功能(邮件安全网关或安全代理)为主的产品。

对于天空卫士而言,早在2017年,就开始实施UCS系统产品,把Web、数据、邮件、终端和移动设备安全等技术有效结合到统一的管控平台,把整个企业内部员工的办公网络进行全面覆盖,并且做到垃圾邮件防护和从内向外的敏感数据的防护。

杨明非表示,后来通过与客户的深度需求讨论和业界趋势分析,天空卫士在标准的数据安全的基础之上加入了人的行为分析。因为所有数据都是人在操作,无论是内部的坏分子或者内鬼,还是外部的黑客,而这些人的目标是都是数据资产。人对数据资产的操作行为,会体现出最主要的数据安全风险,也就是数据的流动性风险。

而在数字化转型的过程中,数据会被大量的分享和共享,这个过程中存在大量的数据安全风险。我们没有办法通过单一的策略去做判断数据的好坏,所以只能通过行为分析来识别。在网络安全体系中,即使是级别最高的零信任体系,也只是细化到应用的授权管理。但应用的访问授权并不能代表数据授权。因此,安全到最终需要解决的一个核心的问题,就是人和数据之间的关系,每个个体,是否能访问对应级别的数据。

历经2年的时间,杨明非和团队把整个产品体系推进了一步,融合统一内容安全技术(UCS)和内部威胁管理技术(ITM)推出内部威胁防护体系 (ITP),最终构建以人和数据为中心的数据安全体系,全面覆盖企业IT架构,在无边界的网络中保护企业的核心数据资产。

在数据安全法和个人信息保护法发布后,数据安全治理、数据分类分级保护被提高到了法律的高度,但对很多企业而言,对于数据安全治理如何能切合到企业的实际数据安全保护仍然是一个困惑的问题。而天空卫士一直以来的重点ITP体系,正好是对分类分级保护支撑,能对数据安全整理在企业中落地的最佳手段。因此,整合过去的经验,结合用户的实际需求,团队对内部威胁防护体系进行了革命性的升级,于2021年年底推出了数据安全治理自动化平台(DSAG)。

在DSAG中提出了更为宏大的平台体系设计,从数据的分类分级流程自动化开始,到数据识别模板的生成,通过对与应用系统数据处理的对接和传统办公环境中的关键节点通道分析。使用DSAG可以形成一个完整的以数据为中心的安全平台,提供分类分级保护和数据的存储、使用和流转的可视化管理。

数据安全建设处于“裸奔”阶段

在企业的数据安全体系建设里,杨明非发现,很多用户的数据安全建设,是处于一个“裸奔”的状态。

很多用户对数据安全的概念没有特别清晰的认识,认为修好了墙,数据就一定安全了。比如用虚拟桌面来处理所有的敏感数据,认为所有的数据都出不去,就认为已经安全了,然而事实上并非如此。任何的隔离系统都存在有外部数据交换通道,只要这些通道的传输内容没有进行很好的分析和保护,那对于数据安全来说就是“裸奔”。

举个简单的例子,在任何一个银行、金融机构或者很多企业都有第三方互联,以前拉个点到点的专线,两边防火墙一架,只允许两台机器之间进行通讯就认为高枕无忧,网络安全建设就到此为止。

但实际上,每家从不同的业务系统里面究竟取走了多少个人敏感信息,这些从数据安全角度来说,全部都是在盲区。很多时候在企业里,从生产到测试、数据的大量迁移的这些过程,以及一些内部的数据处理等系统,都是数据安全建设的一些高风险点,存在着很大的风险。

杨明非强调,数据安全从要充分考虑到和业务之间的平衡度。既要让业务跑的很好很顺畅,又要保证业务能去安全地保护这些数据。

这就需要从业务战略与合规的要求入手,首先对数据进行分类分级,区分出敏感数据和数据资产。然后按照数据的存储、使用和传输的情况制定整体的数据安全策略,通过对数据在哪里、如何被使用、被哪些人使用、如何被传输、如何被分享进行审计,根据需求选用相应的数据安全的产品和技术,从上至下从企业的整个业务框架到IT构架,实现为整个数据资产安全性的体系编排统一的策略。

随着《数据安全法》的发布,整个行业将处于一个爆发式的发展趋势。数据分类分级是数据安全治理中的第一步,之后就是数据安全保护体系的建设,这两个必须联系在一起,会有一个逐步的过程,但必然会进入一个爆发期。

“从数据安全这个行业来说,我们要做的事,就是顺势而为。大家要一起努力,把数据安全这个蛋糕往大了做。”杨明非最后表示。

人物简介:

北京天空卫士网络安全技术有限公司董事、合伙人、高级技术总监。华东理工大学EMBA,在安全相关工作领域有超过20年的从业经验,目前主要专注于数据安全治理平台与SASE安全接入服务边界体系的研究工作。现任中国信息协会信息安全专业委员会数据安全组长单位技术负责人;中关村可信联盟专家委员会专家委员;中国网络空间安全协会数据安全工作组成员;中国网络安全产业联盟专家委员;健康医疗信创与大数据分会专家成员;CCIA技术专家库专家。参与过全国30多家银行的双活数据中心建设,网上银行安全体系建设。

参与过金融、制造业、高科技、物流等多家大型企业的数据安全体系建设。曾参与人民银行、银保监的多个金融数据安全的行业规范制定。专注数据安全治理,熟悉金融行业的数据生命周期、场景化数据安全治理、各类数据安全技术应用等。

我们正在开源 Amarna,这是我们用于 Cairo 编程语言的新静态分析器和 linter(检查代码风格/错误的小工具)。 Cairo 是一种编程语言,为拥有数百万美元资产的多个交易交易所提供支持(例如由 StarkWare 驱动的 dYdX),并且是 StarkNet 合约的编程语言。但是,与其他语言不同,它也有一些奇怪的功能。因此,我们将首先简要概述该语言、其生态系统以及开发人员应注意的该语言中的一些漏洞。然后,我们将介绍 Amarna 并讨论它是如何工作的?

为什么我们需要Cairo?

Cairo以及类似的语言(如Noir和Leo)的目的是编写“可证明的程序”,其中一方运行程序并创建一个证明,证明它在给定特定输入时返回特定输出。

假设我们想将程序的计算外包给某个服务器,并且需要保证结果是正确的。使用 Cairo,我们可以获得程序输出正确结果的证明;我们只需要验证证明而不是自己重新计算函数(这将违背外包计算的初衷)。

总之,我们采取了以下步骤:

1.导出我们要计算的函数。

2.使用的具体输入在工作设备上运行该函数,获得结果,并生成计算有效性的证明。

3.通过验证证明来验证计算。

Cairo编程语言

如上所述,Cairo 编程模型涉及两个关键角色:运行程序并创建程序返回特定输出的证明的验证程序,以及验证验证程序创建的证明的验证程序。

然而,在实践中,Cairo 程序员实际上不会自己生成或验证证明。相反,生态系统包括以下三个部分:

1.SHARed Prover (SHARP) 是一个公共验证程序,它为用户发送的程序跟踪生成有效性证明。

2.证明验证程序合约验证程序执行的有效性证明。

3.可以查询事实注册合约来检查某个事实是否有效。

事实注册表是一个数据库,用于存储程序事实,或从程序及其输出的哈希计算的值;创建程序事实是将程序绑定到其输出的一种方法。

这是Cairo的基本工作流程:

1.用户编写程序并将其跟踪提交给 SHARP(通过 Cairo Playground 或命令 cairo-sharp)。

2.SHARP 为程序跟踪创建一个 STARK 证明,并将其提交给证明验证程序合约。

3.证明验证程序合约验证证明,如果有效,则将程序事实写入事实注册表。

4.任何其他用户现在都可以查询事实注册表合约以检查该程序事实是否有效。

还有两件事要记住:

Cairo 的内存是一次性写入的:一个值写入内存后,就无法更改。

assert语句assert a = b的行为会根据a是否被初始化而不同:如果 a 未初始化,则 assert 语句将 b 分配给 a;如果 a 被初始化,assert 语句断言 a 和 b 相等。

尽管 Cairo 的语法和关键字的细节很有趣,但我们不会在这篇文章中讨论这些主题。

设置和运行Cairo代码

现在我们已经简要地概括了Cairo语言,接下来讨论如何设置和运行Cairo代码。考虑以下简单的Cairo程序。这个函数计算一对数字(input, 1) 的 Pedersen 哈希函数,并在控制台中输出结果:

1.png

要设置 Cairo 工具,我们使用 Python 虚拟环境:

2.png

然后,我们编译程序:

3.png

最后,我们运行程序,它将输出以下值:

4.png

这个值就是(4242, 1)的Pedersen hash对应的字段元素。

现在,假设我们将输入从 4242 更改为某个隐藏值,而是为验证程序提供以下输出:

5.png

为什么验证程序会相信我们?好吧,我们可以证明我们知道使程序返回该输出的隐藏值!

为了生成证明,我们需要计算程序的哈希来生成程序事实。这个哈希值不依赖于输入值,因为赋值是在一个提示中进行的(这是Cairo的一个奇怪设置,我们将在本文后面讨论):

6.png

6.2.png

然后,我们可以通过使用事实注册表合约并以程序事实作为输入调用 isValid 函数来检查程序事实的有效性:

7.png

调用 isValid 函数检查程序事实有效性的结果。

概括地说,我们运行了程序,SHARP创建了一个可以在事实注册表中查询的证明,以检查其有效性,证明我们确实知道将导致程序输出该值的输入。

现在,我实际上可以告诉你,我使用的输入是 71938042130017,你可以继续检查结果是否匹配。

Cairo功能

Cairo有几个奇怪功能,新的Cairo程序员可能还使不习惯。我们将描述三个容易被滥用并导致安全问题的 Cairo 习惯:Cairo 提示、递归和欠约束结构之间的相互作用以及非确定性跳转。

提示

提示是特殊的 Cairo 语句,基本上使验证程序能够编写任意 Python 代码。是的,以 Cairo 提示编写的 Python 代码实际上是被执行的!

提示写在 %{ %} 中。我们已经在第一个示例中使用它们给输入变量赋值:

8.png

8.2.png

因为 Cairo 可以在提示中执行任意 Python 代码,所以你不应该在自己的设备上运行任意 Cairo 代码,这样做可以将你的设备的完全控制权授予编写代码的人。

提示通常用于编写仅由验证程序执行的代码。证明验证程序甚至不知道提示的存在,因为提示不会改变程序哈希。下面来自Cairo playground的函数计算一个正整数n的平方根:

9.png

该程序通过使用提示中的Python数学库计算n的平方根。但是在验证时,这段代码不会运行,验证程序需要检查结果是否真的是平方根。因此,在函数返回结果之前,函数包含一个检查,以验证n是否等于res * res。

Underconstrained结构

Cairo 缺乏对 while 和 for 循环的支持,程序员只能使用原有的旧递归进行迭代。让我们考虑一下Cairo的“动态分配”挑战。挑战要求我们编写一个函数,给定一个元素列表,将这些元素平方,并返回一个包含这些平方元素的新列表:

10.1.png

10.2.png

运行此代码将按预期输出数字1、4、9和16。

但是,如果发生错误(或错误的错误)并导致以零长度调用 sqr_array 函数会发生什么?

11.png

基本上,会发生以下情况:

sqr_array 函数将分配 res_array 并调用 _inner_sqr_array(array, res_array, 0)。

_inner_sqr_array 会将长度与 0 进行比较并立即返回。

sqr_array 将返回已分配(但从未写入)的 res_array。

那么当你在 new_array 的第一个元素上调用 serialize_word 时会发生什么?

按原样运行代码将导致错误,因为new_array的值是未知的:

12.png

按原样运行上述代码后出现的错误。

但是,请记住,通常你不会运行代码。你将验证程序输出某些值的证据。而且我实际上可以向你证明该程序可以输出你想要的任何四个值!

13.png

下面的事实将该程序与输出[1,3,3,7]绑定:

14.png

根据事实注册合同,这一事实是有效的:

15.png

事实注册表对程序事实的验证。

可以看到,由于返回的数组只是分配的,从不写入(因为它的长度为0,所以递归一开始就停止),验证程序可以在提示中写入数组,提示代码不会影响程序的哈希!

恶意的 sqr_array 函数实际上如下:

16.png

简而言之,如果有一些错误使数组的长度为0,恶意验证程序可以创建他想要的任意结果。

你可能会有疑问,恶意验证程序不能简单地在程序末尾添加一个提示来以他希望的任何方式更改输出。好吧,他可以,只要之前没有写过那个内存;这是因为 Cairo 的内存是一次性写入的,所以每个内存单元只能写入一个值。

由于Cairo中内存的工作方式,这种创建最终结果数组的模式是必要的,但它也存在安全问题的风险:跟踪该数组长度的一个简单的错误可能允许恶意验证程序任意控制数组内存。

非确定性跳跃

对于第一次阅读Cairo的程序员来说,非确定性跳跃是另一种看起来不自然的代码模式。它们结合提示和条件跳跃来重定向带有某个值的程序控制流。验证程序可以不知道这个值,因为验证程序可以在提示中设置它。

例如,我们可以编写一个程序,检查两个元素x和y是否相等,方法如下:

17.png

运行此程序将返回预期结果(0 表示不同的值,1 表示相等的值):

18.png

然而,这个函数实际上很容易受到恶意验证程序的攻击。注意跳跃指令如何仅依赖于提示中的值:

19.png

而且我们知道提示完全可以由验证程序控制!这意味着验证程序可以在该提示中编写任何其他代码。事实上,不能保证验证程序确实检查了 x 和 y 是否相等,甚至不能保证 x 和 y 以任何方式使用过。由于没有其他检查,该函数可以返回验证程序想要的任何内容。

正如我们之前看到的,程序哈希不考虑提示中的代码;因此,验证程序无法知道是否执行了正确的提示。恶意验证程序可以通过更改提示代码并将每个证明提交到SHARP。

那么我们如何解决这个问题呢?

每当我们看到非确定性跳转时,我们需要确保跳转是有效的,并且验证程序需要验证每个标签中的跳转:

21.png

在本例中,该函数足够简单,代码只需要一个if语句:

22.png


在审核Cairo代码时,我们注意到除了VScode中的语法高亮显示外,基本上没有任何形式的语言支持。然后,当我们在代码中发现问题时,我们希望确保类似的模式不会出现在代码库的其他地方。

我们决定为 Cairo 构建 Amarna,一个静态分析器,这样就能够创建自己的规则并搜索我们感兴趣的代码模式,不过不一定是安全漏洞,但任何安全敏感操作都需要分析或检查代码时需要更多的关注。

Amarna 将其静态分析结果导出为 SARIF 格式,使我们能够使用 VSCode 的 SARIF Viewer 扩展轻松地将它们集成到 VSCode 中,并查看代码中带下划线的警告:

23.png

带有下划线的dead store(左)和显示来自 Amarna 的结果的 SARIF Viewer 扩展的 Cairo 代码(右)。

Amarna是如何工作的?

Cairo 编译器是用 Python 编写的,它使用解析工具包 lark 来定义语法并构建其语法树。使用 Lark 库,可以直接为程序的抽象语法树构建访问者。从这里开始,编写规则就是对要在树中找到的内容进行编码。

我们编写的第一条规则是强调算术运算 +、-、* 和 / 的所有用途。当然,并非所有除法的使用都是不安全的,但是在这些操作下划线后,开发人员会被提醒Cairo算术在有限域上工作,并且除法不是整数除法,就像在其他编程语言中那样。字段算术下溢和溢出是开发人员需要注意的其他问题。通过突出显示所有算术表达式,Amarna 帮助开发人员和审查人员快速放大代码库中在这方面可能存在问题的位置。

检测所有分区的规则很简单:它基本上只是创建带有文件位置的结果对象并将其添加到分析结果中:

24.png

当我们寻找更复杂的代码模式时,我们开发了三类规则:

1.本地规则独立分析每个文件。上述用于查找文件中所有算术运算的规则是本地规则的一个示例。

2.收集规则独立地分析每个文件,并收集供后处理规则使用的数据。例如,我们有收集所有声明函数和所有调用函数的规则。

3.在分析所有文件并使用收集规则收集的数据之后,将运行后处理规则。例如,在收集规则找到文件中所有声明的函数和所有调用的函数之后,后处理规则可以通过标识声明但从未调用的函数来找到所有未使用的函数。

到目前为止,我们已经实施了 10 条规则,其影响范围从帮助我们审核代码的信息性规则(标记为 Info)到可能对安全敏感的代码模式(标记为警告):

25.png

虽然这些规则中的大多数属于信息类别,但它们肯定具有安全含义:例如,未能检查函数的返回码可能会非常严重(想象一下,如果函数是签名验证);错误代码规则将找到其中一些实例。

未使用的参数规则可以找到函数中没有使用的参数,这是通用编程语言linter 中的常见模式;这通常表明存在使用该参数的某种意图,但从未实际使用过,这也可能具有安全隐患。

我们正在开源 Amarna,这是我们用于 Cairo 编程语言的新静态分析器和 linter(检查代码风格/错误的小工具)。 Cairo 是一种编程语言,为拥有数百万美元资产的多个交易交易所提供支持(例如由 StarkWare 驱动的 dYdX),并且是 StarkNet 合约的编程语言。但是,与其他语言不同,它也有一些奇怪的功能。因此,我们将首先简要概述该语言、其生态系统以及开发人员应注意的该语言中的一些漏洞。然后,我们将介绍 Amarna 并讨论它是如何工作的?

为什么我们需要Cairo?

Cairo以及类似的语言(如Noir和Leo)的目的是编写“可证明的程序”,其中一方运行程序并创建一个证明,证明它在给定特定输入时返回特定输出。

假设我们想将程序的计算外包给某个服务器,并且需要保证结果是正确的。使用 Cairo,我们可以获得程序输出正确结果的证明;我们只需要验证证明而不是自己重新计算函数(这将违背外包计算的初衷)。

总之,我们采取了以下步骤:

1.导出我们要计算的函数。

2.使用的具体输入在工作设备上运行该函数,获得结果,并生成计算有效性的证明。

3.通过验证证明来验证计算。

Cairo编程语言

如上所述,Cairo 编程模型涉及两个关键角色:运行程序并创建程序返回特定输出的证明的验证程序,以及验证验证程序创建的证明的验证程序。

然而,在实践中,Cairo 程序员实际上不会自己生成或验证证明。相反,生态系统包括以下三个部分:

1.SHARed Prover (SHARP) 是一个公共验证程序,它为用户发送的程序跟踪生成有效性证明。

2.证明验证程序合约验证程序执行的有效性证明。

3.可以查询事实注册合约来检查某个事实是否有效。

事实注册表是一个数据库,用于存储程序事实,或从程序及其输出的哈希计算的值;创建程序事实是将程序绑定到其输出的一种方法。

这是Cairo的基本工作流程:

1.用户编写程序并将其跟踪提交给 SHARP(通过 Cairo Playground 或命令 cairo-sharp)。

2.SHARP 为程序跟踪创建一个 STARK 证明,并将其提交给证明验证程序合约。

3.证明验证程序合约验证证明,如果有效,则将程序事实写入事实注册表。

4.任何其他用户现在都可以查询事实注册表合约以检查该程序事实是否有效。

还有两件事要记住:

Cairo 的内存是一次性写入的:一个值写入内存后,就无法更改。

assert语句assert a = b的行为会根据a是否被初始化而不同:如果 a 未初始化,则 assert 语句将 b 分配给 a;如果 a 被初始化,assert 语句断言 a 和 b 相等。

尽管 Cairo 的语法和关键字的细节很有趣,但我们不会在这篇文章中讨论这些主题。

设置和运行Cairo代码

现在我们已经简要地概括了Cairo语言,接下来讨论如何设置和运行Cairo代码。考虑以下简单的Cairo程序。这个函数计算一对数字(input, 1) 的 Pedersen 哈希函数,并在控制台中输出结果:

1.png

要设置 Cairo 工具,我们使用 Python 虚拟环境:

2.png

然后,我们编译程序:

3.png

最后,我们运行程序,它将输出以下值:

4.png

这个值就是(4242, 1)的Pedersen hash对应的字段元素。

现在,假设我们将输入从 4242 更改为某个隐藏值,而是为验证程序提供以下输出:

5.png

为什么验证程序会相信我们?好吧,我们可以证明我们知道使程序返回该输出的隐藏值!

为了生成证明,我们需要计算程序的哈希来生成程序事实。这个哈希值不依赖于输入值,因为赋值是在一个提示中进行的(这是Cairo的一个奇怪设置,我们将在本文后面讨论):

6.png

6.2.png

然后,我们可以通过使用事实注册表合约并以程序事实作为输入调用 isValid 函数来检查程序事实的有效性:

7.png

调用 isValid 函数检查程序事实有效性的结果。

概括地说,我们运行了程序,SHARP创建了一个可以在事实注册表中查询的证明,以检查其有效性,证明我们确实知道将导致程序输出该值的输入。

现在,我实际上可以告诉你,我使用的输入是 71938042130017,你可以继续检查结果是否匹配。

Cairo功能

Cairo有几个奇怪功能,新的Cairo程序员可能还使不习惯。我们将描述三个容易被滥用并导致安全问题的 Cairo 习惯:Cairo 提示、递归和欠约束结构之间的相互作用以及非确定性跳转。

提示

提示是特殊的 Cairo 语句,基本上使验证程序能够编写任意 Python 代码。是的,以 Cairo 提示编写的 Python 代码实际上是被执行的!

提示写在 %{ %} 中。我们已经在第一个示例中使用它们给输入变量赋值:

8.png

8.2.png

因为 Cairo 可以在提示中执行任意 Python 代码,所以你不应该在自己的设备上运行任意 Cairo 代码,这样做可以将你的设备的完全控制权授予编写代码的人。

提示通常用于编写仅由验证程序执行的代码。证明验证程序甚至不知道提示的存在,因为提示不会改变程序哈希。下面来自Cairo playground的函数计算一个正整数n的平方根:

9.png

该程序通过使用提示中的Python数学库计算n的平方根。但是在验证时,这段代码不会运行,验证程序需要检查结果是否真的是平方根。因此,在函数返回结果之前,函数包含一个检查,以验证n是否等于res * res。

Underconstrained结构

Cairo 缺乏对 while 和 for 循环的支持,程序员只能使用原有的旧递归进行迭代。让我们考虑一下Cairo的“动态分配”挑战。挑战要求我们编写一个函数,给定一个元素列表,将这些元素平方,并返回一个包含这些平方元素的新列表:

10.1.png

10.2.png

运行此代码将按预期输出数字1、4、9和16。

但是,如果发生错误(或错误的错误)并导致以零长度调用 sqr_array 函数会发生什么?

11.png

基本上,会发生以下情况:

sqr_array 函数将分配 res_array 并调用 _inner_sqr_array(array, res_array, 0)。

_inner_sqr_array 会将长度与 0 进行比较并立即返回。

sqr_array 将返回已分配(但从未写入)的 res_array。

那么当你在 new_array 的第一个元素上调用 serialize_word 时会发生什么?

按原样运行代码将导致错误,因为new_array的值是未知的:

12.png

按原样运行上述代码后出现的错误。

但是,请记住,通常你不会运行代码。你将验证程序输出某些值的证据。而且我实际上可以向你证明该程序可以输出你想要的任何四个值!

13.png

下面的事实将该程序与输出[1,3,3,7]绑定:

14.png

根据事实注册合同,这一事实是有效的:

15.png

事实注册表对程序事实的验证。

可以看到,由于返回的数组只是分配的,从不写入(因为它的长度为0,所以递归一开始就停止),验证程序可以在提示中写入数组,提示代码不会影响程序的哈希!

恶意的 sqr_array 函数实际上如下:

16.png

简而言之,如果有一些错误使数组的长度为0,恶意验证程序可以创建他想要的任意结果。

你可能会有疑问,恶意验证程序不能简单地在程序末尾添加一个提示来以他希望的任何方式更改输出。好吧,他可以,只要之前没有写过那个内存;这是因为 Cairo 的内存是一次性写入的,所以每个内存单元只能写入一个值。

由于Cairo中内存的工作方式,这种创建最终结果数组的模式是必要的,但它也存在安全问题的风险:跟踪该数组长度的一个简单的错误可能允许恶意验证程序任意控制数组内存。

非确定性跳跃

对于第一次阅读Cairo的程序员来说,非确定性跳跃是另一种看起来不自然的代码模式。它们结合提示和条件跳跃来重定向带有某个值的程序控制流。验证程序可以不知道这个值,因为验证程序可以在提示中设置它。

例如,我们可以编写一个程序,检查两个元素x和y是否相等,方法如下:

17.png

运行此程序将返回预期结果(0 表示不同的值,1 表示相等的值):

18.png

然而,这个函数实际上很容易受到恶意验证程序的攻击。注意跳跃指令如何仅依赖于提示中的值:

19.png

而且我们知道提示完全可以由验证程序控制!这意味着验证程序可以在该提示中编写任何其他代码。事实上,不能保证验证程序确实检查了 x 和 y 是否相等,甚至不能保证 x 和 y 以任何方式使用过。由于没有其他检查,该函数可以返回验证程序想要的任何内容。

正如我们之前看到的,程序哈希不考虑提示中的代码;因此,验证程序无法知道是否执行了正确的提示。恶意验证程序可以通过更改提示代码并将每个证明提交到SHARP。

那么我们如何解决这个问题呢?

每当我们看到非确定性跳转时,我们需要确保跳转是有效的,并且验证程序需要验证每个标签中的跳转:

21.png

在本例中,该函数足够简单,代码只需要一个if语句:

22.png


在审核Cairo代码时,我们注意到除了VScode中的语法高亮显示外,基本上没有任何形式的语言支持。然后,当我们在代码中发现问题时,我们希望确保类似的模式不会出现在代码库的其他地方。

我们决定为 Cairo 构建 Amarna,一个静态分析器,这样就能够创建自己的规则并搜索我们感兴趣的代码模式,不过不一定是安全漏洞,但任何安全敏感操作都需要分析或检查代码时需要更多的关注。

Amarna 将其静态分析结果导出为 SARIF 格式,使我们能够使用 VSCode 的 SARIF Viewer 扩展轻松地将它们集成到 VSCode 中,并查看代码中带下划线的警告:

23.png

带有下划线的dead store(左)和显示来自 Amarna 的结果的 SARIF Viewer 扩展的 Cairo 代码(右)。

Amarna是如何工作的?

Cairo 编译器是用 Python 编写的,它使用解析工具包 lark 来定义语法并构建其语法树。使用 Lark 库,可以直接为程序的抽象语法树构建访问者。从这里开始,编写规则就是对要在树中找到的内容进行编码。

我们编写的第一条规则是强调算术运算 +、-、* 和 / 的所有用途。当然,并非所有除法的使用都是不安全的,但是在这些操作下划线后,开发人员会被提醒Cairo算术在有限域上工作,并且除法不是整数除法,就像在其他编程语言中那样。字段算术下溢和溢出是开发人员需要注意的其他问题。通过突出显示所有算术表达式,Amarna 帮助开发人员和审查人员快速放大代码库中在这方面可能存在问题的位置。

检测所有分区的规则很简单:它基本上只是创建带有文件位置的结果对象并将其添加到分析结果中:

24.png

当我们寻找更复杂的代码模式时,我们开发了三类规则:

1.本地规则独立分析每个文件。上述用于查找文件中所有算术运算的规则是本地规则的一个示例。

2.收集规则独立地分析每个文件,并收集供后处理规则使用的数据。例如,我们有收集所有声明函数和所有调用函数的规则。

3.在分析所有文件并使用收集规则收集的数据之后,将运行后处理规则。例如,在收集规则找到文件中所有声明的函数和所有调用的函数之后,后处理规则可以通过标识声明但从未调用的函数来找到所有未使用的函数。

到目前为止,我们已经实施了 10 条规则,其影响范围从帮助我们审核代码的信息性规则(标记为 Info)到可能对安全敏感的代码模式(标记为警告):

25.png

虽然这些规则中的大多数属于信息类别,但它们肯定具有安全含义:例如,未能检查函数的返回码可能会非常严重(想象一下,如果函数是签名验证);错误代码规则将找到其中一些实例。

未使用的参数规则可以找到函数中没有使用的参数,这是通用编程语言linter 中的常见模式;这通常表明存在使用该参数的某种意图,但从未实际使用过,这也可能具有安全隐患。