백도어는 정상적인 로그인을 건너뛰고 다시 들어오는 경로입니다. 작동 방식과 찾아내고 막는 방법을 정리합니다(설치·사용 방법은 다루지 않습니다).
어디서 생기고, 왜 계속 남는가
백도어는 단독으로 나타나는 일이 드물고, 최초 침입과 한 묶음으로 옵니다. 공격자는 어떻게든 발판을 얻은 뒤 다시 돌아올 길을 남깁니다. 그래서 까다롭습니다. 원래의 취약점을 고쳐도 접근이 끝나지 않습니다.
1. 최초 침입
취약점이나 탈취된 자격 증명으로 발판을 얻는다
2. 뒷문 설치
인증을 우회하는 진입 경로를 남긴다
3. 반복적인 재접속
취약점을 고친 뒤에도 들어올 수 있다
4. 데이터 유출
명령 서버와 통신하고 데이터가 밖으로 나간다
뒷문은 침입당한 서버에 나중에 추가되는 것만이 아닙니다. 2024년에 발견된 xz-utils 백도어는 다른 형태였습니다. 오랜 시간 메인테이너의 신뢰를 얻은 인물이 널리 쓰이는 압축 라이브러리의 배포 소스에 심었습니다(CVE-2024-3094). 즉 자기 서버가 한 번도 침입당하지 않아도, 가져다 쓰는 부품을 통해 뒷문이 들어올 수 있습니다. 어느 형태든 결론은 같습니다. 취약점을 고쳤다고 안전한 것은 아닙니다. 발판이 남아 있지 않은지 확인하세요.
사례: 릴리스와 업데이트에 심긴 백도어
이 사이트에서 다룬 사례와 널리 알려진 공개 사례입니다.
| 사례 | 심긴 곳 | 알게 된 점 |
|---|---|---|
| XZ Utils(2024) | 압축 라이브러리의 릴리스 파일(CVE-2024-3094, CVSS 10.0) | 한 엔지니어가 설명되지 않는 속도 저하를 조사하다가, 안정판에 널리 배포되기 전에 발견됐다 |
| SolarWinds Orion(2020) | 모니터링 소프트웨어의 정상 업데이트 | 회사의 SEC 제출 문서는 영향받은 업데이트를 설치한 고객이 18,000곳 미만이라고 밝혔다. 미국 CISA는 연방 기관에 해당 제품의 연결을 끊으라는 긴급 지시를 내렸다 |
| MOVEit Transfer(2023) | 취약점을 통해 도달한 웹 서버(웹 셸) | 제로데이로 웹 셸이 설치되고, 그 뒤의 데이터베이스에서 데이터가 통째로 빠져나갔다 |
세 사례 모두 사용자는 정상적인 제품을 정상적인 절차로 쓰고 있었습니다. 자기 서버가 침입당하지 않더라도, 받아들이는 부품이나 업데이트 안에 백도어가 들어올 수 있습니다.
백도어와 비슷한 용어
| 용어 | 뜻 | 백도어와의 관계 |
|---|---|---|
| 백도어 | 인증을 우회해 다시 들어오는 숨은 경로 | — |
| 취약점 | 소프트웨어의 결함, 의도하지 않은 구멍 | 최초 침입에 쓰이는 경우가 많고, 그 뒤에 백도어가 설치된다 |
| 트로이 목마 | 유용한 소프트웨어로 위장한 악성코드 | 안에 백도어를 품고 있을 수 있다 |
| RAT(원격 접근 트로이 목마) | 감염된 기기를 원격 조작하는 악성코드 | 기기에서 백도어가 취하는 전형적인 형태 |
| 웹 셸 | 웹 서버에 놓인 악성 조작 스크립트 | 웹 서버에서 백도어가 취하는 전형적인 형태 |
정당한 원격 유지보수와의 차이
'기계를 원격으로 조작하는 수단'이라는 점에서 정당한 원격 유지보수와 백도어는 비슷해 보입니다. 차이는 통제가 있는지입니다.
정당한 원격 유지보수
관리자가 존재를 알고, 인증과 접근 제어 아래에 있으며, 감사 로그에 나타납니다. 누가 언제 무엇을 했는지 추적할 수 있습니다. 허가를 받아 만들어졌습니다.
백도어
공격자가 몰래 심고, 인증을 우회하며, 기록을 남기지 않도록 만들어집니다. 아무도 추적하지 않고 아무도 통제하지 않는 보이지 않는 입구입니다.
탐지와 예방
하나의 대책이 아니라 세 가지를 조합합니다. 들어오는 길을 줄이고, 머물 수 없게 하고, 변화를 알아차린다.
들어오는 길을 줄인다(최초 침입 막기)
패치되지 않은 취약점을 남기지 않고(의존성과 프레임워크를 최신으로 유지), 자격 증명과 키를 엄격하게 다루며 재사용하지 않고, 노출 범위를 최소로 유지합니다. 최초 침입이 없으면 뒷문을 남길 기회도 없습니다.
자리 잡을 수 없게 한다(최소 권한과 분리)
권한을 좁게 잡고 서비스를 분리해, 침해되더라도 피해가 한정되게 합니다. 구성 요소 하나가 뚫려도 나머지가 함께 넘어가지 않도록 설계합니다.
변화를 알아차린다(무결성·통신 모니터링)
낯선 실행 파일이나 스크립트, 예상치 못한 프로세스와 cron 항목, 서버에서 모르는 곳으로 나가는 통신을 지켜봅니다. EDR 같은 도구는 이런 이상한 변화를 보이게 하려고 존재합니다.
의존성과 공급망을 검토한다
가져다 쓰는 것을 검토해, 오염된 부품이 뒷문을 안으로 실어 나르는 경로를 닫습니다. 다만 서명은 출처를 보증할 뿐 안전을 보증하지 않습니다. 정상적인 배포 경로로 오염된 버전이 배포된 사례는 npm 공급망 침해 방어를, 기계적인 점검은 osv-scanner 시작하기를 참고하세요.
자기 서버를 점검하는 법(Linux 예)
모르는 것이 있는지 찾는 점검입니다. 모두 읽기만 하며 설정은 바꾸지 않습니다.
로그인 수단을 확인한다
각 사용자의 ~/.ssh/authorized_keys에 모르는 공개 키가 없는지, /etc/passwd에 낯선 사용자나 UID 0인 새 사용자가 없는지 봅니다.
자동 실행되는 것을 확인한다
crontab -l(사용자별), /etc/cron.*, systemctl list-unit-files --state=enabled에서 직접 설정하지 않은 예약 작업이나 서비스가 없는지 확인합니다.
파일 변경을 확인한다
find /var/www -type f -mtime -7 같은 명령으로 웹 루트에서 최근 바뀐 파일을 찾고, 배포하지 않았는데 생긴 스크립트가 없는지 봅니다. 패키지 파일의 변조는 debsums -c(Debian 계열)나 rpm -Va(RHEL 계열)로 확인합니다.
외부 연결을 확인한다
ss -tnp로 서버에서 모르는 목적지로 연결하는 프로세스가 없는지 봅니다. 같은 목적지로 정기적으로 나가는 통신은 C2 통신일 수 있습니다.
무언가를 찾았다면 지우는 데서 멈추지 마세요. 분리하고, 기록을 보존하고, 다시 구축하고, 모든 자격 증명을 교체합니다.
누군가 들어온다는 전제로 계획한다
백도어가 위험한 이유는 쉽게 눈에 띄지 않기 때문입니다. 그래서 '아무도 들어오지 못하게 한다'에만 기대는 것은 현실적이지 않습니다. '누가 들어와도 발판을 남길 수 없고, 빨리 알아차린다'고 말할 수 있어야 사고가 길어지지 않습니다.
이 사이트의 관점: 취약점을 고친 뒤 공격자가 머물 길을 남겼는지 확인한다
사고 대응에서 흔히 놓치는 것은 취약점을 고치고 끝났다고 느끼는 것입니다. 우리는 취약점을 고친 뒤에도 백도어나 설명되지 않는 상주 프로세스가 남아 있지 않은지 계속 확인해야 한다고 봅니다. 공격자의 목표는 한 번 다녀가는 것이 아니라 머무는 것이었습니다. 그 길을 끊어야 대응이 끝납니다.
출처(1차 자료)
- NIST NVD, "CVE-2024-3094" — nvd.nist.gov(XZ Utils 백도어, CVSS 10.0)
- SolarWinds Corporation, "Form 8-K"(2020년 12월 14일) — sec.gov(영향받은 고객 수)
- CISA, "Emergency Directive 21-01" — cisa.gov
- CISA 등, MOVEit Transfer 취약점 CVE-2023-34362 공동 권고(AA23-158A) — cisa.gov(웹 셸 설치)
- MITRE ATT&CK, "Server Software Component: Web Shell (T1505.003)" — attack.mitre.org(탐지 관점)
다음에 읽을 글
- 용어: 원격 코드 실행(RCE)이란 / C2(명령 제어)란
- 용어: 경로 탐색(Path Traversal)이란(들어오는 경로의 한 예)
- 사례: xz-utils 백도어(배포 소스 자체에 심긴 경우)
- 사례: npm 공급망 침해 방어
- 사례: AI가 쓴 코드에서 API 키가 유출된 진짜 원인
FAQ
Q백도어와 정당한 원격 유지보수는 무엇이 다른가요?
기술적으로는 비슷해 보일 수 있습니다. 결정적인 차이는 누군가 허가했는지, 그 존재를 알고 있는지, 기록에서 볼 수 있는지입니다. 정당한 원격 접속은 관리자가 알고 있고 인증, 접근 제어, 감사 로그 아래에 있습니다. 백도어는 몰래 심기고, 인증을 우회하며, 흔적을 남기지 않도록 만들어집니다. 기계를 원격으로 조작하는 능력은 같아도, 갈리는 지점은 보이는지와 통제되는지입니다.
Q백도어는 어떻게 심기나요?
대부분은 최초 침입 뒤에 머물기 위한 발판으로 설치됩니다. 들어오는 경로는 보통 패치되지 않은 취약점(예: 원격 코드 실행), 탈취된 자격 증명이나 SSH 키, 또는 빌드에 끌려 들어온 오염된 의존성입니다. 이 사이트는 설치·운영 방법을 다루지 않습니다. 중요한 것은 두 겹의 목표입니다. 최초 침입을 막고, 침입이 일어나더라도 자리 잡을 수 없게 만드는 것입니다.
Q백도어가 심겼는지 어떻게 확인하나요?
한 번에 끝나는 검사는 없습니다. 효과가 있는 것은 여러 각도에서 동시에 지켜보는 것입니다. 파일 무결성 모니터링(낯선 실행 파일이나 스크립트가 생겼는지), 외부로 나가는 통신 모니터링(서버가 알 수 없는 곳에 정기적으로 연결하는지), 예상치 못한 프로세스와 cron 항목 점검, 의존성 검토입니다. 하나만으로는 빠져나가기 쉽지만, 함께 쓰면 이상한 변화가 눈에 띕니다.
Q백도어는 무슨 뜻이고, 왜 '뒷문'인가요?
정문, 즉 정상적인 로그인(인증)을 거치지 않고 들어오는 경로라는 뜻입니다. 전형적인 예는 공격자가 침입한 뒤 심어 두는 것이지만, 개발자가 남겨 둔 숨은 유지보수 계정이나 제품에 박혀 있는 고정 비밀번호도 사용자가 모르고 통제할 수 없다면 백도어라고 부릅니다. 암호 분야에서는 정부 등이 복호화할 수 있도록 일부러 넣은 장치를 가리킬 때도 쓰입니다.
Q웹 셸이란? 백도어와 같은 것인가요?
웹 셸은 웹 서버에 놓인 악성 스크립트로, 예를 들어 브라우저에서 서버를 원격으로 조작할 수 있게 합니다. 웹 서버에서 백도어가 취하는 전형적인 형태입니다. 2023년 MOVEit Transfer 대규모 유출에서는 취약점을 이용해 웹 셸이 설치되었고, 그 뒤의 데이터베이스에서 데이터가 탈취되었습니다.
Q백도어를 찾으면 지우기만 하면 되나요?
아닙니다. 백도어가 하나가 아닐 수 있고, 침입에 쓰인 자격 증명도 탈취됐을 수 있습니다. 서버를 네트워크에서 분리하고, 조사를 위해 기록을 보존하고, 정상임이 확인된 상태에서 다시 구축하고, 비밀번호·SSH 키·API 키 등 모든 자격 증명을 교체하세요. 공격자가 들어온 취약점도 동시에 고쳐야 합니다.