python 检查域名是否可以访问_利用Python实现DGA域名检测
前段时间爆发的利用永恒之蓝进行勒索及xshell等事件,各大厂家都站在不同的角度分析了相应的事件及程序,对于对逆向不了解看着的确很吃力。上段时间看到宫总及袁哥都在讲DNS对于分析这种攻击的可行性。
永恒之蓝和xshell事件有如下的特征:
1. 永恒之蓝中黑客预留了一个没有注册的域名,用于防护事件不受控制时,启用该域名可以抑制事件的扩大
2. Xshell事件中黑客通过DNS的txt字段进行传输数据与指令
两起事件都有一个共同特征就是利用DNS来进行事件的抑制与数据与指令的下发,这样的话,针对这种类型的黑客攻击与安全事件,我们可以站在底层网络来分析这事件。
利用永恒之蓝进行勒索事件中黑客预留的域名是DGA域名,在某些条件下探测该DGA域名是否可以正常解析,若解析成功则不进行加密,若解析成功则不加密。
DGA一般都是通过硬编码写入到程序中,在没有能力对其逆向的情况下,我们可以分析网络流量来分析DNS请求的DGA域名。这样就需要了解哪些域名是DGA域名,这里面有多种方法与思路:
1. 利用开放平台里的DGA库,目前个人所了解的国内360在开放相应的数据,这个也是个人首推的选择
2. DGA域名有个特征,很多DGA并没有注册,黑客前期会生成大量的DGA域名,但是在某些情况下,如传输数据与命令或抑制事件时,会选择性的注册少量域名,这样的话可以对DNS解析不成功的域名进行记录,并将这些域名进行进行,若其没有注册,且域名很随机可以判断为疑似DGA域名。这里面有大牛介绍过 http://www.freebuf.com/geek/144459.html
3. 深度学习检测DGA域名,可参考http://www.freebuf.com/articles/network/139697.html
由于上面的方法二和方法三都有人实现了,这里面我主要介绍方法一的实现。这个思路是这样:通过监测网络流量(有条件的同学可以在大网环境下测试下),分析DNS的请求,一旦请求的DNS和DGA库中的匹配,输出相应的IP、端口,当然后期也可以做相应的统计与告警。
DGA库网上找了有一些,个人了解的国内推荐360的开放DGA的数据,100W+的DGA数据,并且每天都有更新。有需要的同学可直接下载,http://data.netlab.360.com/feeds/dga/dga.txt
DNS检测DGA实现的代码如下:
在代码实现过程中,本个DGA正常解析成功的IP地址也记录了下来,DGA都有问题,那么解析的IP基本上也不正常。在大网环境下可以记录下相应的IP地址,在做Passive DNS时可以利用这些数据完善相应的库。
考虑到DGA的文件每天都会更新,可以进行定时下载该文件。
测试后,效果如下:
这样的话就实现了监测异常DGA记录,内网环境下可以分析机器被黑或者中马,大网环境下可以通过DNS侧重了解区域安全态势。
完整实现的代码如下:
#coding:utf-8
import time
from scapy.all import *
from requests import *
conf.iface='Intel(R) Dual Band Wireless-AC 8260'
list=[]
dgalist = open('dga.txt','r')
dgalist = (dgalist.readlines())[18:]
for dga in dgalist :
list.append(dga.split('\t')[1])
data = set(list)
#Capture and Filter DGA
def capture(packet):
if packet:
i =0
for p in packet:
src = p[i][IP].src
dst = p[i][IP].dst
sport = p[i][UDP].sport
dport = p[i][UDP].dport
qr = str(p[i][DNS].qr)
rcode = str(p[i][DNS].rcode)
if '0' in qr:
qr = 'Query'
qname = p[i][DNS].qd.qname
if type(qname) == bytes:
qname = (qname.decode('utf-8'))[:-1]
if qname in data:
print("[*] Found DGA Request:-->",src,sport,qr,qname)
if '1' in qr:
if '0' in rcode:
for j in range(10):
try:
qr = 'Response'
rrname = p[j][DNS].an[j].rrname
rdata = p[j][DNS].an[j].rdata
if type(rrname) == bytes:
rrname = (rrname.decode('utf-8'))[:-1]
if type(rdata) == bytes:
rdata = (rdata.decode('utf-8'))[:-1]
if rrname in data:
print ("[*] Found DGA Response:-->",src,dst,qr,rrname,rdata,"\n")
except Exception as e:
pass
i = i + 1
#update dgafile
def dgafileupdate():
url = 'http://data.netlab.360.com/feeds/dga/dga.txt'
dgafile = get(url)
with open('./dga.txt','w') as f:
f.write(dgafile.text)
print('Download DGAFile Finished')
if __name__ == '__main__':
sniff(prn=capture,filter='udp port 53')
while True:
dgafileupdate()
time.sleep(86400)
本文原创作者:feiniao,本文属于 FreeBuf 原创奖励计划,未经许可禁止转载
python 检查域名是否可以访问_利用Python实现DGA域名检测相关推荐
- python 替换array中的值_利用Python提取视频中的字幕(文字识别)
我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...
- python 16bit转8bit的工具_利用python读取YUV文件 转RGB 8bit/10bit通用
注:本文所指的YUV均为YUV420中的I420格式(最常见的一种),其他格式不能用以下的代码. 位深为8bit时,每个像素占用1字节,对应文件指针的fp.read(1): 位深为10bit时,每个像 ...
- python数据库操作批量sql执行_利用Python如何批量修改数据库执行Sql文件
利用Python如何批量修改数据库执行Sql文件 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: 利用Python如何批量修改数据库执行Sql文件.txt ] (友 ...
- python爬取外文文献翻译_利用Python爬取翻译网站的翻译功能
现在我想分享一个利用Python技术,爬取一个翻译网站的翻译功能的小代码. 首先隆重介绍我们今天将要爬取的网站:http://fy.iciba.com/ 咱们用Python中的urllib模块的功能进 ...
- python绘制简单城市剪影图_利用Python的folium包绘制城市道路图的实现示例
写在前面 很长一段时间内,我都在研究在线地图的开发者文档,百度地图和高德地图的开发者中心提供了丰富的在线地图服务,虽然有一定的权限限制,但不得不说,还是给我的科研工作提供了特别方便的工具,在博客前面我 ...
- python获取window共享目录列表_利用Python获取DICOM RTstructure勾画列表
在<利用Python打开DICOM CT文件>一文中,我们利用pydicom.dcmread()读取了CT图像.本文中我们将修改load_scan()函数来读取RTstructure文件并 ...
- python处理word或者pdf文件_利用python程序生成word和PDF文档的方法
一.程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用fr ...
- python 钉钉机器人发送图片_利用Python自动发送钉钉数据消息
现在大部分公司都使用钉钉作为内部的主要沟通工具,钉钉消息基本都上都能快速有效的被阅读,打开率会比邮件高上不少.所以准备使用钉钉来播报平台每日的成交额,并附上一些鼓励的话和图片.起到一个激励团队的作用 ...
- python头像右上角加红色数字_利用python实现微信头像加红色数字功能
通过Python实现将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果 实现过程: 准备两张图片如下: 使用PIL图像处理库,导入moudle ...
- python画二维温度云图_利用python画出词云图
本文将介绍如何利用python中相应的模块画出词云图.首先给出效果图: 其中词云图中的词汇是对手机短信中的垃圾短信的统计,字体越大表示在垃圾短信中出现的频次越高.下面给出具体的步骤. 读取" ...
最新文章
- Linux上实现ssh免密码登陆远程服务器
- simple css 汉化,Simple CSS(CSS文档生成器)
- poj 2763 Housewife Wind
- python数据科学导论 中南_Python数据科学导论
- Android Button字母自动全部大写的问题
- 原生 js前端路由系统实现3之代码 构建工具 和 querystring功能
- 数据类型转换——Python
- HTTP权威指南阅读记录 - 第一章
- python图像exif信息复制
- 微服务技术图片资源汇总
- zookeeper使用问题汇总
- nodejs 服务端 音频拼接 合成 实现
- 获取稳定的西刺代理IP
- python PIL图片转PDF
- MQ消息队列常用命令
- 使用 TimeGAN 建模和生成时间序列数据
- 【推荐系统】逻辑回归(LR)在推荐系统中的使用
- javaScript中this以及window对象和window对象的name属性
- html静态测试网页,Html静态网页测试-20210531213110.pptx-原创力文档
- Android4.4添加系统服务(aidl接口服务)