<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          LWN:給 io_uring 添加 audit 支持!

          共 3938字,需瀏覽 8分鐘

           ·

          2021-06-27 10:17

          關(guān)注了就能看到更多這么棒的文章哦~

          Auditing io_uring

          By Jonathan Corbet
          June 3, 2021
          DeepL assisted translation
          https://lwn.net/Articles/858023/

          io_uring 子系統(tǒng)于 2019 年首次推出以來,已經(jīng)迅速成為執(zhí)行高帶寬的異步 I/O 操作的首選方式。它引起了許多開發(fā)人員的注意,包括最近那些關(guān)注安全更甚于性能的開發(fā)者。現(xiàn)在,安全社區(qū)的一些成員感嘆在 io_uring 中缺乏考慮安全性,因此希望在這個(gè)領(lǐng)域中添加 audit 和 Linux security module 的支持來彌補(bǔ)這一缺陷。這個(gè)工作目前看來很困難,甚至引出了一個(gè)不那么讓人高興的后備解決方案。

          Linux 的 audit 機(jī)制允許監(jiān)控和記錄系統(tǒng)中所有重要的活動(dòng)。例如,有人想知道誰查看了一個(gè)特定的文件,那么具備 audit 功能的系統(tǒng)就可以提供這個(gè)答案。audit 能力是獲得一些安全認(rèn)證的必要條件,而這些認(rèn)證又是在一些對(duì)安全比較敏感的環(huán)境中部署 Linux 的必要條件。其實(shí)相對(duì)來說只有一小部分 Linux 系統(tǒng)打開了 audit 功能,但發(fā)行版提供方幾乎無一例外地在他們的內(nèi)核中都啟用了 audit。

          audit 機(jī)制反過來又依賴分散于內(nèi)核源代碼中的許多 hook 代碼。每當(dāng)某一個(gè)人們可能感興趣的事件發(fā)生時(shí),就會(huì)通過適當(dāng)?shù)?hook 被報(bào)告給 audit 代碼。然后 audit 子系統(tǒng)會(huì)根據(jù)一組從用戶空間加載進(jìn)來的規(guī)則來控制哪些事件需要被報(bào)告給用戶空間。

          在 io_uring 被開發(fā)出來時(shí)(當(dāng)然現(xiàn)在仍是在進(jìn)行中),開發(fā)人員對(duì)性能和功能非常關(guān)注。而 audit 這類的安全特性并不是他們的首要任務(wù),所以他們當(dāng)然也就忽略了要添加相關(guān)的 hook,或者說沒有考慮過如何能在符合性能目標(biāo)前提下也支持 audit。現(xiàn)在,io_uring 出現(xiàn)在更多發(fā)行版的內(nèi)核之中了(也就是 audit 可能會(huì)被缺省啟用的那些內(nèi)核),因此安全相關(guān)的開發(fā)者開始有些擔(dān)心了。如果 io_uring 成為了規(guī)避所有 audit 監(jiān)控的一種方式,這對(duì)于維持安全認(rèn)證來說不是一種好做法。

          Adding security support

          5 月下旬的時(shí)候,Paul Moore(audit 子系統(tǒng)的維護(hù)者)發(fā)布了一組補(bǔ)丁,向 io_uring 添加了 Linux security module(LSM)和 audit 功能。LSM 方面相對(duì)簡(jiǎn)單一些,因?yàn)?io_uring 執(zhí)行的操作已經(jīng)被 LSM hook 涵蓋了,所以所需要做的只是增加兩個(gè)新的 hook 來判斷具體是哪種 io_uring 操作。具體來說,這兩個(gè) hook 控制(進(jìn)程之間)共享信息,而這些信息就是存儲(chǔ)在 ring buffer 中用于向內(nèi)核傳達(dá)操作請(qǐng)求的。詳情請(qǐng)見 patch。patch set 中的這一部分似乎沒有什么爭(zhēng)議。

          audit 代碼則不一樣了。因?yàn)?io_uring 的核心代碼已經(jīng)被仔細(xì)優(yōu)化過了,希望能盡可能快地完成處理所有的 request 以及相應(yīng)的結(jié)果。io_uring 的使用場(chǎng)景中可能會(huì)有每秒執(zhí)行數(shù)百萬次的 I/O 操作,所以這里增加任何開銷都是不受歡迎的。如果在 ring buffer 的操作中添加 audit 相關(guān)的 hook 的話,就會(huì)拖慢了 io_uring 最關(guān)鍵的性能指標(biāo),因此引起 Pavel Begunkov 的負(fù)面評(píng)價(jià):"所以,這組 patch 在最繁忙的函數(shù)之一的每個(gè)請(qǐng)求中都增加了兩個(gè)帶有 memory load 操作的 if(即 current->audit_context)。不可能接受這樣的改動(dòng)"。

          Begunkov 建議,也許可以在運(yùn)行時(shí)通過 patch 方式來加上 audit hook,就像 tracepoints 和 kprobes 的工作方式那樣。Moore 回應(yīng)說,audit 子系統(tǒng)不支持這樣的 patch 方式,而且這樣做可能會(huì)引起一些本質(zhì)問題:"我感覺它會(huì)違反那些安全認(rèn)證"。因此,這似乎不是一個(gè)可能的解決方向。

          同時(shí),io_uring 的維護(hù)者 Jens Axboe 做了一些測(cè)試。一個(gè)簡(jiǎn)單的 random-read 測(cè)試在使用了 audit hook 后,即使沒有加載任何實(shí)際有效的 audit rule,速度也降低了近 5%。其他各類基準(zhǔn)測(cè)試也得到了同樣的結(jié)果,哪怕是在使用更新過之后的 patch set(尚未公開發(fā)布)也一樣。為了 5% 的性能提升,內(nèi)核開發(fā)者可能會(huì)需要數(shù)月的辛勤工作,如果因?yàn)?audit hook 而導(dǎo)致這么大的性能損失,對(duì)他們來說就是一顆苦果。

          Axboe 指出,以前通過老的異步 I/O 系統(tǒng)調(diào)用接口啟動(dòng) read 和 write 操作時(shí),是不會(huì)被 audit 的。"在過去的二十年里,是不是說明這并不是一個(gè)問題?" 他同意一些操作(比如打開或刪除文件)應(yīng)該被 audit,但他認(rèn)為對(duì)讀寫操作進(jìn)行 audit 則 "只是純粹的噪音,一點(diǎn)用都沒有"。由于這些操作是對(duì)性能影響最大的操作,因此如果能讓 audit hook 不影響這些操作,可能是一個(gè)解決方案。

          Moore 提出了一個(gè)基于這個(gè)想法的方案,也就是只對(duì)特定的、精心選擇的那些操作才會(huì)使能 audit hook。io_uring dispatcher 中有一個(gè)很方便的 switch 語(yǔ)句,可以很容易地用來只對(duì)需要關(guān)注的操作進(jìn)行 audit 檢測(cè)。他希望聽聽大家的意見,但到目前為止還沒有多少回復(fù)。正如 Begunkov 指出的,一個(gè)很重要的問題是哪些操作需要進(jìn)行 audit。對(duì)打開文件這個(gè)操作添加一個(gè) audit 調(diào)用一般不太會(huì)影響到人們,而如果對(duì) poll 這類操作添加 audit 的話則是另一回事了。Moore 已經(jīng)提出了一組他認(rèn)為值得 audit 的操作集合作為討論的基礎(chǔ)。

          Threads and grumbles

          如果幸運(yùn)的話,這個(gè)解決方案會(huì)被大家都接受。根據(jù) Moore 的說法,如果在 io_uring 中不能支持 audit 的話,那就更加不妙了:

          如果我們不能在這里找到一個(gè)解決方案,我們將需要使 io_uring 和 audit 互不兼容,我認(rèn)為這不符合用戶的最佳利益,而且肯定會(huì)讓發(fā)行版提供方頭痛。

          "頭痛 "這個(gè)詞并不特別準(zhǔn)確。如果這兩個(gè)功能是互不兼容的話,那么就不可能編譯出一個(gè)能同時(shí)支持這兩個(gè)功能的內(nèi)核。因此,發(fā)行商將不得不提供兩個(gè)不同的內(nèi)核(他們總是竭力避免這種情況),或者從這兩個(gè)功能中選擇一個(gè)來支持。希望事情不會(huì)發(fā)展到這一步。

          同時(shí),雙方的開發(fā)者都表達(dá)了一些不滿,但安全開發(fā)者很明確地表示,他們更希望看到 audit 從一開始就設(shè)計(jì)在 io_uring 中。正如 Casey Schaufler 所說:

          如果 audit 和 LSM 的需求在一開始就被包含到 io_uring 的設(shè)計(jì)中的話,那就會(huì)非常方便了。性能方面的影響可以直面去解決。否則的話,今后可能不得不重新進(jìn)行改造了。

          Richard Guy Briggs 也抱怨說:"許多安全方面的擔(dān)心似乎總是事后才想到的,因此導(dǎo)致必須在后來補(bǔ)上。" 這兩個(gè)評(píng)論的意思都是說,如果有足夠的先見之明的話,現(xiàn)在遇到的困難本來是可以避免的。

          這可能算是一個(gè)公平的批評(píng)意見。內(nèi)核開發(fā)者在開發(fā)新的功能時(shí),常常把安全問題留到今后考慮。對(duì)于像 audit 這樣相對(duì)小眾的功能來說更是如此,因?yàn)樗话悴豢赡茉陂_發(fā)系統(tǒng)中啟用。內(nèi)核社區(qū)對(duì)安全開發(fā)人員可能有點(diǎn)不友好,認(rèn)為他們總是把安全放在第一位(居然超越了性能要求)。這樣的一個(gè)討論環(huán)境似乎就是告訴大家可以先把安全問題丟在一邊、等以后再解決。

          不過,也應(yīng)該指出,io_uring 自 2019 年初以來一直在公開進(jìn)行開發(fā)。它已經(jīng)在郵件列表(和 LWN)中得到了大量的討論,但安全社區(qū)并沒有將這些信息作為他們應(yīng)該盡快提出建議來支持 audit 的線索。很少有內(nèi)核開發(fā)者能夠在實(shí)現(xiàn)每秒百萬次操作的 I/O 子系統(tǒng)的同時(shí),還能設(shè)計(jì)好 security hook 并且不影響性能。也許 io_uring 的開發(fā)者從一開始就應(yīng)該考慮安全問題,但他們也應(yīng)該從一開始就得到幫助。

          內(nèi)核社區(qū)對(duì)于增加像 io_uring 這樣的新功能時(shí),很少有一些必須的規(guī)定,這一點(diǎn)很讓人驚訝。理論上來說,新的系統(tǒng)調(diào)用應(yīng)該要有 man page,但是真的哪天有 man page 先出現(xiàn)了的時(shí)候,人們肯定會(huì)感到驚訝。在一個(gè)有更多正規(guī)流程的項(xiàng)目中,就很有可能會(huì)堅(jiān)持新功能在對(duì) LSM 和 audit 等機(jī)制有了適當(dāng)支持之前是不能合入的。這可能會(huì)迫使人們更早地與安全開發(fā)人員開始互動(dòng),從而避免發(fā)生這種問題。

          但這并不是我們所處的世界。從來沒有人會(huì)根據(jù) check list 來逐項(xiàng)檢查,確保在合并一個(gè)新的子系統(tǒng)之前,所有的工作都已經(jīng)逐項(xiàng)完成了。因此,內(nèi)核社區(qū)將不得不繼續(xù) “混日子”,盡其所能地支持所需的功能。這不會(huì)是最后一次出現(xiàn)這種要為了安全機(jī)制來改造現(xiàn)有的內(nèi)核功能的事情。可以說,這不是最好的方法,但一般來說最終總還是能完成工作的。

          全文完
          LWN 文章遵循 CC BY-SA 4.0 許可協(xié)議。

          歡迎分享、轉(zhuǎn)載及基于現(xiàn)有協(xié)議再創(chuàng)作~

          長(zhǎng)按下面二維碼關(guān)注,關(guān)注 LWN 深度文章以及開源社區(qū)的各種新近言論~



          瀏覽 71
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品 一道在线 | 黄色a一级| 日韩黄片大全亚卅久久… | 日逼电影网 | 无需播放器的AV |