MOPCON

這兩天跑去高雄參加MOPCON,而且還投稿。大約是在半年前,偶然看到mikimoto寫的Mopcon 2012 回顧與展望,裡面一句:

我當app開發者這麼久,我發現一件事,通常使用者不會report crash,而是直接給一顆心評價

看了很有感觸,加上參加cocoheads一年多聽到許多朋友分享的工具,就很想一篇與crash有關的slide,原本是想要用在公司內教育訓練的,但當時主管更希望我講其他題目,所以這篇就一直pending沒有完成,一不小心就過了半年。兩個月前看到MOPCON 在call for paper就想這題目應該可以講夠久,40min應該不是問題。加油添醋了一番投了一篇讓你的App優雅的crash三部曲最近的習慣是slide裡都要偷渡同事照片,這次把彼得潘放在33頁。


雖然平常在聚會講過好幾場,但是第一次講conference,內心還是有點小緊張,一直覺得什麼地方沒有做好,會不會講得太簡單之類的,早上搭高鐵過去的時候還在加東西,完全沒有rehersal,結果講太多iOS的東西,沒什麼共鳴,上台後才發現MOPCON來了很多學生,早知道我應該多提些跟學生有切身經驗的東西,像是做專題、做研究vs做案子、戰學校之類的。現在想起來,起承轉合裡面,承跟合的部份還可以做得更好!不過結束就結束了,下一場再努力吧。

以上是第一天當speaker的心得。

第二天壓力差很多,純粹是當觀眾認識其他人的心情過去的,參加過幾場conference,我覺得去現場跟在家裡看錄影最大的差別是:

參加conference除了聽厲害的演講外,更重要的是「互動」。QA的時候發問、平常遇到的時候聊兩句、資深的引導資淺的。會來conference的講者都是很願意分享才來的。 

我想只要不涉及商業機密的問題,問什麼都可以獲得解答的吧!

如果只是聽演講,那幾個月後等slide釋出,影片出來不就好了,還能想看幾次就看幾次,這次從幾位朋友身上得到許多啟發實在受益良多(這句好矯情)。一般conference會有的irc這次MOPCON也有,而且每一廳還有紀錄組即時把發生什麼事po在irc上面,有一廳的紀錄組甚至做了每場talk的心智圖,真是太聰明了。

小崇 (olli wang)(王老師)的世界迷霧


第二天結束的晚上有講者晚宴+慶功宴,很可惜的是參與的講者並不多,只有zonble、Neil、awaw跟我去而已,應該是隔天禮拜一要上班的關係,有好幾個都是從台北下來的。

席間聽到jserv老師講說他成為自耕農的故事,實在很感動。想不到這世道還有這種熱情奉獻的好老師。


也很感慨自己在大學為什麼沒有遇到這種老師、為什麼學校有開創業課自己竟然沒有去修、大學的時候到底在幹嘛?

接下來就會想到自己能幹嘛?能對現在的學生作些什麼?以下隨便想想
  • 捐錢給jserv買設備。(經費往往都是大咖教授拿去這有待過學校的都知道)
  • 鼓勵學生參加聚會(會來的就是會來,不會來的應該死都不會來)
  • 直接去學校社課。(這還蠻可行的,但是要去哪?)
  • 去學校演講。(去過一次,但是就沒有後續了,也沒學弟跟我聯絡)
  • 去學校app課幫忙當助教(寄信給x大開該門課教授,說要找我去但是後續沒下文)
  • 聚會提供學生免費保留票(沒做過,好像很可行,尤其是像一些秒殺的聚會)
趁自己還沒結婚沒家庭壓力的時候,這些事想做就可以做。也該從接火把的人變成丟火把的人了。


另外,前輩指點了些技術發展上可以努力的方向,應該是這兩天最大的收穫吧!開始有很多書想要看的感覺,要開始閉關了。

Cocoaheads Taipei 2013.10

這次的聚會是我參加cocoaheads以來站最久的一次,加上前一天上拳擊課,對打的時候被揍了好幾拳,隔天超想請假的。

因為八月底九月初的時候聽了Taien的Android app security還有Kevin的IAP 第三方驗證,聽完想了想,還沒有聽過iOS security的題目,之前作過的案子,每次都喜歡用稍微不同的方法做出一樣的功能,再加上最近這半年接觸了enterprise級的app,就把自己用過的防禦方法大致上介紹一下。





分享前一天晚上在家裡錄的


這次的重點是在防禦而不是在攻擊,只是要防禦之前要先知道可能會有哪些攻擊手法,所以簡單列了一些工具。

在講http request/response那邊的時候,台下有提問說為什麼要這麼麻煩,直接用SSL就好。我的想法是:

這是賭一口氣,就算沒有用SSL也要讓對手看得到吃不到,也是種火力展示。 
有些步驟不單單只是加密,而是把資料簡化,減少傳輸量。

當然要作到更誇張就是只開TCP連線,再加上定義好的flag簡化傳輸資料,精簡到每個package都錙銖必較的程度。

在我講完之後,後續也聽了好幾個犀利的talk,尤其是在安全性上面更進一步講解,可惜是live demo,沒有投影片,這也應該是在座20幾個人才有的福利吧。




Build app support PIE

Position Independent Executable(PIE),也叫 (Address space layout randomization),可以避免buffer overflow attack,防止對已知記憶體位置作攻擊,重點是前幾天上架時iTune Connect跟我說我的app不支援PIE不可以上架,會有這問題是因為我們的library是很久以前build的,沒有支援PIE,重build就好了。

iOS 在4.3之後開始支援,Android是在4.0,根據 QA1788,只要確認這幾個設定有設對,build出來的app就會有PIE,新開的project預設選項都有開。






看到app的flag裡有PIE就成功了
$ otool -hv /path/to/MyApp.app/MyApp
MyApp:
Mach header
magic   cputype cpusubtype caps filetype  ncmds  sizeofcmds   flags
MH_MAGIC  ARM    V7        0x00  EXECUTE    23        2372     NOUNDEFS DYLDLINK TWOLEVEL PIE

當然,攻擊時要把他拿掉也是可以啦XD

reference:
WIKI-ASLR
iphoneWIKI-ASLR
废除应用程序的ASLR特性