有什么方法可以防止写入或读取名称中带有“从右到左重写Unicode”字符的文件(恶意软件欺骗方法)?


20

有什么方法可以避免或阻止在Windows PC中写入或读取名称中带有RLO(从右至左重写)Unicode字符的文件(欺骗文件名的恶意软件方法)?

有关RLO Unicode字符的更多信息,请参见:

恶意软件使用的RLO Unicode字符信息:

日本信息技术促进局(IPA)编制的2011年10月计算机病毒/未经授权的计算机访问事件报告摘要 [ Mirror(Google Cache) ]

您可以尝试此RLO角色测试网页,以了解RLO角色的工作方式。

RLO字符也已经粘贴在该网页的“输入测试”字段中。尝试在此处输入内容,请注意您输入的字符以相反的顺序显示(从右到左,而不是从左到右)。

在文件名中,可以将RLO字符专门放置在文件名中,以进行欺骗或伪装,因为其文件名或文件扩展名与实际使用的文件名或文件扩展名不同。(即使未选中“ 隐藏已知文件类型扩展名”,仍将被隐藏。)

我可以找到的唯一有关如何防止运行带有RLO字符的文件的信息是来自日本信息技术促进局的网站

谁能推荐任何其他好的解决方案来防止在计算机中写入或读取名称中带有RLO字符的文件,或者一种用于在检测到带有RLO字符的文件时警告用户的方法?

我的操作系统是Windows 7,但我将在寻找适用于Windows XP,Vista和7的解决方案,或者适用于所有这些OS的解决方案,以帮助人们使用这些OS。


1
很好的问题!我也想知道这一点。您的链接似乎无效。
Cerberus '04

@Cerberus刚刚发现该链接无效。我希望它只是暂时下降。如果找到镜子,我将更新答案。
galacticninja 2012年


@Cerberus谢谢。我已将镜像链接添加到该问题。
galacticninja 2012年

4
They adviced to use the Local Security Policy settings manager to block files with the RLO character in its name from being run.您能告诉我们为什么这不是解决方案吗?
Tamara Wijsman'4

Answers:


3

只要双向文本控件字符构成文件名的一部分,您就可以将EverythingAutoHotkey结合使用来创建警报。

剧本

AlertText = A bidirectional text control character was detected in a filename.
AlertText = %AlertText%`n`nClick OK to re-hide the window.

SetTitleMatchMode RegEx
DetectHiddenWindows, On
EnvGet, ProgramFiles32, ProgramFiles

Start:
Run, %ProgramFiles32%\Everything\Everything.exe
WinWaitActive, Everything, , 5
if Errorlevel
    Goto Start
WinGet, Id, ID, A
StatusBarWait, objects, , 1, ahk_id %Id%
StatusBarGetText, Status, 1, ahk_id %Id%
Backup := ClipboardAll
Transform, Clipboard, Unicode, ‎|â€|‪|‫|‬|‭|‮
Send, ^v
WinHide, ahk_id %Id%
Sleep, 100
Clipboard := Backup
Backup =
StatusBarWait, ^(?!^\Q%Status%\E$)
Loop
{
    StatusBarWait, [1-9], , 1, ahk_id %Id%
    IfWinNotExist, ahk_id %Id%
        Goto Start
    WinShow, ahk_id %Id%
    WinRestore, ahk_id %Id%
    MsgBox, %AlertText%
    WinHide, ahk_id %Id%
}

它能做什么

该脚本启动所有内容并搜索‎|â€|‪|‫|‬|‭|‮(UTF8),即所有七个双向文本控制字符(),以分隔|

然后,该脚本将隐藏“所有”窗口并监视其状态栏。当它包含不同于的任何数字时0,找到一个匹配项,将显示“所有”窗口,并弹出以下消息框:

在文件名中检测到双向文本控制字符。

单击确定以重新隐藏该窗口。

该脚本还会重新启动所有内容,以防万一它被关闭。

如何使用

  1. 下载,安装并启动“一切”。

  2. Ctrl+ P并切换到“ 音量”选项卡。

    对于应检查的所有卷,启用Monitor changes

  3. 下载并安装AutoHotkey。

  4. 另存为上述脚本find-bidirectional-text-control-characters.ahk

  5. 双击脚本以启动它。

  6. 启动文件夹中创建脚本的快捷方式。



0

可能还有其他方法,但是最简单但并非不重要的方法是实现用于过滤这些请求的文件系统过滤器(或文件系统微型过滤器)。如果要从这样的文件中读取数据,则可以返回,STATUS_ACCESS_DENIED而在写入时,您不应该执行任何操作,而应首先阻止创建此类文件(也可能使用上述错误代码)。创建是另一种请求类型。

可以想象获得类似结果的其他方法,例如SSDT挂钩。但是,唯一可靠的方法就是上面的方法。

为此,您将不得不找人为您编写这种过滤器(对于内核开发人员而言,对于微型过滤器而言相对来说是微不足道的),然后对其进行签名,以通过自Vista以来的内核模式签名策略来获取它。如果您不想执行后者,则仍然可以对驱动程序二进制文件进行测试签名,并修改引导选项以允许测试签名的内容,从而损害相应系统的安全性。

根据这些信息,我强烈建议您使用galacticninja和Tom Wijsman指出的解决方案。


2
我强烈建议您使用Tom Wijsman指出的解决方案。 ”实际上,那是指出的解决方案。我已经设置Windows来做到这一点。像我回答汤姆Wijsman,我在寻找其他的解决方案,这将阻止该RLO字符写入和读取,或解决方案将自动将该通知提醒,如果检测到RLO字符的用户。恐怕我没有编写您所描述的过滤器的技术知识。
galacticninja 2012年

@galacticninja:对不起,我会在回答中纠正这一点。
0xC0000022L 2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.