우선 DOM Based XSS 취약점에 대해 설명하기 전에 XSS(Cross Site Scripting)과 DOM 구조가 무엇인지 간략하게 살펴보도록 하겠습니다.
XSS(Cross Site Scripting) ?
웹 사이트 관리자가 아닌 이가 웹 페이지에 클라이언트 측에서 실행될 수 있는 악성 스크립트를 삽입할 수 있는 취약점
DOM (Document Object Model) ?
DOM(Document Object Model) : HTML의 문법은 태그의 집합으로 구성되어 있고 이러한 태그들은 사진과 같이 트리 구조로 객체가 형성되는데 이러한 트리 구조 집합을 DOM 구조라고 한다.
DOM 구조에 접근하기 위해서는 JavaScript와 같은 스크립트 언어를 사용해야 DOM 구조에 접근할 수 있다.
ex ) Document.write, Document.cookie 등
DOM Based XSS ?
DOM 구조를 이용하여 요소들을 수정하거나 추가하는 등 동적 행위를 할 때 접근하는 JavaScript에 악성 스크립트를 삽입하여 클라이언트 측 브라우저에서 악성 스크립트가 실행되도록 하는 공격
Reflected XSS와 같이 동적 페이지를 구성하는 과정 상에서 발생되는 XSS 공격이지만, Reflected XSS는 서버 측에서 동적 페이지를 구성하는 환경에서 발생되는 XSS이다.
반면에 DOM Based XSS는 클라이언트 측에서 사용자 입력 값을 통해 동적 페이지를 구성하는 환경에서 발생되는 XSS 취약점이다. 즉, 요청이 서버로 전송되지 않고 클라이언트 브라우저에서 공격이 이루어지는 특징을 가지고 있다.
DVWA 환경에서 DOM Based XSS 실습
우선 본 실습에 앞서 실습 환경의 경우 리눅스 환경에서 DVWA 환경을 구축한 후 가장 취약한 환경인 Low 레벨 환경에서 실습을 진행하였습니다.
DOM Based XSS 공격 실습을 위해 DVWA 환경에서 해당 탭으로 이동한 모습이다.
해당 페이지에서 Select 버튼을 클릭하였다.
Select 버튼을 클릭하여 진행한 결과 URL에 default라는 이름의 매개변수 값이 설정된 것을 확인할 수 있다.
URL에 설정된 default 라는 이름의 매개변수 값을 임의로 수정하여 전송해보았다.
전송한 결과 드롭다운 목록에 선택된 값이 URL 매개변수에 입력한 값으로 변경된 것을 확인할 수 있다.
즉, default 매개변수에 설정된 값으로 페이지를 구성한다는 사실을 확인할 수 있다.
해당 기능(드롭다운 목록 설정)이 구현된 소스코드를 개발자 옵션을 통해 살펴본 결과
default 매개변수에 입력된 값을 통해 클라이언트 측에서 JavaScript를 이용하여 페이지를 구성한다는 사실을 확인할 수 있었다.
default 매개변수에 저장된 값을 기반으로 페이지를 구성한다는 점을 바탕으로 default 매개변수 값에 클라이언트 측에서 실행 가능한 스크립트(예시로는 Cookie 정보를 드롭박스에 작성하게 하는 스크립트와 알림으로 표시해주는 스크립트)를 입력하여 전송한 결과
DOM 구조가 수정되어 쿠키 정보가 드롭박스에 표시되거나 알림으로 쿠키정보를 알려주는 모습을 확인할 수 있었다.
XSS 대응 방안
- 태그 사용이 필요 없을 경우 태그 문자(<,>)는 HTML Entity 형태로 치환하여 입력된 태그 문자는 문자열로만 인식되도록 구현한다.
- 부득이하게 태그 사용이 반드시 필요할 경우에는 위 사진과 같이 필요한 태그(예시는 <p>태그)만 사용할 수 있도록 구현한다. => 위 예시는 화이트리스트 방식
- 아래 사진은 블랙리스트 방식으로 <script> 태그가 입력될 경우 공백으로 치환되도록 구현한 것이다.
- 화이트리스트 방식이 좀 더 보안적인 측면에서 우수하지만 블랙리스트 방식에 비해 사용성이 떨어질 수 있기 때문에 다방면으로 고려하여 구현해야 한다.
- XSS 취약점은 <script>alert(1)</script>와 같이 사용하려면 최소 글자 수가 10자 이상을 작성해야 한다. 그렇기 때문에 불필요하게 입력 문자 수가 길 필요가 없는 입력 필드는 위 사진과 같이 입력될 수 있는 길이를 제한하여야 한다.
- 하지만 이때 위 사진과 같이 클라이언트 측에서만 입력 문자 길이를 검증할 경우 maxlength 속성을 삭제하여 글자 수 제한을 우회할 수 있기 때문에 아래 사진과 같이 데이터베이스에서도 길이 제한을 적용해야 한다.
- 위 사진과 같이 웹 애플리케이션 설정 파일에서 httponly 기능을 활성화시켜 JavaScript를 이용한 쿠키 정보 탈취를 차단한다.
- 보안 라이브러리(AntiXSS, OWASP 등)을 사용하여 개발한다.
'CERT > 웹 모의해킹 실습' 카테고리의 다른 글
[웹 해킹] Stored XSS / DVWA 환경 실습 / 대응 방안 (0) | 2023.07.01 |
---|---|
[웹 해킹] Reflected XSS / DVWA 환경 실습 / 대응 방안 (0) | 2023.07.01 |
[웹 해킹] Weak Session IDs / DVWA 환경 실습 / 대응 방안 (0) | 2023.06.21 |
[웹 해킹] Blind SQL Injection / DVWA SQL Injection(Blind) 실습 / 대응 방안 / SQLMAP 사용법 (0) | 2023.06.16 |
[웹 해킹] SQL Injection / DVWA 환경 실습 / 대응 방안 (3) | 2023.06.14 |