보안 용어집: WAF

크로스 사이트 스크립팅(XSS)

크로스 사이트 스크립팅(XSS)

크로스 사이트 스크립팅(XSS) 공격은 악성 JavaScript 코드를 웹사이트에 주입하여 사용자의 브라우저를 표적으로 삼습니다. 웹사이트에 악성 JavaScript 코드를 추가하기 위해 악용되는 여러 가지 취약점이 있습니다. 성공적인 XSS 공격은 공격자가 사용자의 브라우저와 해킹된 웹사이트의 사용자 세션 정보에 액세스할 수 있게 합니다.

크로스 사이트 스크립팅(XSS) 공격은 사용자의 입력을 제대로 처리하지 못하는 웹 애플리케이션의 취약점을 악용합니다. 이러한 취약점을 통해 공격자는 다른 사용자가 보는 웹 페이지에 악성 JavaScript 코드를 삽입할 수 있습니다. 삽입된 스크립트는 사용자 세션의 컨텍스트에서 실행될 수 있으며, 공격자는 세션 토큰, 쿠키, 개인 데이터와 같은 민감한 정보에 액세스할 수 있습니다. 이는 사용자 계정과 개인 정보에 대한 무단 액세스로 이어질 수 있습니다.

XSS 공격 유형

XSS 공격에는 여러 유형이 있습니다.

  1. 저장된(또는 지속적인) XSS: 악성 스크립트가 웹사이트의 데이터베이스에 직접 삽입됩니다.
  2. 반사형 XSS: 스크립트를 사용자에게 이메일이나 링크로 전송한 다음, 이 스크립트가 웹사이트에서 사용자의 브라우저로 다시 반사되는 방식입니다.
  3. DOM 기반 XSS: 웹사이트의 문서 객체 모델을 악용하며 전적으로 브라우저에서 발생합니다.

크로스 사이트 스크립팅(XSS) 취약점의 예

XSS 취약점은 지속적으로 가장 심각한 웹 취약점 중 하나로 평가되어 왔으며 지속적으로 상위 3위 안에 들었습니다. OWASP 상위 10위. 위에서 살펴본 것처럼 XSS는 프런트 엔드, 특히 브라우저 내에서 발생하는 취약성 유형이므로 영향을 받는 대상도 프런트 엔드 사용자입니다. XSS 취약성의 주요 원인은 애플리케이션의 입력 및 출력 처리가 부적절하여 브라우저가 "특별히 제작된" 문자를 유효한 코드로 해석하고 실행하여 해를 끼치는 것입니다.

피카츄 대상 머신의 크로스 사이트 스크립팅 모듈을 통해 취약점의 예를 제공할 수 있습니다.

대상 머신의 입력 상자에 "kobe"를 입력하면 농구 선수 Kobe Bryant의 사진과 "당신도 Kobe처럼 영원히 젊고 열정적이기를 바랍니다!"라는 동기부여 문구가 반환됩니다.

크로스 사이트 스크립팅(XSS)_01

백엔드 PHP 코드를 분석하면 해당 코드가 동기부여 명언의 메시지 매개변수에 대한 사용자 입력을 아무런 처리 없이 직접 반환하여 XSS 취약점을 생성하는 것을 알 수 있습니다.

if($_GET['제출']이(가) 설정되어 있으면

($_GET['메시지']가 비어있는 경우){

<em>$html.=&quot;<p class='notice'>&#039;kobe&#039;를 입력해보세요 -_-</p>"; </em>

}또 다른{

if($_GET['메시지']=='코비'){

<em>$html.=&quot;<p class='notice'>항상 젊고 열정적 되기를 바랍니다!{$_GET[&#039;message&#039;]}</p><img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/kobe.png' />"; </em>

}또 다른{

<em>$html.=&quot;<p class='notice'>{$_GET[&#039;message&#039;]}는 누구야? 상관없어!</p>&quot;; //이 코드는 동기부여 명언의 메시지 매개변수에 대한 사용자 입력을 아무런 처리 없이 바로 반환합니다.</em>

}

}

}

XSS 공격 데모

입력 상자에 XSS 페이로드 문장을 입력합니다 – kobe , 입력 상자에 입력 길이 제한이 있음을 보여줍니다.

크로스 사이트 스크립팅(XSS)_02

앞서 언급했듯이 XSS는 프런트엔드, 특히 브라우저 내에서 발생하는 취약성 유형입니다. 따라서 영향을 받는 대상은 프런트엔드 사용자이기도 합니다. 이 길이 제한을 다음과 같이 수정해 보겠습니다.

크로스 사이트 스크립팅(XSS)_03

고베에 들어가다 다시 팝업창이 나타납니다.

크로스 사이트 스크립팅(XSS)_04

문제는 백엔드 코드가 사용자 입력을 처리하지 못하고 단순히 클라이언트에 반환했기 때문에 발생했습니다. 그 결과, 우리가 입력한 팝업의 JavaScript 코드도 직접 반환되어 브라우저가 코드를 실행하고 팝업 창을 표시하게 되었습니다.

크로스 사이트 스크립팅(XSS)_05

공격자가 웹사이트에서 XSS 취약점을 발견하면 이를 악용하여 사용자 쿠키를 훔치고 피싱 공격을 수행하는 등의 작업을 할 수 있습니다. 예를 들어, 입력란에 다음 공격 코드를 입력할 수 있습니다.

브라우저가 이 JS 코드를 실행하면 공격자의 원격 서버인 47.96.96.34로 쿠키를 전송합니다.

크로스 사이트 스크립팅(XSS)_06

XSS 공격을 방어하는 방법?

XSS 공격을 방어하려면 웹 개발자는 적절한 입력 유효성 검사와 출력 인코딩을 보장해야 합니다. 여기에는 코드로 해석될 수 있는 문자를 필터링하거나 이스케이프하여 사용자 입력을 삭제하는 작업이 포함됩니다. CSP(콘텐츠 보안 정책) 헤더를 사용하면 웹사이트에서 신뢰할 수 있는 소스를 지정하여 승인되지 않은 소스의 스크립트 실행을 차단함으로써 XSS를 방지하는 데 도움이 될 수도 있습니다. 공격자가 악용할 수 있는 새로운 취약점을 방어하려면 웹 애플리케이션을 정기적으로 업데이트하고 패치하는 것이 중요합니다. 또한 알 수 없는 링크를 클릭할 때의 위험성에 대해 사용자에게 교육하고 브라우저를 최신 상태로 유지하면 XSS 공격의 희생양이 될 위험을 줄일 수 있습니다.

더 알아보기 CDNetworks의 WAF XSS 공격을 방지하려면