-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Web] CSRF&XSS #178
Draft
da-in
wants to merge
2
commits into
main
Choose a base branch
from
csrf-xss
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
[Web] CSRF&XSS #178
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,53 +1,70 @@ | ||
# CSRF & XSS | ||
보안 공격에는 `Click-jaking`, `XSS`, `CSRF`, `MitM`, `Session hijacking`등의 다양한 유형이 존재하는데, 그 중 `CSRF`와 `XSS`공격에 대하여 다룬다. 모든 공격에 대한 내용은 [MDN | Types of attacks | ||
](https://developer.mozilla.org/ko/docs/Web/Security/Types_of_attacks)에 자세히 나와있다. | ||
|
||
## CSRF(Cross Site Request Forgery) | ||
웹 어플리케이션 취약점 중 하나로, 인터넷 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위 (modify, delete, register 등)를 특정한 웹사이트에 request하도록 만드는 공격을 말한다. | ||
`CSRF`는 웹사이트 취약점 공격 유형 중 하나로 `XSRF`라고도 한다. 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(`modify`, `delete`, `register` 등)를 특정한 웹사이트에 `request`하도록 만드는 공격이다. 해커가 사용자의 SNS 계정으로 광고성 글을 올리는 것은 대표적인 CSRF 공격에 해당한다. | ||
|
||
해커들이 많이 이용하는 것으로, 유저의 권한을 도용해 중요한 기능을 실행하도록 한다. | ||
### CSRF 공격 흐름 | ||
1. 사용자는 웹사이트에 로그인하여 정상적인 [쿠키](https://github.com/da-in/tech-interview-study/blob/main/CS%20Deep%20Dive/Web/Cookie%26Session.md)를 발급받는다. | ||
2. 공격자는 공격용 HTML 페이지 링크를 이메일이나 게시판 등을 통해 사용자에게 전달한다. | ||
3. 공격용 HTML 페이지는 다음과 같은 이미지 태그를 가진다. | ||
```html | ||
<img src="https://bank.example.com/withdraw?account=bob&amount=1000000&for=mallory" /> | ||
``` | ||
4. 사용자가 공격용 페이지를 로드하면, 브라우저는 이미지 파일을 받아오기 위해 `src` 속성으로 등록되어있는 URL에 요청을 보낸다. | ||
5. 로그인 상태로 쿠키가 유효하고 다른 확인이 없는 경우, 사용자의 승인이나 인지 없이 송금되어 공격이 완료된다. | ||
|
||
우리가 실생활에서 CSRF 공격을 볼 수 있는 건, 해커가 사용자의 SNS 계정으로 광고성 글을 올리는 것이다. | ||
> `POST`메서드의 엔드포인트도 보이지 않는 `<form>` 제출을 트리거하는 방법으로 공격할 수 있다. | ||
|
||
CSRF는 해커가 사용자 컴퓨터를 감염시거나 서버를 해킹해서 공격하는 것이 아니다. | ||
CSRF 공격은 아래와 같은 조건이 만족할 때 실행된다. | ||
### CSRF 대응 방법 | ||
|
||
- 사용자가 해커가 만든 피싱 사이트에 접속한 경우 | ||
- 위조 요청을 전송하는 서비스에 사용자가 로그인을 한 상황 | ||
**리퍼러(Referer) 검증** | ||
백엔드에서 Referer\* 검증을 통해 승인된 도메인으로 요청시에만 처리하도록 한다. | ||
|
||
보통 자동 로그인을 해둔 경우에 이런 피싱 사이트에 접속하게 되면서 피해를 입는 경우가 많다. | ||
또한, 해커가 XSS 공격을 성공시킨 사이트라면, 피싱 사이트가 아니더라도 CSRF 공격이 이루어질 수 있다. | ||
\* referer : `HTTP request header`에 포함된 요청을 보낸 웹 페이지의 주소 | ||
|
||
### 대응 방법 | ||
- 리퍼러(Refferer) 검증: 백엔드에서 Refferer 검증을 통해 승인된 도메인으로 요청시에만 처리하도록 한다. | ||
- Security Token 사용: 사용자의 세션에 임의의 난수 값을 저장하고, 사용자의 요청시 해당 값을 포함하여 전송시킨다. 백엔드에서는 요청을 받을 때 세션에 저장된 토큰값과 요청 파라미터로 전달받는 토큰 값이 일치하는 지 검증 과정을 거치는 방법이다. | ||
**CSRF Token 사용** | ||
사용자의 세션에 임의의 난수 값을 저장하고, 사용자의 요청시 해당 값을 포함하여 전송시킨다. 백엔드에서는 요청을 받을 때 세션에 저장된 토큰값과 요청 파라미터로 전달받는 토큰 값이 일치하는 지 검증 과정을 거치는 방법이다. | ||
|
||
--- | ||
## XSS(Cross Site Scription) | ||
<br/> | ||
|
||
CSRF와 같이 웹 어플리케이션 취약점 중 하나로, 관리자가 아닌 권한이 없는 사용자가 웹 사이트에 스크립트를 삽입하는 공격 기법을 말한다. | ||
## XSS(Cross Site Scripting) | ||
|
||
악의적으로 스크립트를 삽입하여 이를 열람한 사용자의 쿠키가 해커에게 전송시키며, 이 탈취한 쿠키를 통해 세션 하이재킹 공격을 한다. 해커는 세션ID를 가진 쿠키로 사용자의 계정에 로그인이 가능해지는 것이다. | ||
`XSS`는 `CSRF`와 같이 웹사이트 취약점 공격 유형 중 하나로, 관리자가 아닌 권한이 없는 사용자가 웹 사이트에 스크립트를 삽입하는 공격 기법이다. | ||
- 이를 통해 사용자의 정보(쿠키, 세션 등)을 탈취하거나, 자동으로 비정상적인 기능을 수행할 수 있다. | ||
- 주로 다른 웹사이트와 정보를 교환하는 식으로 작동하므로 사이트 간 스크립팅이라고 한다. | ||
- `CSS`라는 이름은 웹 기술인 `CSS`와 중복되어 `XSS`라고 부른다. | ||
|
||
공격 종류로는 지속성, 반사형, DOM 기반 XSS 등이 있다. | ||
### XSS 공격 유형 | ||
|
||
- 지속성 : 말 그대로 지속적으로 피해를 입히는 유형으로, XSS 취약점이 존재하는 웹 어플리케이션에 악성 스크립트를 삽입하여 열람한 사용자의 쿠키를 탈취하거나 리다이렉션 시키는 공격을 한다. 이때 삽입된 스크립트를 데이터베이스에 저장시켜 지속적으로 공격을 하기 때문에 Persistent XSS라고 불린다. | ||
- 반사형 : 사용자에게 입력 받은 값을 서버에서 되돌려 주는 곳에서 발생한다. 공격자는 악의 스크립트와 함께 URL을 사용자에게 누르도록 유도하고, 누른 사용자는 이 스크립트가 실행되어 공격을 당하게 되는 유형이다. | ||
- DOM 기반 : 악성 스크립트가 포함된 URL을 사용자가 요청하게 되면서 브라우저를 해석하는 단계에서 발생하는 공격이다. 이 스크립트로 인해 클라이언트 측 코드가 원래 의도와 다르게 실행된다. 이는 다른 XSS 공격과는 달리 서버 측에서 탐지가 어렵다. | ||
`XSS`공격의 세부 유형은 표준으로 정해져 있지 않지만, 일반적으로 `반사형(Non-persistent)`, `저장형(persistent)`, `DOM 기반 XSS` 등으로 구분한다. | ||
|
||
### 대응 방법 | ||
- 입출력 값 검증 | ||
XSS Cheat Sheet에 대한 필터 목록을 만들어 모든 Cheat Sheet에 대한 대응을 가능하도록 사전에 대비한다. XSS 필터링을 적용 후 스크립트가 실행되는지 직접 테스트 과정을 거쳐볼 수도 있다, | ||
- XSS 방어 라이브러리, 확장앱 | ||
Anti XSS 라이브러리를 제공해주는 회사들이 많다. 이 라이브러리는 서버단에서 추가하며, 사용자들은 각자 브라우저에서 악성 스크립트가 실행되지 않도록 확장앱을 설치하여 방어할 수 있다. | ||
- 웹 방화벽 | ||
웹 방화벽은 웹 공격에 특화된 것으로, 다양한 Injection을 한꺼번에 방어할 수 있는 장점이 있다. | ||
- CORS, SOP 설정 | ||
CORS(Cross-Origin Resource Sharing), SOP(Same-Origin-Policy)를 통해 리소스의 Source를 제한 하는것이 효과적인 방어 방법이 될 수 있다. 웹 서비스상 취약한 벡터에 공격 스크립트를 삽입 할 경우, 치명적인 공격을 하기 위해 스크립트를 작성하면 입력값 제한이나 기타 요인 때문에 공격 성공이 어렵다. 그러나 공격자의 서버에 위치한 스크립트를 불러 올 수 있다면 이는 상대적으로 쉬워진다. 그렇기 떄문에 CORS, SOP를 활용 하여 사전에 지정된 도메인이나 범위가 아니라면 리소스를 가져올 수 없게 제한해야 한다. | ||
**반사형(Reflected, Non-persistent)** | ||
반사형 XSS 공격은 요청 메세지에 입력된 스크립트 코드가 즉시 응답 메세지를 통해 출력되는 취약점을 이용한다. 공격자가 주입한 스크립트가 브라우저에 반사되는 것처럼 동작하여 붙은 이름이다. | ||
|
||
**저장형(Stored, Persistent)** | ||
악성 스크립트를 대상 서버에 삽입하여 이를 열람한 사용자를 공격 한다. 삽입된 스크립트를 서버에 저장시켜 지속적으로 공격을 하기 때문에 `Persistent XSS`라고 불린다. | ||
|
||
--- | ||
# 출처 | ||
https://itstory.tk/entry/CSRF-%EA%B3%B5%EA%B2%A9%EC%9D%B4%EB%9E%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-CSRF-%EB%B0%A9%EC%96%B4-%EB%B0%A9%EB%B2%95 | ||
https://noirstar.tistory.com/266 | ||
**DOM 기반** | ||
악성 스크립트가 포함된 URL을 사용자가 요청하게 되면서 브라우저를 해석하는 단계에서 발생하는 공격이다. 이 스크립트로 인해 클라이언트 측 코드가 원래 의도와 다르게 실행된다. 이는 다른 XSS 공격과는 달리 서버 측에서 탐지가 어렵다. | ||
|
||
### XSS 대응 방법 | ||
|
||
**입력 값 검증** | ||
데이터가 입력되기 전이나, 서버에 전달하기 전 검증하는 방식으로, 입력 데이터 길이 제한, 특정 값 무효화 등을 수행할 수 있다. | ||
|
||
**출력 값 검증** | ||
출력하려는 데이터에 스크립트로 해석될 여지가 있는 문자열을 인코딩하는 것이다. `<`를 `<`, `>`를 `>`로 변환하는 등의 과정을 거쳐 출력하면 스크립트로 해석되지 않는다. | ||
|
||
**보안 라이브러리 사용** | ||
Anti XSS 라이브러리를 제공해주는 회사들이 많다. 서버 단에서는 이러한 라이브러리들을 추가하여, 클라이언트는 브라우저에 확장앱을 설치하여 방어할 수 있다. | ||
|
||
<br/> | ||
|
||
--- | ||
## Reference | ||
📄https://developer.mozilla.org/ko/docs/Web/Security/Types_of_attacks | ||
📄https://ko.wikipedia.org/wiki/사이트_간_요청_위조 | ||
📄https://itstory.tk/entry/CSRF-공격이란-그리고-CSRF-방어-방법 | ||
📄https://noirstar.tistory.com/266 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
잘 모르겠어요🥲