1. XXS(Cross Site Scripting) 란?

  • 사이트 간 스크립팅은 웹 애플리케이션에서 많이 나타나는 취약점의 하나로 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점이다.
  • 공격자는 취약점을 이용하여 사용자의 개인정보 및 쿠키정보 탈취, 악성코드 감염, 웹 페이지 변조 등의 공격을 수행한다
  • code injection attack이라고도 한다

 

2.  위험성

 

1. 쿠키 및 세션정보 탈취

- XSS에 취약한 웹 게시판 등에 쿠키나 세션 정보를 탈취하는 스크립트를 삽입하여 해당 게시글을 열람하는 유저들의 쿠키 및 세션 정보를 탈취할 수 있으며 이는 공격자가 탈취한 정보를 바탕으로 인증을 회피하거나 특정 정보를 열람할 수 있는 권한을 가지게 해 줍니다.

2. 악성 프로그램 다운 유도

- XSS 자체는 악성 프로그램을 다운로드 시킬 수 없지만 스크립트를 통해 악성 프로그램을 다운받는 사이트로 리다이렉트 시켜서 악성 프로그램을 다운받도록 유도할 수 있습니다.

공격자는 아직 패치되지 않은 취약점에 대한 공격 코드가 실행되도록 해 사용자의 시스템을 통제할 수 있다.

3. 의도하지 않은 페이지 노출

- XSS를 이용해 <img>태그 등을 삽입하여 원본 페이지와는 전혀 관련 없는 페이지를 노출시키거나 페이지 자체에 수정을 가해 노출된 정보를 악의적으로 편집할 수 있습니다.

 

 

 

3. 공격 유형

   3-1) Reflected XSS (반사형)

 

- 공격자가 악성 스크립트를 클라이언트에게 직접 전달하여 공격하는 방식입니다.

특히 URL에 스크립트를 포함시켜 공격하는 경우가 대표적이며 URL이 길면 클라이언트가 의구심을 가질 수 있기 때문에 Shorten URL(URL 단축)을 이용해 짧은 URL로 만들어 공격하기도 합니다.

서버에 스크립트를 저장하지 않기 때문에 서버에서 이루어지는 필터링을 피할 수 있는 공격 방식입니다.

 

 * 외부에 있는 악성 스크립트가 희생자 액션에 의해 취약한 웹서버로 전달되고, 웹서버의 응답 페이지에 해당 악성 스크립트가 삽입되어 희생자 측에서 동작하는 방식이다.

 

  3-2) Stored XSS (저장형)

 

- 웹 사이트의 게시판에 스크립트 삽입하는 공격 방식이다.

- 공격자는 게시판에 스크립트를 삽입한 후 공격 대상자가 해당 게시글을 클릭하도록 유도한다.

- 공격자가 미리 XSS 공격에 취약한 웹사이트를 탐색하고 XSS 공격을 위한 스크립트를 포함 한 게시글을 웹 사이트에 업로드 한다.

- 게시글의 URL을 사용자에게 노출하고 사용자가 게시글을 확인함으로써 URL에 대한 요청을 서버에 전송하게 된다.

- 웹 서버에서 스크립트를 포함한 Response를 전송하며 공격이 수행된다.

 

* 공격자가 취약한 웹서버에 악성 스크립트를 저장하면 희생자가 해당 자료를 요청할 떄 해당 악성 스크립트가 삽입된 응답 페이지가 전달되어 클라이언트 측에서 동작하는 방식이다.

 

 

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

 

- 피해자의 브라우저가 html 페이지를 분석하여 DOM을 생성할 때 악성 스크립트가 DOM의 일부로 구성되어 생성되는 공격입니다. 서버의 응답 내에는 악성 스크립트가 포함되지 않지만 브라우저의 응답 페이지에 정상적인 스크립트가 실행되면서 악성 스크립트가 추가되서 실행되는 특징이 있습니다.

* 희생자의 웹 브라우저에서 응답 페이지에 포함된 정상적인 스크립트가 동작하면서 DOM 객체를 실행할 때 URL 등에 포함된 악성 스크립트가 동작하는 방식이다. 응답 페이지에 관계없이 웹 브라우저에서 발생한다.

 

대응방안 

  - XSS 공격은 IPS, IDS, 방화벽 등으로도 방지할 수가 없다.

  - 사용자 입력값 검증을 반드시 서버단에서 한다.

  - 사용자 입력 문자열에서 HTML 코드로 인식될 수 있는 특수문자를 일반문자로 치환하여 처리한다. (엔티티코드로 변환)

  - replace 등의 함수를 이용한 치환

 

HTML 특수문자  HTML Entity  HTML 특수문자 HTML Entity 
<, >   &lt;, &gt;  &quot;
 (, )  &#x28;, &#x29;  '  &#x27;
 &  &amp;  #  &#x23;
 /  &#x2F    

 

  - 게시판 등에서 HTML 태그를 허용해야하는 경우, HTML 태그 화이트리스트를 선정 후, 해당 태그만 허용하는 방식을 적용한다.

or

특정 태그를 필더링하여 저장하도록 설정.

xss_filter = ["frame", "script", "on"]  # 세 가지 필터링 키워드

for _ in xss_filter: param = param.replace(_, "*")  # 이용자가 입력한 값 중에 필터링 키워드가 있는 경우, '*'로 치환

 

 

About XSS Attack

Local storage is vulnerable because it's easily accessible using JavaScript and an attacker can retrieve your access token and use it later. However, while httpOnly cookies are not accessible using JavaScript, this doesn't mean that by using cookies, you are safe from XSS attacks involving your access token.

If an attacker can run JavaScript in your application, then they can just send an HTTP request to your server and that will automatically include your cookies. It's just less convenient for the attacker because they can't read the content of the token although they rarely have to. It might also be more advantageous for the attacker to attack using victim's browser (by just sending that HTTP Request) rather than using the attacker's machine.

 

 

참조:

https://stupidsecurity.tistory.com/17

https://4rgos.tistory.com/1

https://dev.to/cotter/localstorage-vs-cookies-all-you-need-to-know-about-storing-jwt-tokens-securely-in-the-front-end-15id

 

'프로그래밍 > 개발지식' 카테고리의 다른 글

정규표현식 문법 정리  (0) 2022.06.03
CSRF (Cross Site Request Forgery)  (0) 2022.06.02
쿠키 & 세션  (0) 2022.05.30
인증(Authentication) vs 인가(Authorization)  (0) 2022.05.30
SPA/MPA , CSR/SSR/SSG  (0) 2022.05.25

+ Recent posts