XSS(교차 사이트 스크립팅) 공격은 전자 상거래 비즈니스 및 기타 다양한 웹 응용 프로그램이 직면한 가장 만연하지만 쉽게 고칠 수 있는 주입 공격 중 하나로 언급됩니다. 구식 웹 기술을 기반으로 구축된 대상 응용 프로그램에서 풍부한 클라이언트 측 UI를 사용하는 최신 응용 프로그램에 이르기까지 XSS는 모든 것을 괴롭혔습니다. 그러나 XSS 공격의 잠재적인 원인이 될 수 있는 취약점을 적시에 쉽게 감지하고 수정할 수 있다는 점을 인식하는 것이 중요합니다.
교차 사이트 스크립팅 공격은 어떻게 발생합니까?
XSS(교차 사이트 스크립팅) 공격은 다음과 같은 경우에 발생합니다.
- 신뢰할 수 없는 소스를 통해 입력 데이터를 요청하는 웹 애플리케이션
- 웹 요청을 통해 입력된 동적 콘텐츠는 악성 콘텐츠가 없는지 확인되지 않고 사용됩니다.
이러한 입력 데이터의 간단한 예는 이름, 이메일 ID, 사용자 이름-비밀번호 또는 양식의 입력을 제출할 때입니다. 기본 코드가 입력의 유효성을 제대로 검사하지 않으면 위에 입력된 각 입력을 조작할 수 있습니다. 공격자는 일반적으로 Javascript 코드, HTML 또는 브라우저에서 실행할 수 있는 모든 형태의 코드 형태로 악성 콘텐츠를 주입할 수 없다는 점을 이용합니다. 최종 사용자는 신뢰할 수 없는 스크립트를 의심할 방법이 없으며 결국 실행하게 됩니다. 일단 삽입되면 스크립트는 이 사이트에서 사용하는 쿠키, 세션 토큰 또는 민감한 정보에 액세스할 수 있습니다.
XSS 공격에는 3가지 유형이 있습니다.
- DOM 기반 공격 :클라이언트 측에서 악의적으로 코드를 주입하여 발생합니다. 삽입된 코드는 Javascript, Flash, Visual Basic 등이 될 수 있습니다.
- 지속적인 XSS 공격: 페이로드가 서버 측에 저장되고 페이지에 대한 사용자 요청이 있을 때 검색될 때 발생
- 비영구적 XSS 공격: 조작된 입력으로 취약한 웹 사이트에 대한 링크를 열어 페이로드가 사용자에게 다시 반영될 때 발생합니다.
XSS(교차 사이트 스크립팅) 공격 분석
공격자는 XSS를 어떻게 악용합니까?
일반적으로 공격자는 XSS 취약점을 사용하여 최종 사용자의 세션 쿠키를 추출하여 최종적으로 공격자가 사용자의 계정에 액세스할 수 있도록 합니다. 위 시나리오의 예는 다음과 같습니다.- 귀하가 액세스하는 웹사이트에는 댓글 필드가 있습니다.
- 공격자는 댓글 섹션에 다음 페이로드를 게시합니다.
- 합법적인 사용자가 다음 댓글을 보기 위해 댓글 상자를 열면 HTML이 이 스크립트를 구문 분석합니다.
- 브라우저에서 HTML 파싱이 완료되면 사용자의 쿠키가 서버의 공격자에게 전송됩니다.
교차 사이트 스크립팅 공격의 악명 높은 사례
XSS 공격은 주로 금전적 이득을 위해 발생하며 주목할만한 것은 전자 상거래 대기업 eBay에 대한 과거 공격입니다. 해커는 악의적인 자바스크립트 코드를 값싼 아이폰의 여러 목록에 삽입했으며, 이는 사용자 자격 증명을 손상시키기 위해 생성된 가짜 로그인 페이지로 사용자를 리디렉션했습니다.
전자 상거래 사이트 외에도 여러 소셜 미디어 사이트가 이러한 악명 높은 공격의 대상이 되었습니다. Twitter는 StalkDaily라는 웹사이트에 악성 링크를 설치하는 XSS 웜의 표적이 되었습니다. 잘 알려진 또 다른 XSS 공격은 Samy 웜에 의한 MySpace 공격입니다. MySpace 사용자의 프로필 페이지를 변경하고 임의의 친구 요청을 보내는 양성 바이러스입니다.
XSS 공격 완화를 위한 예방 조치
XSS 공격을 방지한다는 것은 사용자가 페이로드를 입력할 수 없도록 하는 것이 아니라 브라우저에서 HTML로 구문 분석되는 것을 방지하는 조치를 취하는 것을 의미합니다. 즉, XSS 공격을 방지하는 데 사용되는 몇 가지 방법론이 있습니다.-
입력 검증
XSS를 방지하려면 영숫자 또는 경우에 따라 특수 문자에 대한 대부분의 입력을 화이트리스트에 추가하십시오. 이렇게 하면 표면 공격이 줄어들고 버그 가능성이 최소화됩니다.
-
보안 DOM 요소 사용
종종 DOM 요소(문서 개체 모델)의 안전하지 않은 처리는 풍부한 클라이언트 UI에서도 XSS 공격으로 이어집니다. 예를 들어 innerHTML 속성을 사용하면 사용자 입력이 Javascript 이벤트가 있는 XSS로 렌더링됩니다. 이 경우 안전한 대안은 contentText 또는 innerText를 사용하는 것입니다.
-
자바스크립트 이스케이프
작은따옴표를 이스케이프하면 Javascript 내에서 삽입을 방지할 수 있습니다. 삽입 문제를 방지하려면 '와 함께 작은따옴표를 사용하는 HTML 인코딩을 사용해야 합니다.
-
출력 인코딩
출력 인코딩은 최대 XSS 페이로드를 무력화할 때 훌륭하게 작동합니다. 이 방법은 서버 측 주입 공격을 완화하기 위해 작동합니다. HTML 인코딩은 다소 일반적인 방법이지만 URL 인코딩은 링크 및 리디렉션에서 마크업 삽입을 제거하는 데 도움이 될 수 있습니다.