2018年11月3日 星期六

「2018台灣賽門鐵克資安論壇」會後感想

聲明:這些都是我個人的主觀見解,或有失偏頗,請讀者在閱讀時也要有自己的判斷!
在此之前我都沒有參加過賽門鐵克的任何資安研討會,這是第一次參與,雖然不免推銷自家產品,但其中也有值得參考的觀念建議,個人感覺還蠻值得的。
首先由Symantec台灣區總經理Dylan Wen開場,他提出資安321的檢視方法:三個問題二項觀念一個架構
三個問題
1.資訊環境防護安全嗎?
我相信沒有人回答的出來,安全無絕對,只要你夠大咖,駭客一定盯上你,所以我個人覺得這根本不是問題,而是行銷手法。但他以某家金融CIO的看法來闡釋此題,個人倒覺得很貼切:和四周的同業比較,只要比他們安全就值得了。因為駭客也是挑軟柿子吃
2.如何規劃資安架構?
這一題其實沒什麼好回答的,現今已有成堆的「標準」或「準則」,反正照做就對了,要不然怎會有一堆機關、廠商號稱通過XYZ認證,這此認證制度都會提供多如牛毛的事前盤點、分類、規劃、風險評鑑,事中稽查、確認及事後的成熟度評估。但我個人覺他們都忽略「人性」,只要有人在的地方,就不可能實行「zero trust」,人是起點,也是終點,所謂「徒法不能以自行」,任何制度或方法論,若忽視人性,註定不會成功,偏偏所有的制度或方法論都無法加入「人性管理」,因為人性最重要在於「信任」。
3.資安人力資源足夠嗎?
這一題也沒什麼好回答的,在台灣,資安人力一直都不夠,不是沒有人才,而是老闆向來不重視,在台灣無形資產向來不值錢,老闆可以花大錢買設備、買硬體,但一遇到軟體、智能技術,就會死命壓低價錢,老闆覺得「軟體再複製就可以多一套,就可以分攤成本」,同樣也認為「智能技術」只要形之文字,就可以再創造一位高手(如果那麼簡單,還要老師幹嘛?)。在老闆眼中,資安人才「養成」是這麼容易,因此,他所認為的5名資安人員,其實抵不上一位真正的資安人才,更何況資安威脅千變萬化,必須集結各種專才而成的防護網才足夠應付,所以資安人力資源怎麼會足夠?
二項觀念1.慎選廠商2.可擴充平臺。這兩個觀念很容易理解,沒什麼好解釋的,但我覺得很難實踐,如果沒有比廠商更厲害,怎麼判斷廠商夠不夠格?如果對公司的資安環境及需求沒有通盤了解,又如何評斷平臺擴充到哪一種程度才是合乎需要?所以這二項觀念歸結起來還是「人才」因素。
一個架構:就是不要讓公司的資安設備孤軍作戰,不要彼此成為不相干的孤島,簡單說,就是各式資安設備(如防火牆、IPS/IDS、防毒閘道...)要達到聯防目標。理念很不錯,要實現還是得靠人。
聽完Dylan的演講,我很想再加一項中心,不重視「人才」,投注再多預算依然得不到效果,車子再會跑,沒有好駕駛,它也只能待在車庫裡
第二場是Victor Law介紹2019資訊安全趨勢、挑戰及機會,敝人資質愚鈍,聽不出什麼重點,好像是說我們可以靠AI協助提高安全防禦,而駭客也會利用AI強化攻擊。一直以來不都是這樣嗎?矛 &盾都是藉用相同的技術在競爭,也一直相伴在進步,任何攻防皆是如此,要不然,另一方早消聲匿跡。
第三場是Dylan Wei、MahaAlber Tsao介紹次世代上網最佳防護-網頁隔離管理,這是產品介紹,也就是Symantec的隔離上網技術,使用者上瀏覽網頁、收信或下載檔案時,這些資料並不是直接落地在使用者的PC上,而是暫存在隔離伺服器(看作Proxy吧),隔離伺服器會對內容進行檢查,「內容」包括從Internet進來的,和從使用者PC出去的,如此不僅能防止外部攻擊,也能防止使用者有意無意洩露資料。他們號稱可以100%保護上網安全,但我認為沒有經過時間焠煉,一切都只是假設,畢竟系統是人設計的,不可能絕對完美。我就想到一種情境,既然隔離伺服器會檢查內容,如果駭客透過惡意內容利用隔離伺服器的漏洞,就能單點達成攻擊多位使用者。
第四場由Dragon Chang主持的專題探討專題探討(面對明日多重威脅與挑戰,企業該如何從智能情報及資安架構著手),邀請友達光電(林經理)、臺灣大哥大(陳處長)、TWCERT(陳永佳博士)、Victor Law,以一問一答方式介紹不同產業面對資安威脅的因應方式,這些建議確實值得在規劃、施作資安防禦的參考,我聽到的兩個重點(來自友達及台哥大):有多少預算做多少事從內部培養資安人才。可想而知,安不安全,高層的支持很重要,這兩項因素都不是資安人可以決定的。
後半段分兩軌進行:Track A 駕馭資安Track B 融合未來。我選擇Track A,共有兩個主題。
● 加強資安應變能力以抵禦未來攻擊(Andy Chow)
● 資安人力的不足?專業顧問服務團隊協助您(Ben Li)
這個兩場的論述內容不難理解,而重點在於「Symtantec能夠幫助你」,簡單說「有資安需要,找Symtantec就對了」。至於Symtantec能不能解決問題,反正廣告嘛!哪有人說自己不行的。
倒是Ben Li提到資安面對的是人、響應的也是人,與我的觀念相近。買再多設備、制定再多規則,沒有「人」,這些都是死的,只要「人」不用心,這些都無法發揮功效。很多專案在建置時,因為要驗收,廠商很用心調校,例如防火牆,第一年可以發揮很好功效,但之後,鮮有「人」仔細檢視日誌及比對規則,慢慢地,規則就過時了,只要沒有顯明的徵兆,也不會有人去看日誌,最後成了「求心安」的平安符。
可惜,老闆們都能體認「工欲善其事,必先利其器」(因為機器不會抱怨),卻不願意多給資安人員一些信任、資源及授權。我的老闆也是這般,他的中心思想就是立下「制度」,所以訂了一堆規則,以為有「規定」大家就會照著執行。然而,上有政策、下有對策,陽奉陰違者,有之;便宜行事者,有之;阿諛奉承者,有之;暗渡陳倉者,有之,規則依舊在,裁量各不同,何況多如牛毛的規定,誰記得(誰願意花時間去記?)
個人心得
制度很重要,它是路標,指引我們走對的方向。但「人」更重要(制度不也是人訂的),這裡的「人」不是隨意指派,必須要「願意做有能力做有時間做」,雖說三個臭皮匠勝過一個諸葛亮,我情願有兩位諸葛亮,也不想要六個臭皮匠。
踏入資安後,參加許多場研討會,大家拼命介紹產品有多神、如何防禦未知的攻擊(到現在我都還納悶,「未知」如何防?),鮮少有廠商真心告訴老闆們:你們公司需要哪些資安人才。不知道哪一天老闆才會覺醒:「人」真的很重要!

2018年8月12日 星期日

當 thc-hydra 遇到中文字( hydra 真的不認識中文字嗎?)

我在2014年寫了一篇「實例說明:利用 Hydra 暴力破解網站登入密碼」,得到許多網友青睞,給了諸多互動,也讓我有機會探索之前不曾注意的細節,在此向各位說聲謝謝
hydra是利用網頁回應的訊息來判斷是否成功登入,該篇博文只處理「純英文」情境,就算遇到中文訊息,也可以利用網頁的其他元素內容(如class="warn")應付,因此,從來沒有仔細思索hydra與中文訊息的關係。
但最近踢到鐵板了,某個產品的後台登入頁,在登入失敗時只回應中文訊息(見圖1),原本以為使用下列的句法可以進行暴力測試:
hydra -s 260 -l root -p root@password 待測的URL http-post-form "/cgi-bin/admin/sessmgr.cgi:user=^USER^&pwd=^PASS^&act=login&savepwd=1:登入失敗"
圖1
結果~~每一組 ID/Password 都成功(其實是誤判)!原來hydra不認識「登入失敗」這幾個字。上網找了很久,得到的答案是「hydra不支援多位元組字集(MBCS)」,但真的不支援嗎?我就是不死心。直接查看hydra的源碼,發現它是儲存在 char* 型別,心想「如果將中文拆成單一byte是不是就可以了呢?」果不其然,就是這樣
有關hydra的語法(用法)在此就不多說了,有需要的朋友請參考「實例說明:利用 Hydra 暴力破解網站登入密碼」。
直接介紹如何將中文拆成單一byte。
  1. 利用hydra -v -V -d 參數輸出詳細訊息,以便取得中文字的內碼:
    hydra -vVd -s 260 -l root -p root@password 待測的URL http-post-form "/cgi-bin/admin/sessmgr.cgi:user=^USER^&pwd=^PASS^&act=login&savepwd=1:登入失敗" > D:\tmp\nta_hydra1.txt
    這裡單純使用 -l -p 只測試一組帳密。 上面使用輸出重導向 > D:\tmp\nta_hydra1.txt 將訊息寫入文字檔,方便搜尋比較。
  2. 利用notepad++從輸出的文字檔中找到未登入前(使用GET取得登入頁),及hydra用POST送出登入請求後所回應的登入失敗,登入失敗時,頁面多出了「e799 bbe5 85a5 e5a4 b1e6 9597 efbc 8ce8 ab8b e987 8de6 96b0 e8bc b8e5 85a5 e5b8 b3e8 999f e5af 86e7 a2bc」(參考圖2),這一段恰好是「登入失敗,請重新輸入帳號密碼」的UTF-8編碼,其中前12Byte就是「登入失敗」
    圖2

  3. 因此,將上面句法改成下面的樣子就可以正常測試了:
    hydra -vVd -s 260 -L 帳號字典檔 -P 密碼字典檔 待測的URL http-post-form "/cgi-bin/admin/sessmgr.cgi:user=^USER^&pwd=^PASS^&act=login&savepwd=1:\xe7\x99\xbb\xe5\x85\xa5\xe5\xa4\xb1\xe6\x95\x97"
    hydra要以內碼方式輸入資料,只需在內碼前頭加上 \x 即可,例如 \xe7,所以將「登入失敗」以內碼表示就成了「\xe7\x99\xbb\xe5\x85\xa5\xe5\xa4\xb1」。
  • hydra可以利用Byte內碼方式指定MBCS文字,以後遇到中文網頁,不必再費心尋找獨特的網頁元素來代替中文字,直接用中文內碼就好了!
  • 由於直接使用內碼,所以面對英文、UTF-8或Big5的中文都可以處理,不必擔心內碼轉換問題。
PS1:這裡講「內碼」雖然不夠精準,但請您別挑剔了!
PS2:新版的thc-hydra-win可以從Github下載: https://github.com/maaaaz/thc-hydra-windows/releases

2018年5月12日 星期六

解決tomcat上 X-Frame-Option及X-XSS-Protection未設定的問題

最近剛上了一個JSP開發的系統,部署在tomcat 8.5上,被本機關滲透測試團隊發現兩項表頭未設定,被列為中風險,分別是「X-Frame-Options」及「X-XSS-Protection」,如果在IIS,這很好處理,只要在「HTTP回應標頭」裡加兩項設定就可以解決。但從網路上找到的tomcat上解決方案大多要自己寫filter,其實tomcat自7.0.63版以後,也可以透過web.xml來設定,只要在web.xml加入:
filter>
   <filter-name>httpheadersecurity</filter-name>
   <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-classinit-param>  
       <param-name>antiClickJackingOption</param-name>  
       <param-value>SAMEORIGIN</param-value>  
   </init-paramasync-supported>true</async-supported>
</filter
filter-mapping>
   <filter-name>httpHeaderSecurity</filter-name>
   <url-pattern>/*</url-pattern>
   <dispatcher>REQUEST</dispatcher>
</filter-mapping
當啟用 httpHeaderSecurity 的filter後,預設是將X-Frame-Options=DENY加到回應標頭,但因我的系統需要用iframe內嵌同一網站的頁面,所以要自己加:
init-param>  
    <param-name>antiClickJackingOption</param-name>  
    <param-valueSAMEORIGIN</param-value>  
</init-param
才能將X-Frame-Options的值改成SAMEORIGIN,要注意哦!param-nmae是用antiClickJackingOption(注意大小寫),不是X-Frame-Options
不過httpHeaderSecurity只能設定幾種標頭,不像IIS的「HTTP回應標頭」可以隨便設,如果你想要設定任意標頭,只好自己寫filter,這裡提供個鏈結供參:
https://stackoverflow.com/questions/38195273/how-to-set-x-frame-option-in-tomcat