关于作者:
林伟浩,腾讯高级工程师,专注于企业SDL和SecDevOps建设。 目前从事安全风险评估与审计工作,曾在国内大型电信运营商、顶级游戏公司从事运维和安全体系建设工作。
前段时间,有一篇文章叫《史上最作弊的外包! 花了2年时间花了2亿,**一直没有交付“,而热点文章在IT圈刷屏,谈论全球顶级咨询公司埃森哲为美国汽车租赁公司赫兹开发全新**和移动应用的外包项目一直未完成,后者无奈求助于法庭, 从而将这个令人震惊的瓜暴露在世人面前。值得注意的是,该项目**存在广泛的严重安全漏洞,使其难以投入运营。
说到外包开发项目中的安全问题,相信发现过外包开发者开发项目的同学都熟悉,外包开发项目不仅存在很多安全漏洞,还有越权访问、SQL注入、文件上传、**注入等高危漏洞。
针对这一问题,本文将谈谈外包开发的意义、外包开发中的安全风险以及应对措施。
一、外包发展存在的意义
外包开发是IT服务外包的一个子类别,它本质上是基于企业与IT外包服务商之间的委托关系,前者提出开发需求和系统设计,后者为程序或系统开发提供服务。
首先,随着企业对核心竞争力的重视,越来越多的企业将IT服务外包作为一种新的长期战略成本管理工具,以消除不属于核心业务的分散注意力的分支机构。 公司需要重新定位自己,以切断价值链中较短的部分并扩大其运营规模。
在此基础上,要重新配置企业的各种资源,将资源集中在最能体现企业优势的领域,从而更好地构建竞争优势,获得可持续发展的能力,这对企业核心资源的长远发展具有重要意义, 并能实现“成本控制”和“管理效率”的有效兼顾。
参考资料: tuicoolcom/articles/y3ebmu
其次,对于一些非核心系统或应用来说,自研成本太高。 或者对于一些需要尖端技术的产品,公司本身并不具备成熟的开发能力。 因此,选择外包开发是平衡成本和收益的最佳选择。
此外,在移动互联网的蓬勃发展和全民互联网创业的趋势下,对于那些没有自己开发能力的创业者来说,如果从0开始构建开发能力,需要过多的投入,一方面是业务的紧迫性不允许,另一方面, 就算投资,也不一定比专业外包好,所以他们选择了外包开发。
第二外包开发安全风险
据国外报道,56%的企业数据泄露源于第三方厂商,42%的企业因第三方厂商攻击而发生数据泄露。 不久前,由于第三方数据泄露,Facebook再次成为公众批评的目标。
因此,为了保护企业数据安全,企业不仅要抵御内外部安全威胁,还要进行第三方风险管理(TPCRM)。 这里的TPCRM对应于我们今天讨论的外包开发的安全风险管理。
一、外包开发模式的分类
简单来说,根据最佳的部署场景和协作模式,目前的外包开发模式可以分为三类,即现场、远程和完全独立,在开发过程中面临的安全风险或甲方安全能力的覆盖范围上差异很大。
1) 现场型
外包公司通过劳务派遣或临时办公方式安排员工到甲方办公地点工作,入驻甲方产品或开发团队。
在这种模式下,甲方的风险控制程度最高,因为此时甲方的办公、开发、测试、发布流程规范必须遵循,整个CI CD流程和环境都由甲方掌控,也在甲方安全能力的覆盖范围内,相对来说,这种情况下的安全风险是最小的。
2) 远程型
外包公司员工在其办公环境中完成开发和测试,然后通过公共仓库或其他文件系统或存储系统共享开发和系统运维,甲方完成部署和系统运维,或合并到其主分支中,然后甲方完成部署和系统运维。
在这种模式下,甲方的风险控制程度比较高,整个CI CD流程和环境都由甲方控制,也在甲方的安全能力范围内。
但是,无论合同中如何约定所有权,都会被外包公司联系,共享路径往往需要对外网开放,这也为泄漏留下了缺口。
相对而言,如果外包公司拥有成熟的安全管控流程和有效的身份验证和访问控制的共享路径,则这种情况下的安全风险较小。
3) 完全独立
虽然线上运营环境不一定由外包公司控制,甲方可能只配合域名或品牌资源使用申请,但可以看出甲方的风险控制程度非常薄弱。
这种合作模式下的安全风险往往极高,因为甲方的安全能力基本没有覆盖,其成熟的发布过程可能不受控制。
2. 风险清单
1) 敏感信息泄露
最常见的是当调试模式未禁用时,将源码包放在 Web 的根目录下,并放置版本控制文件。 git/.SVN等文件被放置在根目录下,或外包开发者将源码上传到第三方仓库并泄露,或外包人员的个人电脑被毒害或被黑客入侵,导致甲方源码和数据泄露。
2)高危漏洞概率高
外包开发通常使用开源开发框架,这些框架往往漏洞频繁,容易被批量利用,并且经常存在高危漏洞,如服务器端任意文件**、SQL注入、客户端组件泄露和敏感信息泄露漏洞等,可以拉取数据库信息或入侵服务器。
此外,开发者的架构和质量一般,更容易产生漏洞,或者在用户可控输入的限制上存在疏漏。
3) 盗窃敏感信息
过去曾发生过银行外包开发商违规收集用户信息或甲方业务数据的情况。
4)埋在后门
外包开发人员故意留下逻辑后门等。
5)漏洞的广泛分布
由于外包团队的复用性,一旦外包系统中出现漏洞,很可能在外包团队开发的其他系统中也可以发现相同或相似的漏洞。 此外,一旦外包开发者被黑客入侵,其客户源代码和数据也会被泄露。
3、原因分析
外包公司自身安全管理水平较低,安全运维能力不足,对于完全独立的外包开发模式来说,极易出现安全漏洞。
外包公司员工缺乏安全技能和意识,可能不太重视员工自身的能力建设,这也剥夺了员工提高安全意识和技能的机会。
基于模板的开发模式,即复制粘贴开发,自定义组件化程度往往不高,安全性和质量得不到保证。
3. 外包开发与安全风险管理
以下从组织架构、过程控制、技术赋能三个方面进行介绍,大部分都已在国内大中型IT企业中或多或少落地。
1.组织层面
确定外包管理目标,明确外包总体原则,建立企业级信息技术外包安全防控框架,完善外包管理组织体系和制度体系。 这类企业更适合大型金融、通信、制造、互联网等行业。
由于外包项目和外包开发商数量众多,因此需要注意公司的组织结构。 例如,规划和建立独立的外包管理团队,使制定自上而下的外包项目管理流程能够获得组织基础。
2.工艺层面
1) 合同约束
与外包开发商的合同中是否有安全要求? 这些外包开发人员是否需要遵循安全开发生命周期的标准? 他们是否接受过系统开发生命周期以及如何安全编码的培训? 外包开发者是否对**中的漏洞和敏感信息泄露负责? 如果发现漏洞,是否需要紧急响应?
如果合同中没有规定这些要求,则应将这些条款添加到未来的合同中,并应修改现有合同以涵盖这些条款。
2)按外包类型分类管理
针对不同类型的外包,建立全生命周期管理机制,包括安全资质评估、安全管理、安全运维能力评估,以及外包安全管理效果测度机制。 主要考虑因素如下:
信息安全管理资质评估【BSI安全认证审核、ISO27001认证】。
安全管理(制度和流程的完整性、信息安全控制状态、安全意识教育、风险控制能力)。
安全运维(安全编码规范、安全应急响应流程、权限控制)。
确认并审查合作伙伴的网络安全策略、技术以及相关实践和案例。
3) 建立日常活动规范
服务变更控制; 服务人员管理; 安全事件处理; 业务连续性管理。
4)采取统一的招标流程
通过更透明和统一的入职流程,为更重视安全和质量的开发人员提供公平的机会。
5)确认第三方有权访问数据系统;确认公司与第三方共享的信息和资产
该项目为非关键信息系统的编码测试外包,脱敏后所有生产数据均可用于开发测试环境,外包方无法访问敏感信息。 防止IT服务人员接触组织的核心系统信息,降低IT服务外包给IT系统敏感部位带来的安全风险。
3、技术水平
1) 为合作伙伴的网络安全监控设置持续基线
在合作伙伴关系的整个生命周期内进行持续监控和验证,例如加强对业务异常的监控和分析。
2)加强外包开发人员的安全意识和技能培训
例如,外包人员必须参加安全培训和考试,达标后方可开发,以一级漏洞率作为项目完成评价的要素,安全编码规范可参考OWASP安全编码指南。
参考资料: owasporg.cn/owasp-project/secure-coding
3)改进和完善安全测试方法和测试用例
生产前进行严格的安全检测,推出后进行周期性检测,更具体的做法有:
启动前安全自检:
检查清单。
上线前漏洞扫描和安全审计:
在这里,您需要区分环境。 如果**的测试运行环境在甲方,可以接入甲方的漏洞扫描系统进行自动扫描。
否则,如果开发者具备条件,可以自行进行漏洞扫描,也可以授权甲方覆盖安全能力。
同时提供测试环境、源代码、软件设计文档和使用指南,对甲方安全团队进行审计,审计是否存在安全漏洞或后门、隐藏通道等恶意对象
当然,安全审计需要考虑人工成本,如果甲方能提供自动化审计方法,可以覆盖每一个变更发布,否则以大版本更新为控制。
对外包开发进行安全审计,尤其是登录、转移等重要业务场景。
4)**发布和系统启动过程控制
根据服务器环境是否可由甲方控制进行分类。 如果是可控的,业务变更必须由甲方操作,包括:测试环境测试、发布和上线,否则必须有审批机制,建议外包或合作开发的Web应用部署在甲方安全能力覆盖范围内。
5)权限控制(系统管理、数据访问、环境变更)。
系统管理权限未打开; 如果必须开立变更权限,则必须参照甲方的放行变更验收标准接受并记录实际变更。
6)审计机制
保留应用系统或主机的访问日志和操作记录,并通过自动或定期审查进行审计。
引用**移动金融业务外包发展中的信息安全风险。
tuicool.com/articles/euybrb
酒店业IT系统外包的安全风险(基于华住数据泄露的视角).
sohu.com/a/294598831_704736
金融企业安全管理建设外包。