우선, 저는 보안에 대해 전문가가 아니며 웹페이지 구축 중 습득한 정보, 공부한 정보를 바탕으로 정리를 기반하여 이 글을 작성합니다.
CSRF 란?
CSRF는 사용자가 의도치 않게 공격자가 의도한 행동을 하게 만드는 공격기법이다.
정보처리기사 시험을 준비하면서 공격 기법 중 하나라는 걸 알게 되었고, 일을 하며 실제로 이러한 해킹 및 공격에 대응하는 사실이 흥미로워 공부하고 정리하고자 한다.
앞서 말한 듯 CSRF는 특정 페이지에 방문할 때 사용자가 원하지 않는 행위를 하는 것으로 예를 들어 특정 사이트에 로그인 or 로그아웃, SNS의 악의적 게시글, 예매 취소, 더 크게는 은행을 통해 돈을 송금하는 등 보다 큰 불법적인 공격을 할 수 있다. 이렇게 사용자가 원하지 않는 현상을 유도하는 것을 말한다.
옥션 CSRF 사건
2008년 옥션 전체 회원 1863만여명의 개인 정보가 유출된 사건이 있었고, 이는 중국의 해커에 의해 이루어진 것으로 추정되며 공격 기법은 오늘 다루고 있는 공격인 사이트 간 요청 위조(CSRF) 이다.
이 해커는 옥션의 관리자들에게 공격 코드가 심어진 메일을 다량으로 발송했고 이 메일을 클릭한 관리자는 비밀번호가 변경되어 해커는 관리자 권한을 얻고 개인정보를 빼내었다고 한다.
메일을 읽는다고 비밀번호를 변경하고 삭제하는 등 마음대로 할 수 있을까?
CSRF 공격 과정
예를 들자면 어떠한 사이트든 로그인 기능이 있다면 비밀번호를 변경, 계정 삭제 등 회원 정보의 수정 기능은 있을 것이다.
또한 브라우저는 페이지를 접속 할 때 html에서 img태그가 있다면 src를 통해 해당 주소로 가서 이미지를 불러오게 된다.
<!-- 유저의 비밀번호를 변경하는 요청 url -->
<img src="https://devpuer.com/user/changeinfo?id=userid&newPw=1234" style="display:none; ">
위와 같은 코드가 삽입된 후 이메일로 여러 계정으로 보내고 이용자가 페이지를 열면, 브라우저는 이미지 파일을 받아오기 위해 공격용 URL을 열게 된다.
이용자는 의도치 않게 페이지를 여는 순간 브라우저에서 비밀번호 변경 요청을 보내서 계정을 뺐기는 상황을 겪게 된다.
따라서 이 공격을 막으려면 서버에게 진짜 내가 한 행동이라는 것을 인증해야 한다. 만약 인증에 실패한다면 해당 코드를 실행하지 않으면 공격에 예방할 수 있다.
어떻게?
대응 방법
CSRF는 의도하지 않은 행위를 하게 하는 공격 기법이다. 본인이 한 행동이라는 걸 검증하기 위해서는 어떠한 인증키를 주고 받아야한다.
클라이언트가 서버에게 페이지를 **요청(GET)**할 때 CSRF대응 키 (이하 ‘CSRF키’)를 만들어 쿠키에 저장하고 요청 URL과 CSRF키를 같이 보낸다.
클라이언트는 페이지에서 저장 및 정보 변경을 위해 값들 수정 **요청(POST)**을 할 때 헤더에 CSRF키를 넣어 보내면 서버는 자신의 쿠키 정보와 요청이 온 헤더의 CSRF키를 비교 후 동일하다면 실행, 동일하지 않다면 실행하지 않는 방법이다.
결론은 위와 같은 방법으로 공격을 대응 한다면 페이지의 요청이 없었느니 서버는 어떠한 키도 없으므로 서버는 해당 공격의 URL이 와도 실행하지 않게 되는 것이다.
라이브러리
csrf - npm search
www.npmjs.com
유명한 라이브리를 사용한다면 쉽게 방어(예방)할 수 있다. 하지만 해당 공격 기법을 알아야 대응 및 적용도 잘 한다고 생각한다.
만약 실제로 구현을 하고 싶다면 해시 값이든 그냥 난수이든 문자열을 길게 생성하여 쿠키에 저장하고 이를 주고 받으면 된다. 인터셉터도 구현을 해야한다. ㅎ
'Study > 보안' 카테고리의 다른 글
[XSS] 크로스 사이트 스크립팅 공격과 대응 방법 (0) | 2023.08.24 |
---|---|
[네트워크 보안] Dos / DDos 공격 차이 및 설명 (0) | 2023.07.11 |