「莫里斯蠕蟲」的啟示:網路安全不是好萊塢電影,而是人類的存亡之戰!
Photo Credit: imdb.com

「莫里斯蠕蟲」的啟示:網路安全不是好萊塢電影,而是人類的存亡之戰!

文/史考特.夏皮羅;譯/劉維人、盧靜

資安不是新鮮事

早在第一次網路攻擊,甚至早在網路誕生之前,資安專家就已經預料到這種事。美國國安局在一九六七年召開第一次資安會議,那時別說是網際網路了,就連它的原型阿帕網(ARPANET)都要兩年後才誕生。那場資安會議舉辦在大西洋城,還真不諷刺啊。

隨著電腦發展越來越成熟,國安局也越來越擔心。「電腦」在一九六○年代之前,是一個會占滿整個房間的巨無霸。而我們現在稱之為程式的東西,當時還叫做「作業」(job),使用者必須把程式打在紙卡上,然後把一整疊紙卡交給操作員。操作員蒐集「整批」(batches)紙卡之後,一次送進讀卡機,再由另一位操作員,把讀取器讀到的「作業」存在大型的磁帶上。最後,磁帶才會把程式輸入電腦,而且電腦通常都位於另一個房間,由電話線與磁帶機相連,電腦旁邊還有另一個操作員。

在這段「批次處理(batch processing)」時代,「電腦資安」(computer security)還真像英文字面上說的那樣,是保護電腦(computer)本身的安全(security)。當時的電腦是名副其實的玻璃大砲。麻省理工學院的IBM 7090有數千個吹彈可破的真空管,以及長達好幾公里、錯綜複雜的銅線,塞滿了一個如足球場大的房間。真空管散發出來的熱氣經常會熔斷電線,所以學院還得為此設計一個空調系統。而這些「主機」的價錢就跟它們的身材一樣嚇人,IBM 7094在一九六三年售價三百萬美元,相當於二○二三年的三千萬美元。不過IBM給了麻省理工學院優惠──條件是學院每天要留八小時給IBM使用,以處理公司的工作。後來IBM總裁在長島灣舉行遊艇障礙賽時,也用這臺電腦來計算路障要放在哪裡。

當時維護資訊安全的方式,是透過複雜的官僚制度來規定哪些人可以進入哪些房間。只有某些研究生可以把紙卡交給負責批次處理的操作員,而能夠走入主機機房的人,更是寥寥無幾。其中最重要的規則是除了操作員以外,誰都不能碰電腦主機,平常主機旁邊圍了一圈繩子,就像結界一樣。

在那個遠古時代,資安保護的是硬體而非軟體,是電腦主機而不是使用者。畢竟當時保護程式碼跟資料,實在沒什麼意義。電腦一次只能執行一項作業,一旦你的作業開始跑,上一個使用者留下來的資料就消失了,使用者即使想偷看彼此的資訊也做不到。

不過,使用者對批次處理的怒火,就跟當時的真空管一樣熱得發燙。紙卡一旦送進機器,就得等所有作業都做完才能看到結果,往往一等就是大半天。而且如果想重跑一次程式、調整幾行程式碼、抽換幾個數值,就得重新排隊,隔了很久才能再次輪到自己。所以光是消除一些簡單的錯誤,確定整個程式可以正常運作,就得花上好幾天。此外,程式設計師不能直接去碰至高無上的電腦大神,一旦把紙卡交給操作員,就得乖乖走出房間。電腦先驅費南多.「柯比」.柯巴托(Fernando “Corby” Corbató)說得好:「批次處理帶來的悸動,就跟你把衣服送到洗衣店的悸動一模一樣。」

而柯比改變了這種情況。一九六一年,他跟其他兩位程式設計師,一起在麻省理工學院開發了共用分時系統(Compatible Time-Sharing System,CTSS)。這是一個多使用者系統,每個使用者都把自己的資料存在同一臺電腦上,每個人都可以執行自己的程式。而且不需要寫好紙卡讓操作員來代勞,因為主機與多臺終端機相連,因此每個人只要坐在自己的終端機前面,就能直接存取主機。如果有兩個程式設計師同時送出作業,共用分時系統會在兩份作業中來回執行,每次只執行其中的一小部分,然後跳到另一份作業,直到兩份都做完。共用分時系統的切換速度快到使用者無法察覺,會以為整臺主機從頭到尾都只屬於自己。柯比將其稱為「分時系統」,到了一九六三年,麻省理工學院已經用這套系統架設了二十四臺終端機,並且全都連到IBM 7094上。

沙特(Jean-Paul Sartre)有句名言:「他人即地獄。」共用分時系統這種有多個使用者的系統,顯然打開了地獄的大門。當同一時間有很多人存取主機,它們撰寫和使用的程式就成了破口。即使完全沒人摸到主機機臺、讀卡機、磁帶,電腦依然會受到攻擊。

「分時系統」之所以能讓人覺得自己從頭到尾擁有主機,是因為它把好幾個程式都存進記憶體,並在不同作業之間快速切換。系統把記憶體切成好幾個「空間」,分別存放不同使用者的程式碼與資料,但每次僅處理其中之一。這種同時讀取好幾個程式碼與資料的方法,雖然能夠更有效地利用資源,卻也打開了入侵的後門,因為其中一個作業可以要求電腦去存取另一個作業空間裡的資料。

為了保護每個使用者的程式碼與資料,防止其他使用者偷窺亂改,共用分時系統給每個使用者一個帳戶,每個帳戶各有自己的「使用者名稱」,存取之前要輸入四個字母的「密碼」,且只能存取自己的空間,無法觸及其他位址。不過當時的記憶體空間相當寶貴,所以柯比選用密碼來登入,而非當代常見的「你媽的娘家姓是什麼?」這種安全性問題。所有使用者的帳密,都存在UACCNT.SECRET這個公用檔案中。

在分時系統的概念剛出現時,密碼與其說是為了守護資訊安全,還不如說是為了分配運算時間。例如在麻省理工學院,每個使用者每週可以使用四小時,結果資工系的博士研究生艾倫.希爾(Allan Scherr)用完自己的時間之後,就把UACCNT.SECRET調閱出來,「借用」另一位同事的帳密來繼續工作。後來還出現過另一個程式錯誤,登入時大家看到的不是平常的招呼語,而是所有用戶的密碼,逼得所有使用者只好立刻更換新的密碼。

從 Multics 到 UNIX

共用分時系統雖然有很多侷限,但它證實了分時系統不僅造得出來,而且大家都很喜歡。程式設計師都想立刻獲得回饋,並和電腦即時互動。因此麻省理工學院、貝爾實驗室、奇異公司(General Electric)聯合組成了一個大型團隊,開發一套完整的多人使用系統來取代傳統的批次處理,這就是「多工資訊與計算系統」(Multiplexed Information and Computing Service):Multics。

Multics團隊在打造分時系統時,就知道會碰到資安問題,因此開發了很多沿用至今的先進技術,例如把密碼存成亂碼,防止艾倫.希爾那套方法故技重施。在長達六年的開發之後,Multics於一九六九年問世。

軍方一眼就看出Multics潛力無窮。有了Multics,五角大廈就不用購買好幾臺電腦,分別處理一般資料、機密資料、極機密資料、絕對機密資料,只要用Multics把不同使用者隔開就可以辦到。照軍方的估計,光是改用分時系統就可以省下一億美元。

但空軍在購入Multics之前,先簡單測了一下,結果發現一大堆問題。他們花了三十分鐘搞懂要怎麼駭進Multics,然後只花兩小時就把駭客程式寫了出來。最後的評估報告寫著:「惡意使用者想要入侵太簡單了。」

學術圈也不喜歡Multics。資工學者不是很擔心資安漏洞,但覺得Multics的架構複雜而累贅,顯然是那種大型組織委員會搞出來的爛東西。一九六九年,丹尼斯.里奇(Dennis Ritchie)跟肯.湯普森(Ken Thompson)帶走Multics團隊中的一群人另闢江山。他們跑去貝爾實驗室的閣樓,以備用的PDP-7開發新系統。PDP-7是迪吉多公司(Digital Equipment Corporation)製造的「迷你電腦」,成本是IBM主機的十分之一。

這個團隊從Multics的失敗之中學到一個教訓:簡單就好。他們決定用模組化的概念打造一個新的多使用者系統,讓每個程式專門負責一件事。如果需要一個新功能,不要去修改既有的程式,而是額外寫一個,然後把新舊程式串在一起執行複雜的任務(也就是所謂的腳本〔scripts〕)。最後,他們寫出了「UNIX」。這個名字一開始甚至只是自嘲,因為早期版本一次只能讓湯普森一個人使用。史丹佛國際研究中心的資安研究員彼得.紐曼(Peter Neumann)看到這種窘境,開玩笑說這根本是「被閹割的Multics」,於是砍了Multics裡面的Multi(好幾個人)變成「UNICS」,最後才變成現在的UNIX。

一九七一年,UNIX的第一版剛上市就一炮而紅。它的系統充滿無限可能,吸引了一大批死忠粉絲,很快就成為大學和實驗室的標準配備。自此之後,UNIX體系就一直主導整個世界。蘋果電腦和iPhone使用的系統,都直接改自貝爾實驗室的UNIX。谷歌、臉書、亞馬遜、推特的伺服器也都使用Linux──光看Linux這個字就知道它是在模仿UNIX,只是為了避免侵犯智慧財產權,而用不同的程式碼來寫而已──就連家用路由器、智慧型喇叭Alexa、智慧型烤麵包機裡面都是Linux。近幾十年來,唯一不理UNIX系統的只有微軟;但到了二○一八年,就連Windows 10都內建了整套Linux核心。如今UNIX系統已經無所不在,占據了地球上每臺電腦。

里奇在一九七九年曾說過:「第一件要承認的事情,就是無論從任何意義來說,我們在開發UNIX的時候都沒有考慮到安全性。這注定讓UNIX充滿漏洞。」其中有些漏洞是程式碼裡面的無心之過;有些則是為了讓使用者更方便,而給了太多特權。畢竟湯普森跟里奇打造這個系統的目的,本來就是讓研究人員彼此分享資源,而不是為了防小偷。

所以整套UNIX的寫法都源自學術圈的抽象準則,包括以自由競爭的方式選出最好用的作業系統、科學界的文化習慣,以及湯普森跟里奇兩人自己的價值觀。以上所有因素加在一起,讓UNIX把便利與協作看得比安全更重要。當然,UNIX大量的資安漏洞,也讓人不禁懷疑學術界哪天會因此成為大肥羊。

《戰爭遊戲》

一九八三年,民調公司Louis Harris & Associates發現,當時只有10%的成年人家裡有電腦。這些擁有個人電腦的人裡面,有14%的人使用數據機(modem)收發資訊。當這些電腦使用者被問及:「在家裡的電腦跟別人交流……對你來說有用嗎?」有45%表示用處不大。

但沒過多久,美國人就發現了網路的強大力量。電影《戰爭遊戲》(War Games)在一九八三年上映。由馬修.博德瑞克(Matthew Broderick)飾演的主角大衛.萊特曼,是一個住在郊區的少年宅男,就像另一部電影《蹺課天才》(Ferris Bueller’s Day Off)裡的主角布勒一樣,差別只是大衛很懂電腦,整天在父母的監督下玩。他為了追求艾麗.希迪(Ally Sheedy)飾演的珍妮佛,駭進了學校電腦,把珍妮佛的成績從B改成A。而他在亂玩電腦的時候,也發現可以用隨機撥打電話的方式,找到網路上的其他電腦(這招也因為電影的關係,被後世稱為「撥號攻擊」)。在用數據機隨便撥打的過程中,他無意間連進了五角大廈。大衛以為自己發現了一款尚未發行的電腦遊戲,於是請網路那頭的程式「約書亞」開啟戰爭模擬場景。約書亞問道:「下一盤刺激的西洋棋不好嗎?」大衛回:「全球核戰比較好玩啦!」大衛完全不知道自己在做什麼,更不可能知道「約書亞」其實是北美防空司令部的核武軍火管理程式,只是像遊戲一樣,開始命令約書亞部署導彈跟潛艇,差一點就真正發動了核戰。幸好他在影片的最後一刻關掉了遊戲,因為聰明的約書亞說:「這場遊戲唯一的贏法就是直接不玩。」

《戰爭遊戲》贏得八千萬美元的票房,以及三項奧斯卡提名。而它也同時向世人介紹了網路空間以及資訊安全的概念。媒體立刻開始探索這個過去一無所知的異世界,想知道是不是每個青少年只要有一臺電腦、一支電話、一臺數據機,就能侵入軍方主機,發動第三次世界大戰。

這個問題同時成為美國三大電視網的焦點。ABC新聞把《戰爭遊戲》比作史丹利.庫柏力克(Stanley Kubrick)的冷戰喜劇《奇愛博士》(Dr. Strangelove),認為網際網路絕不只是郊區年輕宅男的玩具,而是可能會引發核戰末日的毀滅性武器。這說法搞得人心惶惶,北美防空司令部發言人湯瑪斯.布朗特將軍(General Thomas Brandt)將軍只好出面澄清,向ABC新聞保證,片中的漏洞絕對不可能成真。「傳遞這些資訊的全都是真人,做出相關決定的也全都是真人。北美防空司令部不會讓電腦做任何決定。」至於NBC新聞,則一邊說電影「真實得讓人怵目驚心」,一邊建議每個擁有電腦、數據機、自動電話撥號器的電腦天才不要白費功夫,「北美防空司令部的電腦,是不可能真的讓你們拿來玩核戰遊戲的。對我們這些老百姓來說,這部電影就只是一部電影。」

但可不是每個人都這麼好安撫。雷根總統(Ronald Reagan)在白宮看完這部片之後就非常擔心,他在一場討論核彈與軍備管制的參謀長聯席會議(Joint Chiefs of Staff)上,當著國務卿、國防部長、財政部長、國安官員,以及十六名位高權重的國會議員的面,打斷原本的演講,改問大家有沒有看過這部電影──結果沒有人看過,畢竟該片上週五才剛上映。接下來,雷根總統詳細地敘述了影片情節,然後轉頭問會議主席約翰.維斯里將軍(General John Vessey):「這種事真的會發生嗎?」維斯里將軍說,他回去調查看看。

一週之後,維斯里將軍前來回報。原來這事軍方已經研究將近二十年了,而且「總統先生,問題比您想的還嚴重很多」。雷根下令立刻著手開始處理,十五個月後,美國政府制定出〈一四五號國家安全指令〉(NSDD-145,National Security Defense Directive),授權國安局負責保護美國國內的網路安全,防止「外國……恐怖組織與罪犯」的攻擊。一九八四年九月十七日,雷根簽署了這項機密行政命令。

《戰爭遊戲》不僅促使白宮開始預防後人所謂的「網路戰」,也促使美國國會開始處理「網路犯罪」問題。影片上映後,參眾兩院都舉行資安小組聽證會,並在會議上播放《戰爭遊戲》的片段。堪薩斯州民主黨議員丹.葛克曼(Dan Glickman)如此開場:「接下來四分鐘我們將播放《戰爭遊戲》的片段。我認為它把問題簡述得非常清楚。」這些聽證會最終讓各種資安規範升級為正式法律。一九八四年,美國制定了第一部全面性的網路法律,同時也是第一部電腦犯罪法:《非法入侵電腦設備暨電腦欺詐及濫用法》(Counterfeit Access Device and Computer Fraud and Abuse Act),並在同年十月通過。

為此動起來的可不只有政治人物而已。開發UNIX系統的湯普森在一九八四年獲得計算機科學家的最高榮譽:圖靈終身成就獎(Turing Lifetime Achievement Award),並在獲獎演講中提到網路安全,成為在該場合討論資安的第一人。他在演講的前半段,描述了一九七四年美國空軍的測試員如何駭進Multics系統。測試員當時在Multics中插入一個無法檢驗的後門,就像書櫃後方的祕密通道一樣,讓人可以繞過大門的重重安檢直接潛入。湯普森提到,UNIX也有完全一樣的漏洞(他自己就在貝爾實驗室使用的UNIX裡插了一道後門,而且完全沒有曝光。多年之後,俄羅斯情報機構在二○二○年的SolarWinds攻擊事件中也是用同樣的方法,神不知鬼不覺地入侵了大量美國電腦)。湯普森說:「這代表除了你自己寫的程式以外,沒有任何程式可以完全信任。」但問題是,沒有人能夠寫完世界上的每個程式。只要社會需要分工,資安就注定有漏洞。

湯普森在說完資安概念之後,卻轉向道德勸說。曾經打造過UNIX的他,相當清楚駭客是怎麼利用UNIX這類多使用者系統,他認為這種行為「根本就跟酒駕沒兩樣」,並在演講結束後,直指電影跟報紙「把青少年駭客吹捧為神童,將破壞者當成英雄崇拜」,再這樣下去「災難就要來了」。當然,湯普森說的絕不只是《戰爭遊戲》,因為該片上映之時,名為「四一四俱樂部」(414 Club)的六名駭客就侵入了許多知名的電腦系統,包括負責設計美國核武的洛斯阿拉莫斯國家實驗室,以及規模極大的平安太平洋銀行(Security Pacific National Bank),駭客年齡全介於十六至二十二歲之間。「四一四俱樂部」的成員都沒什麼社會經驗,但《今日秀》(The Today Show)、《唐納修脫口秀》(The Phil Donahue Show)紛紛上門採訪,他們甚至登上一九八三年九月五日《新聞週刊》頭版頭條,年僅十七歲的發言人尼爾.派崔克(Neal Patrick)顯得相當得意。

湯普森指出,社會描繪駭客的方式造成了文化鴻溝:「闖進別臺電腦的行為,就跟闖進鄰居家一樣需要譴責。無論鄰居有沒有鎖門,這都是錯的。」

無論社會怎麼看,美國國會都很快地提高了駭客行為的刑責。一九八六年通過的《電腦詐欺與濫用法案》(Computer Fraud and Abuse Act)將所有「未經授權存取」政府部門電腦,並至少造成一千美元損失的行為,都列入聯邦刑法的處罰範圍,違反者最高將面臨二十年的徒刑,以及二十五萬美元的罰金。

這部新法律的目的,就是要嚇阻駭客像好萊塢電影的情節那樣,潛入一大堆政府電腦,或癱瘓整個網際網路。這也告訴我們,無論一九八八年十一月二日晚上那隻不斷自我複製的蠕蟲是誰撰寫的、誰放出的,他的麻煩都大了。

鮑伯.莫里斯

十一月三日晚上,小羅伯.莫里斯打電話回家找爸爸。他的母親接起電話,說爸爸已經睡了,「怎麼了,你很急嗎?」「呃,對。我真的有事情得問他。」羅伯回道。

老羅伯.莫里斯(Robert Morris, Sr.)人稱「鮑伯」,當時五十六歲,是國安局電腦安全中心的首席科學家。他其實是個完全不適合穿西裝的那種人,專攻數學密碼學,整天蓬頭散髮,留著一把長長的灰鬍子,總是掛著瘋瘋的眼神跟壞壞的微笑。他最近才搬到華府,之前二十六年都待在貝爾實驗室,開發了UNIX裡面的很多核心應用程式。他也是湯普森的好友──沒錯,就是幾年前公開譴責媒體吹捧的神童駭客根本就是酒駕瘋子的那個湯普森。

這樣的專業人士,一聽完消息就知道兒子會吃上官司。雖然聯邦調查局還沒找出釋放蠕蟲的元凶,但那只是時間問題。因此,鮑伯建議羅伯不要更改原本的生活規畫,暫時假裝一切沒事,隔天去費城找女友。

羅伯做的事情,讓鮑伯覺得恐懼又尷尬。鮑伯在華府還是個新人,兩年前才剛調到位於米德堡的國安局總部。「資安負責人的兒子駭進了全國網路?」這種事傳出去可真的有夠糗。

而且,這件事發生得很不是時候。推薦鮑伯接任國安局首席資安科學家的馬文.謝弗(Marvin Schaefer)說:「對鮑伯這種密碼學者來說,國安局根本就像是聖城麥加。」兒子打電話來的時候,鮑伯甚至還在接受培訓,以便晉升到更機密的高階職位。他向《紐約時報》坦承,每天晚上都出現兒子的新聞「對他的職涯一點也不好」。

但儘管如此,鮑伯卻幾乎生不了兒子的氣。羅伯從小就有樣學樣,會自己用鮑伯裝在家裡的終端機,探索鮑伯在貝爾實驗室的主機,過程中還學會了UNIX。莫里斯父子二人都對網路安全情有獨鍾,最喜歡去檢查那些乍看之下安全無虞的軟體,試圖找出漏洞,他們平時也經常聊這類話題。《紐約時報》的記者約翰.馬可夫(John Markoff)說得好:「這個曲折離奇的事件,讓我們看見一對神奇父子的內心世界,揭露了一整個當代次文化的樣貌。過去三十年來,我們的社會已被電腦控制了很大一部分,而這些工程師最愛的事情,就是去挑戰最困難的電腦謎題。」當記者問羅伯的母親,這對父子知不知道彼此的相似之處時,她回應:「拜託!他們清楚得很!」

馬可夫是在與葛雷姆對話的時候,發現寫出蠕蟲的人就是羅伯。葛雷姆在提到元凶的時候一開始都稱為「X先生」,但某次不小心說溜嘴,改稱為「rtm」。當時有一種類似於網路電話簿的UNIX服務叫做Finger,馬可夫把「rtm」輸入程式,發現那就是小羅伯.泰潘.莫里斯(Robert Tappan Morris)。

於是馬可夫去問鮑伯這是怎麼回事,鮑伯知道再演下去也沒意義,就直接幫兒子自白。他告訴《紐約時報》,這隻蠕蟲是「一位無聊研究生寫出來的」,話語中一邊流露著憤怒與歉意,一邊忍不住吹噓一下兒子跟他自己的能力。「全美國大概有幾十個人可以寫出這種程式。我就寫得出來,而且我會寫得比他好。」鮑伯帶著有某種頑皮的幽默,談到兒子沉迷資安時,他還說:「我總覺得哪天他認識女生之後,就不會再玩這個了。女生比這個難很多啊。」

於是聯邦調查局對羅伯展開刑事偵查,列為「非常優先」的任務。不過,他們連怎麼查都不知道,調查局發言人米奇.德瑞克(Mickey Drake)坦承:「我們從沒辦過這種案子。」雖然駭客在此之前就被起訴過──例如一年前,德州沃斯堡的一名員工,在被保險公司解雇之後心懷不滿,侵入公司電腦並銷毀了十六萬八千份薪資紀錄,最後被判三級重罪──但這類案件在當時尚未跨至聯邦層級,司法部從來沒有根據一九八六年通過的《電腦詐欺與濫用法案》,在陪審團面前審判過任何人。而且他們也無法決定到底該用一年以下徒刑與罰金的輕罪,還是最高十年徒刑的重罪來起訴羅伯的行為。

鮑伯知道兒子會被起訴,於是請了刑事辯護律師湯瑪斯.圭多博尼(Thomas Guidoboni)。結果第一次面談時,羅伯對法律的無知程度把圭多博尼嚇了一大跳。羅伯連自己會吃上刑案都不知道,只擔心會被康乃爾大學開除。圭多博尼還說:「在我遇到的二十多歲年輕人之中,羅伯可能是最年輕的那個。」羅伯見完圭多博尼的回家途中,在地鐵裡嚇到暈了過去。

蠕蟲是什麼東西?

程式碼有很多種類型,而最常見的程式都是用高階程式語言(high-level programming language)寫的。無論是繼承B語言的「C」,繼承C語言的「C++」(該語言以「++」代表「加一」,故「C++」即為「C語言後繼者」)、以英國喜劇劇團蒙提.派森(Monty Python)為名的「Python」,以及用流行的程式語言「Java」當名字噱頭,但其實跟Java沒什麼關係的JavaScript,全都是高階程式語言。這些語言的指令,是用英語加上一些簡單的算術符號寫成,語法也很簡單,人類很容易就能上手。

但電腦的中央處理器(CPU)聽不懂高階語言。它根本聽不懂英語,只會使用「機器碼」(machine code)。這是一種二進制語言,所有指令都由0跟1的字串組成,例如「01100000000000100000010000000010」代表「2+2」。人類寫完高階語言之後,會將程式送入「編譯器」(compiler)轉換成機器碼,讓中央處理器執行。此外為了處理得更快,通常也會把機器碼存成二進制的檔案(除此之外還有一種叫做「組合語言」〔assembly language〕的程式碼,不過我們等第三章再提)。

小羅伯.莫里斯的蠕蟲是用C語言寫的,但他發布的不是這個版本,而是編譯後的二進位機器碼版本。羅伯被自己的行為嚇呆的時候,那些系統管理員手上只有機器碼,只好試圖「解碼」(decompile),想辦法把中央處理器拿到的原始程式語言,重新轉成羅伯原本撰寫的高階語言。但要把只有機器能夠理解的一大串0跟1轉換成人類可以理解的程式碼,實在是非常困難。

幸好在悲劇發生之時,這些管理員也遇上一次好運。柏克萊大學剛好在那一週舉行了一場UNIX研討會,世界各國的專家全都齊聚一堂。於是蠕蟲開始攻擊的時候,他們立即連夜趕工,在十一月四日早上就把蠕蟲解碼完成。他們發現這隻蠕蟲之所以擴散速度極快,是因為它攻擊電腦的方式不是只有一種,而是四種。用駭客的術語來說,它有四種攻擊途徑(attack vectors)。

第一種攻擊途徑非常簡單。UNIX讓使用者自己選擇「信任主機」(trusted hosts),在網路上有帳戶的人,可以叫UNIX「信任」網路上的某些主機。如果你選擇了機器#1,之後就可以從機器#2遠端操作機器#1,無須再次輸入密碼。這樣你就可以同時使用好幾臺機器,不用每次都登錄。

這隻蠕蟲在第一次登入某臺機器時,就會檢查該臺機器是否信任了其他主機。如果找到了信任主機,就會呼叫對方看看在不在線上。對方一旦以預期的方式回應,兩臺機器就會相連。接下來,蠕蟲就會傳送一個叫做「bootstrap」的小程式,複製一份蠕蟲存到對方的機器上,並開始執行。這個副本會接著尋找下一臺機器,開始做同樣的事,蠕蟲就會移動到下一臺信任主機。

第二種攻擊方式是針對SENDMAIL,一個由柏克萊大學資工系大學生艾瑞克.奧曼(Eric Allman),在一九七五年撰寫的電子郵件程式。艾瑞克當時的老闆是一個分秒必爭的系統管理員,所以奧曼寫SENDMAIL的時候,刻意留了一道後門:如果安裝了「偵錯」(Debug)功能,他就可以直接把程式寄到管理員的電腦中,讓SENDMAIL自動執行該程式。這麼一來,奧曼就能省下很多時間。麻煩的是,結束原本的工作之後,奧曼也忘了自己裝過後門。

而UNIX預設的郵件程式,剛好就是SENDMAIL。如果使用者在安裝時,也安裝了「偵錯」功能,電腦就會產生後門。莫里斯的蠕蟲就是把握了這個大好機會:蠕蟲一旦發現信任主機都感染完畢,就會用SENDMAIL把自己的副本寄出去,繼續感染網路上的其他節點。

第三種攻擊途徑,則是利用密碼的漏洞。當你在手機或筆記型電腦上輸入密碼時,作業系統不會直接把密碼存起來,而是用一個程式,透過複雜的數學方法打亂密碼,然後儲存起來或傳輸出去。作業系統上只有打亂過的版本,看不出你原本輸入的是什麼,所以駭客即使入侵你的電腦,也找不到密碼。

當使用者在UNIX上輸入密碼時,作業系統會啟動一個叫做「crypt」的程式(話說這程式就是鮑伯.莫里斯寫的),打亂密碼之後,存進一個文件。下次使用者再登錄的時候,UNIX就會叫「crypt」用同樣的方法再打亂一次,然後比較這次打亂的結果跟文件中儲存的版本是否相同。如果相同,就讓你登錄。

密碼跟雞蛋一樣,打亂之後就很難還原。而且用越厲害的數學工具打亂密碼,要還原就越難。所以羅伯完全沒有打算正面挑戰他爸寫出來的複雜編碼系統,而是反過來猜密碼是什麼。在羅伯撰寫的蠕蟲裡面,有一份從哈佛、康乃爾、柏克萊大學的系統中整理出來的常用密碼清單。清單包含四百個字詞,光是「A」開頭的詞就有academia(學術)、aerobics(有氧運動)、algebra(代數)、amorphous(不定形)、analog(類比)、anchor(錨)、andromache(特洛伊王子的妻子安卓瑪希)、animals(動物)、answer(答案)、anthropogenic(人類製造的)、anvils(鐵砧)、anything(任何東西)、aria(詠嘆調)、ariadne(協助殺死牛頭人的亞莉阿德妮)、arrow(箭)、arthur(亞瑟王)、athena(智慧女神雅典娜)、atmosphere(大氣)、aztecs(阿茲提克)、azure(蒼藍)。蠕蟲把這些詞輸入「crypt」打亂,然後比對電腦中的密碼文件有沒有相同的打亂字串,如果有,就知道這臺電腦的密碼,是列表中的某個詞彙。舉例來說,如果蠕蟲在你的文件中發現「apple」打亂後的字串,就猜測你的密碼是「apple」,接下來只要輸入「apple」就能登入你的電腦。

第四種攻擊途徑最為複雜,下一章我們再詳細解釋。但簡單來說,這種途徑是攻擊Finger程式(就是讓馬可夫得知元凶是羅伯的那個程式)。當你輸入「finger rtm」(rtm是羅伯的使用者名稱),Finger就會檢查機器上有沒有任何叫做「rtm」的使用者,找到的話,就會把該使用者的全名、使用者名稱、地址、電話號碼等等資料顯示出來。

但這隻蠕蟲輸入的並不是「rtm」這種使用者名稱,而是一大串包含惡意程式碼的字串,遠遠超出Finger能夠處理的範圍。Finger一收到字串之後就會爆掉,電腦的記憶體也會被占滿,然後覆蓋Finger運作所需的程式碼。被覆蓋的空間,就成為蠕蟲的新家。

因為小羅伯.莫里斯的蠕蟲有四種攻擊途徑,傳播速度非常快。如果找不到信任的主機,就會利用SENDMAIL傳播到其他主機。如果沒辦法用SENDMAIL打開另一臺主機的後門,蠕蟲就轉為猜測密碼。如果連密碼都猜不出來,就直接搞爆那臺電腦的Finger,硬擠進電腦裡去。四個途徑只要有一個成功,蠕蟲就會擴散到另一臺機器上。

莫里斯蠕蟲的教訓

那些用《戰爭遊戲》來理解網際網路和駭客技術的一般人,在聽到莫里斯蠕蟲事件之後,以為駭客可以入侵軍用電腦,大概也不奇怪,畢竟小羅伯.莫里斯感覺就像是現實中的該劇主角大衛。莫里斯蠕蟲事件爆發隔天,所有大報都刊登了澄清文,保證這隻蠕蟲沒有感染到機密級的軍用電腦。

但其實軍用電腦本來就幾乎不可能被感染,因為除了航太總署艾姆斯研究中心及勞倫斯利佛摩國家實驗室這幾個地點以外,軍方機構有自己的網路系統,稱為Milnet。早在之前的Multics事件,軍方就知道自己需要的資安等級太高,一旦與網際網路整合,就很難把自己的端點守護好。

軍隊是一群本來就很愛搞神祕的人,他們希望電腦的程式碼嚴密到滴水不漏,所以在採購設備時,總是會要求賣家用數學方法證明作業系統足夠安全。如果是軟體,要求的安全等級更是誇張,不但要用非常形式化的數學方法呈現軟體的設計架構,還要用邏輯來證明。軍方收到廠商的報告之後,會由國安局電腦安全中心來評分,如果安全評分不夠高,就不可能獲得採購。對軍方來說,這是確保系統不被入侵的唯一方法。

然而,這種方法有很大的漏洞,VAX電腦上的VMM資安核心就是個慘痛的教訓。一九八九年,羅傑.謝爾少校(Major Roger Schell)帶領團隊,撰寫了一個經得起最嚴格的正式測驗,並在國安局拿到最高A1評分的作業系統。他們在一個其他人進不去的實驗室裡進行開發,且撰寫程式碼的電腦被鎖在實驗室的一個獨立房間中,房間外面還圍了一圈鐵牢籠。進出實驗室和鐵籠,都要插入特製的鑰匙卡。而且整臺電腦完全「實體隔離」(air gapped)於網路之外,沒有連接任何其他電腦,更別說連上網際網路了。這一道道的防線,都是為了防止外人前來植入後門。

十年之後,系統終於建成。一九八九年底,政府與航太部門開始試跑VMM安全核心。但沒過多久,生產VAX小型電腦的迪吉多公司卻在一九九○年三月宣布退出,搬走正在測試的原型機,因為VMM核心的市場太小了,繼續生產下去大概無法回本。在接下來的十年之內,民間陸續出現各種商用作業系統,它們全都沒有VMM那麼安全,但更好用、功能更強也更多,而且最關鍵的是成本更低。在日新月異的軟體業,想要正式檢驗軟體的安全性簡直螳臂當車:等你檢驗完成,軟體已經過時了。

所以在軍方搞正式數學證明時,科學界選了一種完全不同的方法,那就是當代所謂的自由及開源軟體(free and open-source software,FOSS)。舉例來說,柏克萊的UNIX寫了很多SENDMAIL這樣的新程式,把它們包在一起用「柏克萊軟體套件」(簡稱BSD)的名義發布,讓所有人免費下載。這些BSD授權條款的軟體不但免費,而且可以自由修改。軍方為了確保機密,要求程式的原始碼不得外流,BSD卻選擇大開大放,讓程式碼完全「開源」。所有的程式碼都完全公開,使用者可以合法使用並自己修改。

自由開源社群基本上相信每個人最重視的是資訊,而不是機密性或完整性。沒有人知道發行出來的UNIX是否暗藏後門,但程式碼完全開源,整個程式就「可以稽核」(auditable),潛在的風險沒那麼高。因為林納斯定律(Linus’ Law)說得好:「只要看的人夠多,問題就無所遁形1(with enough eyeballs, all bugs are shallow)。」如果程式真有後門,遲早會被發現。這種「找一堆人來看」的方法,當然沒有軍方的數學證明那麼安全,但已經足以生產出一大堆超級好用的應用程式和作業系統。

因此,到一九八○年代末,美國出現了兩套網際網路:軍方一套,科學界一套,兩套網路所根據的原則完全不同。軍方的網路極為重視資訊安全,畢竟他們手裡掌握了美國最珍貴的機密:軍事計畫、兵力部署、武器開發、弱點評估、戰略分析、科學研究,以及高級官員的私人通訊。而想入侵軍方的勢力也握有鉅資、心智相當堅定、網羅許多職業級的電腦高手。要保障這麼重要的資料不被最強大的對手入侵,就必須時時如履薄冰。而對軍方而言,他們最可靠的保證,就是數學證明。

然而科學家所打造的網際網路,原則卻完全不同。他們認為使用者被攻擊的風險很低,雖然駭客有入侵的能力,但通常都沒有入侵的動機。而且當時既沒有電子商務,也沒有社群媒體,人們也沒有成天泡在線上,電腦裡幾乎沒有儲存什麼重要資料。既然如此,駭客大費周章侵入電腦之後,到底能從程式和資料得到什麼?科學家在打造網際網路的時候,是為了實現社群價值,並交流和分享研究成果。這個網際網路本身就是一個宣言,讓人們知道可以放心嘗試各種實驗、盡情磨練最精湛的技藝、不用把每個人都當賊。

科學家的網際網路的確不安全,但長成了一片生意盎然的茂密叢林。儘管研究人員的軟體並未像軍方那樣通過嚴格測試,卻發展出大量有用的協定、工具和基礎設施,許多直到今日仍在使用中。科學家相信每個使用者都有社群意識,都認為互助比搗亂更重要。「駭客」這個詞就是出自這個社群,並且一開始沒有貶意2,而是指那些能夠用優雅簡約的程式碼解決困難問題的世外高人。直到後來才變成了一種搞破壞的人。3

像羅伯這樣的駭客,就是科學家們最初所稱的駭客。他在撰寫蠕蟲時還是康乃爾大學的學生,一邊讀大學,一邊用UNIX系統維護哈佛資工系的網路。他之所以會寫出蠕蟲也不是想要造成任何傷害,而是想做科學上的研究,了解當時網際網路的規模有多大。

但即便他毫無惡意,蠕蟲依然癱瘓了整個網路。如果好人都能搞出這麼大的破壞,真正的壞人會有多恐怖?

莫里斯蠕蟲事件,讓科學界發現自己造出了一個怪物。端對端原則把絕大多數的責任交給使用者,導致整個網路出現巨大漏洞。首先,如果使用者不重視資安,不使用密碼,入侵者就可以大搖大擺走進他們的作業系統,連攻擊都不用。此外,如果使用者只知道要守護資安,卻使用了不安全的作業系統,他們的城牆就是紙糊的,駭客可以輕鬆戳破。而且,如果網路上大部分的作業系統都不安全,病毒就可以到處亂竄,接連攻陷一臺臺電腦,反正網路只負責傳輸資訊,不會檢查資訊的內容。等到整個網路都被感染,它還可以從網路之間的連結移動到另一個網路,尋找下一群受害者。莫里斯蠕蟲就是這樣,它在設計時毫無惡意,卻讓整個網際網路一度動彈不得。如果是本身帶有惡意的程式碼,造成的可能就是永久性的大災難。

莫里斯蠕蟲不僅讓科學家發現茲事體大,也讓軍方有如驚弓之鳥。網際空間果然如軍方所料,是個危險的地方。更麻煩的是,軍方當時的維安方法費用太高,注定無法永續。軟體只會越變越複雜,正式的數學證明只會越來越昂貴耗時,這種方式緩不濟急;而且有能力檢驗軟體安全程度的專家,全世界不到兩百人。最終軍方必須妥協。但這樣的妥協可能會讓蠕蟲更加肆虐,更可能會讓《戰爭遊戲》從好萊塢的幻想成為恐怖的現實。

NOTE

  1. 林納斯定律來自 Eric S. Raymond, in the Cathedral and the Bazaar (Sebastopol, CA: O’Reilly Media, 1999),以最早開發 Linux 核心的林納斯.托瓦茲命名該定律
  2. 駭客【名詞】1. 喜歡鑽研電腦系統的技術細節,並研究如何強化電腦能力的人。大部分的使用者會盡量避開技術細節,駭客卻樂此不疲。2. 不願意僅用理論討論,而是會瘋狂撰寫程式的人。Eric Raymond, The New Hacker’s Dictionary (Cambridge, MA: MIT Press, 1991)
  3. 這個詞的語意變遷,參見 Helen Nissenbaum,“Hackers and the Contested Ontology of Cyberspace”, New Media & Society 6 (April 2004): 195–217. 有些人為了區分駭客的原義和那些專門搞破壞的人,會將搞破壞的稱為「黑帽駭客」(Cracker)。參見 Eric Raymond,“Cracker”, The Jargon File.


※ 本文摘自 《奇幻熊在網路釣魚》,原篇名為〈Chapter 1 網路大蟲〉,立即前往試讀►►►