1. XSS (Cross Site Scripting)
- 웹 어플리케이션에서 많이 나타나는 취약점의 하나로 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점
- 주로 여러 사용자가 보게 되는 전자 게시판에 악성 스크립트가 담긴 글을 올리는 형태로 이루어진다. 이 취약점은 웹 어플리케이션이 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 나타난다. 이 취약점으로 해커가 사용자의 정보(쿠키, 세션 등)를 탈취하거나, 자동으로 비정상적인 기능을 수행하게 할 수 있다. 주로 다른 웹사이트와 정보를 교환하는 식으로 작동하므로 사이트 간 스크립팅이라고 한다.
🔸XSS 예제
- 이용자가 XSS 게시물에 접속하면 공격자가 임의로 삽입한 스크립트가 실행되어 쿠키 및 세션이 탈취될 수 있다.
✅XSS 종류
1) Stored XSS (저장형 XSS)
- 보안이 취약한 서버에 악의적인 사용자가 악성 스크립트를 저장함으로써 발생
- 해당 스크립트가 저장된 정상적인 서비스페이지에 접근할 때 클라이언트측에 스크립트가 노출되고 동작하게 되는 방식
🔸Stored XSS 시나리오
1) 악의적인 사용자가 보안이 취약한 사이트를 발견함
2) 보안이 취약한 사이트에서 제공하는 게시판에 사용자 정보를 빼돌릴 수 있는 스크립트를 작성하여 올림
3) 일반 사용자는 악의적인 사용자가 작성한 게시글을 읽으면, 서버로부터 악성 스크립트가 담긴 게시글 응답을 전달받는다.
4) 일반 사용자의 브라우저에서 응답 메세지를 실행하면서 악성 스크립트가 실행됨.
5) 악성 스크립트를 통해 사용자 정보가 악의적인 사용자에게 전달됩니다.
2. CSRF (Cross-Site-Request-Forgery) 교차 사이트 사이 요청 위조
- 사용자(피해자)가 자신의 의지와 무관하게 공격자가 의도한 행동을 하여 특정 웹페이지를 보안에 취약하게 한다거나
수정,삭제 등의 작업을 하게 만드는 공격방법
- 사용자와 특정 웹간의 통신을 할때 Request와 Response를 분석해서 Request(요청)을 위조하여 공격자가 원하는 행위를 하게 만드는 공격이라 할 수 있다.
- 사용자는 자신이 의도 했던 것과 무관하게 공격자가 의도한 행위를 하게 만드는 공격으로, 회원정보 변경, 데이터의 수정/삭제, 게시글 내용 변경 등을 할 수 있다.
- 특정 사용자의 권한이 필요할때 (EX: 관리자 권한) 타겟이 로그인 된 상태에서 악성 스크립트가 존재하는 페이지 또는 악성 URL을 통해 공격이 가능하다.
🔸XSS 공격과의 차이
CSRF 공격은 웹사이트에 로그인 되어있어야 공격이 가능하다. 쿠키 및 세션을 탈취해야 공격이 가능하기 때문에 웹사이트 로그인 됨은 필수 조건으로 들어간다.
🔸CSRF 공격 예제(은행 계좌 이체를 흉내내는 CSRFF 공격)
1. 희생자가 은행 웹사이트에 로그인한 상태
2. 희생자는 은행 웹사이트에서 자신의 계좌에서 돈을 이체하는 요청을 보내기 위해 다음과 같은 URL을 통해 요청을 수행할 수 있는 페이지에 접속합니다:
https://bank.com/transfer?to_account=attacker_account&amount=1000
3. 이 페이지는 희생자의 세션과 권한을 사용하여 돈을 이체하는 요청을 수행합니다.
4. 공격자는 위와 같은 URL을 악의적인 웹사이트에 배치합니다. 이 URL은 공격자의 계좌로 돈을 이체하는 요청을 생성하는데 사용됩니다.
5. 희생자는 악의적인 웹사이트에 방문하게 되고, 이 사이트는 자동으로 은행의 돈 이체 요청을 생성합니다.
6. 악의적인 웹사이트는 희생자의 브라우저를 통해 위조된 요청을 은행 웹사이트로 전송합니다.
7. 희생자의 세션과 권한을 사용하여 은행 계좌에서 돈을 이체하는 요청이 실행되어, 돈이 공격자의 계좌로 이체됩니다.
🔸참고자료
https://junhyunny.github.io/information/security/spring-mvc/stored-cross-site-scripting/
https://velog.io/@kylexid/XSS-Cross-Site-Scripting
'프론트엔드 개발' 카테고리의 다른 글
[사용자 인증방식] 세션,JWT,OAuth (0) | 2023.09.08 |
---|---|
브라우저 저장소의 차이점 (로컬/세션 스토리지), 쿠키와 세션 (1) | 2023.08.09 |
브라우저 렌더링 과정 (0) | 2023.07.05 |
데이터를 주고 받는 JSON 형식 (0) | 2023.07.05 |
REST API 란 뭘까? (0) | 2023.06.29 |