CSRF(Cross Site Request Forgery) 공격
웹 어플리케이션 취약점 중 하나로 인터넷 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격.
- CSRF를 통해 해커는 희생자(사용자)의 권한을 도용해 중요 기능 실행하는게 가능해짐
- 해커가 사용자의 컴퓨터를 감염시키거나 서버를 해킹해서 이뤄지는 공격은 아님
[조건]
1. 위조 요청을 전송하는 서비스(페북)에 희생자가 로그인 상태
2. 희생자가 해커가 만든 피싱 사이트 접속
요즘 유명 사이트는 보통 PC에서 자동 로그인을 해놓는 경우가 많고 피싱 사이트는 피싱 메일 등을 통해 접속될 수 있음. 또한 희생자가 해커가 만든 피싱 사이트를 이용하지 않아도 해커가 XSS 공격을 성공한 정상 사이트를 통해 CSRF 공격이 수행 될 수 있음.
[방어기법]
1. Refferer 검증
2. Security Token 사용 (CSRF Token)
일반적으로 CSRF 공격 방어는 조회성(HTTP GET method) 데이터에는 방어 대상에 두지 않고, 쓰기/변경이 가능한 POST, PUT, DELELTE에 적용하면 됨. 정말 중요한 데이터를 조회하거나 GET을 통해 쓰기/변경 등 동작을 한다면 이것 또한 방어해야할 수도 있음.
Referrer 검증
백앤드 단에서 리퀘스트의 referrer를 확인해 도메인이 일치하는지 검증
- 일반적으로 referrer 검증만으로 대부분의 공격을 방어 가능.
- 하지만 같은 도메인 내 페이지에 XSS취약점이 있는 경우 CSRF 공격에 취약해질 수 있음.
- 도메인 단위 검증에서 좀 더 세밀하게 페이지 단위까지 일치하는지 검증하면 도메인 내 타 페이지에서 XSS 취약점에 의한 CSRF 공격 방어 가능
CSRF Token
Referrer 검증이 불가한 경우, security 토큰을 활용 할 수 있음.
- 사용자의 세션에 임의의 난수 값을 저장 후 사용자 요청 마다 해당 난수 값을 포함시켜 전송함. → 백앤드 단에서 요청받을 때마다 세션에 저장된 토큰값, 요청 파라미터에 전달되는 토큰 값 일치하는지 검증
- 이 방법 또한 결국 같은 도메인 내 XSS 취약점이 있따면 공격에 취약해짐.
- Double Submit Cookie 검증
security 토큰 검증의 한 종류, 세션을 사용할 수 없는 환경에서 사용하는 방법
- 웹브라우저의 same origin 정책으로 Javascript에서 타 도메인의 쿠키값을 확인/수정하지 못하는 것을 이용한 방어 기법.
- 스크립트 단에서 요청시 난수 값 생성해 쿠키에 저장, 동일한 난수 값을 요청 파라미터에 저장해 서버로 전송.
- 서버단에서는 쿠키의 토큰 값, 파라미터 토큰 값이 일치하는지만 검사하면 됨.
- 서버에 따로 토큰 값을 저장할 필요가 없어 세션을 이용한 검증보다 개발 공수가 적음
XSS(Cross Site Scripting)
css(Cascading Style Sheet) 때문에 XSS로..
크로스 사이트 스크립팅, 즉 사이트 간 스크립팅이라는 이름의 웹 취약점 웹 사이트의 관리자가 아닌 악의적인 목적을 가진 제 3자가 악성 스크립트를 삽입해 의도하지 않은 명령을 실행하거나 세션 등을 탈취할 수 있는 취약점, 대부분 Javacript를 이용한 공격
[위험성]
1. 쿠키 및 세션정보 탈취
- XSS에 취약한 웹 게시판에 쿠키, 세션 정보를 탈취하는 스크립트를 삽입해 해당 게시글을 열람하는 유저들의 쿠키/세션 정보를 탈취가능. - 공격자가 탈취한 정보를 바탕으로 인증을 회피, 특정 정보 열람할 수 있는 권한을 가지게 함
2. 악성 프로그램 다운 유도
- XSS 자체는 악성 프로그램을 다운시킬 수 없음.
- 스크립트를 통해 악성 프로그램을 다운 받는 사이트로 리다이렉트 시켜 악성 프로그램 다운받게 유도함
3. 의도하지 않은 페이지 노출
- XSS를 이용해 <img>태그 등 삽입해 원본 페이지와 전혀 관련없는 페이지 노출
- 페이지 자체 수정을 가해 노출된 정볼르 악의적 편집 가능
[공격 종류]
1. Reflected XSS
- 공격자가 악성 스크립트를 클라이언트에게 직접 전달
- URL에 스크립트를 포함시켜 공격하는 경우 대표적. URL 길면 의심하므로 Shorten URL(URL 단축)을 이용해 짧게 만들어 공격하기도 함.
- 서버에 스크립트를 저장하지 않기 때문에 서버에서 이루어지는 필터링을 피할 수 있는 공격법
2. Stored XSS
- 공격자가 악성 스크립트를 서버에 저장 → 클라이언트 요청/응답 과정을 통해 공격
- 스크립트를 서버에 저장하는 행위는 게시글 쓰기 등의 행동을 지칭함
- 서버에서 필터링을 하기 때문에 공격을 우회하기 어렵지만 한 번 성공하면 관리자 입장에서 눈치채기 힘들고 광범위한 피해 가능
3. DOM Based XSS
- 피해자의 브라우저가 html 페이지를 분석해 DOM을 생성할 때 악성 스크립트가 DOM의 일부로 구성되어 생성되는 공격
- 서버 응답 내에는 악성 스크립트가 포함되지 않지만 브라우저 응답 페이지에 정상적인 스크립트가 실행되며 악성 스크립트가 추가되어 실행됨
[대응 방법]
1. 입력 값 길이 제한(이메일, 아이디, 패스워드 등 목적에 맞게)
2. replace 등 함수를 이용한 치환
3. “<”, “>” 와 같이 태그에 사용되는 기호를 엔티티코드로 변환
4. 입력 값에 대한 꼼꼼한 유효성 검사(반드시 서버에서 수행)
5. 불가피하게 HTML 태그 사용을 허용해야 할 때 화이트리스트를 만들어 특정 태그 입력만 허용
'개발' 카테고리의 다른 글
[자료구조] 해시 (Hash, Hash Table, Hash Function)와 자바스크립트에서의 해시맵 (4) | 2024.01.07 |
---|---|
[자료구조] 이분 탐색/이진 탐색 (Binary Search) (1) | 2024.01.04 |
[Webpack5 + typescript] resolve alias 절대경로 설정하기 (0) | 2023.08.28 |
[AXIOS] axios headers 요청하기 (0) | 2023.06.11 |
[패스트캠퍼스] React 강의 8주차 (0) | 2023.05.28 |