Web Hacking Study/웹해킹

CSRF (Cross Site Request Forgery)

silver surfer 2022. 4. 28.

** CSRF

웹 어플리케이션 취약점 중 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격이다. 공격의 난이도가 높지 않아 흔히 사용된다.

 

** 쿠키와 세션

① 서버는 로그인 시 인증된 사용자의 정보를 Session에 저장하고, Session Id를 Set-Cookie 헤더에 담아 Client에게 전달한다

② Client(Browser)는 전달된 Session Id를 Cookie에 저장한다

③ Client가 해당 도메인에 로그인을 요청할 때마다 서버는 Cookie를 확인하여 Session Id가 있는지 확인한다

④ 서버는 Cookie에 담긴 Session Id 를 통해 인증된 사용자인지 여부를 확인한다

 

** 공격 과정

① 이용자는 웹사이트에 로그인하여 정상적인 Cookie를 발급받는다

② 공격자는 피싱 사이트의 링크를 이메일이나 게시판 등의 경로를 통해 피싱 사이트 접속을 유도한다

③ 이용자가 악성 스크립트 페이지에 접근하면 Cookie에 저장된 Session Id가 브라우저에 의해 자동적으로 함께 서버로 요청된다

④ 서버는 이 요청을 인증된 사용자로부터 온 것으로 판단하고 처리한다

 

 

** CSRF 방어기법

> Referrer 체크

Request의 HTTP 헤더에 있는 Referrer를 확인하여 같은 도메인에서 보낸 요청인지 검증하고 차단하는 방법

CSRF 공격 대부분 Referrer 값에 대한 검증만으로 방어가 가능하다

 

> CSRF Token (Security Token)

임의의 CSRF Token을 만들어 Session에 저장한다. <input> 태그의 hidden 값을 이용해 토큰 값을 함께 전달하고, 이후 서버에서 Session에 저장된 CSRF 토큰 값과 요청 파라미터에 담긴 토큰 값을 비교한다

 

> Double Submit Cookie 검증

Browser의 Same Origin 정책을 이용한다. Same Origin 정책으로 인해 JavaScript에서 타 도메인의 쿠키 값을 확인/수정하지 못한다는 점을 이용한 검증 방법이다. Browser에서 JavaScript로 임의의 생성한 토큰을 Cookie와 요청 헤더에 각각 담아서 서버에 전달한다. 서버는 전달받은 Cookie와 요청 헤더에서 토큰 값을 꺼내어 이들을 비교하고, Cookie에 저장된 토큰은 이후에 재사용하지 못하도록 처리한다.

댓글