智能卡操作终端面临的安全攻击及其防御
文章出处:http://www.singbon.com 作者:唐川,张森强,唐朝京 人气: 发表时间:2011年09月28日
1 引言
在智能卡应用日益广泛的今天,智能卡应用系统的安全问题非常重要。根据“箍桶原理”,整个应用系统安全强度由系统中安全性最弱的部分决定。智能卡本身具有较高的安全性,但由于操作终端数量多且地理上分布零散,相对中心而言其安全设计容易被轻视,安全弱点也容易被利用,从而导致整个应用系统安全性降低。分析智能卡终端系统面临的安全攻击,研究相应的防御措施,对于保证整个智能卡应用系统的安全性有重大的意义。
本文首先简要分析了智能卡系统的安全性,指出智能卡终端是系统中最易受攻击的部分;然后,建立了一个四维空间用于分析描述终端面临的安全攻击,分别针对物理层、软件层和管理层的攻击威胁提出了防御措施。作者将本文的思路应用于实际系统的安全设计中,取得了良好的效果。
2 智能卡应用系统安全性简述
一个典型的智能卡应用系统主要由业务中心服务器、业务终端、智能卡发卡中心、密钥管理中心以及其中使用的各种智能卡组成,如图1 所示。依据系统中各组成部分所受到的安全保护程度,作者将整个系统划分为三个区域:中心区、终端区和用户区。
图1 智能卡应用系统的结构
(1) 中心区:各种中心服务器所在的区域,包括业务中心服务器、智能卡发卡中心和密钥管理中心等。由于中心区处理业务系统核心信息,是系统安全设计的重心,一般其中的设备多置于专人负责的安全机房中,有严格的安全策略,所以中心区安全性很高。
(2) 终端区:通过网络与中心服务器相连的业务终端所在区域,包括业务终端计算机、智能卡读取设备以及用于鉴别用户卡的SAM 卡。它是一个智能卡系统安全性的枢纽,联系着用户区和中心区,但往往其安全设计远不及中心区,终端区的设备一般也不会置于建设和管理成本很高的安全机房中,其安全性很大程度上依靠操作员的安全意识和自律,终端区容易存在安全漏洞。
(3) 用户区:用户及其持有的智能卡所在区域。这是整个系统中最松散的区域,发卡中心将卡片发放给用户后,只有在用户通过终端区进行业务操作时才与中心发生联系。这个区域的安全性主要集中于用户卡。用户卡的安全同时受到智能卡安全机制和终端区安全机制的保障,而且卡片由用户自己保管,因此其安全性并不脆弱。
根据以上分析,作者认为终端区处于信息处理的枢纽地位,其脆弱的安全保障决定了该区域最易受到攻击。
3 智能卡操作终端面临的安全攻击及其防御
终端区面临的安全攻击有不同的对象和方法。为体现攻击涉及的对象和方法的特点,作者建立了一个四维空间对攻击行为进行描述,并在此基础上提出了针对特定攻击的防御措施。
3. 1 攻击描述空间的建立
攻击描述空间的四个坐标分别表示为:S(Subject):主体维,指攻击实施者的类型;O (Object):客体维,指被攻击的对象;M(Method):方法维,指攻击实施者所采取的方法;E(Effect):效果维,指攻击实施后被攻击对象信息安全受到的影响。
此攻击描述空间简称为SOME 空间。任何一种具体的安全攻击都由上述四个基本参数界定,都对应SOME 空间中的某个具体位置。SOME 空间的建立为描述具体攻击提供了方便。
(1) 主体维(S 维) 。攻击实施者不同,其攻击的对象和采取的攻击方法也往往不同,因而使得相应选择的防御措施不同。智能卡操作终端面临的安全攻击的S 维可以分为三大区域;
① S1 ———聪明的外部人员:了解一些公开、常用的攻击方法,但对终端系统缺乏了解,很难接触到系统的设备。他们的攻击一般依赖于现存的、公开的系统漏洞,借助普通的工具实施攻击。
② S2 ———具专业知识的内部人员:有丰富的知识和经验,对系统有一定程度的了解,可以接触到系统中几乎所有的设备和资料,能通过分析发现安全隐患,可以利用较复杂的工具实施攻击。对智能卡终端而言,具专业知识的操作员威胁概率最大,也是本文关注的重点。
③ S3 ———受资助的专业组织:受到资助、由专家组成的攻击团队,能够利用高级的分析工具深入分析系统,设计复杂的攻击方式,常常需要S2 中的人员参与。
(2) 客体维(O 维) 。特定的攻击都是针对终端区中某一个特定的对象实施的。根据信息流经过的处理环节,将终端区细分为如图2 所示的三个层次:
图2 智能卡终端的结构层次
①O1 ———物理层:包括SAM 卡、读卡器等与智能卡相关的硬件设备;
②O2 ———软件层:包括与智能卡相关的驱动程序、动态链接库和终端业务程序;
③O3 ———管理层:主要指对终端计算机的操作权,包括使用操作系统、业务程序及其它程序的权力。
(3) 方法维(M 维) 。实施安全攻击涉及软硬件许多技术,采用何种攻击方法与主体和客体密切相关。下文的主体、客体环境中有详细讨论。
(4) 效果维( E 维) 。根据攻击实施后对客体维对象信息安全的影响,效果维有四大部分:
① E1 ———秘密泄露,信息机密性遭破坏;
② E2 ———原信息被修改,完整性遭破坏;
③ E3 ———信息被伪造,信息真实性遭破坏;
④ E4 ———信息不可被处理,可用性遭破坏。
在各种智能卡应用系统中,获取敏感信息、篡改和伪造数据是攻击者的主要目的,破坏系统可用性在此不讨论。
3. 2 攻击方法及防御措施
依据以上建立的描述空间,可以从客体维出发分析针对智能卡终端区特点的攻击方法及相应的防御措施。分析前需要明确以下几点:
(1) 假定终端区与中心区之间的链路及中心区都是可信和可靠的;
(2) 任何终端区系统都有安全风险概率,可通过某些应对措施有效降低攻击成功的概率;
(3) 所有防御措施都有其固有的弱点,因此不可能将安全风险概率降为0。
3. 2. 1 发生在物理层O1 的攻击及防御措施
表1 发生在O1 的攻击
发生在O1 的攻击如表1 所示。智能卡自身有比较成熟的安全机制。
简言之,关键数据加解密在芯片内部实现, 且密钥不可读出;通过用户卡与SAM卡对同一随机数的加解密进行卡片与终端的相互认证;通过用户输入PIN 鉴别持卡人合法性;通过卡片与终端的认证和PIN 的鉴别控制操作权限。自智能卡推广以来,由于上述智能卡的安全机制具有相当高的保密性和防篡改性,使得在物理层获得E1 、E2 的效果难度很大。发生在O1的攻击通常要将芯片从卡基上分离下来,而且需要一定的硬件设备,一些攻击方法还会破坏芯片。
(1) M1:基于物理特征的密码分析。基于物理特征的密码分析技术自1996 年提出到此法被证实,对智能卡的保密性提出了巨大挑战。这类密码分析技术包括电压分析、故障分析、侵入分析、时间分析、简单的电流分析、差分电流分析、电磁辐射分析等。利用这些技术,攻击者可以在获得密码算法运行载体(计算机、保密机、加密盒、IC 卡等等) 的情况下,快速获得密钥,从而破译整个密码系统。
(2) M2 :光攻击。文献[ 8 ]中提出了一种“光攻击”技术,可以修改存储器中指定的bit 位,攻击成本也不高,很有可能被用于篡改SAM卡或用户卡信息。
3. 2. 2 防御措施
对于这些针对智能卡芯片各种物理参数泄漏信息的攻击方法,最理想的防御措施是改变芯片在处理二进制信号过程中功率、电压、电流、电磁辐射、故障发生率等各种参数的不对称性,这需要从芯片硬件设计上提供保障。文献[ 8 ]提出“光攻击”方法的同时,也提出了一种防御措施。不用单一的高电平信号表示逻辑“1”,低电平信号表示逻辑“0”,而是所有的数据都采用一对值编码。因此,一个高- 低信号对就代表“1”,一个低- 高信号对就代表“0”,一个低- 低状态被认为是“清零”信号,高- 高状态表示出错。这种方案使得基于物理特征的分析技术难度加大,可以较好地增强物理层的安全性。
3. 2. 3 发生在软件层O2 的攻击及防御措施软件层是整个终端区工作的核心,它控制对智能卡的各种操作,负责向与中心相连的网络收发数据。由于操作系统、应用软件本身容易被修改,一般又没有严格的认证机制,所以在O2 比较容易发生攻击。发生在O2 的攻击如表2 所示。
表2 发生在O2 的攻击
(1) M3:伪造SAM 卡和用户卡欺骗终端程序。
目前,终端SAM卡与用户卡相互认证的基础是两者持有相同的认证密钥,具体过程如下:
①用户卡:将Salt (一般是卡序号) 与产生的随机数R 发送给SAM卡;
②SAM卡:{{Kasam ,Salt} →K,R} →R*,发送R* 给用户卡;
③用户卡:{ Kausr,R*} -1 →R′,比较R 与R′,相同则通过验证。
密钥Kausr和Kasam由可信的权威机构———密钥管理中心通过发卡中心写入SAM卡和用户卡。
软件发送“认证”命令给卡片。认证通过后,卡片COS 提供一定的操作权,并返回“认证通过”信息给操作软件。至此,软件认为卡片合法,并执行其他操作。通常的终端软件设计时都假定SAM 卡是可信的,对物理层的信任与否实质在于是否收到“认证通过”信息,而并没有验证SAM卡密钥的真实性。这是一个严重的安全漏洞。如果来自S2 和S3 的攻击者严格仿照合法卡片的数据结构,用同类型空白卡伪造一对SAM卡和用户卡,分别写入的伪认证密钥K′asam和K′ausr只要满足关系{K′asam ,Salt} →K′ausr ,即可通过验证,达到欺骗终端程序的目的,使终端程序将其当作合法卡片操作,获得E3 的效果。
(2) M4:替换或改写智能卡操作模块。
目前的软件开发基本都是模块化设计,主程序通过调用智能卡操作模块实现各种管理卡片的功能。通常操作模块独立于主程序而位于某个动态链接库文件(用A 表示) 中,而主程序对于其调用的动态链接库是完全信任的。如果来自S2 、S3的攻击者用动态链接库文件B 替换掉A ,且B 中各模块的接口与A 的完全一样,B 将完全取代A操作卡片,如图3 所示。
图3 替换或改写智能卡操作模块
这样,攻击者就可以在B 中附加攻击所需的各种操作。这种攻击所需的只是对软件开发接口的了解和一定的编程技能,代价不高,却能实现对出入智能卡数据的完全控制,很容易获得E2 和E3的攻击效果。这个安全隐患也同样存在于整个应用软件系统调用其他动态链接库的环节中。
3. 2. 4 防御措施
发生在软件层的攻击主要是由各种信任关系的脆弱性造成的。因此,要改进软件层的安全性,需要改进信任机制。因为中心有较高的安全保障,所以可以通过中心对SAM卡和用户卡的认证来保证终端区智能卡的真实性,具体过程为:
(1) 每次进行业务操作前终端先向中心申请一个随机数Rc。
(2) SAM卡中{Kasam ,R} →R*sam ,用户卡中{Kausr ,R} →R*usr ,终端发送的业务请求包附加上(R*sam ,Salt sam) 和(R*usr ,Saltusr) ,其中Salt sam、Salt usr分别为SAM卡和用户卡的唯一标识号(UID) 。
(3) 中心:{ Kc , Saltasm} →K′asm , { Kc , Saltusr} →K′ausr ;{ K′asm ,R3} - 1 →R′sam ,{K′ausr ,R3} - 1 →R′usr ,比较R′sam、R′usr与Rc ,相同则通过验证,接受终端的业务请求。
动态链接库的独立性与其在智能卡终端安全中的重要地位相矛盾。为了使动态链接库中的模块与主程序紧密结合,作者提出三个解决方案:
方案1 在主程序中加入对动态链接库文件特征码的验证。在主程序编译发布时附加对重要动态链接库的特征码(比如Hash 摘要) ,在程序运行时再对库文件取特征码并比较验证。
方案2 重要的操作模块不以动态链接库的形式开发,而是直接内嵌于主程序。以用C 语言开发为例,对于智能卡厂商提供的智能卡操作模块以静态链接库形式包含到主程序中,这样重要的操作模块就不会以文件的形式独立于主程序而是主程序的一段代码了,毕竟对一个程序代码段的攻击难度要大于替换一个文件的难度。
方案3 中心加入对终端程序真实性的验证功能。终端程序向中心发送动态链接库(DLL) 验证请求,请求数据包M 是根据硬件唯一识别码、时戳和DLL 文件在主程序中加密生成,中心对M验证通过后才接受终端的其他业务请求。
3. 2. 5 发生在管理层O3 的攻击及防御措施
发生在管理层的攻击主要是非授权者在终端系统上进行程序调试、反编译、改写内存、复制重要文件、植入特洛伊木马等操作。这些操作可以跟踪监视终端程序、获取操作员口令、业务数据等信息,而获得E1 的攻击效果,进一步还可以修改操作的数据,获得E2 、E3 的效果。因为M4 的攻击一般都依赖于获取终端系统的某些操作权限,这也常常是进一步对软件层进行攻击的入口。
3. 2. 6 防御措施
在进行终端安全设计时,应制定完善的安全策略,尽可能减少终端管理层的安全隐患。
(1) 根据角色严格控制操作系统、业务程序、重要文件的读写权限。对于终端操作员,以最小特权原则授予操作权限,绝不能赋予系统管理员的权限,对终端区系统的绝对控制权应交由中心区的安全人员掌管。对操作员可以采用指纹识别等基于生物特征的鉴别方法。
(2) 定期对系统和业务程序的日志执行严格的审计,这对于防范需要时间潜伏的攻击很有效。
(3) 密切关注操作系统等的漏洞公告,即安装补丁,防止攻击者利用漏洞提升权限。
4 结束语
智能卡终端是一个安全环境很复杂的系统,本文为分析这个系统面临的安全攻击提供了一个思路,为系统的安全设计提供了依据。攻击描述空间的建立是个尝试,下一步工作是量化分析该空间的特性,探索在降低安全威胁与增加终端成本之间寻找最佳平衡点的方法。