1. Pokemon Go Hacking - Shaolin Hsu

2016 9/20  顯微鏡下的駭客 - Shaolin Hsu

葉品儀、楊承諺、駱佳妤、林映彤

 

  • 何謂滲透測試?

  滲透測試(Penetration Test, PT) 是指請受信任的第三方專業資安團隊,從駭客的角度出發,嘗試入侵企業的網站、網路系統、儲存設備等軟硬體,找出各種潛在的漏洞,以驗證企業的設備與資料是否可被破壞或竊取,同時也評估資訊系統與硬體的全盤架構,確認其安全性是否有待加強。而滲透測試結束後,專家會列出詳細的攻擊手法與步驟,提供完整的修補建議並輔導開發者修補漏洞,讓企業能儘速降低遭受入侵的風險。

資料來源: http://devco.re/services/penetration-test

 

  • 從表象看駭客行為:

  • APT(Advanced Persistent Threat) 進階持續性滲透攻擊

  APT是指針對特定組織所作出複雜且多方位的攻擊,而這種攻擊可能會採取多種手段,像是惡意軟體,弱點掃描,針對性入侵和利用惡意內部人員去破壞安全措施。藉由長期埋伏且多階段的攻擊,通常會配合0-day,直到達成目的,因此極難偵測與防禦

 

* 0-day attack(零日攻擊):

  安全漏洞進行的攻擊,不管是應用程式、第三方服務,甚至是防護軟體本身都存在安全漏洞,即便做防範也只能降低被攻擊的機率,並不能完全的避免。

著名的零日攻擊:Stuxnet

 

* APT攻擊手法:

1. 撞庫:

  我們喜歡在不同網站註冊時,使用自己慣用的一組帳號密碼,在之後網站登入才不會忘記是哪一組。撞庫是指透過網路收集用戶的資訊,特別是帳號密碼,藉由嘗試登入其他的網站,來得到可以登入的用戶資訊。我們可以利用下面連結來測試自己現有的帳密是否安全:https://haveibeenpwned.com/

2. 社交工程:

  最難預防的就是社交工程的攻擊,但也是最簡單也有效的方式。像是假冒e-mail的附件檔案、造訪特定網站、下載軟體,在點擊時植入惡意程式,來竊取資料。

3. 實體入侵

 

* APT應對措施:

  1. 面對0-day難以防範,需從入侵偵測、紀錄著手,建立在事發後的應變措施。藉由以下方式降低0-day的觸發機率:​
    1. 將防護軟體(包含病毒碼)更新至最新版本
    2. 從官方網站下載軟體比對hash來進行驗證
    3. 收信附件利用gmail web預覽或將顯示調整為純文字
    4. 停用flash (Chrome未來不支援flash)
  2. 重要的網站或APP的帳號密碼一定要獨立,必要時可以利用密碼管理工具(EX:1password)來幫助密碼的記憶。
  3. 如果有提供第二階段驗證,使用它吧
  4. 根據NIST(National Institute of Standards and Technology)的新密碼規範
    1. 密碼長度至少要8碼,最多可以允許使用者輸入64
    2. 密碼不應該限制特殊字元,只要是可以印出來的ASCII、空白與Unicode都應該被允許,因為這個要求會讓使用者為了符合密碼的限制,反而輸入更差的密碼。
    3. 不應該有密碼提示存取的功能,意思就是安全問題不夠安全,所以應該被禁止
    4. 針對已知的弱密碼(EX:字典單字、被洩漏出來的密碼),都應該被擋下來
    5. 不應該要求使用者定期換密碼,這樣反而會讓使用者選擇更差的密碼 (因為要花力氣記,所以會選擇簡單的密碼),不如讓使用者選一個強一點的密碼一直用。
    6. 密碼絕對不可以存明碼,雖然這種方式不用記密碼,但是同時也不需要任何駭客的技巧就可以直接登入使用者的網站。

 

小總結:每個人都會被入侵,只是時間長短的問題

  • 一般攻擊伺服器

  丟給伺服器任何的值,使程式跳脫正常程序,想辦法讓它執行。

* SQL Injection(資料隱碼攻擊):

  利用SQL語法上的漏洞,藉由特殊字元,改變與法上的邏輯,因此駭客就取得資料庫的內容。包括會員帳號。

Ex:http://sqli.exp.tw/

原本的登入檢查,判定帳號密碼是否正確,能否登入成功

SELECT * FROM admin                           

WHERE username = 'blablalba'             

AND pasword = 'heeeeeeeee'               

改成   

SELECT * FROM admin                          

WHERE username = 'admin'                 

AND password = '' or '1' == '1'             

原本用檢查 password ' '

→ password '' or '1' == '1' (為空  或是  all true)

跳脫了原本用來檢查密碼的sql語法

* 程式的特色變弱點:​

  1. 在MYSQL裡也可以看到 1 = ‘1abc’ (True) 因為左邊是數字與右邊做比對時略掉了後半部的字元。
  2. 不同語言的Regular Expression,但同樣是/^foo$/ , 在perl和ruby裡卻是不一樣的結果。只是打foo然後換行的話 , 在perl是可行的 !
  3. 容易被忽略的底層問題。Imagemagic (Imagetragick 弱點),在圖片的轉檔,其實是程式代碼。

Graph-context

...

'url(http://"| sleep 6; ")'

Graph-context

(執行便讓主機睡眠6秒)

* 小總結:使用者輸入的值都是不可信的,要熟悉各種程式語言的特色;凡是在網上流傳的嚴重弱點,也要思考自己是否有用到!

 

    • 利用伺服器攻擊使用者

    * XSS(Cross-Site Scripting)攻擊

      是一種網站應用程式的安全漏洞攻擊,有意者會以巧妙的方式注入惡意指令到網頁上,造成其他使用者在觀看網頁時就會受到影響。這種攻擊手法可以讓駭客藉機竊取到使用者的個資、瀏覽器導向釣魚網站,安裝惡意程式或是取得最高權限等等。

    * CSRF(Cross Site Request Forgery)

      攻擊者在使用者在不知情的情況下,挾持用戶在當前已登錄的網站,透過技術、手段讓已經認證過瀏覽器去執行非本意的動作(EX:轉帳、發郵件),因為瀏覽器會以為是使用者本人在操作,以此駭客達到攻擊的目的。也就是說,Web的身分驗證,是保證請求的發出是經過使用者的瀏覽器,但不能保證是使用者本人發出的請求。

    * XSS v.s. CSRF

    • XSS:是利用使用者對指定網站的信任
    • CSRF:是利用網站對使用者瀏覽器的信任

     

      • 作弊者( 以 Pokémon Go 為例 )

      * Fake GPS

      1. 硬體做法

      • 硬體偽造GPS訊號、基地台定位(LBS):(儀器貴成本高)
      • 偽造Wi-Fi訊號:Wi-Fi定位是利用附近 Wi-Fi access point 的資訊(主要是 MAC),去資料庫比對查詢這些 AP 所在位置,並根據 AP 訊號的強弱,推算出手持裝置的位置。而偽造則是透過偽造假 AP 的方式,改變手持裝置的地理位置

       資料來源:http://tech.shaolin.tw/posts/2013/07/13/wi-fi-positioning-system-spoofing-1/http://tech.shaolin.tw/posts/2013/08/05/wi-fi-positioning-system-spoofing-2/

       

      2. 開發者模式

      • iPhone  Xcode -> Debug -> Location
      • Android  Develpoer options -> mock location;或是到 Play 商店下載"FAKE GPS"也可直接啟用

       

       

      * API流

        分析API Client 端傳出去什麼資料,而Server回傳什麼資料,才能夠了解遊戲的溝通模式。

      • 分析封包 

      傳遞資料經由Protocol Buffers (傳統:XML, JSON),雙方協定好的序列(以編碼方式串成字串)產出binary。經過序列化,較於傳統輕便、高效,所以資料封包小、傳遞快,同時也省去了編碼過程的轉換問題,但是為二進制,不易於閱讀。

       

      • 反組譯APP

        自APP興起之後,逆向工程的領域逐漸開始被關注。因為APP在初期的保護機制並不完善,有意人士可以藉由破解.apk或是.proto,再加以偽造,以達其目的。

        透過解析API,還原遊戲溝通方式,任何語言只要送出的請求符合格式,便能偽造任一玩家進行遊戲(脫機外掛)。

        以Pokémon GO為例,利用API(脫機練功),除了搭配fake GPS當飛人抓稀有怪之外,還可以自動翻牌、抓怪、進化等等,其實手機都知道附近的怪物在哪裡,只是隱藏起來,透過API的GetMapObjects便可知道。

       

      • MITM(Man-in-the-middle)

        強迫APP透過Proxy(中間人)連線,在這中間人可以作訊息的攔截,插入或是修改內容,以偽造server傳來的訊息,反之偽造client送出的訊息,故MIMT的行為是用於缺乏相互認證的手法。

       

      - 偽造 server 傳來的訊息

        Server原本傳來說「附近出現伊布」,利用中間人攔截,將訊息改成「附近出現夢幻」(更改怪物代碼),那手機上顯示的便是夢幻。(輕薄的假象)

       

      - 偽造 client 送出訊息

        塑造出高超的技巧,像是佔領塔的時候,可以閃躲每個來自對手的攻擊,或是抓怪丟球時,每次都是Excellent!

        

      * 傳統作弊流

      • 更改記憶體:以小朋友下樓為例,可更改起始樓層數

      步驟一 下載 Cheat Engine

      步驟二  開啟你要更改記憶體的執行檔

      步驟三 我們要更改的是“地下0002階”的數字部分,而現在處於第 2 階,表示記憶體中有個值是存取 2

      步驟四 第一次尋找記憶體有 2 的,出現很多個,所以要再繼續篩選

      步驟五 我們在把它玩到第階再尋找,就只剩兩個記憶體位置符合

      步驟六 我們先挑上面的 0025ED94 進行更改,改成 248,遊戲就從 248 層開始了,表示很幸運的就是這個位址

       

      * 小統整:

      1. API流

        官方依然是佔優勢的,但是API的實作仍不完整,有些值並未傳送;而脫機外掛並未實作第三方資料的回傳;最後是行為偵測,如果基數大、cost大,誤判慮是否可以承受 ? 目前的Pokémon GO尚未那麼嚴苛,不小心飛太遠可能鎖個幾鐘頭,但是Ingress就不同了,它的發展已趨於平穩,一旦偵測到意圖不軌的使用者,便是直接封鎖。

      2. 傳統流 ( 比較少人使用 )

      • API能做的太強
      • 能作弊的功能不多
      • 修改記憶體需要Root或JB,官方版本(0.37)禁止這些行為 (附帶觀念:APP是永遠防不了Root或JB的,擁有最高權限可以做任何繞過檢查的動作。但APP可以讓繞過檢查的動作異常麻煩。)

      3. 想作弊,我該如何開始

       

      • 從駭客心理建立防禦策略:

        • 駭客心理

      * 駭客會挑企業最弱處下手擴散,而企業的安全等級高低是由防禦最弱的點所定義 (如同破水桶)。

        Ex:秘書的電腦

      * 駭客可看到感覺很好打的網站會想要嘗試看看。

        Ex:老舊的framework、爛爛的coding style ……

      * 駭客的毅力取決於入侵後所能帶來的利益

       

      • 戰略面防禦

      * 釐清你最重要的東西(駭客最想要的東西)是什麼?

      * 如果駭客突破了第一層防禦,進入了內網,他有機會拿到最重要的東西嗎?

      * 了解企業防禦最弱的點在哪?加強防禦,並且思考如果該入被攻破,有什麼偵測或防護措施 (可能需要第三方輔助)

      * 加強對外服務的門面,看起來不好打進也許有嚇阻作用哈哈

       

      • 防禦重點小整理

        • 一般人

      * 建議將瀏覽器的flash關閉服務

      * 使用瀏覽器收信、查看附件,使用Gmail會是比較安全的方式

      * 密碼的相關原則(不要使用萬用密碼…)

      • 服務開發者

      * 客戶端傳來的訊息都是不可信的,需要先過濾、檢查再使用

      * 注意技術圈朋友轉貼的資安訊息,確認弱點訊息是否與你的服務有相關。(跟上現況,適時地提升安全等級)

      • 企業

      * 以內網已經被滲透為前提,建置多權限結構保護企業資產,並且在異地紀錄完整log(留下足跡、歷史紀錄)