*本文原创作者: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域名检测相关推荐

  1. python数据库开发 dga_图/Louvain/DGA乱谈

    安全领域与图计算 安全领域噱头不断,前两年不少厂商大吹AI,如今"图计算"一词大有再掀风浪之势. 首先"图"和"计算"应该分开看." ...

  2. python数据库开发 dga_使用深度学习检测DGA(域名生成算法)——LSTM的输入数据本质上还是词袋模型...

    from:http://www.freebuf.com/articles/network/139697.html DGA(域名生成算法)是一种利用随机字符来生成C&C域名,从而逃避域名黑名单检 ...

  3. Python服务器开发一:python基础

    Python服务器开发一:python基础 Python(蟒蛇)是一种动态解释型的编程语言.Python可以在Windows.UNIX.MAC等多种操作系统上使用,也可以在Java..NET开发平台上 ...

  4. 用python做数据分析pdf_利用python进行数据分析pdf

    利用python进行数据分析pdf微盘下载!<利用python进行数据分析>利用Python实现数据密集型应用由浅入深帮助读者解决数据分析问题~适合刚刚接触Python的分析人员以及刚刚接 ...

  5. Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名、合并两个不同路径下图片文件名等目录/路径案例、正确加载图片路径)之详细攻略

    Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名.合并两个不同路径下图片文件名等目录/路径案例.正确加载图片路径)之详细攻略 目录 利用python ...

  6. Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)—命令提示符cmd的几种方法

    Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)-命令提示符cmd的几种方法 目录 利用python语言实现调用内部命令-命令提示符cmd的几种方法 T1. ...

  7. Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件

    Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 目录 利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 1.先下载ff ...

  8. Python的IDE:基于Eclipse/MyEclipse软件的PyDev插件配置python的开发环境(不同python项目加载不同版本的python)—从而实现Python编程图文教程之详细攻略

    Python的IDE:基于Eclipse/MyEclipse软件的PyDev插件配置python的开发环境(不同python项目加载不同版本的python)-从而实现Python编程图文教程之详细攻略 ...

  9. python 环境 开发_设置Python开发环境

    python 环境 开发 Setting up Python is usually simple, but there are some places where newcomers (and exp ...

最新文章

  1. photoshop 图片转 pdf
  2. datagrid中巧用loadFilter对数据整形
  3. apple tv 开发_如何防止Apple TV进入睡眠状态
  4. 佳鑫诺计算机模拟卷答案,微机原理练习册答案佳鑫诺).docx
  5. 629. K个逆序对数组
  6. 转载︱案例 基于贪心算法的特征选择
  7. mysql5.6 table cache_MySQL 5.6下table_open_cache参数优化合理配置详解
  8. CUTE FTP 控制连接已关闭
  9. 马云透露:未来10大行业即将消失!
  10. 顺网服务器ip修改工具,一键更换IP工具,修改IP地址 — 活动撸羊毛必备
  11. 基于python的web框架——Flask 学习笔记
  12. 淘宝客服外包哪家最好
  13. 把int型转成如66ccff这样的颜色16进制颜色代码
  14. SpringCloud微服务架构学习
  15. 人工智能在量化领域应用相关论文整理
  16. Win10下系统自带的各种监测工具
  17. javaScript 实现表格table分页
  18. 计算机类英文自我介绍,优秀的计算机专业英文自我介绍
  19. 【代码练习4】利用多线程处理和尚吃馒头问题
  20. HTML 做一个求职简历表

热门文章

  1. OTT广告价值「锋芒毕露」,谁能蚕食更大市场?
  2. Python爬取张家界风景美图
  3. 51妹子图客户端,开放源代码啦,欢迎拍砖
  4. 计算机中的进制 进制转换 位运算符号
  5. 尚驰SHANGCHI洗车店兰州汽车美容店私人定制洗车服务 杜绝难看的洗车纹!
  6. 关于错误:[Error] expected primary-expression before ‘int‘
  7. 计算机系统基础 - Lab1
  8. 互联网35岁会被清退,这可能是2022年最大的谎言
  9. 多目标跟踪算法JDE在 UA-DETRAC数据集上训练
  10. java根据出生日期自动计算年龄(工具类)