-
XSS(Cross Site Scripting)CS 2024. 7. 15. 20:05
이 전 글인 CSRF과 동일하게 웹 해킹 공격 중 하나로, XSS는 웹 또는 보안을 공부하면서 들어본 적이 있을 것이다.
인터넷이 발전하는 만큼 인터넷을 악용하려고 하는 사용자도 많고, 개발자의 의도와 다르게 시스템을 사용하는 사용자들도 많아 보안상으로 문제가 됐다. 이에 따른 악용 사례로 여러 사건 사고가 많았기에 어떠한 작은 페이지라도 보안을 신경 쓰는 것이 중요해졌다.
보안상 취약하지 않은 웹페이지를 만드는 것이 중요한 만큼 관련된 보안에 대해 알고 가는 것은 필수적이다.
❓ XSS(Cross Site Scripting)
XSS는 공격자가 입력한 악성 스크립트에 사용자가 응답하는 취약점이다.
XSS라는 명칭은 공격자가 웹사이트를 넘어서 공격한다는 뜻에서 유래가 되었다.
이는 사용자 입력 값에 대한 검증이 미흡하거나 출력 시 필터링을 거치지 않을 경우 발생하는데,
쿠키 값 또는 세션 등의 사용자 정보를 탈취하거나 피싱 사이트로 접근하도록 유도하는 등 사용자에게 직접적인 피해를 끼칠 수 있다.
심지어 사용자 뿐만 아니라 타 사용자 및 서버도 공격이 가능하다는 특징을 가지고 있다.
XSS는 Reflected XSS, Stored XSS, Dom based XSS 등 세 가지 유형으로 분류가 되는데,
각각 어떠한 특징을 가지는지 자세히 살펴보도록 하자.
💥 XSS 세 가지 유형
Reflected XSS
가장 일반적인 XSS 유형으로 공격자가 입력한 스크립트가 즉시 실행되는 공격이다.
이는 공격자의 입력 값이 HTTP 응답에 그래도 포함되어 공격자에게 다시 반사되어 보인다하여 이러한 명칭이 붙여졌다.
URL에 악성 스크립트를 포함하여 배포하는 방식이기에, 주로 주소창이나 간단한 입력 영역에 스크립트를 삽입하는 식으로 공격한다.
예를 들어, 어떠한 사이트에서 이름을 입력받는 input이 존재하는데, 여기에 이름을 입력하면 "Hello"라는 문자열을 출력해준다고 가정하자. 개발자가 의도한 것과 동일하게 사용한다면 문제가 없지만, 이 input에 이름이 아닌 스크립트를 입력했다고 한다면 결과가 어떻게 될까?
<script>alert("!!!!");</script>
이와 같은 스크립트를 동일한 input에 입력하게 되면 "Hello"가 아닌 경고창이 뜬다.
공격자는 이러한 취약점이 존재하는 페이지를 탐색하여 XSS 공격을 위한 스크립트가 포함된 URL을 공격 대상자에게 노출시키는 방법 등으로 공격을 수행할 수 있다.
위 그림에서 Reflected XSS 공격 순서를 보여주고 있는데 순서대로,
- 공격자는 미리 XSS 공격에 취약한 웹 사이트를 탐색하고, XSS 공격을 위한 스크립트를 포함한 URL을 사용자에게 노출한다.
- 사용자는 해당 URL을 클릭한다.
- 취약한 웹 사이트의 서버에 스크립트가 포함된 URL을 통해 Request 전송한다.
- 웹 서버에서는 해당 스크립트를 포함한 Response를 전송하게 된다.
Stored XSS
Stored XSS는 스크립트가 서버의 데이터베이스에 저장되는 형태의 공격이다.
이는 게시판 등에 악성 스크립트가 포함된 글을 작성하여 게시글을 확인하는 사람을 대상으로 공격하는 방식이다.
다른 유형의 XSS보다 Stored XSS가 위험한 이유는, Stored XSS의 경우에는 데이터베이스에 악성 스크립트를 저장해놓기에 일회성으로 사용되는 것이 아닌 지속적으로 실행되기 때문이다.
게시판과 같이 사용자가 입력한 데이터를 서버에 저장하고 저장한 데이터를 사용자에게 출력하는 곳에서 주로 일어나기에, 공격자가 스크립트를 삽입하여 서버에 업로드 하고 이를 다른 사용자가 열람하게 되면 공격자가 심어둔 악성 스크립트가 실행되어 사용자의 정보를 유출하거나 웹 사이트 자체를 공격할 수 있다.
위 그림을 풀어서 설명해보자면,
- XSS 공격 스크립트를 포함한 게시글을 공격자가 포스팅하여 웹 사이트에 업로드한다.
- 공격자가 해당 게시글을 사용자에게 노출한다.
- 사용자는 게시글을 확인함으로써 URL에 대한 요청을 서버에 전송한다.
- 웹 서버에서 스크립트를 포함한 Response를 정송하며 공격이 수행된다.
DOM based XSS
공격자가 악성 스크립트가 담긴 DOM을 작성 또는 수정한 후 다른 사용자가 해당 페이지 조회하게 하여 실행되는 공격이다.
이는 페이지 파일 원본의 소스는 변경되지 않지만, 현재 클라이언트 브라우저에 DOM 환경을 수정하는 방식의 공격으로, 엄밀히 따지면 Reflected XSS 형태 또는 Stored XSS 형태으로도 나타날 수 있다.
💡 대처방안
XSS 공격은 IPS, IDS, 방화벽과 같은 방법으로 방지할 수 없기에, 단순히 문자 필터링을 통해서만 방지할 수 있다.
script 문자 필터링
XSS 공격은 일반적으로 입력 값에 대한 검증이 일어나지 않아 발생하기에, 사용자의 모든 입력에 대한 서버측의 필터링이 필요하다.
PHP의 eregi 함수를 사용하면 XSS 공격에 주로 사용되는 문자들을 필터링할 수 있다. ( <, >, ", ' 등 )
htmlentities 사용
PHP 함수 중 htmlentities라는 함수를 사용하여 모든 특수문자를 HTML entity로 변환하는 것이다.
'CS' 카테고리의 다른 글
border vs outline (0) 2024.07.30 Web Layout (flex와 grid) (0) 2024.07.29 CSRF(Cross Site Request Forgery) (0) 2024.07.15 브라우저 Reflow과 Repaint (0) 2024.07.09 브라우저 렌더링 과정 (0) 2024.07.03