본문 바로가기
IT 보안

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

by 떠도리c 2024. 9. 23.
반응형

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

출처: Cloudflare

XSS는 OWASP Top 10 애플리케이션 보안 위험에서 두드러진 위협으로 특정됩니다. 공격자가 웹 사이트 자체를 공격하지 않고 웹 사이트에 직접 코드 또는 악성 스크립트를 삽입하는 공격 유형 중 하나입니다. 공격자는 JavaScript, Flash, Ajax 등으로 스크립트를 작성합니다.

사용자가 손상된 웹 사이트를 방문할 때 마다 클라이언트의 브라우저가 스크립트를 실행합니다. 웹 브라우저는 신뢰할 수 있는 소스에서 제공되는 이러한 스크립트를 악성으로 인식하지 못하므로 브라우저에서 해당 스크립트가 성공적으로 실행되고, 브라우저가 보유한 쿠키, 세션 토큰 및 기타 민감한 정보가 캡처됩니다.  이것은 웹 사이트의 평판을 손상시킬 뿐만 아니라 (공격자가 웹 사이트 자체를 훼손할 수도 있기 때문에) 사용자 자격 증명, 신용 카드 정보, 쿠키 등과 같이 사용자가 통신하는 모든 정보를 가로채기도 합니다. 더욱 심각한 점은 웹 사이트 관리자나 사용자는 악성 코드에 대한 단서를 전혀 가지고 있지 않아, 즉시 대응하지 않을 경우 막대한 피해로 이어진다는 것입니다.

 

 

XSS 공격 유형

반사형 XSS 또는 비지속형 XSS 공격

출처: Medium

이러한 유형의 공격은 애플리케이션이 HTTP 요청에서 데이터를 수신하지만 안전하지 않은 방식으로 응답을 포함할 때 발생합니다.

공격자는 악성 스크립트를 URL에 포함된 쿼리로 전달하거나, 링크로 게시하거나 이메일(피싱)을 이용하여 사용자에게 보냅니다.

사용자가 링크를 클릭하면 스크립트가 실행됩니다.

쿼리에 비정상 입력 값이 있기 때문에, 악성 스크립트는 대상 시스템의 브라우저가 로딩되고 있는 웹 페이지에 삽입되고, 이후 브라우저에 의해 실행됩니다. 공격자는 개인 데이터를 수신합니다. 정교하게 설계된 공격의 경우 공격자는 애플리케이션내에서 일반 사용자처럼 모든 작업을 수행하고 다른 사용자와의 상호 작용을 시작할 수도 있습니다. 계속해서 감염된 사용자로부터 오는 요청을 받은 사용자들이 늘어날 수 있기 때문에 이후에도 피해는 늘어나게 됩니다.

 

 

지속형 XSS 공격

출처: Medium

이 공격은 적절한 유효성 검사를 수행하지 않고 취약한 서버 자체에 사용자 입력을 저장할 때 발생합니다.

반사 형 XSS 공격과 달리, 사용자취약한 웹 애플리케이션을 방문하는 것만으로도 공격을 받습니다.

감염된 웹 사이트를 방문하는 사용자는 어떠한 액션을 수행하지 않아도, 이미 저장된 입력을 받아 로컬 브라우저에서 악성 스크립트를 실행하게 됩니다. 비록 이러한 유형의 공격이 덜 널리 퍼져 있지만 비지속적인 XSS 공격보다 더 파괴적입니다.

 

 

DOM 기반 XSS 공격

출처: Medium

이것은 웹 애플리케이션이 적절한 삭제없이 DOM(문서 객체 모델)에 데이터를 쓰는 경우에 발생합니다.

공격자가 제공하는 페이로드가 아니라 애플리케이션 자체에서 제공하는 클라이언트 측 스크립트의 취약점으로 인해 발생합니다. 공격자는 DOM의 여러 개체를 사용하여 XSS 공격을 만들 수 있습니다. 취약한 클라이언트 측 스크립트는 공격자가 삽입한 악성 스크립트를 대상 브라우저로 전달합니다.

 

 

XSS 공격의 예

가장 유명한 XSS 공격 중 하나는 미국 보안 연구원이자 해커인 Samy Kamkar의 이름을 딴 Samy 웜을 통해 수행되었으며, 이것은 마이스페이스를 통해 감염 및 전파되도록 설계되었습니다. 해커의 의도는 아니었기 때문에 네트워크에 큰 해를 끼치지는 않았지만, 소셜 네트워크를 빠르게 감염 시켰습니다.

해커는 2005년 10월 4일에 이 서비스를 시작했으며 백만개 이상의 마이스페이스 사용자 계정에서 이 서비스를 실행하기까지 20시간이 걸리지 않았습니다. 사용자가 이 페이로드를 실행하자마자 프로필 페이지에 “하지만 무엇보다 Samy는 내 영웅입니다”라는 메시지가 표시되었고, 친구 요청을 Kamkar에게 보냈습니다. 마이스페이스는 곧 취약점을 수정하였고, Kamkar을 경찰에 신고했습니다.

 

 

XSS 공격에 대비하기

위에 나열된 XSS 공격을 방지하려면 클라이언트와 서버 측 모두에서 적절한 보안 조치가 필요합니다. 페이스북 및 구글과 같은 인기있는 애플리케이션이 이 공격의 희생양이 되면서 XSS 공격을 방지하고 애플리케이션을 안전하게 유지하는 방법을 이해하는 것이 더욱 중요해졌습니다.

내장된 데이터 삭제, 유효성 검사 및 필터링 기능과 같은 시큐어 코딩 방법을 사용하는 것이 중요합니다. 사용자 입력 데이터를 필터링하면 최종 사용자에게 렌더링하기 전에 사용자 입력의 키 문자가 삭제됩니다. HTML 및 JS 코드를 필터링하고 특수 문자를 해당 HTML 또는 URL 인코딩된 문자열로 변환하면 공격자에게 공격의 기회를 박탈시키는데 도움이 됩니다.

코드베이스의 변경 사항을 수동으로 테스트하고 보안 테스트 도구의 도움을 받아, XSS를 찾고, 웹 사이트를 활성화하기 전에 식별된 취약점을 수정하는 것이 중요합니다. 웹 애플리케이션 취약성 스캔 도구를 정기적으로 사용하면 개발자가 애플리케이션의 문제점을 식별하고 효과적으로 수정하여 애플리케이션 보안 손상을 방지하는데 도움이 될 수 있습니다.

Ref. https://www.appsealing.com/

 

반응형