공유 웹 호스팅 서버 보안 취약점 종합 분석
초록
이 논문은 공유 웹 호스팅 환경에서 발생할 수 있는 10가지 주요 공격을 정리하고, 각각의 공격 시나리오와 구현 예시를 제시한다. 공격자는 동일 서버에 존재하는 다른 사이트의 파일·세션·로그 등에 무제한 접근이 가능하다는 전제 하에 데이터 기밀·무결성 침해, 세션 포이즈닝·스누핑, 로그 포이즈닝·스누핑, LFI 기반 원격 코드 실행, CSRF 토큰 포이즈닝, 고속 무차별 대입 및 피싱 등을 수행한다. 마지막으로 저자는 이러한 위협을 차단하기 위한 세부적인 보안 설정 방안을 제시한다.
상세 분석
논문은 공유 웹 호스팅 서버가 “하나의 웹 서버 프로세스가 모든 사이트의 요청을 처리하고, 동일 사용자(apache, www‑data 등) 권한으로 파일·디렉터리를 읽고 쓸 수 있다”는 구조적 특성을 악용한다는 점을 강조한다. 이 구조적 결함은 가상화나 컨테이너와 같은 격리 메커니즘이 부재한 경우, 한 사이트가 침해당했을 때 동일 서버에 배포된 다른 사이트까지 연쇄적으로 위험에 처하게 만든다.
-
데이터 기밀성 침해 – 모든 스크립트가 동일 사용자 권한으로 실행되므로, 공격자는 다른 사이트의 설정 파일(예: DB 접속 정보)이나 민감 데이터가 평문으로 저장된 파일을 직접 읽을 수 있다. 이는 특히 PHP‑MySQL 조합에서 흔히 발생한다.
-
데이터 무결성 침해 – 웹 서버 사용자에게 쓰기 권한이 부여된 경우, 공격자는 임의 파일을 생성·수정하거나 기존 파일을 교체해 웹 애플리케이션 로직을 변조한다. CMS가 파일 업로드를 허용하면, 악성 PHP 파일을 업로드해 지속적인 백도어를 심을 수 있다.
-
세션 포이즈닝·스누핑 – 기본 설정에서 세션 파일이
/tmp등 공통 디렉터리에 저장되므로, 공격자는 다른 사이트의 세션 파일을 읽고 수정한다. 포이즈닝은 임의 세션 파일을 만들어 관리자 권한을 탈취하는 방식이며, 스누핑은 기존 세션 값을 변조해 권한 상승을 시도한다. -
로그 포이즈닝·스누핑 – Apache는 부모 프로세스가 루트 권한으로 로그 파일을 열고, 자식 프로세스가 이를 상속한다. PHP가 모듈 형태로 실행될 경우, 스크립트는 이미 열린 로그 파일 디스크립터에 접근해 로그를 임의로 기록하거나 삭제할 수 있다. 로그 스누핑은
/proc/self/fd/를 탐색해 로그 파일 디스크립터를 찾아 읽는 방식으로 구현된다. -
집중형 LFI (Intensive LFI) – 공유 환경에서는 공격자가
/tmp등 모든 사이트가 접근 가능한 경로에 악성 파일을 배치하고, 취약한 LFI 파라미터를 통해 해당 파일을 포함시켜 원격 코드를 실행한다. 기존 LFI2RCE와 달리 파일 접근 권한이 이미 확보돼 있기 때문에, 로그 파일을 통한 코드 삽입이 보다 쉬워진다. -
CSRF 토큰 포이즈닝 – 토큰이 파일 기반 세션에 저장되는 경우, 앞서 언급한 세션 포이즈닝 기법을 이용해 토큰 값을 임의로 교체함으로써 CSRF 공격을 우회한다.
-
고속 무차별 대입 (Fast Brute Force) – 동일 서버 내에서 여러 사이트에 동시에 로그인 시도를 수행하면, IP 차단 우회를 포함한 대량 시도가 가능해진다.
-
편리한 피싱 (Convenient Phishing) – 공격자는 동일 서버에 가짜 로그인 페이지를 배포하고, 동일 도메인 내에서 쿠키·세션을 공유하도록 설계해 사용자를 속인다.
논문은 위 공격들을 구현한 샘플 PHP 코드를 제공하고, 각 공격이 발생하기 위한 전제 조건(공통 사용자 권한, 로그 파일 디스크립터 상속, 세션 디렉터리 공유 등)을 명확히 제시한다. 마지막으로 제안된 방어 전략은 프로세스 격리(소유자별 PHP‑FPM 풀, suEXEC, suPHP), 파일·디렉터리 권한 최소화, 세션/로그 디렉터리 분리, 모듈 대신 CGI 사용, 로그 파일 접근 제한, LFI 방어를 위한 입력 검증 및 파일 포함 화이트리스트 등을 포함한다. 이러한 설정을 종합적으로 적용하면, 공유 호스팅 환경에서도 대부분의 열거된 공격을 효과적으로 차단할 수 있다.
댓글 및 학술 토론
Loading comments...
의견 남기기