Windows 與 UAC

微軟為了解決長久以來困擾 Windows 用戶的保安問題,在 Vista 裏加入了所謂的 UAC – User Account Control。簡單來說,程式如果要用到系統管理員才能用到的 API,例如更改系統設定,安裝程式,系統維護,設定防火牆等等,都必須經過 UAC 向使用者取得確認,那就是在螢幕上顯示詢問,「你要讓這程式更改系統設定嗎?拒絕還是接受」使用者要按「接受」才能讓程式繼續執行。

但是,由於牽涉過多 API,程式的流程裏就可能要用上十多次 UAC,反而麻煩了使用者。隔壁的蘋果也不忘在廣告挖苦對方一番,在廣告中 PC 連跟 Mac 說句話也得要身旁的保鏢批准。雖然現實沒麻煩到這個程度,但也夠擾人了。雖然微軟在 SP1 及後來推出的 Windows 7 大量減少詢問出現的次數,不過有時會因 API 的問題令某些程式不能執行。

其實,root cause 不是微軟 NT 架構不夠安全,而是其使用者和程式開發人員的不配合。Windows 曾經有兩大品種,其一是繼承 Windows 3.1 血統的 9x 系列,另一邊則是來自 Windows NT 4 的 NT 核心。9x 系列至末代 Me 都沒有多用戶的概念,作業系統僅設計讓同一人執行,程式亦 assume 執行者擁有更改電腦任何設定的權利。所以當微軟準備將兩系整合成家用商用皆宜的 XP,便曾考慮過將預設帳戶預訂為沒管理員權限的普通使用者。奈何很多來自 9x 系統那邊的程式都因為 API 大受限制停止運作,所以方案就此作罷。

在平衡兼容性和保安問題兩大因素,才出現了 UAC 這四不像。對比 *NIX 的 sudo,UAC 是跟軟件兼容妥協下的產物。UAC 除了影響正常操作外,也對保安沒甚麼助益。用戶遇著上千百萬個詢問視窗,難免養成一種不管內容是甚麼都按 “Yes”,”Allow” 的反射行為,不論是菜鳥還是資深用家也是如此。有些用戶嫌麻煩更索性關掉。即使 Vista SP1/Win7 已大大減少這類視窗出現次數,但這亦無補於事。

要改變這個死局,微軟不是跑去改善 UAC 的 User Experience,而是應該協助使用者洗脫惡習,戒除凡事每每用 admin 權限的習慣。既然也著手增強保安加入了 UAC 這擾人之物,何不徹底改革,將 admin right 改成如非必要不能動的帳戶?

我媽的電腦便是如此。她也是染上了「按 Yes/Allow/Next 準沒錯」的普通用戶,也許由於這樣她以前的電腦積滿了不少不明來歷的怪軟件。為她安裝新電腦我便做了個小實驗,將她要用的軟件裝好,再將她的帳戶降格為普通用戶。這樣我至少不用再為奇怪的軟件煩惱,她要安裝真的有用的軟件,也只要我幫她 Run as Admin – 也就是 Windows 的 sudo,就能解決。

顯然把 OS X/Linux 的一套學習過來套用明明就沒問題,但箇中有甚麼原因令視窗出現了 UAC,則不得而知。

Debian 家族非常嚴重的安全問題

本來昨天就打算說一下的了,無奈網頁寄存的資料庫好像有點問題,一整天都發不了文章。

言歸正傳。Linux 系統尤以安全見稱,但是昨天從 Debian Linux 團隊中傳出一個駭人聽聞的消息。兩年前由於一些人為的錯誤,用於產生密匙(Private Key) 的亂數產生器不小心被移除了。

很簡略的解釋一下。在現代加密技術裡,混亂性是決定加密資料的安全性的一項重要因素。就好像銀行會要求客戶的帳戶密碼非常難猜,最好跟自己沒有關係,以免被不法之徒撞破。電腦加密原理都差不多,不過製作密碼則交由電腦程式去負責。在使用者要求產生密匙(一串長到你不會記得住的數字)的時候,程式會使用亂數產生器弄一個隨機數。以後要加密文件的時候,電腦便會將這串數字和要加密的文件丟到演算法裡面,結果便是加密了的文件。

這一次的問題,就是最近有人發現這個亂數產生器在兩年前不小心被除掉。換而言之,有心人都可以很容易「猜」到這兩年來由 Debian OpenSSL 程式庫亂數產生器系統所產生的密碼,包括 SSL 證書,SSH 鑰匙等等。

令人震驚的是,負責程式碼維護的工作者居然可以這樣的不小心,而且這問題居然可以一直存在兩年而沒有被察覺。有人半開玩笑的質問那傢伙是不是來自微軟的間諜,此外這事更引發一場「開源是否真的安全」的討論。

如果你像我一樣曾經使用 Debian/Ubuntu 產生密匙用作無密碼自動登入,也許是時候重新整理一下那堆密匙了。

私密照的啟示

  1. 要在網絡上做一些可能會被抓的行為,不論是被警察還是秘密邪惡組織也好,請先隱藏好你的 IP。例如用公用代理伺服器呀,洋蔥路由器等等。
  2. 硬碟裏有重要,見光即死的檔案,請使用加密軟件,以免外洩。我推薦 TrueCrypt。TrueCrypt 還提供偽裝空間功能,即使被對方嚴刑拷打迫出密碼,也可以以假密碼混過去。
  3. 只光顧一個你信任的電腦維修服務供應商。電腦離開自己身邊之前,請好好檢查和處理電腦上的個人資料。

OpenID 2.0

也不是這幾天的新聞,OpenID Foundation 終於正式公佈 OpenID 2.0 的規格,也已有一系列的程式庫跟 OpenID 服務供應商宣佈支援新規格,包括比較流行的 JanRain PHP LibraryMyOpenID

在普通用家角度來說,這更新有甚麼意義呢?OpenID Foundation還同時公佈了交換個人資料的協定規格,除了可以讓服務提供的第三方向 OpenID 提供者要求更多樣化的使用者資訊,更可以將用戶儲存於服務商的資訊回傳到 OpenID 提供者。比方說,只要在以 OpenID 登記過的相片網站設定好頭像,這頭像設定也會隨著你的 OpenID 四處走。用戶也可以在 OpenID 提供者直接修改資料,讓所有網站一同更新。

另一方面,變動也便利開發者不少。首先協定將資料由 GET 改以 POST 傳送,令傳送資料的大小不再受限制。加密和公開鑰匙交換的演算法也增加了,狀況允許下可以提供用戶更安全的保障。新規格也支援 Yadis 指定 OpenID 的供應商通訊端,是除 HTML 以外的選擇。

順帶一提,如果 OpenID 供應商支援 OpenID 2.0,大家又使用網址委任(好像我就是使用 MyOpenID 為供應商,但以自己的網誌地址當 OpenID) 的話,記緊要在首頁加上兩個新的 tag,讓第三方能識別你的 OpenID 支援 2.0 的通訊協定。

延伸閱讀:
OpenID 2.0…Final(ly)!
淺談 OpenID

防毒

自從 AOL 把免費防毒服務的供應商由 Kaspersky 轉為 McAfee 以後,應該也會有很多人跟我一樣把 AVS 這種便宜高質素的東西移除,另覓免費的防毒吧?我卻又沒想過買一套回來,從不法途徑拿一套風險又太大,畢竟這是保衛家園的看門犬,絕對馬虎不得。

最後選了 AntiVir 的免費版本,希望效果會比 AVG 來得好吧。

不過用了 AntiVir 有點不習慣,因為它不時彈出完全版的推銷廣告視窗,有一次還把我從 Team Fortress 2 的全螢幕趕了出來。更新視窗也是彈出式的,用字還引起了我對垃圾電郵的聯想…
Enlarge!

讓 WordPress 支援 OpenID

wpopenid+ 原是由 wpopenid 分支出來的插件,同樣讓 WordPress 支援以 OpenID 留言,以及將帳戶連結至現有 OpenID。不過,wopenid+ 比 wopenid 優勝的地方,除了除掉幾隻蟲以外,還加入了不少新功能。例如讓留言的網址欄跟 OpenID 結合啦,顯示留言用家的全名(不是只是 OpenID URL),可以在 OpenID 伺服器支援 SREG 的情況下使用留言者提供的電郵等等。

原本真的有點技巧想寫一下的,不過在上一篇文章寫了以後才發現 wpopenid+ 的作者在 svn 發佈了新版,加入了不用為留言者開設帳戶的功能(以往來留言的插件便會自動產生一個新帳戶,他們也可以直接走進去瀏覽 dashboard,感覺怪怪的),所以再也不用繁複的修改步驟啦。

淺談 OpenID

OpenID

約略說一下。

OpenID 是一套開放的分散式認證系統。傳統中央化的驗證系統,使用者的資料,例如用戶名稱,密碼等等也是存放到跟應用程式同一個地方,用戶如果要到另一個網站登入,便必須再註冊另一個帳戶,非常不方便。現在互聯網大部份網站便是如此。

於是有人想到了單次登入(Single Sign-On, SSO) 這個構思。最普及的單次登入系統非微軟的 Passport (Windows Live ID) 莫屬。只需要一組帳戶,登入後即可使用所有微軟的服務,好像 Spaces,Messenger,Mail 等等。Yahoo! 跟 Google 也有類似系統,不過這些現成系統的缺點還是他們之間不能共通:你不可以拿 Google 的帳戶登入 Yahoo! 的服務。同樣,登入了 Yahoo! 網站到 Microsoft 的網站還得要輸入 Live ID 這邊的帳戶名稱及密碼,還是夠麻煩的。

所以才會有 OpenID 的出現。OpenID 的儲存帳戶的地方(身份伺服器)是分散的:在這個系統裏,每個人也可以有自己的伺服器儲存自己的用戶資料,不再只限於服務提供者。一個 OpenID 帳戶的擁有人如果要登入某個支援 OpenID 的網站,步驟如以下這樣:(我們把 A 當成服務提供者,B 是認證伺服器,C 則是帳戶擁有者)

  1. C 要登入網站 A,提供了一個由 C 自己擁有(或由 B 提供) 的 URL 給 A。
  2. A 透過那條 URL 提供的資料找到 B。這時候 A 會把用戶 C 轉址到 B 的登入頁面。
  3. C 輸入了自己的個人密碼給 B。確認正確無誤,B 把驗證資料傳回 A,C 也會被導回至網站 A。
  4. 這時候 A 會再跟 B 核對剛才傳過來的驗證資料。
  5. 如無大礙,C 便算是成功登入,這時候也許 A 會再跟 C 提供更多註冊資料。

這種做法好處在於:

  1. 使用者不用再到處註冊帳戶或登入,一個 URL,世界通行。
  2. 使用者可以完全控制自己的個人資料,第三者網站(網站 A) 絕不可能得到使用者的密碼。使用者也可以限制第三者網站可以獲得哪些個人資訊。
  3. 打擊冒名留言。在社交網絡上,很多時候使用者(特別是知名的)也會被破壞份子冒名惡意中傷。如果網站留言系統使用了 OpenID,由於每位使用者也會有自己獨一無二的 URL 識別,分辨冒名者和正牌貨變得容易許多。

不過 OpenID 並不是解決所有帳戶問題的靈丹妙藥。例如它不能防止廣告機器人註冊帳戶(雖然暫時還沒看見有這樣的 Robot),也不可以制止使用者使用多個帳戶自問自答(OpenID 是設計成大家可以擁有多個帳戶的)。因為 OpenID 是方便和保障使用者的工具,網站運作者必需透過其他方法保護自己的網站免受侵害。

另外,有些人擔心 OpenID 會成為網絡釣魚者的天堂。只要惡意網站在要求 OpenID 登入時將使用者重導至一個偽造的身份伺服器,向使用者要求帳戶名稱及密碼,即可登入該帳戶擁有的全部服務。不過這個問題基本上跟現時網絡上出現的偽造網站的方法同出一徹,只要使用者細心留意導向的身份伺服器網址是否正確,即可避免帳戶被盜取的問題。(切記:網站絕不會向你同時索取 OpenID URL 跟密碼。在同一頁面請你打 URL 和密碼的,一定是釣魚網站)

OpenID 自推出以來即獲得不少業界支持,表態支持的有 AOL,VeriSign,Microsoft,Zoomr以及 LiveJournal。其中 AOL,Zoomr 及 LJ 均接受以 OpenID 開設新帳戶,Microsoft 則計劃將 OpenID 與其 CardSpace 技術融合(會不會是 EEE 呢?)。WordPress.com 也提供 OpenID 身份伺服器,可是留言不支援 OpenID 卻真的叫人摸不著頭腦。

怎樣擁有自己的 OpenID?方法有很多,不過簡單來說是這樣:

  1. 到其中一個 OpenID 供應商申請一個 OpenID,或自己架一個 OpenID 伺服器。(我是自己架一個的)
  2. 將以下兩句加到你的個人網址首頁的 HTML <head> 部份:
    
    

這兩句的內容因人而異,不過大部份供應商也會在你申請後告訴你。openid.delegate href URL 即是 OpenID 供應商提供給你的網址,openid.server 的 URL 可以到那個 URL,找一下源碼再複製過來 。只要設定好以後,你便可以使用自己的個人網址為帳戶名稱。我的 OpenID URL 便是 mk.netgenes.org。

下一篇說說 WordPress 支援 OpenID 的方法和技巧。

延伸閱讀: