我们在使用机器学习做DNS隐蔽通道检测的过程中,不得不面临样本收集的问题,没办法,机器学习没有样本真是“巧妇难为无米之炊”啊!

本文简单介绍了DNS隐蔽通道传输工具iodine,并介绍如何从iodine的网络流量中抓取DNS报文生成pcap包,并将其转化为机器学习检测算法所能够识别的文本文件。

1、环境准备和iodine安装

DNS隐蔽通道工具iodine分为服务器端程序iodined和客户端程序iodine。服务器端程序iodined提供特定域名的DNS解析服务。当客户端请求该域名的解析,就可以建立通道连接。iodine支持NULL,TXT,SRV,MX,CNAME,A等多种查询请求类型,并且支持EDNS,支持base32,base64,base128等多种编码规范,更多使用方法和功能特性请参考官方文档。

iodine支持直接转发和中继两种模式。客户端和服务端建立通信后,可以看到客户机上多出一块名为dns0的虚拟网卡。本文使用iodine直连模式建立DNS通道。

在安装DNS 通道工具iodine之前,你需要准备2台linux机器,其中一台作为DNS隐蔽通道的Client,另外一台作为目标DNS Server。接下来在两台linux机器上安装iodine。

DNS 通道工具iodine的主页在http://code.kryo.se/iodine/,视你使用的操作系统版本而定,安装过程详见官方文档。安装成功以后,输入iodined --help应该输出类似图3的结果。

图 1 iodined --help帮助文档

2、捕获iodine收发的DNS报文

在iodine的Server机器上,执行:sudo iodined -P passwd -f -DD 192.168.0.1 abc.com

其中,abc.com域名是自定义的传输DNS隐蔽通道数据的主域名,192.168.0.1是自定义输入的虚拟IP,passwd是自定义的密码。

在iodine的Client机器上,开启tcpdump DNS抓包,执行:sudo tcpdump -i <eth0> port 53 -w iodine direct.pcap即可,记得将<eth0>换成你的网卡名。然后执行:sudo iodine -P passwd -f -r -T TXT <your iodine server ip> abc.com

其中,<your iodine server ip> 需要替换成iodine server端机器的IP(两台机器在同一个内网里的话,填写内网IP即可)。

上述步骤操作成功后,在Client和Server机器控制台上可以看到如下输出:

图2 iodine Client端输出

图3 iodine Server端输出

从图3可以看出,iodine在建立DNS通道连接的过程中,使用了大量的特殊字符子域名。而在DNS报文中包含大量的不符域名规范的子域名是DNS隐蔽通道的检测特征之一。

查看Server和Client端的网卡配置,可以看到两台机器都多出了dns0的虚拟网卡。

图4 Client端在建立iodine DNS通道后多出了dns0虚拟网卡

图5 Server端在建立iodine DNS通道后多出了dns0虚拟网卡

实际上,访问server端设定的192.168.0.1 IP地址和直接访问iodine server机器IP是一样的,例如你可以通过ssh root@192.168.0.1来实现对server端机器的远程登录,使用scp来传输文件,甚至使用shadowsocks来反向代理来上网等。

接下来使用wireshark查看tcpdump刚刚抓到的包:

图6 wireshark查看tcpdump抓包

如图6所示,可以看到针对abc.om这个主域名,包含了大量的子域名请求,而这些子域名负责携带外发数据。

由于机器学习的检测算法并不认pcap这种特殊的文件格式,因此需将其转化为检测算法所能够识别的文本文件。我们暂且称这种文本文件为pcap metadata文件吧。

3、从pcap报文生成pcap metadata

pcap metadata文件是由“^”分割的描述网络传输报文的文本文件,其示意格式如下(包含了3条报文):

^^10.0.2.15^45.77.39.243^40812^53^17^^^^^1513249151.379262000^1513249151.573115000^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^0^dnscat.21.nmosubth.6d76676c.3.fegigfcaenejfecaemgjgdgfgohdgfcacienejfecjakakedgphahjhcgjghgi.hecacigdcjcadcdadbdgcaeogjgdglcaengdedgmhfhcgfakedgphahjhcgjgh.gihecacigdcjcadcdadbdgcafagbgdglhecafahfgcgmgjhdgigjgogh.cdcp.directdns^5^0x00000001^193853.139877^1^10.0.2.15;45.77.39.243^^^^^^^^^^^^^^^^^^^^^c56d0100000100000000000006646e73636174023231086e6d6f737562746808366437363637366301333e6665676967666361656e656a66656361656d676a67646766676f6864676663616369656e656a6665636a616b616b656467706861686a6863676a676867693e6865636163696764636a636164636461646264676361656f676a6764676c6361656e67646564676d686668636766616b656467706861686a6863676a67683867696865636163696764636a636164636461646264676361666167626764676c68656361666168666763676d676a68646769676a676f6768046364637009646972656374646e730000050001^^^^^^^^^46^^^^^^^^^^^
^^10.0.2.15^45.77.39.243^40812^53^17^^^^^1513249151.573388000^1513249151.767184000^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^0^dnscat.21.nmosubth.6d76676d.3.akakfagfhcgngjhdhdgjgpgocagjhdcagigfhcgfgchjcaghhcgbgohegfgecm.cagghcgfgfcagpggcagdgigbhcghgfcmcahegpcagbgohjcahagfhchdgpgoca.gpgchegbgjgogjgoghcagbcagdgphahjakgpggcahegigjhdcahdgpgg.vpqg.directdns^5^0x00000001^193795.919418^1^10.0.2.15;45.77.39.243^^^^^^^^^^^^^^^^^^^^^254d0100000100000000000006646e73636174023231086e6d6f737562746808366437363637366401333e616b616b666167666863676e676a68646864676a6770676f6361676a6864636167696766686367666763686a6361676868636762676f686567666765636d3e636167676863676667666361677067676361676467696762686367686766636d63616865677063616762676f686a636168616766686368646770676f6361386770676368656762676a676f676a676f6768636167626361676467706861686a616b67706767636168656769676a68646361686467706767047670716709646972656374646e730000050001^^^^^^^^^46^^^^^^^^^^^
^^10.0.2.15^45.77.39.243^40812^53^17^^^^^1513249151.767307000^1513249151.959258000^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^0^dnscat.21.nmosubth.6d76676e.3.hehhgbhcgfcagbgogecagbhdhdgpgdgjgbhegfgecagegpgdhfgngfgohegbhe.gjgpgocagggjgmgfhdcacihegigfcaccfdgpgghehhgbhcgfcccjcmcahegpca.gegfgbgmakgjgocahegigfcafdgpgghehhgbhcgfcahhgjhegigphfhe.zork.directdns^5^0x00000001^191951.036453^1^10.0.2.15;45.77.39.243^^^^^^^^^^^^^^^^^^^^^0cea0100000100000000000006646e73636174023231086e6d6f737562746808366437363637366501333e6865686867626863676663616762676f6765636167626864686467706764676a676268656766676563616765677067646866676e6766676f6865676268653e676a6770676f63616767676a676d676668646361636968656769676663616363666467706767686568686762686367666363636a636d636168656770636138676567666762676d616b676a676f636168656769676663616664677067676865686867626863676663616868676a68656769677068666865047a6f726b09646972656374646e730000050001^^^^^^^^^46^^^^^^^^^^^

使用github上的generate_metadata_from_pcap.py 脚本文件将pcap文件转换为metadata文件。值得注意的是在使用该脚本前,需要安装wireshark以便使用tshark命令,否则脚本会抱怨找不到tshark路径。 

图7 使用generate_metadata_from_pcap.py 脚本前需要先安装wireshark

接下来,使用:python generate_metadata_from_pcap.py  <your pcap file path> <metadata save dir> 即可生成metadata文件了,成功操作后的效果如图8所示。

图8 由pcap文件成功生成metadata文件

最后,就可以将该metadata文件作为样本,用机器学习来进行DNS 隐蔽通道检测了。

转载请注明出处: http://www.cnblogs.com/bonelee/p/8081744.html

利用机器学习进行DNS隐蔽通道检测——数据收集,利用iodine进行DNS隐蔽通道样本收集的更多相关文章

  1. Python 3 利用机器学习模型 进行手写体数字检测

    0.引言 介绍了如何生成手写体数字的数据,提取特征,借助 sklearn 机器学习模型建模,进行识别手写体数字 1-9 模型的建立和测试. 用到的几种模型: 1. LR,Logistic Regres ...

  2. Python 3 利用 Dlib 19.7 和 sklearn机器学习模型 实现人脸微笑检测

    0.引言  利用机器学习的方法训练微笑检测模型,给一张人脸照片,判断是否微笑:   使用的数据集中69张没笑脸,65张有笑脸,训练结果识别精度在95%附近: 效果: 图1 示例效果 工程利用pytho ...

  3. Python 3 利用 Dlib 和 sklearn 人脸笑脸检测机器学习建模

    0. 引言 利用机器学习的方法训练微笑检测模型,输入一张人脸照片,判断是否微笑: 精度在 95% 左右( 使用的数据集中 69 张没笑脸,65 张有笑脸 ): 图1 测试图像与检测结果 项目实现的笑脸 ...

  4. 利用XtraBackup给MYSQL热备(基于数据文件)

    利用XtraBackup给MYSQL热备(基于数据文件) By JRoBot on 2013 年 11 月 26 日 | Leave a response 利用XtraBackup给MYSQL热备(基 ...

  5. DNS通道检测 国内学术界研究情况——研究方法:基于特征或者流量,使用机器学习决策树分类算法居多

    http://xuewen.cnki.net/DownloadArticle.aspx?filename=BMKJ201104017&dbtype=CJFD<浅析基于DNS协议的隐蔽通道 ...

  6. DNS通道检测 国外学术界研究情况——研究方法:基于流量,使用机器学习分类算法居多,也有使用聚类算法的;此外使用域名zif low也有

    http://www.ijrter.com/papers/volume-2/issue-4/dns-tunneling-detection.pdf <DNS Tunneling Detectio ...

  7. 利用机器学习检测HTTP恶意外连流量

    本文通过使用机器学习算法来检测HTTP的恶意外连流量,算法通过学习恶意样本间的相似性将各个恶意家族的恶意流量聚类为不同的模板.并可以通过模板发现未知的恶意流量.实验显示算法有较好的检测率和泛化能力. ...

  8. Python 3 利用机器学习模型 进行手写体数字识别

    0.引言 介绍了如何生成数据,提取特征,利用sklearn的几种机器学习模型建模,进行手写体数字1-9识别. 用到的四种模型: 1. LR回归模型,Logistic Regression 2. SGD ...

  9. Stanford机器学习---第十一讲.异常检测

    之前一直在看Standford公开课machine learning中Andrew老师的视频讲解https://class.coursera.org/ml/class/index 同时配合csdn知名 ...

随机推荐

  1. Mysql库的操作

    一.系统数据库 执行如下命令,查看系统库 show databases; information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息 ...

  2. BZOJ 1061费用流

    思路: 我们可以列出几个不等式 用y0带进去变成等式 下-上 可以消好多东西 我们发现 等式左边的加起来=0 可以把每个方程看成一个点 正->负 连边 跑费用流即可 //By SiriusRen ...

  3. 2015 多校赛 第一场 1002 (hdu 5289)

    Description Tom owns a company and he is the boss. There are n staffs which are numbered from 1 to n ...

  4. window 10 多版本激活工具

    window 10 通用版激活工具 云盘地址:https://pan.baidu.com/s/1bo3L4Kn 激活工具网站:http://www.tudoupe.com/win10/win10jih ...

  5. JVM概论

    引子 Java虚拟机是Java应用程序的执行环境.通常而言,JVM是由一组严格的指令集和一个复杂的内存模型来具体实现的虚拟机,它用来解释编译好的java字节码文件,将字节码转换为特定机器可以执行的本机 ...

  6. IM系统中如何保证消息的可靠投递(即QoS机制)

      消息的可靠性,即消息的不丢失和不重复,是im系统中的一个难点.当初qq在技术上(当时叫oicq)因为以下两点原因才打败了icq:1)qq的消息投递可靠(消息不丢失,不重复)2)qq的垃圾消息少(它 ...

  7. PowerDesigner 逆向工程Non SQL Error : Could not load class com.mysql.jdbc.Driver

    建立与数据库的连接. 在菜单条上,有一个Database的选择项: 选择connect…后弹出设置对话框: 在Data source里选择第三个单选按钮,即Connection profile:后,点 ...

  8. 【Oracle】三种方式查看SQL语句的执行计划

    查看执行计划的方式有三种: EXPLAIN PLAN .V$SQL_PLAN .SQL*PLUS AUTOTRACE 1.EXPLAIN PLAN: 显示执行相应语句时可以使用的理论计划 读取执行计划 ...

  9. 【原创】IBM Websphere 报错:JSPG0120E: 为 pageEncoding 属性和匹配 URI 模式的配置元素指定不同的值是非法的。

    websphere中间件,在打开一个jsp页面时报: IBM Websphere 报错:JSPG0120E: 为 pageEncoding 属性和匹配 URI 模式的配置元素指定不同的值是非法的. . ...

  10. vue组件之间互相传值:父传子,子传父

    今看到一篇很不错的vue组件传值文章,便于理解,遂做笔记- 一般页面的视图App.vue应为这样 一.父组件向子组件传值 1.创建子组件,在src/components/文件夹下新建一个Child.v ...