이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

반응형

클라우드/Kubernetes 105

105. kubectl cp 명령 특징

kubectl cp 명령 특징 목표 kubectl cp 명령의 특징에 대해 알아봄 kubectl cp 특징 (tar) kubectl cp 명령은 kubernetes cluster에 배포되어있는 pod간에 file, directory 복사를 해주는 명령어. pod -> host host > pod 전송이 가능함. https://github.com/kubernetes/kubectl/blob/master/pkg/cmd/cp/cp.go kubectl 코드의 cp 부분을 확인해 보면 cp 명령은 tar를 통해 진행된다는 것을 알 수 있음. # !!!Important Note!!! Requires that the 'tar' binary is present in your container # image. If 'ta..

104. 실행 중인 container에 mount하는 방법

실행 중인 container에 mount하는 방법 목표 kubernetes cluster에서 container mount 는 pod 생성 시에 volume 설정을 통해 mount하는 방법이 있음. 하지만 이미 running 상태로 동작 중인 pod의 container에 mount해야하는 경우도 있음. 이에 따라 실행 중인 container에 mount하는 방법을 알아봄. test 환경 kubernetes cluster 중 control node에서 test를 진행함 kubernetes cluster에서 container runtime으로 containerd를 사용하고 있음. cluster 정보는 다음과 같음 [Containerd : 1.4.12] kubernetes cluster에 배포되어있는 conta..

103. gVisor와 runtimeclass

gVisor 목표 kubernetes gVisor는 무엇이며, 어떤 경우에 사용해야하고 어떻게 사용해야하는지 알아봄 Container 취약점 container runtime tool을 통해 생성된 일반적인 Container는 아래와 같이 Host의 kernel을 공유하고 있음. 실제로 확인해보면 다음과 같이 container에서 실행한 system call 명령이 container에서 실행한 결과와 host의 결과가 동일한 것을 확인할 수 있음. 이러한 container의 특징은 보안적으로 문제가 될 수 있음. 다음과 같이 특정 container를 통해서 공격자가 kernel에 접근해서 다른 container를 공격할수도 있고 host kernel자체를 공격할 수 있음. 예를 들면 Dirty Cow 취약..

102. Kubernetes 보안 설정 node-restriction.kubernetes.io

kubernetes 보안 설정 node-restriction.kubernetes.io 취약점 분석 kube-apiserver의 --enable-admission-plugin 항목을 확인해보면 default로 NodeRestriction 항목이 활성화 되어있는 것을 확인할 수 있음. 해당 NodeRestriction 설정은 어떤 역할을 하는지 찾아봄. 일반적으로 worker node는 kubelet을 통해서 master(control) node의 kube-apiserver와 통신할 수 있음. 즉 worker node의 kubectl 사용 시 별도의 인증 계정을 만들지 않고도 worker node에 이미 배포되어있는 kubelet의 인증권한을 사용하면 kube-apiserver와 통신하여 kubectl to..

101. Kubernetes 보안 설정 --insecure-port=0

kubernetes 보안 설정 --insecure-port=0 취약점 분석 kubernetes 1.20 version 이하는 --insecure-port 설정이 존재하지만 1.20 이상 version은 kube-apiserver의 --insecure-port 설정이 없음. 해당 --insecure-port 설정이 왜 없어졌는지 알아봄. --insecure-port설정은 kube-apiserver 에 http 형식으로 접근을 허가하는 설정임. --insecure-port가 8080 등 다른 port로 설정되어있으면 보안에 치명적임. kubernetes 1.20 version 이상은 해당 --insecure-port없어서 안전함. 아래와 같이 https 로만 접근이 가능하고 http는 접근이 불가능함. 하지..

100. Kubernetes 보안 설정 --anonymous-auth=false

kubernetes 보안 설정 --anonymous-auth=false 취약점 분석 kube-apiserver는 인가된 사용자 뿐만 아니라 anonymous user도 접속이 허용됨. 실제로 확인해보겠음. [anonymous user로 kube-apiserver 접속 확인] 이와 같이 계정을 명시하지 않은 상태로 kube-apiserver에 접속하게 되면 system:anonymous 라는 계정으로 접속이 허용됨. 실제로 kube-apiserver static pod 설정을 확인해보면 anonymous에 대한 설정이 없음 anonymous-auth에 대한 설정이 없으면 default로 true 처리가 되어 anonymous 계정도 접속이 허가됨. 이런경우 보안적으로 취약점이 발생함. 결론 kube-api..

99. Kubernetes 보안 설정 automountServiceAccountToken: false

automountServiceAccountToken: false 설정 취약점 분석 모든 namespace에는 default ServiceAccount가 존재하고 있음. 아래와 같이 default sa 확인 가능. [namespace service account 확인] 이러한 default ServiceAccount는 pod를 생성할 때 사용됨. pod와 ServiceAccount에 별도의 설정이 없다면 kubernetes는 default로 Pod 생성 시 ServiceAccount를 무조건 사용하게 되어 있음. 즉 관리자가 별도로지 pod를 생성할 때 ServiceAccount를 지정하지 않아도 Pod를 확인해 보면 자동으로 ServiceAccount가 mount되어 있는것을 확인할 수 있음. 위 ima..

98. kube-bench

kube-bench 목표 kubernetes 취약점 점검 tool은 kube-bench 사용법에 대해 알아봄 kube-bench란? Aqua security에서 개발한 것으로 kube-bench는 kubernetes cluster가 보안적으로 안전하게 구성되어있는지 검사해주는 tool임. CIS Kubernetes Benchmark 문서를 기반으로 kubernetes cluster의 취약점을 확인해줌. 취약점 scan 결과를 PASS, FAIL, WARN 3가지로 출력해주고 FAIL, WARN 항목에 대해서는 Remediations 항목에서 어떻게 하면 개선되는지 가이드까지 해줌. CIS Benchmark 란? CIS(Center for Internet Security, 비영리 조직)에서 배포하는 보안 ..

97. Container 관련 기술 리서치

Container 관련 기술 리서치 개발하는데 Container에 대한 자세한 이해가 필요해서 Container관련 기술에 대해서 글로 정리하며 다시 한번 복습 및 리서치를 진행해봄. 리서치와 복습만이 살길이다....ㅠㅠ Container란? 제가 아는 내용을 설명드릴려고 하면 일단 Linux와 Windows는 별개로 설명드려야할 것 같음. linux Container linux container는 리눅스 네임스페이스(Linux namespaces), 컨트롤 그룹(cgroup), 루트 디렉터리 격리(chroot) 등의 커널 기능을 활용해서 linux 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술임. [container의 대표적인 특징] 1. stateless하게 동작해서 container 상..

96. kubeadm 설치 에러 : kubelet error

failed to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" 상황 kubeadm을 사용해서 kubernetes cluster 구성 시 error 발생함 [사용한 명령어] kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=10.0.2.15 ERROR MSG [kubeadm Err msg] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s [kubelet-c..

반응형