2017年1月31日 星期二

資策會資安所

: 資策會裡有許多部門,你們部門間的交流和合作是怎麼樣的情形?

  我們有不同的部門,雖然都是在資策會裡,但其實不同部門還是有些利益關係。就是因為我們的績效是分開的,部門之間有個別不同的利益,所以我們談合作時也是會斤斤計較的。通常我們私底下談合作時如果談不來,可能需要比如像所長之類的人物出來協調

: 那你們平常接的案子會需要不同部門之間進行交流的嗎?還是其實你們領域已經分很開了,而不太需要這種交流?

  有時候是計劃的性質,也就是那個計劃可能需要不同的領域。像我們是資安所的,我們可能無法看到所有領域,因此有時合作是必須的。但是通常我們合作的關係是共同申請一項計劃,然後再共同提出那個計劃的子計劃。(然後各個部門在協調自己的分工嗎?)對。

: 那可以舉出一個你們合作的例子嗎?案子是不是由專案經理協調?

  我們這裡是: 工程師上去就是組長,也就是一個組的主管;那組長在上去就是一個所的長官,稱為主任,和一般業界的職稱其實不太一樣。那我們接下來有個 4 年的計劃,這 4 年的計劃參與有資策會和工研院,主要是這兩個單位。像我們資策會資安所,其實有一些計劃,比如說政府接下來比較關心的部份是 IoT,那物聯網包含了許多面向,雲端所他們也會想要參與,也有一些想法。因為是雲端,和物聯網是很有關係的。所以變成經濟部提出來的這樣一個大方向,那他的這筆錢會由資策會和工研院去分、去協調。那最後會去決定錢拿多少,最後會有一個開會,但其實我沒有參與這場開會。但這場會就是各自提出自己的案子,可能會有一些教授委員,他們會對這些計劃有些意見;長官及政府官員再根據這些意見評估去決定給子計劃多少錢。因為我們等於是申請一個大計劃,但是是由各個子計劃下去合成: 也就是這個大計劃只是一個方向,涵蓋了許多不同層面,我們提出的子計劃就是要去顧及這些層面。

: 物聯網的資安讓人聯想到一些新聞,像是吐司機被駭、冰箱被駭這樣的標題。那你們是在做這樣子的議題嗎?

  物聯網是一個大方向,但是未來 4 年的子計劃也不全是物聯網。在這個禮拜有 HITCON 活動,會議開始的時候蔡英文也有露面,應該是表視他也有關心台灣資安。所以提這個未來 4 年的計劃,IoT 算是很大的方向——應該說在台灣比較少——在國外 IoT 設備、使用比臺灣還要普遍。那台灣會用 IoT 的通常都是像中華電信這樣試驗性質的,其實一般用戶會用到物聯網的還算是少。但還是有人會用,因為很方便,例如用手機遙控一些家電設備,但是相對於國外仍然算是少。但是政府已經覺得是一個趨勢了,國外還有無人駕駛的車、還有無人駕駛的飛機。那要做到物聯網其實還是需要一些情資。所謂情資例如 Zero Day,零時差漏洞。也就是已經被發現且被駭客利用,但還來不及修補,那這樣的漏洞被稱為 Zero Day 漏洞。(所以連帶下游廠商也會受到波及?)比如微軟的作業系統出現一個漏洞,那所有使用這個作業系統的人可能都在這個風險之下。不一定是作業系統,也可能是個 OPEN SOURCE,這個現成的 OPEN SOURCE 可能有些漏洞: 甚至有時候是一個設備,就是已經是軟硬體結合的設備,卻有一個漏洞。通常官方會努力去補救,但還是需要一些時間。那在這個補救還沒出來之前,就會處於被任意攻擊的狀態。
  所以 IoT 是一大部分,另一部份是我們要去蒐集情資,可能到一些 Dark Website,那有一些暗網是你用公開 IP 是無法連到的,一定要用暗網瀏覽器才能連進去。像有一些信用卡交易,因為有駭客偷到許多人的信用卡號,再拿來販賣的地下交易。有一些情資可以從這方面去偷。而情資還有很多,像是釋出假伺服器的 Honeypot,就是吸引人來攻擊、而不是真正在被使用的伺服器。他會在駭客攻擊時,紀錄駭客所下載的惡意程式。假伺服器會故意開一些 Web ServiceTelnet 服務。現在很少人開 Telnet,可是 IoT 設備很多使用 Telnet,不知道為什麼,就是比較不安全的通訊協定。開啟這些服務就是歡迎駭客來打,底下就會錄製駭客到底是輸入什麼指令、怎麼攻打,去下載什麼惡意程式,就是要去蒐集這些資料。(所以你們最近是透過這個方式去蒐集嗎?)這個東西已經很久了,不是最近才有的,可能已經有超過 10 年了。蒐集情資還有很多方式,這些也都是。
  所以 4 年計劃包含的項目算是滿多的。那政府一直在砍經費,一開始可能說——假設隨便舉個數字——他說整個計劃包含資策會和工研院,一開始說每年給 4 億,後來變成每年給 1 億之類,總之就是一直在縮減。其實資策會和工研院是這樣的單位,尤其資策會被規定不能與民爭利、不能與企業爭利,所以我們不能自己開發一個防火牆讓大家使用,我們只能開發防火牆的核心模組,再賣給做防火牆的企業。等於說資策會其實研發的成份比較高一些,但是真正做出東西的機率是不高的。有點像是學術研究的延伸,但是稍微偏企業的學術研究,所以他在做一般企業不願意花錢做的研發,因為很有可能失敗。所以是經濟部提出一個資安的大方向,我們就去提出計劃,申請得到經費就能拿去做研究,這個計劃可能是成功的,也就是最後做出一個企業願意買的模組;失敗的話是做出來但沒有人用,最後就寫寫報告、發表論文就好,因為是研究性質較高,所以失敗機率也較高。可能真的做出了個雛型,但這個雛型沒有業界使用,這樣其實就算是失敗了。就這點資策院和工研院其實滿像的。

: 聽說最近有資策院和工研院的初步合併新聞?對資策會整體或個人環境影響是看好看壞?

  不久前,我們的執行長和董事長在同天辭職。接下來暫時接任職位的是工研院的長官們,當時覺得真的有合併的意思,但合併也需要雙方的討論,也不一定想要合併。其實沒有看好或是看壞,其實在資策會工作不是特別為了錢,因為薪水也不高,只比公務員高一點點,通常也是看有沒有企業的開發案。所以剛剛所講的合併,其實並不覺得有什麼差。

: 請問資策院、工研院和中研院之間的差異和相同處在什麼地方?

  中研院應該算是比較不一樣的,就是中研院算是很學術的。因為之前中研院院長有把一些東西拿去業界談開發,甚至有股份。這件事情很敏感,基本上中研院是非常學術的單位,應該說大家都覺得這是第一的研究機構,所以如果和業界直接扯上關係是滿敏感的。而資策院、工研院很希望直接和企業合作,只是規定不能與民爭利,但是和企業往來是沒關係的。(而中研院是嚴格禁止的?)對,甚至資策院、工研院如果團隊的成果不錯,他很鼓勵直接出去開公司,也能當作你的股東。因為資策會全名就是資訊工業策進會,政府對他賦與的責任就是負責推動台灣資訊領域的發展。所以如果資策會裡的員工出來開公司,這樣也算是促進資訊產業的發展。但是要出來創業,財務也等於是自己負責,也就是自己是真正一家公司。也一定要確定自己的產品市場才會出去創業。

: 能稍微講一下對員工的工時、工作環境嗎?

  基本上我們的工時和一般公務員差不多,偶爾需要加班。因為我們主要是偏向研發,時間沒有那麼緊迫。是也有緊迫的時候,像是確定已經有廠商要買單了,一定要是產品都已經軟體包裝的很好才會要。所以需要各種輸入、當機、出錯的測試,那時候真的花了大量時間加班。但一般來說沒有什麼時間的問題。(那工司環境呢?)那要看和誰比,因為我去過 Google 那邊上課,有被招待去 Google 餐廳,真的相當高級。趨勢科技也相當不錯,他們還有一塊錢的飲料。(那對自己工作空間滿意嗎?)空間其實都 OK,雖然想到調查時還是認為有待加強,但其實還是很一般的。
  那我講一下我們羨慕的環境,比如 Google 有升降桌。想站著工作就能升起桌面,想坐下就能降下。我不知道是不是每個人都有,但滿多人都有這樣的升降桌,升降桌不是只有桌面升降,而是連同電腦、設備一起升降的。因為我有去過的是 Google 和趨勢科技,和趨勢科技比就還好,畢竟 1 塊錢的飲料沒有太大的吸引力。

: 對資策會的進修課程有了解嗎?想請問為何學費較高?

  基本上我上過的只有要考認証的,通常也是請外面的人來上。當時上課學費是 5 萬,但只要證照考過就會幫忙出考證照費。學費是資策會付的,這是資策會鼓勵大家上課的原則。這些課程我們是可以免費上的,但必須是經過主管劾可,是要和要做的東西相關才能免費去上。有些較貴的課程是要看講者是誰,有課程是直接請黑帽駭客做講者。通常這樣的課程,四天要美金 4000 左右,像這種課程請講師來台灣講會便宜一些,但也還是很貴。通常這種課程不是入門,而是屬於進階的。假設以我去上過這門課,會覺得其實比較划算。但是會有差別是,在國外上課會有高級的旅館、高級的午晚餐。除了居住,這些學費都還是資策會付的,去了也還是有生活費,基本上別太奢侈還是不會花到自己的錢。

: 資安的學習特別沒有管道,那這些駭客到底是怎麼培育出來的呢?

  你知道「台大 217」很厲害嗎?台大 217 有去參加 HITCON 的比賽,有得前幾名。(是像是 CTF 嗎?)對,之後會有更進階的,叫做 CGCCTF 還算是手動去找漏洞的,但 CGC 是要寫一個自動化的程式去找漏洞,然後自動消除,所以 CTF 的進階版就是 CGC。在美國已經有舉辦了,台灣還沒有參加,因為它的難度是更高的。HITCON 比賽其實台灣代表隊是滿強的,這次 HITCON 就是台灣代表隊主辦,也是他們自己去募款的。其實有一些贊助商,像是趨勢科技就是很大的贊助商。HITCON 這幾個參賽者中,有一個叫 Birdman,他以前是趨勢科技的。算是有淵源,所以趨勢科技一開始也是從防毒軟體起家的。他其實賺的錢也不少,所以他覺得為台灣培育這些資訊人才是應該的,他們就是很樂意贊助這樣子。
  我覺得要感謝這些自學者,他們就是成為駭客然後參加比賽。因為他們比賽得名,導致在台灣開始有企業去投資,甚至政府也開始重視台灣的資安教育,未來是有在規劃的。他們有在規劃一些駭客的教育,譬如說高中畢業之後,不想讀大學也可以,學費是有補助的。反正就是政府有想要栽培這樣的人才,假設一個駭客在社群媒體很有名氣的話,這個名氣會被政府看作是重要的,可能國防部會高薪挖角。因為目前在台灣,駭客沒有什麼教育的管道,基本上沒有。所謂的教育的管道都是由這樣資安熱愛者,這些駭客加上一些企業支助而提供的。有些駭客他們也想要推廣資安意識,企業也看到他們的用心,就是這樣互動起來,最後影響到政府,政府就願意投資。

: 你有參加過駭客培育的相關課程嗎?像是去研究駭客的一些常用手法等等。

  這次 HITCON,他們就是自己舉辦。我有去上課,十二個小時就要三萬塊。去上課的話,真的覺得滿深的,當然會覺得滿值得的。你應該以前都有看到一些微軟的漏洞,就是說這個漏洞會導致駭客可以執行任意指令、任意程式。你聽到這樣的說法,會想說到底是怎麼來的嗎?我們這次上課就有好幾個實作,他當場實作給你看,要怎麼取得 command line 的權限。他可能只是透過一個在 server 上的服務而已,有服務就會有 input output。那我如何送一個 input 給它,導致它就執行他裡面某些他本來不預期會執行的程式,結果我就有權限可以執行任意指令。一個小小的 clinet 端可以送 input 進去,加上因為我送的 input 很邪惡的關係,就會得到一個可以執行任意程式的權限。所以我終於知道,原來這件事情是這樣的,這件事情真的沒有那麼容易。
  我不知道你之前會不會覺得,駭客有些才國中生而已,就會有一種印象說,「駭客不一定會寫程式啊,他們只是會駭,他們只是會模倣別人如何駭的方法。」可是這些參加 HITCON 的人,不是這麼簡單的哦。這些講師就是可以了解所有的 Linux 有些的 library libc,在多少版本之前和多少版本之後,它們對記憶體管理的方式有多大的不一樣。像是原本的記憶體管理是這樣,之後為了效率問題,改成比較有效率的方法。但因為他改成比較有效率的方法,反而容易駭進去了,那這個其實跟作業系統會有一點關係。其實台大的課程都是講很理論的,但是駭客他們都是很實作的。

: 那系上有資安或駭客培育這方面的課程嗎?

  我知道台大跟台科大有合開,好像是台大的 217 那些比較厲害的學長姐,他們主動去開課的,讓學生可以去選修,但學分怎麼算我不知道。台大的 217 其實是很厲害的,他們也有一支駭害的隊伍就叫做 217。資安這方面會是一個很有趣也很有挑戰的東西,基本上他們教我們的都是 2015 或是 2014 年就有的一些駭客手法。這些算是舊的東西,但也覺得很有學問。他們也有講新的東西,可能就是去年底,就算滿新的東西。他們講一些他們去參加 CTF 比賽,遇到什麼樣的問題,然後這樣的問題,最後是怎麼樣打進去的,運用到什麼樣的技巧。但這樣的東西,講一講,聽了還是不會。講一講也會實作給你看,也會給你十分鐘讓你去操作,所以你會比較知道到底是怎麼回事。
  如果你們以後有想要從事資安這方面的話,我覺得你們可以開始去看一些部落格,因為很多駭客其實是很樂於分享的。如果你們之後甚至想要成為 HITCON 裡面的一員的話,那麼現在就要開始了,而且你們可能要有一些取捨。因為像我大學的時候還滿在意成績的,但最後成績也沒有很好。那你在意成績的話,你就希望你每一科都顧好。之前有一個 HITCON 的成員,投履歷到資策會,但他最後沒有來,因為他的條件其實算很好的。但是我看他的成績,其實不怎麼樣。他可能就是 50 分或 60 分,有被當的哦,但是他曾經是 HITCON 比賽的一個成員。我覺得像 HITCON 成員,他們都會有類似這種表現,因為他們拿高分的就是他們本來很厲害的科目,只是順便讀然後拿很高分。如果你們想要成為這樣的人,你們一定要花很多時間,一定會導致課業上會有一些科目沒辦法顧到,我覺得這是必然的現象。
  台大資工系在我們那時候的課程基本上都沒有任何跟計算機安全相關的,程式設計教你的是寫程式的邏輯,所以是要教你怎麼寫出可以算出正確東西的程式。但是它並沒有教你你怎麼寫一個程式,這個程式是不會被搞壞的。

: 系上的這些課程,對日後在業界工作有什麼幫助嗎?會不會所學沒有辦法有所用?

  我在台大資工系的時候,一進去就是學 C 語言。台大資工系非常重視基礎跟理論,我覺得這就是台大資工系的優點。不會直接教學生程式怎麼寫,但會直接教程式的組成有什麼,它的實作是怎樣實作的,都會講的非常清楚。但是到業界的時候,我覺得是不一樣的。
  譬如學 C 語言裡,allocate 一塊記憶體時會有一個指標指向它,那要 release 記憶體的時候,你們會怎麼 releasefree 完就沒事了嗎?那駭客有一個技巧叫做 use after free,就是把垃圾拿來使用。這個指標明明就已經被 free 了,但是他的攻擊手法就是把已經 free 的東西拿來使用。其實那個東西的位址還在,因為基本上記憶體是有分 kernel space user space 的。如果在 windows 下面作執行,有時候當你要執行一些指令,它要求你輸入 administrator 的密碼,就算是這樣,這個還是跑在 user space 的權限。那 kernel space 有什麼權限呢?他是可以直接跟硬體溝通。基本上在 Linux 裡面,像 glibc,當你要去 allocate 一個記憶體,去 allocate 記憶體的這個動作,會呼叫 libc 底下的一個 function。假設你第一次要,libc 會跟作業系統要,作業系統會跟實體記憶體去 allocate 一塊記憶體來。但假設你只是要 8K 的記憶體,它不會真的只要 8K 的記憶體來,一次可能會要個 128K,甚至是更大。因為跟硬體溝通是要花很多 loading 的,所以如果跟硬體要個 8K,再跟硬體要個 1K,這樣執行是很沒有效率的。作業系統就會把 128K 拿給 glibc 去管,那下次當你再要個 16K,就不會再重新跟作業系統要,會直接從剩下的 120K 再給你 16K。所以是 glibc 這個函式庫在管理要到的記憶體,當你 allocate 的時候,它直接跟你溝通,而不是作業系統跟你溝通。
  這時候,pointer 有一個 address,它有一個在記憶體上的位址,雖然它的 address 指的是 virtual address,不是真的指到實體記憶體的位址。但是在 user space,使用記憶體就是透過 virtual address 而已。假設你去 free 一個之前 allocate 的記憶體,就算這個記憶體被 free 掉了,若是沒有對這個 pointer 去把他設成 NULL,那基本上他還是會記錄那個位址。這個時候還是可以 print 一個已經被 free 的東西了,只是這時候會不知道它會印出什麼東西。有時候程式沒寫好,print 時都會印出一些前面是正常結果的東西,但後面會印出垃圾。所以要把 free 之後的那些 pointer 設成 NULL,跟你的字串結尾要放空字元是一種不完全相等但有類似概念的關係。一個沒有要用到的東西,寧可把任何資訊都抹滅掉。如果只是 free 的話,而沒有指向 NULL,基本上,pointer 還是記著它是指向誰的。那它指向的位址一定是這支程式可以執行的記憶體空間。駭客就可以透過這個東西,對這塊記憶體,例如開始往後讀,或塞一些東西進去,所謂的 overflow 就是這樣玩的。

: 程式有辦法寫得非常安全到令駭客沒轍嗎?

  也許程式可以寫得很安全,但程式可能跑在某個作業系統上,而那個作業系統不安全。駭客就是去找一個他最容易攻進去的地方去駭入。你們系統程式應該有學過,一個 C 程式語言寫完之後,會先把被編譯成組合語言,然後再作一些 library link 的事情。以前系統程式都會講說,當這個程式在執行的時候,會有什麼 reload 的東西。以前 reload 的話,可能會 reload 到某一個固定的記憶體,但其實以前這樣是有很多漏洞的。Linux 有類似 ASLR 的東西,ASLR 就是 linking 的部分。一個程式它會有 data section code section,每一個 section 可能會載到記憶體的不同地方。譬如說 data section 就要載到 stack 的位址。以前沒有 ASLR 的時候,只要知道記憶體載的第一個位址,他的 data section 在哪裡都可以算得出來。input 一定是存在 stack heap 上面,或者存在 data section 上面,那駭客就可以透過 input 去讓程式去執行原本發開寫程式的人不預期它會執行的東西。ASLR 就是當我在 loading 的時候,很隨機地把不同 section 載入不同的地方。然後這些 section 之間,沒有固定的 address offset。所以而且每次載入的隨機也都不一樣,駭客就比較難算出它的 code 會在哪裡這樣。(是一種保護機制?)是一種保護機制,但是最後他還是可以被破解。
  這一次 HITCON 陳君明老師有去講區塊鏈,他說就區塊鏈的演算法來說,區塊鏈就是挖礦。可以被當作錢幣的東西都是很難被挖到的東西,就像金塊一樣。區塊鏈它建立在密碼學上面,你很難去挖到一個金幣,因為每一個金幣都是對應到一個密碼,而這些密碼很難去破解。所以如果你算出來了,這個就是你的。因為它很難去開採到,那就有它的價值,有價值的東西就可以當作貨幣來交易。基本上區塊鏈的理念是這樣。陳君明老師說,就演算法跟理論而言,它其實是很安全的。但是之前有新聞爆出來,區塊鏈在實作上有什麼漏洞,導致有人盜領了區塊鏈裡面的金幣,損失了多少錢等等。演算法的理論跟實作之間是有差距的。