【AICon】AI 大模型超全落地场景&最佳实践 了解详情
写点什么

聊聊软件的安全问题

  • 2020-02-04
  • 本文字数:2539 字

    阅读完需:约 8 分钟

聊聊软件的安全问题

8 月 16 - 19 日,与零一万物李开复、蔚来李斌、面壁智能李大海,及工商银行、交通银行、华夏银行等 100+ 行业专家相聚 FCon x AICon

现状:过多的“马后炮”

当前,关于计算机系统的安全讨论很热,无论是数据泄露,还是 DDoS 攻击,亦或是 system hijacks 等都为这个话题贡献了热度。与之相应,宣传销售间谍程序、防火墙等相关的安全公司在增多,并且,对“网络安全专业人士”的需求也在不断上涨。


虽然这些安全防护措施或许“物超所值”,但仍有不足:很大一部分的安全防护是在系统搭建完成后才添加的。如果服务易受攻击?没问题,加一个入侵检测系统来识别和过滤那些企图利用漏洞入侵的网络数据包。


无疑,这种做法很有吸引力,但可惜没啥作用。


正如计算机安全专家在 60 年代强调的,真正的安全要从系统设计构建时就开始考虑。等到系统部署完成后,这时才添加的安全措施有点像“马后炮”。

让安全成为软件开发必需的一部分

从开始就融入安全考量,现在有很多方法,例如“BSIMM(软件安全构建成熟度模型)”。Synopsys 和 Veracode 提供能筛查安全漏洞的代码分析产品。微软的“安全开发生命周期”、Gray McGraw 的《软件安全:让安全成为软件开发必需的部分》和 Sami Saydjari 发布的《可信系统工程》,这些指南均为如何设计、开发更好的系统指明道路。


这些方案都很不错,但还需要更重视软件开发过程中的安全性。


因此,我们需要更好的教育和训练。



今天,很多人重视性能,但仔细想想,安全难道和性能表现不是同等重要吗?


越来越多方便上手的脚本语言证明运行表现的重要性,而安全的重要性或将在日后得到证明。不可否认,很多安全漏洞本意是为良性环境编写的代码,最终却被应用到易被攻击的敏感环境中。因此,在讨论如何提升代码效率的同时也应经常提到代码的安全性。


一种可行的思路是,当开发者关注程序正确性和有效性的同时,应尝试在目标环境中编写程序。但这样还称不上安全,开发者写的代码必须能在所有环境中安全运行。


因此,无论是学生,还是普通的开发者都要搞清楚:程序中的 bug 如何被当做安全漏洞实施攻击,以及如何阻止类似漏洞产生。

安全漏洞

缓冲区溢出,它指当计算机向缓冲区内填充数据位数时超过缓冲区本身的容量,溢出的数据覆盖在合法数据上,以及因此带来的栈缓冲区溢出攻击(smashing the stack)。


这类攻击包括缓冲区溢出攻击和命令注入攻击(command injection)。它们都具备的一大特点是:


黑客欺骗程序将本应做为数据的输入当作是代码,并进一步执行这些恶意代码。


针对网页程序的弱点和对应的攻击方式,包括 SQL 注入攻击、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)。


这类攻击的共同点和之前一样,都是黑客通过诱骗易受攻击的程序,将有问题的数据当作代码。这些代码可被用于劫持程序,盗窃机密,或是破坏重要信息。

代码防护

现在,关于大部分类似漏洞的防护措施都是针对“ a high level”。例如,在使用任何不被信任的输入前进行验证,确保输入数据的大小不会超过缓冲区容量,以此保证程序安全。


对前文提到的其他四种攻击,存在漏洞的程序会在 piecing 另一程序时一并执行恶意命令代码。举个例子,假设有个应用程序想得到用户的用户名和密码作为输入,然后 splicing 这些用户名和密码到一个 SQL 可查询数据库的模板程序里。不过,某些用户名或密码可能包含 SQL 命令,导致程序执行与查询本意不同的命令。



这种情况在构造 shell 命令或 JavaScript 或 HTML 程序(跨站脚本攻击)时都会遇到。这些攻击的防范措施同样针对“ a high level”,例如过滤潜在危险数据。


本文作者提到:目前,大多数计算机安全课程都会侧重漏洞利用,但重点可能在于如何修复应用程序中的安全漏洞。他用了这样的方法:给学生一款 Ruby 编写的有多个漏洞的 Web 应用程序,学生要在不破坏其核心功能的情况下修复这些漏洞。然后,根据自动评分系统对这些修复方案的功能性和安全性评分,并测试原有漏洞是否被修复。学生必须通过修改程序使其通过测试。

底层控制的安全

事实上,最危险的漏洞类型莫过于远程代码执行漏洞(ACE),它允许攻击者在目标系统上执行任何代码。类型不安全的语言(C/C++)中薄弱的内存管理机制会导致很多漏洞,诸如 ACE、释放后重引用(UAF)、二次释放和缓冲区溢出。


根据MITRE的通用弱点枚举(CWE)数据库,缓冲区溢出漏洞仍然是当今最大的漏洞类别


用类型安全的语言(如 Java)编写的程序不会受到这类内存错误的影响,因此消除了很多漏洞。


注:这一点并不完全对,因为用 Ruby 或 Rust 编写的程序仍有部分是通过调用 C/C++的外部函数接口实现的。尽管如此,不使用 C/C++作为日常编程语言仍可以减少被攻击的可能性。


但是,这些类型安全的语言会使用抽象数据表现形式和 Garbage Collection。这虽然让编程变得更容易,消除底层控制,但同时也增加了有些“难以承受的开销”。


尽管无法容忍 the overhead 和缺乏控制,C/C++实质上仍是操作系统、设备驱动程序、嵌入式设备的唯一可选项。


现在,这些系统受到攻击的概率和频率不断增加,我们应该做什么呢?

Rust:不用 GC 的类型安全语言

2010 年,Mozilla公司开始了一个野心勃勃的项目:开发一门针对高性能程序的安全编程语言。这个项目为我们带来 Rust。


Rust 的开发始于 2006 年,但最初 Mozilla 并不支持 Rust。


在 Rust 中,类型安全( type-safety)通过各种警告保证程序不会出现内存错误以及 free of data races,而这种类型安全的保证不需要 garbage collection(GC),在这一点上,其他任何的主流编程语言都做不到。


2019 年 2 月初,微软一次演讲中提到,70% 的安全漏洞都是内存安全问题。此后 7 月份,微软安全响应中心(MSRC)发文表示:微软需要更安全的系统编程语言。此后的系列文章中,微软对自己为什么认为 Rust 语言目前是业界的最佳选择做了阐述。而在近日,微软透露了使用 Rust 代替 C/C++ 编写 Windows 组件的实验感受,工程师们直言使用 Rust 语言的感受妙不可言。


我的任务是对 Windows 代码库的一个低级别系统组件进行实验性重写(目前不能透露是哪个组件),虽然这个项目还没有完成,但总的来说,在 Rust 方面的试验体验是非常好 (generally positive)。新的组件或现有的具有干净接口的组件移植到 Rust 是很容易的。


软件安全必须作为开发的必需部分。同时,未来开发人员关于软件安全性的教育培训将为提高安全观念迈出重要一步。


英文原文:


http://www.pl-enthusiast.net/2018/08/13/security-programming-languages-issue/


2020-02-04 16:493326
用户头像

发布了 146 篇内容, 共 82.8 次阅读, 收获喜欢 195 次。

关注

评论

发布
暂无评论
发现更多内容

和鲸 × 临床医学丨“人”作为一生命体在 AI for Science 过程中的作用与交互

ModelWhale

数据科学 临床医学 AI for Science 交叉学科 临床研究

容器化微服务:用Kubernetes实现弹性部署

高端章鱼哥

Kubernetes 微服务 容器化

头脑风暴小工具-影响地图

Bruce Talk

敏捷开发 Agile Product Owner 影响地图

低成本生成式AI技术:推动AI普及的关键

百度开发者中心

医疗 #人工智能 ChatGPT 文心一言

生成式AI助力高效写作

百度开发者中心

大模型 #人工智能 ChatGPT 生成式AI

社交语聊平台运营,需要哪些资质?语聊APP原生开发和混合uniapp开发的利弊分析

山东布谷科技胡月

语音聊天系统软件开发 语音直播平台开发 语音聊天室开发 语音程序源码 社交直播APP开发

生成式AI助力智能未来

百度开发者中心

#人工智能 ChatGPT 生成式AI 文心一言

死锁产生的条件及解决方法

红袖添香

Java 多线程 死锁

软件测试|如何使用ChatGPT生成思维导图

霍格沃兹测试开发学社

分布式数据库架构:高可用、高性能的数据存储

互联网工科生

分布式数据库 高性能 高可用性

Easysearch 跨集群复制实战

极限实验室

easysearch

软件测试|人工智能如何帮助测试工程师解决问题?

霍格沃兹测试开发学社

Lightroom下载 图像处理软件Lightroom Classic 2023 mac完美激活版

mac

苹果mac Windows软件 Lightroom Classic 2023 lrc2023 数字图像处理软件

五种 CSS 位置类型以实现更好的布局

这我可不懂

CSS web开发

又一可视化低代码神器!云耀云服务器L实例正式发布

mecchi

软件开发 云主机 云服务器 博客搭建

九科信息成功签约中交房地产集团有限公司RPA项目

九科Ninetech

加入DevRun软件开发流水线实战营,即刻开启你的职场竞争力之旅!

科技热闻

cad设计绘图必备:AutoCAD 2024激活中文附补丁安装教程

mac大玩家j

Mac软件 CAD绘图 CAD设计 cad工具

生成式AI:全球科技革命的驱动力

百度开发者中心

教育 #人工智能 ChatGPT 生成式AI

生成式AI引领未来传媒业发展趋势

百度开发者中心

媒体 #人工智能 生成式AI 文心一言

ETL 小技巧:文件输出插件数据写入空闲时间阈值配置及作用

大河

缓冲区 ETL bboss 文件输出

《守望先锋 2》性能提升高达33%!英特尔锐炫从未止步

E科讯

第三周作业

大肚皮狒狒

​Elastic Stack最佳实践系列:Beats->ES,一个更轻型的架构选择

腾讯云大数据

ES

一文看懂:小程序游戏需要版号吗?

FN0

电脑硬件迭代快,对仿真软件有什么影响?

智造软件

仿真软件 电脑硬件 结构仿真 电脑配置 硬件配置

华为云GaussDB打造最可信的数据库,给世界一个更优选择

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

Last Week in Milvus

Zilliz

非结构化数据 开源社区 Milvus Zilliz 向量数据库

常用的国内外组态软件推荐

2D3D前端可视化开发

物联网 组态软件 工业组态软件 web组态软件 SCADA

生成式AI技术市场现状与发展前景展望

百度开发者中心

#人工智能 生成式AI 文心一言

生成式AI:内容创作新革命

百度开发者中心

自然语言处理 内容 #人工智能 文心一言

聊聊软件的安全问题_安全_Michael Hicks_InfoQ精选文章