安全攻防技能-安全基础概念

相关概念

  • cybersecurity: 网络空间安全涉及旨在保护设备,网络,程序和数据免受攻击和未经授权的访问的一系列实践,流程和技术; 网络安全不仅可以保护数据,还可以保护存储数据的资源和技术。
  • information security: 信息安全是关于保护信息的,通常集中在信息的机密性,完整性和可用性方面。

cyberseurity应用于信息技术的安全,wiki上的 Cybersecurity information technology list 几乎列出了wiki上所有网域安全相关信息

wiki相关主题,关于英文的关键字是 Information security, cybersecuritycyberspace, 后两者者常用户的翻译是网络空间安全, 网络空间。现在的安全相关相关信息用后者搜索到的信息更新一些.

基本原则

安全三元组

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

应用实践

  1. 实际使用加密算法除了长度参数, 还要关注加密模式,如对称加密钥模式, 填充算法, 以及初始向量的设置, 尤其是如果与外围系统信息交互时, 除了明确通讯协议,数据编码外, 需要明确相关加密参数。
  2. 使用已有的加密,哈希算法不要自己创造

身份认证

身份认证面临威胁

  • 没有认证环节

  • 弱密码

  • 认证信息泄露

身份认证安全保证

  • 安全规范:

    安全规范主要包括管理制度规范和应用开发规范,针对不同场景的应用开发需要有不同等级的安全要求,区分内网和互联网应用(当然前提是做好了内外网的隔离), 这样减少的安全方面过度的设计。

  • 密码安全:

    • 密码哈希:
      基于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
      1. 用户登录初次应用服务器,未携带应用相关cookie信息;
      2. 应用服务器判断未授权, 重定向到CAS服务器;
      3. 用户重定向到CAS服务器 ,展示登录页面;
      4. 用户输入用户密码登录, 用户验证通过,CAS服务器生成SSO session, CASTGC cookie包含TGT返回用户,TGT会被存放到SSO session中, 返回给客户ticket, 应用拿到这个ticket到CAS验证用户是否登录, CAS应用重定向到应用服务器;
      5. 用户携带ticket到应用服务器;
      6. 应用服务器带着ticket到CAS进行验证;
      7. 身份验证成功, 返回应用系统
      8. 应用系统创建自己的SESSION,并通知客户端设置cookie信息
      9. 客户端携带应用的cookie信息就可以访问应用了;
      • 再次登录应用1
      1. 应用系统创建自己的SESSION,并通知客户端设置cookie信息
      2. 客户端携带应用的cookie信息就可以访问应用了;
      • 登录应用2
      1. 用户登录初次应用服务器,未携带应用2相关cookie信息;
      2. 应用服务器判断未授权, 重定向到CAS服务器;
      3. 用户登录CAS携带TGC,CAS使用TGC验证TGT后,返回ST给用户;
      4. 用户携带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

发表回复