您的开发团队中的某个人,承包商或顾问,或者您的系统管理员之一,或者是一个窃取了这些人的凭据之一的坏人,可能将后门程序 , 逻辑炸弹 ,特洛伊木马程序或其他“恶意代码”放入其中您的应用程序代码。 而且你不知道。
这有多少个真正的问题? 您如何切实保护组织免受这种威胁?
坏消息是, 很难找到聪明的开发人员植入的恶意代码 ,尤其是在大型旧代码库中。 它可以用来区分故意的错误代码和错误。
好消息是,根据CERT的内部威胁计划的研究,只有不到5%的内部攻击涉及有人故意篡改软件 :(有关真实的内部软件攻击的引人入胜的描述,请参阅CERT的此报告 )。 h这意味着我们大多数人比我们受到恶意内部人员的故意欺诈或其他行为的威胁更大,这是因为我们的代码以及所使用的第三方代码中的草率设计和编码错误。
更好的消息是,捕获和遏制来自恶意内部人员的威胁的大多数工作与捕获和防止编码中的安全错误所需的工作相同。 无论是草率的/愚蠢的还是故意的/邪恶的,您都在寻找相同的东西, Cigital的Brenton Kohler称之为“ 危险信号 ”:
- 安全代码中的愚蠢或小巧的偶然或“偶然”错误,例如身份验证和会话管理,访问控制或加密或机密处理
- 硬编码的URL或IP或其他地址,硬编码的用户ID和密码或密码散列或代码或配置中的键。 内部人员的潜在后门,无论是否旨在提供支持,都是攻击者可以利用的漏洞
- 测试代码或调试代码或诊断
- 嵌入式Shell命令
- 隐藏的命令,隐藏的参数和隐藏的选项
- 处理资金(如削皮 )或风险限额或管理信用卡详细信息,命令或控制功能或关键的面向网络的代码中的逻辑错误
- 错误处理或异常处理中的错误可能会使系统保持打开状态
- 缺少日志记录或审计功能,以及序列处理方面的差距
- 过于棘手,不清楚或根本没有意义的代码。 一个聪明的坏人很可能会采取措施来掩饰他们试图做的事情,任何没有意义的事情都应该发出危险信号。 即使该代码不是故意恶意的,您也不想在系统中使用它
- 自修改代码。 往上看。
这些问题中的一些可以通过静态分析找到。 例如, Veracode解释了如何通过扫描字节码来检测一些常见的后门 。
但是,正如Oracle的Mary Ann Davidson在2014年发表的一篇荒唐的博客文章中所指出的,找到工具的能力有限。
“实际上,想出一个“后门”很简单,如果将其插入代码,即使是最好的静态分析工具也无法检测到。 桑迪亚实验室(Sandia Labs)进行了一项实验,其中在代码中插入了后门,并且代码审阅者告诉代码在哪里查找。 他们找不到它-甚至不知道在哪里看。”
如果您很幸运,尽管很难模糊故意隐藏的代码和接口,但可能会通过模糊检测发现其中一些问题。
您可以确信自己的系统可能没有恶意代码,就像您可以确信自己的代码可能没有安全漏洞和其他错误一样,唯一的方法是通过纪律严明的代码审查,由那些知道他们在寻找什么。 这意味着您必须检查所有内容,或至少检查所有重要内容:框架,尤其是安全代码,协议库,处理机密数据或金钱的代码,…
为了防止程序员相互勾结,您应该轮换审阅者或随机分配审阅者,并抽查检查以确保以负责任的方式完成审阅(审阅不只是橡皮图章),如DevOps Audit Defense Toolkit中所述 。
如果风险很高,那么您可能还需要外部人关注您的代码,就像Linux Foundations的Core Infrastructure Initiative所做的那样,请专家来对OpenSSL,NTP和OpenSSH 进行详细审核 。
您还需要管理从签入到构建和测试再到部署的代码,以确保您实际上正在部署签入,构建和测试的内容,并且在此过程中未篡改代码。 仔细管理机密和密钥。 使用校验和/签名和更改检测工具(例如OSSEC)来警惕对重要配置和代码的意外更改或未经授权的更改。
这将帮助您捕获恶意内部人员以及诚实的错误,以及以某种方式危害您的网络的攻击者。 监视网络内部的活动也是如此:提防可疑流量以捕获横向移动,应该捕获坏人,无论它们是来自外部还是来自内部。
如果并且当您找到某物时,下一个问题是确定它是愚蠢/草率/不负责任还是恶意/有意。
Cigital的科勒(Kohler)建议,如果您有充分的理由担心内部人员恐惧,则应依靠少数可信任的人来完成大部分审核工作,并尝试将他们的工作保密,以免不良的开发人员不要这样做。找出并试图隐藏他们的活动。
对于我们中其他那些不太偏执的人,我们可以保持透明,从一开始就对问题闪耀光芒。
向所有人清楚,您的客户,股东和监管机构要求必须以负责任的方式编写代码,并对每个人的工作进行检查。
对于所有可能接触代码的人(包括离岸开发人员和承包商以及系统管理员),在雇用协议和合同中均应包含严格的条款,其中规定他们在任何情况下均不得插入任何类型的定时炸弹,后门或活板门,特洛伊木马, 复活节彩蛋或任何形式的恶意代码-这样做都可能导致严厉的民事处罚以及可能的刑事诉讼。
明确指出,所有代码和其他更改都将被检查是否存在任何错误代码。
对开发人员进行安全编码以及如何进行安全代码审查方面的培训,以便他们都知道要查找的内容。
如果每个人都知道不会容忍恶意代码,并且已经制定了认真严谨的程序来捕获这种行为,那么人们尝试摆脱它的可能性就大大降低了,甚至他们也不太可能能够摆脱它。
您可以做到这一点而不会破坏信任和开放的文化。 像查找错误一样,查找错误代码也只是SDLC的另一部分。 应该是这样。
翻译自: https://www.javacodegeeks.com/2015/04/backdoors-sabotage-or-just-plain-stupidity.html