English

首先,感謝 Orange 讓我有這個機會到 Las Vegas 參加 Black Hat USA 2021,沒有這張票就不會有這篇心得。

這篇文章將包含我在 Black Hat USA 2021 兩天的感想及技術議題分享。

我住的飯店跟 Conference 的會場是連在一起的,從房間到會場走路10分鐘,考量到每個 presentation 之間都會有20分鐘的空擋,這樣的距離非常方便我來回房間跟會場去做實體議程跟線上議程的切換。

Pic 1飯店窗外景色

Pic 2樓下的賭場,前往會場的必經之路

Pic 4會場外的泳池,與室內形成強烈對比

Pic 10講廳外的寬敞走道


下面照時間列出我聽到的議程

Day 1

Keynote: Supply Chain Infections and the Future of Contactless Deliveries

9:00 ~ 10:00

Speaker: Matt Tait
Track: Keynote
Format: Briefings

首先由 Black Hat 及 DEF CON 的創辦人 Jeff Moss 做開場,而後由 Matt Tait 來做分享,基本上分享的是很大方向的東西,廠商要更小心之類的宣導。

Pic 3創辦人Jeff Moss開場


A New Class of DNS Vulnerabilities Affecting Many DNS-as-Service Platforms

10:20 ~ 11:00

Speaker: Shir Tamari, Ami Luttwak
Tracks: CorpSec, Cloud & Platform Security
Format: Briefings

這篇是 Wiz 所做的分享,主要是提到了在 DNS as a Service 的使用下,可能產生的 Hijacking 問題,以 AWS 的 Route53 來作為例子。

他們發現,在 AWS 的 Route53 服務中,可以註冊 Route53 Name Server 的 domain,e.g., ns-852.awsdns-42.net。註冊時,當這個 domain 跟隨機分配到的 Name Server 相同,並且讓這個 domain 的 A record 指向自己的 server ,就會在自己的 server 上截到很多 Dynamic DNS 的流量。

在 Dynamic DNS 中,Internal Primary Master Server 負責儲存內網中各電腦對應的 IP ,並接受各電腦傳來的 Update Query 來變更各電腦對應的 IP,各電腦藉由向 Internal Recursive DNS Server 取得 SOA record 來找到 Internal Primary Master Server 在哪裡。

當我們使用 Route53 並且 Internal Recursive DNS Server 沒有設定好,就可能造成電腦以為 Router53 Name Server 的 A record 對應的 IP 是 Master Server 的 IP,並對它傳送 Update Query。從那些封包中,可以得到這間公司所擁有的 IP、實體位置,甚至內網資訊電腦名稱等等。

這當中並沒有用到什麼艱深的技術,算是個「喔~有這種事」的分享。

附上他們在 DEF CON 講的影片


Breaking the Isolation: Cross-Account AWS Vulnerabilities

11:20 ~ 12:00

Speaker: Shir Tamari, Ami Luttwak
Tracks: Cloud & Platform Security, AppSec
Format: Briefings

這篇一樣是 Wiz 所做的分享,為 AWS 三個服務中的漏洞

  • AWS CloudTrail
  • AWS Config (漏洞原理同 CloudTrail)
  • AWS Serverless Application Repository

首先是 AWS CloudTrail,他可以做紀錄,輸出 log,並放到 S3 bucket 裡。而當中的漏洞是在輸出的時候,可以設定目的地的 prefix,假設今天 Account ID 為 123456789012 的用戶有個 bucket victims-cloudtrail-bucket,那目的地預設會是 victims-cloudtrail-bucket/AWSLogs/123456789012,如果加上 prefix abc 的話,他會把路徑設為 victims-cloudtrail-bucket/abc/AWSLogs/123456789012

如果今天 attacker 的 ID 是 133713371337,那他想寫入 victims-cloudtrail-bucket,他沒辦法直接用 victims-cloudtrail-bucket/AWSLogs/133713371337 作為路徑寫入,會被路徑檢查擋下來(沒有 AWSLogs/123456789012),但如果我們在 prefix 加上 AWSLogs/123456789012,使目的地成為 victims-cloudtrail-bucket/AWSLogs/123456789012/AWSLogs/133713371337,就可以通過檢查寫入。

AWS Config 也是跟 AWS CloudTrail 使用一樣的模式跟 S3 bucket 互動,有一樣原理的漏洞。

最後是 AWS Serverless Application Repository,他可以從 S3 bucket 中取得 App image 跟 resource,令人意外的是,他不會檢查對方是否是這個 bucket 的擁有者,所以任何人只要知道這個 Repository bucket,並且 bucket 的 Actions 有 GetObject,那任何人都可以從這個 Repository bucket 任意讀取資料。

這些手法並沒有多複雜,我覺得困難的部分反而是 AWS 的服務超過200種,再加上他們之間的搭配組合,讓這些漏洞不是那麼容易被找到。


All-Purpose Remote Access Trojan

12:00 ~ 13:00

Speaker: David Hunt, Alex Manners
Tracks: Malware Offense
Format: Arsenal

在 Black Hat 的 Arsenal 中,每位講者會介紹他們開發的開源工具,只要該時間沒有任何 Briefing,我就會選擇來聽 Arsenal。

這場介紹的是 Pneuma,他是一個 agent,可以配合 C2 來使用

講者示範的 C2 是 Prelude Operator。Pneuma 支援多種協議(gRPC, TCP, UDP and HTTP)及多種作業系統,因為是開源工具,所以使用者可以很容易去對 Pneuma 進行擴充,像是增加自訂的指令等等。


Another Road Leads to the Host: From a Message to VM Escape on Nvidia vGPU

13:30 ~ 14:10

Speaker: Wenxiang Qian
Tracks: Exploit Development, Network Security
Format: Briefings

這篇是我滿期待的一篇,主題是藉由 Nvidia 的 vGPU 來從虛擬環境逃逸,每一次的逃逸議程都讓我很驚艷。

nvidia-vgpu-mgr 跑在 Host machine 上,他負責處理 Guest machine 傳來的 vRPC message。

vPRC command 有很多種,當中 0x35 – rpc_update_pde_2 可以用來洩漏 stack pointer 來繞過 ASLR。

處理 0x1A - rpc_dma_control 時會將 data 從 message 複製到記憶體,在複製 data 時缺乏邊界限制可以做到 Heap Overflow,被 overflow 的區域之後會被做為參數執行 set_item_value,當中會有 link list 的 unlink 跟 mmap。

在 unlink 中,我們可以把 mmap 的 GOT 寫成 ROP gadget 的 address,那後面執行 mmap 就可以做到 RCE。

主體已經出來了,後續就是講者碰上的問題,stack 上沒有好用的 gadget,所以藉由 0x3C - rpc_get_engine_utilization 將 gadget 放到 stack 上。

在複製 data 的時候會跳著複製,造成 heap 上有很多 4 bytes 的 0,可以藉由將他們當成 0、作為 address 的高位 4 bytes 、或是 pop 掉等方式來解決。

綜合來說我覺得利用 vRPC message 組成 exploit chain 真的是很有趣,我上面只是大概提些重點,實際看講者的投影片就會發現這個 exploit 真的很費功夫。


Diving Into Spooler: Discovering LPE and RCE Vulnerabilities in Windows Printer

14:30 ~ 15:00

Speaker: Zhiniang Peng, XueFeng Li, Lewis Lee
Tracks: Applied Security, Exploit Development
Format: Briefings

這是由 Sangfor 所帶來的議程,我會想聽這個議程主要是最近的 PrintNightmare 就是從 Printer Spooler 出來的漏洞,我想對這支程式有多一點了解。

講者從 CVE-2020-1048 開始介紹,提到了這兩年 Printer Spooler 大大小小的漏洞,從提權後的任意寫、常見的 bypass with symbolic link、UNC path、NTFS Alternate Data Stream,到修補過後造成新的漏洞 - 提權後任意刪除,這之間補了又補,補了又補。

再到今年的 memory corruption,多個 RCE,最後一舉讓 PrintNightmare 奪下 Pwnie Awards 的「年度最慘漏洞」、「年度最佳伺服器漏洞」入圍,CVE-2020-1048 及 CVE-2020-1337 被「年度最佳提權」入圍,CVE-2021-1675 被「年度最佳伺服器漏洞」入圍,只能說真的是佔盡版面,現在想來,再加上 Exchange Server 等等,微軟是不是在資安圈偷偷置入啊XD,這效果有達到,但成果還真不好說

有這麼多補不完的漏洞,我覺得講者最後的總結很有道理
“Disabled your spooler, if you don’t need it."


Put in One Bug and Pop Out More: An Effective Way of Bug Hunting in Chrome

15:20 ~ 16:00

Speaker: Leecraso, Rong Jian, Guang Gong
Tracks: AppSec, Exploit Development
Format: Briefings

這篇是在介紹如何藉由觀察 Chrome 以前的漏洞去尋找新的漏洞,每項都寫 pattern 給 CodeQL,進而找到更多相似的漏洞。

總共可以分成三個部分

  1. 參考以前的漏洞,發現 RenderFrameHost pointer 容易造成 UAF,並且加上 Base class 不屬於 FrameServiceBase 諸如此類會把 RenderFrameHost pointer 清乾淨的條件,來減少 false positive
  2. 接下來就是要做點變化,雖然有些 pointer 在一些 conditional branch 可能就被釋放了,但之後還是被 Access,這樣的情況下所形成的 UAF
  3. 最後是 WeakPtr Optimization。如果沒有做 null test,造成 null pointer dereference,通常這應該會造成程式 crash,但只要在編譯的時候有進行優化,就有機會讓這個程式不 crash 繼續跑下去,進而形成 UAF。

總結來說,分析之後寫出 pattern,再使用 CodeQL 是個很有效率尋找漏洞的方式。


Locknote: Conclusions and Key Takeaways from Day 1

16:20 ~ 17:00

Speaker: Jeff Moss, Stephanie Domas, Alex Ionescu, Kymberlee Price, Chris Rohlf
Track: Keynote
Format: Briefings

這個議程是讓來賓跟主持人在台上聊天,像是一種 Live Talk Show 的感覺。這也不是美國獨有,我在台灣的資安 Conference 也看過一樣的議程方式。

我最印象深刻的是,台上幾乎人手一瓶啤酒,我個人是滿喜歡這種感覺的,一些交流、一些討論、道出些想法,配上啤酒,夠 Chill ~

Pic 5Jeff Moss 一手拿流程一手拿啤酒,coooool


Pwnie Awards

17:30 ~ 18:30

Pic 6頒獎典禮現場

到現場來的人其實不多,一來是網頁上這個活動的資訊藏得很隱密,二來是還有很多其他歡樂的喝酒社交活動。

頒獎人在獎項之間都有準備段子,頒獎人也不停更換,真的有大型頒獎典禮的感覺。

我個人覺得 Pwnie Awards 有趣的地方就是他有「年度最爛廠商回應」, 「年度最慘漏洞」等獎項,讓大家知道過去一年資安界又發生了什麼令人傻眼的事,也是一個提醒廠商的機會,可能哪裡做得不是很好或是一些地方以後可以多注意,畢竟漏洞不應該是駭客單方面的事情,廠商也應該要盡力配合,將傷害降到最低。

另外,我覺得這些獎除了給予入圍及得獎的人肯定之外,還有一個優點是能夠半激勵地去讓想參與的人學習更多東西。就像是金曲獎的「年度歌曲獎」,如果你對這個獎很有興趣,那你應該會在入圍名單出來之後,就去把每首歌至少聽一遍,不然頒獎當天,某首歌得獎了,你沒有辦法去激盪出更多想法,「啊其實我更喜歡另一首,沒得獎好可惜」、「沒想到是這首歌得獎啊,這首背後的創作理念的確是很有意思」,同理,當入圍的研究擺在眼前,你想參與這個頒獎典禮,那去大概了解每個入圍者的研究就是一件不得不做的事,不然到時候你只會看到一堆獎項及對應得獎者,但是卻對文字背後的意涵及內容一無所知。

附上 Pwnie Awards 的網站,其中每個入圍者幾乎都有附上外部連結說明。

Pic 7最後,恭喜 Orange 榮獲年度最佳伺服器漏洞獎!!


Day 2

Business Hall

Business Hall 是廠商擺攤的地方,位於 Mandalay Bay Convention Center 的一樓(題外話,議程主要是在二三樓),第一天跟第二天都有,空間很大。正好我今年有去 CyberSec ,可以直接做對比,最明顯的差異就是他們現場有食物、酒、跟現場演奏,營造一種比較輕鬆隨性的感覺,算是一種文化差異吧。

Pic 11擺攤現場

Pic 12很多柱子邊都有酒吧

Pic 13CrowdStrike 搬出了三隻大型公仔

Pic 14現場演奏

Pic 15另外中間也有很多可以拿食物的地方


Turing in a Box: Applying Artificial Intelligence as a Service to Targeted Phishing and Defending Against AI Generated Attacks

10:20 ~ 11:00

Speaker: Eugene Lim, Glenice Tan, Tan Kee Hock, Timothy Lee
Tracks: Human Factors
Format: Briefings

Pic 8來自新加坡 Government Technology Agency 的研究

這篇是新加坡所帶來的運用 AI as a Service(AIaaS)去做釣魚信件以及如何防範,我會選擇聽這個是因為我想更新一下現在 AI 在資安上可以做到什麼地步了。

當中提到了 OpenAI 的 GPT-3 API 不只能力優秀,還可以製造一個 “text in, text out” 方便使用的環境,只要給 AI 目標的基本資料,他就能產生一封針對目標的釣魚信件。雖然信件還是需要人工檢查及小幅度修改,但是我相信之後一定會更好,好到不用人進行任何修改的完全 AI 自動化。

後半段則提到了雖然 AI 釣魚信件的成效很好,自動偵測基本上還是很困難,但也不是完全沒辦法應對。可以藉由計算詞的順序、分佈的複雜度、以及人類是否很常使用該詞來建立模型,推算出該信件是不是 AI 自動生成的,不過成效無法保證,面對不同的釣魚信件 model 會有不同的結果。

最後提到,OpenAI 目前有在管制 GPT-3 API 的使用目的,他會對你做的事情做檢查及審核,不會讓你拿去進行惡意的應用,不過隨著 AIaaS 的供應商越來越多,到時候門檻應該就會放低並且很難真的去審核每個使用者到底用 AIaaS 做什麼,惡意的利用也會隨之而來。

我發現資安好像就是這樣,隨著進攻方的增強,防守方也會增強,然後進攻方再增強,但防守方還是會追上,因為雙方接收到的科技跟技術是一樣的。漏洞也是一樣,你現在的攻擊手法之後會被 patch 擋住,而即使你用 patch 補上了,其他地方或是以後增加的新功能還是會再出現漏洞。

不斷學習、追求進步,共勉之XD


I’m a Hacker Get Me Out of Here! Breaking Network Segregation Using Esoteric Command & Control Channels

11:20 ~ 12:00

Speaker: James Coote, Alfie Champion
Tracks: Network Security, Defense
Format: Briefings

這篇是由 F-Secure 帶來的議程,主旨是當今天 C2 跟 Client 之間沒有直接的網路連線時,還能用哪些方法去運行 C2。

當中使用的工具是 F-Secure 開發的開源軟體,C3

並且作者也附上了兩篇部落格供參考

  1. Using and detecting C2 printer pivoting
  2. Attack Detection Fundamentals: Discovery and Lateral Movement - Lab #3

整篇議程總共提供了四種方式作為溝通的媒介,分別是

  1. vCenter 控制的 VMWare
  2. 影印機
  3. RDP
  4. LDAP

講者也詳細說明了使用上述四種方式的情況、限制、背後原理,以及該如何去實作。

從哪些 log、載入的模組、跟什麼樣的連線出現的時候可能代表著這樣的手法正在被進行。

最後結尾,講者提到了要去注意,當我們想隔離出一個環境的時候,是不是真的做到完全隔離了,還是他連上的影印機可能會是一條不容易被注意到的通訊路徑。

我們要去思考該如何去偵測這樣的情況,以及是否可以再進一步做到真的完全隔離。

C2 也不是一定就要拿來做壞事,今天我可能只是想控制一台沒有直接連線的機器,那 C3 跟這篇裡面介紹的內容可能就可以作為我以後部署的參考。


reNgine: An Automated Reconnaissance Framework

12:00 ~ 13:00

Speaker: Yogesh Ojha
Tracks: Web AppSec
Format: Arsenal

這篇是 Arsenal,介紹的是開源軟體 reNgine。如標題所述,他是一個自動化的 Recon 模組,可以搭配很多其他的工具去做使用。

它標榜的是可以輕鬆做 filter,找出關聯,比方說我想找所有開著 port 22 的 subdomain,或是想找所有使用 Apache 的 subdomain,他都可以瞬間列出來。另外他也有很不錯的視覺化模組,可以將整個目標以很詳細的樹狀圖展示出來。

它也有自訂 Interesting tag 的功能,如果搜尋結果符合你的設定就會貼上 Interesting tag,並且可以設定只要出現符合的結果就傳送通知給使用者,目前支援 slack, discord, telegram。

另外,他還有歷史比對功能。對於同一個目標,它可以比對上次的結果跟這次的結果之間的差異,讓使用者一目了然兩次掃瞄之間發生了什麼變化。它裡面也有支援 proxy,輪流發送請求,防止同ㄧ IP 短時間發送過多請求而被 ban。

我覺得是個很好的工具,做 recon 最怕的就是當目標很大,難免會產生很多資料,如果有個工具能夠協助將資料整理好,並可以隨時接受多種 filter,給予清楚的視覺化效果,那肯定非常方便,之後會去試用看看。


HTTP/2: The Sequel is Always Worse

13:30 ~ 14:10

Speaker: James Kettle
Tracks: AppSec, Cloud & Platform Security
Format: Briefings

這個議程是我最期待的之一,由 PortSwigger 的 James Kettle 所帶來的 HTTP/2 漏洞。

總結來說,就是 HTTP/2 在後端降級產生很多操作空間。請求被降級後,基本上 HTTP/2 裡能得到的安全性也就跟著一起被拋棄了

如作者所說,如果沒有降級,那基本上當中提到的絕大多數漏洞都不會產生(除了 URL prefix injection)。

在此附上 PortSwigger 的 Blog 連結給各位參考,當中附有講者的影片。

另外,在發表的當下,PortSwigger 也釋出了 Burp Suite 2021.8,增加了很多 HTTP/2 的輔助功能,有興趣的可以去玩玩看

P.S. 審稿的當下已經來到 Burp Suite 2021.8.1


Can You Hear Me Now? Remote Eavesdropping Vulnerabilities in Mobile Messaging Applications

14:30 ~ 15:00

Speaker: Natalie Silvanovich
Tracks: Mobile, AppSec
Format: Briefings

這個議程是由 Google 帶來的跟 calling state machine 有關的漏洞。

講者分析了多種通訊軟體,並在當中找到了很多 calling state machine 相關的漏洞,包含 Signal, Facebook Messenger, JioChat, Mocha 以及 Goolge Duo,導致在 callee 沒有任何行動的情況下,通訊軟體可以自己接通通話。

漏洞的成因在於 caller 跟 callee 之間建立通話之前,其實會互相交換很多訊息,有的中間有伺服器介入,有的沒有。當我們今天擾亂了一些訊息的傳送順序,或是改變了訊息的傳送方向(callee 傳給 caller 的訊息改由 caller 傳給 callee),就可能導致 state machine 以為前置作業都完成了而直接開始通訊。

任誰應該都不會想要自己的手機突然打開視訊或是開啟麥克風將聲音傳到另外一端吧?

作者最後給出結論是,開發者應該要在開發 calling state machine 上更加小心,防範各種意料之外的狀況。另外,這次的研究也只限於一個人打給另一個人,並沒有包含群組通話,也許明年就能見到群組通話的漏洞發表。


ProxyLogon is Just the Tip of the Iceberg: A New Attack Surface on Microsoft Exchange Server!

15:20 ~ 16:00

Speaker: Orange Tsai
Tracks: AppSec, Exploit Development
Format: Briefings

最後一樣是我最期待之一,以 Orange 的 Microsoft Exchange Server 系列來做結尾,從跨年當天的 win 惹 到後來持續好幾個月,基本上有在關注資安的人應該沒有人沒聽過,只是不清楚詳細的技術細節。

這個議程包含了 ProxyLogon, ProxyOracle, 和 ProxyShell,一次完整聽完,非常推薦。

在此附上 Devcore 的 Blog ,內有影片跟投影片連結,請自行服用。


補充

Timeless Timing Attacks

Speaker: Tom Van Goethem, Mathy Vanhoef
Tracks: Network Security, AppSec
Format: Briefings

這篇是 Black Hat USA 2021 結束之後我另外找時間去補看的,傳統的 timing attack 會受到網路之間的傳輸影響,很難真的在現實生活中實行,router 之間的一點 delay 都可能會造成極大的誤差。

本篇提出了 Timeless timing attack 的手法,實行上有三個條件:

  1. 將複數個請求放入同一個封包 (可以用 HTTP/2 等方式達成)
  2. 目標可以同時處理複數個請求
  3. 目標在處理完請求後不會任意無故更動回應的順序

跟三種攻擊情況

  1. 直接攻擊
  2. 跨站攻擊
  3. Wi-Fi 認證

所以基本原理就是,將複數個請求放入同一個封包,一個是 test,一個是 baseline,第一個請求是 test,第二個請求是 baseline,他們會同時抵達目標,並被同時處理,之後去看他們的回應順序有沒有被改變,如果 test 的請求回應跑到 baseline 的後面,那就高機率表示 test 的值被多做了一些檢查。

運用這種方式,就能避開傳統 timing attack 所碰上的問題。

附上 DEF CON 的影片以及原本是 private,但講完之後公開的 Hackerone Report


後記

以上的 Briefings 大多都有提供投影片,可以去 Black Hat USA 2021 的網站上下載。

有些人可能會好奇怎麼沒有順便去 DEF CON,因為 DEF CON 要求 fully vaccinated,我不符合,因此沒有去,希望以後有機會。

P.S. 他們真的有檢查,我有看 DEF CON 的線上閉幕,統計有25個人因為沒有 fully vaccinated 被趕走

說真的,我完全沒想到自己有機會可以來參加 Black Hat USA 2021,台灣有太多厲害的資安專長學生,雖然我很認真的去做準備(比申請學校認真10倍XDD),但也只是當投個希望而已,得知能來的當下直接跳起來。

這次的收穫真的很多我不知道怎麼形容,只能說有機會的話來這邊看一看、走一走,也許你就能知道我想表達什麼。

感謝所有的研究員以及每一位辛苦的工作人員。

對這篇 blog 有任何疑問都可以找我

Pic 16