Stored XSS(저장 XSS, 영구적 XSS)
공격자가 공격 스크립트를 웹사이트에 저장해두거나 게시판 등의 게시글 등에 저장해둔 후 사용자가 해당 페이지에 접속하거나 게시글을 클릭하였을 경우 실행되도록 하는 공격이다.
- 공격자가 페이로드를 전송한 뒤 다수의 피해자가 해당 페이지에 접속하면 XSS 공격에 노출
- 일대다 공격 가능
- 반사 XSS와 영구 XSS 모두 위험하고 두 공격이 동시에 일어날 수 있음
- 특정 페이지에 삽입된 페이로드를 통한 XSS도 가능
<공격 방식>
1. 공격자가 게시물에 악성 스크립트를 삽입
2. 피해자가 게시물을 클릭하면 공격자의 자바스크립트가 포함된 응답이 전송
3. 브라우저에서 공격 스크립트가 실행되면 공격자는 피해자의 쿠키, 세션 등의 정보를 얻을 수 있음
Stored XSS 공격 실습
DVWA 에 접속한 상태에서 좌측 메뉴 중 XSS (Stored) 를 클릭한다. 우측에 나타난 메뉴에서 Name 부분에는 "admin"을 입력하고 Message 부분에는 "hello"를 입력한 후 등록을 위해 Sign Guestbook 버튼을 클릭한다.
이렇게 위와 같이 hello 메시지가 등록된 것을 확인할 수 있다.
그 다음 동일한 화면에서 Name 부분에는 "admin"을 입력하고 Message 부분에는 아래의 XSS 코드(Reflected XSS 공격과 같은 코드)를 입력한 후 Sign Guestbook 버튼을 클릭한다.
: <script>alert(document.cookie)</script>
공격이 성공하였다면 위와 같이 접속한 도메인 정보, 사용자의 쿠키 정보를 포함한 알람창이 공격자가 입력한 코드에 의해 타나되는 것을 확인할 수 있다.
서버에 저장되기 때문에 페이지를 방문하는 모든 사용자의 브라우저에서 이 스크립트가 실행된다.
Stored XSS 공격 방어 실습 - 사용자 정의 규칙
DemoACL에 새로운 사용자 정의 규칙을 생성하기 위해 위와 같이 Rules 탭을 선택한 후 Add my own rules and rule groups 를 클릭한다.
규칙 생성 화면의 옵션 중 첫번째 옵션인Rule Type에서는 Rule Builder가 선택된 상태를 유지하고, 규칙 이름에는Stored_XSS를 입력한 후Type은 Regular Rule을 선택한다.
If a request 의 Pull Down 메뉴에서는 matches the statement 를 선택하고, Inspect 는 Body, Match Type 은 Contains XSS Injection Attacks 를 선택한다. Text Transformation 에 대해서는 Compress White Space 와 URL decode Unicode 를 추가한다.
규칙에 매칭되는 요청을 처리하는 액션은 Block 을 선택한다. 하단의 Custom response 옵션의 체크 박스를 체크한다. Response Code 에는 200 을 입력하고 2.2 Web ACL 생성단계에서 생성한 custom_denied 페이지를 선택한다.
모든 설정이 완료되었다면 Add Rule 버튼을 클릭한다.
Priority 설정하는 화면에서 Save 버튼을 클릭하면 위와 같이 Stored_XSS 규칙이 생성된 것을 확인할 수 있다.
다시 DVWA로 돌아와서 XSS(Stored) 메뉴의 What's your name? 입력칸에 아래와 같은 Stored XSS 코드 를 입력한 후 Sign Guestbook 버튼을 클릭한다.
: <script>alert(document.cookie)</script>
위의 그림과 같이 사용자의 요청이 사용자 정의 차단 페이지와 함께 차단되는 것을 확인할 수 있다.
Stored XSS 공격 방어 실습 - 관리형 규칙
Reflected XSS와 Stored XSS 공격을 모두 실습한 뒤 방어 중 관리형 규칙 실습을 해보았다.
사전 준비 단계에서 미리 생성해 둔 DemoACL을 선택한 후 새로운AWS 관리형 규칙을 생성하기 위해 위와 같이Rules탭을 선택한 후 Add managed rule groups를 클릭한다.
Add managed rule gruops 화면에서 첫번째로 보이는 AWS managed rule groups 를 선택하여 세부 메뉴를 확인한다.
쭉 내리다보면 AWS 관리형 규칙 중 무료 규칙에 속하는 Core rule set 규칙 그룹을 선택하고 Add Rule 버튼을 클릭한다.
Priority설정하는 화면에서 Save 버튼을 클릭하면 위의 그림과 같이 AWS-AWSManagedRulesCommonRuleSet 규칙이 정상적으로 생성된다.
Reflected XSS 공격 방어 확인
Reflected XSS 공격 실습에서 수행한 것과 마찬가지로 DVWA 의 XSS(Reflected) 메뉴의 What's your name? 입력칸에 아래와 같은 Reflected XSS 코드 를 입력한 후 Submit 버튼을 클릭한다.
<script>alert(document.cookie)</script>
위의 그림과 같이 사용자의 요청이 AWS 관리형 규칙 에 의해 차단되어 403 Forbidden 페이지가 출력되는 것을 확인할 수 있다.
※사용자 정의 규칙에서 실습 결과로 나온 access denied가 계속 떴는데 사용자규칙에서 만들어둔 규칙을 삭제하고 하니까 잘 되었다.
Stored XSS 공격 방어 확인
Stored XSS 공격 실습에서 수행한 것과 마찬가지로 DVWA 의 XSS(Stored) 메뉴의 What's your name? 입력칸에 아래와 같은 Stored XSS 코드 를 입력한 후 Sing Guestbook 버튼을 클릭한다.
: <script>alert(document.cookie)</script>
위의 그림과 같이 사용자의 요청이 AWS 관리형 규칙 에 의해 차단되어 403 Forbidden 페이지가 출력되는 것을 확인할 수 있다.
※마찬가지로 사용자 정의 규칙에서 실습 결과로 나온 access denied가 계속 떴는데 사용자규칙에서 만들어둔 규칙을 삭제하고 하니까 잘 되었다.
Stored XSS 대응 방안
1. 사용자 입력 검증 및 변경
- 사용자가 입력한 값을 그대로 저장하지 않는다.
- 태그를 만들 때 사용하는 <, >을 HTML에서 사용하는 특수 문자로 변경한다.
2. 직접 출력 금지
사용자의 입력을 그대로 출력하는 일은 위험하므로 라이브러리의 출력 함수를 사용한다. 문자열을 그대로 출력하기 때문에 스크립트가 실행되지 않으므로 XSS 공격을 방어할 수 있다.
EX) JSTL의 <c:out />
'2024 SWLUG > 클라우드' 카테고리의 다른 글
Command Injection (0) | 2024.10.29 |
---|---|
SQL Injection (0) | 2024.10.28 |
Reflected XSS (0) | 2024.09.30 |
AWS WAF 실습 환경 구성 (0) | 2024.09.23 |
AWS WAF와 AWS Cloud Formation 개념 (0) | 2024.09.23 |