前言
關於 Web 安全的「粘貼板安全」,能意識到安全風險的人並不多。大多數人認為這只是隱私安全,最多泄露當前復制的內容而已。或者就是用於一些小花招,例如自動復制淘口令然后喚起手淘這種惡意行為。
事實上,粘貼板安全是非常重要的 —— 尤其是我們這些經常上網查資料的人。稍有不慎,系統都會被入侵!
所見非所得
有沒有想過,當你選中一段文字復制后,粘貼出來的卻是不同的內容?
你肯定不希望這樣,但你一定遇到過。比如復制某帖子的時候,末尾會加上「出自作者 XXX」這種煩人的內容。
從技術上說,實現這種效果很容易。但是,你有沒有從安全角度考慮過這個問題?
比如,你從 Stack Overflow 上搜到的答案是 ping google.com
,一條人畜無害的命令,結果粘貼出來的卻是 sudo rm -rf /
,你看都沒看就敲下了回車。。。
也許你會說,正規的網站怎么可能會開這種玩笑。但是,你能保證網站不出現 XSS 嗎?
也許你會說,我是一個仔細的人,命令粘貼后都會檢查下再運行。但是,這仍然晚了。。。
粘貼即運行
眾所周知,粘貼多行命令時,Shell 會自動運行換行符前面的。例如:
echo 1
echo 2
當你將其粘貼到終端后,echo 1 已自動運行,敲下回車只是運行 echo 2 而已。
因此 XSS 完全可以將惡意命令放在第一行。你一粘貼,它就自動執行了!
以后你還敢從網上隨意復制粘貼命令嗎?
也許你在想,發現破綻后馬上 ctrl c 來得及嗎。來不及了,惡意命令完全可在后台執行,等你找到的時候說不定木馬已經安裝好了。
甚至,你可能根本都沒發現破綻。。。
隱蔽執行
為了讓惡意命令不留下痕跡,還可以在運行后再 clear。如果終端之前沒內容,你只是覺得屏幕好像閃了一下。如果之前有內容,現在一粘貼突然變沒了,也許你會覺得奇怪,但你會不會深究?
也許你會調出上一個命令,或通過 history 看究竟執行了什么。但是,惡意命令完全可以刪掉歷史記錄,讓你無從查證。
更進一步,惡意程序可將粘貼板修改成正常內容,你去其他地方粘貼看到的仍是預期內容。甚至,惡意程序還可以給網頁里的 XSS 發送命令,讓它以后不再劫持你了,讓你一時半會都復現不出來!(當然,粘貼到遠程服務器 ssh 的話無視這一步)
結論
從網上復制粘貼命令風險很大。最好先粘貼到記事本里檢查一下,然后再粘貼到終端里運行。