GODNSLOG

DNSLOG 工具
授权协议 Apache
开发语言 Google Go
所属分类 程序开发、 其他开发相关
软件类型 开源软件
地区 国产
投 递 者 管峻
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

这是一个DNSLOG 工具。

之前有一段工作是跟漏扫相关的,在开发漏扫时有DNSLOG这么一个需求,当时考虑到时间成本没有自己做。虽然现有市面上DNSLOG不少,我还是重复造了一个轮子, 有多个原因。现有的开源DNSLOG体验没有一些知名闭源的DNSLOG平台好,站在甲方的立场自建的服务总归是比使用公共服务好一些,毕竟没有多少人愿意把自己的漏洞情况让第三方知道。此外现有DNSLOG平台IP已经上了威胁情报名单,在不少环境这些IP直接就被干掉了,特别是在公有云环境下。所以甲方自建DNSLOG服务非常有必要。现有的开源DNSLOG python项目居多,也有个别golang的,在我看来安全开发的技术架构方向一定是微服务化、SaaS化,python程序封装成docker体积确实有点大。刚好最近看了一点vue,想写个东西练练手,就把这个事情捡起来。GODNSLOG前端是套了ant design vue pro,后端用golang开发。

功能特性 & 用法简介

  • 1. DNSLOG

每个用户分配一个唯一的三级域名,该域名或其子域名的所有解析记录均会被记录。
请求记录超过设置的最长时间会被自动清理,自动清理时间设置范围是1-48小时

dig `/sbin/ifconfig eth0|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`.ktqlujjpgc4j.godns.vip

系统生成域名为{$variable}.ktqlujjpgc4j.godns.vip,其中ktqlujjpgc4j是用户唯一shortId,{$variable}为用户自定义变量

  • 2. HTTPLOG

HTTPLOG也需要用到唯一分配的域名,HTTPLOG地址格式如下,所有访问以下地址的请求会被记录。
请求记录超过设置的最长时间会被自动清理,自动清理时间设置范围是1-48小时

curl http://ktqlujjpgc4j.godns.vip/log/`/sbin/ifconfig eth0|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`

除了只能用DNSLOG检测的情况,HTTPLOG都比DNSLOG好用一些,在内网环境中配合主动推送可以让检出更有效率,代码也相对简单一些。

  • 3. DNS Rebinding

这是河马安全团队的另一位成员提的需求。目前的策略是每次请求随机返回一个配置列表中的IP,后面再升级一些高级策略

注:一些本地DNS即时收到TTL=0的DNS也依然会缓存,比如说腾讯云会缓存1分钟

  • 4. 多用户

两级用户,内置用户为管理员,管理员可以新建、修改、删除普通用户。普通用户拥有除用户管理功能之外的所有功能

  • 5. 主动推送

这个功能是给内网部署时设计的,我们在检测是否记录时一般是用api查询的,这里需要有个等待机制。跟这种pull的方式对应的就是push方式,在配置/系统模块配置。主动推送比较适合在内网使用,在内网环境中HTTPLOG+主动推送

 

  • 6. 支持API调用

传统的pull api模式,客户端通过token+api的方式查询DNS/HTTP记录,这里我改进了一下,一般的DNSLOG平台token直接在URL中传递不是很安全,稍微改进了一下,用hash校验替代了token校验。GODNSLOG将支持精准查询和模糊查询两种方式

安装部署

docker一键部署,推荐http前面套个nginx可以套SSL证书

需求:一个域名、用户独立IP的主机.

1.修改域名DNS服务器,使用独立主机IP作为域名的DNS服务器

修改生效需要数小时到48小时,需要等全球DNS都刷新。修改完成之后所有的*.godnslog.com均会指向100.100.100.100

注:如果在内网环境中使用,域名也不是一定要注册的,在内网DNS中配置一个私有域名即可

2. 安装docker环境,并启动实例

curl -s https://get.docker.com/ | sudo sh
systemctl enable docker
systemctl start docker
docker pull sort/godnslog:v0.2.2
docker run -d --name=godnslog -p8080:8080 -p53:53/udp sort/godnslog:v0.2.1 -domain=godnslog.com -4 100.100.100.100

godnslog默认使用sqlite数据库,考虑到性能建议使用外部mysql.
命令行参数可以用以下命令查看

docker run --rm --it sort/godnslog:version-0.3.0 --help

注: 此处version-0.3.0为当前版本,后续可能会改动,请使用最新版本

mysql DSN格式: https://github.com/go-sql-driver/mysql/#dsn-data-source-name
sqlite DSN格式: https://github.com/mattn/go-sqlite3#dsn-examples

关于持久化,使用外部mysql时数据就是持久化的,sqlite要支持持久化需要通过docker -v参数将宿主机上的文件映射为sqlite数据库文件,否则重启docker后数据会丢失

3. 配置

3.1 安装nginx

yum install nginx
systemctl start nginx
systemctl enable nginx

3.2 配置并重启nginx

server {
    listen       80;
    server_name  www.godnslog.com *.godnslog.com;

    # Load configuration files for the default server block.
    access_log /var/log/nginx/www.godnslog.com.access.log;
    error_log /var/log/nginx/www.godnslog.com.error.log;

    proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host             $host;
    proxy_set_header X-Real-IP        $remote_addr;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

3.3 配置防火墙开放UDP:53,TCP:80端口

3.4 登录配置用户

内置管理员用户名为admin,密码为password,安装完成后请尽快修改管理员密码。
登录管理员帐户后可以在配置/用户中管理用户

演示网站

演示网站: https://www.godns.vip

测试账号:

  • test1/test123456

  • test2/test123456

  • test3/test123456

  • test4/test123456

  • test5/test123456

  • test6/test123456

  • test7/test123456

  • test8/test123456

  • test9/test123456

  • test10/test123456
    不支持多用户共用一个帐号,后登录会踢掉前面的登录的用户

注意: 演示网站仅提供演示功能,不要用在实际环境,随时可能重启升级!

结语

GODNSLOG设计实现很大程度借鉴了ceye.io,关于DNSLOG的技巧http://ceye.io/payloads页面有详细的描述,这里不再赘述。

 相关资料
  • 我正在Eclipse Neon中使用Hibernate工具(JBoss tools 4.4.0.Final)。现在,我想将数据库表反向工程为POJO对象和Hibernate映射文件。 我遵循了一些关于如何设置Eclipse来生成POJO对象的教程。在我运行配置之前,一切看起来都很好。什么都没发生,也没有抛出错误。有人能帮我吗?数据库是一个微软SQL服务器2014。 我的逆向工程配置文件看起来像:

  • 龙虎牛熊多头合约池 接口名称 long_pool 接口描述 龙虎牛熊多头合约池接口 请求参数 参数名 说明 举例 date 查询日期 2018-08-08 返回参数 参数名 类型 说明 symbol string 品种编码 code string 合约代号 示例代码 from akshare import pro_api pro = pro_api(token="在此处输入您的token,可以通过

  • 工具 客户端 客户端分为三种:完整客户端、轻量级客户端和在线客户端。 完整客户端:存储所有的交易历史记录,功能完备; 轻量级客户端:不保存交易副本,交易需要向别人查询; 在线客户端:通过网页模式来浏览第三方服务器提供的服务。 钱包 矿机 专门为“挖矿”设计的硬件,包括基于 GPU 和 ASIC 的芯片。 脚本 比特币交易支持一种比较简单的脚本语言(类 Forth 的栈脚本语言),可以写入 UTXO

  • 工具 以下的一些工具可以帮助你自动检查项目中的 Ruby 代码是否符合这份指南。 RuboCop [RuboCop][] 是一个基于本指南的 Ruby 代码风格检查工具。RuboCop 涵盖了本指南相当大的部分,其同时支持 MRI 1.9 和 MRI 2.0,且与 Emacs 整合良好。 RubyMine RubyMine 的代码检查部分基于本指南。

  • 10.7. 工具 本章剩下的部分将讨论Go语言工具箱的具体功能,包括如何下载、格式化、构建、测试和安装Go语言编写的程序。 Go语言的工具箱集合了一系列的功能的命令集。它可以看作是一个包管理器(类似于Linux中的apt和rpm工具),用于包的查询、计算包的依赖关系、从远程版本控制系统下载它们等任务。它也是一个构建系统,计算文件的依赖关系,然后调用编译器、汇编器和链接器构建程序,虽然它故意被设计成

  • vse命令行工具 yocode扩展生成器 范例

  • 提供各种支付需要的配置生成方法。 配置 <?php use EasyWeChat\Pay\Application; $config = [...]; $app = new Application($config); $utils = $app->getUtils(); 注意 生成支付 JS 配置 有四种发起支付的方式:WeixinJSBridge, JSSDK, 小程序支付, APP We

  • CoreOS 内置了 服务发现,容器管理 工具。 服务发现 CoreOS 的第一个重要组件就是使用 etcd 来实现的服务发现。在 CoreOS 中 etcd 默认以 rkt 容器方式运行。 etcd 使用方法请查看 etcd 章节。 容器管理 第二个组件就是 Docker,它用来运行你的代码和应用。CoreOS 内置 Docker,具体使用请参考本书其他章节。