作者简介:汤青松,某大型互联网公司网络安全负责人,从事网络安全相关工作10年,实体书《PHP Web安全开发实战》作者,安全开源项目Qingscan作者,擅长企业安全建设、SDL安全建设。
在网络安全行业,安全Web漏洞挖掘工程师已经层出不穷,然而拥有甲方安全建设经验的工程师相对较为稀缺。在企业招聘安全工程师时,除了对安全漏洞挖掘能力的重视,更加关注是否具备甲方安全体系建设方面的思维。
本次分享聚焦于甲方安全体系建设,提供实用的规划和实施方案,以帮助安全工程师在企业环境中更好地履行其职责。重点关注甲方安全建设的战略性和实际操作层面,让大家能够全面了解并掌握这一关键领域。
一、企业网络安全架构设计
企业网络安全架构设计有三个部分:第一部分是防御层面,第二部分是安全监控,第三部分是应用加固,减少漏洞。
1. 防御层面
接下来,我们深入探讨防御层面的关键措施。首要任务是明确我们当前暴露的资产情况。资产表涵盖了公网IP总量以及这些IP上开放的端口。通过建立详细的资产表,我们能够更加清晰地了解自身的暴露面。紧接着,我们需要优化这些资产的管理,关闭非必要端口,从而增强安全性。
其次,部署流量防护墙是至关重要的。它能有效抵御DDoS等流量攻击。此外,在应用层实施防御措施同样不可或缺。例如,针对网站可能面临的扫描性攻击,我们需要采用WAF防御,这些策略不同于传统的流量防御。
除了上述防御措施,网络阻断技术也扮演着重要角色。它能够以更精细的粒度进行限制,例如,当对我们的特定业务发起攻击时,我们可能不希望完全封锁整个IP,这时就可以使用网络阻断设备,仅针对该IP或目的地进行封锁。
最后,蜜罐技术为我们提供了一种主动防御的手段。通过部署蜜罐,我们可以吸引攻击者的注意力,从而保护真正的关键资产。例如,我们可以设置伪装成内部系统的蜜罐,如禅道系统或财务系统。当攻击者尝试入侵这些蜜罐时,我们能够提前预警并采取相应的预防措施。
2. 安全监控
安全监控是保障信息安全的关键环节,它不仅能帮助我们及时发现攻击行为,还能追踪攻击者的行动路径。我们需要从网络和主机两个层面进行监控。
网络监控方面,我们可以采取多种措施,如识别资产、发现漏洞、监控服务响应等。通过网络监控,我们能够及时发现异常行为,形成告警,并及时通知相关人员。此外,对于攻击行为的识别也至关重要,例如内网探测等,我们需要构建拓扑图并进行实时监控。
主机监控同样不容忽视。攻击者打入系统后,可能会利用漏洞、留存病毒文件等。因此,我们的HIDS(主机入侵检测系统)需要具备病毒文件检测、漏洞扫描等能力。同时,对于主机的异常行为,如未及时更新补丁、异常流量等,我们也应实时监控并报警。此外,主机监控还需满足合规基线要求,确保系统安全。
通过网络和主机两个层面的监控,我们能够全面了解系统的健康状况。
3. 应用加固
仅仅依靠防御和监控是远远不够的,我们还需要进行应用加固,以从根本上解决问题。应用加固是安全建设中的一项重要任务,也是最具挑战性的部分。因此,我们需要在防御、监控和应用加固三个方面共同努力,确保系统的安全性。
与业务线的合作之所以困难,是因为安全工作往往需要与具体的业务场景和需求相结合。例如,在产品设计阶段,安全团队需要介入,评估可能存在的安全风险,如越权漏洞、用户密码找回漏洞等。这要求安全团队不仅要了解安全技术,还要对业务有深入地了解。
此外,安全团队还需要与业务线紧密合作,推动安全意识的提升。这可能包括为业务团队提供安全培训,以及为公司全员进行网络安全培训。通过这些培训,安全团队可以帮助业务团队了解安全的重要性,以及如何在日常工作中防范安全风险。
在应用架构层面,安全团队与业务线的合作更加紧密。安全团队需要评估业务线的需求,并提供相应的安全解决方案。例如,当业务线推出新产品或功能时,安全团队需要评估其安全性,并提供必要的安全建议和支持。
同时,前面提到的安全监控也会转化为安全工单。例如,当HIDS系统发现系统中存在漏洞时,安全团队会将这些漏洞以安全工单的形式推送给业务线。业务线需要根据这些工单进行修复和改进,以确保系统的安全性。
最后,安全团队还需要在业务上线之前进行安全测试,以及在代码审计中提供支持和帮助。这些功能和服务旨在确保业务线的安全性和稳定性,同时提高整体的安全水平。
上图这个目录为我们提供了整体框架,接下来我们将深入探讨这些安全实践的具体实施方法。我们的重点不在于理论阐述,而是聚焦于如何将这些安全策略落地执行。接下来我们一起探索如何在现实中实施这些安全策略,从而切实提升我们的安全防护能力。
安全防御:
监控层面:
漏洞减少:
二、漏洞管理流程
在甲方环境中,漏洞管理是一项至关重要的任务。当安全团队发现漏洞后,必须有效地将这些漏洞信息传递给业务团队,以便他们及时进行修复。业务团队完成修复后,还需要向安全团队反馈,以便进行复测。这个流程必须形成一个闭环,以确保漏洞得到妥善处理。
1. 漏洞管理背景
建设企业安全体系中,安全团队不仅要发现漏洞,还需要推进业务团队修复漏洞;
当企业业务线过多时,漏洞数量也会随之增加,此时需要有一套完善的漏洞管理机制;
漏洞管理体系建设的目的是保证漏洞能第一时间发现,并且被及时修复。
2. 漏洞发现
2.1 漏洞发现
我系统地梳理了漏洞发现的各个环节。要发现漏洞,首先需要建立一个有效的发现机制。这一机制可以通过多种渠道实现。例如,在IAST应用上线前的运行时进行检测,这是一种常见的方法。此外,黑客扫描也是一种常用的手段,我们可以利用Xray等工具进行扫描。代码审计也是关键的一环,通过仔细检查代码,可以发现潜在的安全问题。
除了以上方法,与外部的SRC合作也是非常有益的。SRC(安全漏洞奖励平台)可以为我们提供大量的安全资源。市场上一些知名的SRC平台,如火线360和漏洞盒子,都为我们提供了与白帽子交流的机会,他们经常能为我们提供宝贵的漏洞信息。当然,我们也可以自建SRC平台,通过社区的力量来共同发现漏洞。
另外,NIDS(网络入侵检测系统)也是一个重要的工具。NIDS系统中包含大量的指纹信息,这些指纹与漏洞库相对应,可以帮助我们发现系统中的漏洞。
此外,HIDS(主机入侵检测系统)也是一个值得关注的方面。例如,如果你的系统组件较为老旧,那么可能存在“脏牛”等漏洞。因此,我们需要定期检查和更新系统组件,以避免这些漏洞被利用。
总的来说,漏洞的发现需要多方面的努力和合作。通过综合运用各种方法和工具,我们可以更有效地发现和应对系统中的漏洞,确保系统的安全稳定运行。
详情可以参照下表:
2.2 漏洞审核
通过上述渠道的努力,每天会发现大量的漏洞。然而,并非所有漏洞都需要人工审核,部分漏洞可以通过自动化审核进行处理。
需要人工审核的漏洞主要包括:从外部SRC平台接收的漏洞报告,因为其中可能包含虚假或误导性的信息;以及那些可能对业务运营产生实际影响的漏洞,需要人工判断其真实性和潜在风险。
而自动化审核则适用于一些明确且易于识别的漏洞类型。例如,HIDS系统检测到的“脏牛”这类提权漏洞,由于它们通常具有明确的特征和检测标准,因此可以通过自动化流程迅速进行确认和处理。
通过人工和自动化审核的结合,我们可以更加高效和准确地处理这些漏洞,确保系统的安全性和稳定性。
漏洞审核三原则可以参照下面表格:
2.3 漏洞定级
当发现漏洞后,可以直接进行漏洞定级。为了准确评估,需要考虑多个维度。首先是利用难度。例如,某个SQL注入漏洞可能需要经过多重绕过才能被利用,尤其是在内部办公网络中,外部攻击者很难轻易突破。
除了利用难度,业务重要性也是一个关键因素。某些漏洞可能仅影响边缘业务,而其他漏洞则直接威胁核心业务,如订单处理或敏感数据的安全。此外,我们还要考虑漏洞是否涉及个人隐私信息以及影响范围。
为了更全面地评估漏洞,我们需要结合多个维度进行综合考虑。同时,制定自己的漏洞定级标准至关重要。例如我可能会将SRC平台上标记为高危的漏洞定为高危,而代码审计中发现的、尚未发布的漏洞,由于其隐蔽性和利用难度,我可能会将其定为中低危。
值得注意的是,我们不能仅依赖工具或单一维度来评估漏洞级别。例如,尽管某些工具可能将SQL注入和命令执行视为高危漏洞,但在实际业务环境中,我们需要从多个维度进行综合评估,以确定漏洞的真实风险和影响。因此,这种综合评估的方法是无法被工具完全替代的。通过综合考虑利用难度、业务重要性、数据敏感性以及影响范围等多个维度,我们可以更准确地为漏洞定级,并采取相应的措施来确保系统的安全性。
漏洞定级可以参考下图:
2.4 派发工单
完成漏洞定级后,应当通过专门的派发工单系统向相关业务团队发送工单,以确保他们及时收到并处理漏洞信息。仅仅通过IM通知是不够的,因为工单机制能够提供更正式、更可追踪的记录。在派发工单时,应利用IM、邮件和电话等多种方式通知相关团队,确保他们及时收到工单并了解漏洞情况。
收到工单后,业务团队应尽快认领工单,并着手修复工作。在准备修复环境时,他们需要参考一些通用的修复方案和咨询资料。为了确保能够迅速响应和解决问题,建议提前整理这些资料,形成一个易于查阅的知识库。这样,在团队成员遇到问题时,可以快速找到解决方案,而不是浪费时间去搜索或咨询。
对应步骤如下:
2.5 业务修复
业务线在认领工单后,可能会根据自己的排期来安排修复工作,这可能导致修复时长无法满足安全团队的需求。因此,安全团队需要不定时地督促业务线加快修复进度,确保漏洞得到及时处理。
为了更有效地管理漏洞修复工作,建议制定一个制度性规定,对不同级别的漏洞设定相应的修复时长。例如,对于高危漏洞,可以要求业务线在24小时内完成修复。这将有助于确保高危漏洞得到优先处理,降低安全风险。
如果业务线未能按时完成漏洞修复,系统应自动发送逾期提醒,并辅以人工提醒,以确保业务线意识到逾期情况并尽快采取行动。如果逾期情况严重,可能需要升级事件处理级别,以便更快速地解决问题。
当业务线完成漏洞修复后,安全团队需要进行安全复测以验证修复效果。如果复测不通过,安全团队需要将工单状态改回“修复中”,并再次向业务线提供修复建议,指导他们重新进行修复工作。这一轮复测和修复建议的过程有助于确保漏洞得到彻底修复,提高系统的安全性。
业务修复参考如下:
漏洞复验参考如下:
2.6 漏洞复盘
完成漏洞修复后,对漏洞进行归类和总结是至关重要的。例如,我们可以发现某些业务系统频繁出现越权漏洞,而另一些系统则经常遭受SQL注入攻击。为了应对这种情况,我们需要建立一个复盘机制。
这个复盘机制的主要目的是深入分析漏洞类型、业务线及其特征,并从中汲取教训。通过整理和归纳这些信息,我们可以直观地展示漏洞情况和修复成果。
在完成复盘后,我们可以根据漏洞特征进行专项测试,以验证系统是否还存在类似的安全隐患。同时,针对业务团队在安全方面可能存在的短板,我们可以组织相应的安全培训,提升团队的安全意识和防护能力。
总之,通过对漏洞的归类、总结和培训,我们可以全面提升系统的安全性,并降低未来遭受类似攻击的风险。
漏洞复盘参考如下:
三、安全开发生命周期
最后一点,是SDL(Security Development Lifecycle,软件安全开发生命周期)的应用。SDL是一个在软件开发全过程中嵌入安全考虑的框架。这意味着,从项目的立项阶段开始,我们就需要开始介入并考虑安全问题。
在立项阶段,我们会与团队一起评估项目的安全风险,制定相应的安全策略和措施。随着项目的推进,我们会持续跟踪和监督安全实践的执行情况,确保开发过程中的安全性。
此外,SDL还涵盖了软件开发的各个阶段,包括设计、编码、测试和维护等。在每个阶段,我们都会结合SDL的指导原则和要求,确保软件的安全性和质量。
SDL的相关流程如下:
1. 规划和需求阶段
在安全规划需求阶段,我们会根据项目的实际情况和所使用的技术栈,对潜在的安全风险进行预测和提醒。例如,如果项目在规划阶段确定使用MySQL数据库,我们会特别提醒团队注意SQL注入、数据加密不足以及权限管理不当等风险。同样,当使用订单功能时,我们也会指出相关的安全风险点。
为了实现这一目的,我们需要建立一个完善的安全风险提醒系统。当团队在系统中勾选某个功能或技术时,系统能够自动展示该功能或技术可能带来的安全风险,并提供相应的防范建议。这样,团队在开发过程中就能够更加清晰地了解潜在的安全风险,并采取相应的措施进行防范。
通过这样的安全风险提醒系统,我们能够在需求阶段就为项目的安全性打下坚实的基础,确保后续开发过程中的安全性和稳定性。
详情可参考下图:
2. 开发
在开发阶段,确保遵循适当的编码规范至关重要。对于不同的编程语言,如PHP和iOS,都存在各自的安全编码规范。这些规范提供了关于如何安全地编写代码的指导原则和建议。
为了确保开发团队了解并遵循这些规范,我们需要准备相应的培训材料,并关注与业务逻辑相关的安全漏洞。这将有助于提升开发团队的安全意识和技能,从而确保软件的安全性。
可参考下述编码规范:
3. 黑盒测试
在黑盒测试阶段,我们需要利用一些专业的工具来辅助我们进行测试。这些工具包括AWVS、Xray、APPscan以及Burp Suite等。你可以选择其中的一些工具来对目标进行扫描和检测。
以AWVS为例,它是一款功能强大的网络扫描工具,你可以使用它来对目标进行扫描,以发现可能存在的安全漏洞。AWVS的官方图展示了其扫描的一些关键功能和特点。
除了使用这些工具进行自动扫描外,人工测试也是非常重要的一环。人工测试可以发现一些工具可能无法检测到的漏洞,或者对特定业务逻辑进行深入地分析。
4. 白盒测试
对于白盒审计,我们有多种工具可供选择,如Fortify、CheckMax、Semgrep和Xcheck等。这些工具在代码审计中都发挥着重要作用。然而,从实际效果和效率来看,SQL注入和命令执行等漏洞类型通常是审计的重点。
当团队人力充足时,建议对各类高危漏洞进行全面审计,以确保系统的安全性。但在实际情况中,甲方团队的规模往往有限。因此,在资源有限的情况下,建议将核心精力集中在SQL注入和命令执行等高危漏洞的审计上。这些漏洞往往具有较高的风险,且审计起来相对直接和高效。
5. 安全部署
在安全部署环节,当我们将应用程序发布到生产服务器时,确保这台服务器的安全性至关重要。为了实现这一目标,我们需要部署HIDS(主机入侵检测系统)。HIDS能够实时监控和分析服务器的活动,以发现潜在的安全威胁。
在选择HIDS工具时,有多个不错的选择可供考虑。例如,Elkeid是一个开源的HIDS工具,它功能强大且表现优秀。除此之外,还有青藤云等其他优秀的HIDS工具可供选择。
6. 安全培训
安全培训的具体内容,可以参考如下表格: