XSS(Cross Site Scripting)는 웹 해킹 공격 중 하나입니다.
웹 서버 사용자에 대한 입력값 검증이 미흡할 때 발생하는 취약점으로, 주로 여러 사용자가 보는 게시판이나 메일 등을 통해 악성 스크립트(JavaScript 같은 스크립트 코드)를 삽입하는 공격 기법입니다.
XSS는 대부분 웹 해킹 공격과 다르게 사용자(클라이언트)를 대상으로 하는 공격 기법입니다.
일반적으로 사용자 쿠키/세션 값 탈취, 키보드 입력값 탈취 등이 가능하며, 피싱 사이트와 같은 악성 사이트로의 접근 유도가 가능해 사용자에게 직접적인 피해를 줄 수 있습니다.
💣 XSS의 공격 유형
XSS는 공격 방법에 따라 유형이 크게 3가지로 나뉩니다.
Reflected XSS (반사형 크로스사이트스크립트)
웹 응용 프로그램의 지정된 변수를 이용할 때 발생하는 취약점을 이용하는 공격으로, 악성 스크립트가 데이터베이스와 같은 저장소에 별도로 저장되지 않고 사용자의 화면에 즉시 출력됩니다. 주로 이메일, 메신저 등에 포함된 URL을 통해 공격이 이루어지고 있습니다.
Stored XSS (저장형 크로스사이트스크립트)
취약점이 있는 웹 서버에 악성 스크립트를 저장하는 공격 방법입니다. 공격자는 악성 스크립트가 포함된 게시글을 작성하여 게시판 등 사용자가 접근할 수 있는 페이지에 업로드합니다. 이후 사용자가 해당 게시글을 요청하면 서버에 저장된 악성 스크립트가 사용자 측에서 동작하게 됩니다.
DOM Based XSS (DOM 기반 크로스사이트스크립트)
DOM 구조를 이용하여 요소들을 수정하거나 추가하는 등 동적 행위를 할 때 접근하는 JavaScript에 악성 스크립트를 삽입하여 클라이언트 측 브라우저에서 악성 스크립트가 실행되도록 하는 공격 방법입니다.
DOM(Document Object Model): 브라우저가 웹 페이지를 렌더링 하는데 사용하는 모델로 HTML 및 XML 문서에 접근하기 위한 인터페이스
DOM Based XSS는 Reflected XSS와 같이 동적 페이지를 구성하는 과정 상에서 발생되는 XSS 공격이지만, 두 공격 사이에 차이점은 악성 스크립트가 심어지는 시점에서 찾을 수 있습니다.
Reflected XSS는 서버 측에서 동적 페이지를 구성하는 환경에서 발생되는 XSS인 반면에 DOM Based XSS는 클라이언트 측에서 사용자 입력 값을 통해 동적 페이지를 구성하는 환경에서 발생되는 XSS입니다.
즉, 요청이 서버로 전송되지 않고 클라이언트 브라우저에서 공격이 이루어지는 특징을 가지고 있습니다.
💥XSS 공격의 위험성
- 세션 하이재킹 : XSS를 통해 세션 쿠키를 훔친 후, 해당 세션을 사용하여 피해자의 계정에 로그인할 수 있습니다.
- 쿠키 탈취 : 공격자는 document.cookie를 통해 피해자의 쿠키를 가져와 악성 서버로 전송할 수 있습니다.
- 피싱 공격 : XSS를 사용하여 피해자의 브라우저에 가짜 로그인 페이지를 삽입하거나, 악성 사이트로 리디렉션 할 수 있습니다.
- 악성 코드 실행 : 공격자는 악성 JavaScript 코드를 입력란이나 URL을 통해 삽입합니다. 이 코드가 실행되면 쿠키 정보나 세션 정보를 훔칠 수 있습니다.
✨사용자가 XSS 공격을 방어할 수 있는 방법
- 링크 확인 : 사용자는 다른 사용자로 부터 받은 링크를 클릭하기 전에 .com, .net, .org 등의 뒤에 있는 링크 전체를 살펴봐야 합니다. XSS 공격을 트리거하는 링크에는 합법적인 URL이 포함되어 있기 때문에 합법적인 것처럼 보이는 경우가 많지만, 페이지 주소 뒤의 예상치 못한 텍스트는 악성 코드일 수 있습니다.
- 의심스러운 메일 주의 : 보낸 사람의 이메일 주소를 확인하고, 신뢰할 수 없는 발신자의 이메일은 열지 않도록 주의해야 합니다. 특히 예상하지 못한 첨부파일이나 링크가 포함된 이메일은 더 주의해야 합니다. 추가로 일부 이메일 클라이언트에서 제공하는 미리보기 창에서 악성 스크립트가 실행될 수 있기 때문에 미리보기 기능을 비활성화해주시는 것도 좋은 방법입니다.
✨개발자가 XSS 공격을 방어할 수 있는 방법
- 입력 유효성 검사 : 개발자는 <script> 태그처럼 XSS 공격에서 흔히 사용되는 태그나 문자를 명시적으로 거부하는 유효성 검사 규칙을 설정할 수 있습니다. 추가로 사용자가 댓글, 게시물, 양식 입력에 HTML을 사용하지 못하도록 막을 수도 있습니다. HTML 콘텐츠는 악성 스크립트를 게시하거나 악성 코드가 포함된 URL의 링크를 숨기는 수단이 될 수 있기 때문입니다.
- HttpOnly 쿠키 : 쿠키에 HttpOnly 속성을 설정하면 JavaScript에서 쿠키를 접근할 수 없으므로, 세션 쿠키를 안전하게 보호할 수 있습니다.
- 동적 스크립트 로딩 차단 : 외부 스크립트가 동적으로 로드되지 않도록 방지합니다.
- 입력 값 필터링 : 악성 스크립트가 삽입되어도 동작하지 않도록 스크립트에 사용되는 <, >, ‘, “ 등의 특수문자는 &It;, > 등의 HTML Entity로 치환하여 입력합니다.
'개발 공부 일지 > CS' 카테고리의 다른 글
[CS] 반사형 XSS (Reflected Cross-Site-Scripting) (0) | 2025.01.10 |
---|---|
[CS] 저장형 XSS (Stored Cross-Site-Scripting) (0) | 2025.01.09 |
주소창에 www.google.com을 검색하면 일어나는 일 (4) | 2024.12.23 |