CSRF 공격 (2)

웹해킹/DVWA 2020. 1. 12. 11:40
반응형
SMALL

1. CSRF 공격 High 단계 실습

 

[그림 1-1] 패스워드 변경

CSRF 공격 탭에서 패스워드를 변경한다.

 

 

[그림 1-2] 토큰 비교

위에 그림은 사용자의 비밀번호 1234 아래 그림은 공격자의 비밀번호인 hacker. 그림을 비교하면 차이가 없지만 user_token 값이 다르다는 있다. user_token값이 일치하지 않게 되면 사이트도 정상적인 사용자로 인식하지 않게 되서 CSRF 공격이 불가능하다.

 

[그림 1-3] 토큰 변조

공격자가 원하는 패스워드로 요청을 보낸 토큰 값을 임의로 변조한 응답을 보낸다.

 

[그림 1-4] CSRF 공격 실패

토큰 값을 임의로 변조 응답을 보내면 CSRF 공격이 실패했음을 있다. 공격자는 정확한 토큰 값을 입력해서 보내야 CSRF 공격에 성공하는데 서버에 요청을 보낼때마다 토큰 값이 랜덤하게 바뀌기 때문에 예측하기 어려워져 공격이 불가능하게 된다.

[그림 1-5] 우회 소스 코드

High 단계의 CSRF 공격을 우회하기 위한 소스코드를 분석한다. 크게 두가지 요청으로 나눌 있는데 첫번째 요청은 패스워드를 변경할 user_token 값을 가져온다. 두번째 요청에선 첫번째 요청에서 가져온 user_token 값을 분석한 CSRFtoken 변수에서 user_token 값을 추출한다. 추출한 user_token 값과 함께 응답을 보낸다.

 

[그림 1-6] 게시판 삽입

CSRF 공격을 우회하기 위해 게시판을 활용한다. 우회 파일이 저장되어 있는 웹서버 IP주소와 경로를 입력한 게시판에 글을 등록한다.

 

[그림 1-7] 스크립트 실행

스크립트가 실행되면 [그림 1-7] 같이 토큰 값이 출력된다. 토큰 값이 출력되면 공격에 성공했을 가능성이 높다.

 

 

 

 

[그림 1-8] 계정 변경

공격에 성공하고 로그아웃 다시 로그인을 시도하면 기존 계정으론 로그인이 되지 않는다. 반면 hacker라는 패스워드를 입력한 로그인을 시도하면 로그인이 된다는 것을 있다.

 

2. CSRF 공격 대응 방안

 

[그림 2-1] CSRF 공격 대응

CSRF 공격 대응 방안으로 기존 패스워드 입력을 요구하는 방법이 있다. 만약 기존 패스워드를 모른다면 패스워드 변경은 불가능하고 CSRF 공격도 전혀 통하지 않게 된다. 외에도 클라이언트가 서버에 토큰 값을 요청할 랜덤하게 토큰값을 바꿔서 요청하게 만들어 공격자가 토큰 값을 예측할 없도록 하는 방법과 Referer 헤더를 확인해 해당 사이트의 URL인지 아닌지 검사해서 CSRF 공격을 막는 방법도 존재한다.

 

[그림 2-2] 소스 코드

소스코드를 보면 user_token 검사하는 코드가 존재한다. user_token 검사한   토큰 값이 일치하지 않으면 CSRF 공격이 불가능하다. 또한 로그인 폼도 기존 패스워드, 변경할 패스워드, 변경할 패스워도 재확인 3가지로 구성되어 있어 반드시 기존 패스워드를 알아야 패스워드 변경이 가능하기 때문에 CSRF 공격이 불가능하다. 

 

** 추가 대응 방안 **

XSS 공격과 CSRF 공격의 근본적인 차이점은 XSS공격은 공격자가 의도한 악성 스크립트가 클라이언트에서 실행되는 반면 CSRF 공격은 악성 스크립트 자체를 웹 서버에 요청해서 공격을 진행한다는 차이가 있다.

 

-  요청을 할 때 GET 방식보다는 POST 방식을 사용한다.(보안상의 안전 차이)

-  요청메시지의 Referer 헤더를 검사해서 CSRF 공격을 판별한다. Referer는 이전에 접속했던 주소를 알려주는 역할을 하는데 이 헤더를 검사하면 정상적인 요청인지 피싱성 요청인지 구별할 수 있게 된다.

-  입력을 처리하는 폼은 토큰을 사용해서 공격자의 직접적인 URL이 동작하지 않게끔 처리하고 세션 검증 및 2차 인증을 유도해 공격을 방지한다.

-  특정한 사용자를 구분할 수 있는 인수를 적용해서 철저한 검증을 통해 CSRF 공격을 방지한다.

반응형
LIST

'웹해킹 > DVWA' 카테고리의 다른 글

Reflected XSS 공격 (1)  (0) 2020.01.21
Stored XSS 공격  (0) 2020.01.21
CSRF 공격 (1)  (0) 2020.01.12
Command Injection 공격 (2)  (0) 2020.01.04
파일 업로드 공격 대응 방안  (0) 2020.01.04
블로그 이미지

만년필석사

,