[모의해킹] 크로스 사이트 스크립팅(XSS)

cielo ru·2024년 8월 22일
0

모의해킹

목록 보기
13/14
post-thumbnail

➰ XSS?(Cross Site Scripting)

크로스 사이트 스크립팅은 웹사이트에 악성 스크립트를 주입하는 행위를 말한다.

공격자가 상대방의 브라우저에 스크립트가 실행되도록 해 사용자의 세션을 가로채거나, 웹사이트를 변조하거나, 악의적 콘텐츠를 삽입하거나, 피싱 공격을 진행하는 것을 말한다.

XSS 공격은 스크립트 언어와 취약한 코드를 공격 대상으로 하며, 협업에서는 줄여서 '크사'라고 부른다.

📍 자주 발생하는 취약점인가요?
XSS 공격(XSS Attack)은 10가지 웹 애플리케이션 보안 취약점 목록인 OWASP Top10에 포함되어 있을 정도로 자주 발생하는 공격이다.
사용자가 글을 쓰고 읽을 수 있는 게시판에서 자주 발생하지만, 사용자의 입력 값을 웹페이지에 표시하는 곳에서도 공격이 발생할 수 있다.

❓왜 크로스 사이트 스크립팅이라고 부를까?
크로스 사이트 스크립팅은 웹 사이트(site) 사이를 넘어서(cross) 공격한다는 의미에서 크로스 사이트 스크립팅이라는 용어가 생겨났다.


EX)
실제로 테슬라는 차량 정보를 훔치거나 조작할 수 있도록 해주는 XSS 취약점을 발견했고, XSS 오류를 찾아낸 보안 전문가에게 1만 달러를 보상할 정도로 크리티컬하고 자주 발생하는 취약점이다.

기사 출처 - https://www.boannews.com/media/view.asp?idx=81485


➰ 취약점 내용

사용자가 입력한 내용을 기반으로 페이지를 동적으로 생성하는 웹 애플리케이션 (검색, 게시물 등록 등)을 악용하면, 해당 페이지를 보는 사용자의 웹 브라우저에서 임의의 코드 실행이 가능하게 된다.

아래와 같이 임의의 코드를 삽입하여 구현된다.

<script>스크립트 코드</script>

<script>alert(document.cookie)</script>

로그인 Session hijacking, 악성 프로그램 설치 등의 Client hacking의 위험성이 존재하므로 사용자 입력 값에 대한 검증 로직을 구현하고,필터링이 가능하도록 설정해야 한다.

➿ XSS를 어떻게 적용할까?

-> 📧이메일 피싱과 함께 사용

XSS를 활용하여 혹할만한 이메일 내용들을 구성하여 악성 링크나 첨부 파일을 클릭하게 유도한다. 사용자를 속여 링크를 클릭한다면 피해자의 웹 브라우저에서 악성 스크립트를 실행시켜, 로그인 정보나 쿠키 등을 탈취할 수 있다.

이는 URL 피싱을 이용한 공격과 XSS 취약점을 이용한 공격을 결합시킨 형태라고 볼 수 있다.

➿ 어떤 위험이 발생할까?

  • 세션 하이재킹(Session Hijacking)
    공격자가 XSS(크로스 사이트 스크립팅) 공격을 통해 사용자의 세션 쿠키에 접근하면, 이를 이용해 사용자를 사칭하고 이메일 계정에 무단으로 접근할 수 있다. 이로 인해 사용자 데이터가 탈취되거나 계정이 악의적으로 이용될 수 있다.

  • 데이터 도난
    이메일에는 중요한 정보나 민감한 데이터가 포함된 경우가 많다. 공격자는 XSS 취약점을 악용해 사용자가 모르는 사이에 이메일을 읽거나 첨부 파일을 다운로드하는 방식으로 데이터를 훔칠 수 있다.
    -> 한국 드라마에 자주 나오는 해킹 기법이다.

  • 악성코드 확산
    이메일에 포함된 XSS 공격은 사용자의 디바이스에 악성코드(멀웨어)를 다운로드하고 설치하는 데 악용될 수 있다. 이를 통해 추가적인 공격이 발생하거나, 다른 시스템에도 감염을 확산시킬 수 있다.

➰ 점검기준

🌱 양호

  1. 사용자 입력값 및 전달 파라미터 값에 대한 검증 및 필터링이 이루어지는 경우

  2. 웹 애플리케이션이 사용자 입력을 출력하기 전에 HTML 엔티티 인코딩(예: <를 <로) 등을 통해 스크립트 실행을 차단하는 경우

  • 사용자 입력값 : URL, 폼 데이터, 쿼리 파라미터

💊 취약

  1. 사용자 입력값 및 전달 파라미터 값에 대한 검증이 누락되어 스크립트 실행이 가능한 경우

  2. 사용자 입력이 인코딩 없이 HTML, JavaScript 등의 콘텐츠로 출력되어 스크립트가 그대로 실행되는 경우

➰ 점검 절차

서버로 전달되는 사용자 입력 폼(게시판, 댓글, 검색 등) 및 URL 파라미터에 스크립트를 삽입하여 사용자 브라우저에서 실행 여부를 점검한다.

  1. 스크립트가 실행되는지 확인하기 위해 사용자 입력 구간에 스크립트를 삽입하여 사용자 브라우저에서 실행 여부를 점검한다.
    http://www.example.com/search.php?keyword=”>
http://www.example.com/search.php?keyword=”><script>alert(“Test”);</script>
  1. QnA 게시판에서 글을 작성할 때 내용 입력란에 아래 스크립트를 삽입하여 글을 작성한다.
Test<img src=# oneerror=alert("XSSTest")>

  1. alert 구문이 실행되지 않고 내용 그대로 글이 작성된다.
    - 점검결과 : 양호
    3.1 양호한 경우
    에러메시지가 발생한다.

    3.2 취약한 경우
    스크립트가 실행된다.

🌱 실제로 velog 에서 코드 구문이 아닌 곳에서 해당 코드를 테스트 했을 때 스크립트 코드가 실행되지 않았다. Velog는 스크립트 구문이 실행되지 않도록 XSS 공격을 잘 막아놓았다 .

📍 스크립트 실행 여부 점검 예문

//HTML 속성 내 테스트
"><script>alert('XSS');</script>

//이벤트 핸들러를 활용한 테스트
<img src="#" onerror="alert('XSS')">

//URL 파라미터 테스트
<a href="javascript:alert('XSS')">Click me</a>

//특수문자 및 엔티티 인코딩 우회
<script>String.fromCharCode(88,83,83)</script>

이 외에 여러 구문을 활용할 수 있으며, HTML 인코딩을 활용하는 등 필터링 우회를 접목하여 수행이 가능하다.

➰ 대응 방안

  1. 웹 서버에서 입력 값에 정의된 문자 길이를 검증하여 javascript 등의 명령이 삽입되지 않도록 수정한다.

  2. 악성스크립트 실행방지를 위해 이를 제거하는 Strip_tags() 함수 또는 치환해주는 htmlspecialchars() 함수를 사용한다.

  3. 웹 서버의 검증 치환 등의 과정은 서버 사이드 스크립트(Server Side Script)에서 구현하여 검증 치환기능의 우회를 차단한다.

  4. 문자열 특수 기호 등을 변환함수를 사용하여 치환하여 저장한다.

  5. 이메일 클라이언트는 수신되는 모든 이메일을 철저히 검사하고 필터링하기 위해 보안 기능을 갖춘 이메일 보안 제품을 구독하거나 구매해 사용한다.


❓ XSS와 CSRF는 많이 헷갈리는 취약점이다. 용도를 알고 사용해야 하는 취약점이므로 둘의 차이를 CSRF 취약점과 함께 다음 포스팅에서 알아보자.


➰ 참고

profile
Cloud Engineer & BackEnd Developer

0개의 댓글