크로스 사이트 스크립팅(XSS)은 일반적으로 사용자 입력을 허용하는 웹사이트 및/또는 웹 애플리케이션에서 발견되는 보안 취약점입니다. 이러한 예로는 검색 엔진, 로그인 양식, 메시지 보드 및 의견 상자가 있습니다.
목차
사이버 범죄자는 실행 가능한 악성 코드 문자열을 이러한 기능에 입력하여 이러한 취약점을 악용합니다. 이렇게 하면 악성 코드가 대상 웹사이트의 콘텐츠에 삽입되어 웹사이트의 일부가 되므로 해당 웹사이트를 방문하거나 볼 수 있는 피해자에게 영향을 줄 수 있습니다. 또한 웹사이트에 포함되지 않은 코드가 일시적으로 방문자만 볼 수 있는 콘텐츠로 표시될 수 있습니다. 따라서 웹사이트가 사이버 범죄자에 의해 실제로 침해된 것처럼 보입니다.
사이버 범죄자들은 또한 이 취약점을 사용하여 웹사이트를 통제하거나 직접 침해할 뿐만 아니라 웹사이트의 서버 또는 소프트웨어의 다른 기존 취약점을 악용할 수 있습니다.
사이버 범죄자들은 표적 웹사이트를 선택하고 사용자 입력을 수용하는 취약한 기능을 탐색합니다. 예를 들어 검색창, 로그인 양식 및 의견란이 있습니다.
악성 코드를 선택한 기능에 입력합니다. 악성 코드는 HTML 또는 JavaScript와 같은 프로그래밍 언어를 사용하여 쓸 수 있습니다.
악성 코드가 웹 페이지에 삽입되어 기능에서 발생합니다(의견 페이지에서 결과 또는 의견 검색). 그런 다음 웹 페이지의 일부가 되어 피해를 입힙니다.
코드가 삽입되는 방식에 따라 악성 콘텐츠는 실제 웹 페이지 자체에 있는 것이 아니라 악용의 특정 인스턴스 동안 웹 사이트의 일부인 것처럼 보이는 일시적인 요소일 수 있습니다. 이렇게 하면 실제 웹 사이트가 실제로 손상되지 않을 때 실제로 손상된다는 착각이 생길 수 있습니다.
사용자는 책임이 있는 사이버 범죄자에 의해 링크되거나 범인이 남용하기로 결정한 기능에 따라 웹 페이지의 피해자가 될 수 있습니다.
주입된 코드가 피해자의 시스템에서 실행될 수 있는 루틴은 무해하게 짜증나는 것부터 완전한 악성에 이르기까지 다양할 수 있습니다. 해당 웹사이트의 합법적으로 게시된 콘텐츠에 사용자를 악성 웹사이트로 리디렉션하거나 악성 파일을 시스템에 자동으로 다운로드하는 예기치 않은 이미지가 표시되는 것만큼 무해할 수 있습니다. 또한 로그인 정보와 같은 중요한 개인 정보를 피해자로부터 훔치는 데 사용할 수도 있습니다.
XSS를 사용하면 사이버 범죄자가 신뢰할 수 있는 웹사이트를 악성 웹사이트로 전환하여 피해자뿐만 아니라 신뢰할 수 있는 웹사이트 소유자의 평판에도 과도한 피해와 피해를 입힐 수 있습니다.
XSS에 의해 손상된 웹사이트는 사용자 시스템을 공격하는 위협을 여러 개 유발할 수 있습니다. 여기에는 부적절한 콘텐츠가 표시되는 것부터 사용자가 알지 못하는 상태에서 시스템에 다운로드되는 멀웨어가 포함될 수 있습니다.
XSS만큼 위험하지만 이러한 취약점을 패치하는 방법이 있습니다. 웹사이트 소유자는 사용자 입력을 수락하는 모든 웹 애플리케이션이 입력의 결과 페이지를 생성하기 전에 먼저 입력된 문자열을 소독하는 방식으로 그렇게 하도록 해야 합니다. 이렇게 하면 코드 주입이 발생하지 않습니다. 반면 사용자는 브라우저에서 스크립팅을 비활성화하고 의심스러운 당사자 또는 발신자의 링크를 클릭하지 않아야 합니다.
웹사이트 개발자/소유자는 다음을 수행해야 합니다.
사용자 입력을 허용하는 웹 사이트의 모든 페이지가 HTLM 및 JavaScript와 같은 코드 입력을 필터링하는지 확인합니다.
웹 애플리케이션 취약점을 스캔하고 그에 따라 패치 적용
웹사이트와 서버 소프트웨어를 업데이트하여 XSS 공격을 통해 표적이 될 수 있는 취약점의 향후 악용을 방지하십시오.
사용자는 다음을 수행해야 합니다.
필요하지 않은 페이지에서 스크립팅을 비활성화하거나 완전히 비활성화합니다.
의심스러운 이메일이나 메시지보드 메시지 보드에 게시된 링크를 클릭하지 마십시오. 페이지가 손상될 수 있습니다.
제3자 소스 또는 링크가 아닌 주소를 통해 원하는 웹사이트에 직접 액세스합니다.
시스템 소프트웨어 및 애플리케이션을 정기적으로 업데이트하여 2차 취약점 악용을 방지합니다.
OWASP(Open Web Application Security Project)에 따르면 XSS 공격은 반영된 XSS, 저장된 XSS 및 문서 개체 모델(DOM) XSS의 세 가지 범주 중 하나에 속합니다. 이는 아래에 자세히 설명되어 있습니다.
사이트 간 스크립팅 공격 반영(비영구적)
반영된 XSS 공격은 해커가 취약한 웹 애플리케이션에 악성 스크립트를 전달한 다음 서버가 HTTP 응답으로 반환할 때 발생합니다. 피해자의 브라우저는 HTTP 응답의 일부로 악성 스크립트를 실행하여 합법적인 사용자를 손상시키고 개인 정보를 해커에게 다시 보냅니다.
반영된 XSS 공격은 일반적으로 오류 메시지 또는 검색 엔진 결과 페이지를 대상으로 합니다. 많은 사용자가 클릭하는 링크가 포함된 악성 이메일을 보내기 쉽기 때문입니다. 사용자가 링크를 클릭하면 서버는 악성 스크립트가 포함된 요청을 수신하고 저장되지 않으므로 사용자에게 코드를 다시 보내 응답합니다. 사용자 입력이 적절히 검증 및 삭제되지 않거나 데이터가 요청에서 안전하지 않게 중복되는 경우 XSS 취약점이 반영될 위험이 있습니다.
XSS 공격에 대한 첫 번째 방어선은 콘텐츠를 필터링하고 사용자 입력을 확인하는 것입니다. 스크립트 공급업체의 안전 목록과 차단 목록을 사용하여 위험한 데이터 패턴을 거부할 수 있습니다.
또한 엄격한 Content Security Policy(CSP)를 구현하여 인라인 스크립트의 소스를 식별하여 XSS 공격의 위험을 줄일 수 있습니다. 강력한 CSP는 스크립트 및 로드되고 실행될 수 있는 웹 페이지 위치를 제어합니다.
저장된 사이트 간 스크립팅 공격(지속적)
저장된 XSS 공격에서 악성 스크립트는 대상 서버에 사용자 입력을 저장합니다. 서버에서 실행되는 반영된 XSS 공격과 달리 저장된 XSS 공격은 사용자의 브라우저에서 실행됩니다. 그런 다음 공격자는 일반적으로 HTML 데이터베이스를 사용하는 최신 HTML5 애플리케이션을 사용하여 브라우저에 유해한 스크립트를 영구적으로 저장합니다.
저장된 XSS 공격에서는 사용자가 영향을 받는 웹 사이트에 액세스할 때마다 스크립트가 서버에 저장되고 실행됩니다. 공격자가 많은 수의 피해자를 표적으로 삼는 것은 쉬우며 그 결과는 지속됩니다. 저장된 XSS 공격은 교육을 받지 않은 사용자가 소독 또는 검증 예방 조치를 취하지 않고 소프트웨어에서 데이터를 추출하려고 할 때도 발생할 수 있습니다.
저장된 XSS 공격은 사용자에게 악성 스크립트를 반영하는 것을 목표로 하므로 이를 방지하는 가장 쉬운 방법은 사용자 데이터를 소독하고 입력을 주의 깊게 처리하는 것이며 이를 방지하는 가장 좋은 방법은 적절한 매개 변수 바인딩을 사용하는 것입니다.
자동 이스케이핑 템플릿 시스템 또는 HTML 인코딩으로 데이터를 소독할 수 있습니다. 서버가 이를 활성 콘텐츠로 해석하지 못하도록 출력용 데이터를 인코딩해야 합니다. 즉, 애플리케이션은 저장된 데이터의 특수 문자를 일반 HTML이 아닌 HTML 태그 콘텐츠로 처리합니다.
데이터 매개 변수(데이터) 바인딩은 벡터에 따라 다르지만, 기능의 정상 기능 이외의 추가 값으로 변수를 항상 전달할 수 있습니다. 또한 적절한 대응 헤더를 사용하여 일반적으로 몇 줄의 코드만 추가하면 공격을 방지할 수 있습니다.
XSS 공격이 실시간으로 발생하는 것을 방지하는 또 다른 기술은 악용 시도를 적극적으로 검색하는 동적 보안을 사용하는 것입니다. 알려진 패턴을 차단하면 공격자가 기존 허점을 악용하지 못하도록 차단할 수 있습니다.
마지막으로 실시간 XSS 공격 탐지 및 완화를 위해 WAF(웹 애플리케이션 방화벽)를 사용할 수 있습니다.
문서 개체 모델(DOM) 크로스 사이트 스크립팅 공격
DOM 인터페이스를 사용하면 HTML 및 XML 문서를 읽고 수정하여 웹 페이지 내용을 처리하고 조작할 수 있습니다. DOM 기반 XSS 공격은 피해자 브라우저의 DOM 컨텍스트에 악의적인 변경을 도입하여 클라이언트 측 코드가 의도하지 않은 방식으로 실행되도록 합니다.
DOM 기반 XSS 공격은 반사 및 저장된 XSS 공격과 달리 악성 스크립트를 저장하거나 서버에 전달하지 않습니다. 이 공격에서 피해자의 브라우저는 유일한 취약점입니다. 다른 범주보다 이해하기 더 어렵기 때문에 DOM 기반 취약점은 드물고 정교하며 극복하기 어렵습니다. 또한 자동화된 취약점 스캐너와 웹 애플리케이션 방화벽은 쉽게 식별할 수 없습니다.
다른 두 공격과 동일한 기법을 사용하여 이 공격을 방지할 수 있지만, 클라이언트 측 코드를 소독하려면 각별히 주의해야 합니다. 두 가지 효과적인 솔루션은 사용자 제어 소스가 잠재적으로 위험한 JavaScript 기능(싱크로 알려짐)을 변경하지 못하도록 하거나 안전 목록을 사용하여 신뢰할 수 있는 콘텐츠만 허용하는 것입니다. 이러한 예방 조치를 통해 DOM을 위험에 빠뜨릴 수 있는 문자열은 싱크대로 보내지지 않습니다. 또한 내장된 브라우저 기능을 사용하여 데이터를 소독하여 파서 변경 관련 문제의 위험을 줄일 수 있습니다.
이러한 유형의 공격에 대한 새로운 방어는 신뢰할 수 있는 유형을 사용하는 것입니다. 이것은 미리 정의된 정책을 통과한 데이터만 DOM의 모든 위험 부분을 사용할 수 있도록 보장하는 브라우저 보안 메커니즘입니다. 임의의 문자열이 잠재적으로 위험한 싱크로 전달되는 것을 방지하여 브라우저가 코드와 데이터를 구별하여 취약점의 주요 원인을 제거합니다.
XSS 공격은 서버 XSS 또는 클라이언트 XSS로 분류됩니다. 클라이언트 측 프로그램은 클라이언트의 장치 또는 브라우저에서 실행되며 사용자 인터페이스 및 클라이언트의 장치에서 발생하는 기타 처리를 처리합니다. 서버 측 프로그램은 서버에서 작동하며 웹 페이지의 콘텐츠를 생성합니다.
서버 측 XSS는 모든 서버 측 코드가 취약하고 브라우저가 응답을 렌더링하고 그 안에 포함된 합법적인 스크립트를 실행할 때 발생합니다. 반면 클라이언트 측 XSS는 사용자의 장치에서 실행되고 로드된 후 웹 페이지를 수정합니다.
XSS 공격은 HTML이 있는 모든 곳에서 가능합니다. 저장, 반영 또는 DOM 기반이든 모든 XSS 공격은 동일한 영향을 미칩니다. 공격자는 웹 세션을 완벽하게 제어합니다.
이러한 XSS 공격은 중복될 수 있으며 웹사이트는 세 가지 모두에 동시에 취약할 수 있습니다. 단일 웹 사이트 또는 오프라인 애플리케이션의 경우 세 가지 공격 유형이 모두 브라우저에 직접 표시될 수 있습니다. 그러나 데이터가 서버에 저장될 때와 서버에서 반영될 때의 동작은 다를 수 있습니다.
공격을 더 빠르게 차단하고 사이버 위험을 통제하는 것은 단일 플랫폼에서 시작됩니다. 위협 연구 및 인텔리전스를 선도하는 AI로 구동되는 포괄적인 예방, 탐지 및 대응 기능을 사용하여 보안을 전체적으로 관리합니다.
Trend Vision One은 다양한 하이브리드 IT 환경을 지원하고 워크플로우를 자동화 및 조율하며 전문적인 사이버 보안 서비스를 제공하므로 보안 운영을 단순화하고 통합할 수 있습니다.
Jon Clay는 29년 이상 사이버 보안 분야에서 일해 왔습니다. Jon은 업계 경험을 활용하여 트렌드마이크로가 외부에서 발표한 모든 위협 연구 및 인텔리전스에 대한 인사이트를 교육하고 공유합니다.