检测DNS协议上恶意和低吞吐量数据泄露
https://wwwresearchgatenet/scientific-contributions/28445163_Asaf_Shabtai
摘要:在存在安全对策的情况下,设计用于数据泄露的恶意软件必须使用隐蔽的通道来实现其目标。域名系统(DNS)协议是目前恶意软件开发者常用的秘密渠道。虽然近十年来人们一直在研究利用DNS进行隐蔽通道的检测,但以往的研究主要涉及到一个特定的隐蔽通道子类,即DNS隧道化。虽然隧道检测的重要性不应该被最小化,但是整个低吞吐量DNS泄露恶意软件被忽略了。
在这项研究中,我们提出了一种在DNS上检测隧道和低吞吐量数据泄露的方法。在确定之前检测到的恶意软件使用了网络活动注册的网络域名,而不是损害现有的合法域名后,我们专注于检测和拒绝这些域名的请求,作为一个有效的数据泄漏关闭。因此,我们提出的解决方案处理流式DNS流量,以便检测和自动拒绝用于数据交换的域的请求。初始数据收集阶段以允许长时间扫描的方式收集每个域的DNS日志,因此能够处理“慢速”攻击。第二阶段是基于每个域的查询行为提取特征,最后阶段是利用异常检测模型对域进行分类。至于检测,DNS请求被分类为用于数据泄露的域将被无限期拒绝。
我们的方法是在一个大型递归DNS服务器日志上进行评估,其峰值为每小时4700万次请求。在这些DNS日志中,我们从DNS隧道挖掘工具以及两个现实生活中的恶意软件中注入了数据泄露流量:FrameworkPOS,它曾在2014年被用于从家得宝(Home Depot)窃取5600万张信用卡;BackdoorWin32Denis,在2016年被用于Cobalt Kitty APT。即使将我们的方法限制在极低的假阳性率(5万个域中的1个)时,它也检测到了上述所有情况。此外,这些日志还被用来比较我们的系统和最近发表的两种方法,这两种方法的重点是检测DNS隧道,以强调检测低吞吐量过滤恶意软件的新颖性。
一、介绍
个人电脑和计算机网络一直是数据盗窃攻击的目标,通常使用的技术包括中间人攻击[7]或通过秘密渠道[25][40]泄露数据的恶意软件。在恶意软件的情况下,通常是作为命令和控制(C&C)的远程服务器,等待来自恶意软件的通信并记录传输到它的数据。然而,在受保护的网络(私有的或组织的)中,目标主机可以驻留在一个有限的段中,与外界的访问受限。在这种情况下,即使允许连接,通常也会由安全解决方案对可疑行为进行监视。因此,在这种情况下,恶意软件必须找到一个隐蔽的通道,以便将数据过滤到远程服务器,而现有的安全解决方案不会阻止或检测到这些数据。实现这一目标的一个渠道是域名系统(DNS)协议,这是本研究的重点。
从本地计算机到Internet的任何通信(不包括基于静态ip的通信)都依赖于DNS服务。因此,限制DNS通信可能导致合法远程服务断开连接;因此,必须保守地使用DNS来阻止内容。从攻击者的角度来看,这使得DNS协议成为数据泄漏[3]的隐蔽通信通道的一个很好的候选。
典型地,DNS协议不是为任意数据交换而设计的;DNS消息相对较短,响应不相关,这意味着它们到达的顺序不一定与发送[27]的请求的顺序相同。这些局限性可以通过攻击者使用两种方法之一:(1)建立一个双向通信信道上的DNS(例如,通过模拟一个可靠的C&C的恶意软件和服务器之间的会话),或(2)使用通道发送小短的数据点,用最小的开销和请求,并且消息是独立的(如信用卡号码、用户凭证,keylogging和地理位置)。我们将这两种方法分别称为高吞吐量隧穿和低吞吐量恶意软件。DNS过滤的完整威胁环境包括这两类,因此,任何通过DNS协议检测或防止数据泄漏的解决方案都必须同时处理这两类问题。
近年来检测到的低吞吐量泄露恶意软件使用的互联网域名购买、注册和操作完全是为了他们的网络运动。对于需要用户提供和配置Internet域的DNS隧道工具来说也是如此。因此,拒绝这些域的请求相当于在不影响正常网络运行的情况下停止数据泄漏。
本文提出了一种基于机器学习技术的新型DNS泄露检测方法,该方法既针对DNS隧道化,又针对低吞吐量的恶意软件泄露。我们的方法的输入是一个DNS流量日志流,它经常按域分组。这些日志收集的时间足够长,即使数据交换速度相对较慢,也可以检测到恶意软件。对每个域的收集日志定期应用特征提取阶段。然后,对每个域的特征进行分类阶段,以确定该域是否用于数据交换。该分类是使用隔离森林[21]异常检测模型进行的,该模型事先对合法流量进行了训练。在分类之后,对任何已被分类为异常的域的请求将被无限期地阻塞,从而停止数据泄漏。
我们使用隧道工具和之前检测到的低吞吐量泄露恶意软件的流量模拟来评估我们的工作。这些模拟与合法的大规模DNS流量一起执行,其峰值速率为每小时4100万次请求,从而使检测任务尽可能真实。该该检测覆盖率下表明少于0002%假阳性率以及低误报率随着时间的推移而更少,我们将最近发表的两篇论文旨在检测隧道方法与本文进行比较,证明我们的方法的贡献——检测的低吞吐量漏出恶意软件。
我们工作的贡献有三方面:
1)除了检测DNS隧道外,我们的工作还能够检测低吞吐量DNS泄露恶意软件。
2)因为我们的方法在特定的时间范围内对域进行分类(称为每个域),所以它通过拒绝对被分类为用于数据交换的域的请求,来立即、准确和自动地阻止出现的DNS数据泄漏尝试。可以论证的是,对于在特定时间段内对用户进行分类的检测系统来说,情况并非如此,因为基于恶意软件的存在对合法用户的流量进行无限期阻塞可能是不可接受的。
3)据我们所知,之前的研究还没有对大规模、高质量的DNS流量日志(超过106个查询/小时)进行评估。由于DNS上的数据泄露可能试图低调神秘地操作,针对大规模流量的测试可能是任何检测系统的最终挑战。前一种说法得到了支持,因为当我们将我们提出的方法与以前建议的方法进行比较时,我们发现它们的报告结果有所减少。
二、背景
http://wenkubaiducom/view/8053931cff00bed5b9f31d8ahtml
详细步骤
建立一个中央日志服务器
1建立中央日志服务器前的准备工作
配置良好的网络服务(DNS和NTP)有助于提高日志记录工作的精确性。在默认情况下,当有其他机器向自己发送日志消息时,中央日志服务器将尝试解析该机器的FQDN(fullyqualifieddomainname,完整域名)。(你可以在配置中央服务器时用“-x”选项禁止它这样做。)如果syslog守护进程无法解析出那个地址,它将继续尝试,这种毫无必要的额外负担将大幅降低日志记录工作的效率。类似地,如果你的各个系统在时间上不同步,中央日志服务器给某个事件打上的时间戳就可能会与发送该事件的那台机器打上的时间戳不一致,这种差异会在你对事件进行排序分析时带来很大的困扰;对网络时间进行同步有助于保证日志消息的时间准确性。如果想消除这种时间不同步带来的麻烦,先编辑/etc/ntpconf文件,使其指向一个中央时间源,再安排ntpd守护进程随系统开机启动就可以了。
2配置一个中央日志服务器
只须稍加配置,就可以用syslog实现一个中央日志服务器。任何一台运行syslog守护进程的服务器都可以被配置成接受来自另一台机器的消息,但这个选项在默认情况下是禁用的。在后面的讨论里,如无特别说明,有关步骤将适用于包括SUSE和RedHat在内的大多数Linux发行版本。我们先来看看如何激活一个syslog服务器接受外来的日志消息:
1 编辑/etc/sysconfig/syslog文件。
在“SYSLOGD_OPTIONS”行上加“-r”选项以允许接受外来日志消息。如果因为关于其他机器的DNS记录项不够齐全或其他原因不想让中央日志服务器解析其他机器的FQDN,还可以加上“-x”选项。此外,你或许还想把默认的时间戳标记消息(--MARK--)出现频率改成比较有实际意义的数值,比如240,表示每隔240分钟(每天6次)在日志文件里增加一行时间戳消息。日志文件里的“--MARK--”消息可以让你知道中央日志服务器上的syslog守护进程没有停工偷懒。按照上面这些解释写出来的配置行应该是如下所示的样子:
SYSLOGD_OPTIONS="-r-x-m240"
2重新启动syslog守护进程。修改只有在syslog守护进程重新启动后才会生效。如果你只想重新启动syslog守护进程而不是整个系统,在RedHat机器上,执行以下两条命令之一:
/etc/rcd/initd/syslogstop;/etc/rcd/initd/syslogstart
/etc/rcd/initd/syslogrestart
3如果这台机器上运行着iptables防火墙或TCPWrappers,请确保它们允许514号端口上的连接通过。syslog守护进程要用到514号端口。
4为中央日志服务器配置各客户机器
让客户机把日志消息发往一个中央日志服务器并不困难。编辑客户机上的/etc/syslogconf文件,在有关配置行的操作动作部分用一个“@”字符指向中央日志服务器,如下所示:
另一种办法是在DNS里定义一个名为“loghost”的机器,然后对客户机的syslog配置文件做如下修改(这个办法的好处是:当你把中央日志服务器换成另一台机器时,不用再修改每一个客户机上的syslog配置文件):
authpriv@loghost
接下来,重新启动客户机上的syslog守护进程让修改生效。让客户机在往中央日志服务器发送日志消息的同时继续在本地进行日志工作仍有必要,起码在调试客户机的时候不必到中央日志服务器查日志,在中央日志服务器出问题的时候还可以帮助调试。
具体配置步骤:
1开启系统日志服务器功能
点开路由器的系统状态→系统日志,启用“系统日志服务器”,并启用“日志服务器”,输入对应日志服务器的IP地址,具体界面如下图:
2启用上图中的系统日志服务,便可在路由器的系统状态》系统日志中查看路由器的常见系统更改,具体可查考如下界面:
如图中,以内网19216813的计算机作为日志服务器,则需要在这台计算机上安装我们的VE日志分析软件,之后便可在此PC机上看见内网用户所浏览网址。
3安装数据库
下载MYSQL数据库,官方下载地址:http://wwwmysqlcom/downloads/
安装数据库,设置密码、端口号。
4运行“飞鱼星日志系统(VLS)”
“飞鱼星日志系统(VLS)”及具体使用方法请到http://wwwadslrcom/down/文件下载中心,找到设备对应型号进行下载,下载后解压运行Volanslogsystemexe,如图,输入数据库的密码、端口号(服务器IP、用户名不用修改),即可运行,并自动连接获取日志。
你好,查看服务器日志以Linux举例的话可通过以下方式查看:
1进入日志文件所在的文件目录,比如:cd /opt/tomcat7/logs
2通过命令打开日志,分析需求场景打开需要的日志。比如:tail -f catalinaout
3常用命令一:tail比如:tail -f testlog (循环查看文件内容)
4按照行号查询:cat(过滤出关键字附近的日志)cat -n testlog |grep "订单号" 然后使用 head -n 20 查看查询结果里的向前20条记录。
5按照时间日期查询,(查询出一段时间内的记录)sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' testlog
1Internet流量监测;
2Internet带宽监测与控制;
3Internet流量日志,实时记录局域网内计算机的Internet流量、流速和带宽占用;
4规定哪些站址可以访问;
5哪些计算机可以上网;
6哪些计算机可以在什么时间上网;
7 监视网内计算机收发邮件,保留邮件摘要副本;
8限制使用Web Mail邮箱;
9独立日志记录计算机上网情况、实时查询;
10IP地址与MAC绑定,防止私自修改IP逃避监测;
11安装容易,可以安装在代理服务器或局域内任1台计算机上;
12 适合通过代理服务器、路由器、专线等各种方式接入Internet环境;
13自动扫描局域网内IP节点,包括网络、工作组、网络打印机、计算机。
只要提到应用安全,总是离不开一个概念——sdl建设,但是在大部分互联网公司并没有看到过哪家SDL做的好的,SDL强调安全流程,从业务需求的提出就介入进去,在整个业务的研发周期中,每一块都有相应的安全方法、安全制度来指导,安全作为业务的一个属性加入进去,SDL在过程中实施的是对业务的卡点、考核。
这块主要是对流程进行梳理,把安全与项目研发流程相结合形成项目的安全开发管控流程,安全贯穿到整个项目研发流程中,包括前期的需求分析,安全设计、代码编写、代码上线部署、测试环境测试、正式环境上线运行等,可以认为此时走传统的SDL流程。
这里有个问题,若是业务量增长的话对于人力成本是巨大的,这里很多公司就结合DevSecOps理念来解决一部分人手不足的问题,这个框架讲研发、运维、安全作为一个团队来对业务的安全负责,安全不单是安全团队的怎样,成了业务中每个人的责任。下面简要说下DevSecOps理念及落地实施。
对于DevSecOps的落地来说,这个只是个框架,是个方法论,具体的技术实施呢,都知道是将Sec融入到Dev和Ops的里面,对于怎么融入、怎样结合到起来,就需要根据不同公司的不同特点来定了。
对于安全来说,主要的任务就是保护公司的业务不会被外界入侵,不会被外界攻击,攻击能及时发现切断。
DevSecOps框架需要建设不同的安全体系,需要不断优化和完善对于的体系来覆盖框架的不同阶段。对于在真正的实施过程中,大部分公司都可能涉及到以下不同的能力建设,在具体落地过程中,笔者认为可以简单总结为几个能力建设:主动发现的能力、被动发现的能力、业务管控的能力、安全运营的能力。
主动发现的能力简单来说是能主动发现业务中的安全问题、安全漏洞、安全风险,业界中比较常用的技术有黑盒扫描、白盒扫描、安全评估与测试以及红蓝对抗。
这个是每个公司都会有的,也是初期重点建设的一块,有采用商业扫描工具:awvs、appscan等,也有采用自研方式进行。
这里不说商业的扫描工具,对于互联网公司,大部分都会采用自研扫描工具的方式进行,简单说下自研扫描器里面涉及到的一些需要重点考虑的地方:
白盒的话在互联网公司除了几个大厂有自研的引擎外,据了解都是采用了商业的工具,在具体的落地过程中也调研了不少白盒扫描工具:checkmarx、coverity、codeql、sonarqube。
checkmarx和coverity都有sonarqube的插件在,都可以作为sonar的一个引擎来工作,对于sonar来说,很多互联网公司都基于这个做代码质量的扫描,这个其实给做白盒能力有了很大的便利性。
checkmarx对于web来说效果比coverity要好些,并且对于用户的使用体验和操作都是比较不错,将checkmarx插件集成到sonar里面,这样业务不需要单独集成checkmarx,而是只需要按照以前的流程集成sonar就可加入安全扫描的能力。
但是有一点需要考虑,对于安全结果来说业务很多时候不知道是不是误报还是真实的安全风险,这就需要安全人员介入到流程里面,对代码扫描的结果进行审核,确定是漏洞的提交给业务,不是漏洞的直接忽略处理,这样前期需要大量的人工参与,需要不断优化规则,不断调整策略减少误报。前期可以通过对结果的分析可以将一些误报率较高的规则下掉,只留高威胁级别的规则在,保证人工在每天是可以覆盖的住流程的
后期的话由于sonar是带有api接口的,可以基于sonar包装一层,构建安全自己的代码扫描平台,可以提供api接入到CI中,可以将漏洞审核与漏洞管理平台打通,可以通过平台调整规则、新加规则等。这样在整个CI中,sonar+代码扫描平台两个,业务只要关心sonar上面的代码质量问题,安全只要登入代码扫描平台审核白盒扫描出来的漏洞即可。
这里涉及到一个白盒里面的子项目:白盒扫描插件,这个作为白盒检测,更加进行了左移,在业务编写代码的时候就直接进行扫描。可以基于:https://githubcom/alibaba/p3c 来包装一层来做
还有一个白盒的子项目:第三方组件的漏洞发现,这个做起来可以通过采购商业软件来实现,比如Blackduck或者xray,对业务是透明的,只要安全人员控制好流程和策略。
红蓝对抗是一种能更深层次发现安全问题和安全风险的方式。每过一段时间组织一次蓝队行动,对着一个核心目标不限手段、不限方式地进行攻击,以获取核心目标为目的。可以更好地发现整个业务体系中存在的安全问题和安全风险点,帮助红队进行安全优化及建设,红蓝对抗在安全进行中一定程度后可以考虑重点进行建设,对于整个风险的发现和推动是巨大的。
被动发现安全风险的能力,可以采用的技术有:安全监控、蜜罐
监控可以分为两类:未发现风险的监控、风险之中的监控,风险之后的溯源
为了发现风险的监控,可以提前杜绝掉风险的发生,比如前面说的,若是资产梳理是没有问题的,可以每天将业务新增的资产进行扫描查看,比如:新上的域名是一个管理系统,他没有走内部的安全流程,就存在问题,直接要求整改。新上的域名、服务器直接进行扫描器的扫描,可以第一时间发现是否存在漏洞。
发生风险的时候的监控:
- 攻击流量监控 :这个就是有很多扫描器、很多测试的数据的特征进行流量监控,监控到了直接报警,也可结合SOC进行数据分析处理,利用WAF进行自动化封IP等防御措施,这样将内部各个防御能力打通,实现自动化编排,后期流量日志采用大数据建模方式来发现未特征化的攻击。
- DNS监控: 对于很多命令执行、SQL注入、SSRF等漏洞的探测大部分是通过DNS来的,内部系统发起DNS请求是可以在内部DNS服务器上捕捉到的,这样将DNS日志监控起来,初始先制定一些黑名单,观察是否有机器对外发现这些恶意DNS请求了,对这些机器进行分析,就有可能发现未知的存在的安全风险。
- SQL执行日志监控: 对于sql注入的发现还是比较有用的,SQL注入通常会有一些注入特征在,只要匹配到这些特征,就可以发现某个业务在遭受sql注入的攻击
除此之外,对外界代码仓库、文档仓库的监控也是属于监控体系的,包括GitHub监控、百度网盘监控等等,这个github好说,很多开源的工具系统存在,将业务的关键信息加入到监控中即可,对于百度网盘之类的监控就不太好做了。
这个也是发现攻击的一种很好的方式,不单可以发现外部使用到的poc、密码字典等等信息,也能发现一些未知的攻击方式和APT行为存在
业务管控能力,比较通用的是WAF,为啥把WAF能力放在安全管控上面,WAF是可以做到哪些ip能访问,哪些ip不能访问,哪些路径能访问,哪些路径不能访问到的,说起来也是对业务的访问做的管理。WAF有很多成熟的商业产品在用,也可以自研,自研的话前期是基于正则匹配来做的,通过匹配对应的参数位置上的参数值是否包含有关键字来做。后期的话要想准确性高、误报率小的话还是需要机器学习和语义分析来做。
现在对于业务管控比较热门的零信任体系的建设,比较常见的是安全网关的模式,有空说下零信任的一些内容,现阶段知识还不深,就不说了,再深入研究研究看。
提到安全运营,很多人的脑袋想到的都是举办些安全活动,打打杂之类的工作,在笔者看来,一个企业的安全运营能力才真正能体现出该企业的安全能力,安全运营是推动SDL流程不断优化、不断完善的动力,是为DevSecOps规划建设指明道路和方向的。
技术要是没有了运营,是无法进行后续的优化和改进的,运营没有了技术,是虚的空的,无法落地的,安全运营包括了外部运营、内部运营,不同的运营又可划分为非技术运营、技术运营两种
外部运营里面的非技术运营,主要包括了安全品牌的建设、宣传等,主要是提供公司在业界的影响力,这样可以更好的吸引外部的安全研究者为我们服务,更好的吸引外界安全人员以外部视角参与到公司的安全建设中来
外部的技术运营:组织技术人员参加外部的比赛、大会等,发表技术文章等,以技术能力展现出来,这样在行业中展示出公司的技术实力。
内部非技术运营:汇总每个能力方面的数据做分析,将各个能力的结果通过数据化的方式展示出来,一方面可以给老板看到能力的建设进展情况,也能使大家了解到自己做的工作的成果
具体的落地可采用:数据大屏的方式来展示出来,通过soc平台完成。
内部技术运营:通过非技术运营出来的结果反哺各个能力建设,通过内部、外部发现的安全问题,优化各个能力的建设,补充不足之处,推动流程优化和DevSecOps建设方向。
具体落地:主要是需要运营人员对每一部分的能力建设比较了解,通过看问题能发现更深层面的东西,然后对每个结果进行安全能力上面的推动。
1 很多防火墙或者路由器就自带流量监控功能,可以通过自带的流量监控功能来查看。
2 也可以通过在镜像端口安装旁路方式的网管软件来实现。如:WFilter上网行为管理软件,可以在镜像监控全网,并且可以设置上网策略。
3 360安全卫士的企业版也可以监控到流量。
网站日志分析和流量统计分析的区别
相同点:
日志分析和流量软件分析都能分析出网站各种流量、受访页情况、关键字数据等。
不同点:
1、日志分析往往不能分析当前的流量数据;
2、常见的流量分析软件不能分析出搜索引擎爬虫数据;
3、常见的流量分析软件不会分析错误链接等数据;
网站日志分析对seo优化的作用
了解搜索引擎抓取网页的问题:
分析搜索引擎爬虫访问情况,我们可以分析出搜索引擎收录网页的一些线索:
搜索引擎最近访问网站的频率是否正常?
搜索引擎比较喜欢访问哪部分网页?
搜索引擎很少访问哪部分的网页?
搜索引擎是否访问了一些我们禁止访问的内容?
了解网站内容及链接是否正常:
通过分析服务器返回的状态代码,可分析以下问题:
是否有死链接
是否有页面元素被误删,比如、css脚本等等
服务器是否曾出现暂时故障
是否有临时重定向
是否有权限控制导致搜索引擎无法抓取数据
0条评论