바로가기 메뉴
컨텐츠 바로가기
주메뉴 바로가기
하단정보 바로가기

Is Your Website Hackable?
70% are. Detect and Action with Acunetix

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

크로스 사이트 스크립팅 (XSS)은 클라이언트 측 코드 주입 공격을 말하며, 여기에서 공격자는 합법적인 웹사이트 또는 웹 어플리케이션으로 악성 스크립트 (또한 일반적으로 악성 페이로드라고도 함)를 실행할 수 있습니다. XSS는 가장 만연하는 웹 어플리케이션 취약성 중 하나이며, 웹 어플리케이션이 생성한 출력물 내에서 유효하지 않거나 암호화하지 않은 사용자 입력 정보를 사용할 때 발생합니다.

XSS를 활용하여, 공격자는 직접 피해자를 목표로 하지 않습니다. 대신에, 공격자는 본질적으로 피해자의 브라우저로 악성 스크립트를 전달하는 매개체로서 취약한 웹사이트를 이용하여, 피해자가 방문하는 웹사이트 또는 웹 어플리케이션 내 취약성을 이용합니다.

VBScript, ActiveX와 Flash (지금은 구식 또는 한물간 것으로 간주하지만) 내에서 XSS를 활용할 수도 있지만, 의심할 바 없이 가장 널리 악용되는 것은 JavaScript입니다. JavaScript는 대부분의 브라우징 경험에 근본적인 것이기 때문입니다.

크로스 사이트 스크립팅이 작용하는 방법

피해자의 브라우저 안에서 악성 JavaScript 코드를 가동하기 위해서, 공격자는 먼저 피해자가 방문하는 웹 페이지에 페이로드를 주입할 방법을 찾아야 합니다. 물론, 공격자는 소셜 엔지니어링 기법을 사용하여 사용자로 하여금 주입된 JavaScript 페이로드가 있는 취약한 페이지를 방문하도록 할 수 있습니다.

취약한 웹사이트에서 XSS 공격이 발생하기 위해서는 그 페이지에 직접 사용자가 입력을 할 필요가 있습니다. 그러면 공격자는 열 (string)을 삽입할 수 있으며, 피해자의 브라우저는 이 열을 웹 페이지 내에서 사용하고 코드로서 취급하게 됩니다.

아래의 서버 측 의사 코드를 사용하여 웹 페이지에 가장 최근의 명령어를 보여줍니다.

위의 스크립트는 단순히 명령어 데이터베이스에서 가장 최신의 명령어를 출력하며, HTML 페이지로 내용을 출력하고, 출력된 명령어는 오직 텍스트로만 구성된 것으로 가정합니다.

위의 페이지가 XSS에 취약한 이유는, 공격자가 < script>doSomethingEvil();< /script>와 같이 악성 페이로드를 포함하는 명령어를 제출할 수 있기 때문입니다.

웹 페이지를 방문하는 사용자에게 다음의 HTML 페이지가 나타납니다.

페이지가 피해자의 브라우저에서 로드될 때, 공격자의 악성 스크립트가 실행되며, 대부분은 사용자가 인지하거나 공격을 막을 수 없습니다.

중요 — XSS 취약성은 오직 공격자가 삽입하는 페이로드 (악성 스크립트)가 궁극적으로 피해자의 브라우저에서 분석될 경우 (이 경우 HTML로서)에만 존재할 수 있습니다.

JavaScript로 공격자가 할 수 있는 최악의 공격은 무엇일까?

공격자가 웹 페이지에서 JavaScript를 실행할 수 있을 때 할 수 있는 일의 결과는 바로 나타나지 않을 수 있으며, 특히 브라우저는 매우 엄격하게 통제되는 환경에서 JavaScript를 가동하고, 그러한 JavaScript는 사용자의 운영 시스템과 사용자의 파일에 제한적인 접속을 하기 때문입니다.

그러나, JavaScript가 다음과 같이 접속한다는 것을 고려하면, 창의적인 공격자가 JavaScript로 어떠한 일을 할 수 있는지 더 쉽게 이해할 수 있을 것입니다.

  • • 악성 JavaScript는 쿠키 접속을 포함하여, 웹 페이지의 나머지 부분이 갖는 것과 동일한 객체 모두에 접속 권한을 갖습니다. 쿠키는 때로 세션 토큰을 저장하는 데 사용되며, 공격자가 사용자의 세션 쿠키를 입수할 수 있으면, 그 사용자로 가장할 수 있습니다.
  • • JavaScript는 브라우저의 DOM으로 임의적인 변경을 읽고 만들 수 있습니다 (JavaScript가 가동되는 페이지 안에서).
  • • JavaScript는 XMLHttpRequest를 사용하여 임의의 목적지에 임의의 내용을 담은 HTTP 요청을 전송할 수 있습니다.
  • • 현대적인 브라우저에서 JavaScript는 사용자의 지오로케이션, 웹캠, 마이크, 심지어는 사용자의 파일 시스템에 있는 특정 파일에 접속 등, HTML5 API를 활용할 수 있습니다. 이러한 API 대부분이 사용자의 사전 동의를 요구하지만, 일부 영리한 소셜 엔지니어링과 결합한 XSS는 공격자에게 훨씬 더 많은 것을 가져올 수 있습니다.

위에서 설명한 내용들은, 소셜 엔지니어링과 결합하여, 공격자가 쿠키 도용, 키 로깅, 피싱 및 신분 도용을 포함하여, 고급 공격을 해낼 수 있도록 합니다. 매우 중요한 것은, XSS 취약성은 공격자들이 더 심각한 공격으로 진행할 수 있는 완벽한 근거를 제공합니다.

“크로스 사이트 스크립팅이 사용자의 문제입니까?”

공격자가 웹 페이지에서 XSS 취약성을 남용하여 방문자의 브라우저에서 임의적인 JavaScript를 실행할 수 있으면, 해당 웹사이트 또는 웹 어플리케이션, 그리고 그 사용자의 보안이 위협을 받은 것입니다. XSS는 다른 보안 취약성처럼, 사용자의 문제가 아닙니다. 여러분의 사용자들에게 영향을 미치고 있는 한, 여러분에게도 영향을 미칠 것입니다.

크로스 사이트 스크립팅의 구조

XSS 공격을 위해서는 세 가지 행위자가 필요합니다 - 웹사이트, 피해자, 그리고 공격자.

아래 예시에서, 공격자의 목표는 피해자의 쿠키를 도용하여 피해자인 척 하는 것이라고 가정합니다. 매우 다양한 방법으로 공격자가 관리하는 서버로 쿠키를 전송할 수 있으며, 그 중 한 가지 방법은, 공격자가 XSS 취약성을 통해서 피해자의 브라우저에서 아래와 같은 JavaScript 코드를 실행하는 것입니다.

아래 그림은 단순한 XSS 공격의 단계별 진행 구조를 자세히 보여줍니다.

  • 1. 공격자는 일부 악성 JavaScript로 취약한 형식을 제출하여 웹사이트의 데이터베이스에 페이로드를 주입합니다.
  • 2. 피해자가 웹사이트에서 웹 페이지를 요청합니다.
  • 3. 웹사이트가 HTML 바디의 일부로서 공격자의 페이로드가 담긴 페이지를 피해자의 브라우저로 서비스합니다.
  • 4. 피해자의 브라우저가 HTML 바디 내 악성 스크립트를 실행합니다. 이 경우, 피해자의 쿠키를 공격자의 서버로 전송합니다. 이제 공격자는 HTTP 요청이 서버에 도달하면 피해자의 쿠키를 추출해 내면 됩니다. 그 이후에 공격자는 피해자로부터 도용한 쿠키로 피해자인 척 할 수 있습니다.

크로스 사이트 스크립팅 공격 매개체의 몇 가지 예시

다음은 공격자가 XSS 공격을 통해서 웹사이트 또는 웹 어플리케이션의 보안을 위협하기 위해서 사용할 수 있는 XSS 공격 매개체 목록입니다 (전체 목록은 아님). XSS 페이로드 예시의 더 전체적인 목록은 이곳에서 확인할 수 있습니다.

< script> 태그
< script> 태그는 가장 간단한 XSS 페이로드입니다. 스크립트 태그는 외부 JavaScript 코드를 참고하거나 또는 스크립트 태그 내 코드를 끼워 넣습니다.

< body> 태그
온로드 속성 또는 배경 속성과 같은 더 모호한 속성을 사용하여 XSS 페이로드를 < body> 태그 안으로 전달할 수 있습니다

< img> 태그
일부 브라우저는 < img>에서 찾은 JavaScript를 실행합니다.

< iframe> 태그
< iframe>태그는 또 다른 HTML 페이지를 상위 페이지로 끼워 넣을 수 있도록 합니다. Iframe은 JavaScript를 포함할 수 있지만, iFrame의 JavaScript는 브라우저의 컨텐츠 보안 정책 (CSP)으로 인해서 상위 페이지의 DOM에 접속하지 않음을 기억해야 합니다. 그러나, Iframes는 여전히 피싱 공격을 실행하는 매우 효과적인 수단입니다.

< input> 태그
일부 브라우저에서, < input>태그의 유형 속성이 이미지로 설정된 경우, 이를 조작하여 스크립트를 끼워 넣을 수 있습니다.

< link> 태그
< link>태그는 외부의 스타일 시트에 연결하는 데 사용하며, 스크립트를 포함하기도 합니다.

< table> 태그
표와 td 태그의 배경 속성을 사용하여 이미지 대신에 스크립트를 언급할 수 있습니다.

< div> 태그
< div>태그는 < table>< td>태그와 유사하게, 배경을 규정할 수 있으며, 그러므로 스크립트를 끼워 넣을 수 있습니다.

< object> 태그
< object>태그를 사용하여 외부 사이트에서 스크립트를 포함할 수 있습니다. .

여러분의 웹사이트 또는 웹 어플리케이션이 크로스 사이트 스크립팅에 취약합니까?

XSS 취약성은 인터넷에서 가장 널리 퍼져 있는 웹 어플리케이션 취약성 중 하나입니다. 다행히도, Acunetix를 사용하여 자동화 웹 취약성 스캔을 가동하여 여러분의 웹사이트 또는 웹 어플리케이션이 XSS에 취약하거나 다른 취약성이 있는지 쉽게 검사할 수 있습니다. 14일 무료 사용권을 다운로드하거나, 저희 온라인 서비스에 등록하여 여러분의 웹사이트 또는 웹 어플리케이션을 스캔해 보세요.