這篇文章請佐以我在Youtube的影片使用:
(影片才是重點,這邊算是小小筆記)
這次分享的是容器安全的防禦方法之一
利用的是Docker的參數no-new-privileges
no-new-privileges可以限制容器內的SUID/SGID的提權
(其實也不僅僅限於SUID/SGID,想了解更多,可以參考Docker官方文件或是Linux Kernel)
以下為影片中使用的程式碼
(不要認真管語法或是寫法正不正確,反正可以執行就好XD)
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid(0);
system("id");
}
Code language: PHP (php)
影片中使用的是網路上隨便找到的IMAGE
https://hub.docker.com/r/yeasy/simple-web/
如果需要跟我使用一樣的IMAGE的話,記得要先pull下來
docker pull yeasy/simple-web
影片中的NOTE
(影片裡面因為IMAGE NAME錯誤,這邊有修正)
NOTE:
1. HOST demo chmod +x execute-id
2. HOST demo chmod 4755 execute-id
3. Container demo w/o no-new-privilege chmod 4755 execute-id
docker run -it -p 8088:80 yeasy/simple-web:latest
4. Container demo w/ no-new-privilege chmod 4755 execute-id
docker run -it -p 8088:80 --security-opt no-new-privileges yeasy/simple-web:latest
Code language: JavaScript (javascript)
其他參考的指令
#從HOST傳送檔案到Container當中
docker cp ./execute-id b3e525054855:/code
#進入Container當中的/bin/bash
docker exec -it container_name /bin/bash
Code language: PHP (php)