본문 바로가기

old/Cyber Security

사이버 보안: XSS이란

반응형

정의

사이트 간 스크립팅 (Cross-site scripting)

  • 웹 상에서 가장 기초적인 취약점 공격 방법중 하나
  • 권한이 없는 사용자가 악의적인 용도로 웹 사이트에 스크립트를 삽입하는 공격 기법입니다. 대표적인 클라이언트 측 코드를 삽입하는 공격이기도 합니다.

취약점 발생 지점 리스트

  • Stored XSS: 게시글 작성공간, 제목, 내용, 작성자 등
  • Reflected XSS: 피라미터를 입력받는 get방식 요청(post방식을 get방식으로 바꿔도 아무 문제없는곳)
  • DOM XSS: 프레그먼트를 사용해서 데이터를 받는 모든 페이지

취약점 검증 방법

  • Stored XSS - 게시글에 자바 스크립트 작성: 의도치 않은 희생자를 만들수 있으므로, alert나 시간 출력등으로 대체합니다.
    • Form URL: 게시글작성 페이지
    • Process URL: 게시글 작성을 확인하는 페이지(피라미터)
    • View URL: 게시글을 보는 페이지
<script>alert(document.cookie)</script>
<script>리다이렉트</script>
<span id="date"><?php echo date("Y-m-d"); ?></span>
  • Reflected XSS - 링크의 피라미터에 스크립트를 담아서 실행: 의도치 않은 희생자를 만들수 있으므로, alert나 시간 출력등으로 대체합니다.
<http://example.com/search?query=>alert(1)
  • DOM XSS - 프레그먼트를 사용하는 웹페이지에 스크립트를 추가: 의도치 않은 희생자를 만들수 있으므로, alert나 시간 출력등으로 대체합니다.
<http://example.com/#>alert(1)

사회공학기법

상대방의 쿠키, 아이디, 비밀번호등을 보내주는 링크나 게시글에 입력하도록 유도하여 그 정보를 탈취하는 사회공학기법입니다.

사이버 보안: 사회공학기법이란?

SQLi Vs. XSS

SQL Injection은 서버를 공격하는 기법이고, XSS는 사용자를 공격하는 기법이라는 차이가 있습니다.

종류

  • Stored XSS (저장형 XSS): 악성 스크립트가 서버에 저장되어, 해당 페이지를 방문하는 모든 사용자에게 전달되는 형태입니다.
  • Reflected XSS (반사형 XSS): 악성 스크립트가 사용자로부터 입력받은 값에 포함되어, 해당 페이지를 요청한 사용자에게만 전달되는 형태입니다.
  • DOM-based XSS (DOM 기반 XSS): 악성 스크립트가 웹 페이지의 동적인 DOM(Document Object Model) 구조를 조작하여 실행되는 형태입니다.

공격법

공격 시나리오

  1. http 메서드가 post오는 요청을 확인합니다.
  2. response된 결과에 post에 넣은 데이터(피라미터)가 똑같이 들어가 있는지 확인합니다.
  3. post요청을 get요청으로 변경해도 요청이 제대로 처리되는지 확인합니다.
  4. get방식이므로, 피라미터를 변경해서 스크립트가 들어갈수 있는지 확인합니다.
  5. 확인하는 스크립트는. <>’”<script> document.cookie 등등 입니다.
  6. 모두 잘 되는것을 확인한후에 이를 이용해서 XSS공격용 링크를 작성한뒤, 이를 사회공학기법을 사용해서 사용자가 클릭하도록 합니다.

XSS 발생 과정

  1. 사용자는 악의적인 공격자가 만든 링크를 클릭하여 게시글을 요청합니다.
  2. 링크는 이미 악성 스크립트를 포함한 게시글 데이터를 웹 서버로 반환합니다.
  3. 웹 서버는 요청을 받고 웹 컨테이너로 전달합니다.
  4. 웹 컨테이너는 게시글 데이터를 웹 서버에 반환하고, 웹 서버는 사용자에게 게시글 데이터를 반환합니다.
  5. 사용자는 게시글 내용을 확인합니다.
  6. 웹 서버는 악성 스크립트를 실행하기 위해 웹 컨테이너에 악성 스크립트 요청을 보냅니다.
  7. 웹 컨테이너는 악성 스크립트를 실행한 후, 웹 서버에 악성 스크립트 응답을 전송합니다.
  8. 웹 서버는 악성 스크립트 응답을 공격자에게 반환하며, 이 응답에는 사용자 정보가 포함될 수 있습니다.

공격 예제

XSS 공격기법 리스트

대응 방법

HTML entity

이는 근본적인 XSS 문제를 해결합니다.

HTML entity는 HTML 문서에서 특수 문자나 기호를 나타내는 데 사용되는 특별한 문자열입니다. HTML은 일부 문자를 텍스트로 직접 표현할 수 없기 때문에 이러한 특수 문자를 대체하기 위해 HTML entity를 사용합니다. HTML entity는 **&**로 시작하고 **;**로 끝나는 특정 문자열입니다.

HTML entity는 텍스트에서 특정 문자의 기능을 바꾸지 않으면서 그 문자를 나타냅니다. 가장 일반적인 HTML entity는 다음과 같습니다:

  • &amp; (&): ampersand 기호
  • &lt; (<): 작은 부등호 기호 (less than)
  • &gt; (>): 큰 부등호 기호 (greater than)
  • &quot; ("): 쌍따옴표 (double quotation mark)
  • &apos; ('): 따옴표 (single quotation mark)

HTML editor의 경우

HTML entity로 변경 할수 없습니다. 대부분의 html태그를 사용할수 없게 되기 때문입니다.

이런경우,

  1. html→ html entity로 치환한다
  2. 화이트리스트 기반으로 살려줄 태그를 살려준다
  3. 블랙리스트기반으로 event handler를 필터링한다. (속성필터)
반응형

'old > Cyber Security' 카테고리의 다른 글

CSRF 공격기법 리스트  (0) 2023.06.20
CSRF (Client Side Request Forgery) 란  (0) 2023.06.03
웹해킹: SQL injection  (0) 2023.05.11
아스키 코드 표  (0) 2023.04.30
16진수 아스키 코드 표  (0) 2023.04.30