본문 바로가기
인터넷 보안/실습

[인터넷 보안] CSRF 공격

by 볼링치는 개발자 2021. 6. 11.
반응형

CSRF란?

CSRF는 Cross Site Request Forgery의 약자입니다.

이는 우리말로 해석하면 사이트 간 요청 위조라고 번역할 수 있습니다.

이 공격은 공격자가 피해자를 피싱을 사용해 속이고, 사용자 모르게 로그인해 비밀번호를 변경하는 방법입니다.

 

CSRF 공격 순서

  1. 일반 사용자가 정상적으로 사이트에 접속하고 로그인합니다.
  2. 공격자가 사용자에게 은행 직원 인척 피싱해 이메일을 보내 링크를 클릭하도록 유도합니다.
  3. 사용자가 해당 링크를 클릭하면 현재 로그인돼있는 사이트의 비밀번호를 공격자가 미리 설정한 비밀번호로 자동으로 변경됩니다.
  4. 공격자가 변경된 비밀번호로 접속해 사용자의 계정으로 로그인할 수 있습니다.

 

이렇게 사용자에게 피싱만 잘할 수 있으면 CSRF는 비교적 쉬운 공격입니다.

 

단, 주의할 점은, 공격자의 입장에서, 사용자가 해당 웹사이트에 정상적으로 로그인된 상태인지 알 수 없다는 점입니다.

 

링크를 클릭할 시점에 사이트에 로그인되어있지 않으면 아무 공격도 성공하지 못합니다.

 

그럼 이제부터 실습을 진행해 보겠습니다.

 

실습 환경으로는 Kali Linux, Metasploitable2의 DVWA, Burpsuite을 사용하겠습니다.

 

Kali Linux와 DVWA의 연결은 다음 포스팅을 참고하시면 됩니다.

https://programforlife.tistory.com/48 

 

[Kali] Kali Linux로 Metasploitable2 접속하기

Kali Linux로 Metasploitable2 접속하기 Kali Linux로 Metasploitabel2에 접속하기 위해서 먼저 VirtualBox와 가상 머신들의 네트워크 설정을 해줘야 합니다. VirtualBox와 Kali Linux 가상 머신, Metasploitable2..

programforlife.tistory.com

 

먼저 DVWA에 로그인해 Security Level을 Low로 변경해줍니다.

 

Burpsuite을 켜서 intercept를 켜 두고, DVWA의 CSRF메뉴로 이동해 비밀번호 변경하는 요청을 보내봅니다.

사진처럼 DVWA에서 전송한 비밀번호 변경 요청을 Burpsuite가 잡아서 요청 내용을 확인할 수 있습니다.

이 요청을 다른 링크를 눌렀을 때 전송하면, 해당 아이디에 대한 비밀번호가 변경될 수 있습니다.

단, 사용자가 로그인된 상태여야 된다는 조건은 항상 기억해야 합니다.

그 이유는 위에 요청에서 볼 수 있듯이, 로그인한 상태여야만 세션 쿠키 정보를 갖고 있어서 비밀번호 변경이 가능합니다.

 

실습을 위해 GitHub에서 파일을 하나 다운 받으려고 합니다.

https://github.com/SecuAcademy/webhacking/blob/master/csrf.html

해당 링크에서 csrf.html 파일을 raw file로 보고, 링크를 복사해서 터미널에서 다음 명령어를 실행해줍니다.

$ wget https://github.com/SecuAcademy/webhacking/blob/master/csrf.html

그리고 다음 명령어를 통해 해당 파일을 복사해줍니다.

$ cp csrf.html /opt/lampp/htdocs

/opt/lampp/htdocs 디렉토리는 XAMPP 웹 서버 환경을 설치해야 있습니다.

/opt/lampp/htdocs에 파일을 올려두면 웹 브라우저로 접근이 가능합니다.

 

csrf.html의 내용의 일부분을 보면 다음과 같습니다.

즉, 해당 링크를 클릭하면 비밀번호를 hacker로 변경하게 됩니다.

Javascript의 Ajax 기능을 사용해서 비밀번호가 변경되어도 사용자는 모르게 하는 파일입니다.

 

이제 이 파일을 이용한 피싱 메일을 작성해보겠습니다.

제 이메일 함에 보면 해당 피싱 메일이 와있습니다.

링크를 클릭하면 다음과 같이 진행됩니다.

현재 상태는 DVWA에 로그인 된 상태입니다.

DVWA에 로그인된 상태에서 피싱 메일 링크를 클릭해보겠습니다.

해당 링크를 클릭하면 Done! 화면은 뜨지만, 비밀번호가 변경되었는지 전혀 모르게 됩니다.

DVWA에서 로그아웃하고, 기존의 비밀번호인 normal로 로그인하면 실패가 됩니다.

공격자가 변경한 비밀번호인 hacker로 로그인하면 로그인에 성공합니다.

 

위에 링크를 클릭할때 보내지는 요청을 보면, 비밀번호를 변경할 때 보냈던 요청과 매우 유사해서 비밀번호가 변경되었음을 확인했습니다.

 

CSRF 공격 대응 방법

CSRF 공격의 가장 좋은 방법은 기존의 비밀번호를 입력하기를 요구하면서 한번 더 검사하는 것입니다.

혹은 captcah같은 걸로 비밀번호를 변경할 때 사람이 직접 하는지 검사할 수도 있습니다.

반응형

'인터넷 보안 > 실습' 카테고리의 다른 글

[인터넷 보안] XSS (Kali, Ubuntu 사용)  (1) 2021.06.12
[인터넷 보안] XSS  (0) 2021.06.12
[인터넷 보안] SQL Injection - SQL Map  (0) 2021.06.12
[인터넷 보안] SQL Injection  (0) 2021.06.11

댓글