现在红队攻击方式主要三种:
社工化,强对抗(0day,nday,免杀),迂回战术(apt攻击)
蓝队常见的9种进攻方式
弱口令
比如admin/123456,admin/admin,后六位,社工库...
互联网边界渗透内网
比如拿到了vpn账号、虚拟化桌面系统、邮件服务系统、官方网站
通用产品组件漏洞
邮件系统漏洞、OA 系统漏洞、中间件软件漏洞、数据库漏洞等
安全产品 0Day
社工钓鱼
供应链隐蔽攻击
下属单位迂回攻击
秘密渗透
多据点
蓝队建设思路
内外网的资产梳理
- 确认本次hw的内外网资产,形成一份参演清单,确认参演系统的系统名称、url、内网地址、外网地址、联系人。
- 确认内网Vlan划分情况,排查是否有不必要或错误的Vlan划分。
- 确认集权系统与安全设备与参演资产的关系,包括域控,堡垒机,邮件系统等等。
- 确认安全设备是否均已添加hw参演系统的策略,包括IPS、IDS、防火墙、安全网关等。
软件安全策略
作为安全开发或蓝队防守人员不能通过红队的视角来分类漏洞,应该以业务上过程进行分类
身份认证策略、访问控制策略、会话管理策略这三个方面基本上属于整个软件安全的基石,如果这三个方面缺少了相应控制或者实现的大方向上存在问题,那么对于整个软件的影响极大,可能是颠覆性的需要推到重建。
对抗中间人: 对于中间人攻击大部分人的看法可能是属于软件后期的部署问题,采用https/HSTS就没什么问题(问题可能并没有这么简单),不过我还是把它纳入到框架。
输入输出: 这可能有点老生常谈,不过我觉得清楚的了解对于软件而言是输入,什么是输出,可能会更好进行分析。
敏感数据:在网络逐渐形成虚拟社会的背景下,其开放性的特征必然会引起有关部门的注意,作为一项重要的合规项应当在初期就纳入考虑到。同时如果出现相应的问题,软件修复起来极其头疼,完全可能出现修不完的情况,在投产的过程触犯了相应的法规造成的损失可能也
软件技术栈: 白话一点的说法就是软件都用了什么技术。
配置管理: 一些意料之外漏洞可能都出自于错误的配置管理,诸如交易日志泄露
异常处理: 安全对抗的本质是获取信息,尽可能的获取一些常规获取不到的信息,异常是一项比较重要的来源。
身份认证
对身份认证时进行校验,比如在登录,注册,密码找回时,可以增加验证码(图片,拖动,运算),token防爆破,JS加密,密文分组传输,次数限制/锁定机制,人脸识别等
会话管理
由于HTTP协议属于无状态(每个数据包都是独立的,仅根据数据包无法判断之前发过哪些数据包)的协议,同时在身份认证一节中已经说明大部分的业务操作是需要基于虚拟身份进行的,那么在完成身份认证后,后续数据包无法回溯之前的数据包,从而导致无法证明自己确实能够持有声明的虚拟身份。
如果每次都携带账号密码等敏感信息请求进行身份验证,那么时间长了有可能泄露,所以我们创建了一种临时秘密用来代替直接传输敏感信息,这就是SessionID(会话ID),我们必须保证他的复杂度,这样才不容易被伪造,可以通过随机生成的符号组合,一定的长度
访问控制
针对用户数据或者其他资源的数据级的访问控制,比如a用户权限是p1,b用户权限是p2;需要评估和确认访问权限设计的有效性,满足最小化的原则,也就是对权限赋予过程进行评估;对于资源默认的访问权限应当是拒绝;未授权:在系统变更过程中是否持续对资源进行梳理和监控;验证访问者是否持有认证通过后持有的虚拟身份,比如在垂直越权时,对方是否已经知道高权限用户的数据包并进行伪造?
对抗中间人
一般而言,我们所考虑的中间人攻击的情况是图中虚线的框框——网络设备,攻击者可能控制了相关的路由器或者交换机,进而对应用的相关数据包进行监听、篡改。比如arp欺骗。
风险其实在背景里已经提到了就是信息被窃取、篡改,而处理的解决方式就是需要去构建可信信道。所以可信通道需要满足:
- 数据加密(可以通过JS加密,或者通过非对称加密)
- 完整性
- 需要支持对抗重放数据——即每个数据包有自己的标识,如果丢失了某部分包能及时重发
提到中间人,不得不提到的一定是SSL、TLS,以及结合http协议形成的https,一般情况其代码实现已经集成在操作系统中。理想情况下,TLS或者SSL协议能够打成我们的目标,但是它们在构建可信信道的过程中,依赖于数字证书技术。如果不当使用数字证书,例如自签证书(比如我们burpsuite自己创建证书)、不可信CA滥发证书(野鸡机构乱发证书),那么可信信道就无法构建。那么为了部分解决SSL/TLS的数字证书问题,只能采取增加部分预置信息的方式,例如HSTS——浏览器缓存证书,SSL Pinning——内置证书进行比较。由于SSL/TLS是对抗中间人的完整性校验和对抗重放,重放的另一个威胁源来自客户端自身在应用层发起的请求,这类情况无法适用SSL/TLS(这里说的就是我们本地发包再抓包,这个是防不了的)
异常处理
比如网站异常处理时,暴露出对方中间件,搭建环境;比如sql查询时,暴露出sql查询语句,这样更加方便sql注入;在测试环境,研发可以增加异常报错;但是生产环境必须去掉;另外一种防护方式就是将异常发送到攻击者无法看到的地方,比如操作系统的某个固定目录下(公司研发团队内网),统一的日志收集平台
配置管理
比如一些敏感配置信息,比如apache和nginx的access.log和error.log,php.ini和.htaccess,数据库配置文件等
软件技术栈
应用系统中那些无法进行掌控的第三方组件,例如java的第三方jar、框架、中间件,比如java的第三方jar包自带木马,比如第三方jar包有后门;thinkphp框架的命令执行;phpstudy有一回下载的文件存在远程命令执行;尽量使用成熟的框架和持续更新的框架,保证安全
敏感数据
包括 个人隐私(如图),敏感的业务数据(财务相关交易记录)
传输:不能使用明文传输,必须加密;产生:采用的到底是完整数据还是部分数据,如果是部分数据可以采用hash摘要;存储:1.避免明文传输,必须hash加密;2.数据操作时也必须加密;使用:敏感信息不必要展示就别展示;销毁:直接清空数据库,而不是通过删除标识位这种假删除