两项基于网络的“黑客”技术
两项基于网络的“黑客”技术
软件开发和测试中网络环境迁移和数据分析
1 导读
关于智能路由器的这两项技术的介绍,想想还是搞个比较有噱头的标题才能吸引人进来细看的。本文确实是介绍的两个关于智能路由器的hack技术,但是却是将这两项技术用于软件开发过程中的正途中的。当然如果有悟性,也可以将此技术用于不违法的恶作剧玩一下也无妨。
本文提到的两个基于网络的hack技术:
- DNS劫持
- 数据抓包
基本本质上就是路由器设备的两个主要网络功能:
- 网关配置功能
- 网关数据中转功能
但是用于软件开发的正途,就变换成下面的说法:
- 网络环境迁移
- 数据监控
2 概述
OpenWrt 可以被描述为一个嵌入式的 Linux 发行版,(主流路由器固件有 dd-wrt,tomato,openwrt三类)而不是试图建立一个单一的、静态的系统。OpenWrt的包管理提供了一个完全可写的文件系统,从应用程序供应商提供的选择和配置,并允许您自定义的设备,以适应任何应用程序[1] 。
智能路由器也就是智能化管理的路由器,通常具有独立的操作系统,可以由用户自行安装各种应用,自行控制带宽、自行控制在线人数、自行控制浏览网页、自行控制在线时间、同时拥有强大的USB共享功能,真正做到网络和设备的智能化管理 [2]。
近几年,智能硬件设备蓬勃发展,智能路由器也开始从实验室走了出来,开始商业化,目前市场上已经出现了各种主流品牌厂商的智能路由器。例如国内的:极路由,小米路由器,华为智能路由系列……
用户只需以较低的价格就可以入手体验到硬件配置良好齐全的智能网络硬件设备了。
[1] | Openwrt-百度百科 |
[2] | 智能路由器-百度百科 |
3 基本功能
基本上智能路由器能够提供除了普通路由器所有的网络功能外,还能提供基于Linux软件应用服务。
普通路由器网络功能如下:
- 支持PPPOE、动态IP、静态IP等宽带接入方式
- 支持TCP/IP、PPPOE、DHCP、ICMP、NAT等协议
- 内建DHCP服务器,同时进行静态地址分配
- 内建防火墙,支持IP地址、MAC地址、域名地址过滤,可灵活控制上网权限与时间
- 支持Upnp、静态路由
- 提供64/128位WEP加密,支持WPA、802.1X等高级加密及安全机制
- 支持远程Web管理,全中文配置界面
- 支持MAC地址修改与克隆
由于智能路由器硬件之上搭载的是openwrt本质上是一个订制的linux系统,所以还可以安装一些应用程序,完成普通linux的一些应用扩展功能,例如:
- 安装python,并运行其脚本
- 搭建nginx的web服务器
- 搭建git的服务器
- 搭建ftp服务器
- 搭建科学上网的代理服务器
备注
现在市场上的商用路由器,价格上远低于一台主机电脑,然后网络功能齐全,且带有大容量的硬盘,只要刷成openwrt之后,就可以拥有自己的私有的git服务器或者文件服务器了。
4 准备工作
在正式开始实验之前,要做一些准备工作:
- 一台支持openwrt的商用智能路由器硬件设备
- 将商用设备刷机成openwrt系统(替换原出厂订制系统)
具体的openwrt支持硬件设备列表见 官方文档 [3] 。
关于各种品牌的路由器如何刷ROM,可以到网上找各种教程,本文主要侧重openwrt后的应用,故刷机过程略去。
备注
本文是在小米官网购买的 小米路由mini ,然后根据教程刷成基于 openwrt 订制的 pandorabox
刷机成功后,就可以通过PC机远程路由了,就像远程一台普通的linux服务器一样,远程登录后,路由器终端界面提示如下:
基本的文件操作,网络操作等命令和普通Linux类似。同时openwrt也可以通过软件仓库安装应用软件,具体参见 openwrt软件包管理 [4] 。
例如,安装 nginx 应用程序:
opkg install nginx
上面对openwrt的基本知识进行了简单介绍,后面开始一些综合应用了。
[3] | Openwrt Table of Hardware <http://wiki.openwrt.org/toh/start> |
[4] | openwrt软件包管理 <http://wiki.openwrt.org/doc/packages> |
5 软件开发过程的应用
在本文中主要介绍两种综合应用:
- 网络环境迁移变换
-
- 可以在不修改构建的代码的前提下,灵活的进行 开发/测试/灰度/全网 不同阶段的网络环境的迁移变换
- 可以批量对N台机器进行统一的网络环境配置(DHCP)
- 网络数据监控
-
对于一些没有好的抓包工具的平台,例如:移动设备,进行数据包分析。
6 网络环境迁移变换
6.1 使用场景
典型的互联网系统里面最基本的组成就是各种应用服务器及网络设备。通过有效的网络硬件架构和应用软件架构进行部署,来对外提供正常的服务。一个典型的高性能web应用系统的架构精简后如下图:
主要结构为:
- 负载均衡 Nginx 服务器
-
对下属集群机器分配权重进行负载均衡和灾难热备
- 多台 Web Server 服务器
-
对机器的增加或者减少来实现计算能力弹性伸缩
- 高速共享内存数据库 Redis Server
-
在服务器集群机器之间形成快速的内存数据共享
- 持久化数据库服务器 DB Server
-
数据库应用系统的隔离存储
为了简化描述,网络的拓扑结构可以简化为,所有的这些机器连接在一台路由器上,机器之间通过网络进行互访。
6.2 基本需求
上一小节内容里面提到的网络应用架构可以代表一种最终态的生产力架构。但是在软件开发周期里面显然一般不能直接在最终生产力服务器平台上进行操作的。一般情况下,从原型开发,到内部测试,到邀请公测(灰度),到全面开放发布,此架构的各部分会经过一些平滑的迁移。
开发阶段的代码一般是千疮百孔的,所以必然会有一些错误的业务,产生垃圾数据,如果直接面向生产平台进行测试,无法必然的会污染现有的生产系统,这是应该尽量避免的。
所以一般情况下,上述的网络架构体系需要进行三份拷贝:
- 开发组系统
- 测试组系统
- 生产组系统
对各种机器进行编号成:1~12号,如下图:
那么在开发和测试的时候可以通过对网络的修改形成比较平滑的迁移测试:
- 完全开发阶段。1-2-3-4
- 开发测试阶段。1-2-7-8 或者其它组合
- 完全测试阶段。5-6-7-8
- 灰度发布阶段。5-6-11-12 或者其它组合
- 完全发布阶段。9-10-11-12
6.3 实现方法
所有的这些网络迁移有个前置条件:在代码中不要使用具体的IP,而是统一使用域名来定义机器名称。
这样的好处有:
- 可以方便的做负载均衡
- 可以通过修改DNS来做域名和机器的映射
关于DNS的定义,在此不再赘述。其功能简单来说:就是网络应用程序在向某个域名请求内容时,其实并不是直接向真实的主机发送,而是先向域名服务器进行查询,得到对应的IP地址,然后才指向具体的主机上的服务进行请求。
基于以上的原理,如何进行网络迁移就变得很容易了:只需要修改机器的DNS解析,就可以设计出自己想要的网络集群组合了。
有两种方式进行修改:
- 本机修改
-
修改本机hosts,不使用额外的DNS服务器
- 网关修改
-
建立DNS服务器并进行解析设置
6.3.1 本机修改
在linux机器下面, /etc/hosts 文件里面修改地址解析。
关于/etc/host,主机名和IP配置文件:
Hosts - The static table lookup for host name(主机名查询静态表)
vim /etc/hosts
进行了相应的修改的机器上面再对域名进行访问时,就直接使用本机解析,不再向其它DNS服务器请求解析。
如果没有做物理的分布式部署,所有的服务都搭建在本机上,那么可以直接使用此方法。但是如果是实现了物理分布式部署,则可以通过DNS服务器及网关配置,实现同一网关下所有机器的网络统一配置。
6.3.2 网关修改
在linux系统中使用 dnsmasq 配置一台DNS应用服务器。
然后在网关上设置相应的DNS服务器,新的主机接入到此网关(物理表现为路由器)之后,由DHCP分配IP地址和DNS服务器地址。过程如下图所示:
对于智能路由器来说,本身就相当于一台linux主机,所以可以直接在本机上安装DNS服务器,并设置DHCP。 一般情况下,openwrt里面天然集成了dnsmasq。
对 /etc/config/network 文件进行编辑,就可以设置DHCP,修改相应的代码段:
config interface 'lan' …… option dns '127.0.0.1 223.5.5.5 223.6.6.6'
当然对于不熟悉linux的同学来说,也可以通过openwrt提供的web管理界面进行设置,在此略去不表。
6.4 网络统一配置
经过上述配置,后续所有连接到此路由下面的设备,都由路由统一分配DNS服务器了。
所有连接在此路由器上的设备,不管是移动设备,还是服务器还是PC都有统一的网络配置。
如果要对整个局域网进行网络修改,只需登录DNS服务器(此处就是智能路由器)。
修改 /etc/hosts 加上域名IP映射记录,然后执行下述命令重启dnsmasq服务即可:
/etc/init.d/dnsmqsq restart
在客户机上执行 ping命令检查一下相应的域名,经过特殊指向的域名返回的都是路由器配置的IP地址了(非特殊设定的,由备用DNS服务器来进行解析,所以其它公网服务仍然正常)。
这个功能在某些场合是相当有用的,比如:前端兼容性测试。
一个带客户端的web应用程序,有很强的兼容性要求的时候,就必须要在各种平台下面进行打开测试。而平台的分类是很多的,不同PC操作系统,不同的浏览器平台,不同的移动端设备。像PC端平台测试旧版本的IE,一般需要每个版本的IE都建立一个虚拟机,而移动端则由于差异化和碎片化更严重,会直接使用N台真实设备。这样一个完整的兼容性测试就会涉及十几台甚至几十台设备。如果第一次网络环境的迁移都需要在每个设备上修改网络配置,这个工作量和出错率都是相当大的。通过路由器的对子网的网络配置功能,可以很高效的解决这个问题。 节约了时间,减少了出错率,这就是技术带来的生产力。
说明
其实对于喜欢hack技术的人来说,上面的技术其实就是 ”DNS劫持技术“ 了。稍微再加一点东西,就可以做成伪装度很高的钓鱼网站,再加一点社会工程学和人类心理学的知识(将上网设备引诱到你的网络领域来),就能产生比较强的破坏力了。所以懂技术的同学请不要做违法的事;不懂技术的同学请注意防范此类的hack技术,不要轻易将设备接入陌生人的网络领地。
6.5 DNS劫持钓鱼手段简介
技术加一点社会工程学,hack做如下事情:
盗取支付信息
- 将支付宝登录页面复制一份,做一些修改
-
例如:将提交密码的服务器修改成hack服务器
- 引诱小白到自己的路由器网络下,进行DNS劫持
-
免费WIFI,无密码
- 诱导用户进行支付登录
-
即使用户不是小白,是IT从业人员,记得支付宝的域名,然后输入了域名,确认进入了一模一样的支付页面,进行登录
-
用户发现进入支付宝页面后,即使输入正确的密码也无法登录进去,于是放弃
-
然后hacker已经获取了用户的相应的用户名及密码了,进行后续工作
DNS劫持和页面复制,可以让用户在浏览器输入了正确的域名,而且浏览器显示了一模一样的 真实 页面,只是你输入账号密码后,不能登录而已。
QQ诈骗
- 前面的手段和上面的例子一样,伪照QQ空间登录页面,获取QQ账号密码
- 给好友发诈骗汇款信息
- 后续其它操作。。。。
可能大家觉得手段比较低端,但是作为一个还算资深的IT从业人员,个人还是有过相应的经历。
事件1
有人在QQ上发消息,说QQ空间有不可思议的照片,习惯性点击过去,是QQ空间相册界面,和登录弹出框。相册封面内容很吸引人,但是我还是出于职业习惯,看了一下浏览器的域名,发现不是QQ空间域名,于是笑了笑,关闭了窗口。
事件2
很久没有联系的一个朋友,在QQ突然向我发消息:麻烦你给我爸爸打个电话说我手机掉厕所了,让他给我汇500块钱过来一下,急。首先这不是让我直接汇款,紧急间,我差点给打了电话,差点成为对方作为博取别人信任的筹码了。还好,我并不知道他的爸爸的电话,迟疑的一瞬间让我清醒了一下,让他说他爸爸的名字,结果他说不出来。。。。
所以,上述方法其实不一定低端,一旦加入高深的社会工程学和人类心理学的知识,产生的社会危害还是蛮大的。还有,上面的那些信息的分析和收集过程,是可以通过编程自动化实现的,线下只需要不断的设局,就会有一定的转化率的。
其它的也不再说,偏离本文主旨了,希望能够引起大家的网络安全意识就好了吧。
7 网络数据监控
智能路由器作为网关除了网络配置功能外,还有网络数据转发的功能。由于openwrt是基于linux的,上面有比较良好的抓包应用程序 tcpdump,再配合 wireshark 的可视化工具,可以达到对所有通过此路由的数据进行监控的能力。
关于tcpdump和wireshark的使用方法,不是本文的重点,故不展开,默认读者具有一定这方面的基础知识了。
下面的例子是实现远程机器通过可视化工具 wireshark 对所有经过路由器的数据进行监控的实验。
7.1 原理和方法
基本的网络结构图如下:
主要操作原理是:
-
将上网设备连接到路由器
- 在路由器上使用tcpdump对网卡进行数据抓包
-
截至此处已经达到了监控要求,但是不够直观,需要一些可视化的工具,比如wireshark
- 在同一网络内的Linux桌面系统上运行wireshark对路由器上的tcpdump数据进行导入
-
通过ssh远程执行tcpdump命令,将数据输入到desktop,然后作为wireshark的输入数据源
在桌面系统终端里面执行下列命令:
ssh root@mitest "tcpdump -s 0 -U -n -w - -i br-lan not port 22" | wireshark -k -i -
然后输入相应的账号密码就可以监控了。
7.2 工具小技巧
前面讲述了基本的原理和操作手段,但是缺点是每次都需要输入长串命令行和密码,可以利用linux的一些小操作技巧,简化此过程,做成一个命令工具。
基本原理:
- 使用 sshpass 工具来做名密码输入
- 使用 alias 别名来做成命令语句
自动登录语句实现:
sshpass -p 'route-pass-world' ssh -o StrictHostKeyChecking=no root@mitest 'tcpdump -s 0 -U -n -w - -i br-lan not port 22' | wireshark -k -i -
编辑~/.bash_alias文件,自定义命令行的别名:
alias zshark="sshpass -p 'route-pass-world' ssh -o StrictHostKeyChecking=no root@mitest 'tcpdump -s 0 -U -n -w - -i br-lan not port 22' | wireshark -k -i -"
后面只需要在shell里面输入zshark就可以完成命令的启动了。
7.3 结果效果展示和应用
然后启动抓包工具,使用小米4手机连接路由器,打开UC浏览器访问 www.baidu.com ,抓包效果图如下:
已经可以看到设备的相应的网络IO访问内容了。
这个功能的可以用于对一些没有抓包应用的平台上的网络数据监控分析。例如:分析手机上的网络通讯情况。
在软件开发的时候,缓存往往很容易造成一些不正确的假象,这些假象非常容易影响软件调试过程中的分析判断。比如,在网络环境迁移的过程中,不同的设备有不同的DNS或者静态文件的缓存机制,特别是手机终端浏览器都有一些 云加速 功能,这些功能的加入已经改变了以前大家理解的网络请求过程,如果不了解这个影响,应用程序往往会呈现出一些令人费解或者令人误解的现象。所以必须要借助网络监控工具来确认设备的网络环境得到了正确的迁移,才能保证开发人员看到的一些现象是可信的。
比如:UC和QQ手机浏览器有 云加速 功能,但是好歹在设置中可以进行关闭,但是微信内置浏览器其实也有此功能,而且没有任何地方能够设置关闭,这点在web开发调试过程中很容易让人费解或者误解。
7.4 网络安全随想
在前面的内容已经介绍了如何抓包了,显然已经在PC上看到了接入的手机上的相关访问信息:
- 非敏感信息
-
- 手机型号
- 操作系统
- 浏览器标识
- 访问页面内容和时间
- 敏感信息
-
- 如果是http协议,页面提交的表单内容也会明文被查看到
对于非敏感信息,其实有些时候也比较敏感,这是对隐私的一种侵犯,毕竟没有谁希望自己的一切网络行为习惯被别人窥探无遗。
例如,wireshark可以对某个设备的访问记录进行统计:
这只是刚才的实验短时间访问了一下baidu.com,如果长时间对网络出口进行监控,那么这个很容易根据浏览器的网站的内容类别,可以将设备持有人的喜好和特征分析得八九不离十。比如,发现大量的女性衣服购物链接就可以判别此人是年轻女性;如果发现大量科技论文检索页面,则可以判别为科研工作者。
再多一些数据,就会分析更多一些内容。比如,你拿着手机偷偷在搜索引擎里面搜索 白血病的治疗方法 ,很小心的你以为别人不知道,但是其实别人什么都知道了,你想通过搜索引擎知道更多,就会搜索输入得越多,然后产生的网络行为越多,别人就会知道的更多了。
当然所幸的是 国内最大的搜索引擎 百度 ,大概在2015年终于使用了 https 的搜索服务了,在此之前是非加密的 http 协议。其它的搜索引擎,例如 搜狗 截至目前为止仍然使用的是非加密的 http 协议。
对于敏感信息,比如登录名和密码,如果是在 http 协议下传输,这些内容是可以直接在路由器上抓包看见的。这部分内容的影响就可大可小了。
所以安全总结如下:
- 非敏感信息被窥探
-
成规模产生统计价值,会暴露个人特征和喜好等等隐私
- 敏感信息被窥探
-
直接涉及到账号密码时,产生的后果可能很严重
注意
https 协议传输的属于加密内容,即使路由器抓包了,也看不到明文。像目前大型的互联网公司的敏感数据传输部分基本上都是基于 https 了,但是仍然有很多中小型互联网公司还没有注意到这一点,仍然使用未加密的 http 协议,像用户名密码这些东西在路由器上传输的时候,抓包都可以看到明文。
8 公共WIFI安全警示
经过如下的方法阐述,应该能够引起一部分用户对公共WIFI的安全意识的重视吧。如果对方是路由器的管理员,然后终端用户又将设备连接到路由器上了(被钓鱼),那么:
- DNS劫持
-
本来用户访问A网站,但是却被导向一个伪装好的恶意的B网站,那么用户的登录账号密码等敏感信息甚至银行信息都有可以被截取
- 通讯数据被监视
-
- 用户访问的网络地址都被获知(用户的习惯被掌控了)
- http的请求的数据内容都会被明文截获
当然一般的有明确来源的的WIFI还是可以抱可信的态度的(毕竟现在各大商家都有免费WIFI,不能因噎废食),但是未知WIFI尽量不要轻易连接,否则会有不可预知的风险。
9 最后总结
上面介绍的智能路由器的两种玩法,本意还是希望大家能够尽量将其用于正途,用于生产中,用来提升软件的生产力吧。请勿乱用。
作者: | Harmo哈莫 |
---|---|
作者介绍: | https://zhengwh.github.io |
技术博客: | http://www.cnblogs.com/beer |
Email: | dreamzsm@gmail.com |
QQ: | 1295351490 |
时间: | 2015-10 |
版权声明: | 欢迎以学习交流为目的读者随意转载,但是请 【注明出处】 |
支持本文: | 如果文章对您有启发,可以点击博客右下角的按钮进行 【推荐】 |