발생원인


서버에 검증없이 외부의 입력값을 저장하여 해당 내용을 열람할 경우 발생


CSRF(Cross Site Response Forgery)의 약어로 XSS를 이용한 요청위조를 의미한다.

XSS와의 가장 큰 차이점은 공격대상이 클라이언트냐 서버냐에 따라 구분할 수있다.


특정 페이지에서 공격자는 자신이 원하는 스크립트를 게시판에 삽입하고 누군가가 게시판을 읽기를 기다리면 된다. 


CSRF는 세션쿠키, SSL인증서, 윈도 도메인 인증과 같이 자동으로 입력된 신뢰 정보를 기반으로 한 웹어플리케이션에서 사용자의 신뢰 정보내에서 사용자의 요청을 변조함으로 써 해당 사용자의 권한으로 악의적인 공격을 수행할 수 있는 취약점이다. 


원클릭 공격, 사이드 재킹, 세션 라이딩 등으로 알려져 있고, XSS와 유사하지만 XSS의 경우 악성 스크립트를 웹사이트에 삽입해야 하지만 CSRF공격은 사이트가 신뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 전송하도록 하는 기법을 사용한다. 사용자를 통해 이루어지는 공격이기 때문에 공격자의 IP추적은 현실적으로 불가능하다.


CSRF 공격은 사용자가 로그인한 상태에서만 접속할 수 있는 웹페이지나 스크립트를 대상으로 하며, 공격 대상이 사이트에 접속하고 나면 아직 세션 정보가 남아있는 상태이고, 이틈을 노려 공격자가 게시판에 남겨 놓은 글을 공격 대상이 읽게되면 해당 링크가 요청되면서 공격이 실행된다.



영향 


게시판 도배, 권한 상승, 자동가입등



점검방법


애플리케이션에서 XSS 취약점 존재 여부를 확인한다.

소스 코드에서 임의의 토큰을 사용하는지 확인한다.


공격자의 경우 공격대상이 로그인한 사이트의 취약점을 잘 알고 있어야 한다. 사이트가 자동 로그인을 허용하거나 공격대상이 현재 로그인 상태여야 한다. 사이트에서 특정 동작을 수행할 때 사용자 세션외에 다른 확인 절차를 밟지 않아야 공격이 성공하게 된다.



대응방안


CSRF공격을 막기 위해서는 사용자 세션이외 다른 확인 절차를 밟도록 하는것이다. 인증용 hidden 필드를 모든 form에 넣어주고 동작을 수행하기전에 form에 넣어 두었던 hidden 필드값이 들어왔는지 다시 한번 확인한다면 가장 효과적으로 공격을 막을 수있다.


메소드가 GET인지 POST인지 구분하는 방법도 있지만 스크립트를 이용해 POST를 보내는 방식으로 CSRF공격을 시도할 가능성도 있으므로 확실한 대응방법이라고 보기는 어렵다.


Refer를 확인해서 신뢰할 수 있는 위치에서 온 요청인지 검증한다.


서버에서 쿠키 이외의 다른 파라메타 값으로 추가 인증을 처리한다. - 중요한 작업을 처리하는 경우 공인인증서나 보안 카드 같은 추가 인증 수단을 사용하면 거의 공격은 불가능하다.


값이 매번 바뀌는 one time 값을 사용한다. --> 인증값을 알아내기도 힘들뿐 더러 사용 마다 인증값이 바뀌기 때문에 공격이 거의 불가능하다.


XSS 스크립트의 실행방지  --> XSS 취약점이 존재하지 않더라고 스크립트를 실행시킬수 있다. XSS만 막았다고 CSRF를 막았다고 안심할 수 없다.


IPS나 웹 방화벽을 사용한다. --> CSRF는 정상적인 HTML 스크립트 이기 때문에 보안 솔루션으로 방어를 하기는 어렵고 중요 공격 로직을 파악하고 분석하여 안전한 웹 애플리케이션을 개발하는것이 확실하다.


 코드예



 안전하기 않은 코드의 예 - JAVA

……

<form name="MyForm" method="get action="customer.do">

<input type=text name="txt1">

<input type=submit value="보내기">

</form>

……

 GET방식 사용

 


 안전한 코드의 예 - JAVA

……

<form name="MyForm" method="post" action="customer.do">

<input type=text name="txt1">

<input type=submit value="보내기">

</form>

…… 

POST 방식 사용


 



블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

티스토리 툴바