元宇宙的概念想必大家都略有所闻,比较突出的事件就是 Facebook 更名为 Meta,当然今天的主题跟它没啥关系,随着元宇宙概念的爆炸式出现,3D 渲染技术再次受到了巨大关注度。
3D 渲染技术的迭代路线分成了两种技术方案:Native 和 Web。
感兴趣的可以看一下以下两篇文章:
接下来就进入我们的正题了,由上可见,Web 发展蒸蒸日上,应用也越来越广,那么随之而来的就是安全问题了,我们比较耳熟能详的就是什么钓鱼网站,信息泄露之类的,这些都被包含在 “OWASP Top 10”内;
OWASP:Open Web Application Security Project,开放式 Web 应用程序安全项目 (OWASP) 是致力于 Web 应用程序安全的国际非营利组织。OWASP 的核心原则之一是,他们的所有资料都免费提供并且可以在其网站上轻松访问,这使得任何人都能够改善自己的 Web 应用程序安全性。
“OWASP Top 10” 是定期更新的报告,概述了 Web 应用程序安全性的安全问题,重点关注 10 个最关键的风险。该报告由来自世界各地的安全专家小组汇总而成。OWASP 将 Top 10 称为“意识文档”,他们建议所有公司将该报告纳入流程中,以最大程度地减少和/或防护安全风险。
从第五位上升称为 Web 应用程序安全风险最严重的类别,常见的 CWE 包括:将敏感信息泄露给未经授权的参与者、通过发送的数据泄露敏感信息、跨站请求伪造(CSRF);
风险说明
访问强制实施策略,使用户无法在其预期权限之外操作。失败的访问控制通常导致未经授权的信息泄露,修改或者销毁所有数据,或在用户权限之外执行业务功能。
常见的访问控制脆弱点:
预防措施
开发人员和 QA 人员应进行访问控制功能的单元测试和集成测试;
访问控制只在受信服务器端代码或者无服务器 API 中有效,这样攻击者才无法修改访问控制检查或元数据;
情境范例
情境 #1: 应用程式在存取账户资讯的 SQL 呼叫中使用未经验证的资料:
pstmt.setString(1, request.getParameter("acct")); ResultSet results = pstmt.executeQuery( );
攻击者只需修改浏览器的“acct”參数即可发送他们想要的任何账号。如果沒有正确验证,攻击者可以存取任何用户的账户。
情境 #2: 攻击者仅強迫浏览某些目标网址。存取管理页面需要管理员权限。
如果未经身份验证的用户可以存取任一页面,那就是一个缺陷。 如果一个非管理员可以存取管理页面,这也是一个缺陷。
上升一位到第二位,以前称为“敏感数据泄露”。敏感数据泄露更像是一种常见的表象问题而不是根本原因,这项风险重点是与加密机制相关的故障(或缺乏加密机制);
风险说明
首先要确认对传输中的数据和存储数据都有哪些保护需求。例如:密码、信用卡号、医疗记录、个人信息和商业秘密需要额外保护。
对于数据,要确认:
预防措施
情境范例
情境 #1: 有一个应用程式使用自动化资料库加密來加密资料库中的信用卡卡号,但是资料被检索时是被自动解密的,进而允许透过 SQL 注入缺陷來检索信用卡卡号明文。
情境 #2: 有一个站台沒有对所有页面強制使用 TLS 或支援脆弱的加密,攻击者监控网络流量(如在不安全的无线网络), 将连线从 HTTPS 降级成 HTTP,并拦截请求窃取使用者的会话 (session) cookies,之后攻击者重送窃取到的会话(session) cookies 并劫持用户(认证过的)的会话,进而检索或修改使用者的隐私资料。 除了上述以外,攻击者也能修改传输的资料,如汇款收款人。
情境 #3: 密码资料库使用未被加盐或简单的散列函数來储存每个人的密码,一个档案上传的缺陷可以让攻击者存取密码资料库,所有未被加盐的哈希可以被预先计算好的彩虹表解密。即使加盐,由简单或快速的哈希仍能被 GPU 破解。
注入降至第三,常见的 CWE:跨站点脚本、SQL 注入、文件名或路径的外部控制;
风险说明
源代码审查是检查应用程序是否易受注入攻击的最佳方法。
强烈鼓励针对所有参数、标题、URL、cookie、JSON、SOAP 和 XML 数据输入的自动测试;
风险产生情况:
预防措施
防止注入需要将数据与命令和查询分开:
情境范例
情境 #1: 应用程式使用了不被信任的资料在脆弱的 SQL 呼叫中:
String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") + "'";
情境 #2: 类似地,应用程式对框架的盲目信任,可能导致仍然在漏洞的查询,(例如:Hibernate 查询语言 (HQL)):
Query HQLQuery = session.createQuery("FROM accounts WHERE custID='" + request.getParameter("id") + "'");
在这两个情境中,攻击者在他们的浏览器修改了 "id" 参数值,送出 ‘ or ‘1’=’1,例如:
example.com/app/account…' or '1'='1
这两个查询的含义将产生改变,而回应所有帐户资料表中的纪录,更危险的攻击将可能修改或删除资料,以及影点资料的储存过程。
这是2021的一个新类别,侧重于设计和体系结构缺陷相关的风险,呼吁更多的使用威胁建模、安全设计模式和参考体系结构;
风险说明
不安全设计和不安全实现直接存在差异,我们区别设计缺陷和实现缺陷是有原因的,安全设计仍然可能存在实现缺陷,从而导致可能被利用的漏洞。
预防措施
情境范例
情境 #1: 凭证恢复的流程或许会包含“问题与答案”,该方式是被 NIST 800-63b、OWASP ASVS 与 WASP Top 10 中禁止。 “问题与答案”无法被作为信任身份的证据因为不止一个人可能会知道答案,因此这个方法会被禁止的原因。因此此类的程式码应该被移除或是用更安全的设计来替代。
情境 #2: 电影院在要求押金前允许团体预订折扣并且最多有 15 名观众。攻击者可以威胁模型此流程并测试他们在一次请求中是否可以预订 600 个座位和的所有电影院,导致电影院巨大的收入损失。
情境 #3: 连锁零售的电子商务网站没有保护机制来对抗黄牛的机器人购买高端的显示卡再转售到拍卖网站。对于零售商与显示卡制造商产生了可怕的宣传效应并且导致与那些无法购买到显卡的爱好者间产生了不愉快。巧妙的防机器人设计与领域逻辑规则,例如短暂几秒的购买时间或许可以辨识出不可信赖的购买并且拒绝该交易。
从上一版的第六名提升,90% 都进行了某种形式的配置错误测试。
风险说明
缺少一个体系的、可重复的应用程序安全配置过程,系统将处于高风险中;
你的应用程序可能受到攻击,如果应用程序是:
预防措施
应实施安全的安装过程,包括:
情境范例
情境 #1: 营运用的程式服务器,带有预设的样本程式,并未移除。这个样本程式带有已知的安全缺陷,可被攻击者利用入侵服务器。例如,预设的程式带有管理者界面,并且有未变更的帐号,攻击者可以透过预设的密码登入,并取得控制权。
情境 #2: 资料目录指令并未在服务器上关闭。攻击者可以找出并且下载,已编译过 Java 档案,并且透过反编译与逆向工程等手法,查看原始码。再因此找出程式中,严重的存取控制缺陷。
情境 #3: 程式服务器的设定,允许输出带有详细内容的错误讯息,例如堆叠追踪,供用户查看。这有可能导致敏感讯息的外泄,或间接透露出,使用中,并带有脆弱性的元件版本。
情境 #4: 一个云端服务器,提供了预设权限分享,给其他在网际网路的 CSP 用户。这将导致云端储存的敏感资料可以被存取。
不安全的组件是我们努力测试和评估风险的已知问题;
风险说明
如满足下面的某个条件,那么你的应用就易受到此类攻击:
预防措施
每个组织都应该制定相应的计划,对整个软件生命周期进行监控、评审、升级或更改配置;
制定一个补丁管理流程:
情境范例
情境 #1: 组件通常以与应用程式本身相同的权限运行,因此任何组件中的缺陷都可能导致严重的影响。 此类缺陷可能是偶然的(例如,编码错误)或有意的(例如,组件中的后门)。 一些已知易受攻击组件的范例为:
有一些自动化工具可以帮助攻击者找到未修补或配置错误的系统。例如,Shodan IoT 搜索引擎可以帮助您找到存在 2014 年 4 月未修补 Heartbleed 漏洞的设备。
之前称为无效的身份认证,此类别从第二名下滑,现在包含了与身份识别失效相关的 CWE;
风险说明
预防措施
情境范例
情境 #1: 使用已知列表密码的撞库攻击是一种常见的攻击方式,假设应用程式没有实施自动化威胁或撞库攻击的保护,在这种情况下,应用程式会被利用为密码预报的工具来判断认证资讯是否有效。
情境 #2: 大多数的认证攻击是因为持续的使用密码作为唯一因素,最佳实践、密码轮换、以及复杂度的要求会鼓励用户使用和重复使用脆弱的密码。建议组织按照 NIST 800-63 停止这些做法并使用多因素认证。
情境 #3: 应用程式的会话超时没有被设定正确。一个用户使用公用电脑来存取应用程式时,用户没有选择"登出"而是简单的关闭浏览器分页就离开,此时一个攻击者在一小时后使用同一个浏览器,前一个用户仍然处于通过认证的状态。
预防措施
情境范例
情境 #1: 不安全的反序列化:一个反应式应用程式呼叫 Spring Boot 微服务。程式设计师们试图确保他们的代码是不可变的。他们的解决方案是在双向所有请求讯息中包含序列化的用户状态。攻击者注意到“R00”Java 物件签章并使用 Java Serial Killer 工具(用来执行 Java 反序列化攻击)在应用程式服务器远端执行程式码。
情境 #2: 未签署之更新:许多家用路由器、机上盒、装置韧体等未以通过签署之韧体验证更新档案。未签署韧体是越来越多攻击者的目标且情况只会变得更糟。这是一个主要问题,因为只能以新版本修复此机制并期待旧版本自然淘汰,没有其他方法。
情境 #3: SolarWinds 恶意更新:众所周知,某些国家会攻击更新机制,最近一次值得注意的是对 SolarWinds Orion 的攻击。该软体开发商拥有安全组建和更新完整性流程。尽管如此,这些流程仍被破坏并在几个月时间中向 18,000 多个组织送出高度针对性的恶意更新,其中大约 100 个组织受到了影响。这是历史上此类性质最深远、最重大的资安事件之一。
风险说明
如果不进行日志记录和检测,就无法发现任何违规行为,任何时候都会发现日志记录、检测、监视和主动响应不足的情况:
预防措施
开发人员应根据应用的风险,实施以下部分或全部控制:
情境范例
情境 #1: 一家儿童健康计划供应商的网站运营商因缺乏监控和记录无法侦测资安事件。外部通知该健康计划供应商,攻击者已存取及修改超过 350 万名儿童的敏感健康记录。事后审查发现网站开发者没有处理重大弱点。由于系统没有记录或监控,资料泄漏可能从 2013 年开始至今,时间超过七年。
情境 #2: 印度一家大型航空公司发生涉及数百万乘客超过十年包括护照及信用卡资料等个人资料的资料泄漏。资料泄漏发生在第三方供应商提供的云端服务,该供应商在资料泄漏发生一段时间后通知航空公司。
情境 #3: 一家大型欧洲航空公司发生依 GDPR 应报告之个资事故。据报导,攻击者利用支付应用系统之安全漏洞,取得超过 40 万笔客户支付纪录。该航空公司遭隐私主管机关裁罚两千万英镑。
风险说明
一旦 web 应用程序在获取远程资源时没有验证用户提供的 URL,就会出现 ssrf缺陷。它允许攻击者强制应用程序发送一个精心构造的请求到意外的目的地,即使是在有防火墙,V**获其他类型的网络访问控制列表保护的情况下;
预防措施
情境范例
情境 #1: 对内部服务器 port scan。如果网路架构未被切割,攻击者可以透过连线结果或连线所经过的时间或拒绝 SSRF payload 连线的状态,加以对应出内部网路并且判断该等 port 在内部服务器是否开启或关闭状态
情境 #2: 机敏资料泄漏。攻击者可以存取本地端档案(例如 ) 或内部服务已取得机敏资料。
情境 #3: 存取云服务之 metadata storage。大部分云端提供者都有 metadata storage,例如http://169.254.169.254/。攻击者可以读取 metadata 以取得机敏资讯。
情境 #4: 渗透内部服务 - 攻击者可以滥用内部服务去执行更进一步的攻击,例如 RCE 或 Dos。
这是我的服务器被攻击的一次真实经历,原因是因为 Redis 密码弱口令,当时是在学习 Redis 那会,要远程调用,就信任 IP 全开,然后又是以 root 身份运行的,因此密码就被爆破了,攻击者直接通过 root 写入 SSH 公钥文件,进行了接下来的一系列操作;
反弹 shell
写入 SSH 公钥
开始挖矿
这一段是我自己模拟的一个攻击过程;
前期通过社工,钓鱼,ARP 欺骗等方式诱使用户进行一些相关操作;
UAC 绕过
启用 EXP
然后该干嘛干嘛,权限不够的话,需要考虑如何提升权限,比如漏洞利用等;
对室友的电脑进行了攻击之后,进行的一些操作:
屏幕截图
创建文件夹
上传文件并读取
判断是否为虚拟机
开启了那些服务
安装了哪些应用
获取主机最近的系统操作
等等一些操作;