99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何理解這個(gè)Seccomp profile呢?

Linux閱碼場(chǎng) ? 來(lái)源:內(nèi)核功守道 ? 作者:許慶偉 ? 2022-11-08 09:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Seccomp 簡(jiǎn)介

75aa7e0a-5efa-11ed-8abf-dac502259ad0.png


Seccomp(全稱 “Secure computing”),早在 2.6.12 版本(2005年3月8日)就引入到內(nèi)核中,是通過(guò)只允許內(nèi)核支持部分 syscall(系統(tǒng)調(diào)用),或者拒絕內(nèi)核認(rèn)為可能有危險(xiǎn)的 syscall 集合的方式,來(lái)限制一個(gè)進(jìn)程所支持的 syscall調(diào)用。

最初,Seccomp 只允許使用read、 write、_exit、sigreturn 4個(gè)系統(tǒng)調(diào)用,一旦調(diào)用其他系統(tǒng)調(diào)用時(shí),內(nèi)核就會(huì)發(fā)送 SIGKILL 信號(hào)終止進(jìn)程。因此也被稱為 Seccomp-strict 模式。但由于其限制過(guò)于嚴(yán)格,導(dǎo)致實(shí)際上,并沒(méi)有多少應(yīng)用能夠用的上這一安全特性。

直到 3.5 版本(2012年7月12日)的內(nèi)核中引入 Seccomp的第二種匹配模式。

在這種模式下,可以通過(guò)所謂的 filter自定義被允許使用的 syscall,而自定義過(guò)濾規(guī)則是借由BPF 語(yǔ)言來(lái)實(shí)現(xiàn),故可以事先在用戶態(tài)下定義好需要匹配的系統(tǒng)調(diào)用,并且加載到內(nèi)核中,這種模式也被稱為Seccomp-BPF。

75b97bee-5efa-11ed-8abf-dac502259ad0.png

相比于 Seccomp-strict 模式,Seccomp-BPF 極大的增添了 syscall 的可擴(kuò)展性,并且使用 BPF 編寫也大大的降低了開發(fā)者的編寫難度。

現(xiàn)如今,關(guān)鍵的程序限制為只允許調(diào)用那些「它絕對(duì)需要的成功運(yùn)行的系統(tǒng)調(diào)用」,這種思想被越來(lái)越多的產(chǎn)品采納?;跒g覽器的沙箱和在云原生上大火的容器就是就是兩個(gè)很好的示例,甚至于 systemd 服務(wù)也能夠通過(guò) Seccomp 來(lái)限制。

一個(gè) seccomp profile 簡(jiǎn)單示例如下:

{
    "defaultAction": "SCMP_ACT_ERRNO",
    "architectures": [
        "SCMP_ARCH_X86_64",
        "SCMP_ARCH_X86",
        "SCMP_ARCH_X32"
    ],
    "syscalls": [
        {
            "names": [
                "madvise",
                "epoll_ctl",
                "getsockname",
                "setsockopt",
                "vfork",
                "mmap",
                "read",
            ],
            "action": "SCMP_ACT_ALLOW",
        }
    ]
}

如何理解這個(gè) Seccomp profile 呢?

SCMP_ACT_ALLOW 表示syscall 允許通過(guò),將defaultAction 設(shè)置為 SCMP_ACT_ERRNO 則不在 syscall白名單范圍內(nèi)的 syscall 都會(huì)被拒絕,還可以將defaultAction 設(shè)置為 SCMP_ACT_LOG 則不在 syscall 白名單范圍內(nèi)的 syscall 會(huì)產(chǎn)生日志。

通過(guò) Seccomp Profile 用于可以根據(jù)服務(wù)所需的 syscall 自行定義,通過(guò) SCMP_ACT_ERRNO 與SCMP_ACT_ALLOW 配合實(shí)現(xiàn)對(duì)允許的 syscall 放行,對(duì)不在 syscall 列表中的 syscall 進(jìn)行攔截。從而實(shí)現(xiàn) syscall維度服務(wù)的安全防護(hù)。

SCMP_ACT_LOG與SCMP_ACT_ERRNO 可以在不同場(chǎng)景使用,進(jìn)而實(shí)現(xiàn)不同程度的安全防護(hù)即告警和攔截。

Linux 內(nèi)核主要支持的 Seccomp Filter 動(dòng)作如下:

Seccomp Filter Action Description
SCMP_ACT_KILL 當(dāng)線程產(chǎn)生的系統(tǒng)調(diào)用與過(guò)濾規(guī)則相匹配時(shí),線程將被內(nèi)核以SIGSYS的方式終止。
SCMP_ACT_KILL_PROCESS 當(dāng)進(jìn)程產(chǎn)生的系統(tǒng)調(diào)用與過(guò)濾規(guī)則相匹配時(shí),進(jìn)程將被終止。
SCMP_ACT_TRAP 當(dāng)線程產(chǎn)生的系統(tǒng)調(diào)用與過(guò)濾規(guī)則相匹配時(shí),線程將會(huì)拋出一個(gè)SIGSYS信號(hào)。
SCMP_ACT_ERRNO 當(dāng)線程產(chǎn)生的系統(tǒng)調(diào)用與過(guò)濾規(guī)則相匹配時(shí),它將收到errno的一個(gè)返回值。
SCMP_ACT_TRACE 如果線程正在被跟蹤,并且跟蹤進(jìn)程時(shí)在對(duì)ptrace(2)的調(diào)用中指定了PTRACE_O_TRACESECCOMP選項(xiàng),則將會(huì)通過(guò) PTRACE_EVENT_SECCOMP通知跟蹤進(jìn)程,并且可以使用PTRACE_GETEVENTMSG 選項(xiàng)檢索msg_num中提供的值。
SCMP_ACT_LOG 當(dāng)線程產(chǎn)生的系統(tǒng)調(diào)用與過(guò)濾規(guī)則相匹配時(shí),則它不會(huì)對(duì)調(diào)用系統(tǒng)調(diào)用的線程產(chǎn)生任何影響,但系統(tǒng)調(diào)用會(huì)被記錄到日志。
SCMP_ACT_ALLOW 當(dāng)線程產(chǎn)生的系統(tǒng)調(diào)用與過(guò)濾規(guī)則相匹配時(shí),則它不會(huì)對(duì)調(diào)用系統(tǒng)調(diào)用的線程產(chǎn)生任何影響。
SCMP_ACT_NOTIFY 當(dāng)進(jìn)程產(chǎn)生與seccomp過(guò)濾規(guī)則匹配的系統(tǒng)調(diào)用時(shí),內(nèi)核將會(huì)通知正在監(jiān)視的用戶態(tài)進(jìn)程。該進(jìn)程在內(nèi)核中產(chǎn)生了系統(tǒng)調(diào)用等待,直到監(jiān)視進(jìn)程返回seccomp_notify_respond(3)。

Seccomp in Kubernetes

從安全的角度來(lái)看,Kubernetes 中包含如下所示的潛在攻擊面:

75c544ec-5efa-11ed-8abf-dac502259ad0.png

為了保證集群以及容器應(yīng)用的安全,Kubernetes 提供了多種安全機(jī)制,限制容器的行為,減少容器和集群的攻擊面,保證整個(gè)系統(tǒng)的安全性。

本文主要介紹 Kubernetes 中的 Seccomp 功能。Seccomp (Secure computing mode縮寫)代表安全計(jì)算模式,自 2.6.12 版本以來(lái)一直是 Linux 內(nèi)核的一個(gè)特性。它可以用來(lái)設(shè)置沙箱化進(jìn)程的權(quán)限,限制它從用戶空間到內(nèi)核的系統(tǒng)調(diào)用。Kubernetes 可以自動(dòng)將 Seccomp profile 加載到pod 和容器所在的節(jié)點(diǎn)。Kubernetes 提供兩種方式用于 pod 綁定 seccomp profile。

通過(guò) annotation 標(biāo)簽綁定 seccomp profile

用戶可以通過(guò) pod 中的 annotation 標(biāo)簽向 pod 中添加seccomp 安全配置,并且可以選擇對(duì) pod 添加 seccomp 還是對(duì) pod 中某個(gè)容器添加 seccomp 策略。

pod 層面:

annotations:
seccomp.security.alpha.kubernetes.io/pod: "localhost/profile.json"

container 層面:

annotations:
container.security.alpha.kubernetes.io/: "localhost/profile.json"

這里容器運(yùn)行時(shí)會(huì)默認(rèn)從節(jié)點(diǎn)上配置的 seccomp 策略文件目錄(k8s 集群上默認(rèn)為/var/lib/kubelet/seccomp)中加載名稱為 profile.json 的配置文件,這里的配置 value 支持以下三種策略:

runtime/default-使用運(yùn)行時(shí)默認(rèn)的 seccomp 配置,比如docker 默認(rèn)的 profile、containerd 的默認(rèn) profile

unconfined-不使用 seccomp 過(guò)濾

localhost/-使用節(jié)點(diǎn)本地 seccompprofileroot 路徑下自定義的配置文件

注意:從 Kubernetes v1.25 開始,kubelet 不再支持這些注解,也不再支持在靜態(tài) Pod 中使用注解,并且當(dāng)創(chuàng)建帶有 seccomp 字段的 Pod 時(shí)不再自動(dòng)填充 seccomp 注解。后續(xù)統(tǒng)一使用下面介紹的 securityContext 配置。

通過(guò) security-context 配置 seccompprofile

社區(qū)從 1.19 版本 seccomp 特性 GA 開始在securityContext 配置中增加了 seccompProfile 的字段,用戶可以直接在此配置 Pod 和 Container 維度的 seccomp策略,由于 annotations 配置的方式已經(jīng)是廢棄狀態(tài),為了今后不必要的兼容性調(diào)整,推薦使用該方式配置:

securityContext:
 seccompProfile:
 type: Localhost
 localhostProfile: profiles/audit.json

有三種 seccomp 配置類型:

Unconfined:不啟用 seccomp

RuntimeDefault: kubelet 會(huì)啟用默認(rèn)的 seccomp 配置(默認(rèn) seccomp 配置文件是有容器運(yùn)行時(shí)定義的)

Localhost:節(jié)點(diǎn)本地seccomp 配置根目錄(一般默認(rèn)為/var/lib/kubelet/seccomp)下配置文件的相對(duì)路徑

所以基于 k8s 提供的 seccomp 配置方式,我們可以實(shí)現(xiàn)對(duì) pod 進(jìn)行 syscall 級(jí)別的安全防護(hù)。

Seccomp 在云原生場(chǎng)景下的應(yīng)用方式

云原生場(chǎng)景下,業(yè)務(wù)一般是通過(guò)微服務(wù)的方式對(duì)外提供服務(wù),一般每個(gè)微服務(wù)的行為相比與主機(jī)業(yè)務(wù)行為會(huì)更為單一。因此當(dāng)通過(guò)一系列的測(cè)試手段激發(fā)出服務(wù)所需的全部syscall 從而生成 syscall 白名單,通過(guò) syscall 白名單限制服務(wù)系統(tǒng)調(diào)用,可以在 syscall 維度保證服務(wù)安全。當(dāng)有攻擊通過(guò)服務(wù)漏洞進(jìn)入到服務(wù)對(duì)應(yīng)的 Pod 中,它想要進(jìn)行一些操作,但這些操作對(duì)應(yīng)的 syscall 不在白名單內(nèi),此時(shí)攻擊失敗。

我們將 syscall 白名單的生成與使用分為三個(gè)階段:學(xué)習(xí)階段,監(jiān)視階段,保護(hù)階段。

整個(gè)過(guò)程如圖所示:

76092cb6-5efa-11ed-8abf-dac502259ad0.png

學(xué)習(xí)階段:seccomp controller 組件為 crd 資源,它可以實(shí)現(xiàn)對(duì) k8s 集群內(nèi)指定 pod 進(jìn)行 syscall 采集并且將采集得到的 syscall 列表落盤到每個(gè)工作節(jié)點(diǎn)。seccomp controller 的 syscall 學(xué)習(xí)功能是通過(guò) eBPF實(shí)現(xiàn)的,通過(guò)eBPF可以獲取工作節(jié)點(diǎn)每個(gè)進(jìn)程產(chǎn)生的系統(tǒng)調(diào)用,進(jìn)而獲取到指定 pod 對(duì)應(yīng)的系統(tǒng)調(diào)用。通過(guò)eBPF的方式,將集群中每個(gè)容器產(chǎn)生的 syscall 調(diào)用進(jìn)行收集,生成 syscall 白名單。

監(jiān)視階段:使用 SCMP_ACT_LOG 過(guò)濾方式,可以將不在白名單的系統(tǒng)調(diào)用,以日志的形式打印出來(lái),此時(shí)測(cè)試人員和安全運(yùn)維人員可以對(duì)系統(tǒng)調(diào)用進(jìn)行判斷,確定業(yè)務(wù)是否需要該 syscall,如果需要?jiǎng)t加入到 syscall 白名單中。在監(jiān)視階段可以完成 syscall 白名單的收斂,進(jìn)而得到與業(yè)務(wù)完全匹配的 syscall 白名單。

監(jiān)視模式創(chuàng)建的 seccomp 配置文件如下所示:(syscall列表只是舉例,實(shí)際 Pod 所需 syscall 列表會(huì)更多)

{
  "defaultAction": "SCMP_ACT_LOG",
  "architectures": [
      "SCMP_ARCH_X86_64",
      "SCMP_ARCH_X86",
      "SCMP_ARCH_X32"
  ],
 "syscalls": [
     {
         "names": [
             "madvise",
             "epoll_ctl",
             "getsockname",
             "setsockopt",
"vfork",
             "mmap",
             "read",
             "write",
             "close",
             "arch_prctl"
         ],
 "action": "SCMP_ACT_ALLOW"
     }
]
}

保護(hù)階段:使用 SCMP_ACT_ERRNO 過(guò)濾方式,對(duì)每個(gè)業(yè)務(wù)容器進(jìn)行 syscall 級(jí)別的保護(hù)。一旦業(yè)務(wù)容器中存在異常系統(tǒng)調(diào)用,對(duì)其進(jìn)行攔截。

SCMP_ACT_ERRNO 對(duì) syscall 攔截發(fā)生在內(nèi)核態(tài),所以不用擔(dān)心 seccomp profile 安全防護(hù)的效率問(wèn)題。

保護(hù)模式創(chuàng)建的 seccomp 配置文件如下所示:

{
       "defaultAction":"SCMP_ACT_ERRNO",
       "architectures": [
           "SCMP_ARCH_X86_64",
           "SCMP_ARCH_X86",
           "SCMP_ARCH_X32"
      ],
      "syscalls": [
          {
              "names": [
                  "madvise",
                  "epoll_ctl",
                  "getsockname",
                  "setsockopt",
"vfork",
                  "mmap",
                  "read",
                  "write",
"close",
                  "arch_prctl"
      ],
"action":"SCMP_ACT_ALLOW"
           }
]
}

總結(jié)

本文從 Seccomp 機(jī)制出發(fā),在 linux 內(nèi)核層面介紹了 Seccomp 可以實(shí)現(xiàn)的安全能力即對(duì)進(jìn)程的系統(tǒng)調(diào)用限制能力。

Kubernetes 為我們提供了可以對(duì)容器進(jìn)行系統(tǒng)調(diào)用層面保護(hù)的接口即 Seccomp 能力。在云原生場(chǎng)景,通過(guò)使用 eBPF獲取業(yè)務(wù)系統(tǒng)調(diào)用白名單,通過(guò)linux 內(nèi)核支持的 Seccomp 機(jī)制對(duì)業(yè)務(wù)容器進(jìn)行系統(tǒng)調(diào)用維度的防護(hù),進(jìn)而保證業(yè)務(wù)容器 syscall 層面的安全。

一旦有攻擊者希望通過(guò)不在白名單內(nèi)的 syscall 實(shí)現(xiàn)攻擊行為,通過(guò) Seccomp 機(jī)制我們可以對(duì)攻擊進(jìn)行告警和攔截,最終保證業(yè)務(wù)容器的安全。

Seccomp 機(jī)制為云原生場(chǎng)景提供了 Syscall 維度的安全保證,后續(xù)將對(duì)此持續(xù)探索。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Act
    Act
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    21247
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    317

    瀏覽量

    22395
  • BPF
    BPF
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    4342

原文標(biāo)題:【云安全系列】Seccomp—云安全syscall防護(hù)利器

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    /etc/bashrc和/etc/profile區(qū)別

    都有什么作用和該如何使用? 首先我們 在一般的 linux 或者 unix 系統(tǒng)中, 都可以通過(guò)編輯 bashrc 和 profile 來(lái)設(shè)置用戶的工作環(huán)境, 很多文章對(duì)于 profile
    發(fā)表于 06-26 16:26

    out of box例程,默認(rèn)STA狀態(tài),自動(dòng)connect to a stored profile。stored profile在哪兒?

    我現(xiàn)在在學(xué)習(xí)CC3220SF開發(fā)板的out_of_box例程,遇到一個(gè)問(wèn)題。 在例程中,板子上電后會(huì)被自動(dòng)設(shè)置為STATION狀態(tài),首先從一個(gè)默認(rèn)的stored profile連接WIFI,但是這個(gè)stored profile
    發(fā)表于 05-14 08:54

    CCS中性能分析器profile的使用?

    專家好, CCS調(diào)試程序過(guò)程中,需要分析下各函數(shù)的執(zhí)行時(shí)間,CCS中提供了性能分析器profile Q1:性能分析器profile是否只能在Simulator下才能使用,Emulator下沒(méi)有這個(gè)功能? Q2:性能分析器
    發(fā)表于 06-21 19:20

    請(qǐng)教關(guān)于CCS v4.2 中profile工具的使用

    ,另一個(gè)子函數(shù)的情況則沒(méi)顯示!!怎樣解決?PS:使用的是C64+ simulator 進(jìn)行仿真;profile setup選擇的是 Profile all functions for total cycle
    發(fā)表于 08-07 08:25

    請(qǐng)問(wèn)AD9914單頻模式使用Profile寄存器時(shí)必須用Profile引腳選擇所需的寄存器嗎?

    你好,我看到ad9914手冊(cè)講單頻模式時(shí),在使用Profile寄存器時(shí),必須用Profile引腳選擇所需的寄存器嗎?Profile的三個(gè)引腳怎么設(shè)置來(lái)選擇Profile寄存器
    發(fā)表于 02-12 11:31

    請(qǐng)問(wèn)這個(gè)函數(shù)該怎樣理解?

    __asm void WFI_SET(void){ WFI; }這個(gè)函數(shù)該怎樣理解?
    發(fā)表于 10-21 03:39

    請(qǐng)問(wèn)需要認(rèn)證哪些profile和service?

    請(qǐng)問(wèn)基于CC2541的HIDAdvRemoteDongle歷程的項(xiàng)目做BQB認(rèn)證時(shí)認(rèn)證哪些profile和service,這個(gè)HID的host只掃面和讀取從機(jī)HID設(shè)備的profile和service,那么它需不需要認(rèn)證,如需要
    發(fā)表于 11-05 08:35

    如何理解增益裕度這個(gè)概念?

    如何理解增益裕度這個(gè)概念?如果有資料,請(qǐng)分享一下,謝謝[/td]
    發(fā)表于 06-24 07:01

    應(yīng)該怎么去理解AC magnitude 這個(gè)參數(shù)?它為什么會(huì)影響增益?

    請(qǐng)問(wèn)在做AC仿真的時(shí)候參數(shù)設(shè)置AC magnitude到底應(yīng)該怎么理解?我跑AC的時(shí)候?qū)⑵錅p小一般為什么增益也減半了? 它為什么會(huì)影響增益?應(yīng)該怎么去理解AC magnitude 這個(gè)參數(shù)
    發(fā)表于 06-24 07:55

    ZIC2410 User Guide Profile-Sim

    This is the user manual for the CEL Profile-Simulator. The Profile-Simulator is used forsimulating
    發(fā)表于 11-04 14:29 ?12次下載

    ZIC2410 User Guide Profile-Bui

    This is the user manual for the CEL Profile-Builder program. Profile-Builder helps a usereasily
    發(fā)表于 11-04 14:32 ?19次下載

    藍(lán)牙耳機(jī)的支援Profile

    藍(lán)牙耳機(jī)的支援Profile              若支持藍(lán)牙功能的手機(jī)與藍(lán)牙耳機(jī)相用,藍(lán)牙耳機(jī)必須支持兩個(gè)協(xié)議:Headset profile
    發(fā)表于 12-31 11:55 ?1007次閱讀

    Xysemi_Company_Profile

    Xysemi Company Profile PPT資料
    發(fā)表于 03-03 16:06 ?3次下載

    藍(lán)牙個(gè)各種profile標(biāo)準(zhǔn)

    藍(lán)牙個(gè)各種profile標(biāo)準(zhǔn),適合不同類型的產(chǎn)品定制。
    發(fā)表于 03-13 14:56 ?10次下載

    如何通過(guò)仿真動(dòng)圖理解各種傳感器的原理?

    如何通過(guò)仿真動(dòng)圖理解各種傳感器的原理?
    發(fā)表于 01-15 10:39 ?743次閱讀
    如何通過(guò)仿真動(dòng)圖<b class='flag-5'>理解</b>各種傳感器的原理<b class='flag-5'>呢</b>?