새벽에 알림이 울렸습니다.
서버가 느리다. 응답이 안 온다. 처음엔 트래픽이 몰렸나 했어요. 근데 방문자는 평소랑 똑같았습니다. 트래픽은 그대로인데 서버만 헐떡이고 있었죠.
어? 이상하죠. 손님은 그대론데 주방이 불난 것처럼 바쁘다?
접속해서 확인해보고 등골이 서늘해졌습니다. CPU가 계속 100%에 붙어 있었어요. 아무도 시키지 않은 일을, 누군가가 제 서버에 계속 시키고 있었던 겁니다.
암호화폐 채굴 악성코드가 뭐냐면
크립토재킹(cryptojacking, 남의 컴퓨터를 몰래 써서 암호화폐를 캐는 공격)이라는 게 있습니다.
비유하자면 이래요. 누가 내 집 전기를 몰래 끌어다가, 우리 집 지하실에서 자기 채굴기를 돌리는 겁니다. 전기세는 내가 내고, 코인은 그 사람이 가져가요.
서버도 똑같습니다. 공격자는 내 서버를 훔쳐서 암호화폐를 캡니다. 채굴은 CPU를 미친 듯이 쓰거든요. 그래서 증상이 아주 특징적이에요. 트래픽은 그대로인데 CPU만 계속 최대치. 이게 제일 흔한 신호입니다.
돈 나가는 건 나. 코인 버는 건 남. 그 와중에 내 서비스는 느려터져서 사용자만 떠나고요.

어떻게 들어왔을까
솔직히 처음엔 "내가 뭘 잘못했지?" 싶었어요. 비밀번호를 흘린 적도 없는데.
근데 크립토재킹은 대부분 비밀번호를 훔쳐서 들어오는 게 아닙니다. 열려 있는 문으로 그냥 걸어 들어옵니다.
앞 글에서도 얘기했지만, 봇들은 하루종일 인터넷을 훑으면서 열린 문을 찾아다녀요. 관리 도구가 노출돼 있거나, 오래된 소프트웨어에 알려진 취약점이 있거나, 안 쓰는 포트가 열려 있거나. 그런 틈 하나만 있으면 됩니다.
한마디로, 나를 노려서 온 게 아니라 열려 있어서 들어온 겁니다. 이게 더 무서워요. 특별히 미움받아서가 아니라, 그냥 문이 열려 있었다는 이유만으로 당하는 거니까요.
그래서 어떻게 했나
여기서 중요한 판단을 하나 했습니다. 악성코드만 지우고 끝내지 않았습니다.
이게 포인트예요. 눈에 보이는 채굴 프로세스만 죽이면 당장은 조용해집니다. 근데 공격자가 어디에 또 뭘 심어뒀는지 알 수가 없어요. 자동으로 다시 살아나게 해뒀을 수도 있고요. 반쯤 청소한 집에서 계속 사는 건, 안 하느니만 못합니다.
그래서 서버를 통째로 갈아엎었습니다. 처음부터 다시 세운 거죠. 번거롭지만, 침해당한 서버는 이게 정석입니다.
그리고 새로 세우면서 문을 하나하나 다 잠갔습니다.
- 안 쓰는 포트는 방화벽에서 전부 닫았습니다.
- 관리 도구(젠킨스 같은 것)는 외부에서 아예 못 들어오게 막았습니다.
- 서비스마다 HTTPS를 제대로 다시 걸었습니다.
- 도커 권한도 최소한으로 조였습니다.
"편해서 열어뒀던 것들"을 전부 "필요한 사람만 들어오게" 바꾼 겁니다.
마무리
솔직히 이 일 겪기 전엔 보안을 좀 만만하게 봤어요. "설마 나 같은 작은 서버를" 싶었죠.
근데 아니었습니다. 공격은 나를 골라서 오는 게 아니라, 열린 문을 골라서 옵니다. 크기는 상관없어요. 문이 열려 있으면 들어옵니다.
한마디로, 서버 보안은 "털리고 나서"가 아니라 "털리기 전에" 문을 잠그는 일입니다. 지금 운영 중인 서버가 있다면, 딱 두 가지만 확인해보세요. 안 쓰는 포트가 열려 있는지, 그리고 관리자 도구가 바깥에서 열리는지. 이 둘만 막아도 대부분의 자동 공격은 그냥 지나갑니다.
제가 새벽에 알림 받고 배운 걸, 여러분은 조용한 낮에 미리 점검하는 걸로 끝내시길 바랍니다.
'서버, 인프라' 카테고리의 다른 글
| 왜 CI 서버(젠킨스)는 외부에 노출하면 안 될까 (0) | 2026.09.22 |
|---|---|
| SSL 인증서 7개가 한날 만료됐다 — certbot이 없었던 대가 (0) | 2026.09.21 |
| 그래서 보안과 편의 사이, 어디에 서야 할까 (0) | 2026.06.21 |
| Jenkins 자동배포, 보안이랑 403이랑 한참 싸웠습니다 (0) | 2026.06.20 |
| 7개 도메인을 무중단으로 HTTPS 이전한 이야기 (0) | 2026.06.19 |