
什么是特洛伊木马源以及它是如何潜入您的源代码的
11月初,剑桥大学发布了他们的 名为 Trojan-Source 的研究。这项研究的重点是如何使用定向格式化字符将后门隐藏在源代码和注释中。它们可用于编写代码,编译器对逻辑的解释与人工代码审查员的解释有所不同。
这个漏洞是新出现的,尽管过去曾有人恶意使用 Unicode,例如通过以下方式隐藏文件的真实文件扩展名 反转文件名最后一部分的方向。最近的研究表明,许多编译器会在没有警告的情况下忽略源代码中的Unicode字符,而包括代码编辑器在内的文本编辑器可能会重排包含注释和基于这些字符的代码的行。因此,编辑器显示代码和注释的方式可能与编译器解析代码和注释的方式有所不同,甚至可以互换代码和注释。
请继续阅读以了解更多信息。或者,如果你想卷起袖子试一试 Trojan Source 的模拟黑客攻击,可以试试我们的免费版 公共使命 亲自体验一下。
双向文本
其中一种特洛伊木马源攻击使用了 Unicode Bidi(双向)算法,该算法处理如何将具有不同显示顺序(例如英语(从左到右)和阿拉伯语(从右到左)的文本组合在一起。定向格式化字符可用于重新组织分组和显示字符顺序。
上表包含一些与攻击有关的 Bidi 替换角色。举个例子,
RLI e d o c PDI
缩写 RLI 代表 从右到左隔离。它将把文本与其上下文隔离开来(由 PDI 分隔, 流行定向隔离),并将从右向左读取。导致:
c o d e
但是,编译器和解释器通常不会在解析源代码之前处理格式控制字符,包括 Bidi 覆盖。如果他们只是忽略方向格式化字符,他们就会解析:
e d o c
新瓶装旧酒?
当然,这在阳光下并不是什么新鲜事。过去,定向格式化字符是 插入到文件名中 掩盖他们的恶意本质。如果不是 RLO,显示为 “myspecialexe.doc” 的电子邮件附件可能看起来足够纯真 (从右到左的超控) 出现的角色显示真名是 “myspecialcod.exe”。
Trojan Source 攻击会在源代码中的注释和字符串中插入定向格式化字符,因为这些字符不会生成任何语法或编译错误。这些控制字符改变了代码逻辑的显示顺序,导致编译器读取的内容与人类读取的内容完全不同。
例如,一个按此顺序包含以下字节的文件:

将按方向格式化字符进行重新排序,如下所示

如果没有明确调出方向格式化字符,则会导致代码像这样呈现:

RLO 在最后一行将右大括号翻转为左大括号,反之亦然。执行此代码的结果将是:“你是管理员”。管理员支票被注释掉了,但是控制角色给人的印象是它仍然存在。
(来源:https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)
这会对你产生什么影响?
许多语言都容易受到攻击:C、C++、C#、JavaScript、Java、Rust、Go 和 Python,据推测还有更多。现在,普通的开发人员可能会对在源代码中看到定向格式化字符不屑一顾,但新手也可能耸了耸肩,什么都不想。此外,这些角色的可视化高度依赖于 IDE,因此不能保证它们会被发现。
但是,这个漏洞一开始怎么会潜入源代码呢?首先,当使用来自不可信来源的源代码时,可能会发生这种情况,而恶意代码贡献却没有被注意到。其次,这可以通过简单地从互联网上找到的代码中复制粘贴来实现,这是我们大多数开发人员以前做过的事情。大多数组织依赖来自多个供应商的软件组件。这就提出了一个问题,我们可以在多大程度上完全信任和依赖这段代码?我们如何筛选包含隐藏后门的源代码?
这是谁的问题?
一方面,编译器和编译管道应禁止使用多个方向的源代码行,除非一个方向严格限于字符串和注释。请注意,字符串或注释中的方向格式化字符如果没有弹出,则可以将方向变化延伸到行尾。通常,代码编辑器应明确呈现和突出显示可疑的 Unicode 字符,例如同形文字和定向格式化字符。自 11 月以来,GitHub 现在会在每行包含双向 unicode 文本的代码中添加警告标志和消息,尽管它没有突出显示这些字符在行中的位置。这仍可能允许恶意的方向改变以及良性的方向变化潜入。
开发人员和代码审查者的意识至关重要,这就是为什么我们创建了一个演练来说明漏洞。目前,本演练可用于 Java、C#、Python、GO 和 PHP。
因此,如果您想了解更多,请尝试我们的 Trojan Source 的模拟(公共任务),然后阅读 特洛伊木马来源研究。

Secure Code Warrior puede ayudar a su organización a proteger el código a lo largo de todo el ciclo de vida del desarrollo de software y a crear una cultura que dé prioridad a la ciberseguridad. Tanto si es usted responsable de seguridad de aplicaciones, desarrollador, director de seguridad de la información o cualquier otra persona relacionada con la seguridad, podemos ayudar a su organización a reducir los riesgos asociados al código inseguro.
Reservar una demostraciónLaura Verheyde es una desarrolladora de software en Secure Code Warrior centrada en la investigación de vulnerabilidades y la creación de contenidos para Missions y Coding labs.


11月初,剑桥大学发布了他们的 名为 Trojan-Source 的研究。这项研究的重点是如何使用定向格式化字符将后门隐藏在源代码和注释中。它们可用于编写代码,编译器对逻辑的解释与人工代码审查员的解释有所不同。
这个漏洞是新出现的,尽管过去曾有人恶意使用 Unicode,例如通过以下方式隐藏文件的真实文件扩展名 反转文件名最后一部分的方向。最近的研究表明,许多编译器会在没有警告的情况下忽略源代码中的Unicode字符,而包括代码编辑器在内的文本编辑器可能会重排包含注释和基于这些字符的代码的行。因此,编辑器显示代码和注释的方式可能与编译器解析代码和注释的方式有所不同,甚至可以互换代码和注释。
请继续阅读以了解更多信息。或者,如果你想卷起袖子试一试 Trojan Source 的模拟黑客攻击,可以试试我们的免费版 公共使命 亲自体验一下。
双向文本
其中一种特洛伊木马源攻击使用了 Unicode Bidi(双向)算法,该算法处理如何将具有不同显示顺序(例如英语(从左到右)和阿拉伯语(从右到左)的文本组合在一起。定向格式化字符可用于重新组织分组和显示字符顺序。
上表包含一些与攻击有关的 Bidi 替换角色。举个例子,
RLI e d o c PDI
缩写 RLI 代表 从右到左隔离。它将把文本与其上下文隔离开来(由 PDI 分隔, 流行定向隔离),并将从右向左读取。导致:
c o d e
但是,编译器和解释器通常不会在解析源代码之前处理格式控制字符,包括 Bidi 覆盖。如果他们只是忽略方向格式化字符,他们就会解析:
e d o c
新瓶装旧酒?
当然,这在阳光下并不是什么新鲜事。过去,定向格式化字符是 插入到文件名中 掩盖他们的恶意本质。如果不是 RLO,显示为 “myspecialexe.doc” 的电子邮件附件可能看起来足够纯真 (从右到左的超控) 出现的角色显示真名是 “myspecialcod.exe”。
Trojan Source 攻击会在源代码中的注释和字符串中插入定向格式化字符,因为这些字符不会生成任何语法或编译错误。这些控制字符改变了代码逻辑的显示顺序,导致编译器读取的内容与人类读取的内容完全不同。
例如,一个按此顺序包含以下字节的文件:

将按方向格式化字符进行重新排序,如下所示

如果没有明确调出方向格式化字符,则会导致代码像这样呈现:

RLO 在最后一行将右大括号翻转为左大括号,反之亦然。执行此代码的结果将是:“你是管理员”。管理员支票被注释掉了,但是控制角色给人的印象是它仍然存在。
(来源:https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)
这会对你产生什么影响?
许多语言都容易受到攻击:C、C++、C#、JavaScript、Java、Rust、Go 和 Python,据推测还有更多。现在,普通的开发人员可能会对在源代码中看到定向格式化字符不屑一顾,但新手也可能耸了耸肩,什么都不想。此外,这些角色的可视化高度依赖于 IDE,因此不能保证它们会被发现。
但是,这个漏洞一开始怎么会潜入源代码呢?首先,当使用来自不可信来源的源代码时,可能会发生这种情况,而恶意代码贡献却没有被注意到。其次,这可以通过简单地从互联网上找到的代码中复制粘贴来实现,这是我们大多数开发人员以前做过的事情。大多数组织依赖来自多个供应商的软件组件。这就提出了一个问题,我们可以在多大程度上完全信任和依赖这段代码?我们如何筛选包含隐藏后门的源代码?
这是谁的问题?
一方面,编译器和编译管道应禁止使用多个方向的源代码行,除非一个方向严格限于字符串和注释。请注意,字符串或注释中的方向格式化字符如果没有弹出,则可以将方向变化延伸到行尾。通常,代码编辑器应明确呈现和突出显示可疑的 Unicode 字符,例如同形文字和定向格式化字符。自 11 月以来,GitHub 现在会在每行包含双向 unicode 文本的代码中添加警告标志和消息,尽管它没有突出显示这些字符在行中的位置。这仍可能允许恶意的方向改变以及良性的方向变化潜入。
开发人员和代码审查者的意识至关重要,这就是为什么我们创建了一个演练来说明漏洞。目前,本演练可用于 Java、C#、Python、GO 和 PHP。
因此,如果您想了解更多,请尝试我们的 Trojan Source 的模拟(公共任务),然后阅读 特洛伊木马来源研究。

11月初,剑桥大学发布了他们的 名为 Trojan-Source 的研究。这项研究的重点是如何使用定向格式化字符将后门隐藏在源代码和注释中。它们可用于编写代码,编译器对逻辑的解释与人工代码审查员的解释有所不同。
这个漏洞是新出现的,尽管过去曾有人恶意使用 Unicode,例如通过以下方式隐藏文件的真实文件扩展名 反转文件名最后一部分的方向。最近的研究表明,许多编译器会在没有警告的情况下忽略源代码中的Unicode字符,而包括代码编辑器在内的文本编辑器可能会重排包含注释和基于这些字符的代码的行。因此,编辑器显示代码和注释的方式可能与编译器解析代码和注释的方式有所不同,甚至可以互换代码和注释。
请继续阅读以了解更多信息。或者,如果你想卷起袖子试一试 Trojan Source 的模拟黑客攻击,可以试试我们的免费版 公共使命 亲自体验一下。
双向文本
其中一种特洛伊木马源攻击使用了 Unicode Bidi(双向)算法,该算法处理如何将具有不同显示顺序(例如英语(从左到右)和阿拉伯语(从右到左)的文本组合在一起。定向格式化字符可用于重新组织分组和显示字符顺序。
上表包含一些与攻击有关的 Bidi 替换角色。举个例子,
RLI e d o c PDI
缩写 RLI 代表 从右到左隔离。它将把文本与其上下文隔离开来(由 PDI 分隔, 流行定向隔离),并将从右向左读取。导致:
c o d e
但是,编译器和解释器通常不会在解析源代码之前处理格式控制字符,包括 Bidi 覆盖。如果他们只是忽略方向格式化字符,他们就会解析:
e d o c
新瓶装旧酒?
当然,这在阳光下并不是什么新鲜事。过去,定向格式化字符是 插入到文件名中 掩盖他们的恶意本质。如果不是 RLO,显示为 “myspecialexe.doc” 的电子邮件附件可能看起来足够纯真 (从右到左的超控) 出现的角色显示真名是 “myspecialcod.exe”。
Trojan Source 攻击会在源代码中的注释和字符串中插入定向格式化字符,因为这些字符不会生成任何语法或编译错误。这些控制字符改变了代码逻辑的显示顺序,导致编译器读取的内容与人类读取的内容完全不同。
例如,一个按此顺序包含以下字节的文件:

将按方向格式化字符进行重新排序,如下所示

如果没有明确调出方向格式化字符,则会导致代码像这样呈现:

RLO 在最后一行将右大括号翻转为左大括号,反之亦然。执行此代码的结果将是:“你是管理员”。管理员支票被注释掉了,但是控制角色给人的印象是它仍然存在。
(来源:https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)
这会对你产生什么影响?
许多语言都容易受到攻击:C、C++、C#、JavaScript、Java、Rust、Go 和 Python,据推测还有更多。现在,普通的开发人员可能会对在源代码中看到定向格式化字符不屑一顾,但新手也可能耸了耸肩,什么都不想。此外,这些角色的可视化高度依赖于 IDE,因此不能保证它们会被发现。
但是,这个漏洞一开始怎么会潜入源代码呢?首先,当使用来自不可信来源的源代码时,可能会发生这种情况,而恶意代码贡献却没有被注意到。其次,这可以通过简单地从互联网上找到的代码中复制粘贴来实现,这是我们大多数开发人员以前做过的事情。大多数组织依赖来自多个供应商的软件组件。这就提出了一个问题,我们可以在多大程度上完全信任和依赖这段代码?我们如何筛选包含隐藏后门的源代码?
这是谁的问题?
一方面,编译器和编译管道应禁止使用多个方向的源代码行,除非一个方向严格限于字符串和注释。请注意,字符串或注释中的方向格式化字符如果没有弹出,则可以将方向变化延伸到行尾。通常,代码编辑器应明确呈现和突出显示可疑的 Unicode 字符,例如同形文字和定向格式化字符。自 11 月以来,GitHub 现在会在每行包含双向 unicode 文本的代码中添加警告标志和消息,尽管它没有突出显示这些字符在行中的位置。这仍可能允许恶意的方向改变以及良性的方向变化潜入。
开发人员和代码审查者的意识至关重要,这就是为什么我们创建了一个演练来说明漏洞。目前,本演练可用于 Java、C#、Python、GO 和 PHP。
因此,如果您想了解更多,请尝试我们的 Trojan Source 的模拟(公共任务),然后阅读 特洛伊木马来源研究。

Haga clic en el siguiente enlace y descargue el PDF de este recurso.
Secure Code Warrior puede ayudar a su organización a proteger el código a lo largo de todo el ciclo de vida del desarrollo de software y a crear una cultura que dé prioridad a la ciberseguridad. Tanto si es usted responsable de seguridad de aplicaciones, desarrollador, director de seguridad de la información o cualquier otra persona relacionada con la seguridad, podemos ayudar a su organización a reducir los riesgos asociados al código inseguro.
Ver informeReservar una demostraciónLaura Verheyde es una desarrolladora de software en Secure Code Warrior centrada en la investigación de vulnerabilidades y la creación de contenidos para Missions y Coding labs.
11月初,剑桥大学发布了他们的 名为 Trojan-Source 的研究。这项研究的重点是如何使用定向格式化字符将后门隐藏在源代码和注释中。它们可用于编写代码,编译器对逻辑的解释与人工代码审查员的解释有所不同。
这个漏洞是新出现的,尽管过去曾有人恶意使用 Unicode,例如通过以下方式隐藏文件的真实文件扩展名 反转文件名最后一部分的方向。最近的研究表明,许多编译器会在没有警告的情况下忽略源代码中的Unicode字符,而包括代码编辑器在内的文本编辑器可能会重排包含注释和基于这些字符的代码的行。因此,编辑器显示代码和注释的方式可能与编译器解析代码和注释的方式有所不同,甚至可以互换代码和注释。
请继续阅读以了解更多信息。或者,如果你想卷起袖子试一试 Trojan Source 的模拟黑客攻击,可以试试我们的免费版 公共使命 亲自体验一下。
双向文本
其中一种特洛伊木马源攻击使用了 Unicode Bidi(双向)算法,该算法处理如何将具有不同显示顺序(例如英语(从左到右)和阿拉伯语(从右到左)的文本组合在一起。定向格式化字符可用于重新组织分组和显示字符顺序。
上表包含一些与攻击有关的 Bidi 替换角色。举个例子,
RLI e d o c PDI
缩写 RLI 代表 从右到左隔离。它将把文本与其上下文隔离开来(由 PDI 分隔, 流行定向隔离),并将从右向左读取。导致:
c o d e
但是,编译器和解释器通常不会在解析源代码之前处理格式控制字符,包括 Bidi 覆盖。如果他们只是忽略方向格式化字符,他们就会解析:
e d o c
新瓶装旧酒?
当然,这在阳光下并不是什么新鲜事。过去,定向格式化字符是 插入到文件名中 掩盖他们的恶意本质。如果不是 RLO,显示为 “myspecialexe.doc” 的电子邮件附件可能看起来足够纯真 (从右到左的超控) 出现的角色显示真名是 “myspecialcod.exe”。
Trojan Source 攻击会在源代码中的注释和字符串中插入定向格式化字符,因为这些字符不会生成任何语法或编译错误。这些控制字符改变了代码逻辑的显示顺序,导致编译器读取的内容与人类读取的内容完全不同。
例如,一个按此顺序包含以下字节的文件:

将按方向格式化字符进行重新排序,如下所示

如果没有明确调出方向格式化字符,则会导致代码像这样呈现:

RLO 在最后一行将右大括号翻转为左大括号,反之亦然。执行此代码的结果将是:“你是管理员”。管理员支票被注释掉了,但是控制角色给人的印象是它仍然存在。
(来源:https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)
这会对你产生什么影响?
许多语言都容易受到攻击:C、C++、C#、JavaScript、Java、Rust、Go 和 Python,据推测还有更多。现在,普通的开发人员可能会对在源代码中看到定向格式化字符不屑一顾,但新手也可能耸了耸肩,什么都不想。此外,这些角色的可视化高度依赖于 IDE,因此不能保证它们会被发现。
但是,这个漏洞一开始怎么会潜入源代码呢?首先,当使用来自不可信来源的源代码时,可能会发生这种情况,而恶意代码贡献却没有被注意到。其次,这可以通过简单地从互联网上找到的代码中复制粘贴来实现,这是我们大多数开发人员以前做过的事情。大多数组织依赖来自多个供应商的软件组件。这就提出了一个问题,我们可以在多大程度上完全信任和依赖这段代码?我们如何筛选包含隐藏后门的源代码?
这是谁的问题?
一方面,编译器和编译管道应禁止使用多个方向的源代码行,除非一个方向严格限于字符串和注释。请注意,字符串或注释中的方向格式化字符如果没有弹出,则可以将方向变化延伸到行尾。通常,代码编辑器应明确呈现和突出显示可疑的 Unicode 字符,例如同形文字和定向格式化字符。自 11 月以来,GitHub 现在会在每行包含双向 unicode 文本的代码中添加警告标志和消息,尽管它没有突出显示这些字符在行中的位置。这仍可能允许恶意的方向改变以及良性的方向变化潜入。
开发人员和代码审查者的意识至关重要,这就是为什么我们创建了一个演练来说明漏洞。目前,本演练可用于 Java、C#、Python、GO 和 PHP。
因此,如果您想了解更多,请尝试我们的 Trojan Source 的模拟(公共任务),然后阅读 特洛伊木马来源研究。
Índice

Secure Code Warrior puede ayudar a su organización a proteger el código a lo largo de todo el ciclo de vida del desarrollo de software y a crear una cultura que dé prioridad a la ciberseguridad. Tanto si es usted responsable de seguridad de aplicaciones, desarrollador, director de seguridad de la información o cualquier otra persona relacionada con la seguridad, podemos ayudar a su organización a reducir los riesgos asociados al código inseguro.
Reservar una demostraciónDescargarRecursos para ayudarle a empezar
Temas y contenidos de la formación sobre códigos de seguridad
Nuestro contenido líder en el sector está en constante evolución para adaptarse al cambiante panorama del desarrollo de software, teniendo en cuenta su función. Los temas abarcan desde la IA hasta la inyección de XQuery, y son aptos para puestos que van desde arquitectos e ingenieros hasta gestores de productos y control de calidad. Eche un vistazo por adelantado a nuestro catálogo de contenidos, ordenados por tema y función.
La Cámara de Comercio establece el estándar para la seguridad impulsada por desarrolladores a gran escala
Kamer van Koophandel comparte cómo ha integrado la codificación segura en el desarrollo diario mediante certificaciones basadas en roles, evaluaciones comparativas de Trust Score y una cultura de responsabilidad compartida en materia de seguridad.
Modelado de amenazas con IA: convertir a cada desarrollador en un modelador de amenazas
Saldrá mejor equipado para ayudar a los desarrolladores a combinar ideas y técnicas de modelado de amenazas con las herramientas de IA que ya utilizan para reforzar la seguridad, mejorar la colaboración y crear software más resistente desde el principio.
Recursos para ayudarle a empezar
Cybermon ha vuelto: la misión de derrotar al jefe IA ya está disponible bajo demanda.
Cybermon 2025 ya está disponible en SCW durante todo el año. Guerra de seguridad de IA/LLM de alto nivel de la tribu, desarrollo de IA de seguridad reforzada con modelos de gran escala.
Interpretación de la Ley de Resiliencia de la Red: ¿Qué significa lograr la seguridad mediante el diseño del desarrollo de software?
Comprenda los requisitos de la Ley de Resiliencia de las Redes de la Unión Europea (CRA), a quiénes se aplica y cómo los equipos de ingeniería pueden prepararse mediante prácticas de diseño, prevención de vulnerabilidades y desarrollo de capacidades de los desarrolladores.
Factor impulsor 1: Criterios de éxito claros y medibles
El facilitador 1 es el preludio de nuestra serie de 10 partes sobre los impulsores del éxito, que muestra cómo vincular la codificación segura con los resultados empresariales, como la reducción del riesgo y el aumento de la velocidad de maduración de los planes a largo plazo.




%20(1).avif)
.avif)
