
Rust 第五次成为最受欢迎的编程语言。这是我们的新安全救星吗?
在过去的几年中,似乎全世界的软件工程师对 Rust 的利用不足以进行编程。这种相对较新的系统编程语言,由 Mozilla,吸引了 Stack Overflow 社区的心——而且,作为一个极不可能遭受傻瓜之苦的群体,当他们投票时”最受欢迎的编程语言“连续五年,是我们所有人坐下来注意的时候了。
Rust 编程语言融合了常用语言中的已知和功能元素,采用了一种不同的理念,既考虑了复杂性,又引入了性能和安全性。这是一个学习曲线,许多开发者没有机会过多地玩它- 在Stack Overflow上接受调查的受访者中, 常用它。但是,除此之外,不可否认的是,它是一种令人兴奋的语言,并且比其前身(例如C和C++)具有更大的安全火力。大规模采用将需要一些行为和技术上的改变... 但是目前,它仍在理论层面上吸引着开发者的注意力。
... 但是等等,我们还需要阐明一件事:值得注意的是,Rust 是一种编程语言,它优先考虑内存安全,并消除与常见内存管理问题相关的安全漏洞。这些都很重要(无疑会导致不止一些 AppSec 团队的偏头痛),但它们并不是我们面临的唯一安全编码挑战。
Rust 到底能阻止什么?在安全格局中,我们还面临哪些风险?让我们来解开最新的编程独角兽:
现代内存安全系统编程的新前沿
Mozilla 的研发团队参与了一些不可思议的项目,作为开源开拓者投资 Rust 编程也不例外。他们的 入门视频 为他们的精神提供了一些见解,关键主题非常明确:当前的软件安全方法存在缺陷,而 Rust 旨在解决大部分问题。
这似乎太简单了,尤其是因为我们每隔一天就会面临巨大的数据泄露——就像最近报道的可怕失误一样 易捷航空。数百万条数据记录经常遭到泄露,几乎都是网络应用程序漏洞造成的, 安全配置错误,或者网络钓鱼攻击,像 C++ 这样的语言已经存在了数十年。但是,这还不足以让开发人员掌握它们,以至于实现安全编码最佳实践。为什么 Rust 应该有所不同?新语言之前已经问世,这并不是说他们找到了消除常见漏洞的方法,也没有确保编写的任何代码在编译时神奇地完美无缺。
尽管概念可能很简单,但有时是简单的答案可以克服复杂的问题。从任何意义上讲,Rust 是内存安全系统编程的一场革命,它在许多方面兑现了承诺... 而且它无疑为那些容易引入错误的开发人员省钱,如果不被发现,这些错误可能会导致重大问题。对于没有安全意识的开发人员来说,Java、C、C++,甚至像科特林和Golang这样的新语言仍然相当无情。有了这些,就没有内在的警告,也没有特别的迹象表明刚刚编译的这个很棒的功能隐藏着安全隐患。
那么,让我们更深入地挖掘一下:
是什么让 Rust 如此安全?
通常,开发人员的主要目标是构建功能,确保功能强大且易于使用——甚至可能是他们乐于在简历中炫耀的自豪之源。开发人员创建一些很棒的软件,将其交付并继续进行下一个大项目,这是完全正常的。此时,安全团队会检查漏洞,如果发现漏洞,他们 “完成的” 应用程序可能会返回给他们的团队进行修复。问题可能很简单,也可能完全超出了开发人员修复的合理范围。
问题在于,从表面上看,安全漏洞根本不明显,如果扫描、测试和手动代码审查未能发现这些漏洞,那么攻击者就有可能利用这小的机会来利用这个漏洞。
现在,Rust 试图从一开始就阻止许多漏洞进入代码:如果存在语法错误或其他导致生产问题的内存安全错误,它根本无法编译。从设计上讲,这是内存安全的编程,可确保无法访问无效内存(无论软件如何执行)。并且 70% 的安全漏洞是由内存管理相关问题造成的,这是一项了不起的壮举。
Rust 会标记并防止:
- 缓冲区溢出
- 免费后使用
- 双重免费
- 空指针取消引用
- 使用未初始化的内存
如果我们将 Rust 代码片段与 C++ 进行比较,就会发现一个代码片段在默认情况下是安全的。看看这个缓冲区溢出错误的示例:
#include<iostream></iostream>
#include<string.h></string.h>
int main(无效){
char a [3] = “12”;
char b [4] = “123”;
strcpy (a, b);//由于 b 的 len 大于 a 时出现缓冲区溢出
std:: cout << a << “;” << b << std:: endl;
}
Vs.
pub fn main () {
让 mut a: [char; 2] = [1, 2];
让 b: [char; 3] = [1, 2, 3];
a.copy_from_slice (&b);
}

Rust 会发出安全警告,并在运行时到达 copy_from_slice 函数时出现恐慌以防止缓冲区溢出,但在编译时却没有。
从这个意义上讲,它在很大程度上是 “从左开始” 的语言之一。它将突出显示错误,并强制教会开发人员编写代码的正确方法,以避免引入与内存相关的安全漏洞,因此能否按时完成取决于编码人员的关注、补救和忠于交付路径。
这种语言的方法看似简单,但如果能让它运用这种强大的逻辑,那将是一项了不起的壮举,而且它确实能走上正轨。从安全的角度来看,Rust 是一次巨大的飞跃... 只要有更多的人使用它。像 Dropbox 这样的公司正在率先在企业范围内大规模使用它,这真是令人高兴。但是,在我们得出结论,收养问题是阻碍我们走向更安全的未来的唯一结论之前,还有更多的考虑因素。
Rust 的清算。
有几个小(好吧,大)问题,即在 Rust 中编程比看起来更容易引入错误。它会 不 修复最重要的 OWASP 十大漏洞,这些漏洞继续导致漏洞、延迟和普遍的不安全编码技术文化。还有一种天使与魔鬼的动态,或者更广为人知的是: 安全生锈与不安全生锈。
正如中所解释的那样 官方文档,Safe Rust 是 Rust 的 “真正” 形式,Unsafe Rust 包含被认为是 “绝对不安全” 的函数,尽管它们有时是必要的,例如需要与其他语言的某些东西集成。但是,即使使用了 Unsafe Rust,附加功能的清单仍然有限。在 Unsafe Rust 中,可以在不安全的区块中执行以下操作:
- 取消引用原始指针
- 调用不安全的函数(包括 C 函数、编译器内在函数和原始分配器)
- 实现不安全特征
- 突变静态数据
- 访问工会的字段。
即使在所谓的 “不安全” 模式下,Rust 编程的超能力之一仍然起作用:“借款检查器”。它通常通过静态代码分析来防止内存问题、并行计算中的冲突和许多其他错误,并且这种分析仍会在不安全的块中进行检查——在某些情况下,编译器无需介入指导即可编写不安全的构造只需要做更多的工作即可。
对于大多数有经验的开发人员来说,这似乎不是什么大问题——毕竟,众所周知,我们会修改应用程序并开放一些更酷的功能——但它可能会打开一个黑洞,可能导致严重的配置错误和安全漏洞:未定义的行为。与 C 或 C++ 相比,使用 Rust 编程(即使使用不安全)可以很好地锁定漏洞的可能性,但是调用未定义的行为可能会带来风险。
对开发人员主导的安全编码的依赖到此结束了吗?
还记得我之前说过 Rust 有众所周知语言的组件吗?Rust 的主要安全漏洞之一是,它包含众所周知语言的组件,即 C。
Rust 仍然是一种 “安全的编程语言”,但同样,引入用户是事情可以解开的地方。开发人员仍然可以对其进行调整以使其在不标记错误的情况下运行(这是一个有吸引力的主张,因为这样可以解锁更多功能),从本质上讲,即使处于安全状态,开发人员仍然可以随心所欲地处于 “不安全” 状态,因为在事情真正出错之前,他们有一层指导和保护。
随着我们深入研究,上述两种情况都变得更加危险,因为 Rust 的结果与扫描工具相似——就像没有瑞士陆军 SAST/DAST/RAST/IAST 工具可以扫描每个漏洞、每个攻击向量和每个问题一样,Rust 也没有。即使使用 Rust 仍然可以很容易地引入一些漏洞。
运行 Unsafe Rust 时存在的未定义行为风险有可能引发整数溢出问题,而总的来说,即使是安全配置也无法防止安全配置错误中的人为错误, 商业逻辑,或者使用具有已知漏洞的组件。如果不进行修补,这些问题仍然构成非常现实的威胁,并且在像真正的 Rust 这样的 “假定安全” 的环境中,如果程序员认为无论如何都会解决所有重大问题,则甚至可能导致一些自鸣得意的行为。
我发现 Rust 与编程导师没什么不同,编程导师是一位高级工程师,他花时间与经验不足的编码人员坐在一起,审查他们的工作,向他们展示潜在的错误,指出效率,在某些情况下,还要确保直到正确才编译。但是,对于 Rust 程序员来说,自己学习理论并致力于最佳实践要好得多,因为那位导师可能只是削减了围裙的束缚,你不想袖手旁观。
准备好立即查找和修复常见的 Rust 漏洞了吗? 玩挑战赛。
Matias Madou, Ph.D., ist Sicherheitsexperte, Forscher, CTO und Mitbegründer von Secure Code Warrior. Matias promovierte an der Universität Gent im Bereich Anwendungssicherheit und konzentrierte sich dabei auf statische Analyselösungen. Später wechselte er zu Fortify in den USA, wo er erkannte, dass es nicht ausreicht, nur Codeprobleme zu erkennen, ohne den Entwicklern beim Schreiben von sicherem Code zu helfen. Dies inspirierte ihn dazu, Produkte zu entwickeln, die Entwickler unterstützen, den Aufwand für die Sicherheit verringern und die Erwartungen der Kunden übertreffen. Wenn er nicht an seinem Schreibtisch im Team Awesome sitzt, steht er gerne auf der Bühne und hält Vorträge auf Konferenzen wie der RSA Conference, BlackHat und DefCon.

Secure Code Warrior kann Ihrem Unternehmen dabei helfen, Code während des gesamten Softwareentwicklungszyklus zu schützen und eine Kultur zu schaffen, in der Cybersicherheit an erster Stelle steht. Ganz gleich, ob Sie AppSec-Manager, Entwickler, Chief Information Security Officer oder in einem anderen sicherheitsrelevanten Bereich tätig sind – wir können Ihrem Unternehmen dabei helfen, die mit unsicherem Code verbundenen Risiken zu minimieren.
Demo buchenMatias Madou, Ph.D., ist Sicherheitsexperte, Forscher, CTO und Mitbegründer von Secure Code Warrior. Matias promovierte an der Universität Gent im Bereich Anwendungssicherheit und konzentrierte sich dabei auf statische Analyselösungen. Später wechselte er zu Fortify in den USA, wo er erkannte, dass es nicht ausreicht, nur Codeprobleme zu erkennen, ohne den Entwicklern beim Schreiben von sicherem Code zu helfen. Dies inspirierte ihn dazu, Produkte zu entwickeln, die Entwickler unterstützen, den Aufwand für die Sicherheit verringern und die Erwartungen der Kunden übertreffen. Wenn er nicht an seinem Schreibtisch im Team Awesome sitzt, steht er gerne auf der Bühne und hält Vorträge auf Konferenzen wie der RSA Conference, BlackHat und DefCon.
Matias ist ein Forscher und Entwickler mit mehr als 15 Jahren praktischer Erfahrung im Bereich der Softwaresicherheit. Er hat Lösungen für Unternehmen wie Fortify Software und sein eigenes Unternehmen Sensei Security entwickelt. Im Laufe seiner Karriere hat Matias mehrere Forschungsprojekte zur Anwendungssicherheit geleitet, die zu kommerziellen Produkten geführt haben, und kann auf über 10 Patente verweisen. Wenn er nicht am Schreibtisch sitzt, ist Matias als Ausbilder für fortgeschrittene Anwendungssicherheitstrainings courses tätig und hält regelmäßig Vorträge auf globalen Konferenzen wie RSA Conference, Black Hat, DefCon, BSIMM, OWASP AppSec und BruCon.
Matias hat einen Doktortitel in Computertechnik von der Universität Gent, wo er die Sicherheit von Anwendungen durch Programmverschleierung untersuchte, um die innere Funktionsweise einer Anwendung zu verbergen.


在过去的几年中,似乎全世界的软件工程师对 Rust 的利用不足以进行编程。这种相对较新的系统编程语言,由 Mozilla,吸引了 Stack Overflow 社区的心——而且,作为一个极不可能遭受傻瓜之苦的群体,当他们投票时”最受欢迎的编程语言“连续五年,是我们所有人坐下来注意的时候了。
Rust 编程语言融合了常用语言中的已知和功能元素,采用了一种不同的理念,既考虑了复杂性,又引入了性能和安全性。这是一个学习曲线,许多开发者没有机会过多地玩它- 在Stack Overflow上接受调查的受访者中, 常用它。但是,除此之外,不可否认的是,它是一种令人兴奋的语言,并且比其前身(例如C和C++)具有更大的安全火力。大规模采用将需要一些行为和技术上的改变... 但是目前,它仍在理论层面上吸引着开发者的注意力。
... 但是等等,我们还需要阐明一件事:值得注意的是,Rust 是一种编程语言,它优先考虑内存安全,并消除与常见内存管理问题相关的安全漏洞。这些都很重要(无疑会导致不止一些 AppSec 团队的偏头痛),但它们并不是我们面临的唯一安全编码挑战。
Rust 到底能阻止什么?在安全格局中,我们还面临哪些风险?让我们来解开最新的编程独角兽:
现代内存安全系统编程的新前沿
Mozilla 的研发团队参与了一些不可思议的项目,作为开源开拓者投资 Rust 编程也不例外。他们的 入门视频 为他们的精神提供了一些见解,关键主题非常明确:当前的软件安全方法存在缺陷,而 Rust 旨在解决大部分问题。
这似乎太简单了,尤其是因为我们每隔一天就会面临巨大的数据泄露——就像最近报道的可怕失误一样 易捷航空。数百万条数据记录经常遭到泄露,几乎都是网络应用程序漏洞造成的, 安全配置错误,或者网络钓鱼攻击,像 C++ 这样的语言已经存在了数十年。但是,这还不足以让开发人员掌握它们,以至于实现安全编码最佳实践。为什么 Rust 应该有所不同?新语言之前已经问世,这并不是说他们找到了消除常见漏洞的方法,也没有确保编写的任何代码在编译时神奇地完美无缺。
尽管概念可能很简单,但有时是简单的答案可以克服复杂的问题。从任何意义上讲,Rust 是内存安全系统编程的一场革命,它在许多方面兑现了承诺... 而且它无疑为那些容易引入错误的开发人员省钱,如果不被发现,这些错误可能会导致重大问题。对于没有安全意识的开发人员来说,Java、C、C++,甚至像科特林和Golang这样的新语言仍然相当无情。有了这些,就没有内在的警告,也没有特别的迹象表明刚刚编译的这个很棒的功能隐藏着安全隐患。
那么,让我们更深入地挖掘一下:
是什么让 Rust 如此安全?
通常,开发人员的主要目标是构建功能,确保功能强大且易于使用——甚至可能是他们乐于在简历中炫耀的自豪之源。开发人员创建一些很棒的软件,将其交付并继续进行下一个大项目,这是完全正常的。此时,安全团队会检查漏洞,如果发现漏洞,他们 “完成的” 应用程序可能会返回给他们的团队进行修复。问题可能很简单,也可能完全超出了开发人员修复的合理范围。
问题在于,从表面上看,安全漏洞根本不明显,如果扫描、测试和手动代码审查未能发现这些漏洞,那么攻击者就有可能利用这小的机会来利用这个漏洞。
现在,Rust 试图从一开始就阻止许多漏洞进入代码:如果存在语法错误或其他导致生产问题的内存安全错误,它根本无法编译。从设计上讲,这是内存安全的编程,可确保无法访问无效内存(无论软件如何执行)。并且 70% 的安全漏洞是由内存管理相关问题造成的,这是一项了不起的壮举。
Rust 会标记并防止:
- 缓冲区溢出
- 免费后使用
- 双重免费
- 空指针取消引用
- 使用未初始化的内存
如果我们将 Rust 代码片段与 C++ 进行比较,就会发现一个代码片段在默认情况下是安全的。看看这个缓冲区溢出错误的示例:
#include<iostream></iostream>
#include<string.h></string.h>
int main(无效){
char a [3] = “12”;
char b [4] = “123”;
strcpy (a, b);//由于 b 的 len 大于 a 时出现缓冲区溢出
std:: cout << a << “;” << b << std:: endl;
}
Vs.
pub fn main () {
让 mut a: [char; 2] = [1, 2];
让 b: [char; 3] = [1, 2, 3];
a.copy_from_slice (&b);
}

Rust 会发出安全警告,并在运行时到达 copy_from_slice 函数时出现恐慌以防止缓冲区溢出,但在编译时却没有。
从这个意义上讲,它在很大程度上是 “从左开始” 的语言之一。它将突出显示错误,并强制教会开发人员编写代码的正确方法,以避免引入与内存相关的安全漏洞,因此能否按时完成取决于编码人员的关注、补救和忠于交付路径。
这种语言的方法看似简单,但如果能让它运用这种强大的逻辑,那将是一项了不起的壮举,而且它确实能走上正轨。从安全的角度来看,Rust 是一次巨大的飞跃... 只要有更多的人使用它。像 Dropbox 这样的公司正在率先在企业范围内大规模使用它,这真是令人高兴。但是,在我们得出结论,收养问题是阻碍我们走向更安全的未来的唯一结论之前,还有更多的考虑因素。
Rust 的清算。
有几个小(好吧,大)问题,即在 Rust 中编程比看起来更容易引入错误。它会 不 修复最重要的 OWASP 十大漏洞,这些漏洞继续导致漏洞、延迟和普遍的不安全编码技术文化。还有一种天使与魔鬼的动态,或者更广为人知的是: 安全生锈与不安全生锈。
正如中所解释的那样 官方文档,Safe Rust 是 Rust 的 “真正” 形式,Unsafe Rust 包含被认为是 “绝对不安全” 的函数,尽管它们有时是必要的,例如需要与其他语言的某些东西集成。但是,即使使用了 Unsafe Rust,附加功能的清单仍然有限。在 Unsafe Rust 中,可以在不安全的区块中执行以下操作:
- 取消引用原始指针
- 调用不安全的函数(包括 C 函数、编译器内在函数和原始分配器)
- 实现不安全特征
- 突变静态数据
- 访问工会的字段。
即使在所谓的 “不安全” 模式下,Rust 编程的超能力之一仍然起作用:“借款检查器”。它通常通过静态代码分析来防止内存问题、并行计算中的冲突和许多其他错误,并且这种分析仍会在不安全的块中进行检查——在某些情况下,编译器无需介入指导即可编写不安全的构造只需要做更多的工作即可。
对于大多数有经验的开发人员来说,这似乎不是什么大问题——毕竟,众所周知,我们会修改应用程序并开放一些更酷的功能——但它可能会打开一个黑洞,可能导致严重的配置错误和安全漏洞:未定义的行为。与 C 或 C++ 相比,使用 Rust 编程(即使使用不安全)可以很好地锁定漏洞的可能性,但是调用未定义的行为可能会带来风险。
对开发人员主导的安全编码的依赖到此结束了吗?
还记得我之前说过 Rust 有众所周知语言的组件吗?Rust 的主要安全漏洞之一是,它包含众所周知语言的组件,即 C。
Rust 仍然是一种 “安全的编程语言”,但同样,引入用户是事情可以解开的地方。开发人员仍然可以对其进行调整以使其在不标记错误的情况下运行(这是一个有吸引力的主张,因为这样可以解锁更多功能),从本质上讲,即使处于安全状态,开发人员仍然可以随心所欲地处于 “不安全” 状态,因为在事情真正出错之前,他们有一层指导和保护。
随着我们深入研究,上述两种情况都变得更加危险,因为 Rust 的结果与扫描工具相似——就像没有瑞士陆军 SAST/DAST/RAST/IAST 工具可以扫描每个漏洞、每个攻击向量和每个问题一样,Rust 也没有。即使使用 Rust 仍然可以很容易地引入一些漏洞。
运行 Unsafe Rust 时存在的未定义行为风险有可能引发整数溢出问题,而总的来说,即使是安全配置也无法防止安全配置错误中的人为错误, 商业逻辑,或者使用具有已知漏洞的组件。如果不进行修补,这些问题仍然构成非常现实的威胁,并且在像真正的 Rust 这样的 “假定安全” 的环境中,如果程序员认为无论如何都会解决所有重大问题,则甚至可能导致一些自鸣得意的行为。
我发现 Rust 与编程导师没什么不同,编程导师是一位高级工程师,他花时间与经验不足的编码人员坐在一起,审查他们的工作,向他们展示潜在的错误,指出效率,在某些情况下,还要确保直到正确才编译。但是,对于 Rust 程序员来说,自己学习理论并致力于最佳实践要好得多,因为那位导师可能只是削减了围裙的束缚,你不想袖手旁观。
准备好立即查找和修复常见的 Rust 漏洞了吗? 玩挑战赛。

在过去的几年中,似乎全世界的软件工程师对 Rust 的利用不足以进行编程。这种相对较新的系统编程语言,由 Mozilla,吸引了 Stack Overflow 社区的心——而且,作为一个极不可能遭受傻瓜之苦的群体,当他们投票时”最受欢迎的编程语言“连续五年,是我们所有人坐下来注意的时候了。
Rust 编程语言融合了常用语言中的已知和功能元素,采用了一种不同的理念,既考虑了复杂性,又引入了性能和安全性。这是一个学习曲线,许多开发者没有机会过多地玩它- 在Stack Overflow上接受调查的受访者中, 常用它。但是,除此之外,不可否认的是,它是一种令人兴奋的语言,并且比其前身(例如C和C++)具有更大的安全火力。大规模采用将需要一些行为和技术上的改变... 但是目前,它仍在理论层面上吸引着开发者的注意力。
... 但是等等,我们还需要阐明一件事:值得注意的是,Rust 是一种编程语言,它优先考虑内存安全,并消除与常见内存管理问题相关的安全漏洞。这些都很重要(无疑会导致不止一些 AppSec 团队的偏头痛),但它们并不是我们面临的唯一安全编码挑战。
Rust 到底能阻止什么?在安全格局中,我们还面临哪些风险?让我们来解开最新的编程独角兽:
现代内存安全系统编程的新前沿
Mozilla 的研发团队参与了一些不可思议的项目,作为开源开拓者投资 Rust 编程也不例外。他们的 入门视频 为他们的精神提供了一些见解,关键主题非常明确:当前的软件安全方法存在缺陷,而 Rust 旨在解决大部分问题。
这似乎太简单了,尤其是因为我们每隔一天就会面临巨大的数据泄露——就像最近报道的可怕失误一样 易捷航空。数百万条数据记录经常遭到泄露,几乎都是网络应用程序漏洞造成的, 安全配置错误,或者网络钓鱼攻击,像 C++ 这样的语言已经存在了数十年。但是,这还不足以让开发人员掌握它们,以至于实现安全编码最佳实践。为什么 Rust 应该有所不同?新语言之前已经问世,这并不是说他们找到了消除常见漏洞的方法,也没有确保编写的任何代码在编译时神奇地完美无缺。
尽管概念可能很简单,但有时是简单的答案可以克服复杂的问题。从任何意义上讲,Rust 是内存安全系统编程的一场革命,它在许多方面兑现了承诺... 而且它无疑为那些容易引入错误的开发人员省钱,如果不被发现,这些错误可能会导致重大问题。对于没有安全意识的开发人员来说,Java、C、C++,甚至像科特林和Golang这样的新语言仍然相当无情。有了这些,就没有内在的警告,也没有特别的迹象表明刚刚编译的这个很棒的功能隐藏着安全隐患。
那么,让我们更深入地挖掘一下:
是什么让 Rust 如此安全?
通常,开发人员的主要目标是构建功能,确保功能强大且易于使用——甚至可能是他们乐于在简历中炫耀的自豪之源。开发人员创建一些很棒的软件,将其交付并继续进行下一个大项目,这是完全正常的。此时,安全团队会检查漏洞,如果发现漏洞,他们 “完成的” 应用程序可能会返回给他们的团队进行修复。问题可能很简单,也可能完全超出了开发人员修复的合理范围。
问题在于,从表面上看,安全漏洞根本不明显,如果扫描、测试和手动代码审查未能发现这些漏洞,那么攻击者就有可能利用这小的机会来利用这个漏洞。
现在,Rust 试图从一开始就阻止许多漏洞进入代码:如果存在语法错误或其他导致生产问题的内存安全错误,它根本无法编译。从设计上讲,这是内存安全的编程,可确保无法访问无效内存(无论软件如何执行)。并且 70% 的安全漏洞是由内存管理相关问题造成的,这是一项了不起的壮举。
Rust 会标记并防止:
- 缓冲区溢出
- 免费后使用
- 双重免费
- 空指针取消引用
- 使用未初始化的内存
如果我们将 Rust 代码片段与 C++ 进行比较,就会发现一个代码片段在默认情况下是安全的。看看这个缓冲区溢出错误的示例:
#include<iostream></iostream>
#include<string.h></string.h>
int main(无效){
char a [3] = “12”;
char b [4] = “123”;
strcpy (a, b);//由于 b 的 len 大于 a 时出现缓冲区溢出
std:: cout << a << “;” << b << std:: endl;
}
Vs.
pub fn main () {
让 mut a: [char; 2] = [1, 2];
让 b: [char; 3] = [1, 2, 3];
a.copy_from_slice (&b);
}

Rust 会发出安全警告,并在运行时到达 copy_from_slice 函数时出现恐慌以防止缓冲区溢出,但在编译时却没有。
从这个意义上讲,它在很大程度上是 “从左开始” 的语言之一。它将突出显示错误,并强制教会开发人员编写代码的正确方法,以避免引入与内存相关的安全漏洞,因此能否按时完成取决于编码人员的关注、补救和忠于交付路径。
这种语言的方法看似简单,但如果能让它运用这种强大的逻辑,那将是一项了不起的壮举,而且它确实能走上正轨。从安全的角度来看,Rust 是一次巨大的飞跃... 只要有更多的人使用它。像 Dropbox 这样的公司正在率先在企业范围内大规模使用它,这真是令人高兴。但是,在我们得出结论,收养问题是阻碍我们走向更安全的未来的唯一结论之前,还有更多的考虑因素。
Rust 的清算。
有几个小(好吧,大)问题,即在 Rust 中编程比看起来更容易引入错误。它会 不 修复最重要的 OWASP 十大漏洞,这些漏洞继续导致漏洞、延迟和普遍的不安全编码技术文化。还有一种天使与魔鬼的动态,或者更广为人知的是: 安全生锈与不安全生锈。
正如中所解释的那样 官方文档,Safe Rust 是 Rust 的 “真正” 形式,Unsafe Rust 包含被认为是 “绝对不安全” 的函数,尽管它们有时是必要的,例如需要与其他语言的某些东西集成。但是,即使使用了 Unsafe Rust,附加功能的清单仍然有限。在 Unsafe Rust 中,可以在不安全的区块中执行以下操作:
- 取消引用原始指针
- 调用不安全的函数(包括 C 函数、编译器内在函数和原始分配器)
- 实现不安全特征
- 突变静态数据
- 访问工会的字段。
即使在所谓的 “不安全” 模式下,Rust 编程的超能力之一仍然起作用:“借款检查器”。它通常通过静态代码分析来防止内存问题、并行计算中的冲突和许多其他错误,并且这种分析仍会在不安全的块中进行检查——在某些情况下,编译器无需介入指导即可编写不安全的构造只需要做更多的工作即可。
对于大多数有经验的开发人员来说,这似乎不是什么大问题——毕竟,众所周知,我们会修改应用程序并开放一些更酷的功能——但它可能会打开一个黑洞,可能导致严重的配置错误和安全漏洞:未定义的行为。与 C 或 C++ 相比,使用 Rust 编程(即使使用不安全)可以很好地锁定漏洞的可能性,但是调用未定义的行为可能会带来风险。
对开发人员主导的安全编码的依赖到此结束了吗?
还记得我之前说过 Rust 有众所周知语言的组件吗?Rust 的主要安全漏洞之一是,它包含众所周知语言的组件,即 C。
Rust 仍然是一种 “安全的编程语言”,但同样,引入用户是事情可以解开的地方。开发人员仍然可以对其进行调整以使其在不标记错误的情况下运行(这是一个有吸引力的主张,因为这样可以解锁更多功能),从本质上讲,即使处于安全状态,开发人员仍然可以随心所欲地处于 “不安全” 状态,因为在事情真正出错之前,他们有一层指导和保护。
随着我们深入研究,上述两种情况都变得更加危险,因为 Rust 的结果与扫描工具相似——就像没有瑞士陆军 SAST/DAST/RAST/IAST 工具可以扫描每个漏洞、每个攻击向量和每个问题一样,Rust 也没有。即使使用 Rust 仍然可以很容易地引入一些漏洞。
运行 Unsafe Rust 时存在的未定义行为风险有可能引发整数溢出问题,而总的来说,即使是安全配置也无法防止安全配置错误中的人为错误, 商业逻辑,或者使用具有已知漏洞的组件。如果不进行修补,这些问题仍然构成非常现实的威胁,并且在像真正的 Rust 这样的 “假定安全” 的环境中,如果程序员认为无论如何都会解决所有重大问题,则甚至可能导致一些自鸣得意的行为。
我发现 Rust 与编程导师没什么不同,编程导师是一位高级工程师,他花时间与经验不足的编码人员坐在一起,审查他们的工作,向他们展示潜在的错误,指出效率,在某些情况下,还要确保直到正确才编译。但是,对于 Rust 程序员来说,自己学习理论并致力于最佳实践要好得多,因为那位导师可能只是削减了围裙的束缚,你不想袖手旁观。
准备好立即查找和修复常见的 Rust 漏洞了吗? 玩挑战赛。

Klicken Sie auf den folgenden Link und laden Sie die PDF-Datei dieser Ressource herunter.
Secure Code Warrior kann Ihrem Unternehmen dabei helfen, Code während des gesamten Softwareentwicklungszyklus zu schützen und eine Kultur zu schaffen, in der Cybersicherheit an erster Stelle steht. Ganz gleich, ob Sie AppSec-Manager, Entwickler, Chief Information Security Officer oder in einem anderen sicherheitsrelevanten Bereich tätig sind – wir können Ihrem Unternehmen dabei helfen, die mit unsicherem Code verbundenen Risiken zu minimieren.
Bericht anzeigenDemo buchenMatias Madou, Ph.D., ist Sicherheitsexperte, Forscher, CTO und Mitbegründer von Secure Code Warrior. Matias promovierte an der Universität Gent im Bereich Anwendungssicherheit und konzentrierte sich dabei auf statische Analyselösungen. Später wechselte er zu Fortify in den USA, wo er erkannte, dass es nicht ausreicht, nur Codeprobleme zu erkennen, ohne den Entwicklern beim Schreiben von sicherem Code zu helfen. Dies inspirierte ihn dazu, Produkte zu entwickeln, die Entwickler unterstützen, den Aufwand für die Sicherheit verringern und die Erwartungen der Kunden übertreffen. Wenn er nicht an seinem Schreibtisch im Team Awesome sitzt, steht er gerne auf der Bühne und hält Vorträge auf Konferenzen wie der RSA Conference, BlackHat und DefCon.
Matias ist ein Forscher und Entwickler mit mehr als 15 Jahren praktischer Erfahrung im Bereich der Softwaresicherheit. Er hat Lösungen für Unternehmen wie Fortify Software und sein eigenes Unternehmen Sensei Security entwickelt. Im Laufe seiner Karriere hat Matias mehrere Forschungsprojekte zur Anwendungssicherheit geleitet, die zu kommerziellen Produkten geführt haben, und kann auf über 10 Patente verweisen. Wenn er nicht am Schreibtisch sitzt, ist Matias als Ausbilder für fortgeschrittene Anwendungssicherheitstrainings courses tätig und hält regelmäßig Vorträge auf globalen Konferenzen wie RSA Conference, Black Hat, DefCon, BSIMM, OWASP AppSec und BruCon.
Matias hat einen Doktortitel in Computertechnik von der Universität Gent, wo er die Sicherheit von Anwendungen durch Programmverschleierung untersuchte, um die innere Funktionsweise einer Anwendung zu verbergen.
在过去的几年中,似乎全世界的软件工程师对 Rust 的利用不足以进行编程。这种相对较新的系统编程语言,由 Mozilla,吸引了 Stack Overflow 社区的心——而且,作为一个极不可能遭受傻瓜之苦的群体,当他们投票时”最受欢迎的编程语言“连续五年,是我们所有人坐下来注意的时候了。
Rust 编程语言融合了常用语言中的已知和功能元素,采用了一种不同的理念,既考虑了复杂性,又引入了性能和安全性。这是一个学习曲线,许多开发者没有机会过多地玩它- 在Stack Overflow上接受调查的受访者中, 常用它。但是,除此之外,不可否认的是,它是一种令人兴奋的语言,并且比其前身(例如C和C++)具有更大的安全火力。大规模采用将需要一些行为和技术上的改变... 但是目前,它仍在理论层面上吸引着开发者的注意力。
... 但是等等,我们还需要阐明一件事:值得注意的是,Rust 是一种编程语言,它优先考虑内存安全,并消除与常见内存管理问题相关的安全漏洞。这些都很重要(无疑会导致不止一些 AppSec 团队的偏头痛),但它们并不是我们面临的唯一安全编码挑战。
Rust 到底能阻止什么?在安全格局中,我们还面临哪些风险?让我们来解开最新的编程独角兽:
现代内存安全系统编程的新前沿
Mozilla 的研发团队参与了一些不可思议的项目,作为开源开拓者投资 Rust 编程也不例外。他们的 入门视频 为他们的精神提供了一些见解,关键主题非常明确:当前的软件安全方法存在缺陷,而 Rust 旨在解决大部分问题。
这似乎太简单了,尤其是因为我们每隔一天就会面临巨大的数据泄露——就像最近报道的可怕失误一样 易捷航空。数百万条数据记录经常遭到泄露,几乎都是网络应用程序漏洞造成的, 安全配置错误,或者网络钓鱼攻击,像 C++ 这样的语言已经存在了数十年。但是,这还不足以让开发人员掌握它们,以至于实现安全编码最佳实践。为什么 Rust 应该有所不同?新语言之前已经问世,这并不是说他们找到了消除常见漏洞的方法,也没有确保编写的任何代码在编译时神奇地完美无缺。
尽管概念可能很简单,但有时是简单的答案可以克服复杂的问题。从任何意义上讲,Rust 是内存安全系统编程的一场革命,它在许多方面兑现了承诺... 而且它无疑为那些容易引入错误的开发人员省钱,如果不被发现,这些错误可能会导致重大问题。对于没有安全意识的开发人员来说,Java、C、C++,甚至像科特林和Golang这样的新语言仍然相当无情。有了这些,就没有内在的警告,也没有特别的迹象表明刚刚编译的这个很棒的功能隐藏着安全隐患。
那么,让我们更深入地挖掘一下:
是什么让 Rust 如此安全?
通常,开发人员的主要目标是构建功能,确保功能强大且易于使用——甚至可能是他们乐于在简历中炫耀的自豪之源。开发人员创建一些很棒的软件,将其交付并继续进行下一个大项目,这是完全正常的。此时,安全团队会检查漏洞,如果发现漏洞,他们 “完成的” 应用程序可能会返回给他们的团队进行修复。问题可能很简单,也可能完全超出了开发人员修复的合理范围。
问题在于,从表面上看,安全漏洞根本不明显,如果扫描、测试和手动代码审查未能发现这些漏洞,那么攻击者就有可能利用这小的机会来利用这个漏洞。
现在,Rust 试图从一开始就阻止许多漏洞进入代码:如果存在语法错误或其他导致生产问题的内存安全错误,它根本无法编译。从设计上讲,这是内存安全的编程,可确保无法访问无效内存(无论软件如何执行)。并且 70% 的安全漏洞是由内存管理相关问题造成的,这是一项了不起的壮举。
Rust 会标记并防止:
- 缓冲区溢出
- 免费后使用
- 双重免费
- 空指针取消引用
- 使用未初始化的内存
如果我们将 Rust 代码片段与 C++ 进行比较,就会发现一个代码片段在默认情况下是安全的。看看这个缓冲区溢出错误的示例:
#include<iostream></iostream>
#include<string.h></string.h>
int main(无效){
char a [3] = “12”;
char b [4] = “123”;
strcpy (a, b);//由于 b 的 len 大于 a 时出现缓冲区溢出
std:: cout << a << “;” << b << std:: endl;
}
Vs.
pub fn main () {
让 mut a: [char; 2] = [1, 2];
让 b: [char; 3] = [1, 2, 3];
a.copy_from_slice (&b);
}

Rust 会发出安全警告,并在运行时到达 copy_from_slice 函数时出现恐慌以防止缓冲区溢出,但在编译时却没有。
从这个意义上讲,它在很大程度上是 “从左开始” 的语言之一。它将突出显示错误,并强制教会开发人员编写代码的正确方法,以避免引入与内存相关的安全漏洞,因此能否按时完成取决于编码人员的关注、补救和忠于交付路径。
这种语言的方法看似简单,但如果能让它运用这种强大的逻辑,那将是一项了不起的壮举,而且它确实能走上正轨。从安全的角度来看,Rust 是一次巨大的飞跃... 只要有更多的人使用它。像 Dropbox 这样的公司正在率先在企业范围内大规模使用它,这真是令人高兴。但是,在我们得出结论,收养问题是阻碍我们走向更安全的未来的唯一结论之前,还有更多的考虑因素。
Rust 的清算。
有几个小(好吧,大)问题,即在 Rust 中编程比看起来更容易引入错误。它会 不 修复最重要的 OWASP 十大漏洞,这些漏洞继续导致漏洞、延迟和普遍的不安全编码技术文化。还有一种天使与魔鬼的动态,或者更广为人知的是: 安全生锈与不安全生锈。
正如中所解释的那样 官方文档,Safe Rust 是 Rust 的 “真正” 形式,Unsafe Rust 包含被认为是 “绝对不安全” 的函数,尽管它们有时是必要的,例如需要与其他语言的某些东西集成。但是,即使使用了 Unsafe Rust,附加功能的清单仍然有限。在 Unsafe Rust 中,可以在不安全的区块中执行以下操作:
- 取消引用原始指针
- 调用不安全的函数(包括 C 函数、编译器内在函数和原始分配器)
- 实现不安全特征
- 突变静态数据
- 访问工会的字段。
即使在所谓的 “不安全” 模式下,Rust 编程的超能力之一仍然起作用:“借款检查器”。它通常通过静态代码分析来防止内存问题、并行计算中的冲突和许多其他错误,并且这种分析仍会在不安全的块中进行检查——在某些情况下,编译器无需介入指导即可编写不安全的构造只需要做更多的工作即可。
对于大多数有经验的开发人员来说,这似乎不是什么大问题——毕竟,众所周知,我们会修改应用程序并开放一些更酷的功能——但它可能会打开一个黑洞,可能导致严重的配置错误和安全漏洞:未定义的行为。与 C 或 C++ 相比,使用 Rust 编程(即使使用不安全)可以很好地锁定漏洞的可能性,但是调用未定义的行为可能会带来风险。
对开发人员主导的安全编码的依赖到此结束了吗?
还记得我之前说过 Rust 有众所周知语言的组件吗?Rust 的主要安全漏洞之一是,它包含众所周知语言的组件,即 C。
Rust 仍然是一种 “安全的编程语言”,但同样,引入用户是事情可以解开的地方。开发人员仍然可以对其进行调整以使其在不标记错误的情况下运行(这是一个有吸引力的主张,因为这样可以解锁更多功能),从本质上讲,即使处于安全状态,开发人员仍然可以随心所欲地处于 “不安全” 状态,因为在事情真正出错之前,他们有一层指导和保护。
随着我们深入研究,上述两种情况都变得更加危险,因为 Rust 的结果与扫描工具相似——就像没有瑞士陆军 SAST/DAST/RAST/IAST 工具可以扫描每个漏洞、每个攻击向量和每个问题一样,Rust 也没有。即使使用 Rust 仍然可以很容易地引入一些漏洞。
运行 Unsafe Rust 时存在的未定义行为风险有可能引发整数溢出问题,而总的来说,即使是安全配置也无法防止安全配置错误中的人为错误, 商业逻辑,或者使用具有已知漏洞的组件。如果不进行修补,这些问题仍然构成非常现实的威胁,并且在像真正的 Rust 这样的 “假定安全” 的环境中,如果程序员认为无论如何都会解决所有重大问题,则甚至可能导致一些自鸣得意的行为。
我发现 Rust 与编程导师没什么不同,编程导师是一位高级工程师,他花时间与经验不足的编码人员坐在一起,审查他们的工作,向他们展示潜在的错误,指出效率,在某些情况下,还要确保直到正确才编译。但是,对于 Rust 程序员来说,自己学习理论并致力于最佳实践要好得多,因为那位导师可能只是削减了围裙的束缚,你不想袖手旁观。
准备好立即查找和修复常见的 Rust 漏洞了吗? 玩挑战赛。
Verzeichnis
Matias Madou, Ph.D., ist Sicherheitsexperte, Forscher, CTO und Mitbegründer von Secure Code Warrior. Matias promovierte an der Universität Gent im Bereich Anwendungssicherheit und konzentrierte sich dabei auf statische Analyselösungen. Später wechselte er zu Fortify in den USA, wo er erkannte, dass es nicht ausreicht, nur Codeprobleme zu erkennen, ohne den Entwicklern beim Schreiben von sicherem Code zu helfen. Dies inspirierte ihn dazu, Produkte zu entwickeln, die Entwickler unterstützen, den Aufwand für die Sicherheit verringern und die Erwartungen der Kunden übertreffen. Wenn er nicht an seinem Schreibtisch im Team Awesome sitzt, steht er gerne auf der Bühne und hält Vorträge auf Konferenzen wie der RSA Conference, BlackHat und DefCon.

Secure Code Warrior kann Ihrem Unternehmen dabei helfen, Code während des gesamten Softwareentwicklungszyklus zu schützen und eine Kultur zu schaffen, in der Cybersicherheit an erster Stelle steht. Ganz gleich, ob Sie AppSec-Manager, Entwickler, Chief Information Security Officer oder in einem anderen sicherheitsrelevanten Bereich tätig sind – wir können Ihrem Unternehmen dabei helfen, die mit unsicherem Code verbundenen Risiken zu minimieren.
Demo buchen下载Ressourcen, die Ihnen den Einstieg erleichtern
Themen und Inhalte der Sicherheitsschulung
Unsere branchenführenden Inhalte werden ständig weiterentwickelt, um sich an die sich wandelnde Softwareentwicklungslandschaft anzupassen und gleichzeitig Ihre Rolle zu berücksichtigen. Die Themen reichen von KI bis hin zu XQuery-Injection und sind für verschiedene Positionen geeignet, von Architekten und Ingenieuren bis hin zu Produktmanagern und QA-Mitarbeitern. Verschaffen Sie sich einen ersten Überblick nach Themen und Rollen und erfahren Sie, was unser Inhaltsverzeichnis zu bieten hat.
Die Kamer van Koophandel setzt Maßstäbe für entwicklergesteuerte Sicherheit in großem Maßstab
Die Kamer van Koophandel berichtet, wie sie sicheres Codieren durch rollenbasierte Zertifizierungen, Trust Score-Benchmarking und eine Kultur der gemeinsamen Verantwortung für Sicherheit in die tägliche Entwicklungsarbeit integriert hat.
Bedrohungsmodellierung mit KI: So wird jeder Entwickler zum Bedrohungsmodellierer
Sie werden besser gerüstet sein, um Entwicklern dabei zu helfen, Ideen und Techniken zur Bedrohungsmodellierung mit den KI-Tools zu kombinieren, die sie bereits verwenden, um die Sicherheit zu erhöhen, die Zusammenarbeit zu verbessern und von Anfang an widerstandsfähigere Software zu entwickeln.
Ressourcen, die Ihnen den Einstieg erleichtern
Cybermon ist zurück: Die KI-Mission zum Besiegen des Bosses ist jetzt auf Abruf verfügbar.
Cybermon 2025: Der Kampf gegen den Boss hat nun in SCW ganzjährig begonnen. Der Kampf um die Sicherheit von KI/LLM auf Stammesebene, die Entwicklung von Sicherheits-KI wird durch groß angelegte Modelle verstärkt.
Auslegung des Gesetzes zur Netzresilienz: Was bedeutet es, durch die Entwicklung von Design-Software Sicherheit zu erreichen?
Verstehen Sie die Anforderungen des EU-Gesetzes zur Netzresilienz (CRA), für wen es gilt und wie sich Ingenieurteams durch Designpraktiken, Schwachstellenprävention und Kompetenzaufbau für Entwickler darauf vorbereiten können.
Treibende Faktoren 1: Klare und messbare Erfolgskriterien
Enabler 1 ist der Auftakt zu unserer 10-teiligen Reihe über Erfolgsfaktoren. Er zeigt, wie sichere Codierung mit Geschäftsergebnissen wie Risikominderung und schnellerer Reifung langfristiger Pläne in Verbindung gebracht werden kann.




%20(1).avif)
.avif)
