XSS
•이용자가 삽입한 내용을 출력하는 기능에서 발생
•발생 형태에 따라서 다양한 종류로 구분됨,
•HTML, CSS, JS와 같은 코드 게시물 조회 시, 변조된 페이지를 보거나 스크립트를 실행가능.
Stored XSS
1. 공격자는 악성 자바스크립트가 담긴 질문을 전송.
2. 사용자가 로그인함.
3. 사용자는 공격자의 질문을 열람함.
4. 서버는 공격자의 자바스크립트를 실행함.
5. 사용자는 애플리케이션에게 받은 코드를 실행하는 것과 동일한 방식으로 공격자에게 받은 자바스크립트를 실행함.
6. 공격자는 사용자의 요청을 받아들여서 가로챈 토큰을 사용해 사용자의 개인 정보에 대한 접근 권한을 얻음.
Reflected XSS
•서버가 악성 스크립트가 담긴 요청을 출력할 때 발생하며 자바스크립트를 요청할 때 사용자에게 다시 되돌려짐.
•타 이용자에게 악성 스크립트가 포함된 링크에 접속하도록 유도, 다른 취약점과 연계하여 사용.
다음은 공격 시나리오이다.
1. 사용자는 정상적으로 애플리케이션에 로그인 후 세션 토큰을 포함하는 쿠키를 발행.
2. 공격자는 사용자를 악의적으로 만든 URL로 유도함.
3. 사용자가 애플리케이션에 URL 요청, 이때 URL은 공격자에 의해 제공된 것이다.
4. 서버는 사용자의 요청에 응답, 응답은 공격자가 생성한 자바스크립트를 포함한다.
5. 사용자는 애플리케이션에게 받은 코드를 실행하는 것과 동일한 방식으로 공격자에게 받은 자바스크립트를 실행함.
6. 공격자는 사용자의 요청을 받아 들여서 가로챈 토큰을 사용해 사용자의 개인 정보에 대한 접근 권한을 얻음.
DOM XSS
• 응용 프로그램에 신뢰할 수 없는 소스의 데이터를 안전하지 않은 방법으로 처리하는 클라이언트 측 자바스크립트가 포함된 경우에 발생함.
• 클라이언트 측 자바스크립트가 DOM에 접근할 수 있기 때문에 발생함.
• 스크립트는 URL로부터 정확한 데이터를 추출, 데이터에서 처리를 수행, 페이지의 컨텐츠를 업데이트하기 위해 추출한 데이터를 사용함. 애플리케이션이 이 과정을 수행할 때 DOM XSS에 취약하게 된다.
다음은 공격 시나리오이다.
1. 사용자 로그인
2. 사용자의 브라우저가 공격자에게 세션 토큰을 보냄.
3. 사용자는 공격자의 URL을 요청함.
4. 서버는 하드 코딩된 자바스크립트가 포함된 페이지를 보여줌.
5. 공격자의 URL은 공격 페이로드가 실행되는 자바스크립트에 의해 처리됨.
6. 사용자의 브라우저가 공격자에게 세션 토큰을 보내고 공격자는 이를 통해 사용자의 세션을 탈취함.
아래는 DOM XSS 공격의 예시를 보여준다.
<script>
var url = document.location;
url = unescape(url);
var message = url.substring(url.indexOf('Message=') + 0, url.length);
document.write(message);
</script>
위 예시 코드는 애플리케이션에 의해 반환되는 에러 페이지가 다음을 포함하며 message 변수의 값을 추출하기 위해 URL 변수를 파악하고 해당 페이지의 소스코드 안에 이 값을 보여준다.
• 공격자가 자바스크립트가 포함된 URL을 message 변수에 보내면 해당 페이지에 저장이 되고 서버는 사용자의 브라우저에 공격자가 입력한 악성 자바스크립트를 그대로 출력함.
CSRF
공통점
• 모두 클라이언트를 대상으로 하는 공격이며, 이용자가 악성 스크립트가 포함된 페이지에 접속하도록 유도해야 함.
차이점
• XSS는 인증 정보인 세션 및 쿠키 탈취를 목적으로 하는 공격이며, 공격할 사이트의 오리진에서 스크립트를 실행시킴.
XSS 방지 기법
1. CSP
- XSS나 데이터를 삽입하는 류의 공격이 발생하였을 때 피해를 줄이고 웹 관리자가 공격 시도를 보고 받을 수 있도록 새롭게 추가된 보안 계층
- CSP 헤더는 1개 이상의 정책 지시문이 세미콜론(;)으로 분리된 형태로 이루어져 있다.
- CSP를 사용하려면 응답에 정책이 포함된 값과 함께 Content-Security-Policy라는 HTTP 응답 헤더를 포함해야 하며 정책 자체는 세미콜론으로 구분된 하나 이상의 지시어로 구성된다.
Content-Security-Policy: default-src 'self'
- EX): 동일한 출처에서만 스크립트를 로드할 수 있도록 허용하는 구문
- CSP는 인라인 코드를 유해하다고 간주하며 CSP를 사용할 때에는 기본적으로 인라인 코드를 사용할 수 없다.
*인라인 코드: 태그의 src 속성으로 코드를 로드하지 않고 태그 내에 직접 코드를 삽입하는 것을 의미
- CSP는 <script> 태그 내에 코드를 삽입하는 것을 포함하여 on* 이벤트 핸들러 속성, javascript: URL 스킴 또한 인라인 코드로 간주하고 허용하지 않으며 <script>와 마찬가지로 CSS 스타일시트 또한 인라인 코드를 허용하지 않는다.
- CSP는 기본적으로 문자열 텍스트를 실행 가능한 자바스크립트 코드 형태로 변환하는 메커니즘을 유해하다고 간주한다.
Ex: eval() - 매개변수로 받은 expression (=식)을 문자열로 받아서, 실행하는 함수
다만 해당 함수에 문자열 입력이 아닌 인라인 함수 형태로 파라미터가 전달 될 때에는 차단되지 않는다.
2. 웹방화벽(WAF, Web Application Firewall)
- Web Application 보안에 특화되어있는 시스템, 웹 공격을 탐지/차단하는 역할을 하는 시스템을 말한다.
- IP 주소, HTTP 헤더, HTTP 본문, URI 문자열, 교차 사이트 스크립팅 (XSS), SQL 삽입 및 기타 OWASP 정의 취약성을 비롯한 인터넷 위협을 방지하기 위한 규칙을 수립하고 관리가 가능함.
3. XSS Filtering
- XSS 쓰이는 특수문자들이나 기호들을 필터링하여 이를 막는다.
- 보안을 위해 XSS 필터링은 안전하다고 알려진 마크업만 허용하는 보수적인 방식 (Allowlist 필터링)을 취해야 한다.
'WEB 정리' 카테고리의 다른 글
OWASP ZAP & Web Crawring(Web Scrapping) (0) | 2023.05.25 |
---|---|
버프 스위트(Burp Suite) 사용 및 조작 (Proxy & Intruder) (0) | 2023.05.25 |
XSS 실습 (0) | 2023.05.24 |
File download & upload vunerablity 정리 (0) | 2023.05.24 |
SQL Injection 정리(DBMS, SQL, SQL Injection) (1) | 2023.05.07 |