利用Bro和集体情报框架(CIF)识别恶意软件流量

来源:http://blog.opensecurityresearch.com/2014/03/identifying-malware-traffic-with-bro.html

https://csirtgadgets.com/collective-intelligence-framework/

在这篇文章中,我们将介绍一些最有效的技术,使用Bro,一些快速脚本和其他免费可用的工具,如CIF,用于过滤可疑连接和调查网络数据的恶意软件。

这篇文章并不是对Bro的全面介绍(请参阅文章末尾的参考资料部分),而是关于如何使用Bro日志和其他开源工具和资源来识别恶意软件流量的提示和提示。

本文中使用的所有pcap文件都可以从GitHub上获得(https://github.com/aboutsecurity/Bro-samples)。其中一些数据来自传染源信息库的pcaps的大数据集。

最后,如果你是新手,我建议你从下载最新版本的安全洋葱,一个必须有Linux发行版的数据包忍者。由于12.04.4版本的安全洋葱与新的Bro 2.2默认安装,所以您所需要做的就是打开终端,获取样品和一些咖啡……(咖啡永远不够!)

一、使用BRO进行流量分析

我们将通过Bro重新播放我们的第一个样品:

$ bro –r sample1.pcap local

这个命令告诉Bro读取和处理sample1.pcap,非常类似于tcpdump或任何其他pcap工具。通过在命令末尾添加关键字“local”,我们要求Bro加载“local”脚本文件,它在SecurityOnion中位于/opt/ Bro /share/ Bro /site/local. Bro中。

当命令完成时,Bro将在当前工作目录中生成许多日志。这些日志是高度结构化的纯文本ASCII,因此对Unix友好,这意味着您可以使用您的命令行功夫与awk、grep、sort、uniq、head、tail和其他所有常见疑点一起使用。

要查看sample1.pcap的连接摘要,我们可以快速查看conn.log:

$ cat conn.log

上面的图显示了该命令输出的摘录。请注意,Bro日志的输出是如何在列中构造的,每个列表示不同的字段。这些字段显示在输出报头的第7行,以“ts”(从epoch开始算起的时间戳,以秒为单位)和“uid”(用于跨Bro日志关联信息的连接的唯一标识符)开头。请参阅Bro文档以了解关于其他字段的更多信息。

#separator \x09

#set_separator ,

#empty_field (empty)

#unset_field -

#path conn

#open 2014-03-07-13-51-01

#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes conn_state local_orig missed_bytes history orig_pkts orig_ip_bytesresp_pkts resp_ip_bytes tunnel_parents

#types time string addr port addr port enum string interval count count string bool count string count count count count table[string]

我们可以观察到许多端口80 (tcp)和端口53 (udp)的连接。log还会在字段conn_state下报告这些连接的结果。让我们用broo -cut——一种基于awk的字段提取器——来更仔细地观察这一点。

$ cat conn.log | bro-cut id.orig_h, id.orig_p, id.resp_h, id.resp_p, proto, conn_state

172.16.88.10 49508 172.16.88.135 80 tcp REJ

172.16.88.10 49510 172.16.88.135 80 tcp REJ

172.16.88.10 57852 172.16.88.135 53 udp SF

172.16.88.10 49509 172.16.88.135 80 tcp REJ

172.16.88.10 57399 172.16.88.135 53 udp SF

172.16.88.10 49510 172.16.88.135 80 tcp REJ

172.16.88.10 57456 172.16.88.135 53 udp SF

172.16.88.10 49511 172.16.88.135 80 tcp S0

172.16.88.10 62602 172.16.88.135 53 udp SF

172.16.88.10 54957 172.16.88.135 53 udp SF

172.16.88.10 49511 172.16.88.135 80 tcp SH

172.16.88.10 49512 172.16.88.135 80 tcp S0

172.16.88.10 64623 172.16.88.135 53 udp SF

172.16.88.10 53702 172.16.88.135 53 udp SF

172.16.88.10 49512 172.16.88.135 80 tcp SH

172.16.88.10 49513 172.16.88.135 80 tcp S0

172.16.88.10 52164 172.16.88.135 53 udp SF

172.16.88.10 49513 172.16.88.135 80 tcp SH

172.16.88.10 49516 172.16.88.135 80 tcp S0

172.16.88.10 54832 172.16.88.135 53 udp SF

172.16.88.10 49516 172.16.88.135 80 tcp SH

172.16.88.10 49517 172.16.88.135 80 tcp S0

172.16.88.10 64102 172.16.88.135 53 udp SF

172.16.88.10 51110 172.16.88.135 53 udp SF

172.16.88.10 49517 172.16.88.135 80 tcp SH

172.16.88.10 49518 172.16.88.135 80 tcp S0

172.16.88.10 55957 172.16.88.135 53 udp SF

172.16.88.10 49519 172.16.88.135 80 tcp S0

172.16.88.10 58988 172.16.88.135 53 udp SF

172.16.88.10 49518 172.16.88.135 80 tcp SH

在本例中,我们可以观察到,在端口80上尝试的一些连接被拒绝(REJ),而其他的则从来没有应答(S0)或保持连接的半开状态(SH,这意味着从来没有看到来自响应者的同步ack)。产生这种行为的原因是sample1pcap是从我的一个沙盒中获得的,其中172.16.88.135是一个虚拟机,它运行的Remnux带有fakedns和netcat监听端口80,而不是一个完整的web服务器。

既然我们知道这里有一些http通信,让我们看看由Bro生成的另一个日志:http.log

$ cat http.log | bro-cut id.orig_h, id.orig_p, id.resp_h, id.resp_p, host, uri, referrer

172.16.88.10 49493 172.16.88.135 80 f52pwerp32iweqa57k37lwp22erl48g63m39n60ou.net / -

172.16.88.10 49495 172.16.88.135 80 h54jtbqmuj56hwb48e41p42g33h34c29grbqfxm29.ru / -

172.16.88.10 49511 172.16.88.135 80 iqcqmrn30iuoubuo11crfydvkylrbtmtev.info / -

172.16.88.10 49512 172.16.88.135 80 ezdsaqbulsgzh44m59p42eqmrkxa57n40brcq.com / -

172.16.88.10 49513 172.16.88.135 80 o41lwmqnqarmxiyi35iyftpzaye21osjyjq.ru / -

172.16.88.10 49516 172.16.88.135 80 n30arh24frisbslqmqoxgvpvk47o11pritev.biz / -

172.16.88.10 49517 172.16.88.135 80 jsa57n20hyisjxcre11fwl58gta37i65ovf32o51.info / -

172.16.88.10 49518 172.16.88.135 80 j36lxf52hsj56itc49lqayoveymwfzosi15jw.org / -

172.16.88.10 49519 172.16.88.135 80 g53lvo61ayoucrm49kzgvm69irhwl58erjwfu.net / -

...

什么奇怪的吗?当然!http的主机字段。日志显示的条目似乎与正常浏览不一致。

仔细观察一下Bro生产的dns.log就会发现这一点:

$ cat dns.log | bro-cut query | sort –u

a37fwf32k17gsgylqb58oylzgvlsi35b58m19bt.com

a47d20ayd10nvkshqn50lrltgqcxb68n20gup62.com

a47dxn60c59pziulsozaxm59dqj26dynvfsnw.com

a67gwktaykulxczeueqf52mvcue61e11jrc59.com

axgql48mql28h34k67fvnylwo51csetj16gzcx.ru

ayp52m49msmwmthxoslwpxg43evg63esmreq.info

azg63j36dyhro61p32brgyo21k37fqh14d10k37fx.com

cvlslworouardudtcxato51hscupunua57.org

cyh44jud50g33iuarlzgqbup22fqisixf62kr.org

d10h34othyp62b18lyfwnzazj26p42fud50gzc49.biz

d20iwe51ftitg53lvl18a27hvlqjyjtd20gue61.com

dqhzhtbto21h14lvp12iqhtlrnxasarcte61.biz

drp42i25ati55m69pvgza57nyh34hwk57i55m19n60.ru

iqcqmrn30iuoubuo11crfydvkylrbtmtev.info

iqo11c69mud20krk57j16fqnrfwgva67oraql48.com

isjqn30a27hwgqbxnxksi65hrnsgyc49mylt.biz

iupqhxfwpylxm29jsexovj16cqfybwb68aw.org

iwpslvesj26i65oynxhtoyc39o41asdvnqc59.com

j36lxf52hsj56itc49lqayoveymwfzosi15jw.org

jshvprc29ntm69p52j36a17m39ozk67g53crfqow.net

jvbtore21fzm39fse51p32auizl28gxaul68px.com

k17g63l58jucvd30brhyovhsptd10lxd60gqfv.biz

k27ori65cve61kvc49hxptdrb48myo61fueves.org

k47isgzkxp62o51etmwazewmvpvgwbvmvfz.com

kqd60lvlsg63bsg33e11i55kvo41nrj36hzbthr.info

kvm49mynrd60l48lynre21hqfun20a47hyn20kq.org

kyoqpxg53nuf42g43oqo21l48a17d40o31k67j16h44.org

l18k17mzpum69jvlyp62c29hzeyi25kta47a37lv.ru

n50owhwguj66evkug33ewntn10n40puhtlxay.org

nrd30j46cxnwmyc69bscrcyiuhvf22otg43mq.com

nub58p52b38ismtg63mwlwm29evd20g13f52otb68.info

nxhyosg43a47exhum19g23f52fro21byayk57fs.info

o21mwm29gzouhvpub68g43dzntgzn30aultd30.net

o31j16n30eyiql58btmxe21euowb38pxf22b68ou.net

psgsgumukxb18b58dxd40e31f22g53a37bzmxcz.com

pxoxgzkqmqp12a47azjzpze11hteri35iti45.info

pyn30h64krm69bwf12azp52fulskvh24m19nrjy.org

(output truncated)

查看请求的域的长度,我们可以观察到一个模式。首先,我们将删除TLDs (com, info, net…),然后计算每个字符串的长度。

$ cat dns.log | bro-cut query | sort -u | cut -d . -f1 > domains-withoutTLD

$ for i in `cat domains-withoutTLD`; do echo "${#i}"; done | sort –u

34

35

36

37

38

39

40

41

42

43

所有这些字符串都在34到43个字符的范围内。偶然?实际上,ZeuS botnet的一种变体——所谓的ZeuS Gameover——以实现P2P和域生成算法(DGA)通信来确定当前的命令和控制(C&C)域而闻名。当这些机器人无法通过P2P与僵尸网络通信时,就使用DGA。由ZeuS Gameover生成的域名由长度为32至48个字符的字符串和以下TLDs之一组成:ru、com、biz、net或org。该列表包含超过1000个域名,并且根据当前日期每7天更新一次。

这样的正则表达式可以用来搜索ZeuS域:

[a-z0-9]{32,48}\.(ru|com|biz|info|org|net)

据报道,2013年最活跃的银行木马之一是“宙斯游戏”(ZeuS Gameover),还有另一款著名的恶意软件“城堡”(Citadel),该软件瞄准了大量关注欧洲和中东的金融机构。

Kleissner.org维护一个包含1000个有效的宙斯游戏域的列表,并且每周更新一次。一个简单的bash脚本可以比较从dns获得的域列表。登录Kleissner.org发布的名单:

$ cat dns.log | bro-cut query | sort -u | > domains

$ for i in `cat domains`; do grep $i ZeusGameover_Domains; done

二、SSL流量和Notice.log

恶意软件作者正越来越多地使用SSL通信来屏蔽与C&C服务器的通信、数据过滤和其他恶意行为。由于解密SSL通信在大多数情况下都不可行,因此恶意软件分析人员必须使用其他技术来识别加密会话中的恶意代码。TLS或SSL握手失败、可疑的、无效的或奇怪的证书都可能是网络流量中如此糟糕的指标,好消息是,Bro,默认情况下,已经为您做了一些分析,表明您可能会对网络活动进行调查。

为了演示Bro如何帮助找到这些指标,我们将查看sample2.pcap

$ bro -r sample2.pcap local

查看工作目录中已经创建了一个通知日志文件,以及http.log、ssl.log和其他文件。

让我们来看看notice.log的内容:

$ cat notice.log | bro-cut msg, sub

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.tl6ou6ap7fjroh2o.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.vklxa6kz.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.5rthkzelyecfpir56.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.dctpbbpif6zy54mspih.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.getvdkk6ibned7k3krkc.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.hstk2emyai4yqa5.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.icab4ctxldy.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.bnbhckfytu.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.e6nbbzucq2zrhzqzf.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.cvapjjtbfd6yohbarw5q.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.zhbohcqeanv5hw.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.v6onqj4tmlmcchw23bl.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.gaqq6ld5gdgib.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.hlixz2cz43jepqwl.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.jn4k5f5wi65edy7emll.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.4geh5kzuywu3u.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.rshopmsscpfbw6p.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.c2rwawybhf.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.3gbl5nlxxs37ycdbhvcr.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.qhpomorewmsgxkg2d.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.wtytpviziqgpxsz.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.f5zhq25qq.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.3ktww4bg.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.c2nhdwaukm.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.iqm3bvunu.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.pts5agysxnvyyvbysfv.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.ygn472gapjnkkbplith.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.jaaok2kcxn.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.ktq2go444i.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.ferqncujta3wvl.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.2u5j3bw2r.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.uopxo7ik3i2nti.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.2ugfspjvd3tjaa.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.vjonqvyku.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.6canpulqbqdbqkxc6is.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.42ixw6g5fu44w7sth.net

SSL certificate validation failed with (unable to get local issuer certificate) CN=www.kqwm2iwsvh4xd2q.net

(output truncated)

这看起来又很可疑了!

现在让我们来看看ssl.log的内容:

$ cat ssl.log | bro-cut server_name, subject, issuer_subject

www.seu4oxkf6.com CN=www.tl6ou6ap7fjroh2o.net CN=www.tbajutyf.com

www.fjpv.com CN=www.vklxa6kz.net CN=www.ohqnkijzzo5vt.com

www.pdpqsu.com CN=www.5rthkzelyecfpir56.net CN=www.qbboo7mcwzv7.com

www.vkojgy6imcvg.com CN=www.dctpbbpif6zy54mspih.net CN=www.m6hoayo5cga.com

www.dbyryztrr7sui3rskjvikes.com CN=www.getvdkk6ibned7k3krkc.net CN=www.7pz4gaio6uc25dyfor.com

www.xqwf7xs6nycmciil3t5e4fy5v.com CN=www.hstk2emyai4yqa5.net CN=www.wc62pgaaorhccubc.com

www.rix56ao4hxldum4zbyim.com CN=www.icab4ctxldy.net CN=www.wmylm3gln.com

www.uabjbwhkanlomodm5xst.com CN=www.bnbhckfytu.net CN=www.w4rlc25peis46haafa.com

www.dl2eypxu3.com CN=www.e6nbbzucq2zrhzqzf.net CN=www.cbj5ajz4qgeieshx32n.com

www.ebd7caljnsax.com CN=www.cvapjjtbfd6yohbarw5q.net CN=www.brbqn4rqhscp4rdq.com

www.qnqxclmrk2cqskkb732czjma.com CN=www.zhbohcqeanv5hw.net CN=www.w3rfg432.com

www.bxstw.com CN=www.v6onqj4tmlmcchw23bl.net CN=www.yc2xz27yoe76.com

www.b6lwb6v.com CN=www.gaqq6ld5gdgib.net CN=www.nu6u7osxzhmgx64.com

www.xf3225vc7drvcgborjll3.com CN=www.ryfg74xnxjg42ln3.net CN=www.y6bn3trq5cesxk.com

www.7dezfrpxuvmtr.com CN=www.svhbg7k2ed7ijcloj2.net CN=www.tfijljrmlqi.net

www.pcnia4i6e6w.com CN=www.yastvwre5fvpq3av.net CN=www.c6dmymzw.com

www.zvnbxtgu5dwe6lwc.com CN=www.u7c2brldvuk3xil.net CN=www.owgtwdiazfmzmwu6a5.com

www.ofbw37.com CN=www.qyccfgkjb.net CN=www.gs52pdnqyd.com

www.zr7kfc25mofcq.com CN=www.oi6z76t4.net CN=www.oe7gv5kxhix2i7eil.com

www.cmeh4agzyphi.com CN=www.jnqlvjcoou26znx.net CN=www.p4tgeg6dhp.com

www.k2u3bnbhxhpl.com CN=www.llhtnj3yyk.net CN=www.qotouwlbhjt.com

www.bneghg3axzl75sn7k2pdzor.com CN=www.shucgk26k4x5inet.net CN=www.j4n2j3sz57cf.com

www.ytedf3vqd4hxjo7rmhe6.com CN=www.noyxmydlc3ncgwv4t7hc.net CN=www.xem2wczmpqtypvzzpsex.com

www.by4seu7gjht7.com CN=www.wgrv4vpyx.net CN=www.eyvoebmi4ls6o6.com

www.cx7dg5bcn4cy.com CN=www.lipko2t5yqirjrqn2e.net CN=www.l4kvblp6bd.com

www.zn26rblhi.com CN=www.5nmv7zbdqdvgbfem6l.net CN=www.l3zkpiwawmpwjbzf.com

www.ecajni2stg3733w4jgi75.com CN=www.k3dbsxb423am5bwcb.net CN=www.uuwdimryu2gi42.com

www.x3os5xrkcr7a2rpmxre2.com CN=www.km6ptswm7mo.net CN=www.giovpc7o3.com

www.2c27bhbej.com CN=www.pymflkqpqdgghnfj.net CN=www.jocupasu2o6b2af2tn.com

www.4x4fp.com CN=www.icab4ctxldy.net CN=www.wmylm3gln.com

www.busdvimuibiundyob3e74js.com CN=www.xwwc4mvab66dnn.net CN=www.7hhuhzlztld46.com

www.zk2sv4vbwtanvh6x.com CN=www.bjxrmwnhp44enzypv6dc.net CN=www.b2ond2dxj.net

www.nijvbs5nuyn7zkemgi.com CN=www.wgwr7qn7v3j.net CN=www.u57w6yc5rvv.com

www.hamsnp.com CN=www.ge26nt2rx.net CN=www.aewmz33hq6rn7x7nud3.com

www.gsen3cievf3px7anzc6j.com CN=www.3zz5we62e.net CN=www.w7sb5mdv7w.com

www.3lwerxmlqmq2jsjioqgx5kkyc.com CN=www.ohfe52bk6gyfzojwgts.net CN=www.jhzi7jmhledqxg.com

www.2ipe23pugsiii.com CN=www.6hfs2womid.net CN=www.aq3w5zrobmejm.com

www.f3vzvxsedn.com CN=www.eelcaqcncssfzliilic.net CN=www.xshjb4uihtmpxh.com

www.hh62esff4qj5.com CN=www.mqhz74wxch4gj.net CN=www.wcmcdpazt7iw7g.com

www.juipuxm76hu6df6.com CN=www.5nmv7zbdqdvgbfem6l.net CN=www.l3zkpiwawmpwjbzf.com

www.6ll3wnw5dmg.com CN=www.suy5hv542.net CN=www.5mypgv7tgzypyaz63w.com

www.h5hgbrs75gl3c5uh5xnld3i.com CN=www.4x4j6xhtk5qh.net CN=www.rmybfv4mrpzlcicfg.net

同样,使用broo -cut和其他命令行工具解析这些日志以生成可疑域的列表也很简单。该列表可以与已知恶意域的列表进行比较,或者与各种域声誉服务一起使用。我们将在这篇文章的后面讨论如何利用威胁情报源。

让我们继续分析。仔细查看httplog可以发现在user_agent字段下有一些潜在的有趣的user_agent:

$ cat http.log | bro-cut user_agent | sort –u

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)

cgminer 2.7.5

您能看到cgminer用户代理吗?众所周知,恶意软件可以使用不寻常的、奇怪的或独特的用户代理作为HTTP请求头的一部分。Robert Vandenbrink写了一篇很好的研究报告。

在本例中,用户代理指示我们正在查看一个旨在提供比特币挖掘流量的bot。有关这个特别的机器人的更多信息,请查看Liam Randall在他的GitHub上的解决方案和脚本

三、新的文件分析框架

文件分析框架是Bro 2.2引入的一个新特性,它为网络分析师提供了许多新的功能。最强大的功能之一是能够基于多个标准从网络流中提取文件:地理空间(即每个原产国)、基于签名、基于目的地等。

文件可以从各种协议中提取,包括FTP、HTTP、SMTP和IRC。在不久的将来,还会加入bt和SMB等。

感谢强大的BRO语言,新的文件分析框架可以结合行动做可怕的事情,如查找恶意软件散列注册表,上传到virustotal,布谷鸟沙箱,甚至推特你的分析结果!

为了演示它的一些功能,我们将分析sample3.pcap。像往常一样,我们开始使用BRO重播捕捉:

$ bro -r sample3.pcap local

您应该有一个新的日志:files.log。让我们来看看它的内容:

$ cat files.log | bro-cut fuid, mime_type, filename, total_bytes, md5

FC7cMq18xeqtT9IGD3 application/zip - 31044 0cbc25ade65bcd7a28dd8ac62ea20186

我们有一个唯一的入口。我们没有文件名,但是Bro记录了MIME类型,甚至为我们计算了MD5哈希!

我们能提取那个文件吗?我们当然可以!打开选择的文本编辑器,并将这些行保存为extract-all.bro

event file_new(f: fa_file)

        {

                Files::add_analyzer(f, Files::ANALYZER_EXTRACT);

        }

恭喜你!你写了你的第一个Bro脚本。接下来,再次对Bro执行捕获操作,这次用刚刚创建的新脚本替换“local”脚本。您可能需要以root身份运行它:

$ bro -r sample3.pcap extract-all.bro

这个命令将创建一个新的目录extract_files,其中提取的所有文件将位于:

$ ls extract_files

extract-HTTP-FC7cMq18xeqtT9IGD3

让我们确认一下我们在看什么样的文件:

$ file extract-HTTP-FC7cMq18xeqtT9IGD3

extract-HTTP-FC7cMq18xeqtT9IGD3: Zip archive data, at least v2.0 to extract

$ xxd extract-HTTP-FC7cMq18xeqtT9IGD3 | head -10

0000000: 504b 0304 1400 0808 0800 208f 1c41 0000  PK........ ..A..

0000010: 0000 0000 0000 0000 0000 0d00 0000 6234  ..............b4

0000020: 612f 6234 612e 636c 6173 73c5 7979 5c9b  a/b4a.class.yy\.

0000030: 5b76 d8b9 9240 427c 8010 1606 db18 63fb  [v...@B|......c.

0000040: 6110 606c 24b0 0783 0149 0801 daf7 0d09  a.`l$....I......

0000050: edfb 2eb4 22e4 7979 33c9 bc74 3259 babd  ....".yy3..t2Y..

0000060: d725 93ce 6bac a493 f4bd e729 76e3 cc8c  .%..k......)v...

0000070: d32d 69d2 25d3 769a a64d 9ba6 49da a4cd  .-i.%.v..M..I...

0000080: d2c9 d2e9 b44d 9c73 0578 c36f dee4 af9a  .....M.s.x.o....

0000090: 9fbe 7bbe 7bcf 3dfb 39f7 9ecf 3fff a73f  ..{.{.=.9...?..?

$ xxd extract-HTTP-FC7cMq18xeqtT9IGD3 | tail -10

00078b0: db66 0000 6234 612f 6234 642e 636c 6173  .f..b4a/b4d.clas

00078c0: 7350 4b01 0214 0014 0008 0808 0020 8f1c  sPK.......... ..

00078d0: 4167 fdc8 0309 0700 00a7 0f00 000d 0000  Ag..............

00078e0: 0000 0000 0000 0000 0000 0034 7000 0062  ...........4p..b

00078f0: 3461 2f62 3465 2e63 6c61 7373 504b 0102  4a/b4e.classPK..

0007900: 0a00 0a00 0008 0000 208f 1c41 0000 0000  ........ ..A....

0007910: 0000 0000 0000 0000 0400 0000 0000 0000  ................

0007920: 0000 0000 0000 7877 0000 6234 612f 504b  ......xw..b4a/PK

0007930: 0506 0000 0000 0700 0700 9401 0000 9a77  ...............w

0007940: 0000 0000                                ....

虽然文件头中的第一个字节(也称为魔法数字)表示ZIP文件,但是文件的内容表示Java类文件的存在。我们可以很容易地通过执行:

它将Java类提取到b4d目录。

我们现在先不讨论Java类的分析,但是您能根据我们目前的信息确定这是否是恶意文件吗?让我们看看其他人对这个文件了解多少。还记得包含在files.log中的MD5散列吗?在Virustotal上的快速搜索显示,我们正在查看一个Java 0天,它包含在黑洞利用工具包(CVE-2012-4681)中。

如您所见,使用新的文件分析框架的可能性是无限的。加上一点BRO编程语言的知识,一些python脚本的优点和一些api到恶意软件分析服务,你有一个可怕的鸡尾酒!

四、Bro,威胁情报和CIF

威胁情报是安全的新圣杯。对于安全生命周期的所有阶段,从预防、检测、事件响应、遏制和法医分析,找到与恶意威胁相关的和最新的信息都是关键。分析人员需要的最常见的威胁情报类型是与恶意活动相关的IP地址、域、url和文件哈希。

许多组织提供免费的数据提要,可以与新的Bro的Intel框架一起使用,以记录网络流中看到的数据,比如来自ZeuS和SpyEye跟踪程序、恶意软件域、Spamhaus、Shadowserver、Dragon研究组等的数据。

虽然您可以定期下载这些数据提要,但是维护一个由您的工具实际可用的更新存储库可能是一项艰巨的任务,尤其是考虑到所使用的数据源数量和格式的差异。这就是集体情报框架(CIF)发挥作用的地方。

CIF现在在版本1(稳定版)上,允许您解析、规范化、存储、处理、查询、共享和生成威胁情报的数据集。

安装了一些CIF服务器后,我可以告诉您它有些复杂(可能不复杂,但相当乏味),所以如果您想设置自己的实例,我将参考官方文档(请参阅下面的参考资料)。对于本节的其余部分,我将假设您可以访问CIF的运行实例。

要启用Bro Intel框架并允许集成CIF提要,请将这三行代码添加到您的本地代码中。BRO文件(安全洋葱在/opt/bro/share/bro/site/local.bro):

@load frameworks/intel/seen

@load frameworks/intel/do_notice

@load policy/integration/collective-intel

CIF主要用于两种方式:查询关于IP地址、域或url的存储数据,或者根据存储的数据集生成提要。可在版本1中找到的资料如下:

https://code.google.com/p/collective-intelligence-framework/wiki/API_FeedTypes_v1

注意,如果没有安装CIF,这个命令就无法工作。如果您无法访问CIF服务器,您可以在这里获取为Bro格式化的文件的副本(请注意,在下载时,该文件将过时,因此仅用于测试目的)。

下图显示了以CIF的本机格式(不使用BRO插件)生成的文件的内容。


为了导入我们刚刚生成的新数据提要,我们需要配置Bro的输入框架。要做到这一点,请向本地添加以下代码行。Bro文件:

redef Intel::read_files += {

        "/opt/bro/feeds/domain-malware.intel",

};

Where /opt/bro/feeds/domain-malware.intel是您放置CIF生成的文件的地方。您可以添加任意数量的文件。有关不同的方法的更多信息,参阅these.intel文件检查http://blog.bro.org/2014/01/intelligence-data-and-bro_4980.html。

现在输入框架将从基于文本的文件中读取信息,并将其发送到Intel框架进行处理。

为了演示Bro和CIF的组合用法,我创建了sample4.pcap是一个简单的捕获,它包含对恶意域(winrar-soft.ru)的DNS查询。在完成上面描述的所有更改之后,让我们与Bro一起重播这个捕获:

$ bro -r sample4.pcap local

请参见新文件,intel.log已创建:

$ cat intel.log #separator \x09#set_separator ,#empty_field (empty)#unset_field -#path intel#open 2014-03-07-21-28-09#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p fuid file_mime_type file_desc seen.indicator seen.indicator_type seen.where sources#types time string addr port addr port string string string string enum enum table[string]1394223877.224159 C7J79H2v6YLWMaJEk6 192.168.68.138 54212 192.168.68.1 53 - - -winrar-soft.ru Intel::DOMAIN DNS::IN_REQUEST CIF- need-to-know#close 2014-03-07-21-28-10

由于winrar .ru包含在CIF生成的feed中并导入到Bro中,现在我们可以识别任何连接到这个恶意域的尝试。

结论

安全分析师永远不会有足够的工具或资源来对抗恶意软件。Bro和CIF是每个恶意软件分析师都应该知道的两个无价的资源。

正如它们的创建者所言,Bro不仅仅是一个IDS。Bro是一个功能齐全的网络分析框架,它是用一个强大的工具Bro编程语言创建的。

如果你想知道更多关于Bro, CIF,恶意软件分析或网络取证检查参考部分。

你可能感兴趣的:(利用Bro和集体情报框架(CIF)识别恶意软件流量)