不論是工程師、系統管理員、安全研究員抑或是技術狂熱者,一定都有在網路上搜尋各種資料的經驗,遇到的 Bug 該如何處理、有什麼解法等等,逐一測試直到產生理想的結果,而這樣看似再簡單不過的過程,卻隱藏著面臨系統受到損害的風險,特別是如果你是將指令貼到終端機或命令提示字元中時。
原文作者就在他的文章中示範了一個簡單的方式,讓所有看到此篇文章的人,在未來想要從網頁上複製指令到終端機或命令提示字元之前,都會想起今天的範例。
剪貼簿上有後門?
最近,安全意識培訓平台 Wizer 的創辦人 Gabriel Friedlander 向大家示範了一個簡單易懂卻驚人的駭客攻擊,而這個實驗將會提醒所有使用者下次要在網路上 Ctrl+C、Ctrl+V 的時候會更小心翼翼。
對開發人員來說,StackOverFlow 這個網站並不陌生,裡面有許多關於技術相關的討論,當然也有各式各樣的程式碼或指令,將其中的指令貼在自己電腦上的終端機或命令提示字元這樣的行為非常常見,這邊只是以該網站作為說明,網路世界中不單單只有這個網站有程式碼或指令,任何存在於網頁上的指令都有一定的風險。
正因為如此,Gabriel Friedlander 提出警告表示,網頁中的所有內容,將有可能會偷偷調包你所複製的內容,什麼意思?也就是說,你所複製的內容,當你貼上時,可能會跟你原本所複製的內容不同,儘管大部分的內容「看起來」是相同的,但只要有一點不一樣,都有可能會影響到系統的運行。
Gabriel Friedlander 在他的文章中呈現了一個很完整的示範,看完本文之後可以點擊這邊,實際操作一遍。他的示範是,請所有正在看此篇文章的使用者複製一行所有系統管理員或開發人員都熟悉的指令:
Sudo apt update
接著,將你剛剛所複製的文字,貼到任何一個文字編輯器、或是可以輸入文字的方框中,你會嚇一跳,你會以為自己複製錯了,然而這正是駭客入侵的手法之一!
仔細觀察所貼上的指令,你會發現到它結尾的地方「| sh」,這個的意思是當你將這個指令貼到終端機之後立即執行。剛剛所複製的內容不過是在平常不過的指令,使用管理員權限來將軟體進行更新,但沒有人會想到實際上卻並不是這樣。
為什麼會這樣?
這是隱藏在網頁背後的 JavaScript 程式碼所導致,當你複製網頁中 HTML 中的「sudo apt update」之後,下圖中的程式碼片段也就會執行。
![](http://beta.aatp.com.tw/wp-content/uploads/2022/01/poc-code-js-1024x188.webp)
JavaScript 會去監聽一個事件的發生、或一個行為,稱為 EventListener,也就是「複製」,當它監聽到網頁有這樣的行為時,它就會去執行另外一個行為,也就是貼上其它(惡意)程式碼。
特別注意,這樣的事件監聽方法在 JavaScript 中是很常見的,只是這次的示範是被駭客所濫用了的一個例子。這就是 Gabriel Friedlander 為什麼會在文中警告使用者不要「直接」將命令貼到終端機或命令提示字元上,這樣的攻擊真的非常簡單,卻也非常致命,請務必謹慎的檢查你所複製的指令與原本的相同。
另外一位 Reddit 的使用者甚至提出了一個完全不需要使用 JavaScript 方法的例子,使用 HTML 及 CSS 來建立一個看不到的文本內容,也就是當你複製你想複製的內容時,看不見的內容包含了在你所複製的內容之中,所以貼上後就又會看到其他與原本不相同的內容了,如圖所示。
![](http://beta.aatp.com.tw/wp-content/uploads/2022/01/copy-paste-invisible-html-1024x205.webp)
因此,永遠也不要相信你所看到、所複製的內容,貼上後就一定會是與你所想的一樣,最好的方法就是先將該指令貼到文字編輯器或記事本之中,檢查無誤之後再貼到終端機或命令提示字元,雖然稍嫌麻煩,但這樣才會是比較安全的做法。
原文連結:https://www.bleepingcomputer.com/news/security/dont-copy-paste-commands-from-webpages-you-can-get-hacked/