从我最开始学习安全接触的就是 web 安全相关,当时的自己完全不明白学习的意义是什么,只知道学习了 web 安全可以去网络上寻找存在漏洞的应用,拿到 webshell、然后提升权限到系统最高权限,这一个流程下来基本就达到了顶峰,在突破的时候是最有成就感的,我相信有非常多的同行是在这样的情况下入行的。web 安全就是应用安全中的一部分。
说到应用,什么是应用?百度百科上说的一句 适应需要,以供使用 ,在现在的互联网时代,所有的软件都可以叫应用,他们的产生是为了满足我们的日常需求,方便我们的衣食住行,多年前是 PC 互联网的时代,近几年进入了移动互联网时代,未来会是物联网时代、人工智能的时代 等等,随着科技的进步,安全的需求也在不断发生着变化,近几年做渗透的朋友越来越感觉到难做,web 的安全漏洞越来越少,这可以说是时代的进步、安全意识的提升、代码安全性增加、应用主战场的变化 等等一系列因素的结果,这对于安全行业来说是好事,整体安全性在不断提升,侧面说明我们安全从业人员的价值体现。
对于应用产生的整个生命周期来讲,考虑安全越早越好,早期的应用主要是为了实现功能、快速上线,互联网行业迭代更新非常快,时间就是竞争力,只有在业务因为安全问题而出现重大损失的时候才专门去招人或者购买安全服务进行及时止损,在上线之前没有考虑安全,带洞上线,从而导致大量的用户隐私泄漏,最终的受害者还是使用应用的用户,经过多年安全人员的努力,企业对于安全也慢慢重视起来,那么如何做好应用安全呢?
SDLC 大家都听过,翻译过来就是软件开发生命周期,是为了规范开发的流程、提升开发效率、增强代码质量,做到闭环,SDLC 包含五个阶段:需求分析、设计、编码、测试、发布,如图:
但这里并没有把安全考虑进去,我们是否可以将安全贯穿到整个软件开发的生命周期呢?如何做?请看下图:
- 在需求阶段做风险评估,提前将风险识别出来,作为安全的需求提交给研发,不只是功能上的,还包括一些架构不合理的地方,这对安全人员对能力要求是非常高的;
- 在设计阶段做威胁建模、安全参与进行设计 review,指出设计存在的安全威胁,共同完成安全的设计方案;
- 在开发阶段,要进行代码 review,提前做代码审计通过人工或者自动化的方式,这里对安全专业人才的需求也很高;
- 在测试阶段进行安全评估,也就是安全测试或者渗透测试,通过黑盒的方式找出安全 bug,在上线之前解决掉,可以用功能测试的小伙伴进行合作或者其他的方式;
- 在发布阶段要对主机进行安全检查,升级最新补丁、关闭无用端口等,将攻击面降到最低;
- 上线之后,通过开始 SRC 平台接收来自白帽子的漏洞提交,补充安全测试不足,做到闭环;
经过上面的一系列操作之后,可以将大部分的安全问题扼杀在上线之前,从而大大降低应用的安全风险,但是完全这么做是需要大量的人力和时间的,对于大部分企业来说是不可能完全做到的,因为可能因为流程的复杂度或者人员的能力问题,造成项目的延期、错事商机,具体做不做以及怎么做,需要上层领导的支持,不同公司的情况不同,需要制定的流程也不一样,落地情况也不同。
理想的情况下是完全按照上面的流程做每一个项目,这是多少安全负责人的理想,可是往往投入产出比不那么好看,得不到领导的支持,参与流程的同事也很抵触这么做,毕竟增加工作量多事,不是所有人都愿意做的,所以作为安全人员并不能强迫大家都按照你的要求来做,就需要平衡我们与开发人员之间的关系,在不增加别人工作量的同时,提升软件安全性,在规范流程的同时,提升自动化能力,将研发当作我们的用户,我们是为业务服务的,而不是监管机构。
今天就聊到这里吧,想要落地这个并没有那么容易,也不是每一家公司都能做到,在自身人力不足的情况下还是不要做这个,做好渗透测试,在恶意攻击之前发现安全问题,推动开发尽快修复安全问题,如果业务系统比较多,自身无法覆盖全面的渗透测试,可以开设 SRC 集白帽子之力来帮助企业发现安全问题,然后自研扫描器,将历史安全问题集成到扫描器中,保证历史安全问题不再出现,我们的价值也就能够很好的体现了,安全无止境,共勉!