美文网首页
系统架构设计笔记(88)—— 身份认证与访问控制

系统架构设计笔记(88)—— 身份认证与访问控制

作者: deniro | 来源:发表于2020-10-15 20:57 被阅读0次

    访问控制是通过某种途径限制和允许对资源的访问能力及范围的一种方法。它是针对越权使用系统资源的保护措施,通过限制对文件等资源的访问,防止非法用户的侵入或者合法用户的不当操作造成的破坏,从而保证信息系统资源的合法使用。访问控制技术可以通过对计算机系统的控制,自动 、 有效地防止对系统资源进行非法访问或者不当地使用,检测出一部分安全侵害,同时可以支持应用和数据的安全需求。访问控制技术并不能取代身份认证,它是建立在身份认证的基础之上的。

    访问控制技术包括如下几方面的内容:

    (1)用户标识与认证

    用户标识与认证是一种基于用户的访问控制技术,它是防止未经授权的用户进入系统的一种常规技术措施。用户标识用于向系统声明用户的身份。用户标识一般应当具有唯一性,其最常见的形式就是用户 ID。 系统必须采用一定的策略来维护所有的用户标识。验证用户标识的有效性 、 真实性,通常有三种类型的认证方式:一是用户个人掌握的秘密信息,例如,口令 、 密钥 、 PIN码等;二是用户个人所拥有的带有认证信息的特定物品,例如,磁卡 、 IC卡等;三是用户个人的特定生理 、 生物学特征,例如,声音 、 指纹等。在同一种系统中可以单独采用一种认证方法,也可以联合采用多种认证方法。

    (2)逻辑访问控制

    逻辑访问控制是基于系统的访问控制技术,用来控制特定的用户对特定资源的访问。通常,把用户分成不同的组,再对组授予不同的访问权限来实现对用户的逻辑访问控制,防止用户访问他所不需要访问的资源 、 或者进行与工作无关的访问。

    (3)审计与跟踪

    审计与跟踪系统的一个或多个运行记录,在事件发生后对事件进行调查,分析其时间 、 原因 、 活动内容 、 引发的相关事件 、 涉及的用户等。

    (4)公共访问控制

    如果一个应用系统是面向公众开放,允许公众进行访问时,面临的主要威胁是来自外部的匿名攻击,必须采取访问控制等措施以保护系统数据的完整性和敏感信息的保密性。

    1 身份认证技术

    身份认证是对系统的用户进行有效性、真实性验证。

    1.1 口令认证方式

    使用口令认证方式,用户必须具有一个唯一的系统标识,并且保证口令在系统的使用和存储过程中是安全的,同时口令在传输过程中不能被窃取 、 替换。另外特别要注意的是在认证前,用户必须确认认证者的真实身份,以防止把口令发给冒充的认证者。

    使用口令的单向身份认证过程一般是:请求认证者和认证者之间建立安全连接 、 并确认认证者身份等;然后请求认证者向认证者发送认证请求,认证请求中必须包括请求认证者的 ID 和口令;认证者接受 ID 和口令,在用户数据库中找出请求认证的 ID 和口令;查找是否有此用户并比较两口令是否相同;最后向请求认证者发回认证结果。如果请求认证者的 ID 在认证者的用户数据库中,并且请求认证者发送的口令与数据库中相应的口令相同,则允许请求认证者通过认证。

    1.2 基于公钥签名的认证方式

    公开密钥签名算法的身份认证方式,是通过请求认证者与认证者(对于双向身份认证而言,双方互为请求认证者和认证者)之间对于一个随机数做数字签名与验证数字签名来实现的。这种方式中认证双方的个人秘密信息不用在网络上传送,从而减少了口令等秘密信息泄漏的风险。

    采用数字签名技术认证与口令认证方式有一个很大的不同:口令认证通常在正式数据交换开始之前进行。认证一旦通过,双方即建立安全通道进行通信,此后的通信被认为是安全的,不再进行身份认证;而数字签名认证在每一次的请求和响应中进行,即接收信息的一方先从接收到的信息中验证发送者的身份信息,验证通过后才对收到的信息进行相应处理。

    使用公钥加密算法进行身份认证要求:请求认证者必须具有私钥实现数字签名的功能;认证者必须具有使用公钥验证数字签名的功能;认证者必须具有产生随机数的功能,而且随机数的质量必须达到一定要求。使用公钥加密算法进行身份认证的方式,对用于数字签名的私钥由参与通信的认证者自己保密,而用于验证数字签名的公钥则需要采用可靠的方式进行安全分发。一般可以采用公钥数据库方式或者使用认证机构签发数字证书的方式(认证机构与数字证书的内容参见前文 PKI 部分)。

    如果使用公钥数据库的方式管理公钥,则请求认证者 ID 就包含在认证请求中发给认证者,认证者使用该 ID 从公钥数据库中获得请求认证者的公钥。如果使用认证机构签发数字证书的方式管理公钥,则请求认证者的数字证书包含在认证请求中发给认证者,认证者验证请求认证者的数字证书后,从数字证书中获取请求认证者的公钥。

    1.3 持卡认证方式

    持卡认证方式最早采用磁卡。磁卡中最重要的部分是磁道,不仅存储数据,而且还存储用户的身份信息。目前所用的卡是 IC 卡,与磁卡相比,它除了存储容量大之外,还可一卡多用,同时具有可靠性高,寿命长,读写机构简单可靠,造价便宜,维护方便,容易推广等诸多优点。

    正由于上述优点,使得 IC 卡在世界各地广泛使用。 IC 卡上一般分为不加密的公共区 、 加密的数据区等,有些还有自己的操作系统和微处理器。 IC 卡已被广泛应用于身份认证领域。一般 IC 卡与用户的个人 PIN 一起使用。在脱机系统中, PIN 以加密的形式存在卡中,识别设备读出 IC 卡中的身份信息,然后将其中的 PIN 解密,与用户输入的 PIN 比较,以决定 IC 卡持有者是否合法。在联机系统中, PIN 可不存在 IC 卡上,而存在主机系统中,鉴别时,系统将用户输入的 PIN 与主机的 PIN 比较,而由此认证其身份的合法性。

    1.4 基于人体生物特征的认证方式

    这种方式是指通过计算机,利用人体固有的生理特征或行为特征进行个人身份鉴定。与传统的身份鉴别手段相比,基于生物特征的认证技术具有突出的优点:一是不会遗忘或丢失;二是防伪性能好,无法伪造;三是随时随地可用。

    能够用来鉴别身份的生物特征一般具有广泛性(每个人都应该具有这种特性) 、 唯一性(每个人拥有的特征应各不相同) 、 稳定性(所选择的特征应该不随时间变化而发生变化)和可采集性(所选择的特征应该便于采集 、 测量)。目前,可用于身份鉴别的生物特征主要有指纹 、 笔迹 、 脸像 、 红外温 、 视网膜 、 手形 、 掌纹等。由于生物特征识别的设备比其他身份认证的设备要复杂,所以一般用在非常重要的机密场合,如军事等。

    生物特征识别主要采用模式识别技术。身份识别系统工作方式分为识别模式和鉴定模式,其性能指标主要有错误拒绝率和错误接受率等。在选择这种认证方式时需要对这些参数作认真的考虑。

    1.5 动态口令技术(一次性口令技术)

    一般情况下,所使用的计算机口令都是静态的,也就是说在一定的时间内是相对不变的,而且可重复使用。这种口令很容易被系统中的嗅探程序所劫持,而且很容易受到基于字典的暴力攻击。

    针对这种静态口令认证方式的缺陷,人们提出了利用散列函数产生一次性口令的方法,即用户每次登录系统时使用的口令都是变化的。一次性口令是动态变化的密码,其变化来源于产生密码的运算因子。一次性口令的产生因子一般都采用双运算因子:一是用户的私钥,它代表用户身份的识别码,是固定不变的。二是变动因子,正是变动因子的不断变化,才能够产生动态的一次性口令。

    动态口令技术认证方式中要用到动态口令密码卡,这是一种便于携带的智能化硬件产品。这种密码卡内置的构件和程序能通过密码卡内的密钥加上其他因子动态地计算出新的口令。当密码卡持有者将这个口令输入计算机时,系统中的认证服务器会根据相同的算法和动态因子计算出对应于该密码卡的认证口令,并把这个口令与密码卡产生的口令比对,进行身份认证。

    1.6 PPP 中的认证协议

    点到点协议( Point-to-Point Protocol , PPP )提供了一种在点到点链路上封装网络层协议信息的标准方法。 PPP 也定义了可扩展的链路控制协议。链路控制协议使用验证协议磋商机制,在链路层上传输网络层协议前验证链路的对端。

    PPP 包含如下几个部分:在串行链路上封装数据报的方法;建立 、 配置和测试数据链路连接的链路控制协议( Link Control Protocol , LCP );建立和配置不同网络层协议的一组网络控制协议( Network Control Protocol , NCP )。 PPP 协议定义了两种验证协议:密码验证协议( Password Authentication Protocol , PAP )和挑战 — 握手验证协议( Challenge-Handshake Authentication Protocol , CHAP ),此外还有扩展认证协议( Extensible Authentication Protocol , EAP )。一个典型的 PPP 链路建立过程分为三个阶段:创建阶段 、 认证阶段和网络层协商阶段。

    (1)创建阶段

    在这个阶段,将对基本的通信方式进行选择。链路两端设备通过 LCP 向对方发送配置信息,建立链路。在链路创建阶段,只是对验证协议进行选择,具体的用户验证过程在认证阶段实现。

    (2)认证阶段

    在这个阶段,客户端会将自己的身份发送给远端的接入服务器。该阶段使用一种安全的验证方式避免第三方窃取数据或冒充远程客户接管与客户端的连接。认证成功,则转到网络层协商阶段。如果认证失败,则链路终止。

    (3)网络层协商阶段

    认证阶段完成之后, PPP 将调用在链路创建阶段选定的各种 NCP 协商高层协议问题,例如,在该阶段 IP 控制协议可以向拨入用户分配动态地址。这样,经过三个阶段以后,一条完整的 PPP 链路就建立起来了。

    最常用的认证协议有 PAP 和 CHAP ,此外还有 EAP 。

    (1) PAP

    PAP 是一种简单的明文验证方式。网络接入服务器要求用户提供用户名和口令, PAP 以明文方式返回用户信息,并且对回送或者重复验证和错误攻击没有保护措施。很明显,这种验证方式的安全性较差,第三方可以很容易地获取被传送的用户名和口令,并利用这些信息与网络接入服务器建立连接获取网络接入服务器提供的资源。所以,一旦用户密码被第三方窃取, PAP 无法提供避免受到第三方攻击的保障措施。

    (2) CHAP

    CHAP 是一种加密的验证方式,能够避免建立连接时传送用户的明文密码。网络接入服务器向远程用户发送一个挑战口令,其中包括会话 ID 和一个任意生成的挑战字串。远程客户端使用 MD5 散列算法返回用户名和加密的挑战口令 、 会话 ID 及用户口令。 CHAP 对 PAP 进行了改进,不再直接通过链路发送明文口令,而是使用挑战口令以散列算法对口令进行加密。因为服务器端存有客户的明文口令,所以服务器可以重复客户端进行的散列操作,并将结果与用户返回的口令进行对照。 CHAP 为每一次验证任意生成一个挑战字串来防止受到攻击。在整个连接过程中, CHAP 将不定时地随机向客户端重复发送挑战口令,从而避免非法入侵者冒充远程客户进行攻击 。

    HAP 验证方式具有如下的优点:
    ① 通过可变的挑战口令和随机地 、 重复地发挑战口令, CHAP 防止了重放攻击 。
    ② 该认证方法依赖于认证者和对端共享的密钥,密钥不是通过链路发送的 。
    ③ 虽然该认证是单向的,但是在两个方向都进行 CHAP 协商,同一密钥可以很容易地实现交互认证 。
    ④ 由于 CHAP 可以用在许多不同的系统认证中,因此可以用用户名作为索引,以便在一张大型密钥表中查找正确的密钥。这样也可以在一个系统中支持多个用户名 — 密钥对,在会话中随时改变密钥。

    CHAP 在设计上的要求:

    ① CHAP 算法要求密钥长度必须至少是1字节,至少应该不易让人猜出,密钥最好至少是散列算法所选用的散列码的长度,如此可以保证密钥不易受到穷举搜索攻击。所选用的散列算法,必须保证从已知挑战口令和响应值来确定密钥在计算上是不可行的 。
    ② 每一个挑战口令应该是唯一的,否则在同一密钥下,重复挑战口令将使攻击者能够用以前截获的响应值应答挑战口令。由于希望同一密钥可以用于地理上分散的不同服务器的认证,因此挑战口令应该做到全局临时唯一 。
    ③ 每一个挑战口令也应该是不可预计的,否则攻击者可以欺骗对方,让对方响应一个预计的挑战口令,然后用该响应冒充对端欺骗认证者。虽然 CHAP 不能防止实时地主动搭线窃听攻击,但是只要能产生不可预计的挑战口令就可以防范大多数的主动攻击。

    (3) EAP

    EAP 是一个用于 PPP 认证的通用协议,可以支持多种认证方法 。 EAP 并不在链路控制阶段而是在认证阶段指定认证方法,这样认证方就可以在得到更多的信息以后再决定使用什么认证方法。这种机制还允许 PPP 认证方简单地把收到的认证信息传给后方的认证服务器,由后方的认证服务器来真正实现各种认证方法 。

    EAP 的认证过程是:在链路阶段完成以后,认证方向对端发送一个或多个请求报文。在请求报文中有一个类型字用来指明认证方所请求的信息类型,例如,可以是对端的 ID 、 MD5 的挑战口令 、 一次性密码及通用密码卡等 。

    MD5 的挑战口令对应于 CHAP 认证协议的挑战口令。典型情况下,认证方首先发送一个 ID 请求报文随后再发送其他的请求报文。对端对每一个请求报文响应一个应答报文。和请求报文一样,应答报文中也包含一个类型字段,对应于所回应的请求报文中的类型字段。认证方再通过发送一个成功或者失败的报文来结束认证过程 。

    EAP 具有突出的优点:它可以支持多种认证机制,而不需要在建立连接阶段指定;某些设备,例如,网络接入服务器,不需要关心每一个请求信息的真正含义,而是作为一个代理把认证报文直接传给后端的认证服务器,设备只需关心认证结果是成功还是失败,然后结束认证阶段。

    当然 EAP 也有一些缺点:它需要在 LCP 中增加一个新的认证协议,这样现有的 PPP 要想使用 EAP 就必须进行修改。同时,使用 EAP 也和现有的在 LCP 协商阶段指定认证方 法的模型不一致。

    1.7 RADIUS 协议

    RADIUS ( Remote Authentication Dial-in User Service )协议是由朗讯公司提出的客户 / 服务器方式的安全认证协议,它能在拨号网络中提供注册 、 验证功能,现已成为 Internet 的正式协议标准,是当前流行的 AAA (Authentication 、 Authorization 、 Accountion)协议。

    RADIUS 协议可以把拨号和认证这两种功能放在两个分离的服务器 —— 网络接入服务器( NAS )和后台认证服务器( RADIUS 服务器)上。在 RADIUS 服务器上存放有用户名和它们相应的认证信息的一个大数据库,来提供认证用户名和密码及向用户发送配置服务的详细信息等。

    RADIUS 具有非常突出的特点:
    ① RADIUS 协议使用 UDP 进行传输,它使用 1812 号端口进行认证,以及认证通过后对用户授权,使用 1813 号端口对用户计费 。
    ② 支持多种认证方法, RADIUS 能支持 PAP 、 CHAP 、 UNIXLogin及其他认证方法;
    ③ 支持认证转接( Authentication Forwarding ),一个 RADIUS 服务器可以作为另一个 RADIUS 服务器的客户端向它要求认证,这叫作认证转接 。
    ④ 协议扩展性好,通过协议中变长的属性串能够进一步扩展 RADIUS 协议 。
    ⑤ 认证信息都加密传输,安全性高。 RADIUS 服务器和接入服务器之间传递的认证信息用一个事先设置的口令进行加密,防止敏感信息泄露,因此安全性高。

    RADIUS 的认证过程如下:
    ① 接入服务器从用户那里获取用户名和口令( PAP 口令或 CHAP 口令),把它同用户的一些其他信息(如主叫号码 、 接入号码 、 占用的端口等)组成 RADIUS 认证请求数据包发送给 RADIUS 服务器,请求认证 。
    ② RADIUS 服务器收到认证请求包后,首先查看接入服务器是否已经登记,然后根据请求中用户名 、 口令等信息验证用户是否合法。如果用户非法,则向接入服务器发送访问拒绝包;如果用户合法,那么 RADIUS 服务器会将用户的配置信息,例如,用户类型 、 IP地址 、 连接协议 、 端口信息 、 ACL授权等信息,一起组成访问接受包发送回接入服务器。
    ③ 接入服务器收到访问接受 / 拒绝包时,首先要判断包中的签名是否正确,如果不正确将认为收到了一个非法的包。验证签名的正确性后,如果收到了访问接受包,那么接入服务器会接受用户的上网请求,并用收到的授权信息对用户进行配置 、 授权,限制用户对资源的访问;如果收到的是访问拒绝包则拒绝该用户的上网请求 。

    ④ 当用户成功登录后,接入服务器会向 RADIUS 服务器发送一个连接开始的记账信息包,其中包括用户使用的连接种类 、 协议和其他自定义的用户记账的信息;当用户断开连接后,接入服务器再向 RADIUS 服务器发送一个连接结束的记账信息包,通知 RADIUS 服务器停止对该用户记账。 RADIUS 服务器根据收到的记账信息包按照该用户的设置为用户记账。

    2 访问控制技术

    访问控制是在身份认证的基础上,根据不同身份的用户对用户的访问请求加以限制。身份认证关心的是 “ 你是谁,你是否拥有你所声明的身份 ” 这个问题;而访问控制则关心 “ 你能做什么,不能做什么 ” 的问题。在访问控制过程中,一般把发出访问 、 存取请求的一方,例如,用户 、 程序 、 进程等叫作主体;而把被访问的对象和资源,例如,文件 、 数据库 、 设备 、 内存区域等叫作客体。

    另外还有一套定义主体与客体之间相互关系,确定不同主体对不同客体的访问能力与权限的规则,叫作访问规则。一个完整的访问控制体系就是由上述三方面共同构成的。

    2.1 访问控制策略

    访问控制策略一般可以划分为三类:自主访问控制( Discretionary Access Control , DAC ),强制访问控制( Mandatory Access Control , MAC ),基于角色的访问控制( Role Based Access Control , RBAC )。其中 DAC 、 MAC 是属于传统的访问控制策略,而 RBAC 则是后来出现的一种访问控制策略,被认为具有很大的优势,具有很好的发展前景。

    (1) DAC

    自主访问控制是目前计算机系统中实现最多的访问控制机制,它使主体可以自主地进行配置以决定其他的主体可以采取什么样的方式来访问其所拥有的一些资源,即一个拥有一定权限范围的主体可以直接或者间接地把权限授予其他的主体。常见的操作系统如 Windows 、 UNIX 等都是采用自主访问控制策略来实施访问控制的。

    其常见的方式是由某个用户(一般为某个文件或资源的拥有者或超级管理员)采用某种方式指定不同类型 、 不同分组的其他用户对其名下的资源的访问许可和访问方式。

    自主访问控制策略中,由用户自己决定其他用户对系统中某些资源的访问权限,这样虽然方便,但是却很难保证这种类型的授权对于整个系统来说是安全的。首先,用户往往不知道或者难以确定其他的用户是否适合具有对某些资源的访问权限;其次,如果不是所有的用户都有很强的安全意识,可能随意授权,那么这对于系统安全就是一个潜在的威胁;再次,由用户自己决定访问权限的分配,不利于系统管理员实施统一的全局访问控制;

    另外,许多组织中往往希望对于信息系统采取的授权与控制结构能够与该组织的行政结构一致。总之,自主访问控制策略容易使系统失控,容易给非法入侵者留下可乘之机。所以,自主访问控制策略的安全性不是很高。随着网络规模的扩大,用户对访问控制服务的质量也提出了更高的要求,采用自主访问控制策略已经很难满足一个安全性要求比较高的系统的需要。

    (2) MAC

    强制访问控制是系统统一采用某种访问权限的授予和撤销的策略,而且强制所有主体都必须服从这种访问权限的分配 。 MAC 一般用在安全级别层次比较多的军事 、 安全等特殊应用领域中。它预先为系统中接受的所有主体 、 客体根据可以信任的程度 、 所处的岗位和承担的任务 、 信息的敏感程度 、 时间发展的阶段等划分成若干级别,例如,信息可以分为绝密 、 机密 、 秘密和无密级等不同的级别。然后再根据主体和客体的级别标记来决定访问模式,任何用户对任何客体的访问请求都由这种安全级别的划分及相应的权限配置来控制。强制访问控制由于过于强调系统的安全性能,虽然能够很好地控制系统的安全,但是它管理起来比较麻烦,工作量很大,也不够灵活。

    (3) RBAC

    DAC 和 MAC 访问控制策略都各有其特点,但是也各有它们的不足。而基于角色的访问控制则可以在克服以上两者的缺点的同时,提供一个良好的安全的系统环境,因而是面向企业的系统中一种十分有效的访问控制策略 。

    DAC 系统中,有一种常见的情况,就是在一个组织中,最终用户能够使用某些资源,但是它并不是该资源的拥有者,资源的拥有者是这个组织或组织中的所有用户。这时,就应该基于用户的职务来进行访问权限的设置和分配,而不应该基于资源的拥有者来进行。例如,在图书馆中,应该根据某一个用户是流通人员 、 文献编目人员,还是分馆的管理员等不同的角色来分配和设置权限。如果是文献编目人员,那么他对系统中流通的图书这种资源就只能有查看的权限,而对未进行典藏的图书等资源就有比较高的访问权限;如果是分馆的管理员,那么他相应地就具有对该分馆的读者 、 文献等资源有较高的访问权限,而对其他用户则没有。

    也就是说,用户具有什么样的访问权限,不直接取决于用户自己,而是取决于他所属的角色,有什么样的角色就有什么样的权限。角色的种类和访问权限由系统管理员来定义,每一个成员属于哪种类型的角色也由系统管理员来规定,即只有系统管理员才有权定义和分配角色,而且对于用户来说只能服从系统中的这一系列规定,而不能有自主的配置,因此这是一种非自主型访问控制策略。

    2.2 访问许可的授权

    (1)等级型

    把对客体的存取控制权限的修改能力划分成不同的等级,拥有高级别修改能力的主体可以把这种权限分配给比其级别低的主体。依此类推,从而将访问许可的授权关系组成一个树型结构。例如,超级管理员可以作为这个等级树的根,具有修改所有客体的存取控制表的能力,且可以向任意一个主体分配这种修改权。系统管理员把用户根据部门划分成多个子集,并对部门领导授予相应存取控制权限的修改权和对修改权的分配权。部门领导又可以把自己所拥有的权力按照同样的方法向下授权。这种方式的优点是树型结构与实际组织机构类似,并且可以由领导根据日常实际工作需要进行授权来对各级用户进行控制与管理。但这种方式也有一个缺点,就是对同一个客体来说,可能存在多个主体有能力修改其存取控制权限。

    (2)拥有型

    这种类型对每一个客体都有一个拥有者(一般情况下就是该客体的创建者),拥有者具有对所拥有的客体的全部的控制权,并且可以任意修改其拥有的客体的访问控制表,并可对其他主体授予或撤销对其客体的任何一种访问权限。但是拥有者无权将其对客体的访问控制权的分配权授予其他主体。在 UNIX 系统中就是用这种方式来进行授权控制的。

    (3)自由型

    自由型的特点是一个客体的拥有者可以对任何主体授予对他所拥有的客体的访问权限,同时还可以把这种分配权授予其他主体而不受任何限制。这样,获得了这种授权的主体就可以把这种分配权授予更多的主体而不受该客体拥有者的限制。这样,一旦访问控制的分配权被授予出去,就很难控制对客体的访问了。显然,这样做安全性比较差,一般的系统中很少采用这种方式。


    相关文章

      网友评论

          本文标题:系统架构设计笔记(88)—— 身份认证与访问控制

          本文链接:https://www.haomeiwen.com/subject/ioklyktx.html