轻松应对木马源攻击的三种方法

VSole2021-11-11 09:23:48

尽管木马源攻击的通用漏洞评分高达9.8,但企业完全没必要惊慌失措。

剑桥大学研究人员发现的木马源(Trojan Source)攻击会诱使编译器读取隐藏的Unicode字符,并生成带有开发人员或安全分析师不知道的额外指令和后门的二进制文件。由于默认情况下特殊字符不可见,因此在代码审查期间难以发现恶意代码。

利用Unicode显示文本方式的攻击并不新鲜,但“木马源”更具威胁的原因是从公共站点(例如StackOverflow、GitHub和其他社区论坛)复制和粘贴的大量代码会直接进入源代码文件。如果有问题的Unicode字符隐藏在文件中,这些字符也会被复制进来。

nVisium高级应用程序顾问Jon Gaines表示:“这对源代码审查的能力是一次考验,当下建议暂时不要复制和粘贴代码,最好是自己重写一遍。”

方法一:“显影”Unicode字符

开发人员可以通过启用他们正在使用的IDE或文本编辑器来显示Unicode字符,从而检测潜在的恶意Unicode字符。或者可以使用命令行十六进制编辑器,例如HexEd.It,在文件中搜索特定的Unicode字符。

一些主要的源代码控制平台已经做出回应:GitHub、GitLab和Atlassian(用于 BitBucket)已经发布了针对Unicode BiDi字符的警报(CVE-2021-42574)。

对于容易遭受木马源攻击的文本编辑器Visual Studio Code ,一种可行的方法是将编码转换为非unicode。JFrog安全研究高级主管Shachar Menashe表示,这会将恶意的Unicode字符(对于BiDi字符)标记为损坏字符,在手动代码审查期间可以发现这些损坏的字符。

这是在Visual Studio Code中进行转换后 Unicode BiDi 的样子:

有些同形文字很难与合法字符区分开来。这是在Visual Studio Code中进行转换后这些字符的显示方式:

Visual Studio、Notepad++和Sublime Text实际上不受BiDi字符的影响,因为该行要么被破坏,要么整行显示为注释:

方法二:过滤字符

Menashe认为木马源攻击方法的威胁“在现实世界中影响有限”,因为常规源代码通常不包含研究人员列举的特殊Unicode字符(BiDi和同形文字)。它们“很容易被检测到、发出警报,甚至可能会自动过滤掉”。

下面的Linux命令可以警告或删除单个源代码文件中的所有Unicode字符:

  • Alert:iconv-f utf-8 -t ascii input.cpp
  • Strip:iconv-c -f utf-8-t ascii input.cpp-o filtered_output.cpp


或者,此Linux命令将检查文件列表并标记找到特殊字符的实例:

  • for file in filelist;do hexdump-C “$file”|grep RTLcharacters;done


以下命令不仅可以发出警报,还可以仅从单个代码文件中删除木马源攻击针对的特定字符。

例如以下这两个Linux命令去除了Unicode BiDi字符CVE-2021-42574):

  • CHARS=$(python-c'print u"\u202A\u202B\u202D\u202E\u2066\u2067\u2068\u202C\u2069".encode("utf8")')
  • sed's/['"$CHARS"']//g'<input.cpp>filtered_output.cpp


对于Unicode Homoglyph字符(CVE-2021-42694),这两个命令生成了仅用于剥离西里尔字母同形文字的部分列表:

  • CHARS=$(python-c'print u"\u0405\u0406\u0408\u0410\u0412\u0415\u0417\u041D\u0420\u0421\u0422\u0425\u0430\u0440\u0441\u0443\u0445\u0455\u04AE\u04BB\u04C0".encode("utf8")')
  • lsed 's/['"$CHARS"']//g'< /tmp/utf8_input.txt>/tmp/ascii_output.txt

方法三:更新工具

为编译器安装更新,这样可阻止木马源攻击。在应用得到更新前,自动检测和清理文件的命令也可以缓解这些问题。虽然可以在更改文本编辑器设置后执行手动源代码审核以查找这些特殊字符,但这将是“处理此问题的最糟糕方法”,Menashe指出,因为某些字符在某些情况下来自合法的拉丁字符。

“最好的解决方案是运行自动化工具来标记和/或删除这些字符,”Menashe说道。

在拥有大型代码库的组织中,对文件的单独审计很难大面积开展。Red Hat发布了一个简单的Python脚本(https://access.redhat.com/security/vulnerabilities/RHSB-2021-007#diagnostic-tools:)来识别整个代码库中的潜在问题。该脚本可以集成到持续集成/持续交付工作流中,或者作为预提交检查添加,以确保恶意代码不会进入生产环境。

Rapid7的首席安全数据科学家Bob Rudis还推荐了一个简单的缓解措施:“如果你只用英语或只用阿拉伯语编写代码,则可禁止在代码库中使用BiDi指令”。

尽管木马源攻击的通用漏洞评分高达9.8,但企业没必要惊慌失措。Rudis认为9.8分显然是“夸大了”,因为实施木马源攻击需要攻击者直接访问开发人员的工作站、源代码管理系统或持续集成管道。

“如果攻击者可以直接访问你的源代码管理系统,坦率地说,你可能会遇到比这次攻击更大的问题。”Rudis说:“我们建议在担心需要本地或物理访问的源代码级攻击之前,优先考虑真正关键的补丁并防止服务和系统暴露。”

源代码unicode
本作品采用《CC 协议》,转载必须注明作者和本文链接
剑桥大学的研究人员发表论文,介绍了在源代码中隐藏人眼看不见的漏洞的攻击方法。
几乎所有的编译器都容易受到恶意攻击。
剑桥大学研究人员发现了一个可影响当今大多数计算机软件代码编译器和软件开发环境的漏洞。这个漏洞来自数字文本编码标准Unicode的一个组件,Unicode目前在154中不同的编程语言脚本中定义了超过14.3万个字符(除了一些非脚本字符集,例如表情符号)。
作为一只网安新人小白,在RCE方向上的求知经高人指点落脚在了Struts2上。
利用Unicode显示文本方式的攻击并不新鲜,但“木马源”更具威胁的原因是从公共站点(例如StackOverflow、GitHub和其他社区论坛)复制和粘贴的大量代码会直接进入源代码文件。如果有问题的Unicode字符隐藏在文件中,这些字符也会被复制进来。
2021年11月1日,国际信息安全资讯网站the Record报道,来自英国剑桥大学的安全研究人员发现了一种新的理论攻击技术,可以通过注释字段将恶意代码插入合法的应用程序中,从而加载恶意软件或关闭安全防护功能。
函数h()是function g { var b = ""; 16 > a && ; return b + a.toString}function h { for e = a.charCodeAt, 255 >= e ?55^10055 =0011 0111100 =0110 0100结果 =0101 0011十进制 =83. def octToHexStr: if number < 16: return '0' + str[2:]. for chr in data: e = ord if e <= 255: enData += octToHexStr else: enData += octToHexStr
Ceye DNS:DNS oob平台 http://ceye.io/. TLS证书信息查询Censys:https://censys.io. 网络空间搜索Fofa:https://fofa.info/
0x00 目标情况一个web站点111.*.*.63,只有一个登陆框,测试了没有注入,没有弱口令,扫描了全端口,没有发现什么有用的信息。0x02 找网站绝对路径判断是不是dba权限uname=test';if(1=(select?判断是否是站库分离uname=test';if?sqlmap查看建表成功,sqlmap -r 1.txt --dbms "Microsoft SQL Server" -D "tempdb" --tables查找网站文件并把路径写入到表tt_tmp. python sqlmap.py -r 1.txt --dbms="Microsoft SQL Server" --technique=S -D "tempdb" -T "tt_tmp" -C "tmp1" --dump -v 30x03 尝试在111.*.*.59主机getshell尝试写一句话先在下面的路径中写入txt文件验证网站路径到底是哪一个D:\bak\20170226\bak\20170403.2\webapp\Content\layer\. 依次写文件然后访问,在写入?
Ceye DNS:DNS oob平台 http://ceye.io/. TLS证书信息查询Censys:https://censys.io. 网络空间搜索Fofa:https://fofa.info/
VSole
网络安全专家