全球獨家視訊:特工隊 - 動態修改計算機系統呼叫

rlk8888發表於2022-03-30

我們最近錄製一期特工隊節目,全球獨家的視訊節目,全程2.5小時,這個視訊節目是圍繞這樣一個實驗來進行的。我們在這期視訊節目中重點介紹:

  1. ARM64體系結構中的記憶體管理

  2. ARM64的頁表管理

  3. ARM64 的Linux核心如何walk through頁表

  4. ARM64的Linux核心系統呼叫是如何實現的?

  5. 如何面對當機?本實驗講會面臨4次不同的當機。

  6. 詳細分析當機的log

  7. 利用kdump來手撕當機問題


笨叔保證,在全球的視訊網站和培訓機構上也找不到這樣有深度和廣度的視訊,只有笨叔的旗艦篇視訊有喲!喜歡的趕緊點本文最後面的“閱讀原文”來訂閱吧。


這個實驗是醬楊紫的:

假設你是一名安全人員,正在執行一項祕密任務,這項祕密任務就是要深入到敵軍的作戰指揮中心的計算機裡安裝一個竊聽的程式,簡單來說就是把計算機的系統呼叫動態替換掉。假設你的同事已經幫你把敵軍計算機的 root 密碼給破解了,接下來就看你如何動態修改系統呼叫了。 注意:編寫的核心模組不能讓敵軍的計算機重啟、 crash/panic ,否則就暴露行蹤,祕密行動失敗。

1 )編寫一個核心模組。

實驗環境: ARM64 體系結構,Linux 5.0 核心

 

要求替換系統呼叫表(sys_call_table )中某一項系統呼叫,替換成自己編寫的系統呼叫處理函式(例如:my_new_syscall() ),在新的系統呼叫函式中列印一句“hello, I have hacked this syscall , 然後再呼叫回原來的系統呼叫處理函式。

比如以ioctl 系統呼叫為例,它在系統呼叫表中的編號就是__NR_ioctl 。那麼需要修改系統呼叫表sys_call_table[__NR_ioctl] 的指向,讓其指向my_new_syscall() 函式,然後在my_new_syscall() 函式中列印一句話,呼叫原來的sys_call_table[__NR_ioctl] 指向的處理函式。

2 )解除安裝模組時候把系統呼叫表恢復原樣。

3 )用clone 系統呼叫來驗證你的驅動,clone 系統呼叫號是__NR_clone

 


這個實驗來自一個實際的專案,最開始是笨叔的VIP微信群裡一個朋友在國慶節期間問笨叔的一個問題。他們說這個問題困擾了他們好久,他們的實驗平臺是某鵬的ARM64伺服器晶片,怎麼折騰總是當機,於是救助與笨叔。笨叔看了看他們的程式碼,喝了一杯二鍋頭的時間就把這個問題fix了。後來,笨叔覺得這個問題對學習linux驅動和核心的小夥伴很有幫助,特別是對加深理解ARM64的體系結構,ARM64記憶體管理、系統呼叫、如何面對當機等問題,於是,笨叔在那個VIP朋友的問題基礎上做了修改和抽象,做成一個實驗share給大家。


笨叔讓 小笨笨同學來做這個實驗。

風華正茂的小笨笨同學



笨叔先給小笨笨介紹一些ARM64體系結構的知識。

圖片

圖片

圖片

圖片

圖片

圖片


小笨笨開始動手寫核心模組了,花了一個下午,寫好了一個驅動模組。

圖片


但是呢,這個驅動一跑起來就當機,而且整個過程會有4次不同的當機。



第一次當機,小笨笨同學就懵了。。。

圖片


在笨叔的指點下,fix了第一次當機。

圖片


重新編譯好核心模組之後,一跑,又馬上第二次當機了。


小笨笨同學這可傻眼了,在笨叔給他講解了系統呼叫的一些基本原理之後,馬上fix了第二次當機。這回小笨笨同學把ioctl系統呼叫號改成clone號, 重新編譯好核心模組之後,一跑,又馬上第三次當機了。




小笨笨同學這回哭了,叔叔,我不玩了~~~~

我把小笨笨同學哄著:小笨笨,不怕,我們來仔細分析當機log,你看看,你只把第一個page的只讀屬性改成了可寫,但是呢,因為clone系統呼叫號是220,每個系統呼叫號在系統呼叫表sys_call_table中佔8個位元組,但是呢,這個表沒有按照page大小對齊來存放的,所以呢,這個clone可能存放到了第2個page裡,你發現了嗎?小笨笨同學。


小笨笨同學看了看笨叔, 叔,好像是這麼回事。 叔,你真帥!



小笨笨很快就修改好了程式碼,上機一跑,好像不當機了。


笨叔:小笨笨,你這個驅動寫的好不錯,但是呢,我們需要在解除安裝模組的時候,把系統呼叫表恢復原樣。

小笨笨馬上去修改解除安裝模組函式,上機一跑,又當機了~~,這回小笨笨真的哭了: 叔,真的好難啊,為啥我一修改,就當機。



圖片

圖片

小夥伴,你有興趣和小笨笨一起來玩這個實驗嗎?


笨叔錄製了2個多小時的高清視訊來詳細講解這個實驗,有興趣的同學可以點選“閱讀原文”來訂閱笨叔的旗艦篇合集視訊。


另外我們精心製作了400多頁的實驗指導手冊,獨家供應,免費提供大家下載。

下載辦法:

登入“奔跑吧linux社群”微信公眾號,在微信公眾號裡輸入“實驗指導手冊”即可。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70005277/viewspace-2885055/,如需轉載,請註明出處,否則將追究法律責任。

相關文章