Kippo是一个中等交互的SSH蜜罐,提供了一个可供攻击者操作的shell,攻击者可以通过SSH登录蜜罐,并做一些常见的命令操作。

当攻击者拿下一台服务器的权限后,很可能会进行小范围的端口探测或者批量的端口扫描,以便横向扩展,获取更多服务器的控制权,因此部署内网SSH蜜罐,把攻击者引诱到蜜罐里来,触发实时告警,即可让安全人员及时知道已经有攻击者渗透内网、知道哪台服务器已被控制、以及攻击者在蜜罐上做了哪些操作。

如何把攻击者引诱到蜜罐里来,除了要看蜜罐是否具备主动欺骗能力外,还要看蜜罐在公司网络中的部署密度。网络安全域通常会要求不同的网段是隔离的,而且攻击者很可能是先在同一网段进行扫描,不会上来就扫描全网。所以如果只有一台蜜罐服务器,攻击者的扫描行为很可能不会触碰到蜜罐,也就不会触发蜜罐告警,所以理想情况是在所有网段均部署诱捕节点,但如果都用服务器部署的话,又太浪费资源,所以我们通过端口转发的方式,利用虚拟机、虚拟vlan网卡、现有服务器等方式来充当诱捕节点。

一、蜜罐架构图

二、蜜罐的搭建

1、Kippo

1.1  Kippo的安装

GitHub地址:https://github.com/desaster/kippo

安装环境:centos7

为确保蜜罐服务器的安全,建议在windows服务器上安装vmware,然后安装centos。

下载代码、安装相关的依赖

 git clone https://github.com/desaster/kippo.git  # 无法运行git命令,请先安装  yum -y install git
yum –y install twisted python-zope-interface python-pyasn1
yum -y install python-devel mysql-devel
yum install -y python2-paramiko
pip install twisted==15.2. # 无pip命令,请执行 yum -y install python-pip ; 如果提示没有pip包,请先执行yum -y install epel-release。安装twisted时如果提示unable to execute gcc: No such file or directory,运行命令 yum install gcc
pip install mysql-python

解压下载的kippo-master.zip

unzip kippo-master.zip 

因为kippo不能以root运行,所以新建一个kippo账号

useradd -d /kippo kippo

把kippo文件夹复制到/kippo 目录下面,并更改这个文件夹的所有者

cp -R kippp /kippo/chown -R kippo:kippo  kippo

安装mysql

yum install mysql-server # 提示没有mysql-server安装包,
请执行
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm

创建数据库和账号

create database kippo;
GRANT ALL PRIVILEGES ON  kippo.* TO kippo@localhost IDENTIFIED BY 'your password';

初始化数据表

 mysql -ukippo -p -Dkippo < /kippo/kippo/doc/sql/mysql.sql

在/kippo/kippo下面复制配置文件,并修改相应的配置

cp kippo.cfg.dist kippo.cfg
vim kippo.cfg

启动开始程序    # 如果提示缺少哪些模块,pip install 安装,如缺少Crypto  执行pip install  pycrypto,缺少pyasnl.error  执行 pip  install pyasnl

sh start.sh

1.2 kippo测试

查看kippo监听的端口,默认2222端口

kippo/data 的userdb.txt 保存了ssh登陆蜜罐的用户名和密码,也可以根据公司实际情况,添加更逼真的SSH账号和弱密码。

用另一台机器SSH登录蜜罐的2222端口(用户名和密码就是上面userdb.txt中的)

模拟交互登录

登录以及登录后的操作日志,在log文件夹下面的kippo.log里面

三、创建诱捕节点

理想情况我们要在公司所有的VLAN网段部署诱捕节点,但如果都用服务器部署的话,太浪费资源,以下介绍三种方法创建诱捕节点:

方法一:

IDC如果有虚拟机,可以在虚拟机上添加不同vlan的网卡,通过添加策略路由的方式让这些诱捕IP连通。上面架构图使用的就是这种方法。

图例:添加了很多张网卡

策略路由的具体配置如下

#创建策略路由表
echo "32 net_32" >> /etc/iproute2/rt_tables
echo "47 net_47" >> /etc/iproute2/rt_tables
echo "50 net_50" >> /etc/iproute2/rt_tables
echo "56 net_56" >> /etc/iproute2/rt_tables
#编辑启动文件,把下面的配置添加进去
vim /etc/rc.local
#启用8021q
/sbin/modprobe 8021q
#本机与默认网关的路由,否则会显示路由不可达
ip route add 172.10.32.0/24 dev eth1 table net_32
ip route add 172.10.47.0/24 dev eth2 table net_47
ip route add 172.10.50.0/24 dev eth3 table net_50
ip route add 172.10.56.0/24 dev eth4 table net_56
# 默认网关
ip route add default via 172.10.32.1 table net_32
ip route add default via 172.10.47.1 table net_47
ip route add default via 172.10.50.1 table net_50
ip route add default via 172.10.56.1 table net_56 # 配置策略路由
ip rule add from 172.10.32.2/32 table net_32
ip rule add from 172.10.47.2/32 table net_47
ip rule add from 172.10.50.2/32 table net_50
ip rule add from 172.10.56.2/32 table net_56

方法二:

物理机上添加一张网卡,在此网卡上配置多个vlan虚拟网卡,然后类似上述的配置通过策略路由的方式实现IP的连通,同时需要交换机互联的端口上配置trunk模式。

方法三:

IDC各vlan找一台在用但重要程度不高的服务器,在现有的网卡下,创建一张子网卡,自网卡配置诱捕节点IP

如:查看现有的ifcfg-eth0文件

cat  /etc/sysconfig/network-scripts/ifcfg-eth0

确保IP为静态IP,且掩码、网关填写正确

创建诱捕节点IP的配置文件

vim  /etc/sysconfig/network-scripts/ifcfg-eth0: 

重启新配置文件生效

ifup eth0:

四、设置端口转发(安装rinetd)

目标:当攻击者扫描探测诱捕节点IP的22端口时,把流量转发至蜜罐服务器的kippo程序上。

在此需要说明的是:我们要把访问诱捕节点的22端口转发过去,且rinetd要转发的源端口不能被本地占用,所以需要把诱捕节点服务器的SSH先改为其他端口,22端口预留给转发使用,流量可以转发到蜜罐所在物理机的任意端口,然后通过vmware端口映射把流量最终镜像给蜜罐服务器的2222端口(kippo的默认端口是2222)

rinetd官网地址:https://boutell.com/rinetd/

通过官网下载安装包

上传至服务器解压

tar –zxvf rinetd.tar.gz

这地方有一个坑 :rinetd默认只有在进程被关闭的时候,才会把日志写到rined的日志文件中(/var/log/rined.log),也就是说当rinetd一直在运行的时候,即使有流量被转发了,也无法在日志文件中看到日志。所以在编译安装rinetd前,我们要先修改它的源代码,增加一个fflush函数强制更新日志,然后在去编译安装。编辑rinetd.c这个文件,找到修改的位置,按下图添加一行代码。

创建稍后编译时需要用到的文件夹

mkdir /usr/man/man8

编译&安装

make
make install

上一步make的时候可能会报两种错误

第一种:

解决方法:修改Makefile文件

第二种错误:提示超出系统最大定义端口,修改rinetd.c文件的544和567行,把65536端口改成65535

创建配置文件

touch /etc/rinetd.conf
诱捕节点IP 22 蜜罐所在物理机的IP # 源地址 端口 目的地址 端口,因为诱捕节点很多,所以需要些很多行配置
logfile /var/log/rinetd.log # 日志文件

运行这个工具

rinetd 
#关掉工具的命令是 pkill rinetd

当攻击者访问专用IP的22端口时,会被转发至蜜罐的SSH服务。

rinetd会产生日志,具体路径是在/etc/rinetd.conf中设置的,日志样例如下

成功登录蜜罐后,在伪造的shell中进行命令操作,蜜罐服务器也会记录一份日志,但是这地方记录的访问源IP是我们诱捕节点的IP,不是攻击者所在服务器的IP地址。所以在下面日志收集的时候,既需要收集rinetd转发的日志,也需要收集kippo日志。

四、自动告警

可通过splunk实现自动告警

首先通过syslog的方式把端口转发(rinetd.log)和蜜罐(kippo.log)这两份日志实时同步至splunk服务器。

splunk上新建一个应用(kippo)

splunk新建索引(kippo)

通过本地文件的方式导入数据

splunk设置告警

转载请注明出处: https://www.cnblogs.com/Eleven-Liu/p/9204244.html

Kippo蜜罐的部署、诱捕节点的搭建以及自动告警的更多相关文章

  1. kippo蜜罐搭建

    kippo蜜罐搭建 总结一下kippo蜜罐搭建的方法,centos系统.kippo-master.zip的安装包 (gcc,python-devel,pip,twisted==13.10,pycryp ...

  2. kubeadm部署k8s1.9高可用集群--4部署master节点

    部署master节点 kubernetes master 节点包含的组件: kube-apiserver kube-scheduler kube-controller-manager 本文档介绍部署一 ...

  3. ASP.NET Core on K8S学习初探(1)K8S单节点环境搭建

    当近期的一个App上线后,发现目前的docker实例(应用服务BFF+中台服务+工具服务)已经很多了,而我司目前没有专业的运维人员,发现运维的成本逐渐开始上来,所以容器编排也就需要提上议程.因此我决定 ...

  4. 在 Linux 部署多节点 Kubernetes 集群与 KubeSphere 容器平台

    KubeSphere 是在 Kubernetes 之上构建的以应用为中心的企业级容器平台,所有供为用户提供简单易用的操作界面以及向导式操作方式.同时,KubeSphere Installer 提供了 ...

  5. 用Kolla在阿里云部署10节点高可用OpenStack

    为展现 Kolla 的真正实力,我在阿里云使用 Ansible 自动创建 10 台虚机,部署一套多节点高可用 OpenStack 集群! 前言 上次 Kolla 已经表示了要打 10 个的愿望,这次我 ...

  6. K8s二进制部署单节点 master组件 node组件 ——头悬梁

    K8s二进制部署单节点   master组件 node组件   --头悬梁 1.master组件部署 2.node   组件部署 k8s集群搭建: etcd集群 flannel网络插件 搭建maste ...

  7. K8s二进制部署单节点 etcd集群,flannel网络配置 ——锥刺股

    K8s 二进制部署单节点 master    --锥刺股 k8s集群搭建: etcd集群 flannel网络插件 搭建master组件 搭建node组件 1.部署etcd集群 2.Flannel 网络 ...

  8. Apache Spark1.1.0部署与开发环境搭建

    Spark是Apache公司推出的一种基于Hadoop Distributed File System(HDFS)的并行计算架构.与MapReduce不同,Spark并不局限于编写map和reduce ...

  9. kubernetes 单节点和多节点环境搭建

    kubernetes单节点环境搭建: 1.在VMWare Workstation中建立一个centos 7虚拟机.虚拟机的配置尽量调大一些 2.操作系统安装完成后,关闭centos 自带的防火墙服务 ...

随机推荐

  1. egrep及扩展正则

    模式:pattern 正则: grep:基本正则,查找速度慢 Extended grep:扩展正则 fgrep:fast grep,不支持正则,直接查找字符串,执行速度快 基本正则: . :任意单个字 ...

  2. bash特性-命令历史命令行编辑

    bash: GUI:Gnome,KDE,XFCE CLI:sh,csh,bash,ksh,tcsh,zsh shell,子shell tree:查看目录树 pstree:查看进程目录树 bash: 1 ...

  3. Micro:bit 硬件架构介绍

    Micro:bit做为当红的少儿编程工具,这两年在编程教育领域越来越火.今天就从硬件架构开始,分享Micro:bit的相关主题. Microbit 硬件设计是根据ARM mbed技术所开发的应用IC及 ...

  4. Python爬虫使用浏览器的cookies:browsercookie

    很多用Python的人可能都写过网络爬虫,自动化获取网络数据确实是一件令人愉悦的事情,而Python很好的帮助我们达到这种愉悦.然而,爬虫经常要碰到各种登录.验证的阻挠,让人灰心丧气(网站:天天碰到各 ...

  5. Pyhton网络爬虫实例_豆瓣电影排行榜_Xpath方法爬取

    -----------------------------------------------------------学无止境------------------------------------- ...

  6. 【转】: 探索Lua5.2内部实现:虚拟机指令(3) Upvalues & Globals

    在编译期,如果要访问变量a时,会依照以下的顺序决定变量a的类型: a是当前函数的local变量 a是外层函数的local变量,那么a是当前函数的upvalue a是全局变量 local变量本身就存在于 ...

  7. SpringCloud IDEA 教学 (四) 断路器(Hystrix)

    写在开始 在SpringCloud项目中,服务之间相互调用(RPC Remote Procedure Call —远程过程调用),处于调用链路底层的服务产生不可用情况时,请求会产生堆积使得服务器线程阻 ...

  8. vue.js 创建组件 子父通信 父子通信 非父子通信

    1.创建组件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  9. NIO初探

    NIO的前世今生 NIO又叫NonBlockingI/O,即非阻塞I/O.以此对应的,有一个更常见的IO(BIO),又叫Blocking I/O,即阻塞IO,两种都为Java的IO实现方案. NIO/ ...

  10. oracle数据库之PL/SQL 块结构和组成元素

    一.PL/SQL 块 (一)PL/SQL 程序由三个块组成,即声明部分.执行部分.异常处理部分 PL/SQL 块的结构如下: 1.DECLARE /* 声明部分: 在此声明 PL/SQL 用到的变量, ...