简介
最受欢迎的安全信息交换(SIE)通道之一是通道212,NOD(“新观察域”)。该通道显示参与主机站点上的传感器以前从未看到过的域。注意,NOD不是一个基于“区域文件”(或基于“CZDS”)的解决方案——我们关注的是实际部署和使用的域,而不仅仅是已经注册的域。
有许多可能访问Ch212流量的不同方法,包括:
- 直接通过nmsgtool使用在SIE的租用刀片服务器
- 通过加密的网络隧道(又名“SIE远程访问”或“sratunnel”)使用nmsgtool
- 使用SIE Batch,从半天的流量缓冲区下载最近看到的流量
- 使用IXFR (incremental zone transfer)下载DNS RPZ格式的Ch212流量
- 通过rsync下载Ch212的rbldnsdb格式的流量
- 经由公共(但收费有限)区域。
不过,今天我们将重点介绍如何使用AXAMD从RESTFUL API端点读取Ch212流量。
作为参考,下面是AXAMD的意思:
AXA =高级交换访问-交换部分指的是SIE,安全信息交换
中间件守护程序
高级交换访问中间件守护进程
AXAMD包括命令行接口客户端和Python3绑定。我们将向您展示如何使用这两种方法。
安装AXAMD
让我们从创建一个Python3虚拟环境开始,在这里我们可以进行AXAMD的安装:
$ /usr/local/bin/python3 -m venv ~/my-venv $ source ~/my-venv/bin/activate
在虚拟环境中工作时,我们的正常$提示符将以虚拟环境的名称作为前缀:
(my-venv)$ python3 -V Python 3.10.6
如果希望经常使用该虚拟环境,可能需要将activate命令添加到启动点文件中。
现在我们准备克隆我们想要构建的AXAMD存储库:
(my-venv) $ git克隆https://github.com/farsightsec/axamd_client.git (my-venv) $ CD axamd_client
安装axamd
只需要一个安装命令-一旦所有必备库都已安装。在我们的例子中,我们需要安装Option_merge, jsonschema, pyyaml和pyflakes:
(my-venv) $ pip3 install option_merge (my-venv) $ pip3 install jsonschema (my-venv) $ pip3 install pyyaml (my-venv) $ pip3 install pyflakes
然后我们就准备好安装了axamd_client:
(my-venv) $ python3 setup.py install .py
对订阅通道的访问是通过API密钥控制的。使用vi(或您喜欢的编辑器)创建文件~ / .axamd-client.conf
(注意文件名其余部分前面的波浪号斜线点!)
该文件需要以下两行代码:
服务器:https://axamd.sie-remote.net apikey: put your-actual- sie-remote - access - apikey -here
请注意,您的SIE远程访问API密钥与您可能拥有的DNSDB API密钥不相同!
保存文件后,确保你是唯一能够读取它的人:
(my-venv) $ chmod go-rwx ~/.axamd-client.conf
运行AXAMD单元测试
现在可以运行提供的单元测试了。
如果您正在运行Python3的当前版本,您可能需要做一个小调整。在我们成功地运行全套AXAMD单元测试之前,~ / my-venv / lib / python3.10 /网站/ option_merge / merge.py
需要更新以便
从集合导入映射
就变成:
从集合.abc导入映射
完成此操作后,我们就可以成功地从~ / axamd_client
目录:
(my-venv)美元python3 setup . py测试(群输出省略 ] ---------------------------------------------------------------------- 跑64测试在0.245 s OK
尝试使用axamd_client CLI客户端
您现在安装的部分是axamd_client命令行接口客户端。这可能是一些人进行与axamd相关的工作所需要的全部内容。输入以下命令可以查看命令行摘要:
(my-venv)美元axamd_client - h
现在让我们试着用axamd_client
确认我们可以进入212频道
(my-venv)美元axamd_client——list-channels[…[…]10.32.212.255/8430[…]
如果您没有看到ch212,请联系您的DomainTools帐户执行人员,以确保您订阅了该频道。
现在让我们实际抓取一些SIE NOD流量!
如果我们不想axamd_client
为了“永远运行”,我们可以要求收集特定数量的观察结果(例如,- 1000号
)或指定一段时间(例如,——持续时间15秒
).
让我们试着收集15秒的NOD观察结果,将它们写入临时文件temp.jsonl
(my-venv)美元Axamd_client——duration 15s——channel 212——watches ch=212 > temp.jsonl
在我们的测试运行中,我们在15秒内得到了40个观察结果;你的测试结果可能会更大或更小:
(my-venv)美元wc - l temp.jsonl40 temp.jsonl
有用提示:在指定时间持续时间时,您可以方便地使用hh: mm: ss或# w h d # # # #年代
格式。
看看我们的一些结果与jq
收集了一些数据后,我们现在准备仔细研究它。该输出是JSON行格式(https://jsonlines.org/),可以很容易地用“肉眼”阅读,但我们仍然使用jq (https://stedolan.github.io/jq/)来“漂亮地打印”我们的观察结果:
(my-venv)美元金桥”。< temp.jsonl |更多{"tag": 1, "op": "WATCH HIT", "channel": "ch212", "vname": "SIE", "mname": "newdomain", "nmsg": {"time": " 22-08-02 19:35:04.643621570", "vname": "SIE", "mname": "newdomain", "source": "a1ba02cf", "message": {"domain": "sellmypennsylvaniahomefast.com.", "time_seen": " 22-08-02 19:34:45", "bailiwick": "com.", "rrname": "sellmypennsylvaniahomefast.com.", "rrclass": "IN", "rrtype": "NS", "rdata":[" dns1.registrar-servers.com。”、“dns2.registrar-servers.com”。, "keys": [], "new_rr": []}}} [etc]
注意,在NOD中新观察到的条目可能从可怕的到恶意的。我们不会“defang”您从AXAMD收到的输出,所以在调查任何您看到报告的新观察域时要谨慎——许多域可以,但有些可能是有风险的。
虽然我们使用jq只是为了提高JSON Lines输出的可读性,但它可以做更多的事情。例如,如果你只想从你的输出中得到一个域的原始列表,jq可以帮助你:
(my-venv)美元金桥.nmsg.message - r。域的< temp.jsonl
“我在输出中定期看到的这些会计信息是什么?”
大多数AXAMD输出通常都是这样“看打”
如上图所示的条目,但您也可能定期看到“会计”
报告摘要统计信息。示例如下:
{"tag":"*","op":"OK","orig_op":"ACCOUNTING","str":"total-filtered=29 total-missed=0 total-collected=0 total-sent=29 total-ratelimited=0 total-congested=0"}
AXAMD将很容易跟上相对较低带宽的SIE通道,如Ch212,所以这些会计消息不会特别令人兴奋或信息丰富。你可以控制两者之间的间隔会计
方法发出的项axamd_client——报告的时间间隔
选项(包括将该间隔设置为零以完全关闭它们)。
“但是我想把AXAMD直接集成到我自己的Python代码中!”我该怎么做呢?”
下面是一些示例代码,其中一小块特定于axamd的代码以粗体显示。这两个AXAMD调用非常简单,其余的代码只是处理所需的导入、处理CTRL-C中断的几行“锅炉板”代码以及从配置文件获取API密钥和服务器名称的两个正则表达式。
# !/usr/bin/env python3 # pylint: disable=C0114 import sys import re import json import signal from pathlib import axamd的路径。# pylint: disable=E0401 # handle CTRL-C clear def handler(mysig, myframe): # pylint: disable=W0613,C0116 sys.exit(") signal.signal(")SIGINT, handler) #获取SIE远程访问API密钥和AXAMD服务器my_cfg_file = str(Path.home()) + "/. AXAMD -client.conf" with open(my_cfg_file, 'r', encoding='utf8') as mycfg: contents = mycfg.read() mypat1 = re.compile('apikey: (.*)') apikey = mypat1.findall(contents)[0] mypat2 = re.compile('server: (.*)') server = mypat2.findall(contents)[0]#读取Ch212并打印出c.sra中line的JSON Lines格式结果(channels=[212], watches=['ch=212']): data = JSON .loads(line) print(data)
假设代码在一个名为sample_run.py
,一个示例运行如下:
(my-venv)美元。/ sample_run.py{'tag': 1, 'op': 'WATCH HIT', 'channel': 'ch212', 'vname': 'SIE', 'mname': 'newdomain', 'nmsg': {'time': ' 22-08-03 00:49:46.182181816', 'vname': 'SIE', 'mname': 'newdomain', 'source': 'a1ba02cf', 'message': {'domain': 'liftedandloweredgolfcarts.com ', 'time_seen': ' 22-08-03 00:48:09', 'bailiwick': 'com。', 'rrname': 'liftedandloweredgolfcarts.com.', 'rrclass': 'IN', 'rrtype': 'NS', 'rdata': ['ns10.wixdns.net.', 'ns11.wixdns.net.'], 'keys': [], 'new_rr': []}}} [etc] [hit CTRL-C kill streaming session]
结论
我们希望您喜欢学习如何获取、构建和使用AXAMD从NOD (SIE频道212)收集数据。
如果您想与DomainTools交流以订阅NOD和AXAMD,请与我们联系。