身份鉴别:
a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;
1. 在未登录状态下尝试直接访问任意操作页面或功能,查看是否具有登陆界面。
2.询问或者测试用户名是否可以重复,身份标识的设置策略是否合理(一般都是id是唯一标识)
3. 密码长度复杂度(8位以上)是否做了强制要求。(查看代码)或者尝试修改密码
4. 密码的更换周期是否合理(强制3个月更换一次)。
B)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;
- 询问或测试是否有登录失败处理策略,登录失败超过多少次锁定账户时间。
2. 登录一段时间没有操作是否能够自动退出,再次访问需要重新登陆。
C)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听;
1. 询问系统管理员,了解应用系统进行远程管理的方式。
2. 核查是否采用了 HTTPS加密协议,查看(小锁)证书来源。
3. 测试使用Http是否能正常访问(OPTIONS)
D)应采用口令、密码技术、生物技术[lc1] 等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。
1. 询问系统管理员,是否满足以上要求。
密码技术中,密码哈希是一种常用的技术,用于将用户密码加密存储在数据库中。密码哈希算法将用户密码作为输入,并使用哈希函数对其进行处理,生成一个固定长度的哈希值,然后将哈希值存储在数据库中。当用户进行身份验证时,输入的密码会与数据库中存储的哈希值进行比较,而不是直接比较明文密码,从而增加了密码的安全性。
访问控制
A)应对登录的用户分配账户和权限;
1. 询问系统管理员,了解系统是否为不同用户分配了不同账户和权限。
2. 以不同的用户身份登录系统,验证权限分配情况,是否有越权。
B)应重命名或删除默认账户,修改默认账户的默认口令;
1. 询问系统管理员是否存在默认账户。
2. 尝试登录默认账户,查看默认账户的默认口令是否已经修改。
C)应及时删除或停用多余的、过期的账户,避免共享账户的存在;
1. 访谈系统管理员,了解系统如何处理多余的、过期的账户。
2. 核查数据库的用户表中用户的状态标识。
3. 则尝试使用过期的账户登录系统。
D)应授予管理用户所需的最小权限,实现管理用户的权限分离;
(1)询问系统管理员,了解用户是否只拥有完成自己任务的最小权限,且管理用户权限根据三权分立原则进行授权。
(2)抽取一个用户,登录查看该用户的实际权限是否与其职责相符。
(3)以不同级别的管理用户登录,查看管理用户之间是否具有相互制约的关系。
E)应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则;
(1) 以管理用户身份登录,查看访问控制策略,是否有管理员能对用户分配权限。
(2) 以非管理员用户身份登录,访问权限管理功能,是否能够越权。
F访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级;
用户级访问控制:
这里其实细究的话,从某个角度上来说,有一部分应用系统是不完全符合的。基本上应用系统的权限分配方式都是角色拥有权限,用户再属于某个角色,这样用户也就获得了权限。
但是如果要达到访问控制的粒度为用户级,就是也能直接把某个具体的权限赋予给某个具体的用户。这样,粒度就确切的达到了用户级。
否则,你想调整权限,实际就得调整角色的权限,角色下面有多个用户,你就相当于调整了某一类用户的权限。
除非你为了实现细粒度的控制,某些角色下面只有一个用户。
进程级访问控制:
在一个多进程环境中,不同的进程可能需要访问不同的资源。通过进程级访问控制,可以为每个进程定义特定的访问权限。例如,一个数据库管理系统可以为每个连接到数据库的进程指定访问权限,限制它们对数据库表的操作。
文件级访问控制:
在一个文件系统中,可以通过文件级访问控制来限制对文件的访问权限。例如,一个操作系统可以为每个文件定义特定的访问权限,如读取、写入或执行。只有具有相应权限的用户或进程才能对文件进行相应操作。
数据库表级访问控制:
应用系统中一个表单页面可以大概的类比于数据库中的一个表,比如个人信息表、业务表等。
(当然,可能某些表单页面是由多个表复合而成的,这个就不管它了。)
所以这个就是要看权限分配的时候,是否能直接对表单页面的权限进行分配,比如允许访问什么的。
一种是表单的栏目直接不显示:
在C/S架构中,这样基本上就没有问题了,除非它的那个表单实质上是另外一个窗口,存在exe,而exe里没有对用户的权限进行判定。
在B/S架构中,这样基本上也没问题了,但是最好还是试验下,比如你先登录有相关权限的账户,将表单的地址记下来,然后再登录没有权限的账户,直接通过地址去访问表单,看是否能够成功。有些B/S的表单可能是用ajax方式显示的,这样的话,你需要找到接口,登录后使用jquery的get方法或者post方法去访问相关接口。
记录或字段级访问控制:
对于敏感数据,可能需要更细粒度的访问控制。例如,在医疗系统中,病人的电子病历可能包含多个字段,如姓名、诊断、治疗记录等。通过记录或字段级访问控制,可以限制用户或进程对敏感字段的访问权限,确保只有授权的人可以查看或修改特定的字段内容。
1. 核查并测试访问控制策略的控制粒度是否达到主体为用户级或进程级,客体为文件、数据库表、记录或字段级。
G)应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问。
通过比较安全标记来控制主体对客体的访问。安全标记不允许其他用户修改,包括资源的拥有者。应用系统应提供设置安全标记的功能,通过安全标记控制用户对标记信息资源的访问。重要主体指系统中的管理用户,重要客体指系统中的鉴别数据、重要业务数据、个人信息及敏感数据等。
(1)核查应用系统是否依据安全策略对重要主体和重要客体设置了安全标记。
(2)测试安全标记是否能实现主体对客体的强制访问控制。
安全审计
A)应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计;
(1) 核查是否提供并启用了安全审计[lc2] 功能。
(2) 核查审计范围是否覆盖每个用户。
(3) 核查并测试是否对重要的用户行为和重要安全事件进行了审计。
B)审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息;
1. 核查审计记录的内容,例如数据库的具体字段、日志信息。
C)应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等;
1. 核查审计记录的保护措施和备份策略。
2. 了解应用系统是否具备对审计记录的删除、修改或覆盖等功能。
3. 如果应用系统具备对审计记录的删除、修改或覆盖等功能,则核查应用系统是否对日志记录删除、修改和覆盖的时间进行了限制。
备份策略:增量备份只备份自上次备份以来发生更改的数据。增量备份只复制新增、修改或删除的文件和数据块,而不是整个数据集。
D)应对审计进程进行保护,防止未经授权的中断。
1.如果审计模块是一个单独的进程,则尝试非授权中断审计进程,查看是否成功(应为否);
2. 如果审计模块是一个独立的功能,则尝试非授权关闭审计功能,查看是否成功(应为否)。
入侵防范
A)应遵循最小安装的原则,仅安装需要的组件和应用程序;(默认符合)
(1)询问系统管理员,了解应用系统上线要求及应用系统各功能模块。
(2)查看应用系统上线的相关文档,并与应用系统功能模块进行比对,核查是否安装了仍在开发或未经安全测试的功能模块(应为否)。
D)应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求;
(1)询问系统管理员,了解该系统是否具备软件容错能力及具体措施。
(2)在浏览器或客户端输入不同的数据(模仿特定的攻击形式),查看系统的反应。
E)应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞;
(1)通过漏洞扫描、渗透测试等方式核查应用软件、数据库管理系统和中间件中是否存在高风险漏洞(应为不存在)。
(2)访谈管理员,是否已在经过充分的测试和评估后及时修补漏洞。
数据完整性
国密算法中,能够提供数据完整性的算法主要是:SM3。
国际算法中,能够提供数据完整性的算法主要是:MD5、SHA256、SHA512。
A)应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等;
密码算法中哈希算法也属于密码算法,所以通过MD5和SHA[lc3] 系列密码技术也可以实现完整性校验。
更多的判断方法主要是通过协议来实现传输过程中的完整性,如SSL是TLS的前身、SSH、HTTPS[lc4] 协议,通过MAC[lc5] (消息校验码)实现数据报文的完整性。
(1)询问系统管理员,了解不同鉴别数据在传输过程中是否采用了校验技术或密码技术来保证完整性。
(2)使用工具对通信报文中的鉴别数据进行修改,查看系统的反应。
B)应采用校验技术或密码技术保证重要数据在存储过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等。
1、操作系统鉴别数据主要就是用户名、口令、组ID等。其中WindowsNT中默认采用SAM文件保存鉴别信息,其中口令字段采用SHA哈希算法[lc6] 进行加密。而在Linux中,口令保存shadow文件中,口令也是采用SHA哈希算法进行加密,主要有三类:$1表示MD5 ; $6 表示SHA-512 ; $5 SHA-256。
2、业务数据、审计数据存储过程中的完整性通过查看数据库表是否存在哈希字段[lc7] ,数据在前端一般采用json或xml格式进行传输,检查过程中发现数据库表不包含对业务数据、审计数据完整性校验字段,一般判断为不符合。
一般很少有系统能实现数据存储过程的完整性校验,但是如果通过TLS/SSL、SSH等协议,可以通过传输过程中的完整性在一定程度上弥补存储过程中的完整性,所以在测评中,如果传输过程中能保证数据完整性,那么此项一般默认符合。
我们就需要配置文件初始可信状态时的哈希值,然后再根据目前的文件生成一个哈希值,对比前后的一致性,确认数据是否被篡改过。
下面是一个客户的实例,他对服务器上的一些重要文件进行了完整性校验,具有期望和当前的比对机制。
这个一般数据库自身不带这种机制,得询问管理人员是否使用了第三方软件对数据库重要数据进行了完整性校验。
(1)询问系统管理员,了解不同测评对象的鉴别数据在存储过程中是否采用了校验技术或密码技术来保证完整性。
(2)数据库表截图
数据保密性
国密算法中,能够提供数据保密性的算法主要是:SM1和SM2,少数使用祖冲之,无线局域网中使用SM4。
国际算法中,能够提供数据保密性的算法主要是:DES、3DES、RSA、AES、ECC等。
A)应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等;
数据传输过程中的保密性主要通过检查系统是否采用TLS[lc8] 、SSH[lc9] 等加密协议,对于Windows操作系统,我们需要知道Windows操作系统远程桌面RDP是否符合传输过程中的保密性,Windows的RDP安全主要有安全层和加密级别两个参数,其中安全层有RDP安全层、协商和TLS1.0共3个值,其中默认值是协商。网上了解到在WindowsServer2008版本以上的操作系统,默认RDP支持加密。
安全层值 |
描述 |
协商 |
强制使用客户端支持的最安全的方法,如果支持TLS 1.0,它将用于验证RD会话主机服务器,否则使用RDP加密保证通信安全,不验证RD会话主机服务器。 |
RDP安全层 |
使用本地RDP加密保证客户端和RD会话主机服务器之间的通信安全,不验证RD会话主机。 |
SSL TLS1.0 |
SSL方法要求使用TLS1.0验证RD会话主机服务器,如果不支持TLS1.0则连接失败。 |
(1)询问系统管理员,了解不同鉴别数据是否已采用密码技术保证传输过程中的保密性。
(2)抓取传输过程中的数据包,查看鉴别数据在传输过程中是否进行了加密。
B)应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。
1、Windows和Linux(含一些设备的操作系统)的鉴别信息,默认都是弱Hash存储,产生了“加密”的效果但是比较弱,可以通过清空或替换来实现篡改,没有实现鉴别信息存储完整性保护。建议是通过对操作系统鉴别信息保存文件的完整性监测来完成防篡改。
2、应用系统存在数据库中的鉴别信息,如果用MD5、SHA1属于弱加密,建议通过加salt来增强保护力度。如果已经使用了加salt的MD5、SHA1,且salt保密不容易获取,则保密性和完整性可以满足要求。
应用系统或操作系统通常采用哈希算法生成摘要值存储鉴别信息,采用MD5、SHA1哈希算法存在风险,因为如果在明文不够复杂的情况下,采用这两种算法将无法抵抗彩虹表攻击[lc10] (主要针对单项哈希函数[lc11] )。对于数据保密存储低强度算法:DES、RSA1024、MD5、SHA1,高强度算法:3DES、AES、RSA2048、SHA256、SM系列。
(1)询问系统管理员,了解不同测评对象的鉴别数据是否已采用密码技术来保证存储过程中的保密性。
(2)核查鉴别数据的数据表或文件是否采用了加密存储。
数据备份恢复
A)应提供重要数据的本地数据备份与恢复功能;
B)应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地;
C)应提供重要数据处理系统的热冗余,保证系统的高可用性。
1. 核查重要数据处理系统(应用服务器和数据库服务器等)是否采用热冗余方式部署。
剩余信息保护
A)应保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除;
这一条强调的鉴别信息。即用户名、密码等鉴别相关的信息,在Window Server 2008以前的版本中未明确鉴别信息是否进行了存储或缓存,但在Window Server 2008及以上版本中就可以配置了。
1. 询问系统管理员,了解应用系统是否已采取措施对存储介质(例如硬盘或内存)中的用户敏感信息及时清除.获取登陆时的cookie,然后退出登录时再次使用这个cookie查看是否可以登录。调出代码。
访问服务器控制台的用户具有其在该服务器上缓存的登录凭据。 能够访问服务器文件系统的攻击者可以找到此缓存的信息,并使用强力攻击来尝试确定用户密码。Windows 通过加密信息并将缓存的凭据保留在系统的注册表中
所以:为了不缓存鉴别信息,“交互式登录: 之前登录到缓存的次数(域控制器不可用时)”应设置为0。
B)应保证存有敏感数据的存储空间被释放或重新分配前得到完全清除。
应用系统将用户鉴别信息所在存储空间(例如硬盘或内存)的内容完全清除后才能分配给其他用户。例如,某应用系统将某用户的鉴别信息放在内存中处理,处理后没有及时将其清除,这样,其他用户就有可能通过一些非正常手段获取该用户的鉴别信息。
1. 询问系统管理员,了解应用系统是否已采取措施对存储介质(例如硬盘或内存)中的用户敏感信息及时清除。
个人信息保护
A)应仅采集和保存业务必需的用户个人信息;
(1)询问系统管理员,了解应用系统采集了用户的哪些个人信息。 .
(2)询问系统管理员,了解应用系统采集的用户个人信息是否是业务应用所必需的。
B)应禁止未授权访问和非法使用用户个人信息。
(1)询问系统管理员,了解哪些系统账户可以访问个人信息,以及应用系统采取了什么措施来控制可访问个人信息的系统账户对个人信息的访问。
(2 )核查相关措施是否有效限制了相关账户对个人信息的访问和使用。
[lc1]口令:输入密码;伪随机数序列生成的随机数(短信验证码多使用此类技术);
密码技术:一般需要非对称的加密算法来实现,例如手机令牌、加密狗、USBkey等;
生物技术:指纹;虹膜;声纹等;
[lc2]但是很多应用系统这方面的功能并不全,可能仅存在登录日志,但这也行,至少可以判定为部分符合。
如果被测评项系统找不到什么日志功能,可以考虑去业务流程模块去看看。
很多*部门的应用系统在业务流程记录这是很详细的,某人什么时候对某业务进行了什么操作,这也能判定为部分符合。
如果这也没有,可以考虑去看看中间件的日志,勉强也能算一个擦边球,至少可以当做是修正的理由。
如果中间件的日志也没有,那就算了吧,还是直接给判定成高风险吧。
[lc3]SHA是一系列的加密算法,有SHA-1、SHA-2、SHA-3三大类,而SHA-1已经被破解,SHA-3应用较少,目前应用广泛相对安全的是SHA-2。
该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段密文,也可以简单的理解为取一串输入码,并把它们转化为长度较短、位数固定的输出序列即散列值的过程。
单向性
单向散列函数的安全性在于其产生散列值的操作过程具有较强的单向性。如果在输入序列中嵌入密码,那么任何人在不知道密码的情况下都不能产生正确的散列值, SHA将输入流按照每块512位进行分块,并产生160位的被称为信息认证代码或信息摘要的输出。
数字签名
通过散列算法可实现数字签名,数字签名的原理是将要传送的明文通过一种函数运算(Hash)转换成报文摘要,报文摘要加密后与明文一起传送给接受方,接受方将接受的明文产生新的报文摘要与发送方的发来报文摘要比较。
什么是碰撞
哈希算法的一个重要功能是产生独特的散列,当两个不同的值或文件可以产生相同的散列,则称碰撞。保证数字签名的安全性,就是在不发生碰撞时才行。碰撞对于哈希算法来说是极其危险的,因为碰撞允许两个文件产生相同的签名。当计算机检查签名时,即使该文件未真正签署,也会被计算机识别为有效的。
[lc4]HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议。
[lc5]MAC(消息认证码)是一种用于保证数据完整性和身份认证的密码学技术。它是通过对数据应用密钥和算法来生成一个固定长度的校验码,用于验证数据在传输过程中是否被篡改或冒充。
MAC使用对称密钥算法,即发送方和接收方共享一个密钥。发送方使用密钥和MAC算法对数据进行处理,生成一个MAC值,并将其附加到原始数据中一起传输。接收方使用相同的密钥和算法对接收到的数据进行处理,并生成一个新的MAC值。然后,接收方将计算出的MAC值与接收到的MAC值进行比较。如果两个MAC值相等,就表示数据的完整性没有受到破坏并且来源可信。
MAC具有以下特点:
数据完整性:MAC可以检测数据在传输过程中的任何更改。如果数据被篡改,MAC值将不匹配。
身份认证:通过使用共享密钥,MAC还可以验证数据的发送者身份。
[lc6]SHA(Secure Hash Algorithm)是一系列密码学哈希函数,用于将任意长度的数据转换为固定长度的哈希值。SHA算法被广泛用于数据完整性校验、数字签名、密码存储等领域。
SHA系列算法包括SHA-1、SHA-224、SHA-256、SHA-384和SHA-512等。其中,SHA-1是最早的版本,而SHA-256、SHA-384和SHA-512是SHA-2系列的一部分。SHA-3是由Keccak算法获选为赢家而产生的新哈希算法。
SHA算法的核心思想是将输入数据转化为固定长度的哈希值,这个哈希值通常以十六进制表示。哈希函数的特点是:
不可逆性:从哈希值无法推导出原始数据。
独一性:数据发生微小的变化,哈希值会产生巨大的差异。
固定长度:SHA算法生成的哈希值长度是固定的
[lc7]完整性校验:
· 存储哈希值:将计算得到的哈希值与数据一起存储在数据库中。通常,可以在数据表中添加一个专门用于存储哈希值的列。
· 验证哈希值:在需要验证数据完整性时,从数据库中检索数据并重新计算哈希值。将重新计算的哈希值与存储在数据库中的哈希值进行比较。
[lc8]TLS(传输层安全):
TLS是一种用于保护网络通信的安全协议。它用于在客户端和服务器之间建立加密连接,以确保数据的机密性、完整性和身份验证。TLS通常在Web浏览器和服务器之间进行安全的HTTP通信(HTTPS),以防止数据在传输过程中被窃取或篡改。
TLS协议使用加密算法和数字证书来保护通信。当客户端与服务器建立连接时,TLS协议进行身份验证并协商加密算法和密钥,以便双方可以安全地进行通信。这包括使用公钥加密来确保数据机密性,使用哈希函数进行数据完整性检查,以及使用数字证书来验证通信方的身份。
[lc9]SSH(安全外壳协议):
SSH是一种网络协议,用于在不安全的网络上安全地进行远程登录和数据传输。与TLS类似,SSH提供了加密和身份验证机制,以保护通信的安全。
通过SSH,用户可以通过远程终端登录到远程服务器,并执行命令和操作。SSH使用公钥加密和对称加密算法来保护数据传输的机密性。此外,SSH还提供了公钥认证机制,即使用密钥对进行身份验证,确保只有持有私钥的用户才能成功连接和访问服务器,从而防止未经授权的访问。
[lc10]彩虹表攻击(Rainbow Table Attack)是一种用于破解密码哈希的攻击方法,主要针对使用单向哈希函数进行密码存储的系统。
彩虹表攻击利用了密码哈希函数的特性以及预先计算的哈希值和密码之间的对应关系。攻击者事先构建一个庞大的彩虹表,其中包含了各种可能的密码和其对应的哈希值。然后,当攻击者获得目标数据库中存储的哈希值时,他们可以使用彩虹表来查找对应的密码。
彩虹表攻击的基本过程如下:
预先计算:攻击者事先使用哈希函数对一系列可能的密码进行哈希,生成彩虹表。
目标哈希值获取:攻击者获得目标数据库中存储的密码哈希值。
查表还原:攻击者使用彩虹表查找目标哈希值对应的原始密码。
彩虹表攻击的效率较高,因为预先计算彩虹表只需要一次,然后可以在多次攻击中重复使用。然而,为了增加安全性,通常会采取一些防御措施,如加盐(Salt)和迭代哈希(Iterative Hashing)。
加盐是在密码哈希过程中添加随机的盐值,使每个用户的哈希结果都不同,即使相同的密码也会产生不同的哈希值。
迭代哈希是将哈希函数多次应用于密码上。例如,通过对密码进行多次迭代哈希,可以增加攻击者破解密码的时间成本。
[lc11]单向哈希函数(One-way Hash Function)是一种特殊的密码学哈希函数,它将输入数据转换为固定长度的哈希值,具有以下特点:
单向性:单向哈希函数是不可逆的,即无法从哈希值还原出原始输入数据。即使稍微改变输入数据的一个位或字符,也会产生完全不同的哈希值。
固定长度:无论输入数据的长度是多少,单向哈希函数都会生成固定长度的哈希值。常见的单向哈希函数,如SHA-256和MD5,生成的哈希值长度都是固定的。
碰撞抗性:单向哈希函数应具有较高的碰撞抗性,即在实际上难以找到两个不同的输入数据产生相同的哈希值。