前言
一个大型企业的安全框架构造,从全栈来看,从客户端到我们的服务端,必然会经过如下的路径,客户端->运营商网络->cdn/waf->运营商网络->生产网/数据->办公网->内部员工,一个正常的环是这样的,按照如今的攻击方向来看,我们在每一个环细致分析会出现什么样的攻击,我们又应当如何去防御?
第一阶段
我们的第一个阶段可以分为,客户端->运营商网络->cdn->运营商网络这个阶段,那么这个阶段又会出现哪些威胁呢?
第一个威胁就是我们的客户端可能存在安全漏洞,我们可以先从自身减少漏洞率,再到尽量防止漏洞出现了最大程度的去规避防御掉漏洞
1.安全开发,那么一个合格的SDL安全审计需要哪些条件呢?我们可以参照谷歌的安全开发
(1)例如提供收藏一些典型的安全漏洞和框架,让我们的开发工程师在开发的时候可以刻意去避免,比如像java的spring mvc框架,它历史出了哪些漏洞,我们开发的时候又需要如何去避免.
(2)Code Review、双人审批,毕竟每一个程序员的思维都是不一样的
(3)人工代码审计,符合自身业务的WEB漏洞扫描
2.安全止损,当我们自身的安全开发的流程走了一遍,企业自身的安全人员认为没有漏洞时,将产品业务推出,但是还是被蓝军或者恶意攻击团队通过非社工钓鱼的手法获取了权限,我们这个时候的当务之急就是阻止攻击团队进一步利用,并且及时清理掉属于他们的webshell
(1)权限,我们的业务起的权限不能太高,比如我们的业务是wordpress的框架,当它还没有被攻破的时候,攻击队的眼中就是wordpress的攻防,如果它被拿下了,就是Windows/Linux的终端攻防了,那么一个高权限和低权限在他们眼中是2中不同的模式
(2)关于容器,某些企业有些业务些许是物理机运行虚拟机,虚拟机在运行容器,攻击者一般是如何逃逸的,观察容器是什么镜像,该镜像是否有漏洞?使用的dokcer或者Kubernetes是否有端口暴露在外面,有权限修改配置文件,亦或者是劫持动态链接库以容器的身份执行命令以此来达到逃逸的效果,关于容器这方面,我们的企业红军需要做到以下几点,因为我们的容器镜像,几乎都可以在公共仓库中找到相应的Docker镜像,确认开源代码和文档中是否存在泄漏用户隐私,是否泄漏了秘钥、账号密码、测试IP地址、端口、是否包含挖矿程序、后门程序、病毒、木马等恶意代码,屏蔽掉我们的容器的一些关键信息,比如我们的.dockerenv文件是否需要rname一下,dokcer以及Kubernetes的默认端口是否需要更改一下,修改一下我们的container环境变量,不能让当前用户拥有修改配置的权限,不要为了图方便交换数据挂载物理机的磁盘,以及procfs,尽量减少容器的功能,别再容器里面整一个ssh服务,以及容器的网络,该加黑名单就加,没有防火墙保护,攻击者就可以利用主机内部网络进行容器间的ARP欺骗,当然,容器需要注意的地方还有很多,笔者第一能力有限,只能想到这么多,第二笔者不是主攻云安全/容器这方向
(3)WAF&&RASP,通过WAF过滤掉绝大多数恶意请求,在利用和程序融为一体的RASP过滤掉一些绕过WAF特征库的攻击甚至是一些0day,说人话就是WAF相当于人类的皮肤,RASP就相当于是我们体内的免疫系统。
第二个威胁就是我们现在比较流行的供应链攻击
1.恶意供应链
(1)由于一些竞争关系,我们采购的路由器,服务器是否可能成为别人进入我们办公网的跳板?或者是用的运营商网络流量是否被监听泄露?虽然这样说有点骇人听闻,但是对于业务比较大,以及国家的核心业务公司,这些都是我们应该值得考虑的
2.供应链攻击
(1)未知攻,焉知防,我们要防守住供应链就应该懂得供应链的攻击点会出现在哪里?第一点就是供应的产品,可能在某个社区开源,并且攻击者找到了开发团队仓库的密码,就能上传带有后门的产品,以及更新包,第二点就是依赖项混淆攻击,简单一点就是我们pip安装我们python所依赖的库,但是被依赖项混淆或命名空间混淆,我们安装过后就存在后门了,第三点就是社工,让产品团队的人无意构造我们想要的恶意代码,亦或者有意恶意接管代码。关于供应链方面,更大的方向点在于供应商,他们的产品开发维护人员的密码是否在开源社区泄露,历代产品的安全情况怎么样,补丁打的及时吗?自己社区项目的维护者安全意识怎么样,他是否被公司完全信任,以及是否正确配置制品库进行阻止依赖关系混淆的供应链攻击
第三个威胁就是我们的社工钓鱼
1通常钓鱼是视情况而定,一类是精准打击,一类是广撒网,愿者上钩,一类是供应链钓鱼,先说说精准打击,攻击者知道他的猎物,他们一般的手法是通过脉脉/boss直聘等招聘网站寻找公司的Hr,在将自己恶意的简历发过去,以及掉src运营的安全人员,因为是精准打击,他们的攻击样本肯定是这一段时间无法被杀软所探测到的,唯一能够预防的就是提高hr的安全意识,但是最重要的还是他们攻击者的话术,他们再发简历前会问自己的电脑是什么类型,MAC还是windows的,因为上线机制不同。还有就是发错了,可能上线需要前面的那个文件作为支柱,面试还是挺重要的发错了我们的hr还是需要注意,还有就是作为攻击者,重心不会放在面试上,就是希望猎物早点点了,很少会去主动约时间面试,真正关心bu是什么样的,这几类咱们的hr都需要额外注意,以及各种情况,什么简历字看不清楚要你开启宏,当然,我举得这个例子只是攻击者管用的手法之一,预防精准打击的最核心的一点就是识别他们的话术,还有类似的商务合作,技术交流,钓鱼网站让你填账号密码。广撒网其实成功率不怎么高,因为不可能把自己最得意的免杀demo撒出去,再加上现在都有类似的邮件防火墙,当然邮件只是一种情况。至于供应链钓鱼,如果要说最好的防御策略那就是咱自产自销,用的东西都得是自己签名的.
第四个威胁就是业务安全
1.用户
(1)账号安全,我们的客户会不会存在被盗号,客户账户是否存在各种越权,这个配合企业自身的SDL以及SRC,这2者相辅相成
2.企业,因为笔者最主要的方向是web攻防,所以这里暂不做没有技术含量的品评分析,但是还是的提一嘴
(1)流量安全,包括ddos,恶意刷单,各类羊毛党,爬虫等
(2)内容安全,内容是否有擦边的嫌疑
(3)黑灰产,打着一模一样的APP名称钓鱼,企业的花经历和时间去对付黑灰产,pc端/Android/ios
第二阶段
第二个阶段就是生产网/数据->办公网>内部员工这个阶段,这个阶段的对象分为2种,第一种是以攻击者为对象,按照他们的角度来说也是我们常说的内网渗透以及后渗透,我们需要注意什么,首先我们的明白这一阶段攻击者需要做什么,这一阶段攻击者已经撕开了口子,他们现在的目标是寻找数据/财务/DC(域控)等核心资产,然后横向获取其权限,最后拿到想要的东西,清理痕迹,走人。站到企业员工的角度来说,员工电脑挖矿,就是内部员工信息泄露,可能通过邮件,u盘,web,截图/拍照等方式传递数据,首先我们来说说对攻击者的防护方式
1.攻击者,运用的技术(信息收集-横向渗透-权限维持/提权/钓鱼/穿透-清理痕迹)
先说说信息收集,我们要知道攻击者要收集哪些信息,跳板机信息,有什么杀软,有什么服务,如果有域看域信息,当前用户权限,是域用户吗?跳板机是域机器吗?域控在哪儿?数据库在哪儿?Exchange又在哪儿,网段是什么样的,这个c端又有什么服务,有没有各类ms17010,各类能直接拿权限的cve等,不管是什么攻击手法,攻击者都可以用工具或者是cmd解决,比如找域控,可以用nbtscan,也可以用net group “domain controllers” /domain去找,对于企业的红军来说,我们防御规则可以这么写
(1)匹配工具名称,比如信息收集常用nbtscan,httpscan,nmap,dnsdump,AdFind,dsquery,Seatbelt,pwerspliot,Nishang,Empire,Bloodhound等后渗透工具的信息收集模块,我们可以匹配这些工具的名称,当然,规则也不能这么死板,比如某些攻击者的nbtscan.exe叫1.exe/a.exe/nbt.exe,这些咱们都的预防
(2)命令行匹配,比如我们的setspn,nltest信任域,AntiVirusProduct查看杀软,firewall/mode=disable防火墙,cmdkey看rdp凭证,wlan show profiles看wifi密码,如果有些命令我们自己也要用,就加一个白,我们自己的运维就netstat -oan,其他人一般喜欢netstat -ano,如果是ano就预警,除了企业安全部的同学,其他bu很少会用到这些命令
(3)算法中的罕见hash,比如我们用了Bloodhound,会生成一个zip压缩包,但是这台服务器历史上并没有生成过压缩包的时间案列,那么这个罕见hash就直接被我们捕获
(4)当然,如果公司有能力,在IDC内网里加密,后台的组件之间的数据传输都是加密
横向渗透/权限维持/提权/钓鱼/内网穿透
(1)匹配工具名称mimikatz,prodump,GPPPassword.ps1,Rubeus,ruler邮箱爆破,SNETCracker,reGeorg,EarthWorm,lcx,netcat/powercat,kekeo.exe,psexec/wmiexec,incognito,kerbrute,Invoke-TheHash,responder
(2)命令行匹配,interface portproxy出站入站,net use \ ipc链接,reg save hklm\sam获取注册表hiv文件,wmic process call create执行命令,Schtasks/at/sc/reg/winrm/dcom等执行命令,各类环境反弹shell
(3)行为特征匹配,注册表被修改(用于权限维持/bypassuac),组策略被修改,新增用户,某些工具的流量特征
(4)因为有一些cve,工具是需要python环境的,我们的一些服务器若为特俗业务,就尽量不要安装python的环境
这里简单分享一下,蓝军或者攻击者常用的横向手法,ipc空连接,抓密码/pth,找自己这台机器上的密码/token凭证,利用kerbrute爆破域用户密码,找ms17010以及各类能直接拿权限的cve,找exchange服务器,找内网里面的web服务,比如weblogic,st2,数据库服务器,wsus服务器,以及内网钓鱼运维(运维的服务器/运维常登录的web服务),发钓鱼邮件,约束委派等。
常见的提权手法,systeminfo找各类cve提权,第三方服务,比如iis,mysql的udf提权,土豆家族,凭证窃取,uac提权,低版本的比如win7,at/sc提权,AccessChk,Advanced Installer等方式提权
常见的权限维持,开机自启动(sc/注册表/组策略),shift后门,修改注册表,金银票据,隐藏克隆用户,bitsadmin后门,组件劫持,msdtc
后渗透阶段笔者着重在讲windows,Linux根本没有提,因为大部分企业都是以windows域来管理的,虽然目前有部分企业有脱域的想法,但是代价以及后续管理是十分困难的,回到linux,蓝军或者攻击者在linux上会怎么操作呢?常见的横向,也是弱口令,翻各类文件,找web服务器的漏洞,redis未授权拿权限等常见的提权手法,常见的提权手法,利用内核漏洞,文件权限配置不当(上文中的容器也会因此逃逸),利用SUID程序进行提权,常见的权限维持,ssh会话劫持,cron后门,ssh公私钥等手法
清理痕迹
防火墙日志,IIS日志,windows默认的日志,
(1)命令行匹配,system32\config Event.EVT CurrentControlSet\Services\Eventlog system32\logfiles SOFTWARE\Microsoft\SchedulingAgent Clear-Eventlog -Log eventcreate -l system format /p
(2)匹配工具名称,elsave.exe Invoke-Phant0m EventCleaner cipher
当然,笔者的攻防水平有限,只是参照自己以往的攻防经验在结合网上一些文章的技术参考,总结地可能不全面,如有哪方面建设规则经验以及攻击手法不慎遗漏,可以私信作者邮箱亦或者是评论区指出,当然,我们也可以参照att&ck的框架,作为知名安全框架,不管是国内还是国外,许多优秀的安全公司的安全建设框架,都是多多少少参考了att&ck框架
2.员工
挖矿检测,服务器被攻击导致挖矿,员工内鬼挖矿
(1)特征检测,高CPU 和 GPU 使用率,异常网络活动,响应速度慢,硬盘被占用了极大的空间(新币种,用硬盘空间和网络带宽来进行挖矿),有明显的家族特征
(2)行为检测,一般的挖矿木马会写入计划任务实现持久化,宁外一些挖矿木马会自带密码库和具备扫描爆破功能
数据安全,从储存-访问/维护/使用/共享
(1)先从储存安全来说,统一安全管控密钥KMS技术,比如我们有qq,twitter,dingtalk的密码,他们是随机变化的,我们还有一个pass.txtqq,twitter,dingtalk的密码,企业可以自定义这个主密码, 数据加密,文件系统加密
(2)访问/运维/使用/共享这个阶段,一些研发时的特权账号必须回收,研发和运维的权限要分离,日志/debug该脱敏的就脱敏,以及水印,DLP技术,零信任技术
反打
当然,我们更不能一味的防守,我们的防守需带点攻击,让攻击者忌惮我们,那么,就会用到蜜罐,或者一些反制技术,最后我在补充一点蜜罐的建设意见
1.蜜罐出来毕竟有一段时间了,蓝军都有极高的警惕性,一堆硬骨头啃不动,怎么有一个struts2,蜜罐阿,那没事了,我们蜜罐第一点必须要有那种循序渐进,能让蓝军觉得是自己流批,找到的,举个列子,找一个ssrf漏洞,找扫内部资源,同段放一个有SQL注入的蜜罐,蓝军此刻的想法是写文章,记一套组合拳ssrf+sql注入拿下目标网站,当然,我这个例子举得过于理想化,同段只有一个web服务这本身就很有问题嘛,当然,这个只是一个思路
2.也是互联网上老生长谈的了,蓝军能钓鱼红军,红军也可以钓鱼蓝军嘛,我们自己设置几个xx段运维表.xlsx,红军值班表.docx放在稍微隐蔽点的位置,对于不是怎么专业的蓝军,粘贴复制,直接打开
3.其实蜜罐的思路也可以用于各类业务,逻辑安全上,确认异常是就返回异常数据
4.各类反制,蚁剑,goby的反制
后记
写在最后,希望笔者的这篇文章能为各大安全企业建设者提供有针对性的建议和帮助,如若文章有错误,还望各位读者斧正