어떻게 이 Man-In-The-Middle 공격을 작동하는가?
-
06-09-2020 - |
문제
이 장고 설명서에 있는 그것의 보호 CSRF 상태:
또한,HTTPS 요청 엄격한 참조 자 검사를 수행해 CsrfViewMiddleware.이 주소 Man-In-The-Middle 공격 입니다 HTTPS 때 세션을 사용하여 독립적인 nonce 인 는 사실 HTTP 설정'쿠키' 헤더은(불행하게도)허용 는 클라이언트는 이야기 사이트 아래에 HTTPS.(Referer 확인하지 않은 에 대해 수행하는 HTTP 요청하기 때문에 의 존재 Referer 헤더가 없 신뢰할 수 있는 충분에 HTTP.)
하는 데 문제가 있을 시각화하는 방법 이 공격을 작동합니다.누가 설명해?
업데이트:
문구에 Django doc 음을 의미하는 것으로 보인다 거기에 특정 유형의 사람이에서 중간자 공격(이르는 성공적인 CSRF 고 싶다고 가정)와 함께 작동하는 세션에 독립적인 비표(그러나지 않으로 트랜잭션에는 특정 목 etc., 나)그의 사용을 포함한 설정'쿠키'헤더가 있습니다.
그래서 나는 방법을 알고 싶어하는 특정 유형의 공격으로 작동합니다.
해결책
공격자는 SET 쿠키를 사용하여 CSRF 쿠키를 설정 한 다음 포스트 양식 데이터에 일치하는 토큰을 제공 할 수 있습니다.사이트는 세션 쿠키를 CSRF 쿠키에 묶지 않으므로 CSRF 토큰 + 쿠키가 정품 인 것으로 판단하는 방법이 없습니다 (공격자는 유효한 쌍을 얻을 수 있으므로 그들 중 하나의 해싱 등이 작동하지 않을 것입니다.사이트에서 직접부터 공격으로 해당 쌍을 사용하십시오).
다른 팁
여기에 매우 상세한 설명 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 토큰을 잡아
- 사용자가 http:///foo.com/browse 를 방문 할 때 트래픽을 읽습니다.
- 또는, 토큰이 형식이 특정 경우, 우리는 자신의 계정으로 사이트에 로그인하고 http://foo.com/check_out
해당 토큰이있는 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://
(아래 참조에 대한 설명).
공격자는 첫 번째를 얻기 위해 필요한 구문적으로 유효하 CSRF 토큰을 발급합니다.어떤 종류의 토큰(처럼 단순한 임의의 문자열)그녀가 할 수 있게 한다.을 위한 장고의 스크램블 토큰 그녀는 것입니다 아마에서 하나
http://
페이지 포함하는 CSRF(예:에 숨겨진 형태됩니다.)중요한 점은 장고의 CSRF 토큰 매지 않은 사용자 세션으로 또는 다른 저장 상태에 있습니다.장고는 단순히 볼 수 있는 경우에 일치 쿠키와 형태로 값(또는 헤더의 경우에 AJAX).그래서 유효한 모든 토큰을 할 것입니다.
사용자가 페이지를 요청해
http://
.공격자료를 수정 응답이기 때문에 암호화되지 않습니다.가Set-Cookie
그녀의 악성 CSRF 토큰,그리고 변경을 포함하는 페이지에 숨겨진 형태와 자바스크립트를 제출하는POSTs
하는https://
엔드포인트가 있습니다.는 형태로 물론이 포함되어 있으로 CSRF 값입니다.할 때 사용자의 브라우저로드 반응,저장 CSRF 쿠키에 의해 지정
Set-Cookie
헤더 다음을 실행 Javascript 양식을 제출합니다.보냅POST
을https://
끝점과 함께 악성 CSRF 쿠키입니다.(은"불행한 사실"는 쿠키 설정
http://
로 전송됩https://
끝점에서 설명 관련 RFC:"활성 네트워크를 공격할 수도 있습에 주입 쿠키으로 쿠키 헤더를 보내기https://example.com/
가장하여 응답에서http://example.com/
과 주사Set-Cookie
헤더입니다.HTTPS 서버example.com
것을 구분할 수 없는 이러한 쿠키에서 쿠키는 그 자체에는 HTTPS 를 응답합니다.활동적인 네트워크를 공격할 수 있는 기능을 활용하는 공격에 대하여example.com
는 경우에도example.com
HTTPS 를 사용에 중점을 두고 있었습니다.")마지막으로,장고 받은 서버는 악성
POST
요청을 합니다.비교 CSRF 쿠키(설정에 의해 공격자)가치 양식(설정에 의해 공격자)및 보고 그들은 동일합니다.그것은 악의적인 요청입니다.
그래서,피하는 결과,Django 도 검사 Referer
헤더(것으로 예상되는 항상 설정 https://
요청)에 대하여 Host
헤더입니다.을 확인하는 것이 실패한 위의 예에서이기 때문에 공격할 수 없을 위조합 Referer
헤더입니다.브라우저로 설정 http://
페이지는 공격자를 호스팅하는 데 사용되는 그녀의 악의적인 형태,장고는 검출하는 불일치 사과 https://
끝점을의 제공합니다.