이쿠의 슬기로운 개발생활

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

반응형

클라우드 165

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..

18. Docker image layer 정보 확인

docker image layer 정보 확인 목표 docker 명령을 통해 pull 받은 image layer는 어디에 저장되고 실행되고 있는 container의 directory는 host에서 어떻게 관리하는지 알아봄. Test 환경 [Docker : 20.10.12] Docker image layer 정보 확인 결론부터 말하자면 docker로 pull 받은 image layer 정보는 /var/lib/docker/overlay2/ 에 저장됨 image 하나를 예로 설명. docker image 목록 중 python:3.8 image를 구성하는 layer 정보로 설명 [image 확인] [해당 python image layer 정보 확인] 명령어 docker inspect python:3.8 [결과] ..

클라우드/Docker 2022.07.05

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 취약..

ansible-vault 리서치

ansible-vault 리서치 문제 상황 inventory 파일에 작성하는 host 정보 중 sudo 옵션 관련 root password, ssh password 접속 관련 user password 등 민감 정보를 저장해야하는 경우가 있음. 이런 민감 정보가 invetory 파일에 평문으로 작성되는 경우 보안적으로 큰 문제가 됨. 해당 정보를 encryption 해서 저장할 수 있는 방법에 대해 리서치 하던 중 ansible-vault를 알게되어 사용법을 정리함. ex) 문제가 되는 inventory file ansible-vault란 ansible이 설치되면 default로 ansible-vault도 함께 설치가 됨. Ansible Vault는 inventory, playbook의 변수나 파일을 암호..

Ansible dynamic inventory란?

Ansible dynamic inventory란? 문제 상황 ansible 사용 시 inventory를 작성할 때 host가 수가 매우 많거나 autoscaling 이나 외부 application들에 의해 관리되어서 host 수가 유동적인 경우 inventory를 작성하기 어려움. 이를 해결하기 위한 방법을 찾아보던 중 Dynamic inventory를 찾아서 사용법을 알아보기로 함. Ansible Dynamic inventory란? Ansible은 Inventory를 통해 정보를 아주 편하게 playbook으로 넘길 수 있음 하지만 이 inventory의 단점은 정보가 정적이라는 것임. 즉 inventory에 있는 정보는 사용자가 직접 수정하지 않은 이상 변하지 않음. 이 단점이 host가 적은 경우에..

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..

반응형