大数据安全验证之KerberosStartDTTechLab
这是奇点云全新技术专栏StartDTTechLab的第11期。
在这里,我们聚焦数据技术,分享方法论与实战。一线的项目经历,丰富的实践经验,真实的总结体会滑到文末,可以看到我们的往期精彩内容。
本篇由奇点云高级Java架构专家大门带来:
作者:大门
阅读时间:约13分钟
一、背景
2021年,人类已经从IT时代走向DT时代,大数据技术和应用也慢慢从幕后走到幕前,更多地曝光在公众面前。同时,就像互联网从蛮荒走向繁荣,大数据技术和应用也不可避免的碰到安全问题。
从GB到TB,从PB到EB、ZB,当今世界,每天产生的数据正在快速的指数级增长。随着数据的增长以及使用该数据的应用程序和框架的增长,数据的存储、分析、应用链路也越来越复杂,以前的安全手段已无法满足数据的指数级增长。
2006年初,Hadoop横空出世,给大数据行业带来了很大的变化。
Hadoop在最初的设计中,默认集群内所有的节点都是可靠的。由于用户与HDFS或MR进行交互时不需要验证,恶意用户可以通过伪装成真正的用户或者服务器入侵到Hadoop集群上,随意提交作业,修改JobTracker状态,篡改HDFS上的数据,伪装成NameNode或者TaskTracker接受任务,从而对数据进行破坏。
随后,HDFS就对此作了改进,增加了文件和目录的权限。但由于没有强认证的保障,这些权限只能对偶然的数据丢失起保护作用。恶意的用户仍然可以伪装成其他用户来篡改权限,致使权限设置形同虚设。不能够对Hadoop集群起到安全保障。
在Hadoop的集群中,存在以下安全认证问题:
1用户到服务器的认证问题
1。1NameNode,JobTracker上没有用户认证
用户可以伪装成其他用户入侵到一个HDFS或者MapReduce集群上。
1。2DataNode上没有认证
Datanode对读入输出并没有认证。导致如果一些客户端如果知道block的ID,就可以任意访问DataNode上block的数据。
1。3JobTracker上没有认证
可以任意杀死或更改用户的jobs,可以更改JobTracker的工作状态。
2服务器到服务器的认证问题
2。1没有DataNode,TaskTracker的认证
用户可以伪装成datanode,tasktracker,去接受JobTracker,Namenode的任务指派。
为了解决上述的安全问题,Hadoop从1。0。0版本以后,引入Kerberos认证机制,即用户跟服务通信以及各个服务之间通信均用Kerberos认证,在用户认证后做任务执行、访问服务、读写数据等均采用特定服务发起访问token,让需求方凭借token访问相应服务和数据。
图源:Youtube
Kerberos可以将认证的密钥在集群部署时事先放到可靠的节点上。集群运行时,集群内的节点使用密钥得到认证,认证通过后的节点才能提供服务。企图冒充的节点由于没有事先得到的密钥信息,无法与集群内部的节点通信。这样就防止了恶意地使用或篡改数据集群的问题,确保了集群的可靠性、安全性。
二、Kerberos介绍
地狱三头犬图源:Baidu
Kerberos是一种由MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端服务器应用程序提供强身份验证。
Kerberos这个名字来源于希腊神话,是冥界守护神兽的名字。之所以用Kerberos来命名一种完全认证协议,是因为整个认证过程涉及到三方:客户端、服务端和KDC(KeyDistributionCenter)。而冥界守护神兽也是三头犬,正好符合了协议的语义。
Kerberos可提供功能强大的用户验证以及完整性和保密性。通过验证,可保证网络事务的发送者和接收者的身份真实。该服务还可以检验来回传递的数据的有效性(完整性),并在传输过程中对数据进行加密(保密性)。使用Kerberos服务,可以安全登录到其他计算机、执行命令、交换数据以及传输文件。
此外,该服务还提供授权服务,这样管理员就可以限制(其他用户)对服务和计算机的访问。
在Kerberos认证中,最主要的问题是如何证明你是你的问题,如当一个Client去访问Server服务器上的某服务时,Server如何判断Client是否有权限来访问自己主机上的服务,同时保证在这个过程中的通讯内容即使被拦截或篡改也不影响通讯的安全性,这正是Kerberos解决的问题。在域渗透过程中Kerberos协议的攻防也是很重要的存在。
在解释Kerberos的认证过程之前,有必要先介绍一下Kerberos中的一些组件:
名称
作用KDC
(KeyDistributedCenter)
整个安全认证过程的票据生成管理服务,包含两个服务AS和TGSAS
(AuthenticationService)
为client生成TGT的服务TGS
(TicketGrantingService)
为client生成某个服务的ticketAD
(AccountDatabase)
存储所有client的白名单,只有存在白名单的client才能顺利申请TGTTGT
(TicketGrantingTicket)
用于获取ticket的票据
Client
想访问某个server的客户端
Server
提供某种业务的服务
Ticket
一个记录,客户用它来向服务器证明自己的身份,包括客户标识、会话密钥、时间戳。
三、Kerberos认证流程
如上图可以看到,一次安全认证包含6个步骤。下面我们详细地讲解认证过程:
1
Client发送请求到AS(AuthenticationServer),告知AS自己的身份,请求一个访问Server的Ticket。在这次请求Ticket的过程中,即使网络不安全,密码也不会外泄。因为这个请求是用Client的密码A加密过的,无需在网络中传递Client的密码AAS收到请求后,会从创建用户的数据库里找到Client的密码A用于解密。
2
认证成功后,AS会返回TGT(TicketGrantingTicket)给Client,注意,这个TGT会用另一个密码称为密码B来加密,如下图:
3
Client获取到TGT后,会将用密码B加密过的TGT发送给TGS(TicketGrantingServer),来申请访问Server。
TGS收到加密后的TGT后,会从AS获取密码B来做解密验证。从下图中可以看出,AS和TGS是共享秘钥的。
4
然后,TGS会给Client发送一个Token。该Token是在TGS上用另外一个不同的秘钥加密的。这是第三个秘钥C了。
5
Client在收到Token后,会把Token发往Server。
6
Client可以访问Server了。
整个认证过程中出现了三次秘钥。最后,我们再总结下Kerberos验证过程中的四个组件三个密码的关系:密码A是Client和AS共有的,而密码B是AS和TGS共有的,最后密码C是TGS和Server共有的。
在下图(Hadoop中使用Kerberos的实例)里可以看到,其步骤和Kerberos的认证过程是一样的。
图源:Youtube
四、使用经验和优化
01hrKerberosHA架构
在生产环境中设置Kerberos时,最好有多个从KDC和一个主KDC,以确保Kerberos服务的持续可用性。
每个KDC都包含Kerberos数据库的副本。主KDC包含领域数据库的可写副本,它会定期复制到从KDC。所有数据库更改(例如密码更改)都在主KDC上进行。当主KDC不可用时,从KDC提供Kerberos票证授予服务,但不提供数据库管理。
需要注意:
Kerberos系统依赖于正确时间信息的可用性。确保主KDC和所有从KDC具有正确同步的时钟。
最好在访问受限的安全专用硬件上安装和运行KDC。如果您的KDC同时也是一个文件服务器、FTP服务器或Web服务器,甚至只是一台客户端机器,那么通过任何这些区域的安全漏洞获得root访问权限的人可能会获得对Kerberos数据库的访问权限。
参考资料:https:web。mit。edukerberoskrb51。12docadmininstallkdc。html
02hrHA方案
目前单机房HA方案使用的较多的是KeepalivedRsync。
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态。Keepalived采用VRRP(虚拟路由冗余协议)热备份协议,以软件的方式实现Linux服务器的多机热备。VRRP是针对路由器的一种备份解决方案由多台路由器组成一个热备组,通过共用的虚拟IP(VIP)地址对外提供服务;每个热备份组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态,若当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。
首先,在MasterKDC中创建数据库的dump文件(将当前的Kerberos和KADM5数据库转储为ASCII文件):kdb5utildump〔b7ovr13〕〔verbose〕〔mkeyconvert〕〔newmkeyfilemkeyfile〕〔rev〕〔recurse〕〔filename〔principals。。。〕
左滑
然后使用Rsync将目录同步到Slave机器的对应目录中,再导入KDC中:kdb5utilload〔b7ovr13〕〔hash〕〔verbose〕〔update〕filename〔dbname〕
左滑
Hadoop所有请求通过请求内网域名,解析到Keepalived绑定的VIP的方式来使用KDC:
03hr方案优化
1用户(Principal)管理
Kerberos本身的数据库中不能查看密码的,也没有保存账号使用人等信息,所有的信息都需要以命令行的形式获取,管理起来极不方便。
随着业务的飞速增长,服务器规模越来越大,KerberosPrincipal手动操作会越来越频繁,手动的增删改查维护会非常痛苦。需要在Kerberos管理系统中规范Principal申请、维护、删除、keytab生成流程。Principal申请和权限管理自动化。
2数据同步优化
Kerberos数据同步可以将生成的数据记录同步写入到MySQL中,使用MySQL双主同步方式。在跨网络环境中,KDC数据使用Rsync工具进行增量同步。以A核心机房作为主机房,RsyncServer使用了KeepalivedVIP的方式,当Kerberos主机宕机后,VIP漂移到另外一台主机器上,RsyncClient会以VIP所在的KDC主机器为RsyncServer进行数据同步,以保证KDC数据同步的高可用性。
3运维
使用进程管理工具如看门狗等工具对Kerberos相关进程、端口、主机进行存活监控,确保进程有问题时可以自动拉起进程,然后通过短信钉钉告知维护人员。
本文简单介绍了Kerberos的前世今生和认证过程。Kerberos本质上是一种安全认证协议,用户在做集群部署或应用接入会碰到一些问题,希望本文能为大家解惑。
随着大数据技术和应用的快速增长,越来越多的人选择了Kerberos来保护数据安全,也有很多人做了部署方案优化、接入层封装等等。我们在后续的学习中会继续深入讨论。