python数据库开发 dga_利用Python实现DGA域名检测
*本文原创作者:feiniao,本文属于 FreeBuf 原创奖励计划,未经许可禁止转载。前段时间爆发的利用永恒之蓝进行勒索及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
由于上面的方法二和方法三都有人实现了,这里面我主要介绍方法一的实现。这个思路是这样:通过监测网络流量(有条件的同学可以在大网环境下测试下),分析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数据库开发 dga_利用Python实现DGA域名检测相关推荐
- python数据库开发 dga_图/Louvain/DGA乱谈
安全领域与图计算 安全领域噱头不断,前两年不少厂商大吹AI,如今"图计算"一词大有再掀风浪之势. 首先"图"和"计算"应该分开看." ...
- python数据库开发 dga_使用深度学习检测DGA(域名生成算法)——LSTM的输入数据本质上还是词袋模型...
from:http://www.freebuf.com/articles/network/139697.html DGA(域名生成算法)是一种利用随机字符来生成C&C域名,从而逃避域名黑名单检 ...
- Python服务器开发一:python基础
Python服务器开发一:python基础 Python(蟒蛇)是一种动态解释型的编程语言.Python可以在Windows.UNIX.MAC等多种操作系统上使用,也可以在Java..NET开发平台上 ...
- 用python做数据分析pdf_利用python进行数据分析pdf
利用python进行数据分析pdf微盘下载!<利用python进行数据分析>利用Python实现数据密集型应用由浅入深帮助读者解决数据分析问题~适合刚刚接触Python的分析人员以及刚刚接 ...
- Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名、合并两个不同路径下图片文件名等目录/路径案例、正确加载图片路径)之详细攻略
Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名.合并两个不同路径下图片文件名等目录/路径案例.正确加载图片路径)之详细攻略 目录 利用python ...
- Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)—命令提示符cmd的几种方法
Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)-命令提示符cmd的几种方法 目录 利用python语言实现调用内部命令-命令提示符cmd的几种方法 T1. ...
- Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件
Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 目录 利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 1.先下载ff ...
- Python的IDE:基于Eclipse/MyEclipse软件的PyDev插件配置python的开发环境(不同python项目加载不同版本的python)—从而实现Python编程图文教程之详细攻略
Python的IDE:基于Eclipse/MyEclipse软件的PyDev插件配置python的开发环境(不同python项目加载不同版本的python)-从而实现Python编程图文教程之详细攻略 ...
- python 环境 开发_设置Python开发环境
python 环境 开发 Setting up Python is usually simple, but there are some places where newcomers (and exp ...
最新文章
- photoshop 图片转 pdf
- datagrid中巧用loadFilter对数据整形
- apple tv 开发_如何防止Apple TV进入睡眠状态
- 佳鑫诺计算机模拟卷答案,微机原理练习册答案佳鑫诺).docx
- 629. K个逆序对数组
- 转载︱案例 基于贪心算法的特征选择
- mysql5.6 table cache_MySQL 5.6下table_open_cache参数优化合理配置详解
- CUTE FTP 控制连接已关闭
- 马云透露:未来10大行业即将消失!
- 顺网服务器ip修改工具,一键更换IP工具,修改IP地址 — 活动撸羊毛必备
- 基于python的web框架——Flask 学习笔记
- 淘宝客服外包哪家最好
- 把int型转成如66ccff这样的颜色16进制颜色代码
- SpringCloud微服务架构学习
- 人工智能在量化领域应用相关论文整理
- Win10下系统自带的各种监测工具
- javaScript 实现表格table分页
- 计算机类英文自我介绍,优秀的计算机专业英文自我介绍
- 【代码练习4】利用多线程处理和尚吃馒头问题
- HTML 做一个求职简历表
热门文章
- OTT广告价值「锋芒毕露」,谁能蚕食更大市场?
- Python爬取张家界风景美图
- 51妹子图客户端,开放源代码啦,欢迎拍砖
- 计算机中的进制 进制转换 位运算符号
- 尚驰SHANGCHI洗车店兰州汽车美容店私人定制洗车服务 杜绝难看的洗车纹!
- 关于错误:[Error] expected primary-expression before ‘int‘
- 计算机系统基础 - Lab1
- 互联网35岁会被清退,这可能是2022年最大的谎言
- 多目标跟踪算法JDE在 UA-DETRAC数据集上训练
- java根据出生日期自动计算年龄(工具类)