APP下载

基于无线路由器的Wi-Fi审计程序设计与实现

2020-05-25智昊张伟

软件导刊 2020年2期
关键词:路由器嵌入式

智昊 张伟

摘 要:为了解决目前许多公共场所提供的免费Wi-Fi信号存在巨大公共安全隐患的问题,防止不法分子利用免费Wi-Fi散布虚假与有害信息,影响社会治安,通过在Wi-Fi路由器上嵌入网络审计程序,采集并关联终端用户身份信息与用户上网内容,然后将审计数据存储到数据中心作进一步分析与处理。在实际应用中,Wi-Fi审计路由器能够有效审计并采集用户上网行为,为网络安全维护提供了基础数据。验证结果表明,在路由器端进行网络流量审计监控的方法简单、有效,审计率可达到99%以上。

關键词:Wi-Fi;嵌入式;路由器;网络审计

DOI:10. 11907/rjdk. 191424 开放科学(资源服务)标识码(OSID):

中图分类号:TP319文献标识码:A 文章编号:1672-7800(2020)002-0053-04

英标:Design and Implementation of Wi-Fi Auditing Program Based on Wireless Router

英作:ZHI Hao, ZHANG Wei

英单:(Computer School,Beijing Information Science and Technology University, Beijing 100101,China)

Abstract: In order to solve the huge public security risks of the free Wi-Fi signals provided by many public places, the criminals are prevented from using free Wi-Fi to spread false and harmful information, which affects public security. By embedding the network auditing program on the Wi-Fi router, the user identity information of the terminal and the users online content are collected and associated, and then the audit data is stored in the data center for further analysis and application. In practical applications, the Wi-Fi audit router can effectively audit and collect the users online behavior, providing basic data for network security maintenance. Therefore, the audit monitoring of network traffic on the router side is both effective and simple, and the audit rate can reach more than 99%.

Key Words:Wi-Fi; embedded; router; network audit

0 引言

近年来,随着物联网技术的快速发展与无线网络的普及,人们生活中越来越离不开Wi-Fi(Wireless Fidelity)。如今几乎所有智能手机和笔记本电脑都支持Wi-Fi通信方式,越来越多的智能终端设备也支持通过无线方式接入互联网[1-2]。提供Wi-Fi的场所也不断增加,如火车站、宾馆、商场等,因此可能存在一些人利用公共网络匿名散播谣言或发表攻击性言论的情况,网络安全成为当今不容忽视的问题[3]。自2006年起,公安部已将WLAN安全纳入网络安全范畴,并对其进行审查,只要是面向公众提供Wi-Fi服务的场所,均必须安装符合公安部82号令的互联网安全审计系统[4]。

审计系统需要依赖路由器等硬件设备采集用户上网行为。路由器等网关设备作为终端设备与互联网之间的桥梁,所有网络数据都必须经过网关设备,以提升数据质量[5-6]。随着物联网的发展,现有路由器等网关设备性能得到了大幅提升。以路由器为例,嵌入式操作系统OpenWRT被应用于诸多路由器品牌中,常见的有TP-Link、小米、极路由等。此外,OpenWRT系统作为Linux的一个嵌入式版本,支持多种主流处理器,可移植性强。同时,OpenWRT系统操作简单,适用于嵌入式软件的定制开发[7-8]。

针对不同业务需求,网络审计方法也略有不同。王泽旺[9]基于HTTP协议内容进行分析,通过旁路监听的方式进行数据采集,重点分析HTTP协议相关内容;王庆刚等[10]采集2.4G频段MAC数据帧,通过python解析内容并存储于本地;郭凯[11]基于Windows平台,利用WinPcap获取与分析流经网卡的所有数据。以上几种方法都实现了网络审计功能,但大多是基于服务器旁路方式进行网络流量抓取,可移植性不强,也没有对用户个人信息进行采集与关联,不符合公安部的网络审计要求。

本文采用基于OpenWRT操作系统的路由器,并在路由器上开发了一个网络审计客户端,包含认证模块与审计模块。用户连接路由器时必须先认证身份,然后才能访问互联网。与此同时,审计客户端会同步解析用户上网行为,将其上网日志发送至公安数据中心备份,以供公安网络安全查询或舆情预警。

1 总体设计

1.1 整体业务结构设计

网络审计的主要目的是将上网用户的个人信息与该用户上网行为进行关联,提供给公安网警作进一步分析。审计流程分为3个步骤:①用户身份获取;②用户上网行为采集;③将用户身份与上网行为发送到数据中心进行存储,并将用户及其行为相关联[12]。整体业务系统物理结构如图1所示。

其中审计路由器系统结构如图2所示。路由器的基础操作系统为OpenWRT,除基本路由功能外,审计程序独立运行在操作系统上,随路由器系统一起启动,可利用监听路由器设备的无线网卡实现对无线数据的内容审计功能。

审计模块功能流程如图3所示。设备连接到无线路由器后,审计程序检查该设备是否已通过认证,若尚未认证,则弹出portal并要求用户进行认证操作。同时通过监听无线网卡,采集终端设备通信的网络数据包进行内容解析,上传到数据中心并与设备已认证的用户信息关联,形成一条记录。

1.2 路由器操作系统选择

审计程序运行在无线路由器设备之上,常见路由器系统有OpenWRT、DD-WRT、Tomato等[13]。其中DD-WRT系统符合用户使用习惯,操作也很简单;Tomato系统虽然稳定性略佳,但是支持的硬件类型较为局限;相比而言,OpenWRT更贴近开发者使用习惯,且支持用户安装软件。因此,本文选择OpenWRT系统作为审计路由的操作系统[14]。

OpenWRT是基于Linux内核的一个开源嵌入式系统,主要用于路由器等智能设备中。OpenWRT系统有着良好的网络特性,因此OpenWRT可作为路由器的基础操作系统。同时OpenWRT是开源系统,开发者们为OpenWRT提供了大量源码以及适用的ipk包。由于OpenWRT具有低成本、低功耗、体积小的特性,其被广泛应用于需要软硬结合的智能化嵌入式开发项目中[15]。

OpenWRT系统有如下特征:①OpenWRT以Linux内核为基础,可以剪裁,非常便于定制开发;②OpenWRT系统包含BusyBox工具包,BusyBox是一个在嵌入式Linux中被广泛应用的shell工具包,集成了常用的Linux命令和工具,非常符合开发者使用习惯;③OpenWRT系统还包含OPKG工具,OPKG是一种轻量级的嵌入式软件包管理系统,可管理软件包的下载、安装、删除与升级[16]。

综上所述,OpenWRT系统以其高度模块化的设计,可方便开发者移植各个功能,既为路由器上的审计程序开发提供了极大便利,又提供了适配的运行环境,所以本文选择OpenWRT系统作为审计路由器的底层操作系统。

1.3 审计程序主要技术介绍

1.3.1 libpcap介绍

libpcap是Unix/Linux平台下专门用于采集网络数据包的工具,而且是开源软件。许多网络数据捕获软件都依赖于libpcap,例如Tcpdump。libpcap函数库提供了C语言接口,可以在大多数类Unix平台下运行。此外,winpcap与libpcap类似,主要应用于Windows环境[17]。

libpcap抓取流程可大致分为如下3步:首先在数据链路层增加一个旁路处理,将网卡收到的数据包拷贝一份,发送至包过滤器;然后包过滤器根据用户事先定义的规则,自动选择保存还是丢弃;最后通过内存缓冲区将数据包上传给上层应用[18]。具体流程如图4所示。

libpcap抓取的数据包格式为特定格式的数据流,只需从外到里依次去掉各层协议添加的报头,即可获取该数据包中的各个字段信息。以太网数据帧包含4部分:目的地址、源地址、帧格式和数据,其中帧格式标识帧数据类型,例如0x0800标识为IP数据,再根据IP协议,IP数据的第10个位置为传输层协议标识,06表示TCP协议,17表示UDP协议等。通过层层剥离的方式解析已获取的数据包,结合一些已知特征值,即可准确获取用户具体上网日志[19]。

1.3.2 wifidog介绍

wifidog是一款开源软件,常用于路由器的portal认证,且支持OpenWRT系统,用户群体较多。wifidog的工作原理主要是基于系统防火墙iptables,并接收认证服务器传递的认证状态信息,在路由器端进行拦截或放行操作。每当新用户连接Wi-Fi并通过路由器接入互联网时,wifidog会获取新用户的此次操作,并返回一个重定向到认证服务器的http请求给用户,用户通过认证后,wifidog即修改iptables,放行该用户IP[20]。认证流程如图5所示。

具体流程如下:①用户连接Wi-Fi,wifidog监控新设备上线,通过防火墙进行拦截,然后发送307报文将用户重定向到认证服务器的认证登录页面;②在認证服务器登录页面输入认证基本信息(用户名、密码),向服务器发送认证请求;③认证成功后,认证服务器通过302报文,将携带token信息的请求重定向到wifidog;④wifidog向认证服务器发起确认,认证成功则修改防火墙配置,并将用户请求重定向到认证成功页面,至此认证完毕[21]。

通过wifidog一方面可拦截未经认证的终端上网行为,另一方面能够非常容易地获取用户个人信息。认证方法也有多种,最常见的是用户通过输入手机号接收临时密码进行身份信息认证,或者让用户先注册一个账号,通过“用户名+密码”方式进行身份认证。

2 审计系统实现

2.1 审计模块实现

用户上网行为采集主要依赖于libpcap函数库实现,一个完整的采集流程分为以下步骤:

(1)查找网络设备。利用pcap_lookupdev()方法查找可用网卡,并返回第一个网络适配器名称。若无可用网卡,则在参数errbuf中存储错误信息。

char * pcap_lookupdev(char * errbuf)

(2)打开网络设备。pcap_open_live()方法的返回值是一个pcap_t结构体类型的指针,可以理解成一个捕获句柄,也是libpcap中其它函数经常用到的重要参数。

pcap_t * pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *errbuf)

其中第一个参数device为网络设备名,snaplen参数为数据包抓取长度,promisc参数为网卡混杂模式配置,to_ms参数用于设置数据包返回时长,单位为ms,errbuf参数用于存放错误信息。

(3)获取网络参数。pcap_lookupnet()方法用于获取网络设备的IP地址和子网掩码等信息。

int pcap_lookupnet(const char *device, bpf_u_int32 *netp, bpf_u_int32 *maskp, char *errbuf)

(4)设置过滤规则。在抓包过程中通常会增加过滤规则,一方面过滤掉不需要的数据包,另一方面也能提高运行效率。libpcap中使用BPF(Berkeley Packet Filter,BPF)过滤数据包,而且将BPF语言封装成更简单的语法。这里需要用到以下两个函数:

int pcap_compile(pcap_t *p, struct bpf_program *program, const char *buf, int optimize, bpf_u_int32 mask)

int pcap_setfilter(pcap_t *p, struct bpf_program *fp)

其中pcap_compile()用于编译过滤表达式,并将编译后的BPF存储到第2个参数program中,然后通过pcap_setfilter()方法使该规则生效。

(5)获取数据包。pcap_loop()方法用于获取数据包。其函数结构如下:

int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)

通常将第2个参数cnt的抓包个数设置为负数,可以一直循环抓包,第3个参数是回调函数。需要说明的是,回调函数必须为以下格式:

void callback(u_char *user, const struct pcap_pkthdr *h, const u_char *pkt)

其中user是pcap_loop()方法中的第4个参数,pcap_pkthdr指针中主要存储时间戳与数据包长度,pkt用于存放数据。pcap_loop()方法收到足够多的数据包时会自动调用回调函数,回调函数再根据捕获的数据帧解析,获取用户上网行为。

(6)释放网络接口。最后调用pcap_close()方法关闭网络接口对象并释放资源,整个流程结束。

2.2 认证模块实现

认证模块基于开源项目wifidog实现,用于获取终端用户身份。wifidog通过3个核心线程实现主要功能,分别为客户端检测线程、wdctrl交互线程及认证服务器心跳检测线程。客户端检测线程用于检测设备终端状态,若认证超时,则对该设备作登出处理;wdctrl交互线程主要用于进程间通信;认证服务器心跳检测线程用于在wifidog与认证服务器之间保持心跳机制[22]。

本文重点研究路由器上的认证模块,对认证服务器端不作过多研究。wifidog客户端实现认证主要有以下几个关键步骤:

(1)wifidog启动时会维护一个设备信息链表,里面包含终端IP与mac等信息;接下来wifidog调用httpdGetConnection()函数监听终端上线,监听到终端后,函数将终端IP等信息一并打包交给thread_httpd线程进行处理;thread_httpd线程中的httpdProcessRequest()函数读取用户socket中的数据,若读取到的内容在设备信息链表中未曾出现,表明该设备还没有与服务器进行过交互,则通过_httpd_send404()函数将该设备重定向至认证服务器,并执行回调函数http_callback_404();回调函数中的http_send_redirect_to_auth()方法用于重定向路径,例如重定向路径通常为:http://authserver_addr/login/?gw_id=xxx&gw_address=xxx&gw_port=xxx&url=www.xxx.com,接下来设备将与认证服务器进行验证交互,获取用户认证信息。

(2)设备与认证服务器交互之后被重定向回来,被wifidog监听到,于是再次进行数据检查。若此次可以在设备信息链表中查询到关键字,且被认证服务器重定向回来时携带auth、token字串,于是wifidog执行http_callback_auth()函数进行身份标识。身份标识主要是将设备请求URL中携带的token添加到设备信息链表中,同时通过IP和内核/proc/net/arp文件确定设备mac号。

(3)添加设备信息完成后,wifidog执行authenticate_client(),将设备信息与认证服务器记录进行比较,根据服务器返回结果执行相应动作。一般AUTH_DENIED表示验证失败,AUTH_ALLOWED表示验证成功。验证失败时会再次将终端设备重定向至认证服务器,验证通过時会通过fw_allow()函数放行终端流量。fw_allow()函数是指在iptables的mangle表中添加一条以该设备的mac为源的记录,对其流量进行打标,之后检查到该标识则会放行,具体命令为:

iptables -t mangle -A “TABLE_WIFIDOG_OUTGOING” -s “IP地址” -m mac --mac-source “MAC地址” -j MARK --set-mark “tag”

至此,设备上线认证流程完毕。

3 工程验证

该方案已在某品牌路由器中得到了实际应用,且大规模部署在某市。从公安数据中心可以查看路由器中实时审计采集的用户上网数据,从而为公安技侦以及舆情监控提供数据支持。

4 结语

本文主要利用3个开源项目OpenWRT、libpcap与wifidog,设计并实现了一种基于无线路由器的Wi-Fi审计程序。该方案通过嵌入式路由器实现,不仅降低了运行成本,而且开发较为容易,在应用中也通过了实践检验。当然,该设计方案也存在一些缺陷,比如在网络数据流量大的情况下可能存在审计效率降低的情况。此外,由于在路由器中增加了一个程序,会占用路由器现有计算与存储资源,因此该方案对无线路由器硬件要求较高,并不是通用的解决方案。未来可以针对以上不足,进行系统与程序优化,对该方案作进一步完善。

参考文献:

[1] 张冬杨. 2019年物联网发展趋势[J]. 物联网技术,2019,9(2):5-6.

[2] 张化明. WIFI传输与接入技术的发展研究[J]. 通讯世界,2018,25(12):38-39.

[3] 陈国飞. 网络信息时代国家安全面临的挑战研究[J]. 厦门特区党校学报,2018 (1):54-59.

[4] 中华人民共和国公安部. 互联网安全保护技术措施规定[J]. 信息安全与通信保密,2006(2):6-7.

[5] 廖亮. 网络信息审计系统的设计与实现[D]. 西安:西安电子科技大学,2015.

[6] 万加富. 网络监控系统原理与应用[M]. 北京:机械工业出版社,2003.

[7] 魏超. 基于OpenWrt和Arduino的智能家居系统的研究与实现[D]. 西安:西安科技大学,2017.

[8] 曹为华,凌强,张雷,等. 基于OpenWrt系统路由器的模式切换与网页设计[J]. 微型机与应用,2015,34(23):91-94.

[9] 王泽旺.  基于HTTP协议内容的审计系统的设计与实现[D]. 西安:西安电子科技大学,2014.

[10] 王庆刚,刘中烨. 基于Libpcap的无线网络监测系统的设计与实现[J]. 网络空间安全,2018,9(4):92-96.

[11] 郭凯. 基于WinPcap的数据包捕获系统的设计与实现[D]. 西安:西安电子科技大学,2013.

[12] 陈琳婷. 云WiFi设备的认证与审计系统[D]. 广州:华南理工大学,2015.

[13] 汝金星,葛良全. 无线路由器主流开源系统比较与分析[J]. 电子世界,2016(17):43,45.

[14] 张晓华,张玉华. 基于路由器的开源嵌入式操作系统学习平台[J]. 单片机与嵌入式系统应用,2013,13(2):13-16.

[15] KIM C G, KIM K J. Implementation of a cost-effective home lighting control system on embedded Linux with OpenWrt[J]. Personal and Ubiquitous Computing, 2014, 18(3):535-542.

[16] 李曙聰.  基于OPENWRT开源路由器的智能网关系统设计与实现[D]. 西安:西安电子科技大学,2014.

[17] WEN S,XIE G. libpcap-MT:a general purpose packet capture library with multi-thread[J]. Journal of Computer Research & Development,2011, 48(5):756-764.

[18] 高荣承. 基于Linux的网络数据捕获和分析系统的设计与实现[D]. 北京:北京邮电大学,2017.

[19] 姜丽丽,杨晓辉. 网络协议分析系统的设计与实现[J].  信息网络安全,2014,14(7):48-52.

[20] 黄海,谢冬青,宋一赞. WiFi-WiMAX异构无线网络认证机制研究[J]. 信息网络安全,2015,15(6):19-25.

[21] 陈琳婷. 云WiFi设备的认证与审计系统[D]. 广州:华南理工大学,2015.

[22] 胡雁平. 基于Wifidog协议的WIFI认证与设备配置的研究与实现[D]. 武汉:华中科技大学,2017.

(责任编辑:黄 健)

猜你喜欢

路由器嵌入式
买千兆路由器看接口参数
维持生命
路由器每天都要关
TS系列红外传感器在嵌入式控制系统中的应用
嵌入式系统通信技术的应用
路由器空闲时是否需关闭
搭建基于Qt的嵌入式开发平台
无线路由器的保养方法
嵌入式软PLC在电镀生产流程控制系统中的应用
Altera加入嵌入式视觉联盟