2014年6月16日 星期一

Week 16 -- Arduino uno 開發體驗


這次的主題是 Arduino uno 開發板



         Arduino是個 open-source electronics prototyping platform,含有容易使用、擴充性強的硬體與軟體。所謂open-source開放源碼,意思是說 Arduino 的硬體電路設計圖是開放的,軟體原始碼也都是開放的;electronics代表說創作物是要吃電的;prototyping platform表示運用這套平台可以快速地建構出原型,打造產品。(以上介紹參考自這裡)
 
         Arduino 這塊版子最讓我印象深刻的是它的易用性。與其他版子不同,Arduino 非常適合初學者使用,做為開發版子的入門。而今天我們所使用的是 Arduino uno 系列。一開始講者先教我們怎麼安裝驅動程式和開發 Arduino 用的 IDE。Arduino 本身是用 C語言做為開發語言,但是強大的 IDE 卻可以讓開發者直接使用拉介面的方式去撰寫程式,個人認為這是 Arduino 之所以容易上手的關鍵。所謂"拉介面"的方式,可以參考下圖:


   
       可以看到左手邊有專人寫好的 module 擺在那邊,今天假設我想要讓程式重複執行某個動作 ( for loop ),那麼我只要將 "重複執行" 這個元件用拉的方式直接拉到右邊的開發介面即可,不需要自己設定 for 迴圈的變數之類的,而且重複執行的動作,就直接包在"重複執行"裡面即可,整個開發介面的設計相當圖形化及人性化,也難怪很多連程式都不會寫的初學者都選 Arduino 做為學習開發版子的入門。

         Arduino 另外一項優點就是它強大的擴充性。只要善加利用這點,Arduino可以變得很強大,像講者就展示了他用 Arduino 開發板去控制機器人行走。而我和另一位組員,也在強大的 IDE 加持下,開始體驗 Arduino 的強大。一開始先是發給了我們一根 LED 燈,可以亮紅綠藍三種顏色。我們利用控制 Timer 的方式,成功讓 LED 燈進行簡單的閃爍。

 


       接下來是讓我印象最深刻的。講者給了我們一組擴充裝置, 為一個 analog sensor, 讓我們可以透過裝置控制類比訊號。接下來,我們利用範例給的 Pong 遊戲程式,將擴充裝置應用在上面。一開始範例所給的 Pong 程式,是用滑鼠控制畫面中的棒子,去對球球進行碰撞的動作。而講者則是要我們透過擴充裝置,將控制類比訊號,並做一些數值的轉換,達到用擴充裝置的滾輪去控制遊戲中的棒子來遊玩 Pong (就跟 Pong 一開始發明的時候一樣!! )。我們最後不僅成功利用滾輪來遊玩遊戲,還惡搞性的將畫面中的棒子改成了糟糕物,玩起來格外有趣 XDD

小球在兩顆大球之前瘋狂抖動的畫面沒拍下來實在可惜(?

        不過這也讓我終於了解到電視遊樂器遊玩的原理,原來就是透過類似這樣的方式,截取類比或是數位的訊號,轉換數值,最後根據結果控制畫面裡各元素的移動,頗為有趣。

        接下來又發給了我們伺服機,一個有齒輪結構的東西,感覺可以用來控制機器人的行走? 總之也是蠻好玩的,我們最後結合前面的擴充裝置,達到利用滾輪控制伺服機的效果

         

     
       之後還有給我們按鈕的裝置,讓我們用按鈕實作一些不同的功能,總之讓我們玩得不亦樂乎,相當充實。

       經過這次的體驗之後深深覺得 Arduino 真的是好物,連我這種對開發版子毫無興趣的人都覺得好玩,有趣,可見其威力有多強大。個人深刻的體會到,要帶人入門一個領域,"容易上手"這點真的是不容忽視,因為容易上手,開發起來才方便,才會覺得簡單,有趣,之後才會有興趣進行更深入的研究,開發。 要是早一點接觸這種東西,搞不好現在的我就不會那麼排斥硬體了啊 ˊ_>ˋ



2014年6月6日 星期五

[社群] C4Lab -- OWASP (kuku)

5/21  C4 Lab的聚會請到的是資安界相當有名的 kuku 來跟我們介紹 OWASP 的東西, 對於資安具相當濃厚興趣的我是當然要去的。

畫面中舉手的是小畢學長 (Crboy)


       OWASP (Open Web Application Security Project) 是一個開放社群的非營利組織,致力於改善網站應用程式的安全性。而他們所提出的 OWASP Top 10 揭露常見的網站應用程式弱點,以供軟體開發安全參考。

       不過一開始kuku並沒有跟我們介紹 OWASP Top 10, 而是透過一些實際的例子, 先跟我們介紹一些在開發網站時, 有可能會遭受到的攻擊和弱點。

       一開始提到在撰寫原始碼時, 有時候編輯器會貼心的幫我們存取暫存檔(ex. Vim有時會幫你存取index.php.swp), 這時候如果利用 url 去存取這些原始碼的暫存檔, 就有可能看到網站的原始碼。其他像是開發網站時所作的備份壓縮檔, 或是當你利用 git 或是 svn 做版本控制時, git的隱藏資料夾 (.git) 有時候也會成為攻擊者入侵的途徑。其他方面, 像是 url 的網址解析和檔案名稱解析有時也會成為攻擊者的攻擊點 (像是在網址後面多加一個點, 就有辦法看到原始碼之類的), 使用 php , jsp 或是 asp 開發時都要注意這些問題。另外使用 python 開發時, 有時 .pyc檔 (byte-compiled, 中間程式碼檔) 也會成為偷看原始碼的攻擊途徑, 諸如此類的例子不勝枚舉。

       此外, kuku 也舉了一些業界的例子, 一個讓我印象比較深刻的是他們有一次發現一個網站有 PHP LFI 的漏洞, 又發現說這個網站在開發時所用的 editor 是 FCKEditor, 於是他們就利用 FCKEditor上傳的功能, 在一張圖片裡面塞進了 php 的語法, 再利用 LFI 的漏洞, 成功的執行了此語法。kuku 提到像這類的例子就是那種你用電腦絕對無法測出來的漏洞。你可能有辦法用電腦去偵測說對方是使用 FCKEditor 開發, 但是電腦無法將這個資訊跟 PHP LFI 漏洞結合在一起 (想一想還蠻恐怖的, 連 editor都有可能成為漏洞導致網站被攻擊...)

      介紹到這裡, kuku 總算開始介紹 OWASP Top 10 的東西。OWASP Top 10 就是在開發網站應用程式時, 最具風險, 最常發生的資安問題。

      A1 : Injection

      Injection不只是 SQL Injection, 像是OS shell也有可能會被 injection (command injection)。kuku 提到 Injection 已經存在了很久, 超過了15年, 但是至今仍然很常發生。kuku有提到建議是 "越早做字串的Filter, 越晚做字串escape "。

kuku針對Injection的解決辦法


     A2 : XSS (Cross-site scripting)

       XSS最常用的是用來偷 cookie, 也會被用來竊取 session, 或是對webpage進行rewrite,甚至是讓使用者在不知情的情況下發送request出去。說到這個不得不提以前曾在一個宗教網站的留言板惡搞,當時就是利用網站的 XSS 漏洞進行攻擊,至於詳細的手法和結果就略過吧 =w= 只知道最後漏洞有被發現並且修補起來了,也算是功德一件(?

    A3 : Broken authentication & session management

     簡單來說就是身分驗證機制沒做好,像是 session 沒清乾淨,或是該網站的密碼沒有做加密,以及回覆密碼機制沒有做完全等等,這些都會增加網站使用者的不便以及帳號被盜的可能性。

   A4 : 不安全的物件對應機制
     
    其實就是 server 上面的檔案路徑太容易被別人猜到,從網址上面下手,像是 download.php 就可以很容易猜到是用來下載檔案,進而推出 upload.php 是上傳檔案得頁面之類的。解決的辦法最好就是利用 hash 的方式去對應檔案名稱。
    
  A5 : CSRF (Cross Site Request Forgery)

   跨站請求偽造,簡單來說就是在發送一個偽造的request(即使 user 沒有意願這麼做)。下圖的說明頗為清楚:

來源 : link


解決的方式可以利用 SOP原則 ,cookie在設定時也可以設定 http only 特性,使得Javascript無法去讀寫cookie....等等

  A6 : Security Misconfiguration (安全設定不完全)

 網站的 server 安全性設定需要設好,不然駭客一攻擊 server 或是 server太好騙就糟糕了。解決方法像是可以設定 .htaccess 來保護主機下的目錄與檔案等等


  A7 : Insecure Cryptographic Storage (重要資料未加密儲存)

  將使用者的重要資料明文儲存在 server 上面可是相當危險的,要是洩漏出去可不是鬧著玩的。不過最近崛起(不如說捲土重來)的雲端硬碟服務 MEGA 採取了"將資料使用用戶密碼加密,並且不將用戶密碼存在server上面" 的全新管理機制,可說是幾近完美的解決了這個問題,唯一的缺點就是當用戶忘記或是遺失密碼時,MEGA 無法幫你找回密碼,也無法幫你解密檔案,等同於檔案全失(因為server上面沒有你的密碼)。


  A8 : Failure to Restrict URL Access (URL路徑限制不足)

   像是打個 ../../../../etc/passwd 就有辦法獲取密碼檔案之類的,server 上有很多目錄不是一般人可以進入的,如果這時候沒有做身分驗證的機制或是權限管理不慎,目錄很有可能就會被有心人士入侵。


  A9 : Insufficient Transport Layer Protection

   傳送資料時得保護不足,最有名的莫過於最近鬧得很大的 OpenSSL Heartbleed 漏洞。解決之道 ? 自己寫一個加密套件啊(誤


  A10 : Unvalidated Redirect and Forward (不安全的轉址)

  的確,從一些短網址的 url 來看確實看不出導到的網址是否式安全的網址,加上防毒軟體無法偵測短網址的安全性,造成很多人被廣告或是詐騙訊息所騙,一點短網址就中標了。


      OWASP Top 10 主要是針對 "網路"的應用程式安全做研究,今天並沒有聽到一些像是 Mobile 或是其他的資訊安全問題,感覺頗為可惜。

      還有一個我覺得很重要的一點,就是今天的演講沒有實作的部分。我覺得這也是很多探討資安議題的講者會忽略的一點,我甚至認為這也是在台灣資安領域人才過少的原因之一。像今天介紹的OWASP Top 10,都只有著重在"講"的部分,並沒有實作,讓在場的人親身經歷,體會這些資安問題的嚴重性,我真的覺得這是非常可惜的一點。如果往後的資安講習著重在時做的話,我想應該會激起更多人對於資安的興趣。當然 kuku 今天講得也很精彩,讓我學到了許多東西,只是因為一直講的關係導致後面體力不濟有點想睡覺 ~"~

     資訊安全一直是(至少對我們系所來說)時常會被忽略的對象之一,綜觀我們系所,只有一位教授有在做資訊安全,還是理論的密碼學派,有關於真正有在實作的駭客學派,就我所知是沒有的,這真的是很可惜的地方,因為其實資安也是可以很好玩的,自己本身因為興趣的關係,接觸了不少 Wargame 的網站 --- 一個駭客之間的遊戲網站,玩過之後所享受的樂趣是無法用言語來形容的,且還因此增加了不少資安的知識,可為一舉數得。只可惜系上基本上很少人在研究這個,之前想找人比金盾獎還得費一番心力去尋找隊友,讓我不禁感概,系上有ACM團隊,為什麼就沒有金盾軍團呢?
   
      然,這都是後話了。畢業後即將加入交大 DSNS Lab 的我,也只能寄望 C4 Lab 今後能夠在系上多多推廣這塊領域了.......