Fork me on GitHub

安全攻防学习笔记

极客时间学习笔记系列之一,以后会坚持学习记录和更新。

安全攻防知识全景图


安全攻防知识全景图

学习目标

既懂“攻”又懂“防”,既懂理论也懂实践

学习建议

安全是一个特别重实践的领域,如果你有时间,一定要多练习,多总结。

第一模块:安全基础

01丨安全的本质:数据被窃取后,你能意识到问题来源吗?

系统地讲解安全基础概念、思考框架,以及解决安全问题的思路,带你从理论层次认知安全,让你能够系统地看待安全问题、评估安全需求,为你的安全学习指明方向。

任何应用最本质的东西是数据,安全的本质是保护数据被合法地使用

CIA三元组原则


CIA

1.机密性 Confidentiality

确保数据只被授权的主体访问,不被任何未授权的主体访问。即是“不可见”

2.完整性 Integrity

完整性就是确保数据只被授权的主体进行授权的修改,简单来说,就是“不可改”。

3.可用性 Availability

可用性就是确保数据能够被授权的主体访问到, 简单来说,就是“可读”。

Q1.举个典型的例子,面对高峰期的集中用户访问,如何保障用户能够正常地获取数据(“双 11”购物或者 DDoS 攻击等)?

你可以看到大量的研发人员对这个问题进行探讨和分享,但这其实都属于安全在可用性上的考量范围。

A1:在安全机制上,我们要确保授权机制能够正确运行,使得拥有访问数据的主体能够及时地被授权,这是可用性的基本。

Q2.那具体来说,可用性会面临哪些挑战呢?

A2:

  • 在运维层面上,有很多技术在为可用性提供支撑,比如,在基础建设上的机房建设(如何在断电、高温、火灾等情况下保护设备)、多地冗余,以及在服务中的备份、资源冗余等。

  • 在研发层面上,如何降低响应延迟、如何处理海量数据、如何在峰值进行扩容等,这些问题其实都是在可用性上的挑战。

  • 在攻击的角度上,黑客也会对可用性发起攻击,也就是我们常说的 DoS(Denial of Service,拒绝服务)攻击。比如,通过发送大量的流量来占满带宽资源。DDoS and CC

根据不同的发展阶段,列好 CIA 的优先级,是我们理解安全问题、定义安全需求、建设安全体系首先要做的事情。

Q3.你能否从 CIA 三元组的三个特性出发,结合你们公司的业务系统情况,和我分享下你理解的安全是什么?

1
2
3
4
5
6
7
8
9
10
11
12
A3:  CIA三个特性分别是:机密性、完整性、可用性。我目前就职的公司主要业务是做专业商务会议查询、报名的票务营销平台。

1.A可用性,在保持系统正常运行的情况下,采用负载均衡、分布式部署,增强系统性能。因为如果可用性都不能保证,平台不能正常运营,那么其他都毫无意义。

2.C机密性,保护用户信息数据、公司订单数据,是让客户信任公司的关键,强化数据安全,比如手机号、身份证信息脱敏等。

3.I完整性,因为业务流程包含下单和支付等涉及金钱的操作,所以对完整性还是有一定诉求的。比如用户的交易记录如果出现错误或者丢失了,可能最后对账都对不上,财务都过不去。不过在投入可以取舍,比如简单的多存几份日志,也能够提升完整性的保障。

==========================
主要做的是项目的支付模块,相应的支付借口的调用,敏感参数都进行了RSA非对称加密处理,并对总的做了签名校验。
对于订单支付操作做了完整的日志记录,以确保数据的完整性。
对于可用性只是采用项目的分布式部署以保证高可用。

02 | 安全原则:我们应该如何上手解决安全问题?

什么是“黄金法则”?

对于安全解决方案来说,“黄金法则”的理解方式不错。

黄金法则主要包含三部分:认证(Authentication)、授权(Authorization)、审计(Audit)。为什么称它为“黄金”呢?一方面是因为,它包含的这三部分重要且通用;另一方面是因为,这三个单词的前两个字母都是 Au,而 Au 在元素周期表中代表着“金”。

有的教材中,会给黄金法则加上问责(Accounting)这一部分,组成“4A 法则”;还有的会加上身份识别(Identification),组成“IAAAA 法则”。不管被划分为几个部分,这些法则的中心内容都是相似的,都是围绕着识别、认证、授权、审计、问责这五个部分展开的。

“黄金法则”的三个部分(认证、授权、审计):描述的其实是用户在使用应用过程中的生命周期:先进行登录、再进行操作、最后留下记录

AAA

1.身份识别和认证

认证其实包括两个部分:身份识别和认证

身份识别和认证通常是同时出现的一个过程。身份识别强调的是主体如何声明自己的身份,而身份认证强调的是主体如何证明自己所声明的身份是合法的

不管以什么形式进行登入,在身份识别的过程中,这些形式最终都需要落地成唯一的身份 id。在你后续的操作中,身份 id 都会始终跟随会话,记录在日志中。这也是后续授权、审计和问责的基础。身份识别的过程并不关注合法性,因此,认证是这个部分中最为关键的一环。

依据具体的认证场景,对安全等级、易用性等的综合考量,认证形式可以大致分为三种。按照认证强度由弱到强排序,分别是:

  • 你知道什么(密码、密保问题等);

  • 你拥有什么(门禁卡、安全令牌等);

  • 你是什么(生物特征,指纹、人脸、虹膜等)。

可信的身份认证是建立安全保障体系的第一步

2.授权

关注授权机制。最原始和最安全的授权机制,一定是你的每一次操作,都经过了管理人员的审批和确认。

3.审计和问责

审计和问责通常也是共同出现的一个过程,因为它们都需要共同的基础:日志。很容易理解,所谓审计,就是去通过日志还原出用户的操作历史,从而判断是否出现违规的操作。而问责则是通过日志的完整性,来确保日志还原出来的操作是可信的。

一定不要狭义地去理解黄金法则的每个模块。

认证不仅是帐密登录,也可以是生物特征识别或者证书等形式;

授权不只是基于简单规则的访问控制,基于内容或者会话的检测等也是授权的一部分;

审计也不只是简单的翻日志,很多机器学习、异常检测的算法,也都能运用到审计中来。

针对不同的数据,不同的访问形式,我们能够采用的认证、授权、审计技术都不尽相同。

概括:大部分情况下,事前防御属于认证,事中防御属于授权,事后防御属于审计

企业安全建设管理

(内容更偏向于甲方)

安全问题需要自上而下的方式去进行管理和推动

根据周期的不同,制定三种安全规划,举例,可以制定 5 年左右的战略计划、1 年左右的战术计划、3 个月左右的操作计划。

  • 战略计划是一个较长期的安全目标,它和企业的长期发展目标相结合,保证安全的发展能够符合企业的长期发展方向。(周期5年左右)

  • 战术计划会基于长期的安全目标,拆解出详细的任务计划,比如:项目列表、安全预算、人员扩张等。(周期1年左右)

  • 操作计划则是对战术计划的具体实现,包括人员的分配、资源的投入、进度的安排等。(一般3个月左右,但也可以按照1个月或几周的形式进行迭代)

和产品研发一样,当建立好不同的计划后,我们就能够给予企业的安全建设一个明确的方向,大大降低投入的成本,提高效率。因此,挖掘安全问题,明确安全计划,对于企业建立安全体系来说,至关重要。

安全没有“银弹”。只有当可用性接近 0 时,我们才有可能接近 100% 的安全。(比如:给电脑断网断电)。所以,在实际进行安全防御的时候,不要过分追求完美,先有基本的保障就可以了。

(思考题)

Q1. 尝试分析一下,你负责的系统和应用中,在认证、授权和审计方面,分别做了哪些工作?又起到了怎样的保护效果?

Q2. 安全问题需要自上而下的方式去进行管理和推动,这只是我个人的观点。结合你们公司的实际情况,站在你的角度,你觉得你们公司应该如何去推动安全建设呢?

Q3: 双因子认证是什么意思 ?解决的是什么问题。

A3: 双因子认证,就是通过两种不同的方式来共同认证。比如之前网银交易的时候,既需要支付密码,也要u盾的一次性口令。现在可能这种显性的双因子可能不多了,因为都把手机这个设备当作可信环境来作认证了。

讲师补从:

1
断电恢复其实挺考验运维能力的,也是可用性需要考量的范围。除了引入断电保护的一些设备(如ups,发电机),最好还能够定期进行演练,来验证这些设备是不是真的有效,以及有哪些点是疏漏的。

03 | 密码学基础:如何让你的密码变得“不可见”?

对称加密算法

所谓对称加密,代表加密和解密使用的是同一个密钥

对称加密算法

cryptography

DES已能被破解,目前,它暴力破解 56 位密码的时间,已经能控制在 24 小时内了。DES 包含一个关键模块:S 盒,其设计的原理一直没有公开。因此,很多人都相信,这个 S 盒中存在后门,只要美国政府需要,就能够解密任何 DES 密文。

IDEA 的优势在于没有专利的限制

AES 是国际上最认可的密码学算法

国密算法 SM1 和 SM4 都属于对称加密的范畴。SM1 算法不公开,属于国家机密,只能通过相关安全产品进行使用。而 SM4 属于国家标准,算法公开,可自行实现使用。国密算法的优点显而易见:受到国家的支持和认可。

对于大部分公司来说,选取 AES128 进行加解密运算,就能获得较高的安全性和性能。如果是金融或政府行业,在涉及国家层面的对抗上,有一定的合规需求,则需要应用国密算法。

另外,在选取加密算法的时候,存在不同的分组计算模式:ECB/CBC/CFB/OFB/CTR。这些模式的具体细节不是我们学习的重点,在这里就不展开了。你需要知道的是:选取 CBC 和 CTR 这两种推荐使用的模式就可以满足大部分需求了,它们在性能和安全性上都有较好的保证。

非对称加密算法

具体的加解密过程就是,发送方使用公钥对信息进行加密,接收方收到密文后,使用私钥进行解密

在非对称加密算法中,公钥是公开信息,不需要保密,我们可以简单地将一个公钥分发给全部的通信方。

非对称加密

除了加密功能外,大部分的非对称算法还提供签名的功能。这也就是说,我们可以使用私钥加密,公钥解密(即是我们说的签名)。一旦接收方通过公钥成功解密,我们就能够证明发送方拥有对应的私钥,也就能证实发送方的身份,也就是说,私钥加密就是我们说的签名。

签名示意图

经典的非对称加密算法包括:RSA、ECC 和国密 SM2。接下来,我们一个个来看。

RSA(RSA 加密算法,RSA Algorithm)。

RSA 的数学难题是:两个大质数 p、q 相乘的结果 n 很容易计算,但是根据 n 去做质因数分解得到 p、q,则需要很大的计算量。RSA 是比较经典的非对称加密算法,它的主要优势就是性能比较快,但想获得较高的加密强度,需要使用很长的密钥

ECC(椭圆加密算法,Elliptic Curve Cryptography)。

ECC 是基于椭圆曲线的一个数学难题设计的。目前学术界普遍认为,椭圆曲线的难度高于大质数难题,160 位密钥的 ECC 加密强度,相当于 1088 位密钥的 RSA。因此,ECC 是目前国际上加密强度最高的非对称加密算法。

国密 SM2(SM2 Cryptographic Algorithm)。

国密算法 SM2 也是基于椭圆曲线问题设计的,属于国家标准,算法公开,加密强度和国际标准的 ECC 相当。而国密的优势在于国家的支持和认可

三种非对称加密的对比

对比于对称加密算法,非对称加密算法最大的优势就是解决密钥分发的问题。因此,现在大部分的认证和签名场景,其实使用的都是非对称加密算法。

遇到需要使用非对称加密的场景(比如多对一认证),推荐你使用 ECC 算法。

散列算法

大量的应用都在使用 MD5 或者 SHA 算法计算一个唯一的 id。比如 Git 中的提交记录、文件的完整性校验、各种语言中字典或者 Map 的实现等等。很多场景下,我们使用散列算法并不是为了满足什么加密需求,而是利用它可以对任意长度的输入,计算出一个定长的 id。

作为密码学的算法,散列算法除了提供唯一的 id,其更大的利用价值还在于它的不可逆性。当用户注册,提交账号密码时,作为一个安全的应用,是绝对不能够存储明文密码的。因此,我们对用户的密码通过散列算法进行计算,存储最终的散列值。

除了刚才说的不可逆性,在密码学上,我们对散列算法的要求还有:鲁棒性(同样的消息生成同样的摘要)、唯一性(不存在两个不同的消息,能生成同样的摘要)。

经典的散列算法包括:MD5、SHA、国密 SM3

MD5(消息摘要算法,Message-Digest Algorithm 5)。MD5 可以用来生成一个 128 位的消息摘要,虽然,因为算法的缺陷,它的唯一性已经被破解了,但是大部分场景下,这并不会构成安全问题。但是,如果不是长度受限(32 个字符),我还是不推荐你继续使用 MD5 的。

SHA(安全散列算法,Secure Hash Algorithm)。

SHA 是美国开发的政府标准散列算法,分为 SHA-1 和 SHA-2 两个版本,和 MD5 相同,虽然 SHA 的唯一性也被破解了,但是这也不会构成大的安全问题。目前,SHA-256 普遍被认为是相对安全的散列算法,也是我最推荐你使用的散列算法。

国密 SM3(SM3 Cryptographic Algorithm)。

国密算法 SM3 是一种散列算法。其属于国家标准,算法公开,加密强度和国际标准的 SHA-256 相当。和国密 SM2 一样,它的优势也在于国家的支持和认可。

散列算法对比

在使用散列算法的时候,有一点需要注意一下,一定要注意加“盐”。所谓“盐”,就是一串随机的字符,是可以公开的。将用户的密码“盐”进行拼接后,再进行散列计算,这样,即使两个用户设置了相同的密码,也会拥有不同的散列值。同时,黑客往往会提前计算一个彩虹表来提升暴力破解散列值的效率,而我们能够通过加“盐”进行对抗。“盐”值越长,安全性就越高。

总结

对称加密具备较高的安全性和性能,要优先考虑。

在一对多的场景中(如多人登录服务器),存在密钥分发难题的时候,我们要使用非对称加密;

不需要可逆计算的时候(如存储密码),我们就使用散列算法。

在具体算法的选取上,你只需要记住:对称加密用 AES-CTR、非对称加密用 ECC(160以上密钥长度)、散列算法用 SHA256 加盐。这些算法就能够满足大部分的使用场景了,并且在未来很长一段时间内,都可以保持一个较高的安全强度。

04丨身份认证:除了账号密码,我们还能怎么做身份认证?

‘;–have i been pwned?(如果显示“Oh no -powned!”,那就说明你的邮箱密码已经被泄露了,我建议你可以尽快修改你的密码了。)

认证,也就是身份识别与认证(通常来说,识别和认证是一体的,因此后面我会用身份认证来指代识别和认证)。

身份认证可以分为两个部分:对外认证和对内认证

  • 对外认证,其实就是应用的登录注册模块,它面向用户进行认证。对外认证的入口比较集中,一个应用通常只有一个登录入口。

  • 对内认证,除了应用本身需要有登录注册的模块,应用的各种内部系统同样需要涉及登录认证的功能。比如:服务器的登录、数据库的登录、Git 的登录、各种内部管理后台的登录等等。

两者的区别:最主要的区别在于认证场景的复杂程度对外认证是单一场景下的认证,对内认证是多场景下的认证

身份认证

“面对一个问题时,我们总是很容易发现表面的影响,而忽视其产生的根本原因”,在身份认证这个问题上同样如此。表面上,我们要做好对外认证,防止用户的账号被盗。根本上或者说更普遍的问题是,我们要如何做好对内认证。

总结来说,身份认证面临的威胁其实都是认证信息的泄漏

不只是在解决一个技术问题,还要培养外部用户和内部员工的安全意识

保证身份认证的基本的解决方案

比如,对密码的强度进行限制(如强制使用字母、数字、特殊字符的组合密码,并达到一定长度),强制用户定期修改密码,对关键操作设置第二密码(如微信、支付宝的支付密码)等等。

比如,通过手机验证替代密码验证(因为丢失手机的几率比丢失密码的几率低);通过人脸、指纹等生物特征替代密码。

可以通过加密信道(如 HTTPS)来防止窃听;

也可以通过给下发的凭证设置一个有效期,来限制凭证在外暴露的时间,以此来减少重放攻击带来的影响。

身份认证的最大的问题还是在于身份管理。随着公司业务的不断扩张,当账号体系变得越来越复杂时,如何对这些账号进行统一的管理,是解决身份认证问题的关键。而单点登录就是一个非常有效的解决方案。

单点登录如何解决身份认证问题?

什么是单点登录(Single Sign On,SSO)

用户只需要进行一次认证,就可以访问所有的网页、应用和其他产品了。

几种典型的单点登录方式:CAS 流程、JWT、OAuth 和 OpenID

第一个要讲的是 CAS(Central Authentication Service,集中式认证服务)流程

CAS 是一个开源的单点登录框架,它不属于某一种单点登录的实现方式,而是提供了一整套完整的落地方案。整体的流程如下图所示,具体步骤我会通过访问极客时间 App 的例子来为你详细讲解。

CAS

1
2
3
4
5
6
7
1.假如用户现在要访问某个应用,比如极客时间App。
2.应用需要进行认证,但应用本身不具备认证功能。因此,应用将用户重定向至认证中心的页面。比如,你在登录一个应用的时候,它显示你可以选择微信、QQ、微博账号进行登录,你点击微信登录,就跳转至微信的登录页面了。
3.用户在认证中心页面进行认证操作。如果用户之前已经在其他应用进行过认证了,那么认证中心可以直接识别用户身份,免去用户再次认证的过程。
4.认证完成后,认证中心将认证的凭据,有时会加上用户的一些信息,一起返回给客户端。也就是你在微信登录完成后,回到了极客时间 App。
5.客户端将凭据和其他信息发送给应用,也就是说,极客时间 App 将微信的登录凭据发送给了极客时间后端。
6.应用收到凭据后,可以通过签名的方式,验证凭据的有效性。或者,应用也可以直接和认证中心通信,验证凭据并获取用户信息。这也就是为什么极客时间能够拿到你的微信头像了。
7.用户完成认证。

JWT(JSON Web Token)是一种非常轻量级的单点登录流程。它会在客户端保存一个凭证信息,之后在你每一次登录的请求中都带上这个凭证,将其作为登录状态的依据。JWT 的好处在于,不需要应用服务端去额外维护 Cookie 或者 Session 了。但是,正是因为它将登录状态落到了客户端,所以我们无法进行注销等操作了。

OAuth(Open Authorization)的主要特点是授权,也是我们通常用 QQ、微信登录其他应用时所采用的协议。通过 OAuth,用户在完成了认证中心的登录之后,应用只能够验证用户确实在第三方登录了。但是,想要维持应用内的登录状态,应用还是得颁发自己的登录凭证。这也就是为什么 QQ 授权后,应用还需要绑定你的手机号码。这也就意味着,应用是基于 QQ 的信息创建了一个自身的账号。

OpenID(Open Identity Document)和 OAuth 的功能基本一致。但是,OpenID 不提供授权的功能。最常见的,当我们需要在应用中使用微信支付的时候,应用只需要收集支付相关的信息即可,并不需要获取用户的微信头像。

在实际情况中,基于各种业务需求的考虑,很多公司都倾向于自己去实现一套 SSO 的认证体系,它的认证流程如下图所示:

OpenID

在这个流程中,应用的服务器直接接收用户的认证信息,并转发给认证中心。
对用户来说,这个认证中心是完全透明的。
但是,这个流程给予了应用过多的信任,从安全性方面考量的话,是不合理的。在这个过程中,应用直接获取到了用户的认证信息,但应用能否保护好这些信息呢?我们并没有有效的办法去做确认。

建议是,多花一些功夫去接入成熟的单点登录体系,而不是自己去实现一个简化版的

JWT 适用范围广,在单点登录的选取上面,如果想要将用户信息做统一管理,选择它最为简单;

如果认证中心只是被用来维护账号密码,由业务去维护用户所绑定的其他手机等信息,那么采用 OAuth 更合适

小结

身份认证的主要场景可以分为:对外认证对内认证

对内认证往往会因为管理的疏忽,导致很严重的问题。从威胁上来说,无认证弱密码,是最普遍的安全问题。除此之外,各种密码和认证信息的窃取,也是黑客常用的攻击手段。

对于身份认证来说,单点登录是一种集大成的解决方案。基于 CAS 流程,衍生出了很多成熟的单点登录流程,可以供你去使用。

掌握身份认证的一些技巧,对我们有哪些帮助呢?

  • 首先,任何的应用都会存在对内和对外的认证,因此,这将是你提升应用安全水平的一个首要任务。
  • 其次,在复杂的应用系统和网络结构中,如何管理身份认证,既优化用户体验,又保证其安全性,对你的设计和管理能力都是一个考验。

做好了身份认证,不论是在安全上,还是在个人能力上,你都能够得到极大的提升。

面试题

Q: 现在我们公司有好几个应用,每一个应用都有独立的账号体系,管理起来十分复杂。而且,内部员工的账号体系也没有建设起来。如果是你,你会怎么解决这些问题呢?

A:答题思路:

  • 首先,你需要告诉面试官,公司目前存在哪些认证问题。这些认证问题的存在,可能导致哪些严重后果
  • 接下来,就可以设想一下,想要解决这些认证问题,你会设计出怎样的认证体系

05 | 访问控制:如何选取一个合适的数据保护方案?

“授权”和“访问控制”其实是同一个概念,都是允许或者禁止某个用户做某件事情。现在行业内普遍用“访问控制”这个术语来讨论相关问题。

访问控制模型

访问控制的场景是什么。具体来说就是,一个主体请求一个客体,这个请求的授权由访问控制来完成。

访问控制

具体的理解访问控制模型

在用户去读取文件的过程中,用户是主体,读取这个操作是请求,文件是客体。

  • 主体:请求的发起者。主体可以是用户,也可以是进程、应用、设备等任何发起访问请求的来源。

  • 客体:请求的接收方,一般是某种资源。比如某个文件、数据库,也可以是进程、设备等接受指令的实体。

  • 请求:主体对客体进行的操作。常规的是读、写和执行,也可以进一步细分为删除、追加等粒度更细的操作。

常见的访问控制机制

访问机制是否对请求进行授权,决定着这个操作能否顺利执行下去。

常见的访问控制机制有 4 种:DAC、role-BAC、rule-BAC、MAC。

1.DAC(Discretionary Access Control,自主访问控制)。

DAC 就是让客体的所有者来定义访问控制规则

在 DAC 中,访问控制的规则维护完全下发到了所有者手上,管理员在理论上不需要对访问控制规则进行维护。因此,DAC 具备很高的灵活性,维护成本也很低。相对的,尽管 DAC 降低了管理员的工作难度,但是会增加整体访问控制监管的难度,以至于安全性完全取决于所有者的个人安全意识。

DAC 适合在面向用户的时候进行使用。当用户需要掌控自己的资源时,我们通常会采取 DAC,来完成访问控制。比方说,Linux 中采用的就是 DAC,用户可以控制自己的文件能够被谁访问。

2.role-BAC(role Based Access Control,基于角色的访问控制)。

role-BAC 就是将主体划分为不同的角色,然后对每个角色的权限进行定义。

role-BAC 是防止权限泛滥,实现最小特权原则的经典解决方案。

role-BAC 更适合在管理员集中管理的时候进行使用。在这种情况下,所有的权限都由管理员进行分配和变更,所以,使用 role-BAC 可以大大降低管理员的工作难度,提高他们的工作效率。

应用可以对不同的角色限定不同的操作权限,比如:运维人员给开发、产品、运维划分不同的机器操作权限。

3.rule-BAC(rule Based Access Control,基于规则的访问控制)。

rule-BAC 就是制定某种规则,将主体、请求和客体的信息结合起来进行判定。

在 rule-BAC 中,有一点需要我们注意。那就是,我们需要定义是“默认通过”还是“默认拒绝”,即当某次请求没有命中任何一条规则时,我们是应该让它“通过”还是“拒绝”呢?这需要根据安全的需求来进行综合考量。

比如,某个服务只提供了 80 和 443 端口的 Web 服务,那么防火墙配置的规则是允许这两个端口的请求通过。对于其他任何请求,因为没有命中规则,所以全部拒绝。这就是“默认拒绝”的策略。很多时候,为了保障更高的可用性,应用会采取“默认通过”的策略。

rule-BAC 适合在复杂场景下提供访问控制保护rule-BAC 相关的设备和技术在安全中最为常见。一个典型的例子就是防火墙。防火墙通过将请求的源 IP 和端口、目标 IP 和端口、协议等特征获取到后,根据定义好的规则,来判定是否允许主体访问。比如,限制 22 端口,以拒绝 SSH 的访问。同样地,应用也往往会采取风控系统,对用户异常行为进行判定。

三者的区别:相比较来说,DAC 是所有者对客体制定的访问控制策略,role-BAC 是管理员对主体制定的访问控制策略,而 rule-BAC 可以说是针对请求本身制定的访问控制策略

4.MAC(Mandatory Access Control,强制访问控制)。

MAC 是一种基于安全级别标签的访问控制策略。

在互联网中,主体和客体被划分为“秘密、私人、敏感、公开”这四个级别。MAC 要求对所有的主体和客体都打上对应的标签,然后根据标签来制定访问控制规则

1
2
3
比如:
为了保证机密性,MAC不允许低级别的主体读取高级别的客体、不允许高级别的主体写入低级别的客体;
为了保证完整性,MAC不允许高级别的主体读取低级别的客体,不允许低级别的主体写入高级别的客体。

简化记忆规则:机密性不能低读、高写;完整性不能高读、低写

MAC 是安全性最高的访问控制策略。但它对实施的要求也很高,需要对系统中的所有数据都进行标记。在实际工作中,想要做到这一点并不容易。每一个应用和系统,每时每刻都在不停地生产新的数据,数据也不停地在各个系统之间流转。你需要对这些行为进行全面的把控,才能将标签落地。因此,MAC 仅仅会出现在政府系统中,普通公司在没有过多的合规需求下,不会采取 MAC。

4种访问控制机制对比

在实际工作中,它们是如何应用的呢?

在实际的工作中,常需要将它们进行组合使用

比如,在 Linux 中,我们除了对文件进行 DAC 访问控制,也利用了 role-BAC 定义了用户组(group)的概念。这样,管理员就可以将用户分配到不同的组中,DAC 也会按照分组去定义相应的权限了。所以,使用访问控制机制的时候,我们要学会灵活应用

面试题

Q: 既然身份认证都做到这么好了,是不是就不需要所谓的‘黄金法则’了?有了身份认证,还需要授权和审计做什么呢?

A: 要先给出否定的回答,这个很显然。可以说:“通过身份认证,我们只能够确认用户的身份,而对用户的操作和访问行为的把控,就是授权和审计的任务了。” (PS: 如果准备充足,可以谈谈零信任网络)

Q:我们公司的授权机制比较随意,基本就是有什么需求就做什么。如果是你,你会怎么设计或优化授权机制呢?

(参考常见的4种访问控制机制,针对公司业务,组合使用。)

首先,从访问控制的机制上入手,其实还可以通过对公司进行威胁评估,来说服面试官你的方案是正确的。

威胁评估的步骤

在前面的课程中,我们描述了如何去衡量安全以及如何去做安全。但是,在安全方案实际落地的过程中,我们首先要考虑的是:目前存在哪些安全威胁。只有明确了这些安全威胁,你才能够成功说服老板和业务人员,去配合你推动安全方案的落地。首先要做的就是威胁评估,看看哪里有安全威胁。

威胁评估主要有三个步骤:识别数据、识别攻击、识别漏洞

我们先来看一下识别数据。我们知道,安全保护的核心资产就是数据。因此,威胁评估的第一步就是去识别数据。识别数据的最终目的是,当发生攻击,某一份数据的 CIA 受到影响时,会对公司造成多大的损失。这也是我们衡量安全投入高低的一个主要指标

一般情况下,在识别完数据之后,我们就能推测出黑客会采取哪些方式进行攻击,这也就到了第二个步骤:识别攻击。识别攻击的核心就是,明确什么样的数据有价值被攻击。比如,对于公开的数据,没有被窃取的意义,所以黑客只会通过爬虫来抓站,而不会花费更大的成本去盗号。

在识别了数据和攻击之后,我们就需要根据应用去识别可能的漏洞了。这也就是第三个步骤:识别漏洞。比如,对于 Web 应用,它可能出现诸如 XSS、SQL 注入等 Web 漏洞。关于这一点,业内将常见的攻击和漏洞进行了总结。比如,近两年来由 MITRE 提出的ATTACK框架比较知名。在识别漏洞的时候,我们可以基于这些总结性框架去进行罗列。

通过对数据、攻击、漏洞的识别,你就能够知道,公司当前面临了哪些潜在的威胁,从而可以去思考解决方案,并推动它的落地。通常来说,我们需要定期(比如每年)对公司进行一次全面的威胁评估工作,并且随着公司的发展,不断调整安全方案。

总结

4 种常见的访问控制机制:DAC、role-BAC、rule-BAC 和 MAC。它们的特点分别是:自主访问控制、基于角色的访问控制、基于规则的访问控制和基于标签的访问控制

知道它们的使用场景:DAC 适合面向用户;role-BAC 适合集中管理使用;rule-BAC 适合复杂场景;MAC 安全性最高,一般只出现在政府系统中。在实际的工作中,我们往往需要把它们进行组合使用

在任何的应用中,权限都必然会存在。通过对访问机制的理解学习,会引导你去思考在设计应用的过程中,有哪些点被忽视了。这样在实际的开发工作中,我们就能通过合理的设计,选取合适的访问控制机制,来避免安全问题的产生。

威胁评估的主要思路是,通过识别数据、识别攻击、识别漏洞这三个步骤,来评估公司当前所面临的潜在威胁。只有明确了公司目前存在的安全威胁,你的安全方案才能顺利推进和落地实施。

最后补充一点,黄金法则我们已经讲过认证和授权这两个部分了,审计部分因为没有具体的方法论,主要就是日志记录和分析,我们就不再单独介绍了。如果感兴趣,你可以自己找一些资料来学习。

重点内容梳理脑图

第一模块:安全基础_重点内容梳理脑图

第二模块:Web安全

讲述 Web 安全中一些经典安全问题的成因,结合当下 App 端各类接口中存在的 Web 漏洞,让你了解常见的 Web 攻防手段,帮助你在开发时,从源头切断安全问题。

第三模块:Linux系统和应用安全

讲解底层攻击的各种手段,以及它们会产生的影响,让你掌握其中的原理,能够在部署底层设施时,遵守安全事项,避免产生运维层面的安全问题。

第四模块:安全防御工具

结合真实的安全防护案例,介绍六大安全防御工具的使用方法和适用场景。另外,还会总结一些常见的安全防御手段,引导你建设系统级的安全防御体系。

18 | 安全标准和框架:怎样依“葫芦”画出好“瓢”?

安全标准和框架有哪些?

在国外,比较知名的安全标准和框架包括:ISO27000 系列、NIST、COBIT 和 ITIL

  • ISO27000 系列是国际上比较认可的安全标准之一。它提供了兼容性极高的安全体系和信息安全管理的最佳实践指导。但是,ISO27000 系列更关注于方向上的指导,没有覆盖具体的实施细节,所以无法作为技术手册来使用。
  • NIST 也被称为“美国版等保”。因为 NIST 是美国政府提出的,对公司的安全能力进行监督和管控的安全框架。但是,NIST 并未考虑公司在实施安全标准时需要付出的成本,所以除了美国政务之外,NIST 很少被使用。
  • COBIT( Control Objectives for Information and related Technology)则是给安全管理者提供了一个内控的框架,它本身更关注于内控和审计。
  • ITIL( Information Technology Infrastructure Library )。ITIL 是一个提升服务质量的标准框架,而安全只是影响服务质量的一个因子。因此,ITIL 会更多地考虑如何提高公司的研发和管理效率,在机密性、可用性和完整性上只给予了比较基本的关注。

等级保护制度作为国家标准,还具备规避和降低公司法律风险的能力

1
比如,当公司出现了某个安全事件导致数据泄漏,如果这个公司没有做过“等保”的话,那么法院就可能认为公司在安全上没有尽到自己的职责,而根据《网络安全法》给予这个公司很严厉的惩罚。但是,如果公司做了“等保”的话,法院可能会认为公司有努力在做,只是仍然有缺陷,而不会给予非常严厉的惩罚。所以,完全不做“等保”和做了但不到位,处罚的标准就完全不同了。

现有安全标准和框架有哪些可以借鉴的地方?

1. 等保:为什么安全体系建设要区分管理与技术?

等保对公司的安全要求划分为了十类,分别是:

  • 技术要求:安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心;

  • 管理要求:安全管理制度、安全管理机构、安全管理人员、安全建设管理、安全运维管理。

等保的大体思路是将安全分为了管理和技术。

安全往往是需要自上而下来推动

比如,等保要求公司必须要成立专门的安全管理机构,安排专门的安全管理人员,这样才有人能够对公司的整体安全来负责,去推动安全的落地。

2. ISO27001:如何通过 PDCA 流程进行规划安全建设?

ISO27001 是国内比较流行的安全评估认证之一。它提出了 11 个不同的安全方向。

安全策略、信息安全组织、人力资源安全、资产管理、访问控制、密码学、物理和环境安全、操作安全、通信安全、系统获取、开发和维护、供应关系、信息安全事件管理、业务连续性管理中的信息安全考虑、符合性。

在每个安全方向中,ISO27001 会列举出公司需要完成的安全事项,我觉得你甚至可以依照这个标准来学习安全。

ISO 的一系列框架和标准其实都遵循 PDCA 流程,PDCA 也是项目管理上经常被提到的管理方法。

  • Plan:计划,确定安全的目标并制定建设的规划。

  • Do:执行,按照计划的内容和时间来执行。

  • Check:检查,对执行的结果进行总结,看是否符合预期。

  • Action:改进,如果执行不符合预期,或者计划出现纰漏,则进行分析和改进。

那 PDCA 流程如何应用在安全体系的建设中呢?举一个公司在做 ISO27001 例子。

  • Plan:认证机构会先到公司进行调研和培训,然后和公司一块制定一个详细的安全规划。

  • Do:公司会花几个月的时间,去执行这些规划。

  • Check:完成之后,认证机构再次去公司进行回访,评估完成的情况。

  • Action:如果达到预期,则通过认证;否则继续计划、执行、检查的操作。

3.NIST:如何通过 IDPRR 建立纵深防御?

NIST 提出了公司建立安全体系的 IPDRR 方法框架,主要包括 Identiify、Protect、Detect、Respond 和 Recover 这五个部分。

IPDRR

NIST 所提出的 IPDRR 方法,是解决各类安全问题的一种通用思路。

以 Web 安全为例,结合 IPDRR 方法的五个步骤,来详细讲解一下,针对 Web 应用中可能出现的各种漏洞,我们该如何建立安全防护体系。

第一步是 Identify(识别)。我们需要掌握公司有哪些 Web 应用,并对 Web 应用做威胁评估。也就是说,我们需要定位公司的资产,衡量这些资产的价值,然后评估资产保护的优先级和投入成本。

第二步是 Protect(保护)。我们要在安全事件发生之前,对数据和资产采取适当的保护措施。(比如:通过访问控制机制来避免越权访问、通过加密来保护数据的 CIA、通过防火墙保护内网隔离等)。在开发上,我们需要采用安全的方法,尽量避免漏洞出现。同时,我们可以部署 WAF 等安全工具,统一对 Web 攻击进行防护检测。

第三步是 Detect(检测)。在安全事件发生之中或者之后,我们要能及时发现和检测出安全事件或者攻击行为。这就需要对请求的日志和返回的结果进行分析,评估是否产生攻击行为和数据泄漏。

第四步是 Respond(响应)。当检测到安全事件后,我们需要采取有效的措施,来阻止攻击的持续进行,尽可能地降低事件所带来的影响。我认为最可行的操作,就是对出现漏洞的 Web 业务进行下线,对已经受到影响的数据进行隔离。这也要求我们制定好详细的应急预案,避免攻击发生时公司陷入手忙脚乱的无序状态。

第五步是 Recover(恢复)。当事件响应完成后,我们要将应用或者服务恢复到攻击前的状态,也就是对应用和数据进行修复和重新上线。同时,也要对事件的原因进行复盘分析,然后进一步完善安全机制。

从这个例子中,我们知道,针对 Web 安全体系建设,我们可以根据 IDPRR 方法 采取多重安全策略进行保护。这也符合安全防护的一个原则:纵深防御,即任何单点的安全策略都存在纰漏和被绕过的可能。因此,我们需要采取多重相互独立的安全策略,使得这些策略相互补充,降低安全策略被绕过的可能性。

总结

等保告诉我们安全要分为技术和管理;ISO27001 告诉我们要通过 PDCA 流程去规划安全建设;NIST 告诉我们安全可以通过 IPDRR 建立纵深防御。

在各个标准和框架的细节中,也都给出了公司在各个安全方向上需要去落地的内容,比如,根据 ISO27001 的访问控制的标准,你可以学习如何制定合适的访问控制机制。

总之,在实际建立安全体系的过程中,我们不应该一味的按照这些安全标准实施,也要主动学习当中的设计思路。这样你才能更高效、更完善地建立公司自有的安全体系。

安全标准和框架

思考题:

你还接触过哪些安全标准和框架,它们又包括了哪些内容和思想?你认为该如何依靠这些思想,去推动公司的安全建设?

19 | 防火墙:如何和黑客“划清界限”?

防火墙如何为网络提供保护?

防火墙是部署在网络边界上的一种安全设备,其概念比较宽泛,根据需求不同可以工作在 OSI(Open System Interconnection,开放式系统互联) 网络模型的一层或多层上。一般情况下,防火墙会和路由器搭配使用(或者说路由器能够承担部分防火墙的功能),来对网络进行隔离。

根据实现方式和功能的不同,防火墙可以分为三种类型:包过滤防火墙应用网关防火墙状态检测防火墙

1. 包过滤防火墙

包过滤防火墙工作在网络层和传输层上。在这两个层级中,网络请求都是以 TCP 或者 UDP 数据包的形式进行流动的。包过滤防火墙是通过检测并拦截所有流经防火墙的 TCP 和 UDP 数据包,来对系统提供保护。能够获取到的信息包括:源 IP 和端口、目标 IP 和端口、协议号等。

由于大部分的路由器甚至 Linux 系统本身(Iptables)也具备类似的功能。因此,通常情况下,我们不需要采购额外的设备部署包过滤防火墙,只需要直接对网络边界的路由器进行设置,就能够满足最基本的拦截需求了。

但是,在防护能力上,包过滤防火墙是比较弱的,它只能提供最基础的安全防护。这是因为,包过滤防火墙的过滤规则基本都是静态的。所以,现在大部分的包过滤防火墙都进行了升级,引入了诸如“连接状态”等概念,也就变成了状态检测防火墙。

2. 应用网关防火墙

应用网关防火墙以代理的模式工作在应用层。所谓“代理”,即接收客户端发出的请求,然后以客户端的身份将请求再发往服务端。

因此,应用网关防火墙能够获取到系统和应用的全部信息,从而实现更复杂的功能,如:内容监控、认证、协议限制甚至缓存。

在包过滤防火墙中,防火墙直接对流经的 TCP 和 UDP 包进行处理。而应用网关防火墙需要对 TCP 和 UDP 包进行解析,处理成应用层的数据协议,如 HTTP。因此应用网关防火墙对于网络的性能会产生负面影响,而且不是所有的应用都能够很好地兼容代理的存在,所以部署应用网关防火墙有可能对系统的可用性产生影响。除此之外,在应用网关防火墙中,服务端看到的请求都来自于代理,这会导致服务端无法有效地追踪请求的来源

尽管应用网关防火墙有这些潜在的危害存在,但是它能处理的信息最多,能够提供的安全防护能力也最强。由于 Web 攻击是黑客常见的攻击手段,因此,应用网关防火墙也逐渐演变成了专门的 Web 防火墙(WAF)。

3. 状态检测防火墙

状态检测防火墙是包过滤防火墙的一种升级,它同样工作在网络层和传输层之上。状态检测和包过滤防火墙最大的不同在于,它会以连接的形式来“看待”低层级的 TCP 和 UDP 数据包。

举例:

当客户端发起一次完整的 HTTP 请求时,会需要进行“TCP 三次握手”建立连接(SYN+ACK 数据包),HTTP 请求和响应的数据往往也是通过多个数据包才能完整发送。传统的包过滤防火墙只能基于每一个数据包进行判断,比如在“握手”的过程中,包过滤防火墙会分别看到 SYN、SYN+ACK、ACK 这三个数据包,并对每一个数据包进行判断。而事实上,这三个数据包(SYN、SYN+ACK、ACK)代表的是一次握手请求。所以,状态检测防火墙会尝试将这一连串的数据包组成一次完整的连接请求,从而获得一个更全面的视角,大大提高其安全性。

对比应用网关防火墙,状态检测防火墙通常不会尝试将数据包构建成高层级的数据,也就是说它不会尝试去解析整个 HTTP 请求中的内容。因此,状态检测防火墙能获得更优的性能。目前市面上普遍采用的,都是状态检测防火墙。

3种防火墙的工作原理

防火墙可以为网络边界提供哪些保护呢?

1. 保护操作系统的漏洞

一方面,防火墙可以迅速对全网的服务器进行保护,拒绝向高危端口发起的请求,如 Windows 中的 135、137 和 445 等。

另一方面,更加智能的防火墙,能够检测到整体流量中的异常变化。防火墙可以产生报警甚至自动对异常的请求进行拦截,及时避免网络中的操作系统受到攻击。

2. 阻止非法的信息流动

最著名的有中国的防火长城(Great Firewall)。防火长城的主要目的不是为了防止国外对中国发起网络攻击,而是根据法律法规,防止国内网民访问国外违法的数据信息。

除了防止非法地获取数据,防火墙同样能够防止敏感数据的流出。比如,防火墙可以对部分关键词或者敏感词进行检测阻止其外流。如果数据安全做得好一些的公司,可以对公司内的全部数据打上标签,然后根据标签的安全等级对跨越安全边界的数据进行处理。

防火墙能够提供的数据安全保护是有限的。原因在于,大部分防火墙都是用来处理较低层级的数据,且很多连接会对数据本身进行加密(VPN、HTTPS)。这就导致了防火墙实际能够看到的可识别数据并不多,拦截能力因此下降。其实,这种绕过防火墙的例子很常见,各类“梯子”能翻墙访问 Google 就是基于这个原理实现的。

3. 限制可访问的服务和审计

防火墙作为安全策略的一部分,还可以帮助公司落地安全制度。公司所有对于网络方面的限制和要求,基本都可以在防火墙上进行实现。

除此之外,防火墙作为网络安全设备,它的日志功能通常比路由器等常规网络设备更加完备。因此,在网络攻击发生之后,我们需要进行事件调查时,防火墙日志是很关键的信息来源。

防火墙有哪些防御盲区?

在安全领域中不存在绝对

首先,防火墙只位于网络边界。因此,防火墙只能用来对跨越边界的请求进行检测和拦截。所以,防火墙不能防御已授权服务中的恶意攻击。

其次,尽管防火墙位于网络边界,但这并不意味着所有的请求都会经过防火墙。防火墙不能防御不通过防火墙的访问。

最后,作为边界设备,防火墙自身其实是暴露在外界的。因此,防火墙会遭受到黑客的直接攻击。防火墙自身的操作系统可能存在缺陷。

防火墙知识导图

总结

防火墙作为最基础的网络安全设备之一,广泛存在于各种网络边界上,是网络安全的第一道防线。

在业务相对简单时,我们可以通过 IP、端口和协议等参数,配置简单的黑白名单规则来阻挡恶意的网络请求;在业务逐渐复杂时,开放的端口协议变多,我们对防火墙的技术实现和配置复杂度都会有较高要求,需要由专业的人员或者团队来进行维护。

因此,尽管防火墙是我们最熟悉的安全设备,但实际上,防火墙是一个专业性较强的安全产品,开发或者运维人员一般不需要对其进行直接操作或者配置,具体的部署和配置工作都是交给防火墙厂商来完成和定期维护的。

思考题

你可以检查一下你的服务器或者网络设备中,对外开放的端口有哪些。这些端口中,有哪些不需要对外开放,有哪些可以限制源 IP?你能否通过防火墙(或者路由器、Iptables 等)对这些端口进行限制呢?

20 | WAF:如何为漏洞百出的Web应用保驾护航?

WAF 的本质是“专注于 Web 安全的防火墙”,Web 安全关注于应用层的 HTTP 请求。因此,WAF 的分析和策略都工作于应用层。

工作模式分别是:透明代理、反向代理和插件模式。

WAF的3种工作模式

关于 WAF 的三种工作模式,你需要重点掌握这些内容:

首先,WAF 将处理的请求协议限定为 HTTP,所以 WAF 比应用网关防火墙具备更高的专业性和灵活性;

其次,WAF 可以以代理的形式,在网络中提供 Web 安全防护,也可以作为插件嵌入到服务端中;

最后,也可以根据需求、成本和硬件环境等因素,选择不同的部署模式对 Web 安全进行防护。

WAF 的功能

1. HTTP 解析能力

第一,HTTP 中的内容可能经过了 UrlEncode 等编码方式的处理,因此,WAF 需要具备解码能力,避免攻击的特征通过编码来进行绕过

第二,想要看到 HTTPS 中的加密内容,WAF 必须能够解密 HTTPS 请求

2. Web 安全防护

通过对 HTTP 请求进行解析、对编码内容进行解码和对 HTTPS 进行解密之后,WAF 就能够获得全部 HTTP 请求内容了。在此基础之上,WAF 就可以对请求内容进行分析,为 Web 服务提供安全保护了。

  • 签名匹配:和杀毒软件中病毒库的概念类似,WAF 也可以维护一个攻击样本库。
  • 正则匹配:签名匹配需要请求完全一致才能够检测出来,而正则匹配只需要部分特征就可以检测。
  • 行为分析:除了针对单次请求的分析之外,WAF 还可以针对连续的访问请求特征进行提取和分析。
3. 审计告警

Web 安全相关的审计包括:发生攻击的时间、路径、频次等。

4. 数据保护和虚拟补丁

总结

WAF 就是专注于 Web 安全的防火墙,它能够以透明代理、反向代理和插件的模式,运行在网络和系统的各个环节中。从功能上来说,WAF 能够解决绝大部分的 Web 安全问题,对于黑客针对 Web 的攻击进行分析和拦截,同时提供额外的审计告警、数据保护等能力。

在选取 WAF 的时候,我们首先需要考虑功能的完整性和易用性。公司能够以较低的成本部署 WAF,并解决大部分的 Web 安全问题,这是 WAF 最关键的效果。其次,就是可配置和可维护性,对于漏过的攻击请求如何进行补充完善,对于误判的请求如何进行放行,这是我们在使用 WAF 过程中必然会遇到的问题。一个好的 WAF 产品应该提供友好的入口,供开发和运维人员对漏过和误判的规则进行维护。

WAF

思考题

任何安全产品都不可能达到 100% 的安全。你可以思考一下,在 Web 安全中,黑客能够通过哪些方式绕过 WAF 的检测和过滤呢?

PS:WAF那些事儿及SRC经验分享

21 | IDS:当黑客绕过了防火墙,你该如何发现?

什么是 IDS?

IDS(Intrusion Detection System,入侵检测系统),IDS 的最终目的是检测黑客的攻击行为。

应该在哪里进行检测呢?

首先是在网络流量中:黑客在控制了一台服务器之后,需要进行权限提升,而权限提升需要黑客在内网中挖掘各个服务器存在的漏洞。因此,黑客会发起很多探测和攻击的网络请求。

其次就是在服务器系统中,黑客也可以利用服务器系统或应用本身的漏洞进行权限提升,同时,黑客也会尝试在系统中留下后门,这些行为都是通过系统操作来完成的。

因此,根据检测内容的不同,IDS 可以分成两种类型:NIDS(Network Intrusion Detection System,网络入侵检测系统)HIDS(Host-based Intrusion Detection System,基于主机型入侵检测系统)

第一种类型:NIDS。

NIDS 主要检测网络流量中的攻击行为。区别于部署在网络边界的防火墙,NIDS 一般部署在内网的网络节点(路由器或交换机)中,所有的网络请求都会流经这些网络节点,所以,NIDS 基本可以获取到对应网络节点下全部的网络行为。

NIDS 一般不具备拦截网络请求的能力。这也让 NIDS 能够很好地隐蔽自己,让黑客很难发现。

NIDS 是一个比较经典的安全产品,你可以直接使用市面上的开源工具,比如:Snort、Suricata。

NIDS 的检测逻辑就是对请求的内容进行正则匹配,不具备分析上下文的能力。因此,NIDS 一般只能够对单次的攻击请求进行检测。

第二种类型:HIDS。

HIDS 主要检测服务器系统中的攻击行为。NIDS 运行在某个网络节点之上,相当于集中式的对网络流量进行检测,但是 HIDS 运行于每一个服务器中,也就相当于对系统行为进行分布式检测。那分布式的行为处理有什么好处呢?在 NIDS 中,我们是基于少量的网络节点检测全部的网络流量。而在 HIDS 中,只需要每个服务器检测各自内部的行为,也就相当于将资源消耗分散到了每一台服务器中,这就对硬件的性能要求比较低,也就节约了公司的防护成本。

HIDS 一般以 ROOT 权限运行在操作系统中。因此,HIDS 能够监控的行为更丰富,比如:

  • 执行的系统命令

  • 发起和接受的网络请求

  • 运行的进程、监听的端口号等

  • 系统关键文件的完整性

  • 其他黑客可能留下痕迹的地方

对比于 NIDS,HIDS 的开发难度会高很多。主要是因为 NIDS 只需要部署在关键的网络节点上,一个公司可能也就有几百个这样的节点,而 HIDS 需要部署在公司所有的服务器中,一个公司有上万个服务器是很常见的事情。而且,我们会在日常使用中频繁改动服务器,这也使得服务器的系统环境很不统一。所以,很多公司都需要基于自己的情况自行开发 HIDS。

据我了解,很多公司都会基于Osquery来开发 HIDS。Osquery 提供的信息采集功能可以满足大部分的 HIDS 需求,我们只需要运行一句简单的 SQL 语句,就能够拿到系统的关键信息了。

第三种类型:IPS。

在 NIDS 和 HIDS 中加入了拦截的能力,就成了 NIPS 和 HIPS,统称为 IPS(Intrusion Prevention System,入侵防御系统)。

IDS 和 IPS 是相辅相成的,它们唯一的区别在于,IDS 强调的是检测,IPS 强调的是拦截

IPS 的实现总体和 IDS 比较类似,只是 IDS 通常不会去修改网络节点和操作系统,而 IPS 会实现额外的逻辑,对网络节点和系统内的行为进行封停,从而阻止黑客入侵。

防火墙、WAF、IDS 和 IPS

IDS 的检测机制中,我们主要是基于对系统行为和网络请求的分析,判断是否存在攻击行为。这种检测模式会存在两个主要的问题:第一,分析结果总会出现漏报和误判,而这些漏报和误判,不论是对用户还是对安全人员,都会造成极大的困扰;第二,分析的规则都是人工产出的,会存在滞后性。

什么是蜜罐?

所谓“蜜罐”,就是一台部署在内网的服务器。这个服务器没有任何保护措施,并且提供带有漏洞的服务,就是为了吸引黑客来攻击它。蜜罐由安全人员部署在网络的各个节点中,理论上,其他开发人员都不会知道蜜罐的存在,也就不会向蜜罐发起任何请求。蜜罐内的一切行为,都是黑客产生的。基于蜜罐的报警和日志,我们就能够及时发现黑客的存在,并且还原出黑客的攻击行为。

蜜罐的类型主要分为两种:低交互蜜罐高交互蜜罐

所谓低交互蜜罐,就是蜜罐内的所有服务都是模拟的,不能提供真实的服务功能。

高交互蜜罐会提供一个真实的服务,而且不施加任何限制,只是用来做详细的记录而已。

对比低交互蜜罐更安全,因为它不提供真实的带有漏洞的服务,只是模拟服务,所以黑客无法控制蜜罐。但模拟的服务可能被黑客发觉,导致黑客不上钩。这个时候,高交互蜜罐对黑客更有吸引力,让我们能有更大的概率发现入侵攻击的行为。

对比于 IDS,蜜罐提供了额外的入侵检测能力,它的主要优势包括:

  • 蜜罐几乎不会产生误报

  • 蜜罐内的所有行为都是真实的黑客攻击行为,因此数据量小、价值高

  • 不需要已知的攻击样本,根据黑客的行为我们甚至能够发现新的攻击方式

主要缺陷就是,入侵检测的实现非常依靠运气,实现的前提是必须有黑客找到蜜罐。也就是说,如果黑客进入内网后,首先发现其他带有漏洞的正常服务器,就不会进入到蜜罐中了。

蜜罐的实现比较复杂,它需要恰到好处地把握提供多少的交互,既能吸引黑客,又不至于产生漏洞。

如何构建入侵检测体系?(推荐)

首先,蜜罐具备较高的准确率,并且能够发现未知的攻击。因此,我们可以将蜜罐中黑客的行为特征作为攻击样本的特征,输入到 IDS 和 IPS 中去。这样一来,IDS 和 IPS 就具备了根据黑客行为自动学习和升级的能力。

其次,IPS 通常是直接拦截黑客的攻击行为,来及时止损。但这样一来,黑客也会察觉到入侵检测系统的存在。因此,我们可以将 IPS 的检测拦截行为,调整为一旦检测到攻击行为,就将行为转发到蜜罐中。对于黑客来说,攻击行为看起来仍然是成功的,但实际上不会对系统产生任何影响,且攻击行为都被记录下来了。

最后,为了提升黑客发现蜜罐的概率,我们通常需要在内网中广泛地部署蜜罐。但是,这又增加了很多额外的硬件部署成本。因此,有的 HIDS 中会嵌入“微蜜罐”,就是利用服务器本身的资源实现一个小型的蜜罐服务。比如,某个部署 HIDS 的服务器中本来没有 MySQL 服务,也没有监听 3306 端口,我们可以通过设置服务器,让 HIDS 监听 3306 端口并模拟一个 MySQL 服务出来。这个 MySQL 服务是 HIDS 模拟的,开发人员不会感知到,所以发起 MySQL 连接的一定是黑客。这就是“微蜜罐”。

一个系统化的入侵检测系统需要依靠各个安全产品之间的相互协作,才能够实现防护能力的最大化。下面结了一个成熟的入侵检测系统的组织结构图。

成熟的入侵检测系统结构图

在这个入侵检测系统中,NIDS 负责对网络节点进行检测,网络中会包含部署了 HIDS 的系统和蜜罐系统。最终,我们需要通过 ELK 来统一收集各个安全产品的检测日志,实现信息同步。(通过Kafka控制消息队列)所有 IDS 或者 IPS 的信息都是相互关联的,我们就能够基于这个完整的信息进行全盘的综合分析了。

总结

入侵检测相关的安全产品,主要包括 IDS、IPS 和蜜罐。其中,IDS 主要基于网络或者主机行为对攻击特征进行检测;IPS 则是在 IDS 的基础之上增加了拦截攻击,限制黑客的能力;而蜜罐则是一个专门为黑客提供的陷阱,任何进入蜜罐的行为都会被当成攻击行为,供我们进行监控和分析。

基于纵深防御的原则,入侵检测同样需要各个安全产品相互补充、协同工作,来起到一个更全面的安全防护作用。比如,我们可以将蜜罐中的数据作为分析样本,供 IDS 和 IPS 提取签名和行为特征,或者将蜜罐作为 IPS 的一种拦截手段,使其具备更大的迷惑性等。

思考题

今天我们提到,入侵检测的几款安全产品可以协同工作。你可以思考一下,我们讲过的几种安全产品(比如:防火墙、WAF 和入侵检测系统等)之间,是否也有协同工作的方式呢?

22 | RASP:写规则写得烦了?尝试一下更底层的IDS

012 年,Gartner 提出了 RASP(Runtime Application Self Protection)的概念,就是希望将安全产品部署在应用的底层,完全站在应用的视角去发现攻击行为,从而实现更加完善的安全防护。

RASP原理

RASP 的设计思路是通过监控应用的底层,来从根本上发现攻击行为的产生。

如果你想要研究 RASP 产品,那我推荐你使用百度的OpenRASP。因为 OpenRASP 在开源市场中认可度比较高,也是目前各个公司用来研究 RASP 产品的一个主要对象。

RASP 的优势和劣势

因为 RASP 部署于应用的底层,知道应用的全部信息,所以它本身可以对应用的安全性进行评估。最简单的评估问题如下:

  • 是否使用 ROOT 权限运行了应用;

  • 在连接数据库的时候,是否使用了弱密码;

  • 使用了哪些插件,插件是否包含漏洞。

RASP

总结

总的来说,推广的难度属于管理上的问题,需要你想办法说服开发人员。单纯从安全角度上来说,我认为 RASP 是一款提升应用安全性的最佳安全产品。

可以将 RASP 和其他安全产品进行适当 组合,以达到取长补短的目的。比如说,RASP 推广比较难,我们可以只作局部的部署。这些局部的部署可以当作 WAF 的样本数据来源,只要 RASP 在底层发现了攻击行为,就将相应的表层特征输出到 WAF。这样一来,我们就可以将 RASP 在局部上的防御能力拓展到整体的 WAF 上,从而实现全面的安全防护提升。

思考题

在这一讲中,我们只是以 SQL 注入为例,讲述了 RASP 是如何进行攻击检测的。你可以思考一下,对于其他的攻击方式,如反序列化漏洞、命令执行和 SSRF 等,RASP 又该如何防护呢?你可以先学习一下 OpenRASP 的说明文档,之后再来思考这个问题。

23 | SIEM:一个人管理好几个安全工具,如何高效运营?

如果黑客绕过安全产品,我们应该如何及时发现黑客的攻击呢?具体来说,我们应该如何对黑客的攻击路径和攻击产生的影响进行统计分析?以及在发现黑客的攻击之后,我们要如何提取攻击特征,补充安全产品的检测规则呢?这些都是我们需要持续关注的事情。因此,我们常说“建立一个安全体系很简单,运营好一个安全体系却很复杂”

我们经常会使用 SIEM(Security Information and Event Management,安全信息和事件管理),来帮助我们运营一个安全体系。通过 SIEM,我们可以将散落于各个系统、设备和安全产品中的日志进行汇总和梳理,快速串联出黑客的完整攻击路径,更高效地完成安全体系运营的工作。

SIEM 究竟是如何高效运营安全体系的呢?SIEM 有哪些功能?

简单来说,SIEM 就是一个基于各类日志,提供安全运营和管理能力的统一平台。

首先是收集日志。对 SIEM 来说,需要收集的日志来源于操作系统、路由器、数据库等业务设备,防火墙、WAF、IDS 等安全产品,以及业务前后端本身。

在收集到大量的日志之后,SIEM 会对数据进行分析统计,将海量的日志进行筛选和总结,给予安全运营人员最精简的结果,提高分析效率。经过数据分析之后,安全运营人员就能够快速发现并处理各类安全事件了。

最后,SIEM 还需要提供完整的运营流程。比如,通过工单功能完成安全事件的管理,通过报表追踪各安全产品产生的报警、发起的安全事件、数据的流动情况等,清晰地表现出公司的安全现状和能力。

SIEM 是如何落地的?

在说 SIEM 的核心功能的时候,你可能很快联想到,可以使用经典的日志分析组件 ELK,去实现 SIEM 的各个功能。而运营能力不足让这些公司做出来的 SIEM 空有一个架子,无法实际落地,也就无法产生应有的价值。

SIEM落地流程图

1. 制定计划

首先,当我们决定要做 SIEM 的时候,需要制定一个长期的计划。依据公司的安全情况,这个长期可能意味着 1-3 年的持续投入。

通常这个计划分三个阶段:设计阶段、建设阶段和运营阶段。在 SIEM 启动之前,我们就要预估:每个阶段投入的人力、时间、成本;每个阶段的需求和预期产出;每个阶段按月或者按季度的时间节点等。这些确定下来之后,还要公司同步确认才行。

2. 设计阶段

需要总结出一份详细的需求列表。可以从三方面来总结。

第一方面:SIEM 需要管理哪些设备,收集哪些数据。

第二方面:安全运营目前遇到的痛点的典型场景是什么,预期的解决方案又是怎么样的。

安全运营最大的痛点有两个,一是日志分散,二是日志无法关联。

第三方面:完整的安全运营流程是什么。

3. 建设阶段

应该如何去建立正确的预期呢?最简单有效的方法就是建立短期预期,并且快速迭代。比如,在最开始的建设阶段,SIEM 只需要满足日志管理,也就是满足我们在一个统一的平台查看各个日志即可,至于如何去分析数据、产出报表,我们可以放到下一个迭代周期去规划。在明确了这些可实现的预期之后,我们就能理清每个迭代周期的工作,也能够增强公司对 SIEM 这个长期项目的信心,从而获得更好地支持。

4. 运营阶段

SIEM 平台的建设需要通过不断地短期迭代进行推进。SIEM 平台建设迭代周期主要参考的,就是运营阶段 SIEM 平台的使用情况和产生的需求。

SIEM 落地中有哪些常见问题?

第一个:垃圾数据太多。

第二个:数据维度缺失。

第三个:人员投入不足。

SIEM

总结

安全的发展,前期在于技术建设,长期在于运营升级。SIEM 就是在安全运营升级过程中,为公司提升效率、加强管理的一个工具。SIEM 通过收集各个系统和设备的日志,能够为我们提供安全统一管理的基础数据。然后,通过对常见的数据分析和报表展示,SIEM 可以帮助我们快速排查安全事件、进行事件管理,同时满足数据报表甚至合规审查的需求。

“技术总是短期内被高估,在长期内又被低估”。

思考题

如果你的公司使用了很多安全产品,你想要对这些产品进行统一的管理和运营。那么,你需要 SIEM 收集哪些日志、提供哪些数据分析的能力,来帮助你进行高效运营呢?

24 | SDL:怎样才能写出更“安全”的代码?

2004 年,微软提出了 SDL(Security Development Lifecycle,安全开发生命周期)。因为对安全和隐私的考虑贯穿了整个软件的开发进程,SDL 能够帮助开发人员写出更“安全”的代码,在解决安全合规需求的同时,也能减少由安全问题带来的损失。

SDL 中的基础概念

一个软件开发中的经典概念:软件开发生命周期 DLC(Software Development Life Cycle)(这个概念的英文缩写种类比较多,为了和 SDL 区分,我们用 DLC 代表软件开发生命周期)。SDL 是以软件开发生命周期为基础发展成的安全框架,所以,了解 DLC 能够帮助我们更好地认识 SDL。

DLC 将软件开发过程分为 5 个阶段:需求分析、设计、开发、测试和部署。DLC 对5 个阶段的具体描述,都是以业务功能为核心进行展开的,并没有涵盖安全的工作。这显然不安全。

什么是 SDL?

SDL 的标准执行流程有 7 个步骤:安全培训、需求分析、设计、开发、测试、部署和响应

SDL

SDL 通过安全培训来解决人的问题,然后在需求和设计阶段提出安全需求,在开发和测试阶段发现安全漏洞,最终在部署和响应阶段处理安全问题。

如何推动 SDL 落地?

1. 我们要基于现有的制度拓展 SDL。

2. 我们在落地 SDL 的时候要灵活变通,不要生搬硬套。

变通的方法有很多,实现方式上的变通是最常见的一种。我来说几个常见的例子。

  • 将安全培训加入到公司定期举办的内部技术交流分享会中。这样一来,既不会因为强制培训的要求引发开发人员的不满,又能提升培训的效果。

  • 在制定安全方案的时候,将安全扫描加入到开发提交代码、检测代码质量的过程中,这样就能避免开发人员更改开发流程。

总之,实现方式上的变通就是将 SDL 的各个环节按照开发人员最认可的形式,进行灵活的设计和运转,提升 SDL 的落地效率。

3. 在 SDL 的覆盖面上,我们也可以有所取舍。

以开发设计环节为例,我们可以不需要根据具体业务提出具体的安全需求,而是梳理出一份包含常见的安全设计方法的通用列表(包含认证规范、加密标准等)。然后,直接将这个列表发放到开发人员手上,让他们自评。这样既提升了开发人员的工作效率,又降低了我们的工作量。

总结

SDL 可以从根源上解决安全问题:通过加入安全的角色和职责,SDL 让安全贯穿软件开发的整个生命周期;通过事前的培训和事后的应急响应,SDL 为软件提供了额外的安全防护保障。

尽管 SDL 非常实用,但是它的落地仍然面临很多问题。为了推动 SDL 落地,我们要基于公司已有的开发流程和机制,灵活部署 SDL。这样我们才能在做出最小改变的情况下,仍然将安全贯穿于软件开发的各个流程之中,提升公司整体的安全性。

思考题

SDL 的成功落地需要开发人员的支持和安全人员的高效率工作。你可以思考一下,在 SDL 落地的开发和测试中,有哪些工作是可以通过工具来自动或者半自动化的完成的呢?这些工具的工作原理又是怎么样的呢?

第五模块:业务安全

讲解“黑灰产”的常见手段,教你识别查找“黑灰产”的方法及防护策略。另外,还会联系实际业务场景,手把手教你系统解决业务安全问题。

25 | 业务安全体系:对比基础安全,业务安全有哪些不同?

如何理解业务安全?

想要理解业务安全,我们先来认识一下黑产。黑产是基于正常的业务产品逻辑,采取非正常或者批量的操作,来获取利益的行为。业务安全就是通过各类产品策略,来对黑产进行识别和拦截,从而保障业务的正常运行。

黑产和黑客有哪些差异?

第一,“黑产”强调的是“产业化”。

相比于黑客,在业务攻击中,黑产已经形成了完整的产业化链条:在上游,有人专门提供各类技术支持,如验证码绕过、手机群控、自动注册工具等;在中游,有人专门收集大量的手机号、身份证号、银行卡号等信息,在应用内注册大量的垃圾账号;在下游,有人利用工具和账号,进行薅羊毛、刷评论、欺诈等操作。可以说,任何个人或者小的团体都没有办法发起业务攻击,必须依靠上游提供的各类资源,才能够实现真正获利。

产业链的结构如下图所示:

黑产产业链结构图

第二,黑客强调的是技术对抗,而“黑产”更看重资源对抗。

现在,黑产购买一个手机号的成本只需要几毛钱,而互联网应用获取一个新用户需要花费几十元,这其中的利益之大可见一斑。

从黑客与黑产之间的攻击差异中,我们能够发现基础安全和业务安全的核心差异。基础安全是防御黑客的技术攻击,避免漏洞。业务安全是防御黑产的资源对抗,避免正常业务被攻击。

业务安全如何防护?

在基础安全中,我们说过应用的本质是数据,安全的本质是数据的 CIA,我们可以通过黄金法则来保护数据。

要从业务的本质入手来解决问题。我认为,业务的本质是一种投资,也就是公司投入成本来获取用户价值。投入的成本包括应用开发的成本、服务的成本以及获取用户的成本等。

黑产的获利手段是通过廉价的资源,降低用户的价值,从而赚取公司投入的成本。

因此,业务安全的本质就是保障用户价值不受黑产的恶意影响。保障的方法就是提高黑产的资源成本,使得黑产无法获利。这也就是我所说的,业务安全的本质其实就是资源层次上的对抗

1.首先是用户资源。

黑产通常需要获取大量的用户身份,来进行大规模的业务操作,才能实现获利。这是因为,应用通常会要求用户绑定各种信息,比如手机号、身份证、银行卡等。而黑产需要满足应用的强制绑定要求,才能获得用户身份。因此,这些手机号、身份证以及银行卡等,其实就是黑产必须投入的用户资源。

现在,黑产有很多办法可以获取这些用户资源。我来总结了几个常见的方法:

通过虚拟运营商或者物联网卡来获取大量非实名手机卡

在网上搜集各类泄漏的身份证图片

在偏远地区支付十几块钱,买到他人的手持身份证照片和视频

在类似注册任务贴吧这样的任务群中,注册一个账号之后,再转手卖给黑产

对于用户资源的对抗,目前主要的方式就是黑名单

黑名单的防护流程

用户黑名单主要有两种收集方式:内部收集和外部采购。其中,内部收集是基于用户在业务内部的行为进行判定的,流程相对复杂一些,而外部采购是直接购买汇总好的黑名单。这样一来,我们就利用黑名单实现了对黑产的拦截。

2. IP 资源。

黑产往往是在同一个地方进行大量操作的,IP 相对固定。所以,任何公司做业务安全的第一步,都是对 IP 进行限制,常见的手段是限制一个 IP 下能够登录的用户数量。为了绕过这种安全防控机制,黑产必须掌握大量的 IP 资源。

黑产会利用“秒拨 IP”来获取大量 IP 资源。所谓“秒拨”,就是指每一次拨号上网,都会分配一个新的 IP 给我们。只要持续地断网、拨号,我们就能够获得大量的 IP 资源。

下图是某个代理 IP 网站的报价,我们可以看到,目前代理 IP 的价格最低只要 0.5 分钱。也就是说,黑产只需要付出很少的成本就能获得大量 IP 资源。

3.设备资源。

除了 IP 之外,设备也是公司做业务安全的一个基础。**

在正常情况下,一个设备对应一个账号。但是,黑产可能会需要在一个设备上使用几十个账号进行操作,这就很容易被应用和公司检测到异常。

黑产获取设备的方法比较多,最简单的一种是通过模拟器来模拟设备。但是,很多公司会对前端进行检测,来发现模拟设备。因此,黑产也就从使用模拟设备升级为使用真实的手机。所以,很多黑产案件中都会出现由大量手机设备组成的“手机墙”。除此之外,也有上游团队将手机做成云控模式,下游黑产可以直接花钱购入可远程操控的真实手机设备。

设备资源的对抗原理是对虚拟设备进行识别

4.操作资源。

所以说,我们和操作资源的对抗,就是在和黑产的自动化工具进行对抗。公司为了区分“人”和“机器”的操作,就需要使用验证码(如图片验证码、滑块验证码等)。通过这类“人”很容易完成,但“机器”很难完成的验证方式,黑产就没办法全自动地完成交互,我们也就提高了黑产的操作成本。

总之,业务安全的防护核心就是提高黑产的资源成本

4种资源对抗

总结

业务安全和基础安全在本质上就有很大的不同:在基础安全中,黑客将技术作为核心竞争力;在业务安全中,黑产将资源作为核心竞争力。谁能够以更低的成本掌握更多的资源,谁就能窃取公司更大的利益。因此,作为防守方,我们在关注业务安全的时候,也应当将关注的重点放在如何提高黑产的资源成本上,这样才能够为公司提供有力的业务安全防护。

黑产一定包含黑客,黑客却不一定是黑产。

业务安全体系

思考题

你可以思考一下,假如你掌握了这些资源,你会如何对你的业务发起攻击?又会如何获利呢?

26 | 产品安全方案:如何降低业务对黑灰产的诱惑?

业务安全中的防御框架是什么?

在业务安全中,IPDRR 同样可以指导我们与黑产进行对抗。这里我总结了一张对比表格,你可以先了解一下 IPDRR 在基础安全和业务安全中的异同点。

IPDRR 在基础安全和业务安全中的异同点

业务安全中 IPDRR

  • Identify(识别):和基础安全一样,业务安全的识别阶段主要是进行威胁评估的工作。我们需要找到黑产可能获取到的业务逻辑中的投入成本,比如,应用发放的红包、优惠券等。

  • Protect(保护):在业务安全中,我们是通过产品方案来实施认证和授权过程的。比如,对于登录过程增加双因子认证和验证码等,就是加强认证的安全性。

  • Detect(检测):检测阶段主要是风控系统发挥作用。

  • Respond(响应):发现黑产的攻击后,我们可以通过封禁账号、拦截操作、拒绝提现等方式,来阻止黑产获取利益。

  • Recover(恢复):最后就是对整个系统进行恢复了。在业务安全中,黑产可能已经盗取了某些账号,或者已经领取了部分红包。这时,我们就需要通过合适的运营机制,将账号返回给原用户,把红包退回到奖金池中。

以上就是业务安全中的 IPDRR,从中我们可以看出,业务安全的纵深防线也是环环相扣的,我们需要在各方面都进行防护,避免安全短板的出现。

业务安全中的威胁评估怎么做?

在业务安全中,黑产的最终目的是窃取公司投入的成本来获取利益,但公司成本的具体表现形式很多,因此,业务安全中的威胁评估也更加复杂。下面,我就以一个典型的业务场景为例,总结在业务安全的威胁评估中,我们需要重点考虑的因素。

邀约的逻辑:已注册用户可以通过邀请码的形式邀请新用户注册,注册成功后(可能需要新用户完成一定任务)双方都可以获得一定的奖励,如现金红包(可以参考拼多多)。

邀约活动的目的很明确,就是拉取新用户为公司带来用户增长。那对黑产来说,获利的方式就是通过大量注册小号,完成邀约任务,获得现金红包的奖励。现在的奖励金额一般是几块到十几块不等,因此,黑产的利润很高。

这个时候,如果公司想要拦截邀约活动中的黑产用户,需要考虑哪些因素呢?我认为需要重点考虑实时性要求、漏判影响和误伤影响这三方面因素。实时性很好理解,就是我们要评估在哪个阶段对黑产进行评估和拦截。所谓漏判,就是没有识别出黑产,让其成功获利。而误伤就是正常用户被判定成了黑产,无法正常使用业务功能。

我们在指定业务安全防控策略的时候,漏判影响和误伤影响决定了策略的严格程度

总之,对于邀约活动的业务安全防御来说,避免误伤是我们最核心的关注点。为了避免误伤,我们可以将防御机制延后,避免对用户正常参与活动的流程产生影响。同时,我们可以将防控策略放宽,通过放过一定的黑产来降低误伤。

三种业务场景的威胁评估结果

对于任何一个业务来说,我们其实都可以从业务目标、黑产获利程度、实时性要求、漏判影响、误伤影响这 5 个方面进行威胁评估。

如何利用产品方案防御黑产?

对业务安全来进行保护,就是为业务制定合适的安全产品方案,来提升黑产的资源成本,从而实现保护业务的目的。

安全产品方案具体是什么呢?我们来看一个例子。

在登录业务中,我们需要防止盗号的发生。这种情况下的安全产品方案就是提高黑产发起盗号的资源成本,比如,我们可以在产品机制上加入二次验证机制,如短信验证等。这样一来,黑产需要完成一次登录的成本就大大增加了。

相比于我们使用各种复杂的策略和算法对每一次登录行为进行判定,安全产品方案的实现更简单一些,只需要增加一个基本功能就足够了。而且安全产品方案其实不识别黑产,也就不存在误伤和漏判,只需要考虑用户体验的损伤就足够了。因此,一个安全的产品方案是对抗黑产最有效的防护手段。

以“满减红包”为例,来讨论一下产品方案中需要考虑的防控因素有哪些。

通过对领取条件、满减金额和有效期进行不同的限制,我们就可以设计不同的产品方案,来达到不同的安全等级。下面,我们来具体分析一下。

  • 领取条件:注册就给红包,会给与黑产极大的便利。而下单后再减,能刺激用户再消费,有了前一单的收益,下一单的红包补贴就基本不会亏。当补贴减少时采取会员制,公司就能通过会员费来增加额外的收入。

  • 满减金额:满减条件同样是需要慎重把握的一个方案。满 10 减 10,相当于不需要黑产付出任何成本。一旦变成满 10.01 减 10,效果就天差地别了。想要支付这多出的 1 分钱,黑产必须进行一个完整的支付流程,必须绑定银行卡等其他支付方式,这些都是额外的成本。而满 30 减 10,对公司来说应该是稳赚不赔的,也就不需要考虑漏判的风险。

  • 有效期:有效期过长同样会给黑产带来便利。因为黑产售卖“满减红包”或者“代下单”,是需要时间来找买家的。所以,有效期越长,黑产卖红包的时间就越长。如果把有效期设为 2 天,黑产就很有可能面临优惠券卖不出去而过期的风险,收益就会大大降低。

提升应用安全性的产品方案还有很多。我总结了一些常见的例子,你可以了解一下。

在邀约活动中,我们可以适当增加用户任务的难度,如必须连续活跃三天用户才能得到收益;在抽奖活动中,我们可以增加参与抽奖的门槛,如必须是注册一个月以上的老用户才能参加;在排行榜活动中,我们可以将排行榜的计算规则隐藏,让黑产摸不清刷的方式。这些常见的安全产品方案可以提升黑产攻击业务的成本,让业务更安全。

总结

在业务安全中,NIST 的安全框架 IPDRR 可以指导我们与黑产进行对抗,实现全面防护,避免安全短板的出现。

识别和保护是 IPDRR 中的前两个步骤,主要的工作是进行威胁评估和制定安全产品方案。其中,威胁评估的主要过程其实就是基于业务形态,对黑产可能的获利点、业务的目标用户、安全的实时性要求、策略的误伤和漏判影响进行综合的评估。

评估完成之后,你就能够知道,业务安全的目标和要求是什么。安全产品方案则是提高黑产资源成本的第一道防线,通过适当地增加用户操作的复杂度,来提高黑产的各类资源成本。安全产品方案实现起来比较简单,且没有误伤和漏判,是业务安全中十分简单有效的一环。

业务安全同样讲究纵深防御,任何一个单点的防御机制都有其缺陷,很容易被黑产绕过。因此,对业务安全来说,在部署风控系统之前,我们要先进行威胁评估,然后设计出一个安全的产品方案。这样一来,我们就能够在根本上提高黑产的资源成本,大大提升业务的安全性。

思考

试着分析一下,在你负责的业务或者应用中,有哪些产品方案是为了安全考虑的。黑产有什么办法可以绕过这些产品方案呢?还有哪些方法可以进一步提升黑产的资源成本?

Q:只是不确定收益可能还不够,因为黑产会通过大量的账号来消除不确定性。但如果在不确定中加入一定判断,对黑产账号给予确定性的低收益,是比较理想的解决方案。既降低了黑产的欲望,即使出现误伤,也可以用不确定性来解释。

27 | 风控系统:如何从海量业务数据中,挖掘黑灰产?

如何理解风控系统?

简单来说,风控系统就是从业务数据中挖掘出黑产行为的数据分析系统

通过对比产品方案来深入理解风控系统。

  • 产品方案抵御黑产的方式,是普适性地提高用户的使用成本,不区分用户是否是黑产。因此在产品方案中不存在数据挖掘和分析的工作。

  • 在风控系统抵御黑产的过程中,为了不增加正常用户的使用成本,我们必须对黑产用户进行区分,然后告诉业务只对黑产进行拦截,放行正常用户。而区分黑产就需要对海量的业务数据进行分析和挖掘了。

总结来说:产品方案属于事前的防控,是从根本上提高黑产操作的成本;风控系统属于事中的防控,是在检测到黑产行为时才进行拦截

目前,风控系统的整体框架已经基本成熟了,各个公司的风控系统也都大同小异。一般来说,一个完整的风控系统框架应当包括前端 SDK、规则引擎和验证流程。但是,一个完整的风控流程还需要人工进行数据分析、处理用户投诉、监控舆情,并采取应急响应机制。完整的风控流程如下图所示:

完整的风控流程

风控系统如何利用前端 SDK 采集数据?

想要在风控中做好数据分析,数据当然是越多越好。

但是,业务在正常的开发过程中,一般不会采集和业务无关的数据(比如设备相关的信息)。为了解决这个问题,风控系统通常会提供一个前端 SDK。前端 SDK 由业务集成在前端应用中,它可以采集各类前端数据,如手机型号、硬件类型等。

除此之外,前端 SDK 还会计算出一个唯一的设备指纹,通过这个设备指纹,我们就能够实现对设备行为的追踪。

前端SDK采集数据

规则引擎如何帮助风控系统识别黑产?

在风控系统中,一次操作行为是来自黑产还是正常用户,是由规则引擎来决定的。那么,规则引擎是如何识别黑产的呢?

规则引擎会接收到业务提供的原始数据,而想要从中识别出黑产,我们首先需要通过一些统计手段找到其中有用的特征。那什么是“有用的特征”呢?

举个例子,想要从登录行为中识别出黑产,仅仅知道设备指纹是不够的,我们还需要知道,这个设备在最近一段时间内发起了多少次登录请求。这就是特征提取需要进行的工作了。

经过特征提取得到特征之后,我们就需要制定规则对登录行为进行判定。比如说,我们可以定义,一个设备在 1 分钟内登录 5 次的行为属于异常行为,应当进行拦截。

这样一来,当有新的登录行为发生时,通过规则引擎,我们就可以直接判定其是否为黑产。规则引擎的识别过程如下图:

规则引擎的识别过程

应该如何做好一款规则引擎呢?

关键在两个方面:采用正确的工作模式、设计高效的规则管理功能

1.正确的工作模式

规则引擎可以分为同步、异步和离线三种模式。下面,我就以登录场景为例,为你解释一下这三种模式的工作过程。

在同步模式下,用户输入完用户名密码之后,需要先经过规则引擎的判定,只有正常用户才能够正常登录,黑产则直接被拦截,不允许登录。

在异步模式下,用户一开始是可以正常登录的,登录后才交由规则引擎判定,如果最终确定是黑产,则会被封号或者踢出登录状态。

离线模式的效果和异步模式一致,不过异步模式通常会在几秒到几分钟的时间内完成判定和处罚,离线模式则需要几小时甚至一天的时间才能够完成判定。

三种模式的工作过程

在大部分情况下,我更推荐使用异步或者离线模式,仅在部分没办法做事后的拦截和处罚的业务场景中,我们才会使用同步模式。

举个例子,在提现操作中,提现成功后,钱就已经从公司转移到黑产手里了,我们没有办法追回,因此我们必须采用同步模式,在提现操作前对黑产进行拦截。

2.高效的规则管理

如果你做过数据分析工作,一定知道同步、异步、离线其实都是数据分析工作中常见的模式,已经有很成熟的工具来为它们服务了,比如:通过 Redis 完成实时计算;通过 Flink 完成异步计算;通过 Hive 完成离线计算等。因此,规则引擎不存在技术上的独特性

目前来看,我觉得比较好的解决方案是,使用Aviator、QLExpress、Groovy等在 Java 中提供动态开发支持的语言,来进行底层的规则执行,在此基础之上,我们再去封装自己理解的规则管理。这样一来,我们就实现了灵活性和复杂度的平衡。

比较好的解决方案

当然,你可能会想到使用机器学习来解决规则管理的难题。机器学习相关的内容,我会在后续的课程中详细来讲。

总结来说,规则引擎是风控系统的核心。想要做好一个规则引擎,我们需要思考清楚两件事情:第一,规则引擎以什么样的模式接入业务;第二,如何进行规则管理。

风控系统为什么需要经过验证流程才能拦截黑产?

比如说,当用户因为忘记密码多次登录网站失败的时候,网站就会怀疑这是黑产在进行操作。这个时候,我们如果直接拦截,就会收到大量的用户投诉。

为了解决这个问题,风控系统中加入了验证流程。采取适当的验证流程,我们可以降低拦截机制对用户体验的影响。所以,在上面的例子中,网站会使用滑块验证码来验证你是否是黑产。

基于业务场景的不同,验证的方式还有很多,比如,核验身份的短信认证、人脸识别,区分人机的图片验证、滑块验证等。很多应用都会对存疑的用户和行为施加各种验证流程,来保障用户身份的真实可靠。所以,为了让风控系统成功落地,验证流程是我们不能忽视的一个环节。

有哪些风控人员?

风控人员一般分为策略人员、运营人员、应急响应人员

总结

一个完整的风控系统需要结合业务全流程。

前期需要通过前端 SDK 采集设备数据,然后结合业务的离线数据,由算法或者策略人员进行数据分析,整理出具体的规则。接着,通过同步、异步或者离线的方式和业务进行对接,并基于规则对业务数据进行判定。

如果发现了黑产的用户和行为,风控系统还需要提供对应的验证流程,来降低对用户体验的损伤。最后,风控系统还需要保持对用户客诉、黑产舆情的监控,及时发现、响应和处理风险,降低业务的损失。

规则引擎作为风控系统的核心,主要分为特征提取规则管理两个部分。特征提取可以依靠现有的各类大数据处理框架实现。规则管理则因为各个公司和业务对规则的复杂度和灵活度要求不同,很难有非常合适的解决方案,需要我们根据不同的情况灵活调整和实现。

风控系统

思考题

你可以调研并试用一些开源的风控系统,试着思考一下,在这些系统中,有哪些功能对你的业务有帮助。接着,你可以再试着分析一下,业务有哪些痛点是这些系统无法满足的。

28 | 机器学习:如何教会机器识别黑灰产?

通过建立一个成熟的风控系统,你能够快速建立起和黑产进行持续对抗的稳固防线。但是,风控系统和规则引擎仅仅是一个平台和工具。想要真正对黑产进行识别,我们还得依靠规则引擎中运行的规则策略

规则的维护主要是依靠人力来进行的。但是这样的维护方式会有两个弊端:首先,人的工作效率会受各种因素影响,所以对抗的实效性很难保障;其次,规则的维护受到人的主观意识的影响,可能会产生一些“偏见”。

对于上述这两个问题,机器学习是一个理想的解决方案。因为,机器学习不仅可以无休止地工作,还会完全依据客观事实产生结果。

如何正确认识机器学习?

机器学习挖掘恶意攻击的前提,是攻击行为必须能够被人为的判定,只是判定过程比较模糊和复杂,无法通过制定简单的规则进行人为的区分。因此,机器学习实际上是对人为经验的一种总结,并不具备创新的能力,所以最终对抗效果的好坏,还是取决于人的对抗能力

无监督学习在安全中的应用

无监督学习的目的是挖掘数据的分布特征,主要包括数据的聚集特征(也叫聚类特征,是通过聚类算法获得)和分布规律(也叫离群点,通过时序算法获得)。这些特征和规律能够帮助你发现异常的情况,但是不能帮你定位异常的行为

通过应用无监督学习,我们能够发现整体数据中的异常情况,然后只需要根据相应的报警去分析疑似异常的数据就可以了。相比于人工去分析全量数据,无监督学习能够大大提升风控效率。

有监督学习在安全中的应用

有监督学习的基础是标签数据,标签就代表着已知。所以,有监督学习的最大作用就是用来挖掘“已知的威胁”。如果想要保持和黑灰产的持续对抗,我们就必须不断地生产标签数据(也叫“打标”),供有监督学习的算法来学习。但是,依靠人工去生产标签数据是不可行的。你可以先试着思考一下,不可行的原因都有哪些,然后再来看我下面的讲解。

第一,时间成本高。

第二,覆盖面不全。

第三,标准偏差。

想要成功地应用有监督学习,我们就必须找到客观、高效的“打标”方案。

在基础安全领域中,黑客的最终目的无非是获取数据、篡改程序、拒绝响应等。所以,我们其实可以通过数据的 CIA 是否受到影响来进行标记,获得最终的判定标签,然后将标签进行回溯,从而获得表层的标签数据。

举个例子,WAF 是通过获取 HTTP 相关的数据(如:路径、参数、header、ua 等)来找出恶意的 HTTP 请求,从而对 Web 攻击进行检测拦截的。但是 WAF 并不知道这个请求具体会干什么,执行什么样的逻辑,所以它的评判标准只能是“带有 XXX 特征的请求是恶意请求”。如果想持续不断为 WAF 提供标签数据,靠人力肯定不行,我们应该深入追踪下去,以最终结果对数据进行自动“打标”。

RASP 的检测思路正是如此,就是直接深入到 Web 程序的逻辑,根据运行情况去评判该请求是否是攻击行为。因为是对 HTTP 请求的最终行为进行评判,所以 RASP 可以实现所谓的“无规则检测”,准确率和召回率都有保证。

如果我们利用 RASP 对影响数据 CIA 的 HTTP 请求进行打标,然后由 WAF 去学习这些 HTTP 请求具有什么样的特征,那么一个完整的机器学习闭环基本就形成了,如下图所示。

机器学习闭环

业务安全其实也可以尝试同样的思路来生产标签。比如,我们可以通过对接口签名校验、虚拟设备判定等方式,对异常的行为进行标记,作为业务安全中标签数据的来源。在此基础之上,我们再使用有监督学习算法去学习异常行为的特征,让业务风控的机器学习算法能够不断更新和迭代。

不建议直接根据标签数据进行拦截。因为我们一旦进行拦截,这些生产标签的指标就会暴露,就会促使黑产进行研究和对抗,那么标签的准确性就会受到影响。

可以采用一些相对间接的方法:比如,通过用户反馈来获取异常的行为数据;再比如,标记一部分已知的恶意用户,但是不处理这些用户,而是将它们产生的行为都当成恶意行为来标记。

总而言之,想要成功地运用有监督学习,我们必须找到一个合理的打标方案,持续不断地产出可靠的标签数据。在此基础上,我们才能够运用各种高大上的算法,去挖掘安全领域中的“已知的威胁”。

总结

在安全领域应用机器学习的时候,我们要注意:机器学习并不是一个万能的工具,它无法发现“未知的威胁”。因此,在和黑产对抗的过程中,“人”始终是对抗过程中最关键的部分,而机器学习更多的是一种提升效率的工具

对于无监督学习,我们可以利用它的原理,来发现异常的聚集和离群点。尽管这些聚集和离群点,因为准确率不足无法全部被判定成攻击行为,但聚集和离群点的数量和分布,仍然反映出了整体的异常情况。

而对于有监督学习,我们需要设计一个合理的标签系统,来尽可能自动化地生成标签数据,从而保持算法的持续更新和迭代。

机器学习识别黑产

思考题

基于今天给出的机器学习应用思路,你能分析一下,在你负责的业务安全场景中,有哪些风险是可以通过无监督或者有监督学习算法来分析的吗?应该如何进行分析呢?

另外,如果你了解深度学习和图算法的话,那么不妨试着思考一下,深度学习和图算法是如何在安全领域中使用的。

29 | 设备指纹:面对各种虚拟设备,如何进行对抗?

“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已”。这句话在风控系统中同样适用,因为风控系统本质上也是一个大数据分析系统。所以,收集更多的数据是提升风控能力的一项核心工作。

设备指纹是用来标识手机或者浏览器的唯一 ID,我们能够通过这个 ID 关联到手机或浏览器相关的全部数据。因此设备指纹是风控系统中最核心的数据来源。

那设备指纹是如何对手机进行追踪的?又是如何判定异常行为的呢?今天,我们就一起来探讨一下,应该如何设计和实现设备指纹。

设备指纹的优势

对比于传统的 IP、手机号等 ID,设备指纹具有唯一性高、稳定性强信息丰富这三个优势。

基于这些优势,一方面,设备指纹可以以设备为单位对其相关的行为进行串联,发现诸如使用一个设备进行大规模注册等黑产攻击行为;另一方面,设备指纹可以基于其丰富的设备信息,来识别黑产使用的虚拟设备,帮助风控系统对抗黑产

设备指纹面临的主要挑战

要设计和实现设备指纹。那你可能会问,Android 和 iOS 都已经内置了用来追踪设备的 ID,比如IDFA(Identifier For Advertising),我们为什么还要自己去实现设备指纹呢?在解答这个问题之前,我首先来讲一下设备指纹技术面临的主要挑战。通过这些挑战,你就能够明白内置的 ID 存在哪些问题,为什么无法满足风控系统的需求了。

第一,设备重置之后,保持设备指纹不变。

恢复出厂设置是所有智能设备的标配功能,设备重置之后,系统自带的设备 ID 必然会发生变化,理论上来说就是“新设备”了。

所以,如果只是使用系统自带的设备 ID,黑产完全可以通过不断恢复出厂设置模拟大量的设备,来绕过风控系统的检测。因此,如何在恢复出厂设置的情况下,仍然保持设备指纹的稳定不变,是设备指纹技术的主要挑战之一。

第二, 设备更新之后,保持设备指纹不变。

既然无法直接使用自带的设备 ID,那我们就必须基于各类设备信息综合计算出设备指纹。

总之,黑产总是会尝试去修改虚拟设备的各类配置,将其伪造成新的设备,从而绕过风控系统的检测。因此,一个稳定的设备指纹可以帮助风控系统对抗黑产的虚拟设备。

这两个挑战都属于设备指纹对稳定性的要求。最后,我们还要保证设备指纹的唯一性,避免两个不同的设备产生相同的设备指纹,比如,如何准确地区分同型号的设备,也是设备指纹需要满足的要求之一。所以,唯一性是避免误伤真实用户的关键维度

设备指纹的信息采集

通过上述的挑战我们可以看到,不同类型的信息能够满足不同的诉求,比如:iOS 中的 IDFA 或者 Android 中的 IMEI 可以解决环境变更的问题,但是无法解决重置的问题;而硬件特征可以解决重置的问题,但是面对多个同型号设备,可能无法准确区分。

想要获得准确且稳定的设备指纹,我们必须从多个维度采集不同的信息。这些信息可以大致分为:软件 ID、软件静态特征、硬件静态特征硬件动态特征

第一,软件 ID。

软件 ID 主要包括 iOS 设备的 IDFA、IDFV,Android 设备的 IMEI、MAC 等。这些 ID 本身就是苹果和 Google 为了给 APP 厂商提供追踪能力设计的标识,具备较好的唯一性和稳定性。

但是,操作系统为了保障用户隐私,对 APP 的权限做了较多的限制。比如,用户可以自主选择禁止 APP 获取到这些 ID,重置手机也会同时重置这些 ID 等。

而黑产也会利用这一特性,绕过 APP 厂商的识别策略。比如,黑产可以在苹果系统中直接设置不允许获取 IDFA。这样一来,APP 厂商的风控系统就没有办法通过设备维度关联黑产行为了,也就无法识别单一设备批量操作的攻击行为了。

第二,软件静态特征。

软件静态特征主要是操作系统和 APP 本身的各类基本信息,比如操作系统版本、手机名称、APP 版本等。这些信息基本都可以通过更新或者手动配置的方式修改,因此在稳定性上表现较差。但是,这些信息能够反映出用户的个人特征,因此,它们能够对设备指纹的唯一性产生较大帮助。

第三,硬件静态特征。

硬件静态特征主要是设备的各类硬件信息,比如,主板、CPU、摄像头等相关型号信息。正常用户基本不会去替换设备上的各个硬件,因此硬件静态特征具备较高的稳定性。

但同一型号手机的硬件配置是一致的,所以,硬件静态特征在唯一性上相对欠缺。因此,通过硬件静态特征,我们无法很好地区分同型号的设备。

第四,硬件动态特征。

硬件动态特征是目前比较新的研究方向,它的基本原理是基于硬件的一些动态执行层产生的特征(如:加速度传感器的偏差)来识别虚拟设备。

举个例子,因为加速度传感器校准结果的不精确性,其产生的最终结果会存在一定的偏差。通过多次快速地查询加速度传感器,我们就可以模拟出同一时刻,加速度传感器返回的结果值。又因为存在机械偏差,所以这些结果值是不同的,那通过这些值,我们就可以计算出该传感器的线性偏差。

利用这样的原理,我们可以采集任何一个传感器硬件的偏差特征。

不过由于特征区间比较窄,唯一性稍差一些,更多被用来辅助区分同型号的不同设备。

设备指纹的 ID 计算

在采集了各类信息之后,如何基于这些信息计算出一个正确的设备指纹,是设备指纹技术的核心挑战。由于数据的维度和数据量的大小都各有不同,因此,各个公司都需要自己设计相应的算法进行计算。下面我们来讲一下 ID 计算的大体思路。

判定过程进一步抽象的话,其实就是计算两组数据的相似度,相似度越高、差异度越低,就越有可能是同一个设备。

实际工作中是如何利用相似度进行判定的。

首先,新采集上来一组设备信息,我们要计算它和已有设备信息的相似度。可实现的算法有很多,简单的包括欧式距离、马氏距离、联合概率分布等,相对复杂的包括 MRF(马尔可夫随机场)、BP 算法(置信度传播算法)等。

其次,我们会设定一个阈值,当这两组数据的相似度达到这个值之后,就可以判定这两组设备数据本质上都是同一台设备产生的。

设定阈值的依据,就是黑产伪造新设备的 2 种方式:

  • 1.重置设备:手机在重置后,虽然设备 ID 改变了,但是大部分的硬件相关信息仍然保持不变;

  • 2.更新设备:如果更新系统信息,那么设备 ID 和硬件信息等仍然保持不变;如果替换部分硬件,那么系统信息和配置等仍然会保持不变。

最后,如果判定这两组数据属于同一台设备,我们就分配相同的设备指纹。如果属于不同的设备,我们就为新采集的数据生成新的设备指纹。设备指纹分配的流程如下图:

设备指纹分配流程

设备指纹对异常设备的识别

设备指纹的另一个核心任务就是对异常的设备进行识别。异常的设备可能是虚拟机,也可能是手机墙、云控等真实的设备。

可以从三个方面来识别异常设备。

第一,系统信息识别。

识别虚拟机最基本的方法,就是利用一些系统的默认参数,也就是系统信息来识别。

不过想要修改系统信息十分容易,因此大部分黑产都能够绕过基于系统信息识别的检测方法。

第二,硬件识别。

虚拟机和真实设备的最大区别就在于,虚拟机不存在真实的硬件设备支持。因此虚拟机在很多功能上会存在缺失。

比如:各类传感器要么缺失,要么采集的数值都是 0 或者某个固定值;相机功能异常,无法拍照等。这些都是常见的虚拟机硬件缺失的特征。

黑产想要绕过设备指纹基于硬件特征的检测机制,就必须在虚拟机中模拟出这些硬件的存在,这需要一定的技术成本。

第三,系统状态识别。

为了降低被风控系统识别的风险,有的黑产已经升级到使用廉价真机来攻击业务了。因为设备已经是真实设备,所以我们无法通过虚拟机的检测方式识别设备异常。但是,既然虚拟机都有特定的特征可以用来识别,那这类真实设备是否也有呢?显然是有的。

总体来说,对异常设备的识别,是设备指纹和黑产进行直接对抗的领域。双方都在不断挖掘新的技术相互博弈:黑产在想方设法让设备看起来更加真实可信,而我们则需要不断挖掘新的特征点,找出这些设备和正常设备之间的差异。

总结

设备指纹是风控系统中对设备实现长期追踪和异常识别的一种关键技术。

一款好的设备指纹,必须有足够高的稳定性唯一性。也就是说,设备指纹不能够因为一台设备的小幅度变动和更新而轻易改变,也不能够同时属于两台设备。

为了实现对设备的长期追踪,我们必须采集各类设备信息,进行相似度的计算和识别;为了实现异常设备识别,我们需要对异常的系统信息、硬件信息状态和系统状态进行挖掘和分析。

另外,想要开发出一款合格的设备指纹,公司需要投入大量成本在移动安全领域中不断研究。因此,大部分的中小型公司,会选择采购安全厂商提供的设备指纹技术,而将主要的精力集中到如何去利用设备指纹采集上来的数据。

设备指纹

思考题

随着 H5、小程序等应用的普遍落地,Web 端的设备指纹技术也是目前火热的研究方向之一。你可以试着思考一下,Web 环境中的设备指纹会面临哪些新的挑战和技术难点呢?为什么?

30 | 安全运营:“黑灰产”打了又来,如何正确处置?

在前面的课程中,我们介绍了 IPDRR 的前三个部分,并且着重讲解了风控系统的框架、算法以及设备指纹的相关技术。学会了这些机制和手段,你已经能够识别出大部分的黑产了。那我们是不是可以直接将识别的结果抛给业务,让业务自行处理呢?

在一个专业的业务安全方案中,这当然不可以。因为,识别出黑产仅仅是第一步,采取合适的手段处理黑产,才是业务安全长治久安的根本。

针对黑产处理的三个参照原则:

  • 采取适当的拦截策略,防止黑产快速绕过业务安全策略

  • 给予一定震慑,防止黑产变本加厉

  • 保持情报收集,做好和黑产持续对抗的准备

今天,我们就结合这三个原则来看一下,有哪些运营手段可以对业务安全起到正向作用,切实打击黑产。

业务中处理黑产的手段

在识别出黑产之后,运营的第一步一定是在业务中对黑产进行处理。

1. 直接拦截

在不同的识别模式下,黑产的拦截方案也不同:同步模式下,我们可以直接拒绝黑产的当次登录请求;异步和离线模式下,我们可以拒绝对应的账号在登录后继续使用业务。这都属于直接拦截,拦截之后,黑产都将无法继续使用业务,自然也就无法对业务产生任何影响了。

尽管直接拦截的方案简单有效,但是我们依然需要注意,因为出现误伤而损伤用户体验的问题。因此,通常只有在风控识别准确度较高的时候,我们才会采用直接的拦截处理。

2. 验证拦截

验证黑产的方式有两种:人机验证和同人验证

首先是人机验证。

人机验证的目的是区分人和机器的操作,防止黑产利用机器去自动化刷取业务的利益。

人机验证的验证码,你应该很熟悉,最常见的是图片验证码。在进行图片验证的时候,我们可以轻易地认出变形后的数字和字母,但是机器却不能。

不过,随着深度学习的发展,图像识别技术越来越准确,图片验证码已经不那么可靠了。近几年比较流行的滑块验证码。

在进行滑块验证的时候,会要求我们拖动滑块滑至目标点。但是人在滑动过程中不可能匀速直线运动,所以滑动轨迹在速度、方向等特性上会存在一定的波动,而机器则会产生笔直的滑动轨迹。通过这个特征,我们就可以来判定是人还是机器在拖动滑块。

再来说说同人验证。

同人验证主要是区分进行操作的是不是用户本人,防止账号被盗用。

比如,当我们异地登录邮箱的时候,网站经常要求我们进行短信验证。这是因为我们的登录操作,被同步模式下的风控系统判定为可疑,所以网站才会通过短信来验证你是不是本人在操作。

除了短信验证还有很多常见的产品方案,比如:异地登录的时候,微信会要求你从一堆用户列表中找出你的好友;美团会要求你从一堆订单中找出自己下过的订单等。

另外,像人脸识别、声纹识别这种基于生物信息的验证方式,也进一步丰富了同人验证的方式。并且,因为其极优的用户体验感,目前各大应用都重点采用了它们。

因为验证不会阻拦正常用户使用业务,而且,即使出现误伤,验证能产生的影响也相对较小,因此它使用的场景更加广泛。

是否选择验证方式进行拦截,还要取决于验证方式本身的安全性,也就是验证方式是否能够起到阻拦黑产的效果。如果黑产能够以较低的成本通过验证,就起不到任何的拦截效果和作用了,也就不是最佳拦截方案。

3. 假数据拦截

一种在爬虫场景中比较常见的拦截方式,就是通过假数据的形式来拦截黑产的行为。

比如说,像是酒店、机票这样的业务,通常会尝试去爬取竞争对手的价格数据,让自己的价格在竞争中更占优势。所以,当风控识别到请求是来自于爬虫的时候,会直接返回一个虚假的价格数据,来误导爬虫。

针对爬虫场景,我们之所以不采用直接拦截或者验证拦截的方式,就是因为这些拦截方式会被爬虫发现,然后爬虫就会想尽办法绕过这两种方式。但是,如果使用假数据,爬虫可能认为自己已经成功爬取了数据,就不会特意绕过了。

而且,在抓取业务数据的过程中,爬虫并不会直接攻击业务的正常流程。所以,这些假数据被爬取,并不会给我们造成任何损失。

尽管优势非常明显,但是使用假数据的成本很高。这是因为,机票和酒店这样的业务中都会有成千上万的价格数据,如何设置一个合理的假数据,使其既不明显偏离正常值,被爬虫发现,又不过度接近真实值,泄露机密信息。这必然需要业务方投入足够的精力来设置。

3种拦截ah方式对比

总结来说,风控系统识别到黑产之后,可以在业务中采取拦截、验证和假数据的形式处理。相比较而言,验证是适用范围最广的处理方式,我们可以根据不同的场景需求和风控的准确性,选取不同的验证方式。

业务之外处理黑产的运营手段

想要做好业务安全,除了在业务中采取合适的手段处理黑产以外,我们还需要了解黑产。这就需要我们采取一些业务之外的运营手段去获取黑产的信息,有的时候,业务之外的运营手段甚至可以从根本上铲除黑产。常见的运营手段有 3 种,分别是情报收集、钓鱼执法案件打击

1. 情报收集

掌握和了解黑产的动向和手段,是做好业务安全防御的必要基础。情报收集需要运营人员对微博、贴吧等公开信息源保持监控,加入一些“羊毛群”,甚至打入一些黑产交流群。

通过这些方式,你就能够知道外界是否对你的业务发起了攻击,从而及时发现漏洞,补全业务安全防御体系。

2. 钓鱼执法

情报收集需要我们打入黑产内部,但是打入内部需要一定的运气,并没有什么固定的方法能够帮助我们找到黑产团伙。因此,面对狡猾的黑产,我们可以采取钓鱼执法这样的手段。

比如说,在微博上,你经常会看到有人提供买小号、买粉丝这样的服务。毫无疑问,这些服务对业务来说是非法的。那业务安全就需要知道这些黑产是如何突破防御体系,进而发起攻击的。

这个时候,钓鱼执法就是一个非常有效的方案了。举个例子,我们可以花钱去买一批小号,这样,我们就得到了一批被黑产掌握的账号,然后就可以去分析这些账号的历史行为了。

(PS:当然万一黑产的技术本身比较菜,也可能话冤枉钱,所以你还得先知道那些黑产团伙技术比较好)

需要注意:钓鱼执法的结果只能够帮助你完善业务安全能力,并不能作为案件打击的依据。如果你想要对这类已知的黑产进行打击,就必须基于钓鱼获得的部分信息,去挖掘出黑产整体的行为,才能够找到被法律认可的犯罪事实。

3. 案件打击

随着《网络安全法》的推出,国家对于安全的把控越来越严格,各地的网安、网信办等机构,都纷纷出手开始打击黑产团伙。因此,对于业务运营来说,借助法律方式打击黑产也是一个十分有效的方案。比如去年微博成功打击的“星援”案件,就是警方直接抓捕了刷明星热度的一伙黑产。

结合这个案件和你一起分析一下,想要成功发起一次案件打击,需要具备的基础条件。

首先,想要打击黑产,你得知道黑产是谁。你可能会认为这是警方的工作。但事实上,警方不熟悉你的业务,无法接触你的系统,排查起来会很困难。因此,通常需要由业务人员找出打击的目标是谁,再交由警方进行后续的处理

比如,微博业务人员先是发现有人在刷转发、评论、点赞等,然后基于对这些账号的行为分析和用户的访谈,发现这些操作是由“星缘”这款 App 产生的,而“星缘”App 又对应到了一家公司。排查到这里,警方就可以对这家公司进行线下抓捕和打击了。

其次,你要明确业务损失的金额或者黑产的收益金额。因为法院的最终判决主要还是依靠直接金额的大小,只有金额明确了,你才能够推动警方去协助你打击黑产。

现金类业务(如:红包、优惠券、支付等)的金额很好衡量,我们直接统计黑产成功获取的金额即可。但是,对于非现金类的业务(如:登录、评论等),我们无法准确地衡量一个用户或者一次评论的价值,因此很难给出一个可信的金额损失数目。

这个时候,我们可以通过黑产的收益来评估,比如黑产通过盗号或者刷评论,赚取了多少收益。这些收益属于非法收益,可以用来作为法院评判犯罪事实的参考依据。

在“星缘”一案中,最终评判的依据就是黑产通过提供非法服务获利上百万元。

最后,当你找到了目标、明确了损失的金额之后,你还要提供证据。但是对于网络犯罪来说,需要提供什么样的证据,其实是一个相对模糊的部分。尽管如此,我还是根据经验总结了 3 种常见的证据形式

  1. 黑产服务器上的日志和其名下的资产记录是最有力的证据,它们是由警方实施抓捕后获得的信息,因此具备极高的可信度。同时,黑产的日志也能够直接表明它们的所作所为,不存在任何狡辩的空间。
  2. 在内容侵权相关的案件中比较常见的公开侵权数据。比如,竞争对手的信息流中,出现了自家公司生产的内容,这就是竞争对手采取恶意手段爬取我方数据,侵犯我方版权的明确证据。
  3. 自身服务器日志。在案件打击过程中,公司也同样需要提供一份日志作为黑产发起攻击的证明。在大部分的案件打击中,前两种证据已经能够提供直接证明了,公司提供的自身服务器日志,更多的是为警方办案提供辅助支持。

总结

和基础安全一样,运营工作对于业务安全的长期发展意义重大。业务安全中的运营工作主要分为两个方面:业务中的黑产处理业务之外对黑产信息的挖掘和打击

在业务中处理黑产时,我们采取更加间接的方式,比如,验证码和返回假数据,能够大大降低风控误伤对正常用户的影响,同时也能够增加黑产绕过风控的难度。

在业务之外,通过情报收集和钓鱼执法,能够为风控系统提供持续的数据支撑,帮助风控系统完善自身的策略。除此之外,还能够通过司法手段,对黑产实施线下打击,从根本上打击黑产的嚣张气焰。

安全运营

思考题

除了我今天讲的这几种验证方式,你还见过哪些验证方式,它们的用户体验和难度如何?你能够想办法自动化地进行验证吗?

Google reCAPTCHA, v2只需用户勾选复选框或点击按钮,v3不需要用户交互

作者回复: Web端使用reCAPTCHA确实可行,不过移动端目前还是做不到无感验证,主要因为移动端没有“鼠标滑动”这一关键信息。

作者回复: 验证这一块没有讲特别细,需要思考的确实比较多。很多时候,其实使用用户体验差的方案,是为了更好的安全性。比如在新设备登录微信,只靠密码肯定是不够的,而用户可能手机号也换了,短信验证走不通,这个时候,就只能依靠其他的信息来做验证了,比如微信的关系。不过现在有了声纹和人脸,安全性大大提高,这种用户体验差的验证方式基本可以杜绝了。

06 知识串讲 (3讲)

模块串讲(一) | Web安全:如何评估用户数据和资产数据面临的威胁?

“体系化地记忆”

“Web 安全”模块中,安全落地的第一步是进行威胁评估,而威胁评估又可以分为:识别数据、识别攻击和识别漏洞。所以,今天我就基于比较常见的两种应用场景,通过威胁评估的方式,带你系统地复习我们学过的 Web 安全知识。

[1]用户数据的威胁评估

可能的 Web 漏洞(3 种):

第 1 个是 XSS 漏洞。通过 XSS 漏洞,黑客可以在 Web 应用中嵌入自己的 JavaScript 脚本,从而篡改 Web 应用在用户浏览器上的行为。绕过登录认证环节,直接获得用户身份。

XSS漏洞

第2个是 SQL 注入漏洞。通过 SQL 注入漏洞,黑客可以利用所谓的“万能密码”,直接对登录环节进行破解。破解登录认证环节,直接获得用户身份。

SQL注入

最后一个是 CSRF 漏洞。通过 CSRF 漏洞,黑客能够直接对用户的浏览器进行控制。以用户的身份发起未授权的操作请求。

CSRF和SSRF

[2]资产数据的威胁评估

可控制内网服务器的技术。

第 1 种:利用 SSRF 漏洞攻击。通过 SSRF 漏洞,黑客可以控制服务器,向内网发起任意的网络请求。

除此之外,通过对一些特定端口或者协议的访问,黑客还能够获取其他的数据。比如,通过访问 MySQL 的 3306 端口,黑客能够知道内网的整体网络结构;或者通过 file:// 协议,黑客可以直接读取服务器本地的文件。

第 2 种是利用反序列化漏洞攻击。通过反序列化漏洞,黑客可以控制应用的服务端,使得服务端执行黑客所定义的逻辑。更进一步,比如在 Java 中,黑客指定应用执行 Runtime.exec(),就能够让应用执行任意的系统命令了。这样一来,黑客就能够实现从控制应用到控制服务器的权限提升了。

反序列化

第 3 种是利用插件漏洞攻击。除了应用开发的代码中可能出现漏洞,应用所依赖或者使用的插件本身,也有可能出现各种安全漏洞。

插件漏洞

第4种就是“后门”。除了通过前面这 3 种漏洞攻击控制服务器之外,黑客为了能够对服务器实现长久的控制,会在服务器中留下“后门”。这样一来,黑客想要再次使用服务器的时候,只需要直接通过“后门”进入即可。“后门”通常会以木马、Rootkit 和 WebShell 的形式出现在服务器中,并伴随定时任务、开机启动或者利用常驻进程在服务器中持续运行。

权限提升和持久化

[3]认证和授权的安全防护

第 1 种是检测和过滤。对于应用来说,一切由用户生成的信息,都是不可信的。

第 2 种是加强认证。大多数情况下,为了用户体验,应用会在用户进行一次登录后,在前端对用户的身份信息进行保存。为此,对于某些关键性的操作(比如转账等),应用需要通过一次性 Token 和安全性更高的支付密码等手段进行二次认证,来保障操作的可信。

第 3 种是补丁管理。为了避免应用受到各类插件漏洞的影响,我们需要使用各种自动化的插件管理工具,对公开的插件漏洞进行监控,及时更新补丁。

3种防护手段加强认证环节的安全性

第 1 种最小权限原则。在任何时候,最小权限原则一定是提升系统安全性的最佳实践方案。

第 2 种是 WAF(Web Application Firewall,网站应用级入侵防御系统)。WAF 的主要作用,就是对用户的输入进行检测,拦截可疑地输入。

第 3 种是 IDS(Intrusion Detection System,入侵检测系统)。当黑客进入内网或者控制了服务器之后,其行为往往也会区别于内部员工。

总结

Web安全几种攻击方式对比

思考题

问题1:内网服务器能访问互联网而且没有采用白名单的限制会存在什么样的漏洞?如果通过白名单限制,那服务器需要访问外网拉个镜像呀,某些软件升个级呀,这种情况下有什么好的可借鉴的处理方案没?
问题2:对存储数据(如:MySQL的数据)的加密有什么好的借鉴方案没?

作者回复: 1、没限制的话,黑客控制服务器之后,可以轻易地将数据发出去,也可以从外网下载一些木马或者病毒来实现权限提升和持久化。。。有的公司会做成权限形式,服务器想访问某个外网地址,需要走提案申请。
2、需要明确目的是什么。一般说数据库加密,其实是硬盘加密,即防止硬盘丢失后导致数据泄露。如果只是字段加密,比如手机号等,防止开发看到这些数据,则可以做一个统一的加密服务中心,来对加解密做统一的管理。

07 特别加餐 (5讲)

加餐1 | 数据安全:如何防止内部员工泄漏商业机密?

为什么员工会主动泄漏公司机密?

“生活中有两个悲剧。一个是你的欲望得不到满足,另一个则是你的欲望得到了满足。”

第一个肯定是赚钱,这也是最容易想到的一个。员工利用公司来赚钱的方式,无非有 3 种。

  • 倒卖公司数据。对于任何一家公司而言,数据一定是其最有价值的部分。而员工往往能够很轻易地获取到一些私密的内部数据。在黑市上,个人的姓名、手机号和住址等信息,都能够以每条几毛甚至是几块的价格进行交易。除此之外,竞争对手之间,也很乐意出高价来收购对方的商业机密。

  • 欺诈。最典型的就是“吃回扣”,也就是利用公司采购流程的漏洞来获得非法收益。比如,一个和电商有关的欺诈行为,就是员工给自己发放内部网站的高额优惠券。

  • 贪污。采购投标、拉拢客户这些环节,都极容易出现贪污现象。

第二个出发点,我认为可能是员工出于对公司的不满而实施的报复行为。

第三个出发点就是跳槽。说白了,就是跳槽后的员工,以原公司的核心数据为资本,服务下一家公司。

第四个是商业间谍。这些间谍会为了原始公司的利益打入对手公司的内部。这样的员工一开始就是怀揣着某种目的进入公司的。除此之外,一些黑灰产的从业人员也可能为了窃取某个公司的数据,去应聘这个公司。

第五个其实和利益就没有直接关系了,只是员工为了满足自己想要炫耀的心理,对外泄漏信息。

如何防止内部员工泄漏机密?

在数据安全上,我们能做到的防护其实十分有限。因为数据安全所面临的威胁,不仅复杂度很高,而且隐蔽性极强。所以,我们只能通过各种手段,尽可能地降低数据安全带来的影响。下面,我总结了几个可行的方法和手段。

最直接的方式就是背调。背调是公司用来评判人品的一个直接方式。公司通过对员工过往工作行为和资历的调查,就能够看出员工是否值得信任。但我们不得不承认,一个公司在背调时,能够获取到的信息十分有限,根本没有办法和公安、政府相比。

DLP(Data leakage prevention,数据泄漏防护系统)应该是目前数据安全中,最基础也是最重要的技术防护手段之一了。从原理上来说,DLP 就是监控公司内部所有的数据流动,对数据的内容、类型和流向等进行统计和分析。不过,目前的 DLP 产品,更多的是关注员工个人设备中的数据流动。这主要是因为相比于服务器,个人设备的使用范围更广,不容易控制。而且,服务器的数据流动太大,监控成本也过高。

那 DLP 是如何监控数据流动的呢?一般情况下,公司在部署了 DLP 产品之后,会强制员工在电脑上安装一个 DLP 的终端。公司会通过这个终端,监控员工设备中的各种数据流动。

另外,公司还可以对员工的行为进行异常检测。想要对员工的行为进行异常检测,公司需要先对各类员工的行为进行采集和数据分析,然后制定对应的规则和模型,从而区分员工的正常行为和异常行为。

最后,公司还可以制定相应的规章制度,对破坏公司利益的员工进行处罚和公示,这些都能够对员工产生威慑作用,从意识和心理上阻止员工泄密。

总结

关于数据安全的防护,我们主要是站在企业的角度来讨论的。但是这些违法事件的发生,还是给我们自己“敲响了一个警钟”。提醒我们要坚守自己的道德底线,不去做违法的事情。

思考题

最后,还是给你留一道思考题。你见过哪些泄密行为?这些行为对被泄密的公司产生了什么影响?如果可以的话,你可以讲讲,你们公司是如何防止员工泄密的。

阿里巴巴公司根据截图查到泄露信息的具体员工的技术是什么? https://daily.zhihu.com/story/8812028

作者回复: 可以了解一下图片水印的技术,可以将内部邮件、wiki、钉钉等软件内的图片甚至页面本身,加上水印,水印跟当前登录的用户作关联,就可以查出来了。不过据我了解的,目前图片的水印技术,除非是明显的加在图片背景中,否则各类隐藏式的水印,基本拍张照片,就都没了。

加餐2 | 前端安全:如何打造一个可信的前端环境?

什么是混淆技术?

黑客攻击前端的过程:黑客通过分析前端代码,来篡改前端逻辑,实现带有想要功能的前端应用。那有没有一种方法,无法让黑客在前端代码中分析出有效信息呢?答案就是混淆

安全中通常不存在理想状态。我们最需要做的,就是不断地升级对抗,来接近这个理想的目标。

刚才我们说的是混淆技术可以实现的结果,那混淆技术究竟是什么呢?在不同的语言和环境(如:Android 、iOS 和 Web)中,混淆技术都是相对独立的。尽管混淆技术相对独立,但我还是希望,你可以通过理解一门语言的混淆技术和思路,做到“一通百通”。我也希望能够更好地启发你去思考,如何去做好前端安全。接下来,我就以 JavaScript 为例,带你梳理混淆的常见技术和思路。

1. 清晰代码无序化

在 JavaScript 中,空格、换行、缩进这些内容,只是为了让代码看起来更清晰。所以,这些对代码没有影响,只是便于开发人员查看的内容,完全可以去除。把代码压缩成一行后,黑客想要阅读就已经比较吃力。在此基础上,我们还可以让它变得更“难看”。实际上,JavaScript 中的方法名和变量名也不影响逻辑执行,只是开发人员用来表示方法和变量的含义,完全可以用没有意义的随机字符替代。

2. 简单逻辑复杂化

是不是能够让原本简单的代码变得复杂呢?实现方法有很多种,我们先来看最简单的一种:加入无意义的代码。

3. 固定字符动态化

既然关键字符串“存在”于代码中就不安全,那有没有方法可以让关键字符串“消失”呢?我们可以通过加入一些逻辑,让这些关键字符串只有在实际运行的时候,才会被计算出来。

最简单、最直接的思路就是,我们可以将关键字符串改成多个字符串拼接的形式。

但是,这种简单分割字符串的方式很容易被发现。所以,我们可以将这些字符串从它原本的位置拿出来,通过更复杂的方法(如:数组的引用、方法的调用等)来获取。

4. 反调试

前面 3 种技术都是直接对源码进行混淆。但是,大多数情况下,黑客在分析代码的时候,不是直接阅读源码,而是通过调试的方法在 JavaScript 代码运行过程中,获取实际的代码执行方向以及变量的值。

因此,为了保护前端安全,我们要采用反调试技术。在 JavaScript 中,主要有两种方法可以对抗调试:域名锁定和无限断点。

第一种是域名锁定。

  • 当黑客来想要分析一个网页的时候,通常会将代码下载下来放到本地运行。但是,我们更希望这个分析过程仍然发生在当前的域名下,这样我们就能够通过请求去分析黑客到底干了什么。因此,我们可以在 JavaScript 中加入一段域名判断的逻辑。这样一来,当 JavaScript 运行的环境是 localhost(本地主机)域名,或者其他未知的域名时,JavaScript 就会产生错误,黑客就无法正常运行下载后的 JavaScript 文件了。

第二种是无线断点。

在调式技术中,我们最常用到的功能就是断点。通过设置断点,我们可以让程序停留在某一个代码或者指令上,方便查看停留的这个时刻中各个变量的具体值是什么。

在 JavaScript 中,debugger 指令就是用来添加断点的。所以,在反调试的时候,我们可以在 JavaScript 中开启一个单独的线程,来循环调用 debugger。这样一来,如果黑客进入到调试模式,就会不断地停滞在无意义的断点处,从而无法正常调试。在正常运行 JavaScript 的时候,debugger 不会生效,也就不会影响用户的正常使用。

除此之外,针对提供了额外的 JavaScript 接口的浏览器(比如 Chrome),我们可以通过在 JavaScript 中检测开发者工具是否开启等特征,来实现反调试。开发者工具是开发人员在调试过程中必须使用的工具,一旦开启,基本就代表已经进入调试状态了。因此,我们可以在检测到开发者工具开启的时候,不去执行正常的 JavaScript 逻辑,这样就能够起到反调试的作用了。

说完了这 4 种混淆技术,我要提醒你一点。这些混淆技术不是独立使用的,而应该是组合使用的。完整的混淆流程应该是这样的:

  • 首先,我们可以在原有的 JavaScript 代码中加入反调试的逻辑;

  • 然后,通过简单逻辑复杂化和固定字符动态化的方法,隐藏原有的逻辑和反调试的逻辑;

  • 最后,通过清晰代码无序化,将所有的额外信息进行剔除,最终将代码变成了压缩成一行的 JavaScript 文件。

混淆技术有什么负面影响?

混淆技术改变了前端代码,就不可避免会影响前端的功能。这也是混淆始终达不到理想状态的一个主要原因。对于 JavaScript 的混淆来说,它的负面影响主要包括三个方面:增加体积、影响性能无法分析报错

混淆带来的最直接影响就是增加代码体积

混淆还会增加额外的执行逻辑,降低代码执行的速度影响性能

混淆后的代码,不仅黑客无法阅读,开发自己其实也无法阅读

混淆不可能让代码变得完全不可读

总结

我们主要以 JavaScript 为例,梳理了混淆的主要技术和思路。虽然通过混淆,我们能大大增加黑客分析前端代码的难度。但是,混淆同样会给我们的正常工作和应用的执行增加难度,带来负面影响。所以,我们在使用混淆技术的时候,必须要经过谨慎地考量和测试。

前端混淆技术

思考题

不同的语言和环境,其混淆的技术和思路都存在各自的特点。你可以试着分析一下,在你熟悉的语言和环境中,有哪些方式可以用来进行代码混淆?

加餐3 | 职业发展:应聘安全工程师,我需要注意什么?

今天以我在面试时看到的一些简历为基础,来和你聊一聊公司在招聘安全人员的时候在意什么?你又需要注意些什么?

安全岗位有哪些?

安全是一个跨度很广的领域。所以,对于一个负责公司安全的中高层领导来说,他们当然需要一个对这些领域有全面认知和理解的人。但是,我们作为一名普通员工,经常只专注于某一个领域或者方向,去深入研究。

虽然在这个课程中,我们一直使用“安全工程师”这个词来指代所有的安全人员,但实际上,不同的公司会根据安全方向的不同,拆分出不同的安全岗位。所以,对于求职者来说,认清自己擅长哪个方向、适合哪个岗位是很重要的。下面,我们先来了解一下,公司中都存在哪些安全岗位。

1.渗透测试和安全运维

在讲 Web 安全的时候,我们介绍了一些常见的攻击方式。那么,如何确保公司开发出来的应用不存在 Web 安全漏洞呢?这就需要渗透测试人员来进行安全测试了。对于渗透测试人员来说,自身的安全攻击水平是其最核心的能力。

在“Linux 系统和应用安全”“安全防御工具”这两个模块中,我们介绍了通过应用自带的安全配置和额外的安全工具,来为公司建立一套安全防御体系的技巧和方法。这些工作通常是交给安全运维人员负责。对于安全运维人员来说,他们必须熟练掌握各类安全知识和工具,及时发现公司存在的安全隐患,并进行修复。

2.业务安全、开发和算法

业务安全算是近几年比较新兴的安全方向。由于业务安全和传统基础安全的差异性较大,因此,业务安全也成为了一个比较独立的岗位。对于业务安全人员来说,他们必须能够了解业务逻辑,掌握黑灰产的攻击方式,这样才能发现产品设计中可能存在的风险,并进行防护。

在安全防护过程中,公司需要从海量的数据中挖掘出异常的攻击行为,这就需要专业的算法人员来提供支持了。因此,公司往往会招聘一些不具备安全基础的开发和算法人员,来为安全人员提供足够的技术支持。

3.安全研究、数据安全、合规审查

基本上,只有公司的安全团队接近上百人的时候,才会对这些领域进行细分。对于小公司来说,更多的还是一人身兼数职。

4.移动安全、AI 安全

部分安全方向需要长期和黑客进行对抗的,比如:移动安全、AI 安全。因此,有的公司会专门招聘安全研究人员对这些领域进行安全研究。对于安全研究人员来说,他们必须具备较高的学术研究能力,才能够在某一个安全领域中深耕,达到提升公司安全实力的目的。

5.数据安全和合规审查人员

数据安全的主要目的在于防止内鬼泄露公司的机密信息,是一个比较特别的方向。因此,如果公司注重对内部数据的安全保护,就会招聘专门的数据安全和合规审查人员,来负责公司数据安全的体系建设。同样的道理,合规专注于研究安全相关法规,让公司在获取和使用用户信息的时候,能够不触犯法律红线。因此,也需要懂得安全法规的人来负责。

安全岗位工作内容和能力要求

面试安全工程师,必备哪些安全能力?

总结一些安全工程师必备的能力,以及我对这些能力的理解。

1. 安全专业背景

安全专业背景很好理解,就是指系统地学习过安全知识。主要包括几种情况:学校是安全专业的、考过安全类的证书和学习过安全类的课程(比如我们的安全专栏)。另外,具体的实践经验不在这个能力的考量范围之内 。但是,我在评价一个应聘者的安全专业背景的时候,不只是看你上过某门课程,而是你必须能够通过学习安全课程,产生对安全的深度思考和理解

2. 攻击渗透能力

攻击渗透能力对实践要求很高。如果你说你只学过攻击渗透方式,对它很感兴趣,就想应聘渗透测试岗位。我个人觉得不可行。因为,想要获得攻击渗透实践的机会实在太多了。

  • 网上大量的练习攻击渗透的教程和平台,比如经典的WebGoat,你可以自己进行大量的练习。

  • 近几年 CTF 比赛在国内举办的频次很高,各类高校和公司都在举办,比如XCTF 联赛。你可以通过不断地参加比赛,掌握更多的渗透测试技巧。

  • 各大互联网公司都成立了应急响应中心,比如微博的WSRC。你可以找一找这些公司应用的安全漏洞,如果成功找到漏洞的话,还能获得相应的奖励。

这三种攻击渗透的实践难度由弱到强,对于应聘者的加分也是由少到多。因此,如果你想要成为一名渗透测试人员,就必须多实践,最好还能够获得一定的成果(比如,CTF 的名次、应急响应中心的排行榜)来证明自己的能力。

3. 开发能力和算法能力

在招聘安全工程师的时候,我会要求应聘者基于自己的能力,去设计一款安全工具。

如果你想应聘渗透测试岗位,那在熟练挖掘各种漏洞的基础上,你能否设计出一个漏洞扫描器?如果你想应聘安全运维岗位,那在快速进行审计发现黑客入侵的基础上,你能否设计出一个 IDS?

当然,这些工具你在网上都能找到开源的版本,比如OpenVAS,而我更关注的是:你的设计是不是基于自己的经验总结构建出来的,是否具有你的个人特色?这些都是我希望应聘者能够通过自我思考和总结产出的结果。

但是,我更希望这些开发人员能够懂安全,成为真正意义上的安全开发工程师。

如果具备基础的安全知识,那开发人员就不只局限于表层工具的开发,也可以参与到安全专业类工具的开发中。这对公司的整体安全防护建设,能够起到更大的促进作用。

4. 安全研究能力

很多安全专业的研究生或者博士,都会跟随导师在某个安全方向上进行研究。而学术上的安全研究能力,是安全研究人员的核心能力。所以,对于其他安全岗位来说,具备研究能力也是一个不错的加分项。我们也很容易就能评价出安全研究能力的高低,可以通过对某个安全方向的知识深度进行评判,还有对具体的论文等成果进行考量。

总结

只有目标明确了,你才知道自己应该提升哪些方面的安全能力。在面试的过程中,明确的目标也是一个很好的加分项。

另外,我希望通过讲解这些必备的安全能力,帮助你认清自己的短板,有目标的去提升某一项安全技能。在面试中,让面试官能够认可你的安全能力,避免因为找不到方向而做一些无用功。

思考题

假设你要去应聘成为一名安全工程师,那么在面试环节中,你会怎样做自我介绍?你会怎么展示你的工作目标和对应的安全能力呢?

加餐4 | 个人成长:学习安全,哪些资源我必须要知道?

《白帽子讲 Web 安全》是一本入门教程,那《黑客攻防技术宝典》就是一本攻击手册。《Metasploit 渗透测试指南

有关企业安全的书,我读过比较好的有:赵彦的《互联网企业安全高级指南》、聂君的《企业安全建设指南》、石祖文的《大型互联网企业安全架构

WebGoat是最权威的 Web 安全组织 OWASP 提供的一个 Web 安全练习平台,它几乎涵盖了全部的 Web 安全漏洞的讲解和练习内容。

Pwnable.kr是我体验过的免费的攻击渗透平台中最好用的一个。Pwnable.kr 中的题目更偏向系统和应用层的攻击渗透(这些都是权限提升过程中的常见手段),适合用来进行攻击渗透的进阶训练。

目前,国内的XCTF 联赛最为知名。你可以独自作战,也可以叫上几个朋友组团参赛。

以我了解到的现状,这些证书对应聘安全工作不会有太大的帮助。但我认为,这些证书最大的意义就在于,它能够推动你对安全知识体系进行补充和整理。

可以考的证书

作者回复: 这些证书对筛简历可能还是有用。但实际面试和评价的时候,没人会把这一项考虑进来。至少互联网行业内是这样,国企或者金融相关的,可能会有这方面政策要求,也许是个加分项。

推荐 3 个比较常用的资讯网站,FreeBuf、安全客和安全牛。

总结

我觉得无论跟随哪个课程进行学习,都不可能学完所有的安全知识。所以,在学习安全的路上,自学是我们不断精进的主要方式

我的经验是:书籍能够帮助你入门,并且指导你进行防御建设;实战演练是掌握安全渗透技巧的唯一途径;安全证书一方面能帮助你对整体的安全知识进行全盘梳理,另一方面也是你个人安全能力的一个证明;安全资讯是帮助你掌握安全动态,发现新知识点的一个不错途径。

想要学好安全,没有什么捷径可以走,唯有多练多看。因此,对于安全的学习,我不建议你在前期花过多的时间去做基础知识储备,那容易变成纸上谈兵。我更建议的是,当有了一定安全基础之后,你要找机会尽快投入到实际的演练或者工作中。在实践的过程中,你再对遇到的困难或者知识盲区进行有针对性的学习。另外,在积累实际经验的过程中,周期性的自我总结,以及对知识进行系统梳理,也能很好地推动我们的个人成长。

思考题

最后,你可以在留言区讲一讲你的自学心得,分享一些你的学习资源

加餐5 | 安全新技术:IoT、IPv6、区块链中的安全新问题

独特的 IoT 安全

IoT(Internet of Things,物联网)

对比于当前的网络环境,IoT 的网络主要有以下几个特点:

  • 设备更多:每一件小的物品都有可能成为联入互联网的设备

  • 设备性能更低:受限于体积和供电量,单台设备能够搭载的硬件配置都不高

  • 更加开放:由于设备的数量和类型众多,无法统一标准,因此 IoT 的 网络环境也更加开放

我认为最明显的问题就是认证更加复杂了。

目前小米等 IoT 厂商的解决方案是,先让手机直接控制设备,配置好 WiFI 密码后,再让设备连入网络。

但是,这其实又引发了一个新的问题,如何确认是你本人在控制设备,而不是黑客呢?针对这个问题,现在也有对应的解决方案,那就是在短时间内开放设备的控制权限,限制手机在这个时间内完成对设备的控制。

如何确保 IoT 中设备与网络、设备与设备之间的通信是可信的,是未来认证技术需要面临的主要挑战之一。

其次,我认为物理攻击会越来越流行。

随着 IoT 越来越小、越来越智能,和我们的联系越来越紧密,物理攻击的难度也变得越来越低。

如何对物理攻击进行有效的防控,也是未来安全中需要解决的主要挑战之一。

除了带来新的安全挑战,IoT 能够造成的安全威胁也变得更加复杂了

目前来说,黑客利用 IoT 设备发起的最主要的攻击还是 DDoS 攻击,即黑客利用海量的 IoT 设备向目标服务器发送巨大的网络流量,导致服务器无法响应正常请求。

如何保护 IoT 设备免受黑客的攻击,同样会成为未来安全的主要挑战之一。

IPv6 对安全的影响

因为 IPv4 的地址空间短缺问题,IPv6 是国家重点推进的一个技术方向。

IPv6 和 IPv4 相比最大区别就是 IP 地址变得非常庞大了。那么,庞大的 IP 地址对于安全来说,又意味着什么呢?

我认为对于黑客来说,最大的影响就是网络扫描不再可能

我们知道,找到攻击目标是黑客发起攻击的第一步。因此,很多黑客会通过扫描网络来发现目标。目前,性能最优的扫描工具是Masscan,它能够在 5 分钟内扫遍全部 IPv4 的地址空间。

而 IPv6 的地址空间是 IPv4 的 2^96 倍,黑客想要利用现有的扫描工具快速遍历 IPv6 的地址空间,显然是不可能的。因此,黑客就只能通过其他方式去精准定位目标了。

除了对黑客有影响以外,庞大的 IP 地址对公司安全来说,也同样是一种负担

IP 地址变多就意味着黑客手中的 IP 资源变多了,同时,IPv6 的高变化频率还会让同一个设备的 IP 经常性的发生变化。因此,使用了 IPv6 之后,我们就很难利用黑名单对 IP 进行标记和处罚了。

IPv6 的复用性是否会比 IPv4 更低

IPv4 由于地址匮乏,有很高的复用性(一个学校可能都在共用一个 IP 地址),这让我们很难根据 IP 去定位到一个具体的位置或者人。

而 IPv6 的地址空间是足够的(每一粒沙子都能分配到一个 IP 地址),因此,IP 复用就不再是一个刚需了。所以,如果 IPv6 的复用性远低于 IPv4 的话,就能让 IP 的定位变得更准确。那么对于安全工作来说,想要找到黑客也会更加容易。

区块链中的安全问题

目前,区块链最成功的应用形式,就是以比特币为代表的各类虚拟货币。那么,比特币和区块链的安全性如何呢?它们又面临什么样的安全威胁呢?

区块链的思想是去中心化,即将数据和算力分散到每一个小的计算节点中,最终,以少数服从多数的形式来完成数据的计算和存储。这实际上是一种对完整性的保障。

在比特币中,因为不存在中心机构,每个用户的余额由所有人共同保管,因此没有任何一个节点可以实现篡改。

但是,这种近乎完美的完整性保障,是通过牺牲机密性来完成的。也就是说,在支付宝中,你无法知道其他用户的余额,但是在比特币中,每一笔交易和每一个用户的余额都是公开的信息,因此比特币不提供任何针对机密性的保护措施(比如,你可以在blockchain看到所有的比特币信息)。

比特币是目前黑客们主要使用的货币之一。其原因在于,它是匿名的(注意:匿名不是机密性,匿名是指你无法通过比特币的账号,关联到某个具体的人)。这也就保证了,即使警方知道了黑客的账户,也没办法抓到黑客。而且,由于比特币的去中心化,警方也没办法封停黑客的账户,追回被盗的比特币。

所以,比特币这样一种去中心化且匿名的货币体系,既不保险,也不利于政府的管控,因此国内对于以区块链为基础的电子货币落地,始终不认可。

总结

新的技术都具备其独特的应用场景,也都带有独特的安全问题。这些问题既可能是这些技术本身所存在的一些缺陷,也可能是对已有的安全防御工作产生的威胁。

我们不仅要对这些新技术进行持续的关注,还要思考它们会产生的新安全需求,然后去学习对应的新知识。这也是安全人员提升自我价值,保持思维活力的有效手段。

思考题

除了我们今天讲的这三种技术,你还接触过哪些新的技术呢?不妨和我的一样,把你对这些新技术的安全思考都写下来。

结束语

自我提升的方法只有两个:实战和沟通。

针对网络安全的实战演练,我在加餐 4中整理了一些渗透实战平台,你可以进行有针对性的训练。

“圈子”文化形成的原因有很多,我认为其中比较重要的一个原因,就是公司和黑客之间的攻防对抗严重不对等。作为防御方的安全人员,我们需要关注所有的威胁点,而且是长期的关注,因此我们的精力常常会受到限制,很难做到面面俱到。而作为攻击方的黑客,只需要在一段时间内集中攻击某个点,就能够取得想要的结果。

这种攻防不对等推动着各个公司的安全团队形成了联盟,也就是安全圈。在开发行业中,通过阅读资料、参加分享会等,我们能够学习到很多实用的知识和技巧。但是在安全行业中,单向的学习并不够,你只有和同行深入沟通,才能够真正掌握安全的精髓。因此,我鼓励你多和同行沟通,一起探讨你们在安全工作中的经验和思考,共同推动安全的发展。

讲师回复:

通常来说,web安全工程师的加分项主要就是ctf了,最好能够自己做一些扫描或者防御类的小工具。

-------------  Fin    Thanks for reading!  -------------

本文标题:安全攻防学习笔记

文章作者:TesterCC

发布时间:2020年07月07日 - 21:07

最后更新:2020年07月07日 - 22:07

原始链接:http://blog.fullstackpentest.com/security-attack-and-defense-notes.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。