ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CSRF(Cross Site Request Forgery)
    IT/웹 해킹 2024. 1. 18. 15:08

    [이 블로그는 해킹 공부하면서 가볍게 정리용으로 기록 및 내 생각을 끄적여 두기 위한 블로그(라 쓰고 일기라 읽는)이다.]

     

    • 목차
    1. CSRF란
    2. CSRF 위험성
    3. CSRF 실습
    4. CSRF 방어

    1. CSRF란

    얼핏 보면 XSS와 비슷해 보여 같은 것으로 착각하거나 오해하기 쉬운데 XSS는 클라이언트 측에서 스크립트가 실행되게 만드는 공격이고 CSRF는 클라이언트에게 서버로 공격자의 요청을 사용자의 요청으로 보내게 위조를 하는 것이다.

    예를 들면 유저의 비밀번호를 변경하는 곳에 CSRF 취약점이 있다면 공격하고 싶은 유저에게 비밀번호 변경 시의 url주소와 본인이 원하는 password 값을 붙여 링크를 전송하여 유저가 그 링크를 연다면 유저의 비밀번호가 변경될 것이고 악성이용자는 그 아이디를 탈취하여 악용을 하는 방식이다.

    취약점의 위치는 서버에 요청을 보내는 모든 곳에서 발생할 수 있다.  그리고 CSRF의 취약점이 발견된다면 XSS 코드에 넣어 공격을 할 수도 있다.

     

    2. CSRF 위험성

    XSS와 CSRF가 같이 쓰였을 때의 위험성이 어마어마한데 앞서 말했듯이 Stored XSS 취약점이 있는 곳에 유저의 비밀번호를 1234로 바꾸는 CSRF공격을 넣어 게시글을 작성했다고 예를 들면 저 게시물을 보는 모든 사람의 비밀번호가 1234로 바뀌게 되는 위력을 가지게 된다. 만약 관리자의 계정이 위조공격에 당할 경우 서버 전체에 권한을 탈취하여 공격자가 통제를 가져갈 수 도 있게 될 위험이 있다.

     

    3. CSRF 실습

    1) 비밀번호 변경

     

     

    2)  프록시에서 id=info&pw=1234로 2차 인증이 따로 없음을 확인 (CSRF 취약점 발견)

    비밀번호 변경 후 프록시에서 요청 및 응답 결과

     

    3) 프록시에서 요청 패킷을 URL copy 하여 링크를 전달해도 되지만 XSS의 취약점이 있는 게시판에 img tag를 넣어 삽입

     

     

    4) 게시판에 XSS+CSRF 가 합쳐진 게시글이 작성 완료되어 게시판 list에 보이는 걸 확인할 수 있다.

     

    5) 게시글을 열었을 때 내용엔 이미지 오류 말고는 아무것도 보이지 않는 것을 볼 수 있다.

     

    6) 게시글을 여는 순간 열람자의 비밀번호가 변경됨을 볼 수 있다.

    게시글 열람 패킷
    회원정보 수정완료 패킷

     

     

    4. CSRF 방어

    CSRF 방어 방법은 보통 비밀번호 같은 경우는 기존 비밀번호 입력 후 확인 같은 2차 인증을 넣어 보안을 강화시키거나 CSRF토큰이라는 것을 만든다. CSRF 토큰은 사용자가 처음 서버에 요청을 했을 때 서버에서 value에 랜덤 한 값을 넣어 DB나 세션에 저장 후 값을 넘겨주고 나중에 다시 사용자의 요청이 서버로 들어올 때 value값을 다시 비교하며 무결성 검증을 하게 만드는 것이다. 

    그리고 Method는 Get보다는 Post로 받게끔 해주고, Refferer Header 인증을 통해 다른 페이지에서 요청하는 정보를 확인 후 특정 페이지에서 오는 정보만 받게끔 개발을 한다. 예를 들면 마이페이지에서 수정하기 버튼을 눌러 개인정보를 수정해야 하는데 CSRF 취약점이 다른 페이지에서 발견되어 그 페이지에서의 마이페이지 수정 요청을 해오면 무시하는 것이다. (요즘은 API형식으로 개발하니까 확장성이 떨어져서 댓글정도만 ...?)

    여기서 제일 강력한 방어 방법은 2차 인증을 넣는 것이다. 나머지는 우회 가능성이 존재하기 때문이다.

     

    XSS와 비슷해 보이지만 실습을 하면서 차이점을 확실히 깨달았다. CSRF 취약점을 찾았을 때 XSS의 취약점을 발견하게 된다면 날개를 달아준 격이 되는 것도 흥미로웠다. 그냥 CSRF를 쓰려고 한다면 사회공학기법이나 사용자를 어떻게든 링크를 누르게 유인을 하게 해야 하는데 쉽지 않을 것 같기도 하다. 요새 보안 인식이 그래도 좋아져서 출처를 모르는 링크를 클릭하지 않으니 말이다.  그렇지만 계속해서 해킹 수법이 다양해지고 교묘해지는 만큼 이 공격도 악용자가 맘만 먹으면 강력하게 쓰일 수 있는 공격 같다.

Designed by Tistory.