pastejacking 粘贴板劫持

转载,仅作思路

现在浏览器大多只允许开发者在一定条件下向用户剪贴板中添加内容。换句话说,剪贴板劫持只能是在浏览器事件中才能够触发。本文将详细的向各位讲述“剪贴板劫持”攻击如何诱骗用户运行恶意代码。

Demo1是一个用来欺骗用户复制,看着完全“无公害”代码的Demo。如果用户尝试使用键盘快捷键(例如ctrl+c或者command+c)复制文本内容,就会触发一个800毫秒的计时器,之后恶意代码就会覆盖掉用户剪贴板中的内容。

注意被添加到行尾的换行符,正常情况下当用户将echo命令粘贴到终端”evil”便自动显示在了屏幕,在执行之前用户是没有机会检测命令的。当然你还可以使用更复杂的payload,就比如Demo3。

1
2
3
touch ~/.evil
clear
echo "not evil"

该命令将会在你的home目录下创建一个恶意文件,并清除终端显示记录,最后才执行受害者本意想复制的命令,在这里那个命令就是echo ‘not evil’

攻击影响

该方法可以结合钓鱼攻击诱骗用户执行看起来十分合理的命令,恶意代码会替换掉那些看来十分合理的代码,如果用户在终端中粘贴,攻击者便可以在受害者主机上进行远程代码执行。

如何防御

如何保护自己这还真不是一件简单事情,其中一个解决方案便是在粘贴到终端之前先验证内容。注意了,这里验证的地方也是有讲究的,如果你粘贴到vim中去验证,反而vim的宏可能会欺骗你。不信那就试试Demo2

1
copyTextToClipboard('echo "evil"\n \x1b:!cat /etc/passwd\n');

demo2中直接粘贴在终端中便是执行echo evil,如果粘贴到vim中则是执行cat /etc/passwd命令。另一个解决方案如下:

1
"+p -- within vim to paste clipboard without interpreting as vim command

即粘贴到vim时不解析vim命令
如果你运行 iTerm,命令以换行符结尾的话会得到一个警告提示

参考资料

[1] 剪贴板劫持:复制粘贴中暗藏杀机
[2] Pastejacking