云計(jì)算時(shí)代容器安全綜述-Linux安全基礎(chǔ)

容器化部署大多數(shù)情況下都是基于Linux操作系統(tǒng)部署的(當(dāng)然在Windows平臺(tái)也能運(yùn)行容器化應(yīng)用),因此了解Linux操作系統(tǒng)提供的安全機(jī)制對(duì)運(yùn)行在其上的容器進(jìn)程的安全來說,至關(guān)重要区赵。特別是理解Linux操作系統(tǒng)提供的各種安全特性有助于我們深刻的理解很多容器安全的原理,進(jìn)而讓我們?cè)谠O(shè)計(jì)系統(tǒng)的時(shí)候便锨,能夠防微杜漸歪架,給出成體系化全面的安全整體方案。

具體來說葛闷,Linux的安全機(jī)制主要體現(xiàn)在系統(tǒng)調(diào)用憋槐,文件權(quán)限機(jī)制,以及我們經(jīng)常討論權(quán)限提升攻擊中出現(xiàn)的系統(tǒng)capabilities淑趾⊙糇校可能很多讀者對(duì)這些概念以及操作系統(tǒng)機(jī)制已經(jīng)有比較深入的理解了,但是筆者還是建議大家仔細(xì)的閱讀一下本文扣泊,因?yàn)槲覀儫o論是在Docker這樣的容器平臺(tái)還是Kubernetes這樣的容器編排平臺(tái)上近范,操作系統(tǒng)提供的這些能力都是整個(gè)安全的基石,萬丈高樓平地起延蟹,咱們就從打好地基開始吧顺又!

筆者在介紹容器的本質(zhì)系統(tǒng)文章中,強(qiáng)調(diào)過容器是運(yùn)行在操作系統(tǒng)上的特殊進(jìn)程等孵,因此容器進(jìn)程(容器實(shí)例)本質(zhì)上就是運(yùn)行在操作系統(tǒng)上的進(jìn)程稚照,我們?cè)谒拗鳈C(jī)上通過ps能看到正在運(yùn)行的容器應(yīng)用程序。運(yùn)行在同一臺(tái)機(jī)器上的多個(gè)進(jìn)程共享機(jī)器的硬件資源俯萌,對(duì)于容器化的進(jìn)程來說果录,使用系統(tǒng)資源和普通進(jìn)程無二,都是通過系統(tǒng)調(diào)用(system call)咐熙,并且應(yīng)該具備相應(yīng)系統(tǒng)調(diào)用訪問權(quán)限弱恒。

容器進(jìn)程和普通進(jìn)程不同的地方就在于系統(tǒng)調(diào)用的權(quán)限控制,因?yàn)閷?duì)于容器來說棋恼,我們可以在鏡像打包的時(shí)候返弹,或者在容器運(yùn)行的時(shí)候,來賦予容器進(jìn)程訪問系統(tǒng)資源的權(quán)限爪飘,選擇的時(shí)機(jī)不同义起,對(duì)于系統(tǒng)造成的安全影響也有很大的不同。

在Linux操作系統(tǒng)上师崎,應(yīng)用程序一般運(yùn)行在用戶空間(user space)默终,對(duì)系統(tǒng)資源使用的權(quán)限要遠(yuǎn)比操作系統(tǒng)內(nèi)核低(operating system kernel)。運(yùn)行在用戶空間的應(yīng)用程序如果需要從文件中讀取數(shù)據(jù),發(fā)送數(shù)據(jù)或者獲取系統(tǒng)當(dāng)前的時(shí)間齐蔽,都需要請(qǐng)求內(nèi)核的幫助來完成两疚。具體來說,內(nèi)核提供了用戶空間代碼可調(diào)用的編程接口含滴,我們通常情況下將這些接口稱作system call或者syscall接口诱渤。

在最新版本的Linux操作系統(tǒng)上,大概有300+的syscall接口谈况,提供的功能涵蓋了從文件讀取到網(wǎng)絡(luò)操作勺美,系統(tǒng)配置和進(jìn)程控制等等,以下是我們熟知的一些接口:

1鸦做,read接口励烦,從文件中讀取數(shù)據(jù)

2,write接口泼诱,寫輸入到文件中

3坛掠,open接口,在讀寫文件之前需要先打開文件

4治筒,execve接口屉栓,在操作系統(tǒng)上運(yùn)行可執(zhí)行文件

5,chown接口耸袜,改變文件的ownership(所有者)

6友多,clone接口,在操作系統(tǒng)上創(chuàng)建新的進(jìn)程

坦白講堤框,對(duì)于大部分應(yīng)用系統(tǒng)的開發(fā)人員來說域滥,很少有機(jī)會(huì)直接調(diào)用操作系統(tǒng)接口,并且這些操作系統(tǒng)功能大概率已經(jīng)被使用的編程語言進(jìn)行了封裝蜈抓,比如我們使用Core Java編寫文件處理程序启绰,io包里就已經(jīng)封裝了文件open,read和write操作沟使,并提供了豐富的庫函數(shù)來加速開發(fā)的效率委可。但是對(duì)于底層代碼框架開發(fā)人員,比如說Golang語言的syscall代碼包腊嗡,java語言的io代碼包着倾,就需要熟知這些接口。幸運(yùn)的是燕少,大部分編寫業(yè)務(wù)系統(tǒng)的同學(xué)卡者,幾乎不太需要深入的了解這些底層的系統(tǒng)調(diào)用。

運(yùn)行在操作系統(tǒng)上的應(yīng)用程序和運(yùn)行在容器中的應(yīng)用程序使用這些系統(tǒng)調(diào)用的方式?jīng)]有什么本質(zhì)的區(qū)別棺亭,并且運(yùn)行在同一臺(tái)機(jī)器上的多個(gè)應(yīng)用程序虎眨,或者同一個(gè)應(yīng)用程序的多個(gè)實(shí)例蟋软,訪問系統(tǒng)資源的時(shí)候镶摘,本質(zhì)上共享了同一套操作系統(tǒng)內(nèi)核嗽桩。當(dāng)然,并不是所有的應(yīng)用程序都需要進(jìn)行系統(tǒng)調(diào)用凄敢,咱容器安全模型文章中曾經(jīng)提到過幾個(gè)重要的安全原則碌冶,最小權(quán)限原則告訴我們,如無必要涝缝,無需賦予權(quán)限扑庞。Linux提供了安全控制機(jī)制來限制進(jìn)程可以執(zhí)行的系統(tǒng)調(diào)用,比如seccomp拒逮,我們會(huì)在后續(xù)的文章中詳細(xì)的介紹罐氨。

Linux操作系統(tǒng)上另外一個(gè)非常重要的安全機(jī)制是文件權(quán)限,可以說文件權(quán)限(file permission)是整個(gè)操作系統(tǒng)的安全基石滩援。在Linux操作系統(tǒng)上栅隐,有一個(gè)非常重要的概念:Everything is a file(Linux操作系統(tǒng)上所有事物都是文件)。應(yīng)用程序的代碼玩徊,數(shù)據(jù)租悄,配置文件,日志恩袱,甚至是如顯示器泣棋,打印機(jī),磁盤等這樣的硬件設(shè)備畔塔,都是文件潭辈。文件的權(quán)限決定了用戶能在文件上具體執(zhí)行什么操作,是否能夠訪問文件的數(shù)據(jù)等澈吨。如果讀者用過Mac把敢,或者自己搭建過虛擬機(jī),一定不會(huì)對(duì)下圖所示的通過ls -l命令羅列文件列表的輸出感到陌生:

?? Kubernetes安全 ls -l

-rwxr-xr-x? 1 gaopanqi? staff? 31328 Oct? 6 08:04 mysleep

上邊的輸出顯示了筆者電腦上的一個(gè)可執(zhí)行文件棚辽,其中可以看到這個(gè)叫mysleep的文件所有者是名叫“gaopanqi”的用戶技竟,并且gaopanqi屬于工作組staff。輸出的最開始的字符串“rwxr-xr-x”標(biāo)明了文件的訪問權(quán)限屈藐。具體來說一共有9個(gè)字符榔组,被分為三組:

- 最開始的三個(gè)字符rwx標(biāo)識(shí)了文件的所有者gaopanqi所具有的權(quán)限

- 中間的三個(gè)字符r-x代表gaopanqi所屬的工作組中其他用戶具有的權(quán)限

- 最后三個(gè)字符r-x代表其他用戶(不是gaopanq,也不在工作組staff)具有的權(quán)限

文件的操作權(quán)限有三種:read(r)联逻,write(w)和execute(x)搓扯,用戶是否能夠?qū)ξ募M(jìn)行操作取決于對(duì)應(yīng)位置的權(quán)限是否被打開,比如上邊的例子包归,對(duì)于屬于staff工作組的所有用戶锨推,對(duì)mysleep這個(gè)文件有read和執(zhí)行的權(quán)限(通過r和x表示),而沒有寫的權(quán)限(修改的權(quán)限,通過-表示)换可。

Linux操作系統(tǒng)上文件的管線管理機(jī)制并不復(fù)雜椎椰,我相信大部分同學(xué)應(yīng)該都非常清楚,但是Linux上文件的權(quán)限不僅僅局限于此沾鳄,文件的權(quán)限還會(huì)受到setuid慨飘,setgid以及sticky bits的影響,咱們著重聊一下前兩個(gè)译荞,因?yàn)閺陌踩慕嵌葋砜慈康模@兩個(gè)位會(huì)允許進(jìn)程獲得額外的權(quán)限,很容易被惡意攻擊者用來進(jìn)行權(quán)限提升以達(dá)到竊取敏感數(shù)據(jù)的目的吞歼。

通常情況下圈膏,我們?cè)贚inux操作系統(tǒng)上運(yùn)行可執(zhí)行文件,啟動(dòng)的進(jìn)程會(huì)繼承運(yùn)行這個(gè)可執(zhí)行文件的用戶ID篙骡,但是如果可執(zhí)行文件設(shè)置了setuid位稽坤,那么進(jìn)程會(huì)被設(shè)置成這個(gè)可執(zhí)行文件所有者的用戶ID(UID),我們來通過一個(gè)具體的例子說明一下医增。

Linux操作系統(tǒng)上還有sleep這個(gè)命令慎皱,用來將當(dāng)前的操作延遲一段時(shí)間。首先啟動(dòng)本地虛擬機(jī)(建議讀者使用vagrant工具來管理虛擬機(jī)叶骨,筆者使用的是Ubuntu操作系統(tǒng))茫多,然后登陸到Linux操作系統(tǒng),運(yùn)行命令which sleep確定可執(zhí)行程序的安裝位置忽刽,筆者的機(jī)器上在/bin目錄下天揖。

然后執(zhí)行cp /bin/sleep ./mysleep將可執(zhí)行文件拷貝到vagrant用戶的默認(rèn)登陸目錄,我們可以使用命令ls -l mysleep來查看文件的具體權(quán)限情況跪帝,如下圖所示:

vagrant@vagrant:~$ ls -l mysleep

-rwxr-xr-x 1 vagrant vagrant 35000 Oct 8 08:49 mysleep

接著我們?cè)诋?dāng)前窗口以root用戶來運(yùn)行這個(gè)拷貝過來的mysleep可執(zhí)行文件今膊,執(zhí)行命令sudo ./mysleep 100(100的含義是讓啟動(dòng)的進(jìn)程睡眠100s,我們有足夠的時(shí)間來觀察進(jìn)程的狀態(tài))伞剑,然后在另外一個(gè)窗口執(zhí)行ps ajf斑唬,在筆者的機(jī)器上輸出如下:

vagrant@vagrant:~$ ps ajf

?PPID? PID? PGID? SID TTY? ? ? TPGID STAT? UID? TIME COMMAND

16451 16452 16452 16452 pts/0? ? 16540 Ss? ? 1000? 0:00 -bash

16452 16540 16540 16452 pts/0? ? 16540 S+? ? ? 0? 0:00? \_ sudo ./mysleep 100

16540 16541 16540 16452 pts/0? ? 16540 S+? ? ? 0? 0:00? ? ? \_ ./mysleep 100

從輸出的UID列可以看出,sudo進(jìn)程和mysleep進(jìn)程都運(yùn)行在root賬號(hào)(0)黎泣,接著我們來將mysleep的setuid位打開恕刘,執(zhí)行命令:chmod +s mysleep,然后可以通過ls -l ./mysleep來查看文件的詳細(xì)信息抒倚,如下在筆者電腦上的輸出:

vagrant@vagrant:~$ ls -l mysleep

-rwsr-sr-x 1 vagrant vagrant 35000 Oct 8 08:49 mysleep

大家需要注意的是原來x位置變成了s褐着,標(biāo)記著setuid位被打開,我們重新運(yùn)行sudo ./mysleep 100托呕,并在另外一個(gè)窗口查看進(jìn)程列表的信息含蓉,如下圖所示:

vagrant@vagrant:~$ ps ajf

?PPID? PID? PGID? SID TTY? ? ? TPGID STAT? UID? TIME COMMAND

16451 16452 16452 16452 pts/0? ? 16546 Ss? ? 1000? 0:00 -bash

16452 16546 16546 16452 pts/0? ? 16546 S+? ? ? 0? 0:00? \_ sudo ./mysleep 100

16546 16547 16546 16452 pts/0? ? 16546 S+? ? 1000? 0:00? ? ? \_ ./mysleep 100

從輸出的UID列可以看出频敛,sudo進(jìn)程運(yùn)行在root賬戶下(0),而mysleep進(jìn)程這次運(yùn)行在1000號(hào)用戶下(也就是vagrant用戶)馅扣。setuid位主要用來給應(yīng)用程序足夠的權(quán)限來運(yùn)行斟赚。這么說可能有點(diǎn)繞,解釋setuid位最好的例子當(dāng)屬ping這個(gè)可執(zhí)行程序了岂嗓。

ping是Linux操作系統(tǒng)上用來檢測某個(gè)IP地址是否網(wǎng)絡(luò)可達(dá)的工具汁展,大家有所不知的是鹊碍,ping可執(zhí)行程序需要足夠的權(quán)限來發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包(ping不經(jīng)過TCP協(xié)議厌殉,直接發(fā)送IP數(shù)據(jù)包。在Linux系統(tǒng)中侈咕,這種權(quán)限也叫capabilities公罕,我們稍后會(huì)介紹到)。

雖然說ping是Linux操作系統(tǒng)上檢測網(wǎng)絡(luò)可達(dá)一個(gè)非常建立的工具耀销,但是從系統(tǒng)管理員的角度,讓大家歡樂的使用這個(gè)工具并不意味著所有用戶都應(yīng)該具備直接在sockets上發(fā)送raw network數(shù)據(jù)包,因?yàn)閻阂獾墓粽呷绻邆錂?quán)限葵诈,他肯定不會(huì)只發(fā)送ping這樣無趣的數(shù)據(jù)包了锻狗。

因此,在Linux操作系統(tǒng)上狰住,ping命令在安裝的時(shí)候會(huì)設(shè)置setuid位(文件的所有者是root用戶)张吉,普通的用戶就可以有足夠的權(quán)限來運(yùn)行ping進(jìn)行網(wǎng)絡(luò)問題診斷。接下來我們首先確定一下默認(rèn)情況下催植,ping工具的所有者是root用戶肮蛹,并且setuid位已經(jīng)被設(shè)置:

vagrant@vagrant:~$ ls -l /bin/ping

-rwsr-xr-x 1 root root 64424 Jun 28? 2019 /bin/ping

從上邊輸出的s位以及root可以看到默認(rèn)情況下,ping工具符合我們的預(yù)期创南。接下來我們通過命令cp /bin/ping ./myping來拷貝一份到登陸目錄伦忠,并且通過ls -l ./myping以及./myping 10.0.0.1來驗(yàn)證默認(rèn)情況下是否有權(quán)限執(zhí)行,在筆者的機(jī)器上操作的輸出如下:

vagrant@vagrant:~$ ls -l ./myping

-rwxr-xr-x 1 vagrant vagrant 64424 Oct? 8 15:02 ./myping

vagrant@vagrant:~$ ./myping 10.0.0.1

ping: socket: Operation not permitted

在Linux操作系統(tǒng)上稿辙,當(dāng)我們拷貝可執(zhí)行文件的時(shí)候昆码,文件的所有者會(huì)被設(shè)置為操作用戶(也就是用戶vagrant),但是為了安全起見邻储,setuid位不會(huì)被拷貝赋咽,這就是我們從上邊輸出可以看到s位被標(biāo)記為x,當(dāng)我們運(yùn)行這個(gè)叫myping的工具時(shí)芥备,操作系統(tǒng)顯示沒有足夠的權(quán)限冬耿。

我們可以嘗試通過sudo chown root ./myping來修改文件的所有者為root,重新運(yùn)行還是會(huì)報(bào)沒有權(quán)限萌壳,如下圖所示的輸出:

vagrant@vagrant:~$ ls -l ./myping

-rwxr-xr-x 1 root vagrant 64424 Oct? 8 15:02 ./myping

vagrant@vagrant:~$ ./myping 10.0.0.1

ping: socket: Operation not permitted

接下來我們給myping設(shè)置setuid位亦镶,執(zhí)行命令sudo chmod +s ./myping日月,并運(yùn)行l(wèi)s -l ./myping來檢查s設(shè)置成功,這樣我們就不需要通過sudo來運(yùn)行ping了缤骨,如下輸出所示:

vagrant@vagrant:~$ sudo chmod +s ./myping

vagrant@vagrant:~$ ls -l ./myping

-rwsr-sr-x 1 root vagrant 64424 Oct? 8 15:02 ./myping

vagrant@vagrant:~$ ./myping 10.0.0.1

PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.

64 bytes from 10.0.0.1: icmp_seq=1 ttl=63 time=3.46 ms

64 bytes from 10.0.0.1: icmp_seq=2 ttl=63 time=3.71 ms

^C

--- 10.0.0.1 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1002ms

rtt min/avg/max/mdev = 3.463/3.591/3.719/0.128 ms

通過給可執(zhí)行文件設(shè)置setuid位爱咬,普通用戶就可以有足夠的權(quán)限來運(yùn)行ping給網(wǎng)絡(luò)協(xié)議棧發(fā)送數(shù)據(jù)包。讀到這里讀者可能會(huì)說绊起,這不就是以root權(quán)限運(yùn)行ping嗎精拟?其實(shí)不然,如果你在ping運(yùn)行的過程中虱歪,打開另外一個(gè)窗口蜂绎,并運(yùn)行ps uf -C myping,從輸出的結(jié)果你會(huì)驚訝的發(fā)現(xiàn)笋鄙,這個(gè)進(jìn)程運(yùn)行在用戶vagrant下师枣,并不是預(yù)期的root,你會(huì)非常疑惑的看著這個(gè)輸出萧落,問為什么践美?

其實(shí)啊,在最新版本的操作系統(tǒng)內(nèi)核中找岖,ping可執(zhí)行文件在啟動(dòng)的時(shí)候陨倡,的確以root賬戶運(yùn)行,但是當(dāng)走了足夠的權(quán)限(capabilities)之后许布,操作系統(tǒng)會(huì)reset用戶ID到文件的所有者兴革,這就是我們上邊看到的為啥myping即便是設(shè)置了setuid之后,有root權(quán)限爹脾,但還是運(yùn)行在vagrant賬戶下帖旨。如果你對(duì)此還是存在疑問,可以在運(yùn)行myping之前灵妨,先在另外一個(gè)窗口啟動(dòng)strace -f -p <shell 進(jìn)程id>解阅,在筆者的機(jī)器上輸出如下圖所示:

《圖1.1 ping進(jìn)程啟動(dòng)后操作系統(tǒng)會(huì)調(diào)用系統(tǒng)調(diào)用重新設(shè)置UID》

我們說了這么多主要目的是想告訴各位讀者,如果我們?cè)诒热缯fbash這樣的登陸進(jìn)程上設(shè)置了setuid泌霍,那么風(fēng)險(xiǎn)就太高了货抄。任何登陸到系統(tǒng)的用戶,都會(huì)以root用戶所具有的權(quán)限來運(yùn)行朱转。不過當(dāng)前主流的Linux操作系統(tǒng)當(dāng)然不會(huì)這么天真蟹地,但是筆者想強(qiáng)調(diào)的是,我們運(yùn)行在容器中的應(yīng)用進(jìn)程藤为,很容易犯上邊介紹的安全錯(cuò)誤怪与。具體來說,我們編寫的應(yīng)用程序不恰當(dāng)?shù)脑O(shè)置了setuid缅疟,運(yùn)行起來后持有root權(quán)限分别,結(jié)果就是黑客如果攻破了容器中的應(yīng)用程序遍愿,那么就可以在進(jìn)程中運(yùn)行代碼來啟動(dòng)shell(以root運(yùn)行)。

因此在很多容器安全靜態(tài)掃描工具中耘斩,會(huì)非常關(guān)注那些設(shè)置了setuid的文件和可執(zhí)行程序沼填,另外筆者建議大家在啟動(dòng)容器進(jìn)程的時(shí)候,最好使用--no-new-privileges選項(xiàng)括授。

setuid這個(gè)標(biāo)記位是在操作系統(tǒng)發(fā)展的早期引入的坞笙,當(dāng)時(shí)系統(tǒng)的權(quán)限系統(tǒng)還比較簡單直接:有權(quán)限或者沒有權(quán)限。而setuid提供了給普通非root用戶執(zhí)行需要root權(quán)限可執(zhí)行程序的機(jī)制荚虚。從Linux內(nèi)核版本2.2開始薛夜,權(quán)限控制的粒度更加細(xì),我們可以通過capabilities來控制用戶的權(quán)限曲管。

在Linux的最新版本內(nèi)核上却邓,總共有超過30+的capabilities,我們可以講capabilities賦予線程來執(zhí)行對(duì)應(yīng)的操作院水。比如線程需要CAP_NET_BIND_SERVICE capability來使用小于1024的端口號(hào);CAP_SYS_BOOT用來賦予線程重啟系統(tǒng)的能力简十;CAP_SYS_MODULE用來賦予線程加載或者卸載操作系統(tǒng)內(nèi)核模塊的能力檬某。

回到我們前邊一直用來演示的工具ping,線程需要持有CAP_NET_RAW來給網(wǎng)絡(luò)協(xié)議棧直接發(fā)送ping數(shù)據(jù)包螟蝙。我們首先確定bash命令的進(jìn)程編號(hào)恢恼,然后通過getpcaps的輸出可以看到bash默認(rèn)情況下,沒有賦予任何capabilities胰默,

vagrant@vagrant:~$ ps

? PID TTY? ? ? ? ? TIME CMD

16452 pts/0? ? 00:00:00 bash

16686 pts/0? ? 00:00:00 ps

vagrant@vagrant:~$ getpcaps 16452

Capabilities for `16452': =

vagrant@vagrant:~$ sudo bash

root@vagrant:~# ps

? PID TTY? ? ? ? ? TIME CMD

16689 pts/0? ? 00:00:00 sudo

16692 pts/0? ? 00:00:00 bash

16700 pts/0? ? 00:00:00 ps

root@vagrant:~# getpcaps 16692

Capabilities for `16692': = cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read+ep

然后我們以root賬號(hào)運(yùn)行bash场斑,通過輸出的capabilties for部分可以看到shell就具備了很多權(quán)限。最后我們來看看如何給myping應(yīng)用賦予對(duì)應(yīng)的權(quán)限來讓普通用戶可以執(zhí)行ping命令牵署。

首先我們把之前已經(jīng)設(shè)置過setuid的myping文件刪除漏隐,然后重新拷貝一份到登陸目錄,并且通過命令./myping 10.0.0.1來檢查一下默認(rèn)情況下操作不被允許奴迅,沒有足夠的權(quán)限青责。

接著,我們使用setcap來將權(quán)限賦予拷貝過來的myping可執(zhí)行程序取具,我們需要通過root命令來給文件賦予某項(xiàng)權(quán)限脖隶,運(yùn)行命令sudo setcap 'cap_net_raw+p' ./myping,接下來我們可以運(yùn)行l(wèi)s -l ./myping和getcap ./myping來檢查文件是否已經(jīng)持有給網(wǎng)絡(luò)協(xié)議棧發(fā)送數(shù)據(jù)的權(quán)限暇检,在筆者的機(jī)器上輸出如下:

vagrant@vagrant:~$ sudo setcap 'cap_net_raw+p' ./myping

vagrant@vagrant:~$ ls -l ./myping

-rwxr-xr-x 1 vagrant vagrant 64424 Oct? 9 00:59 ./myping

vagrant@vagrant:~$ getcap ./myping

./myping = cap_net_raw+p

最后我們重提一下權(quán)限提升這個(gè)話題产阱,在安全領(lǐng)域,權(quán)限提升(privilege escalation)的意思是通過某種手段來提升自己持有的權(quán)限块仆,以期執(zhí)行默認(rèn)不被允許的操作构蹬。惡意攻擊者一般都是通過系統(tǒng)的漏洞或者配置漏洞來獲取額外的權(quán)限來達(dá)成攻擊的目的酿矢。

通常情況下,惡意攻擊者都不具備執(zhí)行特殊操作的權(quán)限怎燥,因此大部分黑客的首要目標(biāo)就是獲取root權(quán)限瘫筐,一個(gè)非常常見的做法就是掃描機(jī)器上以root權(quán)限運(yùn)行的進(jìn)程,然后基于對(duì)運(yùn)行在進(jìn)程中應(yīng)用已知安全漏洞信息铐姚,來執(zhí)行惡意代碼策肝。如果web服務(wù)器以root賬戶運(yùn)行,那么任何運(yùn)能夠運(yùn)行在web服務(wù)器中的代碼隐绵,都可能被黑客控制來提升到root權(quán)限之众,因此我們?cè)谶\(yùn)行web應(yīng)用程序的時(shí)候,一定要建立單獨(dú)的賬戶依许。

回到容器領(lǐng)域棺禾,默認(rèn)情況下,容器進(jìn)程以root賬戶運(yùn)行峭跳,因此運(yùn)行在容器中的應(yīng)用程序有極高的可能性以root賬戶運(yùn)行在宿主機(jī)上膘婶,造成的風(fēng)險(xiǎn)是如果惡意攻擊者從容器中逃逸出來,那么就會(huì)以root賬戶運(yùn)行在宿主機(jī)上蛀醉,那么我們?cè)趹?yīng)用程序的數(shù)據(jù)安全悬襟,穩(wěn)定性就會(huì)收到極大的威脅。

那么是不是不讓容器進(jìn)程以root賬戶運(yùn)行就沒有風(fēng)險(xiǎn)了拯刁,其實(shí)不是脊岳,我們?cè)谶@篇文章中介紹了setuid以及賦予非root賬戶capabilities可以用來提升權(quán)限,因此我們必須從應(yīng)用配置以及操作系統(tǒng)多個(gè)維度來審視安全垛玻,筆者會(huì)在后續(xù)的文章中詳細(xì)介紹how如何做的問題割捅。

好了,這篇文章就真沒多了帚桩,下篇文章我們繼續(xù)聊容器的三個(gè)基石之一control groups亿驾,敬請(qǐng)期待!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末朗儒,一起剝皮案震驚了整個(gè)濱河市颊乘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌醉锄,老刑警劉巖乏悄,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異恳不,居然都是意外死亡檩小,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門烟勋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來规求,“玉大人筐付,你說我怎么就攤上這事∽柚祝” “怎么了瓦戚?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丛塌。 經(jīng)常有香客問我较解,道長,這世上最難降的妖魔是什么赴邻? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任印衔,我火速辦了婚禮,結(jié)果婚禮上姥敛,老公的妹妹穿的比我還像新娘奸焙。我一直安慰自己,他們只是感情好彤敛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布与帆。 她就那樣靜靜地躺著,像睡著了一般臊泌。 火紅的嫁衣襯著肌膚如雪鲤桥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天渠概,我揣著相機(jī)與錄音,去河邊找鬼嫂拴。 笑死播揪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的筒狠。 我是一名探鬼主播猪狈,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼辩恼!你這毒婦竟也來了雇庙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤灶伊,失蹤者是張志新(化名)和其女友劉穎疆前,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體聘萨,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡竹椒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了米辐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胸完。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡书释,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赊窥,到底是詐尸還是另有隱情爆惧,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布锨能,位于F島的核電站扯再,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏腹侣。R本人自食惡果不足惜叔收,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望傲隶。 院中可真熱鬧饺律,春花似錦、人聲如沸跺株。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乒省。三九已至巧颈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間袖扛,已是汗流浹背砸泛。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛆封,地道東北人唇礁。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像惨篱,于是被迫代替她去往敵國和親盏筐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容