50

那些需要自己开发的安全需求(服务端)

 5 years ago
source link: http://www.sayhiai.com/index.php/archives/111/?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

最近在实施App安全方面的方案,下面是一些思考。有些安全方面的产品需要购买,本文中的却要自己集成。需要开发的组件很多,所以 依个人经验 ,简单做了下分层,不包括App端和主机环境。

jUBzI36.png!web

数据处理

http协议简单易懂、使用方便,我们大多数网络应用都是基于它开发的。数据展示,移动互联网已经占据了大量市场,对于App端开发,已经进入了混合协议的时代。这就是通讯层,数据传输的通道。

请求可能来自这些地方:

一、APP。 某些移动应用

二、Web端。 大多数网页请求或者H5

三、小程序。 被封装的各种调用(大多数要遵循平台开发方式)

四、开放平台。 各种SASS、PASS。

通讯层的破解难度是:

Socket(自有二进制协议) > WebSocket(wss、ws等) > Https > Http。

通讯层的加密主要是提高攻击者的分析成本,并不能够防御所有的攻击。通讯层独立的好处是可以随时进行交互协议的切换或者升级,并不影响下方的业务与策略。

加密是由调用者和服务者进行约定的一个算法层。目前,有对称加密与非对称加密之分。

对称加密是指维护一个密钥,解秘方即可通过密钥还原出被保护的数据。比较流行的对称加密算法有

DES
3DES
AES

对称加密的密钥管理比较难,容易被破解,更换起来成本也比较大,但它的速度比非对称加密快几个数量级。

相对应的,非对称加密是指加密密钥和解密密钥不同的算法。安全性相对较高,但运行速度比较低。常见的非对称加密有:

RSA(耳熟能详)
DSA
ECC

这里插个有趣的事情。某个重要的root私钥,被倒入到一个专门的小型设备里。此设备被放入保险箱,保险箱需要四个不同的人的密码才能打开。安全级别非常高。

而我们常说的MD5、SHA1等,并不属于加密算法。

通过对传输的信息进行验证,我们就能够判断信息是否被篡改过。有些信息,比如密码,即使是简单的MD5,也比将原文保存下来好得多。

虽然DSA、RSA等,能够对信息进行数字签名,但我们常用还是一些摘要算法,也叫做Hash算法。

摘要算法不能对数据进行逆向解密,通常通过加盐的方式进行摘要保护。常见的摘要算法有:

MD5
SHA1
Bcrypt

值得一提的是Bcrypt,目前应用比较广泛。它的特点是即使是对相同的信息进行摘要,也会生成不同的内容,隐蔽性更强。

它的加密结果类似这种,你一定见过:

$2a$10$iRdNmYoINR8QqynemTsP2OzFtM7N5pFPoBFuzAtvR6YBtov4gRt7e

使用上,有些系统喜欢使用多重的摘要算法进行计算,安全性更高一些。但一旦被猜解,就形同虚设。

多重hash:md5(md5(sha1(str))).

业务防护

但数据还是能够伪造。业务层需要对传入的参数进行验证,进行真正业务意义上的判断。比如对某些余额操作,使用 MVCC+CAS 进行保护等。

请求大部分应该是幂等的,不能够重入。伪造的信息应该能够通过自定义的规则被识别。

扫描工具会扫描一些类似XXE、Struts漏洞之类的,这里是很多人的天堂。这种,建议还是买服务吧。

还有最后一道,风控系统。虽然重要,但有能力搞的公司很少,包括一些P2P系统,那就让子弹多飞一会吧。

我觉得坑多多的优惠券就是业务防护的范畴。当然还有银行这种,事后跨省追捕的,属于武装业务防护。

同一类业务交互,一个http请求中既带有requestbody,又有request params;另一个请求却变成了post请求。后端的处理变来变去,就复杂了很多,也不利于排查问题。

此类问题还有传输了大量用不到的字段,信息嵌套层次过深,错误码紊乱等。许多故障最后的原因让人欲哭无泪。

在通讯层上,某些规范是非常重要的,值得花心思进行设计。

开发模式

开发模式是你给自己留的后门。

经过各种加密,验签,重入防护等组件的保护,你的系统安全性可能已经很高了。高到连你自己也被防护住了。

当你需要人工构造一些请求的时候,就会知道它的威力。通过某些开关或者灰度,可以让你略过某些环节,直接开展对主因的分析,提高验证的效率。

详尽的日志是系统遇到问题时强有力的帮手,当业务流程分支多而长的时候,调用链能显著加快问题的处理速度。在设计伊始,便要考虑对这些功能的集成与配置,以便对关键环节进行调优。

安全很重要,售卖靠忽悠。但是不买也是要受伤害的,还是花钱。买平安。

Ib2EVf7.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK