도커 크립토재킹 방지하기

로컬에서 테스트한다고 도커로 Redis 컨테이너를 띄워놨는데, 이상한 키가 들어있길래 monitor를 켜서 확인해보니, 실제로 외부에서 이런식으로 FLUSHALL + SET이 되었다.

보안팀에서 내 PC에서 의심스러운 IP와 통신이 발생한 이력이 있다고 연락이 왔는데, public IP가 부여된 PC에 패스워드 없이, 모든 호스트 대상으로 레디스 컨테이너가 떠 있는게 화근이었다.

New Kiss-a-dog Cryptojacking Campaign Targets Docker and Kubernetes
CrowdStrike has identified a new cryptojacking campaign, called “Kiss-a-dog,” which has been observed targeting vulnerable Docker and Kubernetes infrastructure.

실제로 몇 년 전부터 꾸준히 발생하고 있는 크립토재킹 캠페인이라고 한다.

redis에만 국한된 것은 아니고, 비슷한 유형의 공격이 MYSQL 등의 컨테이너에도 사용된다고 한다.

Docker 컨테이너 로컬에 띄울 때 주의사항

  1. 컨테이너 띄울 때 모든 호스트 대상으로 포트포워딩을 하지 않는다. 대신, 화이트리스트를 설정하거나, 로컬에서 쓸거면 localhost만 붙을 수 있도록 띄운다
  2. 컨테이너에서 사용하는 앱에 패스워드를 설정한다
  3. PC에 방화벽 설정을 한다 (iptables, ipfw 등)
  4. 공인 IP가 필요 없으면 라우터 밑에 붙인다

아래는 redis docker container 띄울 때, localhost에서만 접속할 수 있게 + 패스워드 설정까지 한 예시다.

docker run --name my-redis -p 127.0.0.1:6379:6379 redis redis-server --requirepass "MY_PASSWORD"