← 목록

해킹당한 서버 되살리기 (침해 조사부터 하드닝까지)

#security#hardening#wireguard#incident

취미로 마인크래프트 서버를 하나 돌리고 있었다. 만들어두고 신경 꺼두고 있었음. 방치해놨더니 서버 개판돼있고 기존 서버 유저는 내 욕하고 서버 나갔다... 총체적으로 기분 나쁜 일이긴 한데 어쨌든 소는 잃어도 외양간은 고쳐야 하는 법. 기분 상해있어봐야 소용없으니 그냥 절차대로 처리하기로 했다.

지금도 들어와 있나?

제일 먼저 확인할 건 침해가 현재 진행형인지 여부다. 이미 나갔는지 아직 안에 있는지부터 봐야 한다.

  • 로그인 기록(last, journalctl)에서 내가 모르는 세션이 있는지
  • 낯선 프로세스, 크론, 시작 서비스가 등록돼있는지
  • rkhunter, chkrootkit, debsums로 바이너리가 변조됐는지 스캔
  • ss -tulnp로 열린 포트를 전부 뽑아서 실제로 필요한 것과 대조

다행히 루트킷이나 백도어 흔적은 없었다. 시스템이 통째로 뚫린 게 아니라 게임 서버 자체의 약한 지점이 악용된 거였음

진짜로 열려있던 통로

방화벽만 믿으면 안된다.

UFW로 다 막았다고 생각하고 있었다. 그런데 실제 인터넷 노출은 Cloudflare 터널을 통해 뚫려 있었다. 터널은 방화벽을 우회해서 내부 서비스를 밖으로 빼준다. 즉 UFW 규칙이랑은 상관없이 열려있다.

터널 설정을 열어보니 굳이 공개할 필요가 없는 것까지 여러 개가 밖으로 나가 있었다. 정말 공개해야 하는 www 하나만 남기고 나머지는 전부 지웠다.

그러니까 "뭐가 열려있나"를 볼 때는 방화벽 규칙만 볼게 아니라 포트포워딩, 터널, 프록시까지 경로를 전부 합쳐서 봐야 한다. 한 군데만 봐선 이번처럼 놓친다.

관리용은 전부 VPN 뒤로

관리용 서비스는 인터넷에서 아예 안 보이는 게 맞다. WireGuard를 세우고(UI는 wg-easy를 썼음), 내부 서비스는 전부 VPN 대역에만 바인딩했다. 이제 밖에서 접근 가능한 건 이 정도

2222/tcp   SSH (비번인증 + fail2ban + MaxAuthTries)
51820/udp  WireGuard
게임 포트   최소한만

나머지 관리 UI, DB, 대시보드는 VPN에 붙지 않으면 라우팅 자체가 닿지 않는다. 포트를 막른정도가 아니라 경로를 아예 없앴다.

하드닝

여기까지 하고 나서 나머지를 손봤다.

  • SSH: X11 포워딩 끄고, LogLevel VERBOSE로 로그를 더 남기게
  • auditd로 민감한 파일에 감시 룰을 걸어둠
  • 시스템 업데이트하고 안 쓰는 패키지 정리
  • Lynis로 감사를 돌려서 점검. 점수가 59에서 67로 올랐다.

Lynis가 권하는 것 중에 홈 서버한테는 과한 것들도 있었다(파티션 분리 같은것). 만점을 받는게 목적은 아니라서 상황에 맞는 만큼만 하기로 했다.

사실은...

그냥 마크 화리 걸어놓고 겜 했으면 이 모든 사달이 나지 않았을 것이다.

마치며

테러당한건 짜증났지만 덕분에 서버는 확실히 단단해졌다.

← 목록으로
오늘 0·전체 0