当前位置: 首页 > 科技观察

给需要关心安全的技术人员的几点建议

时间:2023-03-22 01:02:05 科技观察

随着互联网的发展,尤其是移动互联网的发展,网络服务与我们个人生活的关系越来越密切;处理金融服务、生活账单、获取信息等,已经从线下转移到了线上。一个新的时代即将到来或者已经到来,那就是万物互联时代。与此同时,网络安全事件频发,安全事件的危害不断增加。互联网从业者需要越来越重视安全问题。这里有一些想法供刚接触网络安全的开发人员使用。一、什么是“安全”对于从未接触过安全的开发者来说,一个常见的问题是:如何编写安全的代码或制作安全的系统。为了找到答案,我们必须了解安全的定义。“安全”是一个很宽泛的概念,所以这里做一个很宽泛的定义:受保护的对象不被破坏、不被篡改、不被泄露,系统功能能够正常运行。你困惑吗?“安全”定义的关键问题是,需要保护的对象是什么,需要保护的是什么;没有明确的安全需求,就谈不上安全。例如,常见的安全问题包括通信协议是否安全、数据存储是否安全等;另外,运行环境是否安全,代码是否安全。所以在我们要编写安全代码或实现安全系统之前,我们可以先问问自己,我要保护的对象是什么。不同的安全需求需要不同的安全保护方法。如果你不知道你想要什么,那么你就不会得到它。知道了安全的定义,接下来的问题就是:如何知道实施的安全措施是否足够安全。安全防御和安全攻击是一个动态的博弈过程。就像抗生素和细菌一样,防御和攻击技术也在不断升级。所以我们说没有绝对的安全,安全问题就是成本问题。通常我们需要寻找的是如何以最低成本满足我们的安全需求的最佳实践。2、如何入门“安全”孙子说“知己知彼,百战不殆”,读几本黑客攻防方面的书是个不错的选择。这些书的内容可能会涉及到一些计算机基础知识,所以这些知识也是必不可少的,否则只能是知其然不知其所以然。黑客攻击与防御的介绍也会涉及到一些计算机系统、网络、计算机体系结构、编译原理、虚拟机等基础知识。黑客如何攻击和防御是理论基础。有了理论基础,我们就可以看到现实世界中比较流行的安全问题有哪些;CWE是一个常见的缺陷,它列出了许多常见的安全缺陷。我们可以从最受欢迎的开始。25个问题似乎帮助我们在编码时避免了很多安全问题。如果开发的系统是Web系统,那么OWASP就是一个不容错过的数据库;OWASP包含常见的Web问题和最佳实践,您可以了解OWASP的10个最流行的问题。例如,SQL注入这个已经存在了几十年的常见高发问题,在两个列表中都提到了。接下来,我们可以看看业界比较好的安全实践。SEICERTCodingStandards是一个安全的编码标准,它分门别类地列出了C、Java等语言中常见的安全问题,并对安全问题进行了解释,为我们提供了不安全的代码示例和安全的代码示例。该规范是一个很好的切入点,可以帮助我们快速了解安全问题并实践安全编码。三、“安全”问题的宏观分类安全问题多得让人眼花缭乱。这些安全问题有共同点吗?答案是肯定的。我们试图将安全问题分为以下宏观类别。1、不受信任的输入输出站在墙上,为所欲为;如果一个系统不与不受信任的环境交互,那么这个系统的安全问题就比较小。大多数系统,尤其是Web系统,需要与不受信任的环境进行交互;在交互过程中,我们需要特别注意两点:输入是否合法,输出数据是否包含敏感信息。输入数据包括但不限于用户输入的参数、传入的文件、读取的环境变量、依赖的运行时库等。如果用户输入的数据超出了程序的处理范围,可能会导致意想不到的结果。对于这些不可信的数据,我们通常可以限制输入范围,只接受我们可以处理的输入。例如,在网站注册时,对密码的符号有一些限制。这就是解决方案;我们还可以清理输入数据,移除不支持的内容。对于输出数据,我们需要关注输出内容是否包含敏感信息,如程序路径、用户名、密码、IP地址等。如果我们泄露了服务器的用户名和密码,那么服务器上的所有信息都有被泄露的风险。这就需要我们在程序发布前仔细检查输出内容。2.程序本身有错误。如果程序本身有错误,就会给攻击者可乘之机;一旦程序触发了错误逻辑,程序可能会偏离正常的运行流程,比如运行攻击者提供的程序。对于C语言,常见的程序错误包括空指针引用、未释放内存、多次释放内存、数组引用越界、返回栈上地址、整数溢出等等。这就需要代码编写者提高代码编写质量,尽量减少程序错误。对于Java语言,不存在类似C语言内存管理的问题,但也存在整数溢出、数组引用越界、引用空对象等问题。此外,Java语言也存在调用运行时库函数的错误和类型定义错误。、序列化和反序列化错误,以及其他特定于Java语言的问题。3.其他错误问题我们将其他安全问题单独归为一类。这些安全问题包括但不限于以下几点:业务设计错误:未经认证读取用户信息通信协议不安全:如果不安全加密和哈希算法调用的库不安全:例如,有Web服务器中的安全漏洞...4.安全实践的一些建议。性是可以改善的,这里给大家提一些小建议。第一个建议是关注安全问题,设计和实现安全问题,测试安全问题。西方哲学家说“解决问题的第一步是承认问题”,老子说“知道或不知道”,都是这个意思。第二个建议是发现并使用工具来帮助解决安全问题。业界已经有很多工具可以帮助我们检测各个阶段的安全问题。语法检测工具,避免一些低级错误;静态检测工具,在开发过程中,对程序进行静态检测,可以检测程序安全问题,可以分析库文件是否存在漏洞,是解决安全问题非常有效的手段;老牌的Static检测工具有OCLint、Fortify、Coverity、Checkmarx等,一些新秀也在崛起,比如XcalScan;动态检测工具,运行程序检测安全问题;例如可以使用Valgrind、Panda等工具;自动化渗透能够模拟渗透行为,渗透系统发现安全问题的工具;比如ZedAttackProxy、W3AF、Wapiti等工具。安全问题不是单点问题,是系统问题,这里没有灵丹妙药,也没有包治百病的药。我们能做的就是充分了解、模拟、预警安全问题,并采取有效的防范措施。我们做的保护越多,攻击者的攻击面就越窄,攻击成本就越高,我们的系统出现安全问题的概率就越低。千里之行,始于足下;现在是开始了解和关注安全问题的最佳时机。关于作者SageLee是简氏软件的研发工程师。建设成立于2018年,致力于帮助客户降低成本、提高生产力,并确保他们的软件开发人员具备相应的能力,利用先进的静态分析技术开发出更好、更高效的软件。可靠的软件。Sage专注软件安全领域五年多;2014年毕业于北京航空航天大学,获学士学位;2014-2018年就职于邦邦安全,负责源码混淆、加密算法混淆等方面的研发工作。安全软件获得多项发明专利。具有一定的技术研发、团队管理、产品化经验。