도커 크립토재킹 방지하기
로컬에서 테스트한다고 도커로 Redis 컨테이너를 띄워놨는데, 이상한 키가 들어있길래 monitor를 켜서 확인해보니, 실제로 외부에서 이런식으로 FLUSHALL + SET이 되었다.
보안팀에서 내 PC에서 의심스러운 IP와 통신이 발생한 이력이 있다고 연락이 왔는데, public IP가 부여된 PC에 패스워드 없이, 모든 호스트 대상으로 레디스 컨테이너가 떠 있는게 화근이었다.
실제로 몇 년 전부터 꾸준히 발생하고 있는 크립토재킹 캠페인이라고 한다.
redis에만 국한된 것은 아니고, 비슷한 유형의 공격이 MYSQL 등의 컨테이너에도 사용된다고 한다.
Docker 컨테이너 로컬에 띄울 때 주의사항
- 컨테이너 띄울 때 모든 호스트 대상으로 포트포워딩을 하지 않는다. 대신, 화이트리스트를 설정하거나, 로컬에서 쓸거면 localhost만 붙을 수 있도록 띄운다
- 컨테이너에서 사용하는 앱에 패스워드를 설정한다
- PC에 방화벽 설정을 한다 (iptables, ipfw 등)
- 공인 IP가 필요 없으면 라우터 밑에 붙인다
아래는 redis docker container 띄울 때, localhost에서만 접속할 수 있게 + 패스워드 설정까지 한 예시다.
docker run --name my-redis -p 127.0.0.1:6379:6379 redis redis-server --requirepass "MY_PASSWORD"