前段时间爆发的利用永恒之蓝进行勒索及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域名检测相关推荐

  1. python 替换array中的值_利用Python提取视频中的字幕(文字识别)

    我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...

  2. python 16bit转8bit的工具_利用python读取YUV文件 转RGB 8bit/10bit通用

    注:本文所指的YUV均为YUV420中的I420格式(最常见的一种),其他格式不能用以下的代码. 位深为8bit时,每个像素占用1字节,对应文件指针的fp.read(1): 位深为10bit时,每个像 ...

  3. python数据库操作批量sql执行_利用Python如何批量修改数据库执行Sql文件

    利用Python如何批量修改数据库执行Sql文件 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  利用Python如何批量修改数据库执行Sql文件.txt ] (友 ...

  4. python爬取外文文献翻译_利用Python爬取翻译网站的翻译功能

    现在我想分享一个利用Python技术,爬取一个翻译网站的翻译功能的小代码. 首先隆重介绍我们今天将要爬取的网站:http://fy.iciba.com/ 咱们用Python中的urllib模块的功能进 ...

  5. python绘制简单城市剪影图_利用Python的folium包绘制城市道路图的实现示例

    写在前面 很长一段时间内,我都在研究在线地图的开发者文档,百度地图和高德地图的开发者中心提供了丰富的在线地图服务,虽然有一定的权限限制,但不得不说,还是给我的科研工作提供了特别方便的工具,在博客前面我 ...

  6. python获取window共享目录列表_利用Python获取DICOM RTstructure勾画列表

    在<利用Python打开DICOM CT文件>一文中,我们利用pydicom.dcmread()读取了CT图像.本文中我们将修改load_scan()函数来读取RTstructure文件并 ...

  7. python处理word或者pdf文件_利用python程序生成word和PDF文档的方法

    一.程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用fr ...

  8. python 钉钉机器人发送图片_利用Python自动发送钉钉数据消息

    现在大部分公司都使用钉钉作为内部的主要沟通工具,钉钉消息基本都上都能快速有效的被阅读,打开率会比邮件高上不少.所以准备使用钉钉来播报平台每日的成交额,并附上一些鼓励的话和图片.起到一个激励团队的作用 ...

  9. python头像右上角加红色数字_利用python实现微信头像加红色数字功能

    通过Python实现将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果 实现过程: 准备两张图片如下: 使用PIL图像处理库,导入moudle ...

  10. python画二维温度云图_利用python画出词云图

    本文将介绍如何利用python中相应的模块画出词云图.首先给出效果图: 其中词云图中的词汇是对手机短信中的垃圾短信的统计,字体越大表示在垃圾短信中出现的频次越高.下面给出具体的步骤. 读取" ...

最新文章

  1. Linux上实现ssh免密码登陆远程服务器
  2. simple css 汉化,Simple CSS(CSS文档生成器)
  3. poj 2763 Housewife Wind
  4. python数据科学导论 中南_Python数据科学导论
  5. Android Button字母自动全部大写的问题
  6. 原生 js前端路由系统实现3之代码 构建工具 和 querystring功能
  7. 数据类型转换——Python
  8. HTTP权威指南阅读记录 - 第一章
  9. python图像exif信息复制
  10. 微服务技术图片资源汇总
  11. zookeeper使用问题汇总
  12. nodejs 服务端 音频拼接 合成 实现
  13. 获取稳定的西刺代理IP
  14. python PIL图片转PDF
  15. MQ消息队列常用命令
  16. 使用 TimeGAN 建模和生成时间序列数据
  17. 【推荐系统】逻辑回归(LR)在推荐系统中的使用
  18. javaScript中this以及window对象和window对象的name属性
  19. html静态测试网页,Html静态网页测试-20210531213110.pptx-原创力文档
  20. Android4.4添加系统服务(aidl接口服务)

热门文章

  1. 【C语言】算法学习·哈希算法全解
  2. Apache Kafka核心组件和流程-协调器(消费者和组协调器)-设计-原理(入门教程轻松学)
  3. android 镜像投屏开发,Android 投屏实现纪要
  4. Android手机投屏利器scrcpy
  5. PX4新增自定义orb消息
  6. 百度360争推1TB永久网盘
  7. 使用浏览器合成语音播放
  8. 【LaTeX】对表格中的内容添加脚注不显示
  9. openstack rabbitmq报错导致识别不到计算节点 解决方案
  10. 单目摄像机标定与双目摄像机标定有什么区别