secure_world

공격 기법 - XSS, CSRF, SSRF 본문

모의 해킹 기초

공격 기법 - XSS, CSRF, SSRF

시월드 2021. 12. 29. 15:50

1. XSS(Cross-Site-Scripting)

2. CSRF(Cross-Site-Request-Forgery)

3. SSRF(Server-Side-Request-Forgery)


※ 개인적인 공부를 위해 작성하였습니다. 이 글을 참고하여 허가되지 않은 곳에 사용하지 마시고 법 적인 문제가 생길 시 책임지지 않습니다.

※ 잘못된 정보가 있을 경우에는 댓글 혹은 방명록을 통해서 알려주시면 바로 수정하도록 하겠습니다!

 

1. XSS(Cross-Site-Scripting)

1.1. XSS(Cross-Site-Scripting)이란?

[그림] XSS Attack 예시 (출처 : https://noirstar.tistory.com/266)

 - 웹 어플리케이션에서 일어나는 취약점의 종류 중 하나로, 권한이 없는 사용자가 웹 사이트에 스크립트를 삽입하여 공격하는 기법을 말함

 - 대부분 글을 쓰고 읽을 수 있는 게시판에서 많이 발생하게 되며, 입력 값을 웹페이지에 보여줄 수 있는 곳에서도 발생 할 수 있음

 - 악의적 사용자가 C&C서버로 리다이렉션하기 위해 스크립트를 주입하여 중간 경유지로 활용될 수 있고, 사용자의 쿠키를 탈취하여 세션 하이재킹(Session Hijacking) 공격을 수행하기도 함

 - CSS(Cascading-Style-Sheets)와 약어가 같기 때문에 XSS(Cross-Site-Scripting)으로 사용됨

더보기

* C&C서버?

[그림] C&C 서버의 이용 예시 (출처 : https://hardner.tistory.com/37)

 - C&C(Command & Control)서버는 일반적으로 감염된 좀비 PC가 해커가 원하는 공격을 수행할 수 있도록 원격지에 명령을 내리거나 악성 코드를 제어하는 서버를 말함

 

* 세션 하이재킹(Session Hijacking)?

 - 세션 하이재킹이란 정상 통신을 하고 있는 다른 사용자의 세션을 가로채 별도의 인증 작업 없이 공격자가 가로챈 세션을 통해 정상 통신을 지속하는 행위를 말함


1.2. XSS 공격 종류 및 방법

1) Stored(=Persistent) XSS, 저장형 XSS공격

 

[그림] Stored XSS Attack 예시 (출처 : https://noirstar.tistory.com/266)

 - Stored XSS공격은 지속적으로 피해를 입힐 수 있는 XSS공격 기법으로, 해커가 웹 어플리케이션의 XSS취약점이 있는 곳을 파악하고 악성 스크립트 삽입하여 저장하게함

 - 공격자가 삽입한 악의적 스크립트가 데이터 베이스에 저장되고 저장된 스크립트가 있는 게시글 등을 사용자가 열람하게 되면 스크립트가 작동되며 쿠키 탈취 혹은 악의적 페이지로의 리다이렉션 등의 공격을 받을 수 있음

 - 데이터 베이스에 저장이 된다고 하여 Stored XSS라고 불리며, 한번의 공격으로 악성 스크립트를 삽입하여 수 많은 피해를 입힐 수 있다는 특징을 가짐

 - 가장 많이 사용되는 곳으로는 홈페이지 게시판 등이 있으며, 사용자의 입력 값이 데이터 베이스에 저장되고 클라이언트에게 저장된 스크립트를 보여줄 수 있는 곳에 공격이 가능

 

2) Reflected XSS, 반사형 XSS공격

 

[그림] Reflected XSS Attack 예시 (출처 : https://noirstar.tistory.com/266)

 - Reflected XSS 공격은 사용자에게 받은 값을 되돌려 줄 수 있는 곳에 발생할 수 있는 공격 기법

 - 사용자에게 입력 받은 검색어 등을 그대로 보여주거나 값에 대한 에러 메세지를 포함하여 보여주는 곳에 공격자가 악성 스크립트를 삽입하여 사용자가 응답을 받을 때 스크립트가 실행됨

 - 공격 예시는 공격자가 악의적인 스크립트가 포함된 URL을 사용자에게 누르도록 유도하고, URL을 누른 사용자는 악성 스크립트가 실행되며 공격당하게 됨

 

3) DOM Based XSS, Document Object Model 기반 XSS공격

 

[그림] DOM Based XSS Attack 예시 (출처 : https://noirstar.tistory.com/266)

 - DOM(Document Object Model)이란 HTML 및 XML 등 문서에 접근하는 방법을 표준으로 정의하는 문서 객체 모델을 말함

 - DOM Based XSS공격은 악의적인 스크립트가 포함 된 URL을 사용자가 요청하게 되어 브라우저를 해석하는 단계에서 발생하는 공격 기법으로, 클라이언트 측 코드가 원래 의도와는 다르게 실행되는 것을 말함

 - 페이지 자체는 변조되지 않지만, 페이지에 포함된 클라이언트 측 코드는 DOM환경에서 발생한 악의적인 변조로 인해 공격 구문이 실행되게 되며, 서버와 상관없이 브라우저에 발생하게 되는 공격


1.3 기본적인 대응 방안

1. 입출력 값 검증

 - 사용자가 입력한 값에 대한 검증과 사용자가 입력한 값을 그대로 출력할 때 검증이 필요함

 - XSS Cheat Sheet를 만들어 이에 대한 필터링을 통해 입력 값 검증을 진행하여 방어할 수 있음

 

2. XSS 방어 라이브러리 및 브라우저 확장앱 사용

 - Anti XSS 라이브러리를 사용하면 XSS를 방어하는데 도움이 됨

 - XSS 라이브러리를 서버에 추가하여 스크립트가 실행되지 않도록 방어하는 것을 말함

 

3. 웹 방화벽 사용

 - 웹 방화벽은 웹 공격에 특화되어 있기 때문에 XSS 공격 뿐만이 아닌 Injection공격도 효과적으로 방어가 가능

 


2. CSRF(Cross-Site Request Forgery)

2.1. CSRF(Cross-Site Request Forgery)란?

 - Cross Site Request Forgery는 웹 어플리케이션의 취약점 중 하나로 사용자가 자신의 의도와는 상관없이 공격자가 의도한 행위를 특정 웹 사이트에 요청하게 만드는 공격을 말함

 - 희생가의 권한을 도용하여 중요 기능을 실행하는 것이 가능하며, CSRF 공격은 서버를 해킹하는 것이 아니기 때문에 사용자의 로그인된 상태와 악의적 사이트에 접속하게 되는 조건이 만족하면 공격 실행이 가능함

 - 피싱 사이트로의 접속이 아니더라도 XSS에 성공한 사이트이면 CSRF공격이 가능하다고 함


2.2. CSRF 공격 기법

[그림] CSRF Attack 예시 (출처 : 구글 이미지)

 1. 공격자가 이메일이나 게시판에 피싱 사이트 접속을 위한 CSRF 스크립트가 포함된 게시물을 등록

 2. 관리자 혹은 사용자는 공격자가 등록한 CSRF 스크립트가 포함된 게시물을 열람하게 됨

 3. 관리자 혹은 사용자의 권한으로 공격자가 등록한 CSRF 스크립트가 웹사이트에 요청 됨

 4. 관리자 혹은 사용자가 의도하지 않은 행동이 CSRF 스크립트가 실행됨으로써 수행하게 됨


2.3. 기본적인 대응 방안

1. Referrer 검증

 - Referrer는 HTTP헤더에 있는 정보를 말하며, 요청된 페이지의 정보를 가지고 있기 때문에 Referrer 값을 확인하여 같은 도메인에서 보낸 요청인지 검증하고 차단하는 방법

 

2. CSRF Token(=Security Token) 사용

 - 사용자의 세션에 임의의 값을 저장하여 모든 요청마다 임의의 값을 모든 요청마다 포함하여 전송하도록 함

 - 요청이 들어올 때마다 백엔드단에서 세션에 저장된 값과 요청으로 전송된 값이 일치하는지 검증하여 방어하는 기법

 

3. Double-Submit Cookie Pattern

 - 웹 브라우저의 Same Origin정책으로 인해 JavaScript에서 타 도메인의 쿠키 값을 확인/수정하지 못한다는 것을 이용한 방어 기법

 - 스크립트 단에서 요청 시 난수 값을 생성하여 쿠키에 저장하고 동일 난수 값을 요청 파라미터에도 저장하여 서버로 전송하게 하고, 서버 단에서 쿠키의 토큰 값과 파라미터의 토큰 값이 일치하는지 검증하여 차단하는 방법


3. SSRF(Server-Side Request Forgery)

3.1. SSRF(Server-Side Request Forgery)란?

 - Server Side Request Forgery는 서버 측에서 요청을 보낼 때 위조된 요청을 보내도록 하는 공격 기법

 - CSRF는 클라이언트 측에서 위조된 요청을 보내는 것이라면, SSRF는 서버측에서 위조된 요청을 보내도록 하는 것

 - SSRF 취약점을 이용하면 공격자는 웹, 앱과 같은 서버 측 프로그램이 임의 주소로 HTTP 요청을 보내게 하고 사용자들이 접근할 수 없었던 서버 내부 자원에 접근하여 API Key등의 중요 데이터가 유출되거나 내부 스캔, 임의 코드 실행 등의 행위가 가능하게 됨


3.2. SSRF 공격 기법

[그림] SSRF Attack 예시 (출처 : 구글 이미지)

  (Website.com : A서버 , 타 사이트 : B서버)

 1. 정상의 경우 A서버는 B서버로 정보를 요청하고 결과를 반환해야 함

 2. 해커가 B서버의 주소를 C서버로 변경할 경우 A서버는 B서버가 아닌 C서버로 요청을 전송하고 결과를 반환 받음

 3. 해커는 A서버를 통해 C서버에 대한 정보를 얻는 등의 비정상 동작을 유도할 수 있게 됨

 4. C서버가 기업 내부의 중요 자산을 가지고 있는 데이터 베이스라면 중요 데이터가 노출될 수 있음

 

[그림] SSRF Script 예시 (출처 : 구글 이미지)


3.3. SSRF 참고자료

 

"서버를 속여 공격한다" SSRF 공격의 동작 방식과 대처법 - ITWorld Korea

서버 측 요청 위조(Server-Side Request Forgery, SSRF) 공격은 공격자가 서버를 속여 무단 요청을 보내도록 유도하는 수법이다. 공격 이름으로 짐작할 수 있듯, 원래 서버가 하는 요청을 공격자가 위조하

www.itworld.co.kr

 

Comments