iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0
自我挑戰組

從電子元件到傅立葉轉換 - 那些我有興趣的主題系列 第 26

[Day26] Coinhive 與無限 alert 事件

  • 分享至 

  • xImage
  •  

Coinhive 與無限 alert 是兩件在日本相當有名的事件,都跟「刑法第168条の2(不正指令電磁的記録作成等)」有關。

人が電子計算機を使用するに際してその意図に沿うべき動作をさせず、又はその意図に反する動作をさせるべき不正な指令を与える電磁的記録

也就是說使用者在使用電腦時,如果沒有按照使用者的意圖來動作,或者是違反其意圖的動作,且帶有「不正」的指令,就有可能違反這一條刑法。

這個法條之所以對開發者很重要的原因,在於身為網頁開發者的我們,是最容易與使用者打交道的一群人,只要有網域、伺服器,全世界的人都可以自由瀏覽你寫的網頁,然而這伴隨而來也是風險。我想身為開發者,自己寫的程式碼莫名其妙被判決有罪是一件很可怕的事。

身為開發者,一般具有比較高的學歷,所得也相對比較高一些,開發者通常也很守法,沒有前科。他們的人生裡面從來沒有「跑法院」這個選項,也不會想像自己有一天會被警察逮捕、搜查,自己的生財工具被收押。另外,面對警察的調查、筆錄,對於沒有經驗的人來說,很容易會因為緊張而說出對自己不利的論述,或是覺得只要好好說他們一定會明白,結果最後跳到黃河也洗不清。在台灣訊問時還可以跟律師會面、一起做筆錄,但是在日本只能隻身一人面對警察,壓力又更上一層樓。

儘管最後真的無罪,光是跑法院的過程,諮詢律師,辯護費用等等,這些金錢成本與身心的消耗就足以對你的人生造成巨大的影響。

1. Coinhive 事件


事件大綱

當事人經營了一個月流量大約 3 萬的網站,他覺得可以使用埋挖礦腳本的方式當作收益來維持經營網站所需要的費用。

其實這種方式我在幾年前也在某個部落格遇過,當時只是覺得怪怪的怎麼看文章風扇都會轉,結果才在一個小角落看到網站寫說他有埋挖礦腳本。

當事人使用的服務叫做 coinhive,這個服務會提供挖礦腳本,網頁的經營者只要將腳本塞進網頁,當使用者瀏覽網頁時就會自動執行。

這邊需要稍微解釋一下挖礦的原理,發送一筆交易時,各個礦工們需要開始計算是否承認這筆交易,而計算的方式就是算數學,而這個演算通常需要大量的計算力。

因此只要成功執行演算,礦工就可以拿到小部分的虛擬貨幣作為獎勵。只要有 CPU,大家都可以做到這個計算,因此執行瀏覽器的 JavaScript 腳本就能利用使用者的 CPU 資源達成挖礦目的。

雖然實際上的程式碼似乎是用 WebAssembly 撰寫,不過如果用程式碼來表示大概是這樣子:

computeHash(record)
	.then(result => fetch('/send_hash', { method: 'POST', body: JSON.stringify(result) }))

在 SDK 裡面,可以定義要使用多少 CPU 來計算 hash。

當然,跟專業的礦機跟 GPU 比起來,這種方式能夠挖到的回饋其實是相當微薄的,根據判決書的描述,當事人也只拿到 800 日幣的利益。

後來當事人就被檢察官起訴了,原本在一審判決無罪,二審時在東京高等法院被判有罪,最高法院判決出爐則以無罪定讞,判決書可以在網路上取得。

使用者雖然事前不知道挖礦程式的存在,這點雖然違反了使用者的意圖,然而像是網路廣告也沒有事先經過同意就執行腳本。「這是普遍被認可的範圍」,五位法官的意見皆為一致。最高法院並不是一般性地允許這樣的行為,而是僅限於這個案件。如果目的帶有惡意的話仍然需要負擔刑事責任。

原文:閲覧者があらかじめこうしたプログラムの存在を知らされていなかった点は、閲覧者の意図に反するとしたが、事前同意がないまま利用者のパソコンを一定程度使うという手法そのものはネット広告と同様と判断。「社会的に許容しうる範囲内だ」と結論づけた。5人の裁判官の全員一致だった。 もっとも最高裁は、一般論として同種行為を許容したのではなく、今回の事件に限って無罪と判断したにとどまる。利用目的などが悪質なら刑事責任を問われる可能性はありそうだ。

摘錄自日經新聞

討論重點

整個訴訟攻防的重點在於這個行為的正當性,也就是有沒有符合要件當中的「不當使用」與違反「使用者意圖」。(刑法第168条の2(不正指令電磁的記録作成等))

人が電子計算機を使用するに際してその意図に沿うべき動作をさせず、又はその意図に反する動作をさせるべき不正な指令を与える電磁的記録

法條上雖然寫著「不當使用」,然而「不當使用」的定義為何,不能只光從程式的內容判斷,而是要根據事件當下的情況、對使用者的影響等來做判斷。

關於不當使用這件事情,挖礦腳本在一般大眾眼中會覺得不舒服,自己的 CPU 資源平白被拿來用當然會不舒服。然而從判決書來看(參照前一段原文),本案件中被告人有調降 CPU 的使用率,判決書也有提到不告知使用者的案例像是網路廣告也是一樣。

因此這種行為儘管不討喜,它並沒有實際造成使用者的損失或是不法獲取使用者的個人資料,只要關閉分頁程式馬上就會停止。

補充

1. 關於 coinhive 挖礦腳本

被告人當初是為了將網站的廣告移除,改由 coinhive 挖礦腳本當作收入來源來維持網站運營所需要的費用。 這裡有個插曲是 coinhive 曾經有將腳本以及服務條款改版,改為「必須要使用者同意」才可以進行挖礦

然而被告人並沒有得知這個公告,因此還是用原本的挖礦腳本。被告人也有收到推特私訊說要加入使用者同意的條款不然會有點灰色地帶,後來被告覺得要加入使用者同意的實作太麻煩了,因此直接將挖礦腳本刪除了。(設置腳本的時間為一個半月)

2. 警察搜查與筆錄

隔年的二月收到警察聯絡,有一天突襲他家,並且什麼都沒說明就開始搜查,收押了手機跟電腦。在訊問時也用採取高壓脅迫的方式要求被告人反省。5 原本是檢察官是提出 10 萬日圓罰金的簡易訴訟(日文稱略式起訴),但被告不服所以最後演變成了正式訴訟。然而考量到交通與律師費用,總共需要的錢恐怕不止 10 萬。

簡易訴訟與正式訴訟的差別在於,簡易訴訟當中,法院只會單純以檢察官的文件來審理,不會額外開庭或是讓雙方有說話的機會,像是水電催繳這類很明顯的案例,只要數十分鐘就會結束。而正式訴訟則會實際跑法院,像日劇那樣來回雙方辯護人(或檢察官)來回攻防,也需要花比較長時間進行。

3. 上訴書與意見書

被告人在二審的時候被改判有罪。然而如果要繼續上訴到最高法院,就需要「非常上訴」。然而有一個大難題就是基本上最高法院只會審核法律適用是否有問題,而不會審理事件本身,也不能再請求調查。

為了順利上訴,被告人與辯護律師向日本黑客協會(日本ハッカ協会)蒐集來自四面八方的工程師意見書,試圖讓最高法院受理。

結論

身為網頁開發者,我們會去嘗試新技術,提升自己對技術理解與專業知識。然而對於大部分的警察、檢察官、法官來說,電腦並非他們的專業,不一定能掌握所有的知識,甚至會因為對這方面的了解不足擅自貼上「有罪」的標籤。對於社會大眾來說,也會因為不了解背後的原理,而抱持著有罪的態度。從近期層出不窮的虛擬貨幣詐騙也可以得知,未來像是這種電腦犯罪的事件只會越來越多,首當其衝的就是身為開發者的我們。

警察、律師、法官,大部分都沒有對這方面有太多理解,也因為這個領域本身的專業度導致打官司時會出現障礙,甚至在筆錄的時候警方也時常誤解被告人對於技術的解釋。(像是搞不清楚 head 跟 header 的差別等等7) 如果開發者的心態不好,很容易面臨崩潰。加上開發者誠實、尊重專業的態度,在訊問時反而容易被警察牽著鼻子走,做出不利於自己的筆錄,最後要翻轉可以說是難上加難。看完新聞後我覺得是個很好的機會給開發者思考,如果自己哪天遇到這種事要怎麼處理。

使用者體驗

我的部落格雖然沒有任何廣告跟挖礦腳本,因為我覺得要犧牲掉的體驗實在太大了,但我是支持廣告的,很多無償做網站的開發者就是靠著廣告收入來維持網站運作,因此也沒有安裝 AdBlock,YouTube 也是買 Premium 無廣告來支持創作者。

但我自己也很不喜歡挖礦腳本,雖然現在已經進入了效能過剩的時代,但平白讓別人隨意跑 CPU 的資源還是會有些反感。

可是有一件事情我認為蠻重要的是,觀感不佳、道德感跟有沒有構成犯罪要另當別論。人們往往容易將他們混為一談,畢竟「唯一死刑」是不需要花心思思考的。

我並不希望挖礦腳本成為主流,但能夠擺脫網路廣告,開始挖掘一些新的獲益模式,讓網站運營能夠細水長流,同時又能提供良好的體驗,我覺得是好事一樁(像是 SocialFi、LikeCoin、Buy me a coffee 等等)。

身處於網路前線的我們,我們的專業能夠幫助我們看清事物運作的本質,而非只是用感覺來評斷而已。

Coinhive 關閉服務其實一部分也說明了這個運作方式不太管用,除了挖礦動用的 CPU 資源太多了,普遍使用者接受率不高,再來就是挖礦效率實在太差了,隔著瀏覽器又隔著 JavaScript 的執行環境(不過聽說 coinhive 是使用 WebAssembly),遠遠比不上家裡放一台礦機,或是就乾脆老實地放廣告還比較好賺。

2. 無限 Alert 事件

前言

個人覺得這件事雖然發生在日本,但對於台灣來說似乎也有類似情形,妨礙電腦使用罪的定義曖昧,很容易就變成興訟的工具,因此身為開發者我覺得是值得理解的。本篇文章旨在案例分享,絕無鼓勵任何影響使用者操作的惡意行為。

大綱

無限 alert 事件是發生在 2019 年三月,警察以在電子留言板上放有惡意程式碼的連結,有違反

事件概要

(來自維基百科)

在 2019 年三月,兵庫縣警以在電子留言板上放上有惡意程式碼的連結有不正指令電磁的記録供用未遂之疑,到女國中生家搜索,並搜查兩名男性後送檢。3/25,日本黑客協會開始募集兩名男性的律師費用及官司費用,總共募到了 553 人共 700 萬日圓的金額。 在同年 5/29 兩位男性以緩起訴處分,此案件沒有任何受害者。

根據其中一位男性的說法,檢察官認為「對某些手機型號來說,一旦點擊連結後有可能沒辦法關閉畫面,或是需要拿去維修甚至是拜託專家,違反了電腦病毒罪當中的要件『反意圖性』。」,對於「不正指令電磁的記録供用罪」的主張沒有改變。

擔任兩位男性的横浜パーク法律事務所的辯護律師知道這件事後,認為緩起訴處分是「雖然有犯罪但這次不起訴的立場試圖混淆視聽」「雖然檢察官認為有罪,但因個別情況選擇緩起訴處分,作為法律工作者的檢察官, 如果不這樣做的話就會被社會批判」對檢察官發表批評。

程式碼

警察所謂的惡意程式碼,是下面這樣子:

for ( ; ; ) {
  window.alert(" ∧_∧ ババババ\n( ・ω・)=つ≡つ\n(っ ≡つ=つ\n`/  )\n(ノΠU\n何回閉じても無駄ですよ~ww\nm9(^Д^)プギャー!!")
}

有寫過網頁的開發者應該都看過 alert 這個函數,這段程式碼執行之後的效果是會在瀏覽器上不斷地跳出訊息框,直到使用者把該分頁關掉。

不過 window.alert 在對話框關閉之前沒辦法執行其他處理,因此這個程式不會對瀏覽器有任何影響,也因此不符合「browser crasher」而是「惡作劇程式」。

對大多數的 PC 瀏覽器來說,只要關閉分頁就能夠停止這個程式。而且,現在的瀏覽器如果 alert 出現一次以上,會有「停止出現對話框」的選項,也能夠停止持續跳出對話框的行為。

迴響

在 2019 年 3 月 6 日,JavaScript 的作者 Brendan Eich 似乎也得知這個消息,在推上寫到「Chrome 初版的十年前 Netscape 4 就已經可以讓使用者關閉 JavaScript 的無限迴圈」,後來甚至變成了專家證人

「我決定成為這個事件的專家證人。這不是電腦病毒,不應該被當成犯罪」。

在 3 月 9 日時 Electronic Frontier Foundation 也發推文表示「無限迴圈並不是犯罪」。

Thread: https://t.co/zc1qz7OLx8

I'll be expert witness at trial. This is not a virus, it should not be a crime, and if the browser did not let the user regain control, jail the browser maker :-P.

— BrendanEich (@BrendanEich)

March 9, 2019

3 月 8 日,為了表示對警察行動的抗議,以被逮捕為目標在 GitHub 上公開了原程式碼,repo 名稱叫做 lets-get-arrested

補充與個人看法

其實從這起事件看來,可以發現「不正指令電磁的記録供用罪」的定義曖昧,導致了很多灰色地帶發生。而且光就本次事件來看,瀏覽器端的無限迴圈要變成罪名實在是一件很荒謬的事。

另外文中提到的 lets-get-arrested,裡面的 issues 其實都還蠻好笑的,我覺得吐槽的很到位。

像是有人在上面提問說要怎麼在日本被逮捕,他說之前去六本木時看到四個非常醉的人要過馬路,其中有一個人走在馬路中央被計程車按喇叭,結果那個人就惱羞成怒踹了計程車並且在馬路中央發飆,後來有警車到場,但警察似乎也沒什麼作為就走人了,也沒有任何逮捕行為。

有人在 GitHub 提問如何在日本被逮捕

後來作者就回他說,「對,在日本寫無限迴圈是比踹計程車跟在馬路上發飆更嚴重的罪」

作者的回覆


上一篇
[Day25] 快速傅立葉轉換
下一篇
[Day27] Raspberry Pi pico 初探
系列文
從電子元件到傅立葉轉換 - 那些我有興趣的主題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言