VPS 호스팅은 안전한가요? 보안 위험과 관리 책임
VPS는 하이퍼바이저를 통해 타 사용자와 완벽히 격리되지만 실제 보안 사고는 서버 내부에서 발생합니다. 열린 포트, 취약한 SSH 키, 업데이트되지 않은 패키지 등 사용자가 직접 관리해야 하는 보안 취약점과 VPS 환경의 실제 격리 수준을 상세히 설명합니다.
VPS 호스팅은 안전한가? 짧은 답변
네, 그렇습니다. VPS 호스팅은 대부분의 사용자가 구매하는 용도로 사용하기에 안전하며, 공유 호스팅보다 확실히 개선된 방식입니다. VPS(virtual private server)는 고유한 커널, 메모리, 디스크, 사용자 계정을 갖춘 가상 머신이며, 이를 구동하는 하이퍼바이저는 다른 고객이 이 네 가지 자원에 접근하지 못하도록 격리합니다. 동일한 물리적 머신에서 옆 서버를 임대하는 사용자는 귀하의 파일을 읽거나, 프로세스 목록을 보거나, 서버에 로그인하거나, 네트워크 트래픽을 확인할 수 없습니다.
솔직한 답변은 두 가지 측면으로 나뉩니다. 하드웨어와 하이퍼바이저는 제공업체가 소유합니다. 귀하는 가상 머신 내부의 모든 것을 소유하며, 거의 모든 실제 보안 사고는 바로 이 내부에서 시작됩니다. 서버 침해는 열려 있는 포트, 취약한 SSH 비밀번호, 업데이트되지 않은 패키지, 또는 공개된 파일 내의 비밀 정보 등을 통해 발생합니다. 하이퍼바이저를 통해 서버가 침해되는 경우는 매우 드뭅니다.
하이퍼바이저가 실제로 분리하는 것
하이퍼바이저는 하나의 물리적 호스트에서 가상 머신을 구동하는 소프트웨어입니다. KVM VPS(KVM은 커널 기반 가상 머신을 의미하며, 리눅스 호스트의 표준입니다)에서 귀하의 서버는 완전한 가상 머신으로 동작합니다. 서버는 자체 커널로 부팅됩니다. 호스트는 물리 메모리의 고정된 영역을 할당하며, 프로세서의 메모리 관리 장치(MMU)는 해당 영역 외부로의 모든 접근을 차단하므로 다른 게스트에서 실행 중인 코드는 귀하의 RAM을 전혀 참조할 수 없습니다. 공유 파일 시스템이나 공유 사용자 테이블이 존재하지 않으므로, 이웃 서버의 파일 권한은 귀하의 서버에 아무런 영향을 미치지 않습니다.
공유 호스팅은 다르게 작동합니다. 여러 사이트가 하나의 운영 체제 안에서, 하나의 웹 서버와 하나의 PHP 설치 환경 아래 일반 사용자 계정으로 공존합니다. 유일한 경계는 파일 권한뿐입니다. 따라서 권한 설정 실수나 과도한 읽기 권한을 가진 사용자로 실행되는 취약한 플러그인은 다른 계정의 파일에 접근할 수 있습니다. 이것이 바로 공유 호스팅에서 VPS로 이전함으로써 메울 수 있는 격차입니다.
VPS라는 이름으로 판매되는 모든 상품이 가상 머신은 아니므로 구매 전 확인이 필요합니다. 컨테이너 기반 상품(OpenVZ, LXC, Virtuozzo)은 호스트의 커널을 공유하며, 하드웨어 가상화 대신 네임스페이스와 cgroups를 사용하여 고객을 분리합니다. 이는 호스트의 커널 버그가 곧 귀하의 서버 커널 버그가 되기 때문에 더 취약한 경계입니다. 또한 이러한 상품에서는 커널 모듈을 로드할 수 없어 일부 소프트웨어 사용이 제한됩니다. KVM이 더 안전한 기본 선택지입니다. 결제 전 어떤 방식을 제공하는지 확인하십시오.
노이즈 이웃이 미치는 영향
물리적 호스트를 공유하면 속도 측면에서 비용을 치르게 되며, 유일한 비용은 속도뿐입니다. 한 대의 머신에 있는 게스트들은 물리적 CPU와 디스크를 공유합니다. CPU가 다른 작업으로 바쁘면 가상 CPU는 대기하게 되며, Linux는 이 대기 시간을 steal time으로 보고합니다. 이는 top 및 vmstat의 %st 필드에서 확인할 수 있습니다. Steal time이 몇 퍼센트 이상으로 수 시간 동안 지속된다면 해당 호스트는 과도하게 할당된 상태입니다. 이는 누군가 귀하의 데이터를 읽고 있다는 의미가 아닙니다. 해결책은 다른 요금제로 변경하거나 다른 제공업체를 선택하는 것이며, 결정하기 전에 실제로 할당받은 CPU와 디스크 성능을 측정해 볼 수 있습니다.
알아두어야 할 고객 간의 영향이 하나 더 있는데, 이는 보안 취약점과는 무관합니다. VPS에서 이메일을 발송하면 귀하의 IP 주소는 다른 고객들도 사용하는 대역에 위치하게 됩니다. 스팸을 발송하는 이웃이 해당 대역의 일부를 차단 목록에 올릴 수 있으며, 이로 인해 귀하의 메일이 귀하의 잘못이 아님에도 스팸 메일함으로 분류될 수 있습니다. 남용을 엄격히 관리하는 제공업체는 IP 대역을 더 깨끗하게 유지합니다. 이메일 서비스가 중요하다면 이 점을 확인하십시오.
적대적인 이웃이 할 수 없는 일과 예외적인 경우
같은 호스트를 사용하는 고객은 귀하의 파일에 접근할 경로가 없습니다. 그들은 귀하의 프로세스를 보거나, 디스크를 마운트하거나, 서버에서 셸을 열 수 없습니다. 이러한 요소들은 그들의 가상 머신 내부에는 존재하지 않기 때문입니다. 한 가지 예외는 명시할 가치가 있습니다. 제공자의 사설 네트워크는 낯선 사람들과 공유하는 네트워크로 간주해야 하며, 보이지 않는다고 가정하기보다는 네트워크를 통과하는 모든 데이터를 암호화해야 합니다.
하이퍼바이저 탈출은 실제로 존재합니다. 가상화 계층의 버그는 한 게스트 내부의 코드가 호스트에 도달하게 만들 수 있으며, 호스트에서 다시 해당 호스트의 모든 게스트에 접근하게 할 수 있습니다. 이러한 버그는 발견되면 CVE(Common Vulnerabilities and Exposures) 식별자와 함께 공개되고 패치됩니다. 호스팅 제공자는 전체 비즈니스가 해당 계층에 달려 있으므로 이를 신속하게 패치합니다. 이를 이용하려면 특정 하이퍼바이저 버전에 대한 작동 가능한 익스플로잇이 필요한데, 이는 작은 호스팅 계정을 공격하기 위해 사용하기에는 매우 값비싼 자원입니다.
게스트 간 사이드 채널 공격 또한 실제로 존재합니다. Spectre 및 Meltdown 계열이 이에 해당하며, 이들은 공유 프로세서 캐시를 악용하여 경계를 넘어 소량의 데이터를 추론합니다. 마이크로코드 및 커널 업데이트가 이를 완화하며, 공개된 연구에서 나타난 데이터 유출 속도는 매우 미미합니다. 공개된 사례들은 대규모 공격이라기보다는 연구 목적의 시연에 가깝습니다. 위험이 0은 아니지만, 귀하에게 피해를 줄 수 있는 위협 목록의 최상위와는 거리가 멉니다.
제공자의 역할과 사용자의 역할이 나뉘는 지점
제공자는 건물, 호스트 하드웨어, 하이퍼바이저와 호스트 커널, 물리적 네트워크, 그리고 서버를 시작·중지·재구축·스냅샷 생성할 수 있는 제어판에 대한 책임을 집니다. 이 중 어느 하나라도 문제가 발생하면 제공자가 해결해야 합니다.
사용자는 운영체제부터 그 상위의 모든 것에 대한 책임을 집니다. 여기에는 설치하는 패키지, 열어두는 포트, 로그인 가능한 계정과 키, 적용하는 업데이트, 백업, 그리고 직접 작성한 애플리케이션 코드가 포함됩니다. 대부분의 VPS 플랜은 관리형이 아니며, 이는 누구도 서버에 패치를 적용해주지 않으며 지원 티켓을 발행해도 해결되지 않음을 의미합니다. 관리형과 비관리형의 차이를 구매 전에 읽어보는 것이 좋습니다. 이 구분이 사용자가 짊어져야 할 책임의 범위를 결정하기 때문입니다.
사용자의 책임 영역 중 간과하기 쉬운 부분이 하나 있는데, 바로 호스팅 제어판 자체입니다. 해당 계정의 로그인 권한을 가진 사람은 서버 내부의 비밀번호를 알지 못해도 서버를 재구축하거나 디스크를 복구 시스템에 연결할 수 있습니다. 호스팅 계정에 2FA(2단계 인증)를 활성화하고, 해당 비밀번호를 다른 곳에서 재사용하지 마십시오.
호스팅 제공업체가 내 데이터를 볼 수 있습니까?
원칙적으로는 볼 수 있으며, 이것이 VPS가 제공하는 보안의 솔직한 한계입니다. 사용자의 디스크 이미지는 제공업체의 스토리지에 저장됩니다. 제공업체의 콘솔은 가상 머신에 대한 화면 수준의 접근 권한을 제공합니다. 구조 모드(rescue mode)를 사용하면 사용자의 디스크를 연결한 상태에서 다른 시스템으로 부팅할 수 있습니다. VPS는 다른 고객으로부터 사용자를 보호하지만, 제공업체는 그 보호 범위 밖에 있습니다.
호스트가 읽을 수 없어야 하는 데이터를 보관해야 한다면, 데이터가 기록되기 전에 애플리케이션 수준에서 암호화하십시오. 게스트 내부의 전체 디스크 암호화는 저장된 이미지가 복사되는 것을 방지하는 데 도움이 되지만, 서버가 실행되는 동안에는 암호 키가 메모리에 상주해야 하므로 제공업체가 데이터에 접근할 가능성을 완전히 배제할 수는 없습니다. 이러한 신뢰 관계는 단독으로 임대하는 전용 서버에도 동일하게 적용되며, 단지 공유 계층이 하나 줄어들 뿐입니다.
VPS가 침해되는 실제 경로
모든 인터페이스에서 대기 중인 서비스. 데이터베이스, 캐시, 메시지 큐, 관리자 패널은 기본적으로 0.0.0.0에 바인딩되는 경우가 많습니다. 이는 공용 인터페이스를 포함한 모든 네트워크 인터페이스에서 접근 가능하다는 의미입니다. 인터넷 전체를 대상으로 하는 스캐닝은 상시 자동화되어 진행되므로, 새로 할당받은 IP 주소는 온라인 상태가 된 지 몇 분 안에 첫 번째 무작위 탐색을 받게 됩니다. 비밀번호가 없는 Redis, 인증되지 않은 Elasticsearch 노드, 2375 포트로 열린 Docker API, 기본 로그인 정보를 그대로 사용하는 관리자 패널 등은 모두 사용자가 누구인지 알지 못하는 스캐너에 의해 이런 방식으로 발견됩니다. 로컬 머신에서만 필요한 서비스라면 127.0.0.1에 바인딩하고, 나머지는 방화벽에서 차단하십시오.
방화벽을 우회하는 Docker. 컨테이너 포트를 게시하면 ufw(uncomplicated firewall) 규칙보다 먼저 평가되는 NAT(Network Address Translation) 규칙이 작성됩니다. 따라서 ufw status에서 해당 포트를 거부하도록 설정했더라도 컨테이너는 인터넷에서 접근 가능할 수 있습니다. 이는 다른 모든 설정을 올바르게 수행한 사용자들도 자주 겪는 문제입니다. 컨테이너 포트를 게시하기 전에 Docker 포트가 ufw를 무시하는 이유를 읽어보는 것이 좋습니다.
비밀번호 인증이 활성화된 SSH. 공개 서버에서 /var/log/auth.log를 확인하면 Failed password for root from 203.0.113.10 port 54312 ssh2와 같은 줄이 밤낮으로 수천 개씩 기록되는 것을 볼 수 있습니다. 봇은 흔한 사용자 이름과 비밀번호 조합을 대입합니다. 비밀번호 로그인과 root 계정 로그인이 허용된 상태라면 공격자에게 필요한 모든 조건을 갖춰준 셈입니다. 키 기반 인증만 사용하고 root 로그인을 비활성화하면, 이러한 트래픽은 무시해도 되는 소음으로 바뀝니다.
모든 곳에서 동일한 개인 키 사용. 모든 노트북과 서버에 하나의 키를 복사해 두면 노트북 하나만 도난당해도 모든 시스템이 뚫립니다. SSH 키는 만료되지 않으므로 2년 전 계약자에게 전달한 키가 오늘까지도 유효합니다. 사람별, 머신별로 키를 하나씩 생성하는 것은 비용이 들지 않으며, 키 하나가 도난당했을 때의 피해 범위를 제한합니다.
업데이트되지 않은 패키지. 웹 서버나 애플리케이션 프레임워크의 CVE가 공개되면 이는 곧 공격 지침서가 되며, 스캐너는 며칠 내로 해당 취약점을 테스트하기 시작합니다. 보안 업데이트는 가장 저렴한 방어 수단이며, 자동으로 실행되도록 설정할 수 있습니다. Ubuntu에서 자동 보안 업데이트 설정하기를 참조하십시오.
유출된 비밀 정보. 데이터베이스 비밀번호와 API 키는 .env 파일에 저장되는데, 이 파일들이 공개 저장소에 커밋되거나 잘못된 디렉터리를 가리키는 웹 서버를 통해 노출되기도 합니다. AI 코딩 에이전트의 컨텍스트에 붙여넣은 정보가 로그에 남을 수도 있으며, 이는 별도의 주의가 필요합니다. 에이전트가 비밀 정보에 접근하지 못하게 하기를 확인하십시오.
모든 것을 root 권한으로 실행. 애플리케이션이 root 권한으로 실행되면, 그 안의 버그 하나가 서버 전체를 장악하게 됩니다. 서버 내부에서 확산을 막을 경계가 남아있지 않기 때문입니다.
사용자의 역할
다음 내용은 하이퍼바이저 작업이 아닙니다. 모두 사용자가 직접 관리해야 하는 영역이며, VPS의 안전 여부를 결정짓는 핵심입니다.
- 초기 설정을 올바르게 수행하십시오. 새 VPS에서의 첫 10분 가이드에서 root가 아닌 사용자 생성과 방화벽 설정을 다룹니다.
- 원격 접근을 제한하십시오. VPS의 SSH 보안 강화를 참고하십시오.
- 사용하지 않는 포트는 닫으십시오. ufw 방화벽 기초를 확인하십시오.
- 각 서비스에 필요한 최소한의 권한만 부여하십시오. VPS의 최소 권한 사용자 설정을 권장합니다.
- 무차별 대입 공격을 늦추십시오. Ubuntu 24.04에서의 fail2ban을 설정하십시오.
- 최소 한 번 이상 복구해 본 백업을 유지하십시오. VPS를 위한 restic 백업을 활용하십시오.
제공자의 역할은 서버가 부팅되는 시점에 이미 완료됩니다. 사용자의 역할은 첫날 약 1시간, 이후 매달 몇 분 정도의 시간이 소요됩니다. 아직 옵션을 비교 중이라면, VPS의 실제 의미에서 이 모든 작업의 기반이 되는 개념을 다룹니다.
FAQ
동일한 물리 서버를 사용하는 다른 고객이 내 파일을 읽을 수 있습니까?
아니요, KVM VPS에서는 불가능합니다. 귀하의 서버는 고유한 커널과 가상 디스크, 그리고 호스트가 할당한 물리 메모리 영역을 가진 가상 머신이며, 프로세서는 해당 영역 외부로의 모든 접근을 차단합니다. 게스트 간에 공유되는 파일 시스템은 없으므로, 이웃 서버 내부의 파일 권한은 귀하의 서버 내에서 아무런 의미가 없습니다. OpenVZ나 LXC와 같은 컨테이너 기반 플랜은 호스트 커널을 공유하여 경계가 더 취약하므로, 구매하시는 상품의 유형을 확인하십시오.
VPS가 공유 호스팅보다 더 안전합니까?
격리 측면에서는 그렇습니다. 공유 호스팅에서는 여러 사이트가 하나의 운영 체제 안에서 실행되며 유일한 경계는 파일 권한뿐이므로, 다른 계정의 실수로 인해 파일이 노출되는 경우가 발생할 수 있습니다. VPS에서는 가상 머신이 경계 역할을 합니다. 다만 공유 호스팅은 호스트가 패치를 관리하는 반면, 관리형이 아닌 VPS는 귀하가 직접 패치해야 한다는 차이점이 있습니다. VPS는 귀하가 실제로 업데이트를 적용하고 포트를 닫을 때만 더 안전합니다.
호스팅 제공업체가 내 데이터를 읽을 수 있습니까?
원칙적으로는 가능하며, 어떤 VPS 상품도 이를 바꾸지는 못합니다. 디스크 이미지는 제공업체의 하드웨어에 저장되고, 콘솔은 실행 중인 머신에 대한 화면 수준의 접근 권한을 제공하며, 구조 모드(rescue mode)를 사용하면 귀하의 디스크를 연결한 채로 다른 시스템을 부팅할 수 있습니다. 호스트가 읽을 수 없어야 하는 데이터가 있다면, 애플리케이션에서 기록하기 전에 암호화하십시오. 게스트 내부의 디스크 암호화도 서버가 실행되는 동안에는 메모리에 키가 유지되므로, 제공업체를 신뢰의 대상에서 완전히 배제할 수는 없습니다.
VPS가 침해당하는 가장 흔한 경로는 무엇입니까?
압도적으로 노출된 서비스나 취약한 SSH 로그인입니다. 자동화된 스캐너가 모든 공인 IP 주소를 지속적으로 탐색하므로, 비밀번호 없이 0.0.0.0에 바인딩된 데이터베이스나 기본 자격 증명을 그대로 둔 관리자 패널은 수개월이 아니라 수 분 내에 발견됩니다. 공용 서버에서 /var/log/auth.log을 실행하면 그 절반인 SSH 상황을 볼 수 있습니다. 전 세계의 주소로부터 끊임없이 들어오는 Failed password for root 로그가 그 증거입니다. 하이퍼바이저 탈출(Hypervisor escape) 기법이 존재하기는 하지만, 이는 고가치 표적을 노린 연구 수준의 작업일 뿐 일반적인 침해의 원인은 아닙니다.