박나겸
[웹/SW] CSRF,XSS에 대해 본문
CSRF(Cross-Site Request Forgery)
사이트 간 요청 위조의 줄인말이다. 웹 애플리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 해서 특정 웹페이지를 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격 방법이다. 공격자의 요청이 사용자의 요청인 것처럼 속이는 공격 방식이기에 크로스 사이트 요청 위조라는 명칭이 붙었다. 공격 난이도가 높지 않아 흔히 사용된다.
CSRF 공격 방식
- Perpetrator(침입자)는 서버로 넘어가는 자금 전송에 대한 요청을 조작하려고 합니다.
- 침입자는 하이퍼링크에 자금 전송 요청에 대한 스크립트를 삽입하고 사이트에 로그인할 사람들에게 전송합니다.
- 사용자는 링크를 누르고, 의도치않게 서버로 요청을 보내게 됩니다.
- 서버는 로그인 되어있는 사용자의 요청이기 떄문에 정상으로 인식하고 침입자에게 돈을 전송합니다.
CSRF의 두가지 조건
- 사용자가 사이트에 로그인 상태여야 된다.
- 사용자가 조작된 페이지에 방문/접속 해야 된다.
대응방안
- 중요 정보는 쿠키에 저장하지 않는다.
- XSS 취약점 확인
- Referer 체크
- Referer는 HTTP 헤더에 있는 정보로, 해당 요청이 요청된 페이지의 정보를 가지고 있다. 방법이 간단하여 소규모 웹 사이트에서 주로 이용된다.
- Paros, Zap, Fiddler와 같은 프로그램으로 조작가능한 단점이 있다.
4. 세션에 임의 난수(토큰)를 발급
- 패스워드 변경 같은 민감한 정보를 다룰 때 세션에 임의 난수를 발급해서, 해당 난수가 없는 상황에서 해당 동작들이 이 루어지면 요청을 거부하는 방법이다.
- 사용자가 정말로 변경을 의도하는 경우에만 변경을하는 방법.
- 변경 시에 CAPTCHA를 이용하여 CAPTCHA 인증코드가 없거나 틀리면 거부하도록 하는 방법
5. GET/POST 구분
- img 태그 등을 이용할 경우 GET 요청으로 들어오게 될 것이고, form을 이용해 값을 받는 경우 POST를 이용하게 되 는 경우가 많기 때문이다.
6. 플러그인 사용
- 대개 프레임워크에서 위의 방법들을 통합한 플러그인 등을 제공하는 경우가 많다.
- 위의 방법들을 일일이 적용하기 귀찮다면 찾아보고 적용해보자.
XSS(Cross-site Scripting)
게시판이나 웹 메일등에 스크립트 코드를 삽입해 개발자가 고려하지 않는 기능이 작동하게 하는 웹 해킹 공격 기법으로 주로 사용자들을 대상으로 한 공격이다. SQL injection과 함께 웹 상에서 가장 기초적인 공격 방법이다. 주로 위에 있는 CSRF를 하기 위해 사용되기 때문에 혼동되는 경우가 있으나, XSS는 스크립트를 실행시키는 것이고, CSRF는 특정한 행동을 시키는 것이라 다르다.
보통 게시판에 악성 스크립트가 담긴 글을 올리는 형태로 이루어진다. 그리고 스크립트가 포함된 글을 열어보게 되면 브라우저에서 원치 않는 스크립트가 실행되는 방식이다. 이걸 통해 유저의 쿠키 정보를 탈취하거나, 유저 비밀번호를 변경하는 api를 호출하는 행위를 할 수 있다.
1. Perpetrator(침입자)는 사이트의 취약점을 찾는다
2. 취약점을 찾아서 세션 쿠키를 탈취하는 스크립트를 사이트에 삽입한다.
3. 사용자가 그 웹사이트에 접근할 때마다 스크립트가 작동된다.
4. 스크립트를 통해 침입자에게 사용자의 세션 쿠키가 전달된다.
위는 가장 기초적인 방식이고, XSS의 종류는 크게 세 가지로 나눌 수 있다.
Stored XSS
XSS 공격 스크립트를 웹 사이트의 방명록이나 게시판등 서버에 저장되어 실행되는 방식이다. 게시판에 스크립트를 삽입하고, 다른 사용자들이 그 글을 확인 할 때 XSS 공격 스크립트 코드가 사용자에게 전달되고 세션 쿠키가 침입자에게 전달되는 방식이다.
스크립트를 웹 서버에 저장하기 때문에 Stored 라는 이름이 붙혀졌다.
Reflected XSS
공격 스크립트가 삽입된 URL을 사용자가 클릭하도록 유도하는 방식이고, 보통 피싱공격에 많이 사용된다.
클릭 요청이 발생하면 바로 스크립트가 반사되어 돌아온다고 해서 Reflected라는 이름이 붙혀졌다.
DOM-based XSS
사용자의 브라우저에서 DOM 환경을 수정하면 스크립트가 실행되는 방식입니다.
페이지 자체는 변경되지 않지만 DOM에서 발생한 수정으로 인해 페이지에 포함된 클라이언트쪽 코드가 다르게 실행됩니다.
조금 더 쉽게 말하면 스크립트는 HTML페이지가 구문분석이 될 때마다 실행됩니다. 그렇기 떄문에 다른 XSS 방식과는 다르게 서버와는 전혀 관계가 없습니다.
XSS와 CSRF의 차이
XSS과 CSRF는 사용자의 브라우저를 대상으로 한다는 공통점이 있습니다.
차이점으로는 아래 표와 같은 차이점이 있습니다.
XSS | CSRF | |
공격대상 | 클라이언트(사용자)를 공격 | 서버(관리자)를 공격 |
방법 | 공격자가 직접 홈페이지에 악의적인 스크립트 삽입 후 공격 | 용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청 |
공격이 실행되는 위치 | 클라이언트 PC에서 실행되며 사용자의 정보 탈취 | 위조된 요청을 서버에 보내어 서버단에서 스크립트 실행 |
'cs 스터디' 카테고리의 다른 글
데이터 베이스 면접 질문 (0) | 2024.04.16 |
---|---|
운영체제 cs 면접 예상 질문 10선 (2) | 2024.04.03 |
[데이터 베이스] 트랜잭션 (0) | 2024.02.22 |
[운영체제] 메모리 - 링킹, 로딩, 물리적 주소, 논리적 주소 , 바인딩 (1) | 2024.02.16 |
웹 보안 (0) | 2024.02.05 |