UDN-企业互联网技术人气社区

板块导航

浏览  : 1719
回复  : 0

[讨论交流] 如何在数据库前端开发中建立你自己的Passive DNS收集系统

[复制链接]
小辫儿的头像 楼主
发表于 2016-5-13 15:18:52 | 显示全部楼层 |阅读模式
  在本篇文章中,我将会向大家介绍如何在 Ubuntu 服务器上搭建一个 Bro IDS 并且安装一个 bro-pdns 来记录 DNS 的查询记录,存入 SQL 数据库中。

  Passive DNS 对安全研究非常重要,因为它可以在前期帮助我们构建出目标的基础设施结构,并且可以得到以下三方面的答案:

  该域名曾经绑定过哪些IP

  这个IP有没有其他的域名

  该域名最早/最晚什么时候出现

  Passive DNS 同时也在 SOC 的时候起到很大的帮助。通过识别的恶意域名,可以找到其他被恶意破坏的机器。 目前有很多网站允许我们访问它的 Passive DNS 系统,例如:

  Virustotal( https://www.virustotal.com/ ) 、 passivetotal(https://www.passivetotal.com ) 、 CIRCL ( https://www.circl.lu/services/passive-dns/ ) 。有很多这样的网站,但是,自己在本地有一个当然会更方便。

  安装 Bro

  首先,你需要做的第一件事是安装一个 ubuntu 并且运行起来。我们就直接用Security Onion 简单的搭建下就行了,直接通过虚拟机搭建起来就行了。

  具体命令如下:
  1. > apt-get update && apt-get upgrade

  2. > apt-get install cmake make gcc g++ flex bison libpcap-dev/

  3. /libgeoip-dev libssl-dev python-dev zlib1g-dev

  4. /libmagic-dev swig2.0

  5. > wget https://www.bro.org/downloads/release/bro-2.4.tar.gz

  6. > tar -xvzf bro-2.4.tar.gz

  7. > cd bro-2.4

  8. > ./configure --prefix=/nsm/bro

  9. > make

  10. > make install

  11. > export PATH=/nsm/bro/bin:$PATH
复制代码

  我们首先假设,我们只运行了单个的 Bro ,并且只有一个监控界面。如果你想要更多的功能,可以阅读配置文件。

  以上的步骤完成后,我们需要配置一个文件。

  由于我们只需要监控一个接口,所以我们不修改任何文件。但是,为了确定下,我们需要查看 $PREFIX/etc/node.cfg 确定下 eth0 是否是我们唯一的网卡接口。

  注:在我们的例子中 $PREFIX 是 /nsm/bro

  现在我们可以开始运行 Bro 了:
  1. > broctl

  2. [BroControl] install

  3. [BroControl] start

  4. [BroControl] status
复制代码

  如果你的路径没有设置正确,你可以用完整路 ’/nsm/bro/bin/broctl`’ 运行 ” broctl ”   好吧,这一点都不难! 安装完 Bro ,我们开始安装 MySQL ,然后让 MySQL 工作起来,这样的话,我们就能在数据库中记录 Bro 的请求和应答了。这就更简单了:
  1. > sudo apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql

  2. > sudo mysql_install_db

  3. > sudo /usr/bin/mysql_secure_installation
复制代码

  接下来,我们创建一个数据库使用:
  1. > mysql -u root -p

  2. mysql> CREATE DATABASE pdns;
复制代码

  但是,我们还需要安装其他的一些第三方库,首先我们需要安装‘ pip ’
  1. > wget https://bootstrap.pypa.io/get-pip.py

  2. > python get-pip.py
复制代码

  接下来我们安装, Bottle 库,对,就像下面这样:
  1. > pip install bottle
复制代码

  并且用 apt 安装 SQLAlchemy :
  1. > sudo apt-get install python-sqlalchemy
复制代码

  好了,我们需要的东西差不多都安装完了,我们可以让  bro-pdns 启动了 … 首先,我们用 git 下载 bro-pnd ,没有的话可以 apt 安装:
  1. > apt-get install git

  2. >  git clone  https://github.com/JustinAzoff/bro-pdns.git
复制代码

  接下来,把 bro-pdns 文件夹移动到 ’ /nsm/bro/share/bro/site ’ 路径下,然后打开’ /nsm/bro/share/bro/site ’路径下的 ’ local.bro ’ 文件,添加下面这句内容:
  1. @load ./bro_pdns

  2. redef PDNS::uri = "mysql://root:password@localhost/pdns";
复制代码

  其中 password 要改成数据库的密码。然后,我们需要运行  `broctl deploy`  重启整个系统,并且把新的脚本导入到 Bro  。 设置下 HTTP API ,这样的话,你就可以直接调用 API 来获取 domain 和 IP
  1. BRO_PDNS_DB=mysql://root:pass@localhost/pdns/nsm/share/bro/

  2. site/bro-pdns/bro_pdns.py serve
复制代码

  好了,配置好后,我们就可以正式开始使用它了。你想查询一个站点的信息,你可以向 api 传递你要查询的域名,就能查到结果了:
  1. > curl http://localhost:8081/dns/www.youtube.com
复制代码

  很显然,用任何你想要查询的 IP 或者域名替换掉 www.youtube.com ,就可以了
2.png

  但是这些结果是很乱的,因为他是用 json 格式的,我们可以用 python 写一个脚本来处理下,让结果更漂亮些,下面的脚本就是我们写的处理脚本:
  1. #!/usr/bin/python

  2. import requests

  3. import json

  4. import sys

  5. indicator = sys.argv[1]

  6. url = "http://localhost:8081/dns/"

  7. r = requests.get(url+indicator)

  8. j = json.loads(r.text)

  9. print "+"+"-"*24+"+"+"-"*24+"+"+"-"*8+"+"+"-"*7+"+"+"-"*30+"+"

  10. print "|"+" "*7+"First Seen"+" "*7+"|"+" "*7+"Last Seen"+" "*8+ \

  11. "|"+" "*2+"Type"+" "*2+"|"+" "*2+"TTL"+" "*2+"|"+" "*12+"Answer"+" "*12+"|"

  12. print "+"+"-"*24+"+"+"-"*24+"+"+"-"*8+"+"+"-"*7+"+"+"-"*30+"+"

  13. for record in j['records']:

  14. print "  ",record['first'],"\t   ",record['last'],"     ",\

  15. record['type'],"      ",record['ttl'],"   ",record['answer']
复制代码

  下面是我们运行的结果:
2.png

相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部