티스토리 뷰

CSRF:Cross-Site Request Forgery



크로스 사이트 리퀘스트 변조는 사이트간 요청위조 불리기도 한다. 피해자의 권한으로 피해자 모르게 공격자가 
의도한  요청을 수행 하도록 만드는것이다.  이는 그 피해자의 권한에 따라서 위험성이 달라진다는 특징이 있다.

-    피해자가 자신의 의도와는 무관하게 공격자가 의도한 행위를 웹사이트에 요청하도록 만드는 공격이다.
-    조작된 요청값을 이용해 웹 애플리케이션을 공격한다.

CSRF 공격 예상도



CSRF는 로그온된 피해자의 브라우저를 통해 , 세션쿠키 및 기타 다른 인증 정보가 포함된 변조된
HTTP 요청을 전송하여 정상적인 요청 처럼 보이게하는 기법이다. 


CSRF 공격의 원인 및 결과



→ 크로스 사이트 리퀘스트 변조
  - 피해자는 자신의 의지와는 무관하게 공격자가 의도한 행위를 웹 사이트에 요청하도록 만드는 공격
  - 조작된 Request를 웹 어플리케이션에 전송하는 공격
  - CSRF가 적용되려면 수정/삭제하는 액션에서 사용자를 구분하는 파라미터 값이 존재하지 않아야 한다.

→ 크로스 사이트 리퀘스트 변조 원인과 결과
   - 사용자 입력 값에 대한 적절한 필터링 및 인증에 대한 유효성 검증이 미흡하기 때문에 발생한다.
   - 서버 내의 파일 변경 및 서버 다운로드 등의 위험존재

CSRF 공격에대한 대응방안



이 방법은 모의 해킹 및 소스코드 분석을 통해 확인가능하다. 추측 불가한 토큰등을 포함한 링크
및 폼을 검사하고 HTTP 요청시 함께 입력하여 재인증 절차를 가지도록 하는것이 필요하다.


→ 설계시 고려사항
시스템으로 전송되는 모든 요청에 대해 정상적인 사용자의 유요한 요청인지, 아닌지 여부를 판별할 수 있도록
해야한다.

A. CSRF 토큰 사용 : 웹은 URL 기반으로 요청을 처리하는 구조이다. 이는 해당 요청이 특정 사용자의 정상적인 
요청인지를 구분하기 위한 정책이 적용되지 않는 경우, 스크립트나 자동화된 도구에 의해 보내지는 요청이 검증
절차 없이 처리될 수 있다. 
그래서 해당 요청이 정상인지 사용자의 정산적인 절차에 의한 요청인지를 구분하기 위해 세션별로 CSRF토큰을
생성하여 세션에 저장하고, 사용자가 작업페이지를 요청할 떄마다 hidden값으로 클라이언트에게 토큰을 전달한
뒤, 해당 클라이언트의 데이터 처리 요청시 전달되는 CSRF 토큰값을 체크하여 요청의 유효성을 검사하게 
설계 해야 한다.

↑사용자의 요청을 검증하여 CSRF를 방어할 수 있도록 위와같은 프레임워크나 라이브러리의 사용을 고려할 수 있다

B. 사용자와 상호 처리 기능 적용 : CSRF토큰 방식도 XSS취약점이 있는 사이트를 통해 공격하게되면 무력화
 될 수 있으므로 CAPTCHA(사용자가 실제 사람인지 컴퓨터 프로그램인지를 구별하는 기술)와 같은 사용자와 상호
 처리 가능한 기법을 적용하여 위조된 요청이 차단될 수 있도록 설계한다.

C. 재인증 요구 : 중요기능의 경우 재인증을 통해 안전하게 실제 요청여부를 확인하도록 설계 한다.




GET method를 이용한 CSRF 공격


- 실습환경 : 모의 쇼핑몰 사이트


↑ 웹 스캐닝 도구인 httpwatchpro 설치


↑ httpwatchpro를 이용해 상품을 장바구니에 담았을 시 파라미터 값을 스캔한다.
  # 현재 POST method를 이용해 전달되는 보이지 않는 값을 해당 도구를 이용해 파라미터값 확인

httpwatchpro 결과

 Parameter

Value 

ea 

g_code 

200811415950 

top 




↑httpwatchpro를 이용해 얻은 파라미터값을 조작하여 GET method로 값을 넘겨 주었다.


↑ 파라미터값을 조작해 공격자가 원하는 만큼의 수량으로 수정




SCRIPT를 이용한 CSRF 공격




↑ 현재 비어있는 피해자의 장바구니 확인


↑  공격자는 javascript의 iframe 태그를 이용해 보이지 않는 게시글을 남긴다.
  # 이때 해당 게시들을 클릭할 시 iframe의 src 페이지가 동작한다.

↑  해당 게시글을 클릭 시 아무런 변화가 없어 보인다.


↑  해당 게시글의 iframe 태그의 영향으로 비어있던 장바구니가 공격자가 원하는 수량의 값으로 채워져있다.



악성 사이트 유도를 이용한 CSRF 공격




↑ 현재 비어있는 피해자의 장바구니 확인


↑공격자 PC의 웹 서버 가동


↑ 공격자의 웹서버 홈 디렉터리에 조작된 리퀘스트 요청
  # 공격 요청 수량 87개


↑ 공격자 웹 서버로 유도하는 공격 코드 


↑ 피해자는 공격코드가 담긴 게시글을 클릭하는 순간 공격자의 웹 서버로 연결된 공격코드 실행


↑ 공격자의 의도대로 공격 성공!




참고


- K-shield.jr 2기 정보보호 관리진단 과정
- KISA : 웹 취약점 분석 및 기술지원
- KISA : SW개발 보안 가이드