初苗:
此文可作为闲暇初探WEB安全的流水,也可以作为本人在学习安全的过程中阶段性笔记。
当然此文的目的并不限于提高安全常识,相比来说或许提高安全意识更为重要,然而作为一名软件开发工程师,因为相关原因,我们常常会忽视开发过程中的vulnerability(漏洞)。恰恰这些漏洞(当然这里不限于code vulnerability,因为很多时候业务方面的改造也有助于软件各方面的优化)需要相关人员自己买单。
同事,包括朋友在内开发过程当中或许没有考虑到必要性的一些选项 ,暗暗的给自己埋了一个”定时炸弹“,或许正常情况下,大多数时候都没有问题。就好像前段时间我有一个朋友和我说他很久以前写的代码报错了,之前充分测试都没有问题(内容大概是自定义对象没有覆写equals method,之后两个相同值对象调用Arraylist.contains() 方法返回false。再比如团队有开发对empty 和blank 不是很理解,集合校验只校验集合内部元素是否为空等等,)。当然这些东西只是细节,但是在相对时间压缩的情况下要考虑到这些还是需要一定的耐心和经验。
My understanding of vulnerability :
业务上讲漏洞是对应业务流程的不完整或者说缺陷,但是并不代表没达到对应的业务线。说白了就是由于失误对应考虑的module没有考虑完整。技术上漏洞理解就相对简单了,例如校验不完整,不符合开发规范,不符合开发流程所导致的BUG(例如分支管理不规范导致的额外时间消耗等),
没有借鉴前人的开发习惯(这里不限于EFFECTIVE JAVA)等,都有可能导致一些问题,这些问题往往都需要花时间去解决优化,在软件MODE设计里面也有很多原则,我想目的无外乎是为了节约开发时间而做准备的。
Security summary:
首先从我的认知说起,话说研发起于需求,那么我也不例外,很负责的说我对安全的初始化认知源于对vulnerability scan的需求。
对于github 大家耳熟能详。我想安全这块是否也会有开源社区,显然互联网并没有让我失望. OWASP(Open Web Application Security Project) 就是这样的项目,由The OWASP Foundation维护,类似Apache foundation
官网如下:
这里可以了解到一些常用的开源漏洞资源,为开源而生。
这里不深究安全特性,只结合
以下内容几乎围绕这个项目展开。
了解之前我认为有必要先了解一下安全的基础知识。
Web security :
说到WEB 安全,我们很多人第一反映可能是XSS | CSRF |SQL 注入等,当然把这些作为基础也有他的道理,为何? 当我们深入研究WEB安全的时候会发现很多攻击都基于,例如XSRF(csrf + XSS), XSIO(CSIO + XSS图片覆盖) ClickJacking(触屏劫持中的小程序链接注入)等等。
为什么说到安全人人有责,很多不可靠的非基础性操作都可能导致无法挽回的损失(例如弱密码管理,密钥管理不当等),再比如文件系统安全等,这里不深究安全特性,只结合特性协助描述。
XSS: Cross site script
个人理解:
1 反射型XSS : 通过与输入可执行脚本直接在浏览器呈现执行效果,也叫做non-persistent xss
2 persistent-xss : 脚本与后台服务器交互最后又程序的运行把脚本呈现在浏览器一种攻击方式
3 Dom-based-xss : 改变页面DOM树结构恶意强行插入可执行脚本,可以看成是第一种的高级版本
大体上分为以上三类。
防范的思路如下:
输入检查: 对输入的文本做XSS过滤,以去除敏感标签,这里需要注意不要暴力转义特殊符号有可能改变用户本来的意思例如,1 + 1 < 3 如果暴力去除或者过滤<显然不合适.推荐OWASP 的Anti-Samy
输出检查:对有可能产生XSS的地方做encode ,推荐OWAPS ESAPI 的javascriptEncode方法。
当然这里还涉及到Dom-based-xss,这里可能需要考虑到转码,HTML输出形式和输出目的地等比较复杂,对应不不同的输出方式分别处理即可,需要考虑各种场景与细节。
CSRF : Cross-site request forgery
一个金典的案例:攻击者通过先诱导用户登录拿到document.cookie,然后 诱导用户点击攻击请求,附带注入请求伪造参数(来自iframe标签的POST method) 这个时候如果服务端没有任何处理,将会导致请求成功,怎么避免呢? 金典案例肯定有金典的处理方式,anti-token的方式,试想在CSRF的场景下攻击者是拿不到COOKIE的,更读不到请求头信息,如果服务端每次对于敏感请求都有攻击者无法伪造或者无法获取的param,那么伪造将无法实施。
这里涉及到伪造的含义,换句话说攻击者拿不到,另外也要保证对方很难通过某种手段猜测,后文涉及到密码安全的时候会详细说明猜测的韵味。
ClickJacking :
官方解释: 点击劫持是一种视觉上欺骗手段,攻击者使用一个半透明或者透明的iframe覆盖在网页上,然后诱导用户操作这里描述两个特点:
1 与 CSRF的区别我认为在于“与用户交互这种行为”是否影响到攻击的成败
2 这种攻击方式很大可能上是以XSS 为攻击基础的
Password security :
密码安全这里说说我的想法:
1 首先密码加密当然是很常见的套路了,但是涉及到暴力破解,包括商业反破解非对称加密算法的机构还是会暴露一些漏洞的,加入公司自己的加密密钥或者salt等涉及到rainbow table这里不详述
2 密码安全涉及到认证,授权,所以一个不失礼貌的建议是认证授权可以作为一个公关
3 登录密码最为常见,就会涉及到客户端防止暴力尝试破解措施,例如验证码等
4 密码加密算法的使用正确使用等
基础到这里差不多了,当然安全肯定不只这些,例如DDOS, 本地木马键盘窃取userInfo,网路挂马,网络嗅探,文件上传木马,XSS钓鱼攻击等等,攻击方式现以层出不穷,需要对应安全维护人员永不停歇的探索。
Vulnerability dependency check:
包括之前有提到过的blackduck等属于非开源收费项目,这里介绍的是开源产品,当然产品有很多种,dependency check属于NVD(美国国家漏洞数据中心)孵化项目。
话不多说,我们看看怎么用
之前先了解下几个名词:
CVE:
我的理解字典描述结合,相当与MAP里面的entry 描述一个对,至于对的细节不涉及
CPE:
我的理解单个漏洞描述对的详细解释,就好像mulimap里面的一个KEY的多个VALUE
每一个CPE就是一个VALUE 对应一个漏洞描述CVE的一个详细解释。
NVD:
国家数据库
NIST:
看名字就应该知道了
翻译为:国家科学技术研究院
流程:
我用的是MAVEN ,他提供了很多种方式例如
以eureka-cloud 为例
然后mvn clean install -DskipTests -U
第一次可能需要7分钟左右
根据官方会生成一个.html文件
报告生成如下:
当然这只是最基础的操作,具体需要查看官网资料描述具体漏洞原因,以及第三方建议等
Brainstorming :
之前听说公司服务器遭到攻击由于jenkins 漏洞导致。
这里给出几个参考
也就是说Jenkins对应版本是有漏洞的,TOP 20 里面描述的三个关于Jenkins 的
都是密码未加密保存等等
以上是漏洞细节版本,CPE有说过
PS: 关于jenkins的安全截至19-4-3号收集(来自NVD)的安全建议:
https://jenkins.io/security/advisory/2019-04-03/#SECURITY-952
WEB安全相当于一个新大陆,怎么用的好得看我们如何去使用,希望对初入web security region 的 同学有帮助~