本文作者: Yale
原创投稿详情:重金悬赏 | 合天原创投稿等你来!
背景:
最近在准备作品,准备参加今年的全国大学生信息安全竞赛作品赛,我的作品主要是基于树莓派开发的,具体要做什么暂时还不能透露,但是比赛结束之后会把作品的开发流程全部发出来的。
什么是树莓派呢?
树莓派由注册于英国的慈善组织“RaspberryPi基金会”开发,Eben·Upton/埃·厄普顿为项目带头人。2012年3月,英国剑桥大学埃本·阿普顿(EbenEpton)正式发售世界上最小的台式机,又称卡片式电脑,外形只有信用卡大小,却具有电脑的所有基本功能,这就是RaspberryPi电脑板,中文译名"树莓派"。
前言:
基于项目的需要,必须要能够监听同个局域网内其他设备的流量,之前的方案是在树莓派上安装nmap、tcpdump,arpspoof,dhcpd等,通过arp欺骗,或者dhcpspoof的方法来做一个中间人攻击,通过将其他设备的流量从树莓派转发出去从而进行流量的嗅探、监控。但那是后来考虑到树莓派本身性能就不算很强,在项目里也还有其他工作要做,如果长时间进行arp攻击或者dhcp应该是很吃性能的,所以还是决定用树莓派做一个路由器。
在初始阶段,我们要实现的功能就是终端设备能够通过连接树莓派的热点上网,并且我们可以通过在树莓派上安装tcpdump、tshark等软件来监听流量。
这时候要出现两种方案了,一是通过在树莓派的raspbian系统上安装几个软件做一个软ap,还有一个就是刷lede(派生自openwrt)系统,做一个纯路由器。第二个方案被否决是因为实在是几乎浪费了树莓派的强大性能如果只是刷一个lede的话,而且我后期要做的工作在lede上可能无法进行,所以还是选用了第一种方案。这就引出了下文。
0x01
做路由器,这件事以前根本没做过呀,网上的教程基本上也都是教你怎么刷路由器系统的。无奈之下,只好跑到了Google,看看树莓派如何制作路由器,英文的一共搜到大约有4种版本的安装方式,中文的搜到2种(也都是翻译的前面4中里面的两种,而且还翻译不全,格式还有错误,把我坑的好惨)。
在三天的时间里,把每一种都试过了,最后终于做出来了,踩了不少坑,刷了无数遍的系统,心疼我32G的SD卡~~
为了方便有心人也能够做出来,我会在下文中尽可能详细地说明工具、步骤等,以及我踩过的坑和注意事项。(红笔标注)
0x02
硬件准备
树莓派3B+
SD卡
读卡器
网线
电源线
软件准备
SDCard Formatted
Win32_Disk_Imager
2017-11-29-raspbian-stretch.img
0x03接下来正式开始操作
首先将SD卡插入读卡器,将读卡器插入笔记本,然后打开SDCard Formatted,在selectcard中选中我们插入的sd卡,点击右下角的format即可格式化
接下来打开win32disk imager
在imagefile中选择需要烧写的镜像(2017-11-29-raspbian-stretch.img),在device选择要烧写的设备即可
点击wirte后就会开始自动烧写
烧写结束后会发现原本32G的SD卡只有20MB了~~不要慌,那就说明烧写成功了
打开文件夹,在其中创建一个文本文档,命名为ssh,内容为空就行(把.txt的后缀也删除了)
接下来从计算机中弹出SD卡,将SD卡插入树莓派的卡槽内。
0x04
电源线连接树莓派,并启动电源。
同时用网线将树莓派的以太网口与计算机的以太网口相连(计算机是通过无线方式上网的)
打开网络和共享中心
点击更改适配器设置
选中wlan右键打开属性
在如图所示处进行相应的勾选,来开启internet共享
然后打开cmd,输入ipconfig先看一下各个接口的情况,其实我们要关注的是以太网的ip
上图可以看到以太网是192.168.137.1
接下来输入arp–a
可以看到接口:192.168.137.1处多出了好几个同网段的地址(这截图是我路由器做成之后复现的,所以我在路由器上做的桥接、连接路由器的终端设备的ip都在这上面,所以会有多个ip,如果安装我文章的步骤来的话,除了192.168.137.255之外,应该是只有一个地址的,记住这个地址,然后打开xshell连接,这里我假设树莓派的地址为192.168.137.159)
打开xshll如图设置
(前面烧写好系统之后之所以在文件夹中新建ssh文件,就是为了开启树莓派的ssh功能,因为raspbian默认不开启ssh)
点击确定之后开始连接
会出现如下界面
树莓派默认的用户名是pi
输入密码。树莓派默认的是raspberry
可以看到成功连接上去了
那么我们前期的系统搭建部分的工作算是完成了
0x05
安装完树莓派之后直接在终端输入以下几条命令,更换源(更换源的原因大家都懂~就说了)
sudo-s
echo-e "deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ stretchmain contrib non-free rpi \n deb-srchttp://mirrors.ustc.edu.cn/raspbian/raspbian/ stretch main contribnon-free rpi" > /etc/apt/sources.list
echo -e "deb http://mirrors.ustc.edu.cn/archive.raspberrypi.org/stretch main ui" > /etc/apt/sources.list.d/raspi.list
exit
然后输入sudoapt-get uodate
获得最近的软件包的列表;列表中包含一些包的信息,比如这个包是否更新过
输入sudoapt-get upgrade
将更新的包下载到本地并安装
接下来安装本次要用到的两个重要的软件
Hostapd和dnsmasq
分别输入一下命令安装sudoapt-get install hostapd
sudoapt-get install dnsmasq
Hostapd是用于创建无线热点,也就是可以发出wifi信号,可是我们的终端连上wifi之后就能上网了吗?当然不是,我们的终端还需要被分配合适的ip地址,这个工作在如今基本上就被dhcp服务承包了,所以就要用dnsmasq来dhcp服务和dns服务的配置。
一个无线路由器形成的局域网的地址基本上都是192.168.x.x这种,各个厂商都差不多,基本上就是192.168.1.1之类的,我们这里就给wlan0分配192.168.0.10好了(这里的x可以任意指定,当然了,必须在1~255之间)
我们需要在xshell上打开
在文件的最后输入末尾的四行
前面两行是指定wlan0的ip为192.168.0.10
后门两行是为了后续的桥接工作准备的
Nano的用法就不多介绍了,ctrl+o,然后ctrl+x
或者直接ctrl+x保存然后输入Y退出即可
0x06
给树莓派分配了静态ip之后,接下来我们需要配置前面提到的两个软件,一个是负责创建ap的,另外一个是负责dhcp的,我们先去配置创建ap的软件,也就是hostapd
(本次实验采用是桥接方式,在0x11推荐的资源中也有不使用桥接方式进行搭建的,可以自行参照对比,不过不论最终是以什么方式转发流量,不论安装什么软件,创建ap和管理dhcp的功能是不能少的)
终端输入如下:
这个文件默认是没有的,需要我们自行创建
输入以下内容:
需要注意的就是最后两行,ssid可以修改为自己想要的wifi名称,wpa_passphrase修改为wifi密码(注意一定要是8位及以上,不然之后开启hostapd服务的时候会有问题~~与一般大部分路由器设置一样,为了降低被暴力破解的难度与风险)
通用的方式保存并退出
接下来我们需要把刚才创建的文件在hostapd的文件中添加相应的路径
输入
注意中间DAEMON_CONF的内容
修改成上图所示(注意,原文件中DAEMON_CONF前面是有#的,表示注释,修改的时候一定要去掉)
引号内的内容就是我们前面编辑的文件的路径
保存并退出
0x07
这时候启动hostapd你应该就可以看到wifi信号了
输入servicehostapd start即可启动
我打开windows上的wifi服务,可以看到创建的ap
Piwifi就是我们创建的wifi的名称,这时候输入正确的密码当然是可以接入的,不过不能上午,因为没有被分配到合适的ip
我们接下来就去解决这个问题
0x08
Dnsmasq自带的配置文件太繁琐了,我们其实没必要用到,为了方便直接换个名字保存着先
输入以下命令即可
然后重新创建一个配置文件并进行编辑:
没错,你没看错,只需要两行就可以了
这样的话就意味着最多只有30-11=19台终端可以接入我们的树莓派,这里的值可以按照规范自行设置
保存并退出
0x09
流量过来之后我们需要转发流量
将文件中部的net.ipv4.ip_forward=1前面的注释去掉
如图
当然,也可以直接在文件末尾加上这句话,保存并退出
0x10
流量转发设置好后,我们需要额外设置iptabels的出入站的规则
sudoiptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
然后将新添加的规则保存
sudosh -c "iptables-save > /etc/iptables.ipv4.nat"
为了能在树莓派重启之后也能够使用,我们将要编辑如下文件
在exit0增加一行
前面在hostapd的配置文件中盘,大家有没有注意到这么一行
第二行表示使用桥接方式
意味着我们需要一个桥接的软件来打通wlan0和eth0的流量
输入以下命令安装相关软件
Sudo apt-get install bridge-utils
然后创建一个新的接口,命名为br0
Sudobrctl addbr br0
然后将eth0与br0连接
Sudobrctl addif br0 eth0
然后要去接口的配置文件中进行相应设置
打开配置文件
在文件末尾加入以下内容:
保存并退出
重启之后便可以作为无线路由器使用了。
至此路由器搭建完毕,相比市面上的路由器而言,可玩性、扩展性自然是其最大的亮点,在接下来的文章中将会在此基础上进行树莓派的安全构建、以及扩展功能开发等。
0x11
现在顺便安装个tcpdump吧,看看能不能看到连接到树莓派路由器的设备的流量
首先在mac上接入树莓派的热点piwifi,然后ifconfig查看地址
然后在树莓派上输入
便可以看到通信流量了
这个项目具体的应用大家就等待我的第二篇文章吧~~
0x12
本次的制作主要是基于软件实现的,所以大佬们都有各自的方案,除了上述的方案。还有以下方案:
使用isc-dhcp-server与hostapd搭配的,其中涉及修改的文件比较多,需要增加的iptables规则也比较繁琐(参考连接:https://www.maketecheasier.com/set-up-raspberry-pi-as-wireless-access-point/)
这篇文章是使用hostapd+udhcpd搭建,可以用于参照学习(https://elinux.org/RPI-Wireless-Hotspot)
这篇文章也是使用hostapd+dhsmasq进行搭建的,大家可以参照对比着学习(参考学习:https://frillip.com/using-your-raspberry-pi-3-as-a-wifi-access-point-with-hostapd/)
看不过瘾?合天2017年度干货精华请点击《【精华】2017年度合天网安干货集锦》
别忘了投稿哟!!!
合天公众号开启原创投稿啦!!!
大家有好的技术原创文章。
欢迎投稿至邮箱:edu@heetian.com;
合天会根据文章的时效、新颖、文笔、实用等多方面评判给予100元-500元不等的稿费哟。
有才能的你快来投稿吧!
重金悬赏 | 合天原创投稿等你来!(点击了解投稿详情)