해당 글은 VSFe 깃허브 레포를 참고하여 작성한 글입니다. (아래 출처에 표기)
✅ XSS에 대해서 설명해 주세요.
XSS(Cross-Site Scripting): 웹 애플리케이션의 취약점을 이용해, 악성 스크립트를 삽입하여 사용자에게 실행하게 만드는 공격 기법이다.
▶ XSS의 종류
- Reflected XSS: 악성 스크립트가 서버에 저장되지 않고, URL 등의 입력 데이터에 포함되어 전달되는 유형이다. 사용자가 악성 링크를 클릭하면, 그 즉시 스크립트가 실행된다.
- Stored XSS: 악성 스크립트가 데이터베이스에 저장되어 여러 사용자에게 지속적으로 전달되는 유형이다. 해당 글을 열람하는 모든 사용자가 스크립트의 영향을 받게 된다.
- DOM-based XSS: 악성 스크립트가 클라이언트 측에서 DOM(Document Object Model)을 조작해 발생하는 XSS이다. 서버로부터 받은 데이터가 아니라, 클라이언트 측에서 스크립트가 직접 실행된다.
▶ XSS 위험성
- 사용자 세션 탈취: 공격자는 XSS를 이용해 사용자의 세션 쿠키를 탈취하고, 이를 통해 사용자를 가장해 접근할 수 있다.
- 피싱 공격: 악성 스크립트를 사용해 사용자에게 피싱 페이지를 보여주고, 민감한 정보를 입력하도록 유도할 수 있다.
- 웹 페이지 변조: XSS 공격을 통해 웹 페이지의 내용을 변경하여 사용자에게 잘못된 정보를 제공할 수 있다.
▶ XSS 방어 방법
- 특수문자 필터링: 서버 측에서 특수문자(예: <, >, ", ') 등을 필터링하여 XSS를 방지할 수 있다. 예를 들어, 브라우저에서 서버로 입력값을 넘겨줄 때 HTML entity를 사용하면 <는 <로, >는 >로 변경되어 전달된다.
- HTTPOnly 쿠키 사용: 쿠키에 HTTPOnly 속성을 추가하면, 자바스크립트를 통해 쿠키에 접근하는 것을 막을 수 있다.
- CSP(Content Security Policy) 사용: CSP는 웹 페이지에서 실행할 수 있는 스크립트의 출처를 제한함으로써, XSS 공격을 방지하는 데 도움을 준다.
✅ CSRF에 대해서 설명해 주세요.
CSRF(Cross-Site Request Forgery): 웹 애플리케이션의 취약점을 이용해 사용자의 의도와 무관하게 특정 요청(데이터 수정, 삭제, 등록 등)을 서버로 전송하게 만드는 공격 기법이다.
▶ CSRF의 작동 방식
🔽 CSRF의 조건
- 사용자는 보안이 취약한 서버로부터 이미 로그인되어 있는 상태이어야 한다.
- 쿠키 기반 서버 세션 정보를 획득할 수 있어야 한다.
- 공격자는 서버를 공격하기 위한 요청 방법에 대해 미리 파악하고 있어야 한다. 예상하지 못한 요청 매개변수가 없어야 한다.
🔽 동작 방식
- 사용자 로그인: 사용자가 웹 애플리케이션에 로그인하면, 서버는 사용자의 브라우저에 세션 쿠키를 저장한다. 이 세션 쿠키를 통해 사용자는 인증된 상태로 서버에 요청을 보낼 수 있다.
- 악성 링크 또는 스크립트 준비: 공격자는 CSRF 공격을 수행하기 위해, 사용자가 특정 작업을 수행하게 할 악성 링크나 스크립트를 준비한다.
- 사용자가 악성 링크 클릭: 사용자가 이메일, 게시판, 채팅 등에서 해당 악성 링크를 클릭하거나, 공격자가 삽입한 스크립트가 자동으로 실행된다.
- 서버로 악성 요청 전송: 사용자가 클릭한 링크나 스크립트가 사용자의 세션 쿠키를 이용해 서버로 요청을 전송한다. 이때 요청은 사용자의 의도와 무관하게 전송되지만, 서버는 이를 정상적인 사용자 요청으로 인식한다.
- 서버의 비정상적인 동작: 서버는 사용자의 세션이 유효하다고 판단하고, 악성 요청을 처리한다. 결과적으로 사용자는 자신도 모르는 사이에 공격자가 의도한 작업을 수행하게 된다.
▶ CSRF 위험성
- 권한 도용: 공격자는 사용자의 권한을 도용해 민감한 정보를 변경하거나, 중요한 작업(예: 돈 이체, 계정 정보 수정)을 수행할 수 있다.
- 대규모 피해: 한 번의 CSRF 공격으로 여러 사용자에게 영향을 미칠 수 있으며, 특히 관리자의 세션을 악용할 경우, 더 큰 피해를 발생시킬 수 있다.
▶ CSRF 방어 방법
- CSRF 토큰 사용: 서버는 각 요청에 대해 고유한 CSRF 토큰을 발급하고, 이를 폼 데이터나 HTTP 헤더에 포함시켜 전송한다. 서버는 요청 시 이 토큰의 유효성을 확인하여, CSRF 공격을 방지한다.
- Referer 헤더 검증: 서버는 요청이 외부 사이트에서 발생했는지 확인하기 위해 Referer 헤더를 검증할 수 있다. 요청이 신뢰할 수 없는 출처에서 왔다면, 이를 거부한다.
- SameSite 속성 설정: 쿠키에 SameSite 속성을 설정하여, 동일 사이트에서 발생한 요청에서만 쿠키가 전송되도록 제한할 수 있다. 이를 통해 다른 사이트에서 발생한 요청이 인증된 세션을 사용하지 못하게 막는다.
- 이중 인증(2FA): 중요한 작업(예: 계정 정보 수정, 금융 거래 등)을 수행할 때, 이중 인증을 요구하여 CSRF 공격의 성공 가능성을 낮출 수 있다.
- CAPTCHA 도입: 요청 시에 CAPTCHA를 이용하여, CAPTCHA 인증코드가 없거나 틀리면 요청을 거부하도록 한다.
✅ CSRF랑 XSS는 어떤 차이가 있나요?
▶ XSS와 CSRF의 차이점
XSS | CSRF | |
공격 방식 | 웹 애플리케이션에 악성 스크립트를 삽입하여, 사용자의 브라우저에서 이를 실행하게 함 | 사용자의 인증된 세션을 이용해, 사용자가 의도하지 않은 요청을 서버로 전송하게 함 |
공격 대상 | 주로 웹 애플리케이션 사용자 | 주로 웹 애플리케이션 서버 |
목적 | 사용자 정보 탈취, 세션 하이재킹, 피싱 등 | 사용자의 권한을 이용해 서버에서 비정상적인 요청 수행 |
작동 원리 | 사용자가 악성 스크립트가 포함된 페이지에 접근하면, 해당 스크립트가 브라우저에서 실행됨 | 사용자가 악성 링크를 클릭하거나, 악성 사이트를 방문하면, 사용자의 세션을 이용해 비정상적인 요청이 서버로 전송됨 |
✅ XSS는 프론트엔드에서만 막을 수 있나요?
XSS는 프론트엔드와 백엔드 모두에서 방어해야 하는 보안 문제이다.
▶ 프론트엔드에서의 방어
- 출력 데이터의 HTML 인코딩: 사용자가 입력한 데이터를 HTML로 출력할 때는 반드시 인코딩하여, 악성 스크립트가 실행되지 않도록 해야 한다.
- CSP(Content Security Policy): 웹 페이지에서 허용된 스크립트 출처만을 실행하도록 설정하여, 외부에서 들어온 악성 스크립트가 실행되는 것을 방지한다.
▶ 백엔드에서의 방어
- 데이터베이스 저장 시 인코딩: 데이터베이스에 데이터를 저장할 때, 해당 데이터를 HTML 엔티티로 인코딩하여 악성 스크립트가 저장되지 않도록 해야 한다.
- HTTPOnly 및 Secure 쿠키 설정: 쿠키에 HTTPOnly와 Secure 속성을 설정하여, 자바스크립트가 쿠키에 접근하는 것을 방지하고, SSL을 통해서만 쿠키가 전송되도록 해야 한다.
📍 문제 출처
Tech-Interview / 03-NETWORK.md
📍 참고 자료
'Programming > Network' 카테고리의 다른 글
[Network] 멀티플렉싱, 디멀티플렉싱 (0) | 2024.08.26 |
---|---|
[Network] 서브넷 마스크, 게이트웨이 (0) | 2024.08.26 |
[Network] 로드밸런서 (0) | 2024.08.26 |
[Network] 라우팅, 포워딩 (0) | 2024.08.25 |
[Network] Stateless, Connectionless (0) | 2024.08.18 |