문제

장고 설명서에 있는 그것의 보호 CSRF 상태:

또한,HTTPS 요청 엄격한 참조 자 검사를 수행해 CsrfViewMiddleware.이 주소 Man-In-The-Middle 공격 입니다 HTTPS 때 세션을 사용하여 독립적인 nonce 인 는 사실 HTTP 설정'쿠키' 헤더은(불행하게도)허용 는 클라이언트는 이야기 사이트 아래에 HTTPS.(Referer 확인하지 않은 에 대해 수행하는 HTTP 요청하기 때문에 의 존재 Referer 헤더가 없 신뢰할 수 있는 충분에 HTTP.)

하는 데 문제가 있을 시각화하는 방법 이 공격을 작동합니다.누가 설명해?

업데이트:
문구에 Django doc 음을 의미하는 것으로 보인다 거기에 특정 유형의 사람이에서 중간자 공격(이르는 성공적인 CSRF 고 싶다고 가정)와 함께 작동하는 세션에 독립적인 비표(그러나지 않으로 트랜잭션에는 특정 목 etc., 나)그의 사용을 포함한 설정'쿠키'헤더가 있습니다.
그래서 나는 방법을 알고 싶어하는 특정 유형의 공격으로 작동합니다.

도움이 되었습니까?

해결책

공격자는 SET 쿠키를 사용하여 CSRF 쿠키를 설정 한 다음 포스트 양식 데이터에 일치하는 토큰을 제공 할 수 있습니다.사이트는 세션 쿠키를 CSRF 쿠키에 묶지 않으므로 CSRF 토큰 + 쿠키가 정품 인 것으로 판단하는 방법이 없습니다 (공격자는 유효한 쌍을 얻을 수 있으므로 그들 중 하나의 해싱 등이 작동하지 않을 것입니다.사이트에서 직접부터 공격으로 해당 쌍을 사용하십시오).

( 세션 독립적 인 nonce)

다른 팁

여기에 매우 상세한 설명 one-sing mitm 공격. 아래는 요약하고 단순화 된 적응입니다.

가정 :

  • 공격 된 사이트는 foo.com
  • 입니다.
  • 우리 (공격자)는 모든 요청을 mitm
  • 로 만듭니다
  • 일부 페이지는 HTTP (예 : "Nofollow"> http://foo.com/browse " / strong>)
  • 일부 페이지는 HTTPS (예 : "Nofollow"> https://foo.com/check_out / strong>) 및 해당 페이지는 로그인 쿠키 (w / secud set)로 보호됩니다. 이것은 우리가 사용자의 로그인 쿠키를 훔칠 수 없다는 것을 의미합니다.
  • 양식 매개 변수를 csrftken 쿠키와 비교하여 보호됩니다. Django 문서에서 언급했듯이, "서명 한"또는 단지 무작위로 무작위로 무작위인지 여부에 관계 없이이 공격과 관련이 없습니다.

유효한 CSRF 토큰을 잡아

해당 토큰이있는 HTTPS 페이지로 공격자가 제어 한 게시물을 강제로 강제로 :

HTTP 게재 된 페이지 (예 : "Nofollow"> http://foo.com/browse / strong>) HTTPS 포스트 엔드 포인트 (예 : http : /)를 제출하는 자동 제출 양식을 갖도록하십시오. /foo.com/check_out ). 또한 토큰과 일치하도록 CSRF 쿠키를 설정하십시오.

<script type="text/javascript">
  function loadFrame(){
    var form=document.getElementById('attackform');
    // Make sure that the form opens in a hidden frame so user doesn't notice
    form.setAttribute('target', 'hiddenframe');
    form.submit();
  }
</script>

<form name="attackform" id="attackform" style="display:none" method="POST" 
      action="http://foo.com/check_out">
  <input type="text" name="expensive-thing" value="buy-it-now"/>
  <input type="text" name="csrf" value="csrf-token-value"/>
</form>

<iframe name="hiddenframe" style="display:none" id="hiddenframe"></iframe>
<XXX onload="loadFrame();">
.

인간 - 중간 공격은 매우 단순한 용어로 설명했습니다. 두 사람이 서로 이야기하기 시작하기 전에 두 사람이 서로 이야기하기 전에 두 가지 통신을 시작하기 전에 핸드 셰이크를합니다. 제 3자가 두 사람이 두 사람이 어떻게 의사 소통 하는지를 분석하기 시작하면 (그들의 매너리즘은 무엇입니까?, 그들은 서로 이야기하기 전에 특별한 핸드 셰이크를합니까?) 서로 몇시에 서로 이야기하고 싶습니까? 세 번째 사람은 그 / 그녀가 자신을 대화에 삽입 할 수있는 지점에 자신의 의사 소통을 금형하고 서로와 이야기하고 있다고 생각하고있는 원래 두 사람과 함께 중재자 역할을 할 수 있습니다.

이제 개념을 가져 와서 괴짜 수준을 내리십시오. PC, 라우터, 프로그램 등이 네트워크에 다른 노드와 통신하면 인증, 확인 또는 둘 모두에 의해 양방향 통신이 발생합니다. 제 3자가 필요한 경우 (세션 ID, 세션 쿠키, 트래픽에서의 승인 / 전송 / 종료의 다음 시퀀스 등), 악의적 인 제 3자가 자체 트래픽을 합법적 노드로 미러링 할 수 있다면 트래픽을 합법적 인 노드 중 하나로 홍수하고 올바른 일련의 이벤트를 다운로드 할 경우 악의적 인 세 번째가 합법적 노드로 받아 들여집니다.

자 말로는 우리가 장고 전 사이트 악성 Man-In-the-Middle.일반적인 경우에는 사이트지도 않았어 서비스를 제공해야 http:// 페이지에서 모두 성공하는 공격에 대한.에서 장고의 경우,그것은 아마도 서비스를 제공 할 필요 적어도 하나의 CSRF 보호된 페이지를 통해 일반 http:// (아래 참조에 대한 설명).

  1. 공격자는 첫 번째를 얻기 위해 필요한 구문적으로 유효하 CSRF 토큰을 발급합니다.어떤 종류의 토큰(처럼 단순한 임의의 문자열)그녀가 할 수 있게 한다.을 위한 장고의 스크램블 토큰 그녀는 것입니다 아마에서 하나 http:// 페이지 포함하는 CSRF(예:에 숨겨진 형태됩니다.)

    중요한 점은 장고의 CSRF 토큰 매지 않은 사용자 세션으로 또는 다른 저장 상태에 있습니다.장고는 단순히 볼 수 있는 경우에 일치 쿠키와 형태로 값(또는 헤더의 경우에 AJAX).그래서 유효한 모든 토큰을 할 것입니다.

  2. 사용자가 페이지를 요청해 http://.공격자료를 수정 응답이기 때문에 암호화되지 않습니다.가 Set-Cookie 그녀의 악성 CSRF 토큰,그리고 변경을 포함하는 페이지에 숨겨진 형태와 자바스크립트를 제출하는 POSTs 하는 https:// 엔드포인트가 있습니다.는 형태로 물론이 포함되어 있으로 CSRF 값입니다.

  3. 할 때 사용자의 브라우저로드 반응,저장 CSRF 쿠키에 의해 지정 Set-Cookie 헤더 다음을 실행 Javascript 양식을 제출합니다.보냅 POSThttps:// 끝점과 함께 악성 CSRF 쿠키입니다.

    (은"불행한 사실"는 쿠키 설정 http:// 로 전송됩 https:// 끝점에서 설명 관련 RFC:"활성 네트워크를 공격할 수도 있습에 주입 쿠키으로 쿠키 헤더를 보내기 https://example.com/ 가장하여 응답에서 http://example.com/ 과 주사 Set-Cookie 헤더입니다.HTTPS 서버 example.com 것을 구분할 수 없는 이러한 쿠키에서 쿠키는 그 자체에는 HTTPS 를 응답합니다.활동적인 네트워크를 공격할 수 있는 기능을 활용하는 공격에 대하여 example.com 는 경우에도 example.com HTTPS 를 사용에 중점을 두고 있었습니다.")

  4. 마지막으로,장고 받은 서버는 악성 POST 요청을 합니다.비교 CSRF 쿠키(설정에 의해 공격자)가치 양식(설정에 의해 공격자)및 보고 그들은 동일합니다.그것은 악의적인 요청입니다.

그래서,피하는 결과,Django 도 검사 Referer 헤더(것으로 예상되는 항상 설정 https:// 요청)에 대하여 Host 헤더입니다.을 확인하는 것이 실패한 위의 예에서이기 때문에 공격할 수 없을 위조합 Referer 헤더입니다.브라우저로 설정 http:// 페이지는 공격자를 호스팅하는 데 사용되는 그녀의 악의적인 형태,장고는 검출하는 불일치 사과 https:// 끝점을의 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top