목차

  1. Step 1. 모든 서버에 공인 IP를 줬더니
  2. Step 2. 2005년 데이터센터: DMZ의 등장
  3. Step 3. 내부 DB가 패치를 못 받는다
  4. Step 4. "NAT 있으면 밖에서도 DB 들어올 수 있는 거 아냐?"
  5. Step 5. 급하다고 DB SSH를 열었더니
  6. Step 6. 데이터센터를 AWS로 옮기기
  7. Step 7. Private Subnet인데 Web에서 DB로 접속이 된다
  8. Step 8. "내부끼리는 전부 허용"으로 SG를 걸었더니
  9. 정리하며

과제 1에서 Web, App, DB 서버를 나누고 이중화까지 했다. 그런데 이 서버들이 어떤 네트워크에 어떻게 놓이는지는 전혀 다루지 않았다. 과제 2는 그 빈칸을 채우는 과제다. 모든 서버를 인터넷에 그냥 연결한 상태에서 시작해서, 2005년 데이터센터를 설계해 보고, 그 구조를 AWS로 옮긴 뒤, 마지막으로 내부에 들어온 공격자의 이동까지 막는 순서로 진행했다.

Step 1. 모든 서버에 공인 IP를 줬더니

2-1_step1_all_public.png

문제 하루 만에 DB 서버 3306 포트로 전 세계에서 로그인 시도가 들어왔다.

Web, App, DB 세 서버 모두 공인 IP를 받아 인터넷에 직접 연결했다. 하루 만에 DB 서버 3306 포트로 전 세계에서 로그인 시도가 들어왔다. DB는 외부 사용자와 통신할 일이 전혀 없는데도 인터넷에 노출되어 있었던 것이다.

처음에는 "DB 비밀번호만 강하게 걸면 괜찮지 않나?"라고 생각했다. 그런데 이건 잘못된 생각이었다. 비밀번호는 들어오는 시도를 막는 마지막 방어선일 뿐이고, 시도 자체가 가능하다는 건 이미 공격면이 열려 있다는 뜻이다. DB 소프트웨어에 인증 우회 취약점이 하나만 나와도 비밀번호는 의미가 없어진다. 애초에 닿을 수 없게 만드는 것이 먼저다.

그래서 서버를 나누는 기준을 "이 서버가 인터넷과 직접 통신해야 하는가"로 잡았다.