热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

KVM高交互蜜罐NAT网络模式下的网络配置

KVM高交互蜜罐NAT网络模式下的网络配置-一、概述蜜罐技术最近在各个安全厂商已有应用与实践,通过构建蜜罐,用户能在公网或者内网引诱攻击,同时对蜜罐中的攻击数据进行收集与分析,达到

一、概述

蜜罐技术最近在各个安全厂商已有应用与实践,通过构建蜜罐,用户能在公网或者内网引诱攻击,同时对蜜罐中的攻击数据进行收集与分析,达到了解攻击者意图,收集威胁情报的目的,更高级的通过蜜罐能够回溯重放对攻击流程,形成攻击链,对整个攻击过程进行一个清晰的展示。

二、问题描述及处理方法

针对内网部署的蜜罐,用户现场一般拥有多个不同网段的划分,针对这种情况单蜜罐设备需要支持感知多个网段,本文重点阐述单设备多网段感知过程中的网络配置方法。先看一下蜜罐设备 网络拓扑图:

上图中虚拟蜜罐通过kvm虚拟化技术构建,构建的虚拟蜜罐集群有一个属于自己的内部网络(ps:由于docker平台使用的是linux内核,不支持windows高交互操作系统的运行,所以我们使用kvm构建虚拟蜜罐环境),上图中的192.168.122.0 网段就是虚拟蜜罐内部网络对应的网段,此时是虚拟蜜罐内部网络就像是我们平时工作的一个局域网,而蜜罐服务器上的em1,em2,em3网卡对应的网络就像是一个外部网络。我们的预期是当内网渗透机或者内网失陷机器进行攻击和扩散时,当流量达到蜜罐服务器上的em1,em2,em3对应的网卡上时,我们把对应的攻击流量牵引至虚拟蜜罐内部,让虚拟蜜罐集群与攻击者进行交互,但是虚拟蜜罐内部与蜜罐服务器上的网络属于两个完全不同网段的网络,存在网络隔离,因此需要用到一项技术,NAT技术(网络地址转换)。大概的转换流程如下:

当172.16.20.50的流量达到em2网卡时,通过内部的nat转换将通信的目标地址更改为蜜罐内部的地址192.168.122.100。这个过程需要使用linux下的iptables进行控制,具体指令如下:

iptables -t nat -A PREROUTING -d 172.16.20.10 -j DNAT --to-destination 192.168.122.100

这条指令配置的是当攻击者对蜜罐服务上的ip地址发起访问时,我们把访问的流量牵引到虚拟蜜罐的内部。同理当虚拟蜜罐对外发起连接时也需要做地址转换,而此时需要做的是源地址转换。

iptables -t nat -I POSTROUTING 3 -s 192.168.122.100 -j SNAT --to-source 172.16.20.10

注意:加源地址转换是用的是-I 插入方式加入,而目标地址转换时用的是-A 追加方式加入。这是由于kvm 对应的libvirtd管理kvm虚拟机网络的进程会对kvm内部创建的虚拟机进行源地址转换处理,这种源地址转换是一种特殊的源地址转换,称为ip地址伪装具体的可以查看防火墙nat表的规则,

iptables -t nat -vnL 如图:

通过验证,ip地址伪装时默认会使用linux的默认网关对应的网卡上ip地址进行源地址转换,当该网卡有多个ip地址时,会优先选择第一个。如果我们使用这种默认的ip地址伪装会引发一个问题,即:所有虚拟蜜罐对外发起访问时,出口IP只有一个,这与我们预期不符,如下图:

ip地址伪装:

预期效果:

所以我们需要在ip地址伪装之上先使用-I 优先插入我们需要进行源地址转换的规则,确保进入的路径和出去的路径保持统一,当然地址转换也可以让流量进入和流出的出口不保持统一,这个可以根据实际需求进行调整。需要注意的用户自己添加的规则会在libvirtd(控制kvm网络配置的进程)重启后被覆盖,我们需要针对这种覆盖做一定的规则现场保护操作防覆盖,此处不展开。

根据蜜罐的交互程度不同可分为高低交互蜜罐,低交互蜜罐可以是简单的服务模拟,通过socket与访问该服务的远程地址进行一些数据的收发,仿真模拟程度有限,不便于跟踪捕获攻击者入侵后的进一步系统行为,攻击者入侵后的安装动作没办法得到有效的触发。高交互蜜罐可以仿真虚拟操作系统,能够感知入侵和后续的主机事件,在追溯和还原攻击过程高交互的优势更明显,也正是由于高交互蜜罐的高仿真,高交互蜜罐被入侵后可能成为入侵者的跳板机或者肉鸡攻击其他的内网机器,这个问题是需要解决的,因此我们需要针对高交互蜜罐进行一些通信策略的控制,限制蜜罐的对外通信。我们也可以通过iptables进行蜜罐对外访问的策略控制,根据用户现场需求,一般用户的期望是让外面的攻击流量可以访问蜜罐,不允许蜜罐对外主动发起任何连接,也就是蜜罐能够感知攻击,但是限制蜜罐被攻击后对外扩散,对流量进行限制时需要用iptables种的fitler表进行控制流量的管控。

加入如下规则进行蜜罐对外访问流量的拒绝,从外部发起的已经建立的连接需要放行,指令如下:

iptables -t filter -i virbr0 -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -t filter -i virbr0 -I FORWARD -j REJECT

上述两条指令中生效的网卡是virbr0,该网卡是libvirtd(控制kvm网络配置的进程)虚拟出来的网卡,所有虚拟蜜罐的流量均会流经此网卡,因此流量管控只需要指定该网卡即可,防止规则印象其他网卡的通信,蜜罐对部分端口主动发起的访问我们需要解除限制,可以加入如下规则,iptables 规则生效的优先级是自顶向下的,我们需要使用插入的方式,让放行规则在拒绝规则之前,否则拒绝所有规则会优先生效,放行规则将不起作用:

iptables -t filter -I FORWARD -i virbr0 -p udp --dport 放行的端口号 -j ACCEPT

iptables -t filter -I FORWARD -i virbr0 -p tcp --dport 放行的端口号 -j ACCEPT

至此,虚拟机蜜罐对外的策略已经基本完成。总结分为一下几点:

  1. 让外部的访问入口流量能够通过转发的方式进入到虚拟蜜罐内部
  2. 让虚拟蜜罐的出口流量能够与入口流量走向同的通信路径(指入口ip地址和出口ip地址 保持对应关系,从那里进,从那里出)
  3. 限制虚拟蜜罐主动对外发起的连接,必要时通过放行端口的方式,解除虚拟蜜罐对外连接的限制

虚拟蜜罐的策略已经基本完成,接下来我们处理蜜罐服务器上的路由策略,还是先抛出问题:


推荐阅读
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • Kubernetes Services详解
    本文深入探讨了Kubernetes中的服务(Services)概念,解释了如何通过Services实现Pods之间的稳定通信,以及如何管理没有选择器的服务。 ... [详细]
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • 使用jQuery与百度地图API实现地址转经纬度功能
    本文详细介绍了如何利用jQuery和百度地图API将地址转换为经纬度,包括申请API密钥、页面构建及核心代码实现。 ... [详细]
  • 本文详细介绍了如何使用Linux下的mysqlshow命令来查询MySQL数据库的相关信息,包括数据库、表以及字段的详情。通过本文的学习,读者可以掌握mysqlshow命令的基本语法及其常用选项。 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • 本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ... [详细]
  • LoadRunner中的IP欺骗配置与实践
    为了确保服务器能够有效地区分不同的用户请求,避免多人使用同一IP地址造成的访问限制,可以通过配置IP欺骗来解决这一问题。本文将详细介绍IP欺骗的工作原理及其在LoadRunner中的具体配置步骤。 ... [详细]
  • 本文探讨了一个Web工程项目的需求,即允许用户随时添加定时任务,并通过Quartz框架实现这些任务的自动化调度。文章将介绍如何设计任务表以存储任务信息和执行周期,以及如何通过一个定期扫描机制自动识别并加载新任务到调度系统中。 ... [详细]
  • 本文探讨了在使用 MyBatis 进行批量数据处理时遇到的参数绑定异常问题,并提供了详细的解决方案。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • HDU 2537 键盘输入处理
    题目描述了一个名叫Pirates的男孩想要开发一款键盘输入软件,遇到了大小写字母判断的问题。本文提供了该问题的解决方案及实现方法。 ... [详细]
  • 页面预渲染适用于主要包含静态内容的页面。对于依赖大量API调用的动态页面,建议采用SSR(服务器端渲染),如Nuxt等框架。更多优化策略可参见:https://github.com/HaoChuan9421/vue-cli3-optimization ... [详细]
author-avatar
you是was的was
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有