相关概念
cybersecurity
:网络空间安全
涉及旨在保护设备,网络,程序和数据免受攻击和未经授权的访问的一系列实践,流程和技术; 网络安全不仅可以保护数据,还可以保护存储数据的资源和技术。information security
:信息安全
是关于保护信息的,通常集中在信息的机密性,完整性和可用性方面。
cyberseurity
应用于信息技术的安全,wiki上的 Cybersecurity information technology list 几乎列出了wiki上所有网域安全相关信息
wiki相关主题,关于英文的关键字是
Information security
,cybersecurity
,cyberspace
, 后两者者常用户的翻译是网络空间安全
,网络空间
。现在的安全相关相关信息用后者搜索到的信息更新一些.
基本原则
安全三元组
CIA triad: Confidentiality, Integrity, Availability
- Confidentiality
机密性, 隐私信息, 防止被他人看到,保证机密性的例子如在线支付,涉及的用户信息,密码保护等等。
-
Integrity
完整性, 数据一致、准确、可信的, 不会在传输过程中改变,保证完整性的例子如用户访问控制,文件权限; 版本控制(防止已授权用户误操作); 为了检测由于故障可能发生的数据变化,一些数据设置了校验和, 验证数据完整性。必须有冗余和备份才能将受影响的数据还原成正常状态。
-
Availabilty
可用性: 保障数据能够被正常访问。保证可用性的例子,比如磁盘的RAID, 应用集群,机房建设,同城异地灾备,通信线路选取多家运营商等等 。
面临挑战
- 大数据
由于要保护的数据信息量巨大,考虑到冗余和备份, 数据保存的成本会成倍增加。此外,由于大数据更关注于数据收集和对用户信息、行为的分析和理解, 通常缺乏数据监管。比如
Whistleblower Edward Snowden
-
物联网
物联网中实体和对象会有一个唯一标识符,并且具有网络通讯能力,单个接入设备可能不会引起任何隐私问题, 但是当整理和分析来自多个终端的数据时, 可能就会产生敏感数据。涉及领域如智能玩具,智能家居,智能医疗。
而且物联网设备通常不会经常打补丁,并且会使用默认密码或弱密码及进行配置,如不加保护很可能成为黑客用于攻击的载体。
解决方案
黄金法则: Authentication, Authorization, Audit
黄金法则
是系统安全设计的指导规范,是用户在访问使用系统过程中, 应考虑的最基本的安全设计要求。
- Authentication
身份认证和识别, 软件系统常用的就是用户, 密码,为了加强强度,后续又增加了多因素认证, 一般是双因素认证(2FA)
-
Authorization
授权确定能再系统中使用资源的范围
-
Audit
通过日志还原用户的操作,一般是出现问题后的一种防御措施.
安全最佳实践
- 设立专门防止内部威胁的职位
- 进行网络钓鱼模拟
- 确保员工远程访问安全
- 优先员工的隐私
- 进行安全相关培训
- 外包厂商应遵守相同的安全策略并接收培训
- 建立使用适合的信息安全框架(ISO/IEC27001)
- 监控用户和文件防止数据丢失
- 高价值行业(医疗,技术,银行)应防范更高层次的威胁
- 加强用户密码管理使用SSO,MFAs
- 特权用户审计
- 控制访问权限防止数据泄露
- 检测内部威胁
- 备份数据
- 雇佣合同,第三方外包时合同中应写明相关的保密条款
- 更新定期更新软件和使用系统
- 指定安全时间响应预案, 定期进行演练
- 定期进行安全培训及演练
- 合规要求:HIPAA, PCI, ISO, and DSS
- 在使用软件,组件之前应考虑相关安全性
- 指定标准人事流程防止人员离职到的数据流失
- 可以持续监控用户活动
- 自动化减少认为操作的错误
- GDPR合规要求
- 使用https提供服务
best practices
通过这个关键字搜索的一些信息,
参见文末链接19 Cybersecurity Best Practices to Protect Your Business
密码学基础
密码学算法
- 对称加密算法: DES, IDEA, AES, SM1, SM4
ECB/CBC/CFB/OFB/CTR
DES CTR加密模式的例子
[root@centosgpt python]# cat desctr.py
from Crypto.Cipher import DES
from Crypto.Random.random import Random
from Crypto.Util import Counter
def encrypt_des_ctr(plaintext):
if plaintext is None:
return
try:
key = b'1234A#CD'
nonce = b'0000'
ctr = Counter.new(32, prefix=nonce)
generator = DES.new(key, DES.MODE_CTR, counter=ctr)
#generator = DES.new(key, DES.MODE_CTR, nonce=nonce)
pad = 8 - len(plaintext) % 8
pad_str = ""
for i in range(pad):
pad_str = pad_str + chr(0)
pad_bytes = pad_str.encode()
encrypted = generator.encrypt(plaintext + pad_bytes)
result = encrypted.hex()
print ("plaintext:" +str(plaintext)+ " encrypted:" + str(result))
return result
except (ValueError, KeyError):
print (Exception)
return
encrypt_des_ctr(b'1234567890')
代码是参考 Python使用Crypto/pyDes,DES并Base64编码 , 可以看到下面两行, 选用是同样加密模式如果相关参数设置不同,加密结果也不一样。
generator = DES.new(key, DES.MODE_CTR, counter=ctr)
#generator = DES.new(key, DES.MODE_CTR, nonce=nonce)
- 非对称加密算法: RSA, ECC, SM2
-
散列算法: MD5, SHA, SM3
应用实践
- 实际使用加密算法除了长度参数, 还要关注加密模式,如对称加密钥模式, 填充算法, 以及初始向量的设置, 尤其是如果与外围系统信息交互时, 除了明确通讯协议,数据编码外, 需要明确相关加密参数。
-
使用已有的加密,哈希算法不要自己创造
身份认证
身份认证面临威胁
-
没有认证环节
-
弱密码
-
认证信息泄露
身份认证安全保证
-
安全规范:
安全规范主要包括管理制度规范和应用开发规范,针对不同场景的应用开发需要有不同等级的安全要求,区分内网和互联网应用(当然前提是做好了内外网的隔离), 这样减少的安全方面过度的设计。
-
密码安全:
- 密码哈希:
基于hash的账号, Hash算法不可逆,输入的变化一点,输出结果将完全不同; -
哈希破解:
-
字典攻击和暴力破解
- 查找表
- 反向查表法
-
彩虹表
-
密码加盐:
查找表和彩虹表能够工作是因为每个密码都进行相同的哈希处理,每次哈希加入随机数可以阻止这种攻击。 -
密码加盐误区:
-
盐值复用
- 盐值较短
-
双重盐值和组合hash
- md5(sha1(password))
- md5(md5(salt) + md5(password))
- sha1(sha1(password))
- sha1(str_rot13(password + salt))
- md5(sha1(md5(md5(password) + sha1(password)) + md5(password)))
- 哈希碰撞
是指不同的输入,输出的哈希值一样, 如MD5, 这种情况下要选择更加安全的算法 SHA256, SHA512, RipeMD, or WHIRLPOOL -
盐值哈希的基本处理步骤
-
存储密码
- 生成随机数
- 将盐值混入密码及及进行哈希运算
- 将盐值和哈希一起存入用户数据库
- 校验密码
- 数据库检索出用户的盐值和哈希值
- 将盐值混入密码, 进行哈希运算
- 上一步结果与数据库的哈希值比较
- 在服务端进行哈希
客户端角度, 逻辑上哈希后的密钥就是密码。一旦数据库用户信息泄露,就可以随意使用每个人的账户登录。
-
慢哈希函数
bcrypt, pbkdf2, SCrypt, Argon2, Argon2id, 升级算法。
通过采取安全因子或迭代次数, 使得运算足够的慢而不影响应用。 -
密钥希函及密码哈希硬件
使用密钥加密哈希值, 更安全的方式是将密钥存储在硬件设备中如:
YubiHSM
另外,密码保护仅仅是再系统收到攻击时保护密码,要提升应用安全是远远不够的, OWASP Top Ten是比较好的参考。
- 密码哈希:
-
图形验证:
防止短信风暴 -
客户预留信息:
客户在应用系统中记录一段信息, 在客户登录时显示出来 -
多因素认证:
认证方式: 短信验证码,邮件验证, google身份验证器 -
单点登录 (Single Sign On SSO)
- CAS
-
处理流程
流程图参考 Web flow diagram- 首次登录 应用1
- 用户登录初次应用服务器,未携带应用相关cookie信息;
- 应用服务器判断未授权, 重定向到CAS服务器;
- 用户重定向到CAS服务器 ,展示登录页面;
- 用户输入用户密码登录, 用户验证通过,CAS服务器生成SSO session, CASTGC cookie包含TGT返回用户,TGT会被存放到SSO session中, 返回给客户ticket, 应用拿到这个ticket到CAS验证用户是否登录, CAS应用重定向到应用服务器;
- 用户携带ticket到应用服务器;
- 应用服务器带着ticket到CAS进行验证;
- 身份验证成功, 返回应用系统
- 应用系统创建自己的SESSION,并通知客户端设置cookie信息
- 客户端携带应用的cookie信息就可以访问应用了;
- 再次登录应用1
- 应用系统创建自己的SESSION,并通知客户端设置cookie信息
- 客户端携带应用的cookie信息就可以访问应用了;
- 登录应用2
- 用户登录初次应用服务器,未携带应用2相关cookie信息;
- 应用服务器判断未授权, 重定向到CAS服务器;
- 用户登录CAS携带TGC,CAS使用TGC验证TGT后,返回ST给用户;
- 用户携带ST访问应用2;
- JWT, OAuth, OpenID
-
JWT
JWT-JSON Web Tokens: 这只是令牌格式。JWT令牌是JSON编码的数据结构,包含有关发行者,主题,到期时间等信息。经过签名以进行篡改证明和真实性,并且可以使用对称或不对称方法对其进行加密以保护令牌信息。 -
OAuth2:
解决了用户希望使用客户端软件(例如基于浏览的Web应用程序,本机移动应用程序或桌面应用程序)访问数据的问题。 OAuth2仅用于授权,可以授权客户端软件使用访问令牌代表最终用户访问资源。 -
OpenID
Connect-OpenID Connect建立在OAuth2之上并添加身份验证。 OpenID Connect向OAuth2添加了一些约束,例如UserInfo端点,ID令牌,OpenID Connect提供程序的发现和动态注册以及会话管理。
访问控制
访问控制常见的四种: DAC, role-BAC, rule-BAC, MAC
- DAC
所有这维护规则,如Linux的文件访问权限. -
role-BAC
基于角色,根据不同权限方案分组设定角色. linux group -
rule-BAC
基于请求, 如防火墙的控制策略. -
MAC
强制访问控制, 每一份数据针对每一个角色都有机密等级
威胁评估
- 识别数据
安全保护的核心资产
-
识别攻击
分析可能的攻击方式
-
识别漏洞
根据应用识别可能的漏洞
相关链接
极客时间-安全功能技能30讲-安全的本质
极客时间–安全功能技能30讲-安全原则
极客时间–安全功能技能30讲-密码学基础
极客时间–安全功能技能30讲-身份认证
极客时间–安全功能技能30讲-访问控制
Cybersecurity vs. Information Security: Is There a Difference?
confidentiality, integrity, and availability (CIA triad)
khanacademy-Cybersecurity
19 Cybersecurity Best Practices to Protect Your Business
Password Hashing: Scrypt, Bcrypt and ARGON2
Salted Password Hashing – Doing it Right
What are the main differences between JWT and OAuth authentication?
Be First to Comment