匿名聊天安全嗎?透過中間人攻擊,你的聊天訊息全被看光光

無聊,不無聊,當無聊的時候你會做甚麼?是出門走走,還是宅在家裡呢?

有超多打發時間的方法,但別跟我說你想寫程式唷 … 寫一個無聊程式在無聊之中尋找樂趣,不會是一般人該有的想法,有這種想法的絕對是影集《矽谷群蝦傳》裏的那夥人,或是《閃電俠》裡的 Cisco,這種對於技術有強大熱情的 Geek,整天盯著螢幕眼睛不斷發亮阿!絕不是螢幕的反光喔,是發自內心的熱血澎湃 RRR

好的,我並不是這種超強工程師,也不是技術怪咖,今天要來分享的只是我無聊中的小發現,而根據這個發現想跟大家談談匿名聊天的安全問題


匿名聊天,真的可以暢所欲言嗎?

大家應該有聽過或用過匿名聊天軟體吧,不論是透過 Facebook 或 Line 的聊天機器人 (Chatbot)、手機 App、或者是網頁版,有相當多的方式可以在網路上與陌生人聊天。儘管這些軟體標榜著通訊加密、點對點加密、超強的黑科技加密 (?)、採用 HTTPS 安全技術、擁有 SSL 憑證、不會在資料庫中保存資料等等,但不論是甚麼強大的技術還有架構,跟一個不認識的人說話本身,就是危險的事情。所以這些軟體也會建議大家在聊天過程中,不要透露太多個人訊息,特別是帳號、密碼、提款卡,好讓你能安全地透過網路,對著陌生人,訴說自己的心裡話。

可是,玩匿名聊天的人,真的都是只想聊天嗎?多半只是想要約出來 …?

線下活動有太多的劇情可以發展了,與陌生網友見面的安全性大家可想而知,不過這裡,我想探討的是線上匿名聊天的安全以及隱私保障

你說有了這麼多加密技術,為什麼還會不安全?難道是軟體公司的資料庫被入侵,還是我的通訊被攔截了呢?這些事情其實都有可能發生,而且就算發生了你大概也不會知道,假若公司被駭的事情外洩,等於是賠掉用戶們的信任,最糟糕的情況,是要付一大筆賠償費呀。像之前偷情網站 Ashley Madison 被駭,大量的客戶資料曝光,公司最後與受害者們達成和解,付出了 1120 萬美元的補償金。

但目前台灣的匿名聊天軟體們沒爆出甚麼災情,我們就先相信資料的儲存與通訊是安全的,而且有了 HTTPS,封包側錄軟體是行不通的,可是中間人攻擊呢?


中間人是誰,他會怎麼攻擊

學過資安的朋友,肯定對於中間人攻擊 (Man-in-the-middle attack) 非常熟悉,但我還是不免俗地科普一下,確保大家了解這種攻擊方式。

中間人,顧名思義就是一個電燈泡,他會在兩個人之間進行干擾,透過各種管道、尋遍各種漏洞,想辦法偷聽或是竄改兩人的對話內容。這就好像你跟女生朋友用市內電話講得正火熱的時候,爸媽悄悄地拿起家裡頭另一支電話偷聽,想要了解案情的發展 RRR。當然,中間人攻擊只是個概念,有非常多的實作方式可以達到效果,而我要說的,並不是甚麼奇技淫巧,其實透過瀏覽器與萬能雙手,你也可以成為小小駭客,在匿名聊天軟體中實現中間人攻擊。

有那麼簡單嗎?請聽我慢慢說。

使用匿名軟體社群軟體最大的差別在於你認不認識對方。使用社群軟體找朋友聊天的時候,我們辨認身分的方式是透過 ID 或軟體上顯示的名稱,那麼匿名軟體呢?顯示的可能是「路人 123」、「陌生人」或者是自己取的稱號比如「陽光天蠍男」之類,但你怎麼知道這個稱號的背後是誰,是一個人、兩個人抑或是電腦?像是美國影集《黑鏡》白色聖誕那集,你怎麼知道在宴會中把妹的宅男,其實正仰賴著視訊,請情場高手遠端即時指點,而背後更有屬不清的觀眾在看著他。

當帳號無法被特定人物所有的時候,基本上就是公開帳號了,掌握存取鑰匙的人,都有辦法知道內容。所以我們想要偷聽對話,根本不用入侵別人的帳號,你只要傳話就可以了呀

想像一下,你同時開兩個匿名聊天視窗,把左邊人說的話複製到右邊,再把右邊人說的話複製到左邊,就好像你在下模仿棋,反正別人說甚麼你就複製甚麼,儘管貼上就對了。用這種方式大量複製,寫成自動化腳本,是不是就掌握了對話資料了呢,腦筋動得快的人,可能就拿去做對話訓練、深度學習了。

不過匿名聊天軟體還是會有防護機制阻擋機器人,想要自動化擷取有難度,而且這上面的對話訊息多半都沒有意義,對研究有沒有幫助就不知道了 xdd


懶得打字?透過 JavaScript 你也可以自動聊天

為了喚起大家對於資訊安全的重視,最後還是要以實際例子告訴大家自動化的可怕之處。當然,這裡並沒有採用其他工具,僅僅只是呼叫原有的 JavaScript Function 就達到自動回覆的效果,請各位記得,不要用這種方法做壞事,也不要撰寫自動化程式進行不道德的行為

以下是實際的執行結果,透過 Chrome 開發者工具,我們可以執行 JavaScript 腳本,每當對方送訊息過來的時候,就自動回覆一則罐頭訊息。

像這位網友也非常配合,和我們一起玩卡通《蠟筆小新》的對話梗 (蠟筆小新的媽媽叫做野原美冴)


程式碼片段

我們不鼓勵自動化行為,這裡只列出程式碼片段。透過這個函式,可以預先設定好說話內容,並在每次發話時做延遲,以免讓人覺得回復太快。


function StorySend(index){
	if(index <= 5){
		var waitTime = [2000,1000,500,2000,5000,5000];
		var stringArray = ["午安呀", "我叫做野原新之助", "今年五歲", "大姐姐妳吃納豆會加蔥嗎?", "這樣子喔", "妳覺得呢?"];
		setTimeout(function() {
            send(stringArray[index]);
		}, waitTime[index]);
		
	}else{
		RandomSend();
	}
}

小總結

匿名聊天可以紓壓,可以一吐心中的不快,不過在使用這些軟體的同時,記得每個人都可以是電燈泡、是中間人,當談話內容不再具備私密性,發言就應該更謹慎小心。而最後的最後,要感謝您耐心看完,網路安全需要靠大家共同守護,假如您覺得這篇文章不錯的話,歡迎按個讚或是幫忙分享,謝謝囉。

平時會觀察網路行銷、雲端運算與資訊安全,同時也在思索人生的課題。當世界越快,心則慢,期許自己能靜靜閱讀,細細品味,然後好好思考。