搜尋此網誌

2009年1月22日 星期四

PHP開發環境建置(Eclipse+XDebug)

本文介紹如何利用Eclipse+XDebug進行PHP的開發工作,以及如何設定為支援本機及遠端除錯的環境。步驟雖然很多,但是重要的地方我都有圖式說明,應該不會很困難。加油囉!

  • 準備所需軟體

  1. 下載 Apache HTTP Server 2.2.11
  2. 下載 PHP 5.2.8
  3. 下載 JRE 6 Update 11 (Eclipse需要JRE才能啟動,如果已經安裝JRE或是JDK則可以省略此步驟)。
  4. 下載 Eclipse PDT 2.0
  5. 下載 Xdebug 2.0.4

 

  • 安裝與設定相關軟體

  1. 首先安裝Apache HTTP Server 2.2.11。
  2. 安裝完後開啟瀏覽器,打入網址 http://127.0.0.1/ ,出現如下畫面表示安裝成功。
    php-setup-001

    卡關提示:安裝失敗通常是因為Port 80已經被其他程式占用,可以透過指令 netstat -nab|more 加以確認。
  3. 安裝PHP 5.2.8。
    1. 在下列的畫面選擇自動設定Apache HTTP Server。
      php-setup-002 
    2. 在下列畫面選擇Apache HTTP Server的安裝路徑。
      php-setup-003
    3. 為了測試方便,將原先預設不安裝的選項(Extensions及Extras)全選安裝(Entire feature will be installed on local hard drive)。
      php-setup-004
  4. 重新啟動Apache HTTP Server的服務。
  5. 在Apache HTTP Server的網站目錄(預設為 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs )下建立一個檔案,檔名為phpinfo.php。檔案內容如下:
    <?php
        phpinfo();
    ?>
  6. 使用瀏覽器瀏覽網址 http://127.0.0.1/phpinfo.php ,出現下列畫面表示php安裝成功。
    php-setup-005 
  7. 將php_xdebug-2.0.4-5.2.8.dll複製到PHP安裝目錄(預設為 C:\Program Files\PHP )下的ext子目錄。
  8. 修改PHP安裝路徑下的php.ini,在最後面加上下列設定。
    zend_extension_ts = ext/php_xdebug-2.0.4-5.2.8.dll
    xdebug.remote_enable = On
    xdebug.remote_host = 127.0.0.1
    xdebug.remote_port = 9000
    xdebug.remote_handler = dbgp
  9. 重新啟動Apache HTTP Server的服務。
    php-setup-006

    卡關提示: 如果使用Apache Service Monitor,此處請勿選擇使用Restart的功能。必須先選擇Stop後再選擇Start進行重新啟動的動作。
  10. 重新載入網址 http://127.0.0.1/phpinfo.php ,出現如下方的資訊表示安裝成功。
    php-setup-007
  11. 安裝JRE。如果你已經安裝過JRE或是JDK則可以省略此步驟。

 

  • 安裝與設定Eclipse

  1. 將Eclipse PDT 2.0解開後放置於適合的目錄。
  2. 啟動Eclipse.exe。
  3. 設定預設語系為UTF-8。
    php-setup-020
     
  4. 設定PHP執行程式路徑。
    php-setup-015

     
    找出適當的php執行檔與php.ini設定檔,記得php debuger必須設為XDebug。
    php-setup-014

    卡關提示:請勿使用Search的功能,因為會自動設定為使用Zend Debuger。即使修改為XDebug,在一下步修改Debuger時仍然會有問題。
  5. 設定Debuger,選擇XDebug。需特別注意PHP Executable是不是自動變成了上一個步驟所設定的名稱(如PHP 5.2.8)。
    php-setup-021 
  6. 設定完畢。

 

  • 建立測試專案

  1. 建立新的專案 (File->New->Project)。
  2. PHP->PHP Project
    php-setup-010
  3. Project Name設定為Demo,其他用預設值即可。
  4. 在Apache的網站目錄 (預設為 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs ) 下建立Demo/user這個目錄 (請注意大小寫)。
  5. 在專案內新增一個目錄,此目錄直接連結到上面一個步驟所建立的路徑。
    php-setup-022
    php-setup-023

    卡關提示:這樣的設定可以讓每次新增的檔案直接使用遠端執行或除錯的功能。另外一個方法是透過修改Apache設定檔的方式,將虛擬目錄指向我們存放PHP程式碼的地方。
  6. 新增一個PHP檔案,檔名為demo.php
    php-setup-022
    其內容為
    <?php
        if (isset($_SERVER) && isset($_SERVER['REMOTE_ADDR'])) {
            printf("REMOTE_IP is %s", $_SERVER['REMOTE_ADDR']);
        } else {
            print('You are in php script mode');
        }
    ?>

 

  • 測試執行與除錯功能

  1. demo.php檔案名稱上面點選滑鼠右鍵後選擇Run As -> PHP Script
    php-setup-024
    應出現下列結果畫面。
    php-setup-028
  2. demo.php檔案名稱上面點選滑鼠右鍵後選擇Run As -> PHP Web Page。
    php-setup-025 
    應自動開啟瀏覽器並顯示下列結果畫面。如果出現詢問對應網址的畫面,因為之前設定的方式已經將兩者做好對應關係,所以直接確認即可。
    php-setup-029
  3. demo.php的第二行程式碼設定中斷點。
    php-setup-030
  4. demo.php檔案名稱上面點選滑鼠右鍵後選擇Debug As -> PHP Script
    php-setup-026 
    此時會出現一個詢問的視窗,回答Yes後進入Debug的畫面。可以看到程式停在第二行,另外在右上方可以看到目前所有作用中的變數以及其數值。選擇Step Over,程式跳至第五行執行。之後選擇Resume完成程式的執行。
    php-setup-031 

    程式進入Debug模式後,可以有五個主要動作可以執行,說明如下:
    Resume:繼續程式的程式,直到下一個中斷點或是程式結束。
    Terminate:直接結束程式,不再執行後面的指令。
    Step Into:追蹤至函式的內部。
    Step Over:不追蹤至函式的內部,進行下一列指令。
    Step Return:當追蹤至函式的內部時,可以透過此指令直接執行完該函式並回到原先呼叫該函式的程式。
  5. 從Debug畫面要回到原先的畫面,必須選擇右上方的標籤。
    php-setup-032
  6. demo.php檔案名稱上面點選滑鼠右鍵後選擇Debug As -> PHP Web Page。出現如前述的畫面,同樣選擇Step Over後,因為程式現在實際上在Web Server環境下執行,所以會跳到第三行(而非第五行)。之後選擇Resume完成程式的執行。
    php-setup-027
  7. 恭喜你!你已經建立了PHP的開發與除錯環境(包含遠端除錯),而且全部都是免費的。


2009年1月19日 星期一

[工具介紹]幫助你隨時掌握應用程式更新狀態的小工具

在前一篇(更新-說的比做的容易多了)我們談到有關電腦系統更新的問題,而在這篇我要介紹一些可以用來解決(至少是部分解決)電腦更新問題的工具。在介紹之前,我先說明這類工具都有兩個最基本的問題,一個是沒辦法找出”所有”必須更新的程式,另外一個就是沒有辦法自動幫找出需要更新的應用程式進行更新的動作。

Secunia Personal Software Inspector

Secunia PSI

推薦指數:★★★☆

使用方法:安裝完畢後,開啟應用程式,在右方中間找到”Start Scan”的文字或圖示點下去就對了。

特色:

  1. 以安全的角度針對電腦內的應用程式做掃描,也就是找出有安全問題的軟體。
  2. 掃描結果會詳細描述該軟體的安全性問題,以及對於安全的危害程度。
  3. 會列出包含作業系統本身的安全更新。
  4. 因為著重在安全性的掃描,所以有不少軟體的更新並不會加以判斷並顯示。
  5. 更新方式的相關連結(如下載連結)在畫面上的呈現是一個藍色的小圈圈,相當不明顯。
  6. 檢查時間最久,需費時數分鐘以上。
  7. 有提供付費的版本,不過我沒試用過。

UpdateStar

UpdateStar

推薦指數:★★★★☆

使用方法:安裝完畢後,開啟應用程式。在左上角找到”Search for updates”的文字或圖示點下去就對了。

特色:

  1. 可以找出較多的應用程式更新資訊。而且找出的應用程式,不只包含所謂的Freeware/Shareware,也包含一些付費軟體(如PowerDVD)。
  2. 提供下載的連結,可以方便更新。
  3. 將更新檔對於安全性的威脅做一個分類,但是必須使用付費的版本才能使用。所以對於免費的版本,只能知道有更新檔,但是跟安全有沒有相關就無法得知。
  4. 本文介紹的三個應用程式的更新都可以找出來。
  5. 對於Google的程式,沒有辦法判斷不同語系的版本差異(也許針對其他應用程式也有此問題)。
  6. 功能較完整,提供的資訊也較多。但是相對使用上較為複雜,尤其如果對英文有抗拒的人,可能會造成一些門檻。
  7. 有些程式我明明已經更新了,不過顯示的結果依舊是未更新。
  8. 有提供付費的版本,不過我沒試用過。

FileHippo.com Update Checker

FileHippo

推薦指數:★★★★

使用方式:執行後會在工作列右方出現相關圖式,點選後會開啟瀏覽器顯示檢查結果。另外可以在圖式上方點選右鍵,會出現”Rescan for updates”的選項,可以即時更新狀態。

特色:

  1. 安裝後自動註冊到開機執行程序中,也就是每次開機就會自動執行並重新檢查。
  2. 檢查速度超快,不用幾秒就完成了。
  3. 提供清楚且明顯的下載連結,可以方便更新。
  4. 只能知道有更新檔,但是跟安全有沒有相關無法得知。
  5. 畫面簡潔而清楚。
  6. 提供包含Beta版本的更新資訊。
  7. 掃描的結果以Freeware/Shareware為主。
  8. 對於Google的程式,沒有辦法判斷不同語系的版本差異(也許針對其他應用程式也有此問題)。
  9. 無法檢查自己的更新。

這些工具都是免費或有免費的版本,所以別再讓懶惰成為唯一的藉口。英文不好?雖然這些軟體是英文介面,但是使用上都很直覺,不會有甚麼障礙才是。更好的是,這些軟體不像防毒軟體一樣擁有一山不容二虎的強硬性格,所以可以同時安裝多套,以收到更全面的掃描結果。

你有甚麼好的工具或方法可以保持電腦的更新狀態呢?歡迎你提出來與大家分享。

2009年1月17日 星期六

更新-說的比做的容易多了

在我之前的文章-Metasploit 初體驗-中,我們看到一個未經更新的系統,多麼容易就遭受到惡意份子的入侵。又在一份由Secunia所發表的報告中,顯示只有不到2%的電腦,是處於”完整”更新的狀態。更新,更新,更新!這個已經喊了多年,而且已經擁有許多自動化機制執行的功能,為什麼還是有這麼多電腦沒有辦法落實呢?

首先,我們必須知道目前的攻擊手法,已經從早期的作業系統,延伸到應用程式本身。當然,目前的趨勢是繼續朝攻擊應用系統的方向衍伸,但是這個部分產生的議題遠不只於更新而已。而目前自動更新機制,大多是作業系統自己的更新。以微軟來說,它可以更新作業系統,也可以更新它銷售的其他程式工具。但是對於電腦內所安裝的非微軟牌軟體,可就沒有任何更新的機制可以加以保護。而對於Linux而言,如果你是透過套件(RPM)的方式加以安裝,可以使用自動更新的方式。而自行下載安裝的程式,同樣無法提供保護。

作業系統如此,對於一般的應用程式呢?現在有越來越多的應用程式具備了檢查更新或自動更新的功能,但是問題在於並不是所有的應用程式都有這樣的功能。另外一個問題就是就算是具備了檢查或自動更新,當你使用應用程式開啟一個會攻擊這個應用程式的檔案時,應用程式本身可能在檢查的同時已經開啟完畢該攻擊用的檔案。Game Over!這樣的設計其實是可以理解的,因為如果都要檢查更新完畢才啟動的話,可能會造成使用者使用上的不順暢。這個問題的判斷,端看軟體廠商的取決。以Firefox而言,是採用先檢查才啟動的方式,不過也確實出現了抱怨的聲音。

以目前而言,沒有一個機制可以有效幫電腦找出所有需要更新的所有程式,所以也難怪幾乎沒有電腦處於”完整”更新的狀態了。進一步分析,電腦沒有更新的的原因往往包含了下列幾項:

  1. 電腦不適合自動更新(作業系統)。這個原因通常是對企業而言。因為企業有一些重要的系統,必須保持不中斷的運作。而自動化更新的結果,可能使得更新後的作業系統跟運作其上的應用系統不相容,所以必須經由人工的方式加以確認並更新。而對於微軟的作業系統,更新後頻繁的自動開機行為,更是對不中斷系統的一大限制。
  2. 電腦沒有辦法自動更新。有一些電腦因為公司政策的關係,沒有辦法連結網際網路,自然使得使用自動更新受到限制。這部分可以透過建置內部使用的更新伺服器加以解決。
  3. 使用盜版軟體或是付費更新服務期限已經過期。前者雖然是非法的行為,但是不可否認仍有不少使用者的電腦屬於此類。後者則可能存在於企業內使用如RedHat Linux這類必須付費的系統。不論原因為何,兩者都無法使用自動更新的機制,而必須透過手動的方式加以更新,而這樣的要求是違反一般人的習性。
  4. 應用程式千百種,沒有所謂版本標示的統一標準。為了判斷所謂的更新,除非是自己手動建立更新的資料庫,不然最簡單且方便的方法就是比對版本的編號,有新的版本編號就表示有了檔案可以更新。但是因為每個應用程式有自己版本編號的方式,要如何判斷出何為新的版本編號,往往不是這麼容易的工作。舉例來說ABC 2008跟ABC 2009算是更新還是不算?另外ABC 2008英文版跟ABC 2008中文版是同一個版本還是不同,不同的話要怎麼分別?這些都是自動化會遭遇的問題。
  5. 全世界的應用程式太多了,沒有單一組織可以收集完全,更別說去追蹤這些應用程式是不是有了更新檔。
  6. 有些應用程式的更新,其實只是新功能的加強,並不是原先的版本有甚麼安全性的問題。當然,這類的更新通常也表示你必須再花一筆錢,以便進行檔案的更新。
  7. 應用程式已經變成了孤兒。原因可能包含原先開發的人員或廠商,已經不在這個市場了。另外一個原因,就是產品本身已經進入了生命結束(End-of-Life)的階段。像微軟或RedHat這類具規模或是銷售重要軟體系統的公司,對於產品各個階段會有明確的時間表。但是其他應用程式,通常就是發生了你才知道(或者還不知道)。嚴格來說,如果發生這樣的問題,當然不算沒有更新,只能說你的電腦裡有了不安全的應用程式。但不管分類為何,結果都是一樣,就是電腦面臨了安全的威脅。
  8. 綠色軟體造成的”不便”。因為檢查更新的機制,需要先掃描電腦系統已經安裝的應用程式,然後據此加以比對而找出需要更新的程式。而綠色軟體的特色就是不需要安裝即可以馬上使用,所以造成更新程式無法判斷電腦系統內有此一應用程式的存在,自然就不會出現在建議更新的清單中。

是的,情況的確是不太樂觀。但是既然我們離不開電腦的使用,我們能做的就是盡量維護它的安全。好在有一些工具可以幫助我們解決這樣的問題,下一篇我就會介紹一些這樣的工具。

2009年1月16日 星期五

當MD5碰在一起

當這幾天國內為了戰國策的資安事件沸沸揚揚時,其實國外發生了更大的一件事,那就是包含VeriSign在內的六家CA,所配發的憑證存在著安全的弱點。這次的事件,影響的範圍包含了世界各地的網際網路使用者,影響相當大。而事件發生的主因其實很簡單,那就是產生憑證所使用的其中一個演算法-MD5-有所謂的碰撞(MD5 Collision)問題。

在解釋MD5碰撞之前,我先稍微談一下憑證這個東西。憑證最常被大家所熟悉的應用就是當在網路上進行重要的行為時(如線上購物),廠商用來確保傳遞資料安全性的一種機制。如果再說簡單一點,當你看到一個網址是https開頭的,就表示這個網址採用了憑證加密的方式。其實,以目前來看,幾乎所有的網站,只要是有會員機制或需要填寫個人資料的,幾乎都使用了憑證。除了網站的應用,另外一個常見的應用就是使用政府電子化服務所使用的自然人憑證。

而MD5正是憑證機制所使用的一個演算法,主要的目的是為了計算所謂的雜湊值。所以MD5這類的演算法,通常又被稱為雜湊函數。除了MD5,像是SHA系列的演算法,也是屬於這類。而雜湊函數,簡單來說,就是把一大串的資料濃縮成一小段的資料,用這一小段的資料來”代表”原先那一大串資料。這樣濃縮的過程,必須是無法逆向運算(跟要求可逆的壓縮不同),我們稱之為單向的凾式(One-Way Function)。除此之外,這樣的機制要有效運作,理應每個不同的一大串資料,都必須有自己獨特的一小段資料來加以代表。如果有兩個不同的一大串資料都用同一個小串資料來代表,由於無法逆向運算的關係,我們將無法得知當初的資料到底是哪一個。而這樣的現象一旦發生,我們就稱之為產生碰撞。也就是說惡意分子可以利用碰撞的特性,用完全不同的一大串資料來假冒真正的那一大串資料。

碰撞會不會發生,很簡單就可以判斷出來。當函式輸入值的可能性(一大串資訊)遠大於輸出值的可能性(一小串資料),碰撞不發生才真的奇怪。這麼簡單的道理,其實大家都知道,更遑論那些研究密碼學的專家。但是對密碼學來說,這也沒甚麼好驚訝。因為所有的密碼演算法都是會被破解的,只是破解的困難度高低而已(我們稱之為強度)。所以當時在沒有有效證明MD5的強度有問題下,MD5依舊受到廣泛的應用。直到這次被揭露出來,終於才讓大家體認到問題的嚴重性,也迫使VeriSign開始更換它所配發出的憑證(用SHA-1取代MD5)。

我相信所有的系統或機制本來就都會有它的安全性問題,但是如果這個”事實”已經淪為廠商偷懶或用來規避責任的藉口,那實在是很不應該。而就我自己的觀察,這樣的廠商其實並不在少數。這六家廠商是不是這種心態,我不知道。不過對於其他眾多繼續使用MD5(或其他不安全的機制)的廠商,我想有不少是打定了多一事不如少一事的鴕鳥心態,完全把客戶拋在腦後了。

相關連結:

2009年1月15日 星期四

百業蕭條,資安廠商該怎麼辦?

從去年爆發的經濟風暴,至今依舊看不到底。雖然有少數人樂觀的預測到今年第二或第三季就可以好轉,但是也有人認為需要兩到三年後才會開始復甦。不管未來如何,在可見的這段時日,狀況只會越來越差。越來越多的公司經營困難,而大幅裁員的結果造成更多的社會問題。

但是在這百業蕭條的時日,仍舊有一些所謂逆勢成長的產業,其中一個是補教業。因為大家都擔心失去工作,所以想要利用加強自我的方式提升就業競爭力。那麼對於平常就處於”揀”預算的資安產業呢?連IT預算都大幅刪減了,IS的預算能夠倖免嗎?相當然爾,正反意見都有,有人預測會下降,有人則說會上升

不管如何,既然身在這個產業,總是要面對問題。所以,廠商的因應之道,除了更注重整體解決方案的成本效益(ROI)外,也要降低進入的門檻。例如,原先計畫導入ISMS的客戶,就改成重點式的導入。實際的方法包含可以縮小範圍,甚至只針對特定部分做顧問諮詢。而後者,就看對客戶而言,所面臨最嚴重且急迫的威脅是甚麼,然後對症下藥。

根據多份前一兩年的調查報告,資安產品中內控相關的產品(如NAC、DLP)成長幅度將超越整體資安產品的成長幅度。而在這樣嚴峻的環境下,我個人認為這樣的情形會更加明顯。也就是說,內控與資料防護相關的產品及服務,是最有可能逆勢成長。這類的議題,這幾年來持續地受到重視(原因請參考我的另一篇文章-不可得罪的小人物 - IT人員,尤其是被資遣的。)。而在經濟不景氣的情形下,員工因為對工作的不安全感,可能在尚未被實際資遣前就做出了危害公司的事情。所以相對來說,內控與資料防護的需要性就更加強烈且急迫。當然,廠商希望賣產品。但是身為客戶,千萬別以為光靠產品就可以做好內控與資料防護,更重要的是管理制度與方法。而且,管理制度與方法相對於產品通常成本低了許多。這種一舉兩得的事情,不做就太可惜了。有了良好的管理制度,搭配適合的產品,就可以讓大家在面對各種不安情緒時獲得更好的保障。

相關連結:

2009年1月14日 星期三

戰國策有錯,那你沒錯嗎?

這幾天一個很夯的新聞,就是號稱國內最大的代管主機服務商戰國策,發生了客戶資料在Google的查詢結果中被一覽無遺(請參見-戰國策爆發客戶資料外洩事件)的個資外洩事件。各式各樣的報導與批評,迅速散布於各大大小小的網站。內容不外乎是發生這類事件太過離譜,戰國策處理的方式不夠積極有效,也沒有負責的態度。另外也有人提到,如果事情發生在某某國家,戰國策會被告到倒閉。而對於受到影響的客戶,一致的說法都是覺得不可思議、沒想到。是的,戰國策有很多需要改進的地方。但是今天我要從一個完全不同的角度去看這個事件,那就是那些直呼不可思議的受害客戶,你想過你有甚麼錯嗎?或者換個溫和的方式,你知道你有哪些該盡的義務沒有盡到嗎?

針對戰國策這家公司,我個人在104人力銀行的網站觀察他們求職的資訊接近一年的時間。人力的需求一直以來都不少,但是實際觀看求才的內容,技術方面的人力都還是IT/網路相關的技能。最近,更轉換成以業務人力需求為主。有關資訊安全人力的需求,根據我的觀察,一直以來都是0。有的話,也是屬於工作內容的一小部分。看看他們對於技術長的需求就可以了解我所說的。

1.具備5年以上LINUX或FREEBSD伺服器實務管理經驗
2.具備3年以上資訊安全及網路規劃實務規劃經驗
3.具備3年以上ISP系統管理相關經驗
4.具備3年以上UNIX系統指令及相關service(DNS/Email/Web/FTP等)設定
5.具備3年以上UNIX系統(Linux/FreeBSD等)的安娤 維護
6.具備3年以上shell scriptlanguage 寫作
7.具備3年以上中大型ISP系統架構,包含架構及計畫之經驗

首先,資訊安全僅佔了其中一項,還是跟網路規畫放在一起,而資訊安全早已經不只是網路本身的問題。而年資要求是3年?別傻了,沒有一個人是可以專心從事1-7項的工作,而且符合他要求的年限,因為這樣至少要23的年資。所以通常這種需求的解讀是有3年的時間,工作是跟資訊安全有關的。至於在這3年內所佔的比例為何,那就不知道了。以我個人的經驗與身邊的例子,資安如果跟其他工作混在一起,能夠花到10%的時間已經算是多的了,光講規畫的話會更少。寫出來的條件如此,就可以知道其對於資訊安全的重視程度如何。

除此之外,過去該公司的職務有不少技術人員,但就像我之前說的,多是要求IT/網路相關經驗。當然,通常組織內專職於資訊安全的人力就不多,但是為0似乎是顯示出一些警訊。更何況他們還有一些儲備幹部的需求,IT人員需要儲備,IS(Information Security)人員就不需要嗎?而以現在發展的趨勢,就算客戶數與業務範圍不增加,客戶所面臨的資安問題也會越來越嚴重。如果沒有及早因應,那就只能亡羊補牢了。

所以我要對這些受害客戶說的話就是:「別再說甚麼不可思議這種不負責任的話,好好為自己的失責加以檢討,並予以改進吧。」我這樣說很超過嗎?一點也不!因為我們都知道,當你在選擇第三方廠商的時候,你需要對廠商進行必要的評估。怎麼評估當然各種有不同的方式,但是絕不會是聽信廠商自己的片面之詞。今天洩漏的是你自己的資料,萬一哪天洩露的是你的客戶資料,那你可能就淪為下一個戰國策了(別忘了戰國策有CRM的服務)。

多年前我看到有人說:「要了解一家公司的現在與未來,最好的方式之一就是透過他們的求才資訊。」對此,我深信不疑。當然在解讀時要多加小心,並不能光看表面的描述,不然就有可能被假消息給誤導了。

2009年1月13日 星期二

安不安全,存乎一心?

今天在跟多年前的一個主管聊天時,他告訴我一個有關資安的笑話。

他說有一家推廣SaaS (Software as a Service)的公司到一家醫療機構去推銷。大家都知道,醫療院所有很多患者的個人資料,而這些資料都是相當的機密。如果不能善加保護,不但會受到處罰,而且對院所的形象影響很大。而SaaS在安全上的一個問題,就是資料本身如何受到保護。又資料儲存地點對於資料保護的法規可能跟資料擁有者所在地的法規不同,所以使用者要確認的是符不符合自己的(保護)需求,而不單是聽廠商自己的說法。所以這個客戶的承辦人員就回了:「我們的資料都很重要,我怎麼知道資料送到你們那邊會不會發生甚麼事。」姑且不論這個是阻擋廠商繼續糾纏下去的藉口,還是真的有所擔心,我個人覺得並不算過分。但是…奇妙的事情馬上就隨即發生了。就是有一個年輕人,利用旁邊的電腦,並在兩人的見證下,透過隨身碟帶走了一些資料。廠商覺得很不解,就問說那個人是誰,他在做甚麼?結果承辦人員回答得還真妙,他說他也不認識那個人,更別說知道他到底幹了甚麼?

這樣保護客戶資料的決心,你聽了之後是覺得會心一笑,還是想趕快問到底是哪家醫療院所?我想這個問題最根本的原因,就是沒有明訂資料的擁有者與保護的執行者為誰,或是兩人的權責不清。兩人對於保護資料都有直接的責任,而責任當然就必須對應到獎懲才會有其效果。

資料擁有者(通常是老闆或是單位主管)必須知道資料需要何種的保護,並據此決定一些相關的保護措施(或是由資訊安全人員提供建議),而實際的操作則交由資料保護的執行者(例如DBA)。往往資料擁有者因為工作繁忙,會將規劃安全機制的任務交由其他人員代理,這個人我們稱之為Custodian。不論是不是透過Custodian,資料擁有者保護資料的責任都不會消失或轉移。而Custodian或是資料保護的執行者,其責任應該只包含交付的部分,而不是資料的本身。例如DBA必須保護資料庫內客戶資料的安全,但是如果是工讀生透過CRM系統取得並帶走客戶資料,往往就不是DBA的責任。這個例子當然比較不會有爭議,因為通常DBA是一個獨立的角色,而且其負責的部分很明確(就是跟資料庫相關)。但是對於其他角色(如系統管理者)就沒這麼好運了。

回到笑話本身。如果當初廠商接觸的人只是一個保護資料的執行者,這樣的情形並不奇怪,只能說廠商找錯人了,或是說是他還沒有辦法接觸到高層就被打槍。但是如果他找的是資料的擁有者或是Custodian,那他不是不得人緣,就是公司制度沒有辦法讓承辦人員感受到保護客戶資料對於他工作的重要性。後者的責任其實不在他,而在於公司對於資訊安全的認知與制度。如果公司沒有辦法將資料保護的責任與獎懲綁在一起,出現這種情緒化的反應,自然也不見怪不怪了。

2009年1月11日 星期日

目標、指標?傻傻分不清楚

去年在一次的機會中,我看到一家正在推動ISMS(ISO 27001)認證的公司,在會議室的桌上放了一個小立牌。上面寫了一些有關資安的標語,以及其資安的目標。其中一個目標是「每個員工每年至少接受30小時的資安相關訓練」(時間我忘記了,不過那不是重點)。看到這句,我當下的反應是笑了出來,這家公司找的顧問是不是太混了點。

首先,這句話應該是評量的指標,而不是目標。目標指的是你的目的,但是我實在不知道哪一家公司的目的會是讓員工受訓。所有公司進行員工訓練,就算不是希望透過加強本質技能以有效進行工作上的任務,至少也是滿足遠足員工追求成長的心態。如果真是為了受訓而受訓,那公司倒不如把錢拿去丟在許願池還可以許不少願望。

而指標就是為了評估達成目標的”程度”,可分為量化與非量化兩種。通常,我們會希望選擇量化的指標(也就是可以用數字顯示的),因為這樣指標的比較較為客觀。當然,量化指標的比較結果要有效而且客觀,就必須找出有意義的指標。以這個例子而言,雖然是一個量化的指標,但是卻沒有任何實際的意義。簡單來說,如果某個接受訓練的員工睡了30個小時,跟另一個員工認真聽了30個小時的員工,達成目標的程度都一樣嗎?當然,評估上課時數很簡單,但是卻一點意義都沒有。

其實,這個就是長久以來ISO(或其他類似認證)為人詬病的部分。他只能規定你要用做到哪些項目,但是怎麼做、做到甚麼程度,它沒有辦法限制。這部分通常就是顧問的責任,而一般的顧問往往就是套表、套表、套表。套表的結果可想而知,就是一堆最基本、最保險而且最不實用的方法。不過,我個人倒不認為這應該算是ISO的錯,因為ISO本身本來就無法而且不適合用來規範要怎麼做。而這樣的問題是因為客戶跟顧問之間,沒有達到足夠的共識(對資安有真正助益的共識)所造成的。

當時我好心的提醒了那家公司負責推動ISMS的主管,他說他知道,但是以後再來改進。說的對極了,ISO本來就是強調PDCA不斷改進的流程。但是,我真正想了解的是,對企業而言,不斷改進是執行時的精神,還是已經變成了導入不適用措施時推託的藉口。

2009年1月4日 星期日

缺一不可 – Two-Man Control

有一部多年前的片子,至今我看過許多遍,可說是百看不厭。片名是Crisom Tide,中文片名叫做赤色風暴。片子由兩大男星(Gene HackmanDenzel Washington)在一個狹小的空間(潛艦)飆戲,除了演技也沒甚麼可以看的了。故事內容是說一艘潛艦在一次受到敵方攻擊的意外中,接收到了上級傳送一半的指令。而面對敵人的威脅,潛艦內兩位最高軍階的軍官(艦長跟Lt. Commander)因為意見相左,而產生了嚴重的衝突。當Lt. Commander將艦長制服並加以軟禁時,只要求了艦長交出一把鑰匙。這把鑰匙有甚麼作用,它是用來啟動核子武器的。但是,光有艦長的鑰匙,其實並不能啟動核子武器,還必須同時擁有Lt. Commander身上的鑰匙才行。這樣的一個機制我們稱之為Two-Man Control,通常是用於需要高度安全的任務上,必須同時讓兩個或多個擁有權力的人同時執行才能生效,以避免(減少)產生人為弊端。對軍方而言,核子武器的使用,是一件極為重要的事情。稍有不慎,不只賠上國家的形象,更有可能引爆毀滅性的報復或是大規模的戰爭。另外像是銀行的金庫,也可以使用Two-Man Control這樣的機制,進一步確保有價物品的安全。

除了這些以外,有些加密機制或系統也利用了類似的概念,分別由兩個人擁有一個解密的金鑰(或密碼)。而必須同時輸入這兩組金鑰(或密碼),才能夠加以正確的解密或是進行系統的存取。當然,這樣的機制因為造成使用的極不方便,所以一定是要施行在需要高安全性的任務上。除此之外,這兩個人與兩個物品(如開啟核子武器的鑰匙或是解密用的金鑰)更要嚴加慎選,以免讓機制失效。例如挑了兩個”麻吉”或是利害關係完全相同的人來執行,不但不能防止弊端,反而可能加速弊端的產生。而如果兩個物品容易被取得,那麼跟只用一個物品就可以執行沒有甚麼太大的差別,甚至比不上許多只用一個物品加以保護的系統。

About