需要抓取Kerberos协议交互认证的数据包,想了想最简单的方式应该就是在Web服务的基础上增加Kerberos认证了。
环境说明
整个测试环境的搭建采用三台Ubuntu 18.04虚拟机,均修改了hosts
文件:
1 | 192.168.1.118 tmp |
其中:192.168.1.118
为Web服务器,采用Apache2192.168.1.134
为KDC Server192.168.1.113
为客户端
默认所有操作均在root用户下进行。
配置KDC Server
1 | apt install krb5-admin-server krb5-kdc |
提供Realm:
提供Kerberos Server FQDN,输入KDC Server所在机器的hostname
配置krb5 Admin Server
中间配置出问题需要卸载重来的,可以执行:
1 | apt purge -y krb5-kdc krb5-admin-server krb5-config krb5-locales krb5-user krb5.conf |
上面配置完毕后,执行krb5_newrealm
来初始化Kerberos Realm:
执行完毕后,确认/etc/krb5kdc/kadm5.acl
和/etc/krb5.conf
的配置:
1 | $ cat /etc/krb5kdc/kadm5.acl |
1 | $ cat /etc/krb5.conf |
启动服务:
1 | systemctl start krb5-kdc |
配置Web服务
Apache
安装Apache2
1 | apt install apache2 |
创建测试文件:
1 | echo 'Hello Kerberos' > /var/www/html/krb5_hello.txt |
重启服务器后,通过curl
进行访问测试:
1 | curl -i http://tmp/krb5_hello.txt |
GSSAPI
使用GSSAPI在编写应用程序时,可以应用通用的安全机制。开发者不必针对任何特定的平台、安全机制、保护类型或传输协议来定制安全实现,可忽略保护网络数据方面的细节。许多底层机制和技术(如Kerberos v5或公钥技术)都支持GSSAPI框架。
这里我们通过mod_auth_gssapi给Apache2增加验证功能。
1 | apt install libapache2-mod-auth-gssapi |
增加配置
编辑Apache配置文件/etc/apache2/sites-enabled/000-default.conf
,在DocumentRoot
下一行加入如下内容:
1 | <Location /> |
其中GssapiCredStore
所指向的http.keytab
文件中放的是HTTP服务的密钥信息。需要在KDC Server上为Web服务添加Principal:
1 | kadmin.local: add_principal -randkey HTTP/tmp |
将上面生成的http.keytab
文件复制到Web服务器并放在/etc/apache2
目录下,然后重启Apache2。
1 | systemctl restart apache2 |
此时在访问测试文件,会显示401 Unauthorized
,GSSAPI配置已经生效:
1 | curl -i http://tmp/krb5_hello.txt |
客户端访问
安装客户端
1 | apt install krb5-user |
安装过程中填写的与KDC Server相同,Client的/etc/krb5.conf
需要与KDC Server的/etc/krb5.conf
保持一致。
用户凭证
由于curl不会提示让输入Kerberos用户和密码,而是使用了当前用户的凭证缓存,先在KDC Server中添加一条测试Principal:
1 | kadmin.local: add_principal test/test |
在客户端上生成用户凭证缓存:
1 | kinit test/test |
此时再通过curl
进行测试:
1 | curl -i --negotiate -u: http://tmp/krb5_hello.txt |
通过返回信息可以看出有两次返回,第一次仍然是401 Unauthorized,第二次返回了服务端提供的Token,能够访问krb5_hello.txt文件,说明环境搭建成功啦😆
认证过程
关于KRB5协议的交互过程,这里有篇文章讲的十分清楚:
http://www.securityandit.com/network/kerberos-protocol-understanding/
我就放两张抓取的数据包截图好了:
参考
1、https://docs.oracle.com/cd/E19253-01/819-7056/overview-19/index.html
2、https://027yunwei.com/shen-fen-yan-zheng/http-negotiate-spnego-kerberos-sample.html
3、http://www.out1kiss.me/?p=538
4、http://www.ipfonix.com/single-sign-on.pdf
5、https://linuxconfig.org/how-to-install-kerberos-kdc-server-and-client-on-ubuntu-18-04