12 14

致敬经典,golang版的dsinff-webspy

xsec webspy

相传很久以前,有一套经典的sniff工具集叫dsniff,其中有一个经典的webspy,可以在本地浏览器中实时地展示被嗅探的服务器所发送的http请求。

为了致敬经典,我也从前2天写的那个恶意流量分析程序 xsec-traffic中抽离出一些代码,山寨了这个功能,以小无相功强行催动这套从天而降的掌法。

项目地址: https://github.com/netxfly/xsec-webspy

用法

./xsec_webspy
NAME:
   xsec webspy - xsec webspy, Support local and arp spoof modes

USAGE:
   xsec_webspy [global options] command [command options] [arguments...]

VERSION:
   20171214

AUTHOR(S):
   netxfly <x@xsec.io>

COMMANDS:
     start    sniff local server
     help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --mode value, -m value     webspy running mode, local or arp (default: "local")
   --device value, -i value   device name (default: "eth0")
   --host value, -H value     web server listen address (default: "127.0.0.1")
   --port value, -p value     web server listen address (default: 4000)
   --debug, -d                debug mode
   --target value, -t value   target ip address
   --gateway value, -g value  gateway ip address
   --filter value, -f value   setting filters
   --length value, -l value   setting snapshot Length (default: 1024)
   --help, -h                 show help
   --version, -v              print the version

支持sniff本地和以arp spoof的方式sniff同一lan中其他主机的http请求,并打开一个web server实时显示数据请求内容。

在启动前需要安装libpcap库并将内核参数设为允许转发,以下为3种OS的安装、设置方法:

# Fedora
sudo dnf install -y libpcap-devel
# Debian/Ubuntu
sudo apt-get install -y libpcap-dev
# OSX
brew install libpcap

# centos
yum install libpcap
# OSX
sudo sysctl net.inet.ip.forwarding=1
# FreeBSD
sudo sysctl -w net.inet.ip.forwarding=1
# Linux
sudo sysctl -w net.ipv4.ip_forward=1

需要指定采集的目标与网关,其中采集的目标的语法与nmap的一致,支持以下几种写法:

10.0.0.1
10.0.0.0/24
10.0.0.*
10.0.0.1-10
10.0.0.1, 10.0.0.5-10, 192.168.1.*, 192.168.10.0/24

命令语法分别如下:

  1. sudo ./xsec_webspy start -m local -i en0
  2. sudo ./xsec_webspy start -m arp -i en0 -t 192.168.100.100 -g 192.168.100.1

relases页面有编译好的二进制版本。

截图

  1. 以监听本地模式运行

  2. 以arp spoof模式运行,由于在公司,不方便测试,等下班回家补上。

12 11

简易恶意流量分析程序

概述

xsec-traffic为一款轻量级的恶意流量分析程序,包括传感器sensor和服务端server 2个组件。

sensor

sensor负责采集流量,然后发到server端,由server来检测是否为恶意流量。

  1. sensor支持采集TCP和UDP的五元组信息
  2. 支持采集http请求信息
  3. 支持采集同一局域网中其他机器的以上信息

Server

server端的功能为接收各sensor采集到的流程并判断是否为恶意流量,其中:

  1. IP五元组信息是通过查询恶意IP库来判断的
  2. http请求数据的检测还在开发中(暂时会把所有取到的请求信息保存起来,理论上可支持检测所有来自WEB端的攻击类型,如注入、xss等)

使用说明

Server

server需要mongodb的支持,在启动前需要事先准备一个有读写权限的mongodb账户,然后修改当前目录下的配置文件conf/app.ini,样例如下:

HTTP_HOST = 108.61.223.105
HTTP_PORT = 4433

DEBUG_MODE = TRUE
SECRET_KEY = xsec_secret_key

[EVIL-IPS]
API_URL = "http://www.xsec.io:8000"

[database]
DB_TYPE = mongodb
DB_HOST = 127.0.0.1
DB_PORT = 27017
DB_USER = xsec-traffic
DB_PASS = 7160c452342340787fasdfa5b0a9fe0
DB_NAME = xsec-traffic
  1. HTTP_HOST和HTTP_PORT表示server端监听的地址及端口
  2. DEBUG_MODE表示以debug模式运行
  3. SECRET_KEY为sensor与server通讯用的密钥
  4. EVIL-IPS部分为恶意IP库的地址
  5. database部分为mongodb的配置

启动命令如下:

root@xsec:/data/golang/src/xsec-traffic/server# ./server 
[0000]  INFO xsec traffic server: DB Type: mongodb, Connect err status: <nil>
NAME:
   xsec traffic server - xsec traffic server

USAGE:
   server [global options] command [command options] [arguments...]

VERSION:
   20171210

AUTHOR:
   netxfly <x@xsec.io>

COMMANDS:
     serve    startup xsec traffic server
     help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug, -d               debug mode
   --server value, -s value  http server address
   --port value, -p value    http port (default: 1024)
   --help, -h                show help
   --version, -v             print the version
root@xsec:/data/golang/src/xsec-traffic/server# ./server serve
[0000]  INFO xsec traffic server: DB Type: mongodb, Connect err status: <nil>
[0000]  INFO xsec traffic server: run server on 108.61.223.105:4433
  1. serve参数表示直接启动server服务器。

sensor

sensor端也支持配置,修改当前目前下的conf/app.ini即可,详细的配置项如下:

; Sensor global config
DEVICE_NAME = en0
DEBUG_MODE = true
FILTER_RULE = tcp udp

[server]
API_URL = http://108.61.223.105:4433
API_KEY = xsec_secret_key
  1. DEVICE_NAME表示需要采集流量的网卡名
  2. DEBUG_MODE为Debug模式,正式使用时可关掉
  3. FILTER_RULE为流量抓取规则,与wireshark的规则一致

sensor的命令行如下:

$ ./xsec_sensor
[0000]  INFO xsec traffic sensor: Device name:[en0], ip addr:[192.168.31.204], Debug mode:[true]
NAME:
   xsec traffic sensor - xsec traffic sensor, Support normal and arp spoof modes

USAGE:
   xsec_sensor [global options] command [command options] [arguments...]

VERSION:
   20171210

AUTHOR(S):
   netxfly <x@xsec.io>

COMMANDS:
     start    startup xsec traffic sensor
     arp      startup arp spoof mode
     help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug, -d                debug mode
   --filter value, -f value   setting filters
   --length value, -l value   setting snapshot Length (default: 1024)
   --target value, -t value   target ip address
   --gateway value, -g value  gateway ip address
   --help, -h                 show help
   --version, -v              print the version

  1. start 表示直接只采集本地的流量
  2. arp模式为arpspoof模式,可以采集同一局域网下的其他机器的流量,详细的命令行如下:

    sudo ./xsec_sensor arp -t 192.168.31.215 -g 192.168.31.1
    

    在启动前需要安装libpcap库并将内核参数设为允许转发,以下为3种OS的安装、设置方法: ```

    OSX

    sudo sysctl net.inet.ip.forwarding=1

FreeBSD

sudo sysctl -w net.inet.ip.forwarding=1

Linux

sudo sysctl -w net.ipv4.ip_forward=1

Fedora

sudo dnf install -y libpcap-devel

Debian/Ubuntu

sudo apt-get install -y libpcap-dev

OSX

brew install libpcap

FreeBSD

sudo pkg install libpcap

需要指定采集的目标与网关,其中采集的目标的语法与nmap的一致,支持以下几种写法:

10.0.0.1 10.0.0.0/24 10.0.0.* 10.0.0.1-10 10.0.0.1, 10.0.0.5-10, 192.168.1.*, 192.168.10.0/24 ```

实战演练

  • 启动server端

  • 以正常模式启动sensor端

启动后可以看到我本地电脑的有道云音乐正在对外发包。

  • 在小米路由器中查到我Mix2手机的IP地址如下:

  • 将我的Mix2手机手工加到恶意IP库中

  • 以Arp模式启动,用电脑采集同一lan下Mix2手机的流量

  • 可以通过server的简易后台看到检测结果:

  • 以下为http 全部的请求记录,等检测功能开发完后会改为只记录疑似攻击的请求。

参考资料

  1. https://github.com/google/gopacket/
  2. https://github.com/malfunkt/arpfox
  3. http://www.devdungeon.com/content/packet-capture-injection-and-analysis-gopacket
9 26

xsec ip database

xsec ip database

xsec ip database为一个恶意IP和域名库(Malicious ip database),它获取恶意IP和域名的方式有以下几种:

  1. 通过爬虫定期拉取网络中公开的恶意ip库(可能过增加新爬虫的方式订阅新的IP库)
  2. 支持与自有的其他安全产品联动(HIDS、WAF、蜜罐、防火墙等产品),实时更新IP库

功能说明

  1. 启动后会定期更新ip库,默认为1小时更新一次
  2. 支持将恶意ip信息写入postgres, sqlite, mysql, mongodb数据库
  3. 支持恶意ip信息导出、导入
  4. 提供了恶意ip和dns检测以及与其他安全产品联动的接口

使用方法

$ ./main 
[xorm] [info]  2017/09/26 13:22:58.220496 PING DATABASE mysql
NAME:
   xsec Malicious ip database - A Malicious ip database

USAGE:
   main [global options] command [command options] [arguments...]
   
VERSION:
   20170925
   
AUTHOR(S):
   netxfly <x@xsec.io> 
   
COMMANDS:
     serve    startup evil ips
     dump     Fetch all evil ips info and save to file
     load     load ips from file
     help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --help, -h     show help
   --version, -v  print the version


  • serve会启动程序,抓取完恶意ip和域名信息后会启动web接口
  • dump,将恶意ip和域名导出到当前目录,文件名分别为ips和dns
  • load,将ips和dns中的信息导入内存并启动WEB接口

运行截图

  • 直接启动程序

  • 导出恶意ip信息到当前目录中,使用场景为部分URL是被墙了的,需要先在国外的VPS中导出文件拖回国内使用

  • 导入恶意ip信息并启动WEB接口

  • 恶意IP检测及实时提交测试

  • 恶意域名检测及提交测试

其中测试与其他安全产品联动的测试代码的内容如下:


package routers_test

import (
    "testing"
    "time"
    "net/http"
    "net/url"

    "xsec-evil-ips/util"
)

func TestUpdateIp(t *testing.T) {
    u := "http://127.0.0.1:8000/api/ip/"
    timestamp := time.Now().Format("2006-01-02 15:04:05")
    k := "aadcbfbc837757a9a24ac96cf9171c8b"
    ip := "212.129.58.111"
    pro := "xsec test pro"

    t.Log(http.PostForm(u, url.Values{"timestamp": {timestamp}, "secureKey": {util.MakeSign(timestamp, k)}, "ip": {ip}, "pro": {pro}}))
}

func TestUpdateDomain(t *testing.T) {
    u := "http://127.0.0.1:8000/api/domain/"
    timestamp := time.Now().Format("2006-01-02 15:04:05")
    k := "aadcbfbc837757a9a24ac96cf9171c8b"
    domain := "www.hosting2balooonba.com"
    pro := "xsec test pro"

    t.Log(http.PostForm(u, url.Values{"timestamp": {timestamp}, "secureKey": {util.MakeSign(timestamp, k)}, "domain": {domain}, "pro": {pro}}))
}

提交的参数需要有以下几个参数,而且安全产品的key必须与恶意IP库的相同,否则不会接受提交的恶意ip或域名信息。

  • timestamp
  • secureKey
  • ip/domain,表示恶意ip或域名
  • pro,表示需要调动的安全产品名称

Demo

  1. 恶意IP检测,http://xsec.io:8000/api/ip/212.129.58.111
  2. 恶意域名检测,http://xsec.io:8000/api/domain/www.hosting2balooonba.com

项目地址:https://github.com/netxfly/xsec-ip-database

8 15

DNS代理服务器,可以记录log到数据库中

xsec-dns-server

xsec dns proxy server为一个DNS代理服务器,可以将DNS请求代理到后端的DNS服务器中,在代理的过程中会将dns log写入到数据库中。

主要特性如下:

  1. 代理DNS请求并记录请求数据
  2. 后端支持 sqlite、postgres、mysql和mongodb四种数据库

使用说明:

$ ./xsec-dns-server 
[xorm] [info]  2017/08/15 11:01:24.497380 PING DATABASE mysql
NAME:
   xsec dns proxy server - xsec dns proxy server

USAGE:
   xsec-dns-server [global options] command [command options] [arguments...]
   
VERSION:
   0.1
   
COMMANDS:
     serve    dns proxy Server
     web      web server
     help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --help, -h     show help
   --version, -v  print the version

  • serve参数表示启动一个dns代理服务器
  • web 参数表示启动一个简单WEB服务器,用来查看dns日志。

运行截图

项目地址:https://github.com/netxfly/xsec-ip-database

更新记录

2017/9/28

  • 恶意域名的种子中新增了360 netlab提供的DGA,使得域名记录直接上到了百万级。

![](https://docs.xsec.io/images/evil_ips/netlab_360.png)

  • 因为data.netlab.360.com在国内,而且体积在70M以上,所以从vps中的拉取速度很慢,建议下载到本地,将feeds/netlab360.go中的URL改为本地地址。
url := "http://data.netlab.360.com/feeds/dga/dga.txt"
// url := "http://127.0.0.1:8000/dga.txt"
  • 如果vps内存不足,会在将恶意IP和域名导出到文件中时报错,解决方案为增加swap分区。
Prev Next