去年的 6 月 5 號,我在 Medium 發了這篇文章:暫別前端,重新開始,裡面提到了我從 2021 年 5 月份開始在公司內轉成資安工程師,暫時不寫前端了。

過了一年半之後,我過得還好嗎?我做得還好嗎?想說來寫篇文章更新一下近況,也順便記錄我這一年之間到底做了哪些事情。

工作與團隊

因為公司內部團隊轉調都是同等級轉調居多,而我之前在公司內部是 Principal Engineer,所以轉過去資安團隊以後也是這個身份,成為了空降的小主管。

說實在的,如果要論在資安業界的經歷的話,我是絕對比不上其他團隊成員,而且剛轉去的時候有許多名詞我根本沒聽過。既然這邊需要時間磨練,一時半刻沒辦法給什麼幫助,就只能想辦法從其他地方下手。

例如說帶進一些我親身經歷過以後覺得不錯的制度,像是每週開個半小時至一小時的分享會,讓團隊成員彼此分享一下這週看到的新東西或是工作上發現的有趣之處,對整個團隊其實滿有幫助的,可以互相交流一些想法與知識。

同時,也希望能利用這個 team lead 的身份解決團隊對外溝通的一些問題,例如說管道統一,盡量不再讓其他團隊直接去對到團隊成員,而是先有個統一的窗口(但這個很難做好就是了)。

除此之外,當進入到一個新團隊的時候,其實有不少事情可以做,例如說:

  1. 盤點目前有的資源與文件
  2. 整理並撰寫出缺少的文件(例如說 on-boarding guide 或是一些流程的制定)
  3. 協助找出團隊目前碰到的問題,以及想個解法

團隊要有目標,而且成員要知道這個目標,才能往同樣的方向前進。在當時我有訂了幾個目標,例如說有部分時間可以做自己的研究,想做什麼都可以,然後也鼓勵大家複習一下現有的東西並寫寫心得之類的。

不過在團隊管理這一塊,我一直覺得在「管事」這一塊還行,「管人」就真的很難,管人我指的是你可能需要給他建議,需要幫助他在職涯上能夠成長,這一塊真的難,尤其是你沒有很熟悉這個領域的時候。

接著來談一下這年在技術上有關的進展好了。

Bug Bounty

有不少公司有 Bug Bounty Program,簡單來說就是找到漏洞就能夠拿獎金,獎金多寡通常都取決於公司的規模以及漏洞的嚴重程度,例如說一個 Chrome 的高風險漏洞可能就值個幾十萬台幣之類的。

因為自覺能力不足,所以在選擇目標的時候我先選比較冷門的,感覺機會比較多。因緣際會之下選了 Matters 這個平台,除了冷門以外,它的原始碼都有公開,對我來說會比較擅長一點。

補充一下,我覺得有當過工程師的如果轉去做資安,優勢之一大概就是看 code 可能會比較快,也比較知道整體在幹嘛。例如說我看 React 專案就知道哪邊是在做什麼,然後哪邊可能比較會有漏洞之類的,算是一個小優勢。

在 Matters 上面總共找到了 5 個洞,拿到了大概 16k 台幣的獎金 :

  1. CORS 設定錯誤
  2. 文章 XSS
  3. 登入頁面 XSS
  4. GraphQL DoS
  5. Account Takeover(重設密碼機制有問題)

也根據這些洞寫了一些心得:

  1. 防止 XSS 可能比想像中困難
  2. 在做跳轉功能時應該注意的問題:Open Redirect
  3. 有缺陷的重設密碼機制如何演變成帳號奪取漏洞?以 Matters 為例

另一個我有在打的 Bug Bounty 是徵才網站 Glints,會發現他們有 bug bounty 是因為看了別人的 write-up。在 Glints 上面也找到了幾個漏洞,都是跟權限管理有關的,拿到了大概 30k 台幣的獎金,也寫了一篇心得:

  1. 關於我在 Glints 找到的高風險漏洞

至於其他在 HackerOne 或是 Intigriti 之類的 program,因為競爭者很多,我就沒有花太多心力下去看。

話說回來,「比較大的目標洞都被找完了」其實是個不健康的想法,因為大家都這樣想,所以你只要真的去找,就能領先別人一步。再者,有些網站就是因為太大,所以洞才比較好找,有些太小的網站因為功能太少反而沒有洞。

打 bug bounty 其實滿好玩的,不過比起黑箱測試,我還是比較喜歡白箱一點。黑箱測試很多地方就是去嘗試各種可能性,看會不會有一個中。例如說推特或是 Medium 每天都有一堆人在分享 bug bounty tips,說實在的有很多可能都是剛好某個網站有那個洞,而且站在開發者的角度來看,有些你真的會很懷疑背後是怎麼設計的,怎麼可以設計成這樣。

不過話又說回來,我覺得這些算是「必要的苦工」就是了,畢竟黑箱你也不知道背後怎麼寫的,只能每種可能性都試過一遍,說不定你參數裡面隨便帶個 ` ls` 就真的 command injection 了。

WordPress 套件漏洞

忘記從什麼時間點開始了,我突然注意到 WPScan 這個由官方經營的網站也可以回報漏洞,而 WordPress 的套件超級多,如果不限制使用人數的話,真的是隨便找都可以有洞。

而且,如同我前面說的,我比較喜歡在有 source code 的狀況下開始找洞,而 WordPress 每個套件你都可以找到 source code。

於是那陣子就花了大概兩三週的時間找一些洞,我專注的是一些跟 booking 相關的套件,例如說民宿的訂房套件啦,或是餐廳的訂位套件之類的,最後也認識了這整個生態系,覺得真的滿厲害的。

WordPress 的使用人數超多,套件也一大堆,成為了一整個生態系,例如說有些公司就是專門靠賣 WordPress 套件來賺錢,也有公司專門做 WordPress 的防禦,例如說:

  1. WPScan
  2. Wordfence
  3. patchstack

而這些網站也提供漏洞回報的服務,例如說 WPScan,你在網站上填入相關資訊以後,他們就會幫你聯絡廠商並申請 CVE 編號,也會在網站上留下紀錄。

另一間 patchstack 也是類似,而且為了搶先別人一步知道漏洞,還提供漏洞回報者一些獎勵。體驗過就會發現滿有趣的,光是 WordPress 就能養活不少公司。

在這段期間找到的洞基本上都是直接從 source code review 的角度下去看,畢竟 WordPress 跑起來很方便,套件要改也很方便,還滿好追蹤的,也有寫幾篇文章記錄一下細節:

  1. WordPress Plugin VikBooking <= 1.5.3 Unauthorized RCE 漏洞細節
  2. WordPress Plugin Amelia < 1.0.49 敏感資訊洩露漏洞細節

然後剛開始找的時候我有看到這篇很帥:A technique to semi-automatically discover new vulnerabilities in WordPress plugins,用半自動的方式去找出像是 XSS 或是 SQL injection 這樣的漏洞。

我本來想說可以試試看用 CodeQL 來做,但後來發現還不支援 PHP,殘念。

不過說實在的,我覺得用人工的方式去找這些小套件的洞其實不太划算,只是因為我很菜所以才這樣做,鍛鍊一下經歷。比較理想的方式應該是自動化或是半自動化去找,大一點的套件(一百萬個安裝以上的那種)才用人工去找,應該會是效益較高的做法。

工作上碰到的漏洞

除了上面這些,因為工作內容之一是滲透測試,所以也有找了不少洞,但畢竟工作上的東西都需要保密,細節就不多講了。

在工作上做這些也還是滿有趣的,畢竟面對的是真實世界的網站以及服務,打到洞的時候也滿有成就感的。

CTF

在這一年間玩得最認真也進步最快的,應該就是 CTF 了。不熟悉什麼是 CTF 的話,可以參考我之前寫過的:該如何入門 CTF 中的 Web 題?

之前本來打 CTF 都是自己當作興趣打打,反正也拿不了名次,只打自己喜歡的題目,想不出來就果斷放棄。

然而,在 2022 年 2 月的時候加入了一個國際戰隊叫做 Water Paddler,裡面有來自世界各地的好手,也跟著他們打了一些重大的賽事,像是 PlaidCTF 或是 GoogleCTF 之類的,以及最重要的 DEF CON CTF,也順利打進了決賽,去了拉斯維加斯一趟,心得可參考:DEF CON 30 CTF final 遊記(上)

以前一直聽說 DEF CON CTF 是 CTF 的最高殿堂,我就自動腦補成像是 IOI 或是 ICPC World Finals 之於打資訊競賽的人那樣。直到打了今年的 DEF CON CTF 以後,對它的想像有點破滅,理想很美好,現實很…tick 196。希望今年只是意外,明年會更好。

一個人打跟一群人打的感覺差滿多的,主要是會更有動力一點,例如說以前可能卡住就放棄,因為解出來也無關緊要,現在因為隊裡每個角色都有,所以解出一題就可能影響名次,變得更重要了。

再者,因為有隊友一起解,所以也可以一起討論或是一起卡關(?),就不會這麼容易放棄,而是會想要把它解開。不過伴隨而來的就是花更多時間在上面了,很多時候週末兩天就完全耗在 CTF 上面,所以我其實滿喜歡 24 小時的 CTF,因為可以留給我一天假日。

在 CTF 裡面也鍛鍊了不少技能,學到很多奇怪的知識。雖然說有些 CTF 中學到的東西在現實生活中打滲透測試時沒什麼幫助,因為要嘛觸發條件很複雜,要嘛攻擊手法比較不切實際,但我自己認為還是滿有趣的。

這連帶也影響到我的部落格中與 JavaScript 或是網頁相關的內容幾乎都停止更新了,取而代之的是一堆 CTF 的心得文章跟各種奇怪的知識。

但我認為有時候真的重要的反而不是那個洞,而是你找洞的過程。例如說有些洞你一定要去看原始碼才能找到,就間接培養了看原始碼的能力。像現在如果有些題目卡住,真的沒其他線索的話,我都會盡可能去找一下原始碼來看,看能不能找到一些蛛絲馬跡。

話說我在 Web 題中最有興趣的就是我的老本行了,與前端相關的,像是 XSS 或是 XSLeaks 相關的題目,都是我會花很多心力去解的題目。在這個領域的收穫很多,從另外一個角度認識了原本自以為熟悉的東西,真的可以看到很多不同的地方。

另外,被我認為的這領域的高手們追蹤成為了我的生活小確幸之一,會覺得自己好像又往前邁進了一步。若是想要再往前邁進一步的話,就是要能夠解出他們所出的難題,這個真的難。

感想

對自己轉職後這一年間的表現,大概打個 80 分,滲透測試也做了,bug bounty 也打了,找一些真實世界的漏洞也找了,CTF 也打出不錯的成績。

不過說實在的,似乎可以再更好一點,例如說找到一個比較多人使用的套件或軟體的洞,或是比較複雜、需要串來串去的洞,又或者是比較知名的網站的 bug bounty 之類的。

總覺得有點不上不下的,你要說表現得不好也沒有到不好,但要說表現得超好,也沒有到那種程度。

有些人會問我,是怎麼從前端工程師跨到資安領域去的,需要學習什麼額外的技能嗎?我只能說有很大一部分真的是天時地利人和,是因為我在的部門剛好做的比較多都是網站相關的服務,而網站相關的漏洞我本來就熟悉,所以沒有太多額外的東西需要學,基礎本來就不差,再加上也確實有透過一些課程或是 CTF 補足了一些相關知識。

如果今天我們公司做的是什麼 binary 相關的資安或是防毒軟體之類的,那我可能真的就要從頭開始學了,也很有可能因為技能組不符合而轉不過去。

而且在資安的領域上,我自己覺得目前也還沒踏出舒適圈,比較多都是停留在自己本來就熟悉的 Web,而且就算是 Web,也還是停在偏網頁前端的地方,那些原本就不熟的還是很不熟。

再者,資安這領域本來就很大,如果是攻擊的話,還有內網滲透也是很大的一塊,但這一塊我就幾乎是零知識。

理想狀態的話大概是每樣都要會一點,但某一個領域要鑽得特別深。可能就像是我在網站開發上的技能樹一樣,每個都會一點,但是前端鑽得特別深。

以上大概就是這一年間的近況,接下來更新一下最近發生的事情(其實原本八九月就把這篇寫完,但一直還沒發,所以現在回頭看也沒有這麼最近了)。

再次轉換團隊

在大概五月底的時候,我就跟公司提了我八月底要離職。就像以前我待過的每間公司一樣,要離職的話都會盡量提早,讓他們有多點時間能夠找人。當時提離職的原因,是因為我想去 D 社,一間專門做攻擊的頂尖公司。如果 D 社進不去,那我可能就會回去寫前端,然後找國外的工作。

會做這個決定,是因為我覺得比起當時的工作內容,我更喜歡專心做研究跟攻擊,而且既然都決定要這樣做了,就要去我覺得頂尖的公司,想去看看那邊的風景有什麼不同。而第二順位是想去日本工作,以我的資歷來說要去日本工作,找前端相關職缺的機會是最大的,所以才會說要跑回去寫前端。

後來也有跟 D 社稍微聊了一下,得到了許多回饋,也知道自己哪些技能還要補足,才能滿足入社的門檻(例如說考個 OSCP 之類的,補一些基礎技能跟內網滲透的東西)。原本是想照著這個學習路徑去補技能,但公司內部有另一個團隊對我有興趣,想跟我聊聊看。

原本我其實是沒什麼興趣的,因為那邊做的雖然也是資安,但並不是那種純粹攻擊的,而且面向差滿多的,但陸續聊了幾次以後,我開始覺得這是一個滿有趣的機會。

先講一下那個團隊是做什麼的,簡單來說就是做加密貨幣相關公司的保險,例如說交易所的保險。所以以我來說,平常的工作內容大概就是要去看每個客戶的系統架構以及針對錢包的解決方案,有沒有哪些技術上的問題,看一下在技術這一端的風險為何。

除此之外,也需要去研究一些技術相關的議題,並且在內部分享讓其他成員聽懂,例如說什麼是 HSM 啦,什麼是 MPC 啦,以及冷熱錢包的差異等等。

在保險知識上面也需要略懂略懂,因為風險可能會與保險的種類有關,例如說你保的是 A,就沒有涵蓋到 B 類型的風險,就可以整個不看。

雖然我打從一開始進的就是 OneDegree 這間保險公司,但在保險方面的知識其實沒有增加太多,充其量就是對不少專有名詞以及理賠的細節有更多認識,反倒是進去了這個 team 以後,才開始慢慢瞭解保險真正的核心。

除了保險以外,畢竟是與 web3 相關的研究,所以也會接觸到 smart contract 相關的東西,也有在看一些智慧合約相關的風險以及資安問題。

最後呢,在認真考慮了一週以及找了幾個同事聊聊之後,我在九月初已經正式轉入這個新成立的團隊:OneInfinity

咦?怎麼前面才說我想去專門做攻擊與研究的公司,到了這邊又不是這麼一回事了?對,因為「關於求職,連我自己都不知道我要什麼」,我以為我要的是 A,結果聊一聊發現 B 其實也不錯,滿有趣的,也可以是一個選項,我一直以來都是這個樣子的。

其實我自己也對這個轉換猶豫了一陣子,以興趣來說我覺得是符合的,也覺得可以學到不少新東西,但我擔心的是:「這樣是不是把職涯走歪了?」,換個方式問:「如果我離開這邊,我下一份工作該找什麼?」

前端的話,應該機會比較大,但可能已經一兩年沒寫了;資安的話,也才轉職一年,沒有什麼太大的成果。轉到這個新團隊以後,我自己覺得我的職涯就有了斷層。

但往好處想的話,可能就是證明了自己是那種「有能力解決問題」的人,前端也好,資安也好,保險或是做系統的技術評估也好,無論是什麼領域,反正球來就打,我都能做好。

不過,也要未來的公司懂得欣賞而且需要這種能力就是了,畢竟有的職位就是要找「某一項技能專精就好」,有的則是要找「有能力解決問題」的人。當然,如果能兩種加在一起是最好的。

總之呢,我後來還是選擇換團隊了,也就代表這些職涯規劃的東西我暫時沒那麼在乎,反正還年輕,跟著當時的興趣走就好了。就算未來想回前端或是資安,重新再磨練就是了。而且我本來就對自己的職涯沒有什麼明確規劃,一直都是抱持著且戰且走的心態,沒有想這麼多。

我沒有不喜歡前端,也沒有不喜歡資安,我到現在還是每個月至少會打一場 CTF,你看我上面貼的部落格截圖就知道了,也還是會關注前端的話題,關注各種社群。我不是那種「我終身的志向就是要做 ____」的人,我是隨著自己興趣所浮動的人,我是能在各種領域都能找到樂趣並投入的人,但儘管如此,我依然有著能把當前的工作內容做好的自信。

以上就是近況更新,大概就是轉換跑道到資安的這一年間做的東西,以及又換了一個新團隊的消息,或許半年或一年後,再來更新一下近況吧。