0x00  MHN蜜罐介绍

MHN(Modern Honey Network):开源蜜罐,简化蜜罐的部署,同时便于收集和统计蜜罐的数据。用ThreatStream来部署,数据存储在MOngoDB中,安装了入侵检测系统的部署传感器Snort、Kippo、Conpot和Dionaea。收集的信息可以通过Web接口进行展示。据官方说法,目前经测试支持部署MHN服务器的系统有Ubuntu 14.04, Ubuntu 16.04, Centos 6.9

github地址(https://github.com/threatstream/mh)

0x01 支持蜜罐类型

  • Snort
  • Suricata
  • Dionaea
  • Conpot
  • Kippo
  • Amun
  • Glastopf
  • WordPot
  • ShaockPot
  • P0f

0x02 MHN架构

0x03  MHN安装与使用

1.Ubuntu安装MHN管理端

# 操作系统:ubuntu16.04系统更新和自动化脚本安装

sudo apt update

sudo apt upgrade -y 

sudo apt-get install git -y

cd /opt

sudo git clone https://github.com/threatstream/mhn.git

cd mhn /

sudo ./install.sh

# 配置服务器信息,这里的邮箱与密码就是安装完成后的Web后台密码

Do you wish to run in Debug mode?: y/n n

Superuser email: root@backlion.org

Superuser password: (again):

Server base url ["http://155.138.147.248"]:     

Honeymap url [":3000"]: http://155.138.147.248:3000

Mail server address ["localhost"]:

Mail server port []:

Use TLS for email?: y/n n

Use SSL for email?: y/n n

Mail server username [""]:

Mail server password [""]:

Mail default sender [""]:

Path for log file ["/var/log/mhn/mhn.log"]:

Would you like to integrate with Splunk? (y/n)n 

Would you like to install ELK? (y/n)n

# 配置splunk与ELK,我这里选择不配置

2.MHN配置

2.1 agent部署蜜罐

在Deploy选项中,选择我们需要部署的蜜罐类型,复制部署脚本进行安装。

如部署conpot蜜罐,在其系统中执行以下脚本:

wget "http://155.138.147.248/api/script/?text=true&script_id=15" -O deploy.sh && sudo bash deploy.sh http://155.138.147.248 lfDWqAN

2.2 集成SplunkArcSight

Splunk

cd /opt/mhn/scripts/

sudo ./install_hpfeeds-logger-splunk.sh

sudo  ./install_splunk_universalforwarder.sh

tail -f /var/log/mhn/mhn-splunk.log

这会将事件作为值记录到/var/log/mhn-splunk.log。SplunkUniveralForwarder应该监视此日志

Arcsight

cd /opt/mhn/scripts/

sudo ./install_hpfeeds-logger-arcsight.sh
tail -f /var/log/mhn/mhn-arcsight.log

2.3禁止数据上报

MHN Server会默认将分析数据上报给Anomali,如果需要禁用此配置,运行如下命令:

cd mhn/scripts/
sudo ./disable_collector.sh

3.利用MHN部署蜜罐

SSH蜜罐测试

# 蜜罐部署机器:155.138.151.176

# 部署蜜罐:dionaea
wget
"http://155.138.147.248/api/script/?text=true&script_id=4" -O
deploy.sh && sudo bash deploy.sh http://155.138.147.248 lfDWqANT

# 尝试暴力破解攻击
hydra -l root -P password.txt mssql://155.138.151.176

4.界面功能展示

1.如下图界面展示了攻击者的源IP地址以及目的端口和所属协议以及蜜罐类型等攻击报告信息。

2.如下图列出了攻击载荷报告信息(传感器,源IP地址,目的端口等信息)

3.可以看到下图列出了已安装的agent传感器

4.下图分别列出攻击者TOP的用户名和密码字典等展示图

5.打开以下连接地址可以看到实时的攻击图(honeymap)

0x05 系统排错以及安全设置

1.查看系统运行状态

root@mhn:/opt/mhn/scripts# sudo /etc/init.d/nginx status   #查看nginx状态

 * nginx is running       

root@mhn:/opt/mhn/scripts# sudo /etc/init.d/supervisor status    #查看supervisor 状态

 is running

root@mhn:/opt/mhn/scripts#sudo supervisorctl status  #查看所有蜜罐系统组件运行状态

geoloc                           RUNNING    pid , uptime ::

honeymap                         RUNNING    pid , uptime ::

hpfeeds-broker                   RUNNING    pid , uptime ::

mhn-celery-beat                  RUNNING    pid , uptime ::

mhn-celery-worker                RUNNING    pid , uptime ::

mhn-collector                    RUNNING    pid ,  uptime ::

mhn-uwsgi                        RUNNING    pid , uptime ::

mnemosyne                        RUNNING    pid , uptime ::

root@mhn:/opt/mhn/scripts#sudo supervisorctl restart all   #重启所有蜜罐系组件系统命令

正常情况各服务的状态如下:

geoloc                           RUNNING    pid , uptime ::

honeymap                         RUNNING    pid , uptime ::

hpfeeds-broker                   RUNNING    pid , uptime ::

mhn-celery-beat                  RUNNING    pid , uptime ::

mhn-celery-worker                RUNNING    pid , uptime ::

mhn-collector                    RUNNING    pid ,  uptime ::

mhn-uwsgi                        RUNNING    pid , uptime ::

mnemosyne                        RUNNING    pid , uptime ::

2.honeymap 的状态为FATAL解决方法

先删除旧版本的golang

sudo rm -rf /usr/bin/go

sudo apt-get remove golang-go

sudo apt-get remove --auto-remove golang-go

安装golang,如果apt-get install golang安装,后面会因为golang版本低而报错,所以直接下载编译后的包

wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz

解压,然后进行以下配置

sudo tar -xzf go1..linux-amd64.tar.gz -C /usr//local/  //注意包名要改和自己一样的

导入环境变量:

export GOROOT=/usr/local/go

export GOARCH=amd64

export GOOS=linux

export GOBIN=$GOROOT/bin/

export GOTOOLS=$GOROOT/pkg/tool/

export PATH=$GOBIN:$GOTOOLS:$PATH

安装依赖插件net并重新启动所有蜜罐系统组件

cd /opt/honeymap/server

export GOPATH=/opt/honeymap/server

mkdir -p $GOPATH/src/golang.org/x/
cd $GOPATH/src/golang.org/x/
git clone https://github.com/golang/net.git net
go install net sudo supervisorctl restart all

3.mhn-celery-worker的状态为FATAL解决方法

cd /var/log/mhn/

sudo chmod  mhn.log

sudo supervisorctl start mhn-celery-worker

如果还不行

cd /var/log/mhn/  #查看celery-worker的错误日志

tail -f mhn-celery-worker.err

提示的具体错误内容如下

worker.err supervisor: couldn't chdir to /root/mhn/server: EACCES supervisor: child process was not spawned)

改变root跟目录权限

chmod  -R /root  # 改下权限

4.手动密码重置

如果基于电子邮件的密码重置不适合您,这是另一种方法。
# cd /opt/mhn/server/server/

#apt install sqlite3

# sqlite3 mhn.db

SQLite version 3.7. -- ::

Enter ".help" for instructions

Enter SQL statements terminated with a ";"

sqlite> select * from user;

|USERNAME@SITE.com|sklfdjhkasdlfhklsadhfklasdhfkldsahklsd||

sqlite>.quit

$ cd /opt/mhn/server/

$ source env/bin/activate

$ cd server

$ python manual_password_reset.py

Enter email address: YOUR_USER@YOUR_SITE.com

Enter new password:

Enter new password (again):

user found, updating password

5.网络排查

$ sudo netstat -luntp  #查看网络端口开放情况

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp               0.0.0.0:              0.0.0.0:*               LISTEN      /sshd       

tcp6              :::                   :::*                    LISTEN      /dionaea   

tcp6              :::                   :::*                    LISTEN      /sshd       

tcp6              :::                 :::*                    LISTEN      /dionaea   

tcp6              :::                  :::*                    LISTEN      /dionaea   

tcp6              :::                  :::*                    LISTEN      /dionaea   

tcp6              :::                 :::*                    LISTEN      /dionaea   

tcp6              :::                 :::*                    LISTEN      /dionaea   

tcp6              :::                  :::*                    LISTEN      /dionaea   

tcp6              :::                 :::*                    LISTEN      /dionaea   

tcp6              :::                   :::*                    LISTEN      /dionaea   

tcp6              :::                   :::*                    LISTEN      /dionaea   

udp               0.0.0.0:              0.0.0.0:*                           /dhclient3  

udp               0.0.0.0:           0.0.0.0:*                           /dionaea   

udp6              :::                 :::*                                /dionaea   

udp6              :::                   :::*                                /dionaea    

$ sudo iptables -L  #查看防火墙规则状态

Chain INPUT (policy ACCEPT)

target     prot opt source               destination        

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination        

$ sudo tcpdump -nnNN tcp port   #监听tcp 10000数据通信信息

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size  bytes

::14.009646 IP 1.2.3.4. > 5.6.6.8.: Flags [P.], seq :, ack , win , options [nop,nop,TS val  ecr ], length 

::14.012967 IP 5.6.6.8. > 1.2.3.4.: Flags [.], ack , win , options [nop,nop,TS val  ecr ], length 

# netstat -luntp | grep    #查看端口10000的状态

tcp               0.0.0.0:           0.0.0.0:*

LISTEN      /python

$sudo  tail -f hpfeeds-broker.err  #查看hpfeeds-broker错误信息

INFO:root:Auth success by mnemosyne.

INFO:root:Auth success by mnemosyne.

INFO:root:Auth success by mnemosyne.

INFO:root:Auth success by mnemosyne.

INFO:root:Auth success by mnemosyne.

INFO:root:Auth success by mnemosyne.

INFO:root:Auth success by cb5a36e8-55e8-11e9-a746-560001faa574.

INFO:root:Auth success by cb5a36e8-55e8-11e9-a746-560001faa574.

INFO:root:Auth success by mnemosyne.

INFO:root:Auth success by mnemosyne.

$sudo  mongo hpfeeds

MongoDB shell version v3.4.20

connecting to: mongodb://127.0.0.1:27017/hpfeeds

MongoDB server version: 3.4.

Welcome to the MongoDB shell.

For interactive help, type "help".

For more comprehensive documentation, see

 http://docs.mongodb.org/

Questions? Try the support group

 http://groups.google.com/group/mongodb-user

Server has startup warnings: 

--03T07::15.543+ I STORAGE [initandlisten] 

--03T07::15.543+ I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine

--03T07::15.543+ I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem

--03T07::15.579+ I CONTROL [initandlisten] 

--03T07::15.579+ I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.

--03T07::15.579+ I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.

--03T07::15.579+ I CONTROL [initandlisten] 

--03T07::15.579+ I CONTROL [initandlisten] 

--03T07::15.579+ I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.

--03T07::15.579+ I CONTROL [initandlisten] **        

6.设置通过HTTPS访问MHN以及端口开放安全

将生成的SSL密钥文件复制到/etc/ssl/private/

将下面的配置复制到/etc/nginx/sites-enabled/

/etc/nginx/sites-enabled/mhn-https

server {

    listen               ;

    listen               ssl;

    server_name         _;

    ssl_certificate     /etc/ssl/private/mhn.pem;

    ssl_certificate_key /etc/ssl/private/mhn-priv.key;

    if ($ssl_protocol = "") {

        rewrite ^ https://$host$request_uri? permanent;

    }

    location / {

        try_files $uri @mhnserver;

    }

    root /opt/www;

    location @mhnserver {

      include uwsgi_params;

      uwsgi_pass unix:/tmp/uwsgi.sock;

    }

    location  /static {

      alias /opt/mhn/server/mhn/static;

    }

}

/etc/nginx/sites-enabled/honeymap-https

map $http_upgrade $connection_upgrade {

             default upgrade;

             ''      close;

}

server {

             listen    ssl;

             ssl_certificate     /etc/ssl/private/mhn.pem;

             ssl_certificate_key /etc/ssl/private/mhn-priv.key;

             root /opt/honeymap/client;

             index index.html index.htm;

             server_name _;

             location / {

                          try_files $uri $uri/ /index.html;

             }

             location /data/ {

                          proxy_pass http://localhost:3000;

                          proxy_http_version 1.1;

                          proxy_set_header Upgrade $http_upgrade;

                          proxy_set_header Connection $connection_upgrade;

             }

}

/etc/nginx/sites-available/splunk-https

map $http_upgrade $connection_upgrade {

        default upgrade;

        ''      close;

}

server {

        listen    ssl;

        ssl_certificate     /etc/ssl/private/mhn.pem;

        ssl_certificate_key /etc/ssl/private/mhn-priv.key;

        root /tmp;

        index index.html index.htm;

        server_name _;

        location / {

                proxy_pass http://localhost:8000;

                proxy_http_version 1.1;

                proxy_set_header Upgrade $http_upgrade;

                proxy_set_header Connection $connection_upgrade;

        }

}

需要启用以下端口并允许MHN服务器上的防火墙规则运行,所有其他端口都可以被阻止。

TCP:443 TCP:3000

7.备份数据

在MHN服务器上进行备份数据

sudo su -

supervisorctl stop all

mongodump  --db hpfeeds

mongodump  --db mnemosyne

tar zcvf mhn-backup.tar.gz dump /opt/mhn/server/mhn.db

supervisorctl start all

复制mhn-backup.tar.gz安全的地方

8.数据恢复

使用install.sh进行安装MHN ,然后将mhn-backup.tar.gz复制到/tmp/目录下并运行以下命

sudo su -

supervisorctl stop all

cd /tmp

tar zxvf mhn-backup.tar.gz

cp /opt/mhn/server/mhn.db /opt/mhn/server/mhn.db

service mongod start

dump.sh脚本:
for FILE in dump/mnemosyne/*.bson;

do

    mongorestore --drop --db mnemosyne "$FILE"

done

for FILE in dump/hpfeeds/*.bson;

do

    mongorestore --drop --db hpfeeds "$FILE"

done

supervisorctl start all

0x06 总结

使用

  • 蜜罐可以存在于各种场景之中(机房、内网、云环境);
  • 蜜罐产品的思考应该是在防火墙、入侵检测之后,属于提高企业安全水平的辅助产品;
  • 蜜罐主要部署在企业内网,起到预警与了解攻击中入侵的情况的作用,如:发现员工PC中毒对内网的入侵、转移攻击者注意力等等;
  • 蜜罐不能设置的太过简单,也不能设置太过复杂;

优点

  • 内置集成大量的蜜罐系统,且提供一键部署蜜罐的方式;
  • 支持蜜罐攻击效果图展示,与ArcSight或Splunk集成友好;

缺点

  • 部署时间需要很长时间(不算缺点吧,网速给力情况下不存在这个问题);
  • 不支持对蜜罐的集中管理;

0x07 参考资料

Build Your Own Honeypot Network In Under An Hour

https://www.cnblogs.com/Eleven-Liu/p/9284417.html

https://libraries.io/github/threatstream/mhn

https://github.com/threatstream/mhn/

MHN蜜罐系统建设的更多相关文章

  1. 【转】城市CORS系统建设

    随着GPS技术的飞速进步和应用普及,它在城市测量中的作用已越来越重要.当前,利用多基站网络RTK技术建立的连续运行卫星定位服务综合系统(Continuous Operational Reference ...

  2. 运维平台之CMDB系统建设

    CMDB是运维的基础核心系统,所有的元数据和共享数据管理源,类似于业务中的账号平台的作用.本篇文章,我将从概念篇.模型篇.到实现与实施篇具体的进行阐述. CMDB也称配置管理,配置管理一直被认为是 I ...

  3. 基于CNONIX国家标准的出版社ERP系统建设分享

    目录 一.出版社ERP系统建设面临的三大挑战 在系统建设中如何贯彻CNONIX国家标准 新ERP系统建设面临的挑战 技术体系及架构选择面临的挑战 二.系统建设实施过程控制 项目组织管控 项目技术管控 ...

  4. 6 个 K8s 日志系统建设中的典型问题,你遇到过几个?

    作者 |  元乙  阿里云日志服务数据采集客户端负责人,目前采集客户端 logtail 在集团百万规模部署,每天采集上万应用数 PB 数据,经历多次双 11.双 12 考验. 导读:随着 K8s 不断 ...

  5. 政务私有云盘系统建设的工具 – Mobox私有云盘

    序言 这几年,智慧政务已经成为了政府行业IT建设发展的重要进程.传统办公方式信息传递速度慢.共享程度低.查询利用难,早已成为政府机关获取和利用信息的严重制约因素.建立文档分享共用机制,加强数据整合,避 ...

  6. MHN蜜罐的安装部署

    MHN(Modern Honey Network),是一个用于管理和收集蜜罐数据的中心服务器.通过MHN,可以实现快速部署多种类型的蜜罐并且通过web可视化界面显示蜜罐收集的数据,目前支持的蜜罐类型有 ...

  7. 开源物联网通讯框架ServerSuperIO,成功移植到Windows10 IOT,在物联网和集成系统建设中降低成本。附:“物联网”交流大纲

    [开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 一.概述 经过一个多月晚上的时间,终于把开源物联网通讯框架ServerSuperIO成功移植到Windows10 IOT上, ...

  8. 系统建设 > 医疗集团CRM系统建设步骤与分析

    概述 医院客户关系管理系统(Customer Relationship Management,简称CRM)是一个完善的“以病人为中心”的管理系统,为集团/医院/总院分院/管理机构提供院前.院中.院后的 ...

  9. 某集团BI决策系统建设方案分享

    企业核心竞争能力的提升,需要强壮的运营管理能力,需要及时.准确.全面的业务数据分析作为参考与支撑. 某集团是大型时尚集团,内部报表系统用的QlikView,但是管理分配不够灵活,不能满足数据安全的要求 ...

随机推荐

  1. 【php增删改查实例】第二十三节 - PHP文件上传

    22. PHP文件上传 22.1 资源文件 将这三个东西拷贝项目的根目录. 拷贝完毕后,打开upload.html: 现在,我们在项目的根目录去编写一个upload.php. PHP给我们提供了很多关 ...

  2. Spring boot多模块(moudle)中的一个注入错误(Unable to start embedded container; nested exception is org)

    org.springframework.context.ApplicationContextException: Unable to start embedded container; nested ...

  3. 【JUC源码解析】CompletableFuture

    简介 先说Future, 它用来描述一个异步计算的结果.isDone方法可以用来检查计算是否完成,get方法可以用来获取结果,直到完成前一直阻塞当前线程,cancel方法可以取消任务.而对于结果的获取 ...

  4. Python从菜鸟到高手(2):清空Python控制台

    执行python命令会进入Python控制台.在Python控制台中可以用交互的方式执行Python语句.也就是执行一行Python语句,会立刻返回执行结果.   当Python控制台输入过多的Pyt ...

  5. Linux下性能调试工具运维笔记

    作为一名资深的linux运维工程师,为方便了解和追求服务器的高性能,如cpu.内存.io.网络等等使用情况,要求运维工程师必须要熟练运用一些必要的系统性能调试工具,liunx下提供了众多命令方便查看各 ...

  6. bash处理一条命令的步骤

    Shell执行一条命令步骤 参考链接: <Learning the bash Shell, 3rd Edition  -- 7.3. Command-Line Processing> &l ...

  7. 《Linux内核设计与实现》 第一二章学习笔记

    <Linux内核设计与实现> 第一二章学习笔记 第一章 Linux内核简介 1.1 Unix的历史 Unix的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆 ...

  8. Anaconda2和Anaconda3同时安装

    转载于:https://www.cnblogs.com/zle1992/p/6720425.html 1.先从网站(国内的清华镜像:https://mirrors.tuna.tsinghua.edu. ...

  9. PAT (Basic Level) Practice 1001 害死人不偿命的(3n+1)猜想

    https://pintia.cn/problem-sets/994805260223102976/problems/994805325918486528 卡拉兹(Callatz)猜想: 对任何一个自 ...

  10. [书摘]Windows内存管理术语

    1. Virtual Address space 虚拟地址空间 一个应用程序能够访问的最大的内存地址空间, 32位的机器上面最大的就是4GB 但是 并不是所有的内存都放到主存里面, 可能放到pagef ...