*文章原创作者: ArthurKiller,转载请注明来自FreeBuf(FreeBuf.COM)
前言
IT的全称为information technology,即为信息科技。可以说在这个网络世界中,信息即为这个世界中的根本,而掌握了信息也就掌握了IT世界,这个理论同样适用于网络安全行业。任何网络攻击,前期最重要的部分即是信息收集。个人如果要对一家大企业做全面的信息收集是很痛苦的,只有APT组织或者政府才有那个能力。虽然我是一个菜鸟,但是我还是想尝试看看搭建一个个人情报收集系统是否可行。小菜一枚,不喜勿喷。
如果要收集信息,首先要做到的就是隐蔽性,好比众多的APT攻击一样,数年之后才会被发现,所以在写payload和传输的时候尤其要注意。其次就是兼容性,因为你的收集目标不单纯是windows,同时也包含Linux,android,iOS,网关设备等等。剩下的就是管理性,搭建起情报收集系统后,你会收到众多信息,你需要一个强悍的数据库对其进行存放和查看。
我先简单看一下从哪些地方可以对流量进行收集,初步分析之后,想着可以在VPS上建立一个数据整理系统,当数据传输到VPS服务器后,则会由Logstash负责对数据进行加工处理导入到ES所在的控制服务器中,然后由Kibana来查看数据。
注:因为涉及到的系统,环境等太多,要把这些说完差不多可以出一本书了,所以我打算用windows,网关设备和ELK来做个例子,以达到抛砖引玉石的效果。
数据管理
正在纠结是用什么数据库的时候,朋友推荐了ES,梳理了一下,打算采用ELK先把数据存储系统搭建起来。ELK的全称为Elasticsearch Logstash Kibana,是很多企业必须精通的索引系统。说起ELK就得说说Elastic公司。ELK是该公司的开源项目之一,旗下还有很多开源项目。ELK主要是做系统日志分析,管理和存储的,但是因为它高效的索引技术,可以拓展的地方还有很多。
Elasticsearch:简称为ES,属于一个索引存储系统
Logstash:数据加工系统,可以使用这个工具将数据导入到ES内。
Kibana:数据可视化平台,基于Java编写,可以从ES中读取索引数据,建立可视化模型。
在以前,我是用Mysql和Coreseek来进行大数据查询。但是只要数据一旦过亿,对于服务器的运算压力是很大的,就算用Coreseek做索引也不能满足基本需求。这个时候需要一个全新的索引方案。原本我是想用Solr,后面同事和我说可以试试看ES。我简单看了一下,FreeBuf上也有ES搭建的教程。我原本以为我可以很快的把系统搭建起来,随后做数据优化处理。但是,在实际的搭建过程中,我遇到了很多技术壁垒,并且在网上也没有相关的解决方案,当时我一直以为是我没烧香导致BUG出现了。现在问题解决了,所以我打算出篇文章详细的说一下。
神坑-更新相关环境
ELK支持跨平台操作,也就是说,它基本上支持市面上很多主流的操作系统,Mac OS,Center OS, Windows, Ubuntu等。我的测试系统是Win 10 64位。首先大家可以去Elastic的官网下载最新版本的Elasticsearch Logstash和Kibana。Windows用户安装的话直接解压就行了,linux则需要自己系统的安装指令对其进行安装。
Elastic官网地址:https://www.elastic.co/
然后是必须安装Java最新版本!最新版本!最新版本!这里特别要注意,我的java版本安装时间比较久了,可以支持brup suite之类的。我以为没什么问题,但是Kibana就是怎么都没办法启动,后面尝试对Java进行更新才解决了。更新java后记得设置环境变量。
至于服务器环境的搭建,大家可以随意。有些用的是apache,有些用的是windows service,我采用的是简单高效的Nginx。这个没多大影响,大家可以自由搭配。
Windows用户可以运行bin文件下的bat文件启动
Linux用户可以运行以service命令启动
然后,接下来我就得说说我遇到的各种技术问题。
神坑之端口占用
Windows用户有些可能会碰到启动Elasticsearch .bat或者Logstash.bat后一闪而过。大部分原因主要是因为端口占用的问题。Kibana的端口是5601,ES的端口是9200。切记,切记!当然,你也可以修改配置文件来更改默认端口,但是我不建议你这么做,到后面你要进行二次开发的时候你会碰到一对的BUG。你以为你开发的是代码,实际上你开发的是BUG。。。
神坑之指令更新
我之前已经介绍过,导入数据要用的工具主要是Logstash,当然你也可以查看官方开发文档自己写一个导入脚本。Logstash这个工具可以使用-f命令读取配置文件,然后进行导入。配置文件主要分为了三个部分,分别是input,filter和output。以为FreeBuf之前有出过一篇《ELK大数据查询系列:Elasticsearch与Logstash基础篇》,里面有Logstash配置文件的代码。我原本想以那个配置文件做修改的,但是却发现那个配置文件不适用于新版本。
我在运行这个配置文件的时候爆出了很多的错误。在查阅官方文档后,可以确定盒子的Logstash版本比较老,那篇文章的指令并不适用于新版本的Logstash。Logstash新版本做了很多的改变,首先是新版本已经移除了protocol指令, 其次则是host指令改为了hosts等。新版本增加了很多新特性,老版本的配置文件并不适用。
神坑之字符转码
更改完配置文件后,我分了五条数据进行测试,测试量比较小,在导入的过程中发现中文存在乱码。主要原因是在output模块处没有加上字符解析代码。在Logstash官方文档中,字符解析用到的指令是codec,为了支持中文,我们往往都会加上UTF-8字符类型,那么直接在output处加上codec => json指令。因为json命令对于文件内容的读取格式默认为UTF-8。
神坑之sincedb文件删除
有时候,会碰到Logstash导入不进数据的情况。其中之一的原因是因为每当导入一个文件时,最后一个字节处理保存在sincedb中。它是通过inode定期读取出来的文件,如果文件有相同的inode号,程序会认为是相同的文件。只要把sincedb文件删除了就行。Sincedb文件会默认保存在home目录或者windows用户目录下,当然大家也可以通过sincedb_path参数指定路径来方便删除sincedb,Linux用户要是嫌麻烦,那么可以指定sincedb_path为/dev/null。这样可以欺骗Logstash不去读取sincedb文件。
神坑之导入大数据
在我做完几个小数据测试,没问题后,准备开始导入一个5G多的文件。在导入的时候,却停一直不动。尝试用该命令-vv命令查看运行状态,发现根本就没有写入数据。当时我去Google这个问题,有个老外也是一样的问题,后面他解决了,我问他怎么解决的,他说换了一个系统就好了……WTF?!我于是开始以为是新版本不支持windows,然后尝试了centos,ubuntu,kali等,但是都不行。当时我就想着,一定是我没为电脑开光导致的。
玩笑归玩笑,问题还是要解决的。只能硬着头皮把Logstash的开发文档全部看一遍。最后终于找到问题原因了。主要原因是ignore_older的默认值为86400。ignore_older的作用是如果这个文件的创建时间大于等于你设定的秒数,那么将会忽略不读取,而86400秒转换后刚好是24个小时,也就是一天。于是将ignore_older设定为999999999999。
神坑之索引任意文件
幻想一下,当你的payload在多个系统运行后,你会收到各种名称的信息。在使用Logstash索引文件的时候尤其要主要path的格式。如果我将收到的数据保存在D:\bigdata\这个目录下,而文件格式为CSV。在用Logstash索引任意CSV文件的时候不能是D:\bigdata\*CSV,必须是D:/bigdata/*.CSV,一个是/一个是\,路径分割符不一样,这点要注意。
最终代码
折腾了几天这个配置文件终于搞定了,下面就是最终的代码。
input {
file {
path => "D:/bigdata/*.CSV" #这里是导入文件的路径
start_position => "beginning" #读取开始位置
ignore_older => 999999999 #请看神坑-之导入大数据
codec => plain {charset => ["UTF-8"]} #UTF-8读取文件内容
}
}
filter {
csv {
separator => "," #文件分隔符
source => "message" #我感觉这个可以不用要,加着也没什么影响
columns => ["id","column1","column2","column3","source","column4", "column5","column6"] #为columns命名
}
mutate { remove_field => ["message","host","@timestamp","path","@version","id"] } #删除不要的columns
}
output {
elasticsearch {
hosts => "localhost" #要导入的ES地址
index => "database" #index命名
document_type => "database"
}
stdout {
codec => json #设定输出数据格式为json
}
}
Operating System信息收集
在开放式系统中,大部分可以利用的主要是android,iOS, Windows和Linux这么四大主流操作系统。而这次我们以windows为例子。在才开始构造payload的时候,我们必须要考虑到payload的简洁性,隐藏性等,以一个rootkit的标准去构思这个东西。在抓包的时候朋友们也和我推荐各种抓包工具,比如wireshark等。但是这里有一个问题,普通用户是不会去采用这些抓包工具的。如果在payload中强行安装这些插件,可能很容易引起杀毒软件或者用户的警觉,如果碰到对计算机稍有常识的人,一旦查看进程列表必定会引起怀疑,这样在隐蔽性这里就完全失败了。
综合考虑后决定用Netsh这个工具。Netsh这个工具是windows系统中自带的,可以直接在CMD命令下启动,那么也就是说,我们可以直接写一个文件,调用其bat文件,然后bat文件再调用其CMD指令就可以达到这个目的。
netsh trace start则会开启抓包任务,而scenario=InternetClient则会选用抓取用户InternetClient中通过的数据包,当然你也可以设置别的scenario,除了HTTP流量外,也可以抓取到本地的流量等。
而level=5则会抓取全部的网络流量。tracefile则是指定抓取到数据包保存的路径。因为在执行任务的时候,会采取多次抓包任务。那么在指令后再添加overwrite=yes。输入以下指令后就会开始抓取数据包。
netsh trace start capture=yes report=no persistent=yes scenario=InternetClient level=5 tracefile=C:\1.etl overwrite=yes
输入以下指令则停止抓包,并且生成抓包报告。
netsh trace stop
因为Logstash是没有办法对etl文件进行解析的,所以我们需要将etl再次编译成CSV文件,所以再使用以下命令将etl转换成CSV。
netsh trace convert input=C:\1.etl dump=csv output=C:\1.csv report=no
这时几个非常重要部分都解决了,可以将这几个指令加入到bat文件中,然后加一个循环指令。同时在bat文件路径下建立一个VBS文以此来隐藏cmd窗口。至于数据传输的问题,大家这里可以自由发挥,可以选用windows自带的FTP工具,或者直接用HTTP来传输。CSV文件传到VPS服务器后,Logstash就会解析数据并建立ES索引。
这个过程虽然略有瑕疵,但是完全基于windows自带的工具,敲打几个命令就完成了整个信息收集过程,在其隐蔽性上已经尽量做了保障。针对其它系统也是一样。这个步骤要表达的重点,主要就是隐蔽性!君子报仇,十年不晚,要以这个心理来构造各种各样的payload。至于传播方式很简单了,搞个免费VPN,破解软件什么的,到时候有一堆人来下载的,而你也就构建起了自己的被动式开放系统情报收集平台。
硬件设备
当然,除了被动式收集以外,我们也同样可以采取主动式收集情报。
Lan turtle
Lan Turtle会伪装成一个USB以太网适配器,但是它内置了一个虚拟操作系统,可以用来加载任何恶意脚本,以便实现中间人攻击。
一般情况下,Lan Turtle会和路由器交换机来配合使用。使用Lan Turtle进行ARP窃听,同时跟踪其交换机,路由器,防火墙等网关设备的登陆口令。获得登陆口令后,用这些设备做一个流量镜像,将流量备份到受控制主机,以此来查看整个内网中的网络通讯。
光纤分流
这个有些高级,只有XXX搞过这个东西。现在城市里面大部分都接入光纤了,但是物理黑客们可以尝试对其光纤系统进行一个分流,以此来达到窃听的效果。一般小区的光纤管理箱都是破旧不堪,很容易就能接触到。这里我们需要用到这么几个东西,光纤耦合器,光纤熔接机和光纤分流器。这么三个东西加在一起就组成了一个完美的分光器。你可能有疑问怎么才能搞到这些东西,很简单,我们有万能的淘宝!
以最低的价格来算,这个东西不超过200块钱。其操作也非常简单。先剪断目标的光纤,然后用光纤熔接机将目标的光纤和光纤分流器结合在一起,随后将多出来的一截光纤线用光纤熔接机和光纤交换机或者其他光纤解析设备结合。这样,你就可以持续性获取非常全面的网络交流数据。
其它
实际上,针对硬件对网关设备进行情报收集的思路还有很多,比如什么Bad USB,移动信号降级攻击等等。而这里只是列出两个作为例子。大家可以脑洞更大一些,扩展自己的思路。
总结
高级的情报收集系统和APT攻击并无太大区别,这篇文章主要表达的是在现有的材料和技术下,一个普普通通的技术人员也可以造成很严重的网络威胁。我们可以计算一下,一个VPS一个月我算多点大概200块,Lan Turtle交往税收运费后大概在500人民币,分光机差不多在200,Bad USB大概也就300块,USRP B200大概也就4000人民币左右等。也就是说,一个人要进行大规模的监控活动,花费可以控制在万元左右,而那些信息所造成的损失是无法估量的。当然,这篇文章中还有诸多细节没有见到,比如说光纤接口接到交换机后的数据分析,传输,payload整体的代码示例等。本人小菜一枚,文章略水,主要是表达一个基础情报收集框架的模型结构,安全无绝对,谢谢观看。
*文章原创作者: ArthurKiller,转载请注明来自FreeBuf(FreeBuf.COM)
不容错过
- FB视频:纪录片《暗网》之勒索软件篇FB视频2016-04-02
- 只用一个WiFi,渗透进企业全部内网360天巡实验室2016-06-22
- 【原创连载小说】《杀手》第一章:网络杀手kill472017-03-18
- 又是雅虎,又10亿账户泄露!论数据泄露谁与争锋孙毛毛2016-12-15
0day
已有 25 条评论
实力贴,膜拜楼主
不知道为什么,看到你踩坑我好开森……
小伙子不错,我们想把你派到美国
看到小编踩坑,就知道没看开发文档 就乱j8鼓捣,小编今年23,思维方式还是小学生的思维。
@ 常运 同意。很少开源产品的文档有ELK的这么全。作者所谓的“坑”并不是产品的坑,是自己瞎挖的坑。
另外标题是“情报收集”,但内容分明是常规的ELK日志平台,“情报”被吃了?如果“情报”就是指那些“日志”的话,当我没说。
年轻人好学是好事,也要多学学前辈们严谨的态度。
@ Astrong 前辈说的在理
我们这边有ELK这一套东西,奈何我是小白,学了好久怎么用,logstash之前遇到的一个坑是开始上传文件,发现Elasticsearch上面没有数据,后来才知道必须要设定一个从头开始读的字段。比较佩服楼主遇到问题后,将相关文档迅速读完并定位问题,这种能力很厉害~
虽然看不懂,但是感觉好厉害的样子啊
说实在的没怎么明白
@ Scales 和你一样,就看明白用中间人主动收集,被动那块呢?
是不是还有个续集?
和我想得不一样啊, 不一样
没怎么明白
一套光纤熔接机要几万到几十万,你的图都只是配件而已,左边是光纤清理工具,右边是光纤刀
@ 不知道哪里的文章 额。。。。没你说的那么贵。。。我现在已经办理了4至5条光纤线了,工作人员拿着光纤耦合机就来你家里面安装了,大到一个城市,小到一个乡镇都是这样。你说的应该是大型机器吧。。。没必要用那个。
成都啊
光纤分流的,一个光纤熔接机少说六千到一万……另外网络都有应答,发现断线主机房肯定都知道,派人来看发现多了一个线?,除了机柜能动手,其他地方不是架电线杆,就是埋地下的
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
分光 用在 信息收集 还是很少..
但是用在劫持..分光流量..倒是用的很广泛..
找到一定的接口就能劫持很多小区,网吧.学校..
当然用来抓数据也是逆天..尤其是抓支付宝.网银数据等等..尤其是自己在家用自己的家的wifi..
物理黑客…呵呵…呵呵…
网监?
这个我先收藏了,好好研究一下,膜拜
茶店子是成都的吗?
坑踩得还不够多…
logstash本身处理效率不高,不过好在你上面的配置里没有用grok。
接下来的问题是….你怎么从那些流量里找到你关注的东西,比如用户名和密码,或者通过流量还原出一份明文方式传输的文件?
前几天那个全国最大的webshell是不是就是被你分光了
我要喝茶[二哈]
茶店子。。。。。
@ evil7 我踩的坑比这个还多 他只研究了logstash 我还研究了kafka storm pyleus…