以下文章来源于橘长说Java ,作者AFlymamba
橘长
读完需要5分钟
速读仅需 2 分钟
大家好,我是橘长,一个 Java 工程师。
前段时间团队帮客户做的一个项目被一家安全公司扫描出了一些安全漏洞,基于这次事件和大家分享橘长对安全扫描的一些相关思考。
/ 一、漏洞事件详细回顾 /
我们团队主要是负责 toB 项目交付的,正常来说当我们内部验收没啥问题就会发访问入口链接给客户,因为最终项目是依托在甲方应用生态内部的,简单理解就是银行 app 内部的一个板块。
甲方也有他们的科技团队,对任何第三方给的链接持有不可信态度很正常,所以一般他们会找专门的安全机构,先对第三方做一些安全检查,比如漏洞扫描,没啥问题了才进入到业务验收流程。
这次甲方找了 h3c 这家公司,反馈给我们的安全报告有涉及运维层面、前端层面、服务端层面,因为自身是服务端开发,在这里简单举个服务端的案例即可,但是其他的内容建议各位要是遇到了都看看,不要只局限在后端那一亩三分地。
对方抓了我们服务端两个漏洞,一个漏洞是伪造 http 请求头部中的 origin 属性,另外一个漏洞是权益类接口没校验目标用户。
1
一)伪造 http 头部的 origin 属性
cors 跨域资源共享那块 Access-Control-Allow-Origin(标识允许哪个域的请求)这里配置出了问题。我们此前做的配置是 allowedOrigin("*"),相当于允许所有来源的请求都能被服务端处理,对方就抓住这个点,把 http header 头部的 origin 替换成 http://www.baidu.com 等对服务端发起请求,结果服务端通过,然后就认定是漏洞。
2
二)权益类接口没校验目标用户
一般来说只能让符合资格的用户去访问我们的权益类接口,这块很好解决,加个目标用户注解即可处理,而且这个问题是能在测试同事层面就发现的。
这个漏洞自己认为其实应该是后端同事太过信任前端导致的,一般我们做活动类,都会在首页接口返回一个字段告知前端说这个用户是否为目标用户,便于前端做一些静态判断,服务端同事很可能认为它和前端是一对一的关系,其实正确应该是一对多,服务端 api 即可以接收来自 web 端的请求,也可以接收来自移动端。
/ 二、通过这件事的启发 /
3
一)对我的启发
3.1
1、让你知道你有很多你所不知道的
比方这次基于 cors 修改 http header 的 origin 属性是漏洞入口,橘长对网络这块确实不熟悉,MDN 的 Http 文档几乎没怎么看过,大学时期计算机网络这块也忘得差不多了,毕业之后基本上不做底层很少涉及网络这块具体的。
看着漏洞描述文档,一堆的问题抛给自己,cors 是啥?如何和 Java Web 的三大组件:Servlet、Filter、Listener 关联?http header 头有哪些属性?allowedOrigin 到底指的是什么?
相当于直接被外界泼了桶冷水,冷冰冰很现实的告诉自己:你并没有大家所说的那么厉害,世界是丰富的,存在大量你还不知道的内容?不能沉浸在那些夸赞与以往的成就里面,更何况你的以往并没什么特别好的成绩。
承认自己不足或退步是件好事,而且是件长期值得做的事,同时也相当于提供了一个时机,你是时候重视网络了,是时候去补这门计算机基础课了。
3.2
2、享受能让自己不断提高的过程
为了解决掉这些漏洞,需要去定位,需要和 h3c 的工程师沟通交流,听听他们给出的解决方案,如果觉得逻辑清晰、技术扎实,那就欣赏对方,加上微信。
此外你还要去翻阅其他资料,找比你更厉害的人请教,看别人是如何一步一步解决的,通过跟随这个过程去学习,这类机会多罕见,遇到一次就得逮住一次,享受这一次,让自己潜移默化的成长起来,补上这些短板。
4
二)对团队而言
回到开头,橘长说建议大家不要只关注后端那一亩三分地,这次安全扫描同时暴露了运维层面和前端都有或多或少的问题,前端 nginx 配置的相关问题,前端 csp(内容安全策略)问题等。
对团队来说这是好事,能发现团队目前技术存在的各种问题更有利于团队建设和发展。
4.1
1、适当加强安全建设
去做安全建设就意味着成本,但对于创业型和小型公司来说这块基本上不会去做,当出了事情的时候才会去紧急修复即可。而且最近在视频号刷到乔新亮老师的一个采访视频,里面讲到你需要去思考自己是处于一个 technical 公司还是在 commercial,具体这块橘长目前思考和涉猎不多,未来等我觉得合适了就会写写我的思考。
漏洞扫描直接把 IT 部门前后端运维的问题都暴露了不少出来,好事,这绝对是好的,业务层面的问题测试同事能把控,安全漏洞这块确实得专业的人才能意识到,自身待过的公司几乎没有安全同事,像互动营销活动加个防水墙、阿里云的一些组件保护机制,几乎其他没了。
4.2
2、建设更团结、更有战斗力的团队
解决漏洞不是一个人的事,而是整个团队的事,通过这么几次攻防对抗演练,整体团队水平会在潜移默化中被提升起来,如果在攻防之后再来场聚会,感觉团队氛围很容易提升起来。
想起了《左耳听风》还是 coolshell 上耗子叔分享 Amazon 的技术团队,有一个专门的搞事情部门,时不时来点攻击,来点突发情况,考验团队的 on call 应变能力,感兴趣的可以自行 Google。
/ 三、总结 /
以上就是橘长对网络安全的一些回顾与思考,不要惧怕遇到问题,要喜欢上这种问题来找你的感觉,解决了那就是成长。