일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 헤밀턴
- 사인츠
- 리암 로슨
- Norris
- 노리스
- liam lawson
- Red Bull
- 페라리
- 랜도 노리스
- sainz
- attack
- 베르스타펜
- 르클레르
- Hamilton
- Ferrari
- 보안기사
- 정보보안
- 하스
- max verstappen
- f1
- 그랑프리
- 맥라렌
- 레드불
- 정보보안기사
- 로슨
- 2025
- 유키 츠노다
- 안토넬리
- 공격
- lawson
- Today
- Total
테크엔카
크로스 사이트 스크립트(XSS, Cross-Site Scripting) 본문
1. 개요
크로스 사이트 스크립트(XSS)는 웹 애플리케이션의 보안 취약점을 이용해 악성 스크립트를 삽입하고, 이를 통해 사용자 세션 탈취, 정보 유출, 피싱 공격 등을 수행하는 공격 기법이다.
XSS는 사용자 입력 값을 적절히 검증하거나 필터링하지 않을 때 발생하며, 공격자는 이를 통해 피해자의 브라우저에서 악성 스크립트를 실행할 수 있다.
2. 공격 기법
XSS는 공격 방법에 따라 주로 다음 세 가지 유형으로 분류된다
1) 저장형 XSS (Stored XSS)
- 설명 : 악성 스크립트가 서버에 영구적으로 저장되고, 이후 페이지 로드 시 사용자에게 제공됨
(예: 게시판, 댓글, 프로필 정보에 악성 스크립트 삽입)
- 공격 과정
① 공격자가 웹 애플리케이션에 악성 스크립트를 입력
② 서버에 저장된 데이터를 다른 사용자에게 제공
③ 사용자 브라우저에서 악성 스크립트 실행
- 다수의 사용자에게 악성코드 배포 가능
2) 반사형 XSS (Reflected XSS)
- 설명 : 악성 스크립트가 서버에 저장되지 않고, 즉시 반사되어 사용자에게 반환됨
(예: 검색어 입력값에 스크립트를 포함해 응답 페이지에서 실행)
- 공격 과정
① 공격자가 악성 링크를 생성하여 피해자에게 전달
② 피해자가 링크를 클릭하면 요청이 서버로 전달되고, 악성 스크립트가 응답에 포함됨
③ 사용자 브라우저에서 스크립트 실행
- 주로 특정 사용자를 표적으로 공격
3) DOM 기반 XSS (DOM-based XSS)
- 설명:
. 서버를 거치지 않고, 브라우저의 DOM(Document Object Model) 조작을 통해 발생
. 클라이언트 측 스크립트에서 사용자 입력을 신뢰하고 DOM을 직접 수정할 때 발생
- 공격 과정
① 클라이언트 측 스크립트가 URL, 쿠키 등의 값을 DOM에 직접 삽입
② 브라우저에서 악성 스크립트 실행.
- 주로 클라이언트 측 코드 취약점을 악용
3. 취약점 점검
1) 수동 점검
- 사용자 입력을 처리하는 모든 부분(입력 필드, URL, 쿠키 등)을 분석
- 입력값이 적절히 검증되고 필터링되는지 확인
(예: <script>alert('TEST!!')</script>와 같은 악성 입력값을 직접 테스트)
2) 자동 점검 : 자동 점검 도구로 XSS 취약점을 탐지하고 약한 요청 및 응답을 분석(예: Burp Suite, OWASP ZAP 등)
3) 코드 리뷰 : 소스 코드를 검토하여 입력 값 처리 및 출력 로직에서 취약점 여부 확인
4. 대응 방법
1) 입력값 검증 및 필터링
- 입력 검증 : 사용자의 입력값을 서버에서 철저히 검증 (허용된 데이터만 입력받도록 제한)
- 출력 이스케이프 : HTML, JavaScript, URL에 사용자 데이터를 삽입할 때 이스케이프 처리
예: HTML: & → &, < → <, > → > JavaScript: " → \", ' → \'
2) CSP(Content Security Policy)를 설정하여 스크립트의 실행 범위를 제한
예: Content-Security-Policy: default-src 'self'; script-src 'self';
3) 쿠키 보안 강화
- HttpOnly : 쿠키가 JavaScript를 통해 접근되지 않도록 설정
예: Set-Cookie: sessionid=abc123; HttpOnly
- Secure : HTTPS 통신에서만 쿠키가 전달되도록 설정
4) 안전한 프로그래밍
- 클라이언트 측 스크립트에서 DOM을 조작할 때, 사용자 입력값을 신뢰하지 않도록 설계
- JavaScript에서 innerHTML 대신 textContent 사용
5) 라이브러리 사용 : XSS 방어를 위한 검증된 라이브러리 사용 (OWASP Java Encoder, DOMPurify 등)
※ 저장형 XSS, 반사형 XSS, DOM 기반 XSS 비교
구분 | 저장형 XSS (Stored XSS) | 반사형 XSS (Reflected XSS) | DOM 기반 XSS (DOM-based XSS) |
공격 방식 | 악성 스크립트를 서버에 저장하여 다수의 사용자에게 전달 | 악성 스크립트가 서버를 거쳐 즉시 반사되어 사용자에게 전달 | 서버를 거치지 않고, 브라우저의 DOM을 직접 조작하여 실행 |
저장 여부 | 서버에 저장됨 | 서버에 저장되지 않고 즉시 응답에 포함 | 서버와 무관, 클라이언트 측에서만 실행 |
공격 대상 | 다수의 사용자 (게시판, 댓글 등) | 특정 사용자 (악성 링크를 클릭한 사람) | 클라이언트 측 코드 취약점이 있는 사용자 |
공격 경로 | - 게시판, 댓글, 사용자 프로필에 악성 스크립트 삽입 - 서버가 해당 데이터를 다른 사용자에게 전달 |
- 악성 링크를 이메일, 메시지 등으로 전달 - 사용자가 링크 클릭 시 실행. |
- URL, 쿠키, DOM 내 값 등을 클라이언트 스크립트가 직접 읽어 실행 |
예시 | - <script>alert('TEST!!');</script>를 댓글에 삽입 - 페이지 로드 시 악성코드 실행 |
- 악성 링크: http://example.com?q=<script>alert('TEST!!')</script> | - JavaScript가 document.location.hash를 그대로 HTML에 삽입 |
위험성 | 지속적 : 서버에 저장되어 다수에게 영향을 미침 | 일시적 : 특정 사용자가 링크를 클릭해야 발생 | 클라이언트 제한적 : 특정 브라우저에서만 실행 |
공격 난이도 | 상대적으로 어려움 | 상대적으로 쉬움 | 중간 |
주요 피해 | - 다수 사용자의 세션 탈취, 정보 유출. - 악성코드 확산 |
- 특정 사용자의 세션 탈취. - 피싱 및 개인정보 유출. |
- 클라이언트 코드 기반 피해. - 세션 탈취, DOM 조작. |
방지 방법 | - 입력값 검증 및 필터링. - 출력값 이스케이프 처리. - CSP 설정. |
- 입력값 검증 - URL 파라미터 필터링. - 악성 링크 식별. |
- 안전한 DOM 조작 API 사용 - DOMPurify 같은 라이브러리 사용. |