自我介紹

附註:我的語速算是比較快的

二到三分鐘自我介紹(實測:兩分鐘)


各位教授好,我是來自南山高中的林宥熙,接下來我會從三個面向介紹我自己:

首先是我踏入資訊領域的過程: 小學六年級時,我參加了 Scratch 語言的課程,在課程中,我被電腦邏輯化的運作方式深深吸引。國中時,我自學 python、kotlin 等程式語言,開啟了我的資訊人生。國三時,我對電腦如何運作產生好奇,接觸了作業系統這個主題。我閱讀了大量關於作業系統、計算機組織與架構等方面的書籍和資料,並花了兩年的時間嘗試製作自己的 MBR bootloader 和 kernel。

而我從資訊轉向資安的契機是 AIS3 EOF,從第一次的 65 名一路挑戰到了今年初決賽第八名,在這過程中不斷提升自己的專業技能,並從中發現找到漏洞的樂趣與成就感,但我也發現,現實世界的漏洞不如比賽中的那麼明顯,也更具挑戰性。這讓我開始投入現實世界的漏洞挖掘。到目前為止我共回報過 7 個 CVE 及一次金鑰外洩事件,現在也從 IoT 設備轉向開源專案。此外,我也參加了 AIS3,得到了最佳專題獎,並考取了 CND 和 security+ 證照,並參加臺灣好厲駭培訓、AIS3 Junior 營隊。

最後,我期望成為具有深厚學術背景的工程師,和專業的漏洞研究員。這是我經過長期探索後做出的選擇,我也希望能把興趣轉換為專業,並進入大學進行系統化的學習。我相信進入貴校就讀能夠讓我提升專業技能,並實現我的夢想,希望各位教授能給我這個機會。


二分鐘報告(實測:兩分鐘多一點點)

附註:因為台大是倒數第二間面試,所以我已經練到不用背都可以流暢的自我介紹。講稿只是附上來給有興趣的人參考的而已 附件連結


問答

準備方式

  • 自我介紹
    • 先擬好稿,去找輔導室的老師討論
    • 不要只去一次,改好再去,然後一直去,去到沒問題
  • 基本問答
    • 讀熟自己的備審資料,深入了解該學校和科系
  • 技術問答
    • 用自己的書審資料,列出要準備的項目
    • 猜測可能會備詢問的問題
    • 自己模擬回答(自問自答)
    • 也可以請 ChatGPT 出某些主題的題目

我準備的方向(基本問答)

  • 這部份就是看熟自己的書審資料就好,反正都自己寫的,也不太可能記不起來自己做過什麼事吧…
  • 需要熟悉的項目
    • 經歷、參加過的活動的細節
    • 讀書計畫
    • 個人特質
    • 喜歡該學校的什麼

我猜測的題目(基本問答)

  • 為什麼要特殊選才而不是學測
    • 學測比較專注在綜合能力的展現,特選反而比較看中特化能力。因為我將大部分時間與精力都投入研究資訊、資安領域,我認為展現我的特點比起學測更能讓教授看見我。
  • 你認為你比別人特殊在哪裡?為什麼我們要選你而不是選別人?
    • 第一個是探索 kernel 的經歷,這方面的學習者相對於在 userspace 寫程式的同學少很多;第二個是實務上的漏洞回報經驗,我觀察到的同學大都在打 CTF,這是我和他們學習方式比較不同的地方。
  • 學習資工未來是為了做什麼
    • 在自我介紹中有提及,我希望成為一位具有深厚學術背景的工程師和專業的漏洞研究員,我希望能夠能進入大學接受專業的學術培訓,以達成我的夢想。
  • 在校成績好嗎
    • 由於我把時間全部投入資訊和資安領域,因此我沒有時間考出非常好的成績,即便如此,我的分數都還是維持在 70 到 80 分。
  • (臺灣大學有被問到)怎麼分配學習的時間?學校的科目和自己的興趣如何取得平衡?
    • 由於我在國中一二年級就已經確定要就讀資訊工程學系,因此我把所有時間都投入在學習資訊和資安領域。
  • 擅長的學科
    • 由於從小學就接觸英文,因此英文是所有成績中最高的,每次考前花大約半小時,還是能夠維持約 80 到 90 分的成績。
  • 為什麼選資工系
    • 原先我是曲棍球選手,但是在國小升國中的時候接觸程式語言,從此就被電腦程式化且邏輯化的運作方式深深吸引。我也投入了大量時間研究這方面的知識,希望之後可以延續資訊的學習。
  • 覺得自己在同學中的定位
    • 我認為這屆特選生中,我的定位是中偏上,但是學海無涯,為最終還是要向學界和業界的成功人士為目標看齊。
  • 你能說明數理資優班跟其他班別的不同嗎
    • 在數學方面有讓我們參加競賽、理化方面國中有特別課程,主要還是以升學為主,因此在升學導向的數理科學班中選擇特殊選才比在其他班別中受到的反對更多。
  • (臺灣大學有被問到)在大學中如何保持成績
    • 我會均勻分配時間
  • (在臺灣大學有被問到)在回報 CVE 的過程中你學會了什麼
    • 回報成功的那刻帶給我極大的成就感,此外我學會了正式郵件的書寫方式,相信這能讓我在回報、溝通、商量三步驟上更順暢。
  • (忘了在哪間大學有被問到)你怎麼自學的
    • 大部分都是看書和網路資料,然後邊學邊做,把學到的東西具體化
  • (在台中教育大學有被問到)你覺得你的優勢是什麼
    • 我認為是我的好奇心、自學能力和執著的組合,讓我能夠探索未知領域、深入且持續的學習,失敗時也不會放棄,而是換一個學習方式。如果不是上述的優勢特質,我到現在都還不會有挖掘 0day 漏洞的經驗。
  • (在台中教育大學有提到)你覺得你的劣勢是什麼
    • 我認為是對技術的執著和不放棄,這個特質很像一把雙面刃,就算知識不夠,還是會持續讓我學習,例如我 kernel 專案做了兩年才放棄,就是這個原因
  • 你看過印象最深刻的書:
    • 啟蒙我的兩本書是逆向工程方面的 reverse engineering for beginners,以及作業系統的恐龍書
  • 用兩分鐘分享一個知識點
    • 打算分享 meltdown 和其使用的 flush+reload 的 side channel 利用方式
  • (在台中教育大學有被問到)有沒有要問我們的問題
    • 注意:這是因校而異的問題
    • 台中教育大學:在系網上查詢到資訊工程學系沒有教育學程,有沒有什麼方法可以選修嗎

我準備的方向(技術問答)

我的準備方向除了看自己書審資料之外,我平常有在看資安新聞的習慣也幫助了我不少(當然,新聞要篩選一些精華的然後整理出來)

  • 備審資料:統整出學過的東西,然後列出重點
    • Linux kernel
      • locking primitives(RCU, spinlock, mutex)/ variations
        • RCU: tree RCU, traditional RCU
        • mutex: optimistic spinning(MCS spinlock)
        • spinlock: preemptable spinlock
      • mm
        • slab / slob / slub
        • watermark / page cache /kswapd
      • CFS / O(1) / O(n) / RSDL(cfs 前身)
      • rt-linux patch
    • self-balanced binary search tree (concept + operations)
      • rb tree
      • AVL tree
    • bitwise operations
      • align up/down(加上非二的冪)
      • 統計有幾個 bit
    • meltdown / spectre / spectre variant 2
  • 新聞時事:平常就有在看新聞,我是找和自己研究方向相同的漏洞(記憶體漏洞)和一些技術上的突破
    • 重大漏洞:今年中旬的 regreSSHion 漏洞
      • 主要是有很多東西可以講、又很好講、深度又夠
    • 重大新聞:在高鐵上看到的 google blog
      • 就…剛好看到,超幸運

我猜測的題目(技術問答)

資安

  • 對藍隊的想法
    • 攻擊者只要找到一個點就可以危害整個網路的安全性,但是防禦者需要顧及包括人和技術的各種問題,才能防止攻擊者進入
  • (在台中教育大學有被問到)AI 在資安的可能性
    • NGFW 的應用
    • google oss-fuzz 在 openssl 的例子
  • (在臺灣大學有被問到)簡單介紹最近看到的重大漏洞和其成因
    • 三月的 openSSH 的 regreSSHion(race condition),攻擊者故意讓登入過期,觸發 signal handler,在該 signal handler 中呼叫了不能在 signal handler context 的 syslog 函式,其中會觸發 free 等 heap 操作,造成 memory corruption 圖片來源:維基百科

作業系統 / 計算機組織與架構

TODO:去把手寫筆記抄上來

  • cache 的種類?
    • full associative
      • 沒有特別的關聯關係,有地方就放
      • 搜尋 tag 花費的時間和能量很大
    • set associative
      • 最常見的那種,有很多 set 版本的 direct mapped cache
      • 可以減少 direct mapped 的 cache thrasing 問題
    • direct mapped
      • 只有一個 set,只要 index 有衝突就要強迫換出,效率很差
  • cache 的組織方式?
    • VIPT:physical tag 解決了 cache aliasing 的問題,而且查 index 不用通過 MMU 翻譯
    • VIVT:完全不用經過 MMU,但是會有 cache aliasing 的問題
    • PIPT:沒有 cache aliasing 問題,但是硬體設計比較複雜一點
  • PIVT 不存在的原因?
    • PIVT 沒有任何優點,而且還包括了所有的缺點,MMU 翻譯完之後才能找 index,還有 virtual tag 的別名問題
  • 快取的 LRU / random 演算法優缺點?
    • 通常對於不同等級的快取採混用的方式
  • pipeline
  • memory barrier
  • hazards
    • control hazard:分支預測,流水線泡沫化可以解決此問題
    • data hazard:data dependency,用到上一條指令的資料。解決方式是 register renaming 和 OOE,我有嘗試閱讀 tomasulo’s algorithm 在 IBM journal 上的論文,但是太抽象了,幾乎看不懂
    • structural hazard:硬體資源吃緊

TCP/IP 相關

附註:這邊只整理了我不太熟的協定和機制(需要一點記憶的)


TCP vs SCTP vs QUIC

功能TCPSCTPQUIC
transport layer?否(基於 UDP 的應用層協定)
connection-oriented?
reliability?
stream?single-streammulti-streammulti-stream
TLS?可選可選內建

TCP D-ACK vs S-ACK

功能Duplicate ACK(D-ACK)Selective ACK(S-ACK)
目的偵測單一 segment 丟包有效的處理多個 segment 丟包
原理對最後一個發送的 segemnt 發送重複的 ACK 封包在 ACK header 中紀錄收到但是順序亂掉的 segment
效率無法有效處理多個 segment 丟包有效的填補丟失的多個 segment
相容性廣泛支援比須傳輸雙方都支援
觸發機制在三次 D-ACK 後會觸發 fast retransmission直接觸發 fast retransmission(重送 S-ACK segment header 中紀錄的丟失 segment)

TCP TAO vs TFO

  • TAO: TCP accelerated open, 用於 T/TCP(TCP for transaction),簡化三項交握成兩向交握(ACK 在第一個資料封包裡面)
  • TFO:TCP fast open,用於 HTTP/2,用 TCP cookie 的概念簡化 opening 的流程

TCP fast retransmit vs fast recovery vs slow start vs congestion avoidance

階段slow startcongestion avoidancefast retransmitfast recovery
目的被動的偵測網路可用的頻寬控制 CWND 的成長速度,避免網路阻塞D-ACK 偵測到丟包後快速恢復正常傳輸讓 CWND 的大小能夠比 slow start 更快的恢復
機制從最小的 CWND 開始(通常是 1 * MSS),之後指數成長(每次都乘二)CWND 線性成長(每次加 1 * MSS)收到三個 D-ACK 封包之後,發送者會認定為丟包,接著馬上傳重新輸該 segmentSSHTHRESH 被設定為目前的 CWND 的一半;CWND 線性成長
結束條件CWND 達到 SSTHRESH(slow start threshold)或是遇到第一次丟包丟包或是 timeout丟包的 segment 被成功傳輸,fast retransmit 會進入 fast recovery 的階段
所有的丟包都被傳輸完成或是觸發 congestion avoidance

密碼學

附註:到最後還沒整理完就去面試了

  • phi 和費馬小定理
  • 米勒拉賓質數篩
  • RSA / DSA
  • DHKE
  • AES 四大步驟
    • byte substution
    • shift rows
    • mix column
    • add round key
  • DES

我被問到的題目(基本、技術問答)

台灣大學(也只有資安組)

  • (附註:順序是亂的,因為我忘記問題的順序了)

  • 我:教授好!

  • 我:(簡報不知道怎麼打開)

  • 教授:右下角的那個

  • 我:(點開選單)

  • 教授:對就是這個

  • 教授:最下面

  • 我:喔喔喔

  • 我:(開始報告兩分鐘)

  • 教授:(笑)林同學你的資安經歷看起來很豐富耶

  • 教授:你知道 kernel exploitation 嗎

  • 我:我正在往這方面發展,目前看過 kernel exploitation: attacking the core

  • (好像還有一個問題,但是我忘了問什麼了,只記得有講到 SMEP 而已)

  • 教授:請解釋一個 kernel 的防禦機制

  • 我:請問是軟體方面的還是硬體方面的

  • 教授:都可以

  • 我:(解釋 retpoline)

  • 教授:(笑)是那個 meltdown spectre 的 memory side channel 嗎

  • 我:是的,我有閱讀過論文,但是看不太懂

  • 教授:(看向另外一個教授)你有什麼問題想問嗎(不是在和我說話)

  • 教授:你可以解釋作業系統要怎麼優化才能讓讓應用程式的效率更好嗎

  • 我:請問是應用程式方面的還是作業系統方面的

  • 教授:作業系統方面的

  • 我:我不知道

  • (附註:後來想到可以講 irq 和 rt-linux 之類的)

  • 教授:解釋你挖到的漏洞和發現的過程

  • 我:哪個

  • 教授:cve-2024-45698 那個

  • 我:我先利用已經破解的韌體加密機制把韌體解密,用工具拆開之後分析檔案系統裡面的 http 服務,並且在裡面發現後門

  • (附註:好像講到 cve-2024-45697 了)

  • 教授:你用什麼回報漏洞的

  • 我:用 TWCERT 回報,最後也有得到回應

  • 教授:解釋一個漏洞的成因

  • 我:(說明 regreSSHion)

  • 教授:(問了一些 regreSSHion 的細節,我忘了,但是好像是 memory corruption 的討論)

  • 我:(回答)

  • 教授:你的成績普普通通,進入大學後你要怎麼分配時間

  • 我:因為我把所有時間都投入在學習資訊和資安,因此沒有投入時間在學校課業。不過我進入大學後會分配平均一點

  • 教授:你對開源專案的貢獻

  • 我:目前貢獻的只有一個,是發生在 toybox 的 wget 工具的一個漏洞,原因是因為 content-disposition 驗證不周,導致惡意的攻擊者可以任意寫入檔案,我這邊在 github 上發了 pull request,但是還沒有得到回應

  • 教授:(好像是問數學什麼的)

  • 我:目前我正在看的數學書是 Knuth 教授寫的 concrete mathematics

  • (好像還有說其他的但我忘記了)


清華大學(資安組)

  • (五分鐘報告)
  • 第一個教授
    • 教授:你會碰嗎
    • 我:會,大部分都有掌握到
    • 教授:那你有打 pwnable 嗎
    • 我:請問是 pwnable.tw 嗎
    • 教授:是
    • 我:沒有,這是我大學時期可以發展的部分
    • 教授:說一下 AIS3 EOF 決賽的分工
    • 我:我負責 pwn2own 題,但是失常,一直錯失明顯的漏洞,我就轉向由挖掘真實世界的漏洞學習
    • 教授:你有打 ctf 嗎
    • 我:有 我有在ctf time 上找比賽來打 但是都沒有紀錄名詞(附註:我用的都是 hi blah meh nah hello adsf 之類的名字)
    • 教授:有打過 picoctf 嗎
    • 我:請問是 picoctf 還是 pico gym
    • 教授:picoctf
    • 我:我只有打過 pico gym,那是我入門資安的時候學習的方式
    • 教授:請問你的漏洞是自己挖的嗎
    • 我:是的,全部都是我自己挖的
  • 第二個教授:問的好像是怎麼做 OS 的問題,但是我忘了
  • 第三個教授:問我證照的問題和之後有沒有打算再去考,但是我也忘了

台中教育大學(資安組)

  • B間(五分鐘):
    • 教授:自我介紹一分鐘
    • 我:(開始講)
    • 教授:你只有一分鐘喔,講重點就好
    • 我:鱷,好(繼續講一分鐘)
    • 教授:報了哪些學校
    • 我:全部可以投的都投了
    • 教授: 虫合(大概是這樣)
    • 教授:為什麼選中教大
    • 我:(講一些)
    • 教授:講了和沒講一樣(委婉的說)
    • 教授:之後進入學校想學什麼
    • 我:一些數學的東西,一些理論的東西,像是資料結構演算法之類的
    • 教授:什麼是資料結構,什麼是演算法 我:資料結構就是怎麼有效的儲存資料,演算法就是怎麼操作那些資料結構
    • 教授:(苦笑)有擦到邊啦
    • 教授:(問了一些關於我的專案的問題)
    • 我:(回答)
    • 教授:你說你寫 OS 失敗,有什麼計畫嗎
    • 我:正在嘗試學習 Linux kernel
    • 教授:喔喔 Linux kernel(笑)
  • A間(五分鐘):
    • 教授:兩分鐘自我介紹
    • 我:(講兩分鐘版本的自我介紹)
    • 教授:(問了一些關於我抓漏洞的問題)
    • 我:(回答)
    • 教授:你覺得寫程式可以和你現在研究的漏洞這部份結合嗎
    • 我:(用自己抓過的漏洞舉例) 教授:你有自己寫自動化工具抓漏洞嗎
    • 我:我有自己寫腳本掃 port 和 dump 整台伺服器的檔案下來分析
    • 教授:這不會有問題嗎?
    • 我:那是公開的伺服器,而且發現有金鑰在檔案中的時候我馬上回報,所以應該是沒有
    • 教授:那自動化抓漏洞的工具有自己寫過嗎
    • 我:我沒有這方面的經驗,但是我前幾天看新聞看到(講高鐵上滑手機看到的 新聞
    • 教授:最後給你三十秒加分
    • 我:(卡了兩三秒)(開始講自己的個人特質)

中興大學(資安組)

  • 教授:一分鐘自我介紹
  • 我:(自我介紹)
  • (附註:教授時間到了好像也沒打斷)
  • 教授:請解釋 sql injection
  • 我:攻擊者插入惡意的表達式到正常的表達式中
  • 教授:防禦方法?
  • 我:參數化和特殊字元檢查
  • 教授:可不可以更具體化一點
  • 我:用百分比的
  • 教授:(結束這個話題)
  • 教授:請問什麼是 super copy
  • 我:可以請教授給更多資訊嗎
  • 教授:就是 scp
  • 我:應該是 secure copy 吧?用 SSH 協定加密檔案傳輸的流量
  • 教授:你不是說你會 kernel 嗎?看來你這部份的知識還要加強
  • 我:謝謝教授,我會再努力
  • 教授:你最會的程式語言
  • 我:c 和 x86 組合語言
  • 教授:(驚)
  • (全部)教授:(笑)
  • 教授:(問備審的問題,主要是漏洞挖掘的部份;附註:我有點忘了,只記得這部份佔的篇幅還滿多的)
  • 我:(回答)

嘉義大學(資安組)

  • 第一間

    • 教授:請你自我介紹(沒說多久)
    • 我:(自我介紹大概兩分鐘)
    • 教授:你說你學 kernel 怎樣的,這部份很少人學,為什麼會接觸
    • 我:網路上看到然後產生興趣就學了(簡略是這樣)
    • 教授:介紹你的作業系統的實際作品
    • 我:(介紹)
    • 教授:當過的幹部
    • 我:國中當過班長
    • 教授:你講話會什麼會卡,是太緊張嗎
    • 我:本來就會了,有在做語言治療
  • 第二間

    • 教授:一分鐘介紹你資安的經歷
    • 我:(介紹)
    • 教授:你覺得 myfirst ctf 和 eof 是不一樣的嗎
    • 我:難易度
    • 教授:AIS3 專案做什麼
    • 我:挖 router 0day,(介紹分工,自己擔任輔助角色的過程)
    • 教授:漏洞是不是你自己挖的
    • 我:是阿
    • 教授:介紹你挖掘的漏洞
    • 我:(完整的介紹 cve-2024-6045,從破解韌體加密的機制開始說到如何逆向然後利用該後門)
    • 教授:你有沒有接觸過記憶體問題
    • 我:請問是記憶體鑑識還是 memory corruption
    • 教授:都可以
    • 我:我不會記憶體鑑識,但是我對記憶體漏洞有了解
    • 教授:解釋 shellcode 和其防禦方式
    • 我:(解釋 NX 和 alphanumeric shellcode 以及 shellcode 的截斷問題)
    • 教授:為什麼你講話會這樣
    • 我:本來就這樣,有在做語言治療
    • 教授:(笑)我們都很友善,不用緊張

成功大學(乙組)

  • 上機考,沒有面試
    • 主要是考怎麼用 ROS2, rviz2, zeno, gitlab cicd pipeline 之類的,後面有一些演算法(這次是考基因演算法的填空),但是還沒寫到就時間到了
    • 分成兩大題,兩大題都有關聯,要先做完前面的後面的才做得出來(好像是)