2018 网络安全事故频发,从数据泄露、信息窃取,到 DDOS 攻击、勒索病毒,不仅威胁的总数在增加,威胁态势也变得更加多样化,攻击者在不断开发新的攻击途径的同时,也尽力在攻击过程中掩盖其踪迹,使网络安全防护变得越发棘手。
未来是万物互联的时代,唯有把握住网络信息安全,才能避免被降维打击。本次分享,葡萄城技术团队将从 WebApp 安全出发,带你了解更多意想不到的安全防护措施与黑客攻击手段,助你提高网络安全意识,最终学会如何提高风险意识,避免遭受网络安全攻击。
本场 Chat 核心内容:
2018 网络安全事故频发,从数据泄露、信息窃取,到 DDOS 攻击、勒索病毒,不仅威胁的总数在增加,威胁态势也变得更加多样化,攻击者在不断开发新的攻击途径的同时,也尽力在攻击过程中掩盖其踪迹,使网络安全防护变得越发棘手。
未来是万物互联的时代,唯有把握住网络信息安全,才能避免被降维打击。本场 Chat,我们特邀 Carl 作为分享嘉宾,于葡萄城技术公开课上,以 WebApp 安全防护为出发点,带你了解更多意想不到的安全防护措施与黑客攻击手段,助你提高网络安全意识,最终学会如何规避风险隐患,避免遭受网络安全攻击。
下面开始展开正文。
提升网络安全意识对项目团队中的每一个角色、每一个流程都至关重要。同时,也只有具备了网络安全意识,才愿意为数据安全投入更多的时间和精力。下面,我将为您展示部分 2018 年发生的网络安全事故,这些事故造成的损失,也许远远超出你的想象。
Facebook 数据泄露事件: 2018年9月,Facebook 因安全系统漏洞而遭受黑客攻击,导致约 5000 万用户信息泄露。
上市公司数据堂,涉嫌侵犯数百亿条公民个人信息: 大数据行业知名企业数据堂在短短 8 个月的时间内,日均泄露公民个人信息 1.3 亿余条,累计传输数据压缩后约为 4000GB。
圆通 10 亿快递信息泄露: 10 亿条用户数据遭公开售卖,这些数据包括寄(收)件人姓名、电话、地址等隐私信息。
万豪酒店 5 亿用户开房信息泄露: 万豪酒店客房预订数据库遭黑客入侵,约5亿名客户的信息可能被泄露。
一名黑客攻击网站的典型步骤,主要分为以下 5 步:
黑客不是手动测试系统漏洞的,而是有很多强大的工具可以自动化完成。黑客不是利用系统中的一个漏洞,而是要利用一系列,不同层次的漏洞。黑客经常批量攻击一系列网站,选取其中漏洞较多,较好利用的重点突破
不安全的软件正在破坏着我们的金融、医疗、国防、能源和其他重要的基础设施。随着我们的软件变得愈加庞大、复杂且相互关联,实现应用程序安全的难度也呈指数级增长。而现代软件开发过程的飞速发展,使得快速、准确地识别软件安全风险变得愈发的重要,OWASP 组织也因此诞生。
OWASP,即开放式 Web 应用程序安全项目(Open Web Application Security Project),作为一个开源的、非盈利的全球性安全组织,它提供了有关计算机和互联网应用程序的公正、实际、有成本效益的信息,其目的是协助个人、企业和机构来发现并使用可信赖的软件。
OWASP Top 10 是由 OWASP 组织公布,最具权威性的“10 项最严重的 Web 应用程序安全风险预警”,其就安全问题从威胁性和脆弱性两方面进行可能性分析,并结合技术和商业影响的分析结果,输出公认的、最严重的十类 Web 应用安全风险排名。OWASP Top 10 旨在针对上述风险,提出解决方案,帮助 IT 公司和开发团队规范应用程序开发流程和测试流程,提高 Web 产品的安全性。
OWASP 敦促所有公司在其组织内采用 OWASP Top 10 文档,并确保其 Web 应用程序最大限度地降低这些风险,采用 OWASP Top 10 可能是将企业内的软件开发文化转变为生成安全代码文化最行之有效的一步。
《OWASP Top 10》的目的在于为广大企业确定一组最严重的风险项目。对于其中的每一项风险,我们将使用基于 OWASP 风险等级排序的评级方案,为您提供关于漏洞普遍性、可检测性、业务/技术影响等信息。
将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如 SQL 注入、NoSQL 注入、OS 注入和 LDAP 注入等注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。
可利用性:容易几乎任何数据源都能成为注入载体,包括环境变量、所有类型的用户、参数、外部和内部Web服务。当攻击者可以向解释器发送恶意数据时,注入漏洞便可产生。
普遍性:常见注入漏洞十分普遍,尤其是在遗留代码中。注入漏洞通常能在 SQL、LDAP、XPath 或是 NoSQL 查询语句、OS 命令、XML 解析器、SMTP 包头、表达式语句及 ORM 查询语句中找到。
可检测性:易注入漏洞很容易通过代码审查发现。扫描器和模糊测试工具可以帮助攻击者找到这些漏洞。
技术影响:严重注入能导致数据丢失、破坏或泄露给无授权方、缺乏可审计性或是拒绝服务。注入有时甚至能导致主机被完全接管。
业务影响:未知您的应用和数据需要受到保护,以避免对业务造成影响。
当您的应用有如下情况时,是脆弱且易受到攻击的:
一些常见的注入,包括:SQL、OS 命令、ORM、LDAP 和表达式语言(EL)或 OGNL 注入。
所有编译器的原理都是相似的,因此 Code Review 是目前为止最有效的检测应用程序注入风险的办法之一。当然,您也可以对代码中所有参数、字段、头、cookie、JSON 和 XML 数据输入进行 DAST 扫描,并将 SAST 和 DAST 工具添加到 CI/CD 进程中,以便在项目部署前对现有代码或新代码进行注入检测。
防止注入漏洞需要将数据与命令语句、查询语句分隔开来:
场景#1:应用程序在脆弱的 SQL 语句结构中使用不可信数据:String query = "SELECT * FROM accounts WHEREcustID='" + request.getParameter("id") + "'“;
场景#2:框架应用的盲目信任,也可能导致查询语句的漏洞。(例如:Hibernate查询语言(HQL)):Query HQLQuery = session.createQuery("FROM accountsWHERE custID='" + request.getParameter("id") + "'");
在这两个案例中,攻击者在浏览器中将“id”参数的值修改成: ’or’1’=’1。例如:http://example.com/app/accountView?id=' or '1'='1这样查询语句的意义就变成了从 accounts 表中返回所有记录。
SQL 盲注,就是在 SQL 语句注入后且成功执行时,执行的结果不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。
盲注一般分为三类:
一、基于布尔的盲注
基于布尔的盲注通常使用逻辑判断推测获取的数据,通过给定条件,服务器返回真或假。使用二分法或者正则表达式等方法即可缩小判断的范围。
二、基于时间的盲注
主要是利用延时或者执行的时间来判断。
If(ascii(substr(database(),1,1))>115,0,sleep(5))%23 //if 判断语句,条件为假,执行 sleep
因为延时会受到网络环境的影响,因此这种方法不是很可靠。
三、基于报错的盲注
构造 payload 让信息通过错误提示显示。
count(*) 和 rand(0) 和 group by 报错
rand(0) 是伪随机数列,01101100。产生报错的原因是因为 rand(0) 并不是一个定值,相当于一个变量。使用 group by 时,会建立一张虚拟表,字段为 key 和 count(*)。执行插入操作,第一次返回 0,但虚拟表中没有这个项,数据库会认为需要插入这个项,但数据库并没有记录下来,因此,会再次执行 rand(0) 试图获取,但此时获取的是第二个数。依次类推,当数据库查询发现 0 这个项不存在,执行插入操作时, rand(0) 返回值为 1,但是 1 已经存在,这时插入已经存在的项就会报错。
之所以要谈到 WAF 的常见特征,是为了更好的了解 WAF 的运行机制,以便增加绕过 WAF 的机会。总体来说,WAF(Web Application Firewall)具有以下四个方面的功能:
WAF过滤机制:
绕过 WAF 的方法:
从目前能找到的资料来看,绕过WAF的技术主要分为9类,包含:
通过错误地使用 Web 应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥和会话令牌,或者利用其它开发缺陷来暂时性或永久性地冒充管理员的身份。
可利用性:容易攻击者可以轻松获取数百万条有效用户名和密码组合,包括证书、默认的账户管理列表、自动的暴力破解和字典攻击工具,以及高级的 GPU 破解工具。会话管理可以很容易地被利用,尤其是没有过期的会话密匙。
普遍性:常见大多数管理系统的设计和实现,都存在身份认证失效的问题。会话管理是身份验证和访问控制的基础,并且存在于整个应用程序的进程中。
可检测性:一般攻击者通常使用指南手册来检测失效的身份验证。除此之外,也会关注密码转储、字典攻击,或者在类似钓鱼、社会工程攻击后,发现失效的身份认证。
技术影响:严重攻击者只需访问几个账户,或者一个管理员账户就可以破坏我们的系统。根据应用程序业务场景的不同,可能会导致洗钱、欺诈、用户身份盗窃、泄露法律保护的敏感信息等严重违法行为。
确认用户身份、身份验证和会话管理非常重要,这些措施可用于将恶意的、未经身份验证的攻击者与授权用户进行分离。如果您的应用程序存在如下问题,那么可能存在身份验证失效漏洞:
场景#1:最常见的攻击方式——凭证填充,使用已知密码的列表。如果应用程序不限制身份验证尝试次数,则可以将应用程序用作密码 oracle, 以确定凭证是否有效。
场景#2:大多数身份验证攻击都是由于密码作为唯一的认证因素。
场景#3:应用会话超时设置不正确。用户使用公共计算机访问应用程序时,直接关闭浏览器选项卡就离开,而不是选择“注销”。
撞库,是黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。很多用户在不同网站使用的是相同的账号和密码,因此黑客可以通过获取用户在 A 网站的账户从而尝试登录 B 网站,这就是撞库攻击。
撞库可以通过数据库安全防护技术解决,数据库安全技术包括:数据库漏扫、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。
撞库并不神秘,事实上,它正被广泛的使用。举例而言,根据 Shape Security 的报告,“攻击者们一旦锁定了一个财富 100 强的 B2C(企业对消费者)网站,就会在一个星期内使用遍布世界各地的代理服务器,对其进行超过五百万次登录尝试。” 雪上加霜的是,被窃取的凭证也并不难找。黑客们会为了找乐子或寻求扬名立万的机会把凭证散播到网上。当黑客们在凭证黑市(比如 Cracking-dot-org、 Crackingking-dot-org 以及 Crackingseal-dot-io)做生意时,这些名声会派上大用场。
多因素验证(Multi-factor authentication,缩写为 MFA),又译多因子认证、多因素认证,是一种计算机访问控制的方法,用户要通过两种以上的认证机制之后,才能得到授权,使用计算机资源。例如,用户要输入 PIN 码,插入银行卡,最后再经指纹比对,通过这三种认证方式,才能获得授权。这种认证方式可以提高安全性。
许多 Web 应用程序和 API 都无法正确保护敏感数据,例如:财务数据、医疗数据和PII数据。攻击者可以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为。未加密的敏感数据容易受到破坏,因此,我们需要对敏感数据加密,这些数据包括:传输过程中的数据、存储的数据以及浏览器的交互数据。
可利用性:一般攻击者并非直接攻击,而是在传输过程中、从客户端(例如:浏览器)窃取密钥、发起中间人攻击,或从服务器端直接窃取明文数据。
普遍性:广泛这是最常见,也是最具影响力的攻击手段。在数据加密的过程中,由于不安全的密钥生成、管理以及使用弱加密算法、弱协议和弱密码(未加盐的哈希算法或弱哈希算法),导致数据泄露事件频发。
可检测性:一般在服务器端,检测传输过程中的数据弱点很容易,但检测存储数据的弱点却异常困难。
技术影响:严重敏感数据泄露事件造成的影响是非常严重的,因为这些数据通常包含了很多个人信息(PII),例如:医疗记录、认证凭证、个人隐私、信用卡信息等。这些信息受到相关法律和条例的保护,例如:欧盟《通用数据保护条例》(GDPR)和地方隐私保护法律。
首先你需要确认哪些数据(包含:传输过程中的数据、存储数据)是敏感数据。例如:密码、信用卡卡号、医疗记录、个人信息等,这些数据应该被加密,请Review:
对一些需要加密的敏感数据,应该做到以下几点:
场景 #1:假设一个应用程序使用自动化的数据加密系统加密了信用卡信息,并存储在数据库中,当数据被检索时自动解密。这会导致 SQL 注入漏洞能够以明文形式获得所有信用卡卡号。
场景 #2:一个网站上没有使用或强制使用 TLS,或者仅使用弱加密算法。攻击者通过监测网络流量(如:不安全的无线网络),将网络连接从 HTTPS 降级到 HTTP,就可以截取请求并窃取用户会话 cookie。然后,攻击者可以复制用户 cookie 并成功劫持经过认证的用户会话、访问或修改用户个人信息。除此之外,攻击者还可以更改所有传输过程中的数据,如:转款的接收者。
场景 #3:密码数据库使用未加盐的哈希算法或弱哈希算法去存储密码,此时,一个文件上传漏洞可使黑客能够获取密码文件,而这些未加盐的哈希密码通过彩虹表暴力破解方式即可快速破解。
日本个人信息保护法
近年来,因信息、通信技术的发展,企业需要收集大量个人信息,用以提供准确且迅速的服务。个人信息的利用,无论是对现今的商业活动,还是对国民生活都变得不可或缺。但是,另一方面,由于处理个人信息状况不当,导致个人权利和利益受到损害的可能性也在增大。在日本,包含企业和政府等团体的组织内部,泄露的个人信息数量累积超过了1000万件。于是,鉴于规范处理个人信息,明确国家及地方公共团体的职责,确保个人信息有效利用等目的,日本于2005年4月1日起颁布《个人信息保护法》。
欧盟《通用数据保护条例》(GDPR)
欧盟《通用数据保护条例》(General Data Protection Regulation,简称GDPR),其前身是欧盟在1995年制定的《计算机数据保护法》,该法明确规定:
数据安全防范的方法简单来说,当数据从用户键盘敲出的那一刻,到服务器后台存储过程中,都需保持正确的姿势。如:
用正确的姿势保存密码a) 低级错误:明文保存密码b) 低级错误:可逆加密密码c) 错误方法:md5 加密密码d) 正确方法:加盐 hash 保存密码
用正确的姿势传输数据a) 验证服务端的合法性b) 确保通信的安全
用正确的姿势加密敏感信息
用正确的姿势对数据进行备份和监控
许多较早的或配置错误的 XML 处理器评估了 XML 文件中的外部实体引用。攻击者可以利用外部实体窃取使用 URI 文件处理器的内部文件和共享文件、监听内部扫描端口、执行远程代码和实施拒绝服务攻击。
可利用性:一般如果攻击者可以上传 XML 文档或在 XML 文档中添加恶意内容(如,易受攻击的代码、依赖项或集成),他们就能够攻击含有缺陷的 XML 处理器。
普遍性:常见一般来说,许多旧的 XML 处理器能够对外部实体、XML 进程中被引用和评估的 URI 进行规范。SAST 工具可以通过检查依赖项和安全配置来发现 XXE 缺陷。DAST 工具需要额外的手动步骤来检测和利用 XXE 缺陷。
技术影响:严重XXE 缺陷可用于提取数据、执行远程服务器请求、扫描内部系统、执行拒绝服务攻击和其他攻击。
应用程序,特别是基于 XML 的 Web 服务,可能在以下方面容易受到攻击:
培训开发人员的安全意识,是识别和减少 XXE 的关键,除此之外,还需要:
目前,已经有大量XXE缺陷被发现并公开,这些缺陷包括上传可被接受的恶意XML文件、嵌入式设备的 XXE缺陷及深嵌套的依赖项等。
场景 #1:攻击者尝试从服务端提取数据:
]> &xxe;
场景 #2:攻击者通过将上面的实体行更改为以下内容来探测服务器的专用网络:
]>
场景 #3:攻击者通过恶意文件执行拒绝服务攻击:
]>
XML是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。 图片来自网络
XML由3个部分构成,分别是:文档类型定义(Document Type Definition,DTD),即XML的布局语言;可扩展的样式语言(Extensible Style Language,XSL),即XML的样式表语言;以及可扩展链接语言(Extensible Link Language,XLL)。
XML 中的实体分为以下五种:字符实体,命名实体,外部实体,参数实体,内部实体,普通实体和参数实体都分为内部实体和外部实体两种,外部实体定义需要加上 SYSTEM关键字,其内容是URL所指向的外部文件实际的内容。如果不加SYSTEM关键字,则为内部实体,表示实体指代内容为字符串。
XML外部实体表示外部文件的内容,用 SYSTEM 关键词表示:
有些XML文档包含system标识符定义的“实体”,这些文档会在DOCTYPE头部标签中呈现。这些定义的“实体”能够访问本地或者远程的内容。比如,下面的XML文档示例就包含了XML“实体”。
]>&entityex;
在上面的代码中, XML外部实体 ‘entityex’ 被赋予的值为:file://etc/passwd。在解析XML文档的过程中,实体’entityex’的值会被替换为URI(file://etc/passwd)内容值(也就是passwd文件的内容)。 关键字’SYSTEM’会告诉XML解析器,’entityex’实体的值将从其后的URI中读取,并把读取的内容替换entityex出现的地方。假如 SYSTEM 后面的内容可以被用户控制,那么用户就可以随意替换为其他内容,从而读取服务器本地文件(file:///etc/passwd)或者远程文件(http://www.baidu.com/abc.txt)。
XXE注入(即XML External Entity, XML外部实体注入)。通过 XML 实体,”SYSTEM”关键词导致 XML 解析器可以从本地文件或者远程 URI 中读取数据。攻击者可以通过 XML 实体传递自己构造的恶意值,从而引导处理程序解析它。当引用外部实体时,攻击者通过构造恶意内容,可读取任意文件、执行系统命令、探测内网端口、攻击内网网站等行为。
最常见的 XXE 漏洞类型分为以下三种:
既然 XML 可以从外部读取 DTD 文件,那我们就自然地想到了如果将路径换成另一个文件的路径,那么服务器在解析这个 XML 的时候就会把那个文件的内容赋值给 SYSTEM 前面的根元素中,只要我们在 XML 中让前面的根元素的内容显示出来,就可以读取那个文件的内容了。这就造成了一个任意文件读取的漏洞。
假设我们指向的是一个内网主机的端口呢?是否会给出错误信息,我们是不是可以从错误信息上来判断内网主机这个端口是否开放,这就造成了一个内部端口被探测的问题。一般来说,服务器解析 XML 有两种方式,一种是一次性将整个 XML 加载进内存中,进行解析;另一种是一部分的、“流式”地加载、解析。如果我们递归地调用 XML 定义,一次性调用巨量的定义,那么服务器的内存就会被消耗完,造成了拒绝服务攻击。
未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷,访问未经授权的功能或数据,例如:访问其他用户的账户、查看敏感文件、修改其他用户的数据、更改访问权限等。
安全配置错误是最常见的安全问题,这通常是由于不安全的默认配置、不完整的临时配置、开源云存储、错误的 HTTP 标头配置以及包含敏感信息的详细错误信息所造成的。因此,我们不仅需要对所有的操作系统、框架、库和应用程序进行安全配置,而且必须及时修补和升级它们。
当应用程序的新网页中包含不受信任的、未经验证或转义的数据时,或者使用可以创建 HTML 或 JavaScript 的浏览器 API 更新现有网页时,就会出现 XSS 缺陷。XSS 让攻击者能够在受害者的浏览器中执行脚本,并劫持用户会话、破坏网站或将用户重定向到恶意站点。
可利用性:容易自动化工具能够检测并利用所有的三种 XSS 形式,并且存放在便于攻击者利用的漏洞中。
普遍性:广泛XSS 是 OWASP Top10 中第二普遍的安全问题,存在于近三分之二的应用程序中。
可检测性:容易自动化工具能发现 XSS 问题,尤其是一些成熟的技术框架中,如:PHP、J2EE 或 JSP、ASP.NET 等。
技术影响:中等XSS 对于反射和 DOM 的影响是中等的,而对于存储的 XSS,XSS 的影响更为严重,譬如在受到攻击的浏览器上执行远程代码,如:窃取凭证和会话或传递恶意软件等。
针对用户的浏览器,存在三种 XSS 类型:
防止 XSS,需要将不可信的数据与动态的浏览器内容区分开:
场景#1:应用程序在下面的 HTML 代码段构造中使用了未经验证或转义的不可信的数据源:
(String) page += "";
攻击者在浏览器中修改“CC” 参数为如下值:
'>'.
这个攻击会导致受害者的会话 ID 被发送到攻击者的网站,使得攻击者能够劫持用户当前会话。
内容安全策略 (CSP) 是一个额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本 (XSS) 和数据注入攻击等。无论是数据盗取、网站内容污染还是恶意软件,这些攻击都是主要的手段。
CSP 被设计成完全向后兼容(除CSP2 在向后兼容有明确提及的不一致外)。不支持 CSP 的浏览器也能与实现了 CSP 的服务器正常合作,反之亦然:不支持 CSP 的浏览器只会忽略它,如常运行,默认为网页内容使用标准的同源策略。如果网站不提供 CSP Header,浏览器将使用标准的同源策略。
为使 CSP 可用, 你需要配置你的网络服务器返回 Content-Security-Policy HTTP Header ( 有时你会看到一些关于 X-Content-Security-Policy Header 的提法, 那是旧版本,你无须再如此指定它)。
除此之外, 元素也可以被用来配置该策略, 例如:
对于了解 Web 安全的朋友来说,都知道 XSS 这种漏洞,其危害性不用强调。一般对于该漏洞的防护有两个思路:一是过滤敏感字符,诸如【<,>,script,'】等,另一种是对敏感字符进行 html 编码,诸如 php 中的 htmlspecialchars() 函数。
一般情况,正确实施这两种方案之一就可以有效防御 XSS 漏洞了。但其实也会有一些场景,即使实施了这两种方案,攻击者也可以绕过防护,导致 XSS 漏洞被利用。
场景一:XSS 注入点在某个 html 标签属性中,代码片段如下: 可以看到,这里防护措施采用的是方案一:过滤敏感字符。这里如果输入javascript:alert (11),是会被过滤掉的,输出的内容会是:
场景二:XSS 注入点在 js 标签中,代码片段如下: 这里采用的防护措施是第二种,即使用 php 内置函数 htmlspecialchars 对敏感字符进行编码。如果输入正常的 payload,如:,是不会有弹窗的,此时浏览器的输出如下图: 这里的敏感字符< >,已经被 html 编码了,最后在
不安全的反序列化会导致远程代码执行。即使反序列化缺陷不会导致远程代码执行,攻击者也可以利用它们来执行攻击,包括:重播攻击、注入攻击和特权升级攻击。
可利用性:难对反序列化的利用非常困难。因为在不更改或调整底层可被利用代码的情况下,现成的反序列化漏洞很难被使用。
可检测性:一般有些工具可以被用于发现反序列化缺陷,但经常需要人工帮助来验证发现的问题。希望有关反序列化缺陷的普遍性数据将随着工具的开发而被更多的识别和解决。
技术影响:严重反序列化缺陷的影响不能被低估。它们可能导致远程代码执行攻击,这是可能发生的最严重的攻击之一。
如果反序列化进攻者提供恶意代码或者被篡改过的对象,将会使整个应用程序和 API 变的脆弱,这可能会导致以下两种主要类型的攻击:
如果应用中存在可以在反序列化过程中或者之后被改变行为的类,则攻击者可以通过改变应用逻辑或者实现远程代码执行攻击,这种攻击方式被称为对象和数据结构攻击。
典型的数据篡改攻击,如访问控制相关的攻击,其中使用了现有的数据结构,但内容发生了变化。
在应用程序中,序列化可能被用于:
唯一安全的架构模式是:不接受来自不受信源的序列化对象,或使用只允许原始数据类型的序列化媒体。 如果上述均无法实现,请考虑使用下面的方法:
场景 #1:一个 React 应用程序调用了一组 Spring Boot 微服务,为了确保原有的代码不变,解决方法是序列化用户状态,并在每次请求时来回传递。这时,攻击者可利用“R00”Java 对象签名,并使用 Java Serial Killer 工具在应用服务器上获得远程代码执行。
场景 #2:一个 PHP 论坛使用 PHP 对象序列化来保存一个“超级”cookie。该 cookie 包含了用户的 ID、角色、密码哈希和其他状态:
a:4:{i:0;i:132;i:1;s:7:"Mallory";i:2;s:4:"user"; i:3;s:32:"b6a8b3bea87fe0e05022f8f3c88bc960";}
攻击者可以更改序列化对象以授予自己为admin权限:
a:4:{i:0;i:1;i:1;s:5:"Alice";i:2;s:5:"admin"; i:3;s:32:"b6a8b3bea87fe0e05022f8f3c88bc960";}
组件(例如:库、框架和其他软件模块)拥有和应用程序相同的权限。如果应用程序中含有已知漏洞的组件被攻击者利用,可能会造成严重的数据丢失或服务器接管。同时,使用含有已知漏洞的组件和API会破坏应用程序的防御手段,造成各种攻击并产生严重影响。
不足的日志记录和监控,以及事件响应缺失或无效的集成,使攻击者能够进一步攻击系统,并篡改、提取或销毁数据。大多数缺陷研究显示,缺陷被检测出的时间超过 200 天,且通常通过外部检测方检测,而不是通过内部流程或监控检测。
开发人员需要做些什么?
以上便是从本次 Chat——“WebApp 安全风险与防护(系列二)”中截取的部分内容,相信一定能对您的 WebApp 应用程序安全防护有所帮助。
更多关于 WebApp 安全风险防护手段及葡萄城安全架构中的实践分享,将在葡萄城系列公开课“WebApp 安全风险与防护”中,由 Carl 亲自讲解,诚邀您学习观看。
**直播地址:http://live.vhall.com/137416596 **
**公开课地址:http://live.vhall.com/137416596 **公开课时间:2019/6/28 (周五)16:00 PM
错过本场直播?没关系,所有直播内容我们会存放在葡萄城公开课页面,便于您随时观看、学习。
“赋能开发者”葡萄城除了为所有开发人员提供免费的开发技巧分享、项目实战经验外,还提供了众多高水准、高品质的开发工具和开发者解决方案,可有效帮助开发人员提高效率,缩短项目周期,使开发人员能更专注于业务逻辑,顺利完成高质量的项目交付,欢迎您深入了解。
讲师资料:Carl(陈庆),葡萄城高级架构师、葡萄城技术公开课讲师。拥有15年项目开发经验,专注于产品架构、编程技术等领域,对网络安全有着独到见解,曾担任微软TechEd讲师,乐于研究各种前沿技术并分享。
阅读全文: http://gitbook.cn/gitchat/activity/5d0998e6dff5210354877cf0
您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。