크로스 사이트 스크립팅(Cross-Site Scripting , XSS), OWASP Top 10 2017 A7
OWASP Top 10에서 매우 중요하게 다루고 있는 크로스 사이트 스크립팅()은 2017년 버전에서 7위로 순위가 내려오긴 했지만 여전히 주의해야 할 부분입니다. XSS는 사용자 요청에 의해 검증되지 않은 외부 입력이 포함된 동적 웹 페이지가 생성, 전송되는 경우, 사용자가 해당 동적 웹 페이지를 열람할 때 웹 페이지에 포함된 악성 스크립트가 실행되는 공격 방식입니다. XSS 공격을 통해 아래와 같은 피해가 발생할 수 있습니다.
- 쿠키 정보 또는 세션 ID 탈취
- 시스템 관리자 권한 탈취
- 악성코드 다운로드
크로스 사이트 스크립팅(Cross-Site Scripting , XSS)의 유형
1. 저장식 XSS 공격(Stored XSS, persistent)
공격자가 제공한 스크립트가 피해 서버에 저장되어 지속적으로 사용자에게 노출되는 공격 유형입니다. 공격자는 다른 사용자에게 보여지는 폼(메시지 입력 부분, 방명록, 댓글)에 악의적인 스크립트를 저장하고, 후에 다른 사용자가 같은 곳을 방문하게 되면 웹페이지에 로드되면서 코드가 실행됩니다. 피해 서버에서 해당 사실을 조치하기 전까지 지속적으로 웹 페이지의 사용자가 공격에 노출되게 됩니다.
- 공격자는 대상 사이트에 악성코드가 생성된 글을 생성합니다. 이 사이트를 이용하는 피해자들이 해당 글을 열람하게 되면 악성코드가 실행되면서 피해자의 정보가 유출됩니다.
2. 반향식 XSS 공격(Reflect XSS, UnPersistent)
반사 또는 반향식 XSS 공격이라 불리며, 가장 일반적인 형태입니다. 이 방식은 HTTP 응답이 요청 데이터를 그대로 다시 보여줄 때 유효합니다. 따라서 입력한 값을 그대로 다시 출력하는 검색엔진과 같은 사이트를 이용한 공격이 주를 이룹니다.
- 공격자가 이메일을 통해 XSS 공격이 포함된 링크를 전송합니다. 피해자가 이 링크를 클릭하면 정상적인 사이트가 표시되지만 악성 코드도 함께 실행되어 공격자에게 정보가 노출됩니다
3. DOM-XSS 공격
이 공격은 XSS에 취약한 브라우저를 대상으로 행해집니다. HTML 페이지가 호출되면 브라우저는 문서의 DOM(Document Object Model) 구조를 분석하고 파싱하는 작업을 수행하게 됩니다. 공격자는 DOM을 조작하여 원하는 결과를 만들어냅니다.
- 공격자는 피해자에게 악성코드가 포함된 URL을 전송합니다.
- 피해자는 이 링크를 클릭합니다.
- 링크의 대상이 되는 서버는 요청에 정상적으로 응답하지만 이 자체에는 악성코드가 존재하지 않습니다.
- 피해자의 브라우저에서 응답을 파싱하면서 파라미터에 포함된 악성코드로 인해 DOM이 조작됩니다.
- 피해자의 브라우저는 악성코드에 의해 변경된 웹 페이지를 실행하게 됩니다.
- 공격자는 유저의 정보를 얻습니다.
XSS 대응 방안
XSS 공격의 대부분은 시큐어 코딩을 통해 예방이 가능합니다. 웹 문서에서 폼이 작성될 때는 실행될 수 있는 코드들은 실행될 수 없는 형태로 치환하여 저장하여야 합니다. 개발자가 모든 문자열을 필터링할 수는 없기 때문에 Third-party Application의 도움을 받는 방법도 있습니다.
- 입출력 값의 검증 및 무효화:
<Script>
태그를 무효화하기 위해 특수문자의 치환을 수행합니다.<Script>
- 보안 라이브러리 사용: AntiXSS와 같은 Third-party 라이브러리를 사용하여 XSS를 예방할 수 있습니다.
- 브라우저 확장 프로그램: 사용자 측면에서 XSS를 예방하는 방법 중 하나입니다. 파이어폭스나 모질라 계열 브라우저의 Noscript와 같은 확장 프로그램을 통해 XSS 공격을 예방할 수 있습니다.
참고 자료
CloudFlare, What is cross-site scripting?
GeeksForGeeks, What is Cross Site Scripting (XSS) ?
DOM-Based Cross Site Scripting (DOM-XSS)
KISA, 크로스 사이트 스크립팅(XSS) 공격 종류 및 대응 방법
다른 글 더 보기
인젝션(Injection), OWASP Top 10 2017 A1
취약한 인증(Broken Authentication), OWASP Top 10 2017 A2
민감한 데이터 노출(Sensitive Data Exposure), OWASP Top 10 2017 A3
XML 외부 개체(XML External Entity, XXE) 취약점, OWASP Top 10 2017 A4
취약한 접근 제어(Broken Access Control) 취약점, OWASP Top 10 2017 A5
잘못된 보안 구성(Security Misconfiguration), OWASP Top 10 2017 A6
최근댓글