로그인 양식에 CSRF 공격에 대한 토큰이 필요합니까?


161

지금까지 배운 내용에서 토큰의 목적은 공격자가 양식 제출을 위조하지 못하게하는 것입니다.

예를 들어, 웹 사이트에 입력 한 양식에 장바구니에 항목을 추가 한 경우 공격자가 원하지 않는 항목으로 장바구니를 스팸으로 만들 수 있습니다.

장바구니 양식에 유효한 여러 입력이있을 수 있으므로 공격자는 웹 사이트에서 판매하는 항목을 알고 있으면됩니다.

이 경우 토큰이 작동하는 방식을 이해하고 사용자가 카트에 추가 된 각 항목에 대해 양식의 "제출"버튼을 실제로 채워 넣었는지 확인하기 때문에 보안을 추가합니다.

그러나 토큰은 사용자 로그인 양식에 보안을 추가합니까? 사용자 이름과 비밀번호가 필요합니까?

사용자 이름과 암호는 매우 고유하기 때문에 공격자는 로그인 위조가 작동하기 위해 (토큰 설정이없는 경우에도) 침입자가 이미 웹 사이트에 로그인 할 수 있음을 알고 있어야합니다. 그 자신. 말할 것도없이, 사용자가 스스로 로그인하게하는 CSRF 공격은 실제적인 목적을 갖지 못할 것입니다.

CSRF 공격 및 토큰에 대한 이해가 정확합니까? 그리고 의심되는 사용자 로그인 양식에는 쓸모가 없습니까?


아마도 기본 암호를 사용하고 로그인을 위해 CSRF로 보호되지 않기 때문에 라우터를 납치 할 수 있습니다.
AbiusX 2016 년

예, 따라서 다른 웹 사이트는 귀하의 로그인 양식을 모방 할 수 없습니다. 그들은 그렇게함으로써 무엇을 달성 할 수 있습니까? 먼저 허용하고 싶지 않습니다. 둘째 : 잘못된 비밀번호로 인해 사용자를 차단하는 것과 같은 매우 쉬운 오류 사례 n no. 때때로, 피할 수 있습니다.
mayankcpdixit

답변:


126

예. 일반적으로 다른 CSRF 공격으로부터 로그인 양식을 보호해야합니다.

그렇지 않으면 사이트가 일종의 "신뢰할 수있는 도메인 피싱"공격에 취약합니다. 즉, CSRF 취약 로그인 페이지를 통해 공격자는 사용자 계정을 피해자와 공유 할 수 있습니다.

취약점은 다음과 같이 나타납니다.

  1. 공격자는 신뢰할 수있는 도메인에서 호스트 계정을 만듭니다.
  2. 공격자는이 호스트 계정의 자격 증명을 사용하여 피해자의 브라우저에서 로그인 요청을 위조합니다
  3. 공격자는 피해자가 신뢰할 수있는 사이트를 사용하도록 속이는 경우 호스트 계정을 통해 로그인 한 것을 알 수 없습니다
  4. 공격자는 브라우저가 호스트 계정으로 로그인되어있는 동안 (의도적으로 또는 의도하지 않게) 피해자가 "생성"한 모든 데이터 또는 메타 데이터에 액세스 할 수 있습니다.

적절한 예로, YouTube를 고려하십시오 . YouTube는 사용자가 "자신의"시청 기록을 볼 수 있도록 허용했으며, 로그인 양식은 CSRF에 취약했습니다! 그래서 결과적으로 공격자는 암호로 계정을 설정할 수 있습니다 그들은 , 알고 사용하여 YouTube에 피해자를 기록 하는 피해자가보고 무슨 비디오를 스토킹 - 계정.

이 주석 스레드 에는 이와 같은 개인 정보 침해에 "만"사용될 수 있음을 암시하는 내용이 있습니다. 아마도 Wikipedia의 CSRF 기사 에서 섹션을 인용 하십시오 .

로그인 CSRF는 다양한 새로운 공격을 가능하게합니다. 예를 들어 공격자는 나중에 자신의 합법적 인 자격 증명으로 사이트에 로그인하고 계정에 저장된 활동 기록과 같은 개인 정보를 볼 수 있습니다.

"신규 공격"에 중점을 둡니다. 피싱 공격이 사용자에게 미치는 영향을 상상 한 다음 사용자 자신의 신뢰할 수있는 책갈피를 통해 피싱 공격이 사이트에 작동한다고 상상해보십시오! 위에서 언급 한 주석 스레드에 링크 된 논문은 단순한 개인 정보 보호 공격을 넘어 몇 가지 예를 제공합니다.


6
CSRF 보호는 어떻게 도움이됩니까? 침입자가 자신의 CSRF 토큰을 요청하여 제출하지 못하게 막는 것이 있습니까? 인증 된 세션이 없기 때문에 웹 서버가 한 토큰을 다른 토큰보다 선호 할 이유가 없습니다.
A. Wilson

2
"공격자가 자신의 CSRF 토큰을 요청하여 제출하지 못하게 막는 것이 있습니까?" - 예! 이것이 CSRF 예방 논리의 전제입니다. 브라우저는 양식 제출이 다른 출처를 대상으로 할 수 있도록 허용했거나 수행 할 수 있었지만 지금은 옵트 인 CORS를 통한 경우를 제외하고 는 JS가 사이트 전체에서 데이터 를 도록 허용하지 않았습니다 . 당신이 CORS의 잘못을 설정하지 않는 한, 공격자가 (토큰 기존 CSRF 포함 할 수있는 양식 제출 트리거 할 수있는 쿠키를 ) 하지만 수있는 방법이 없습니다 알고 필요한 두 번째 사본을 보낼 수있는 토큰을 (예를 들어, 본문 / 헤더). 따라서 CSRF 코드는 거부됩니다.
natevw

7
나는 당신의 마지막 의견이 잘못되었다고 생각합니다 (A. Wilson의 말을 오해했습니다). 우리는 공격자가로드 할 수 없다는 것 http://good.com/login.html, 하나의 클라이언트에서 중첩 된 CSRF 토큰을 분석 한 다음 게시 http://bad.com/login.html그 제출하는 수정 된 형태로 포함되어 자신의 사용자 이름, 암호 것은과 상관없이 어떤 피해자 유형의 토큰을. CORS 당신 때문에 적용되지 않습니다 ' 공격자와 피해자라는 두 가지 클라이언트가 있습니다. CSRF 보호는 실제로 로그인 양식에서 작동합니까?
길리

8
예, CSRF는 사이트 간 요청 위조로부터 로그인 양식 보호합니다 . 적절한 CSRF 토큰은 생성 될 때마다 암호화 방식으로 고유합니다. 물론 공격자는 자체적 으로 토큰을 얻을 수 있지만 피해자가 브라우저에 있는 [잠재적으로 설정되지 않은] 쿠키 와 여전히 일치 하지는 않으며, 공격자는 좋은 도메인의 페이지를 손상시키지 않으면 서 해당 쿠키를 설정할 수 없습니다. (여러분의 예는 CSRF와 이상한 피싱 공격 사이에 약간 혼동 된 것 같습니다. 따라서 실제 질문에 대답하고 있는지 확실하지 않습니다…)
natevw

3
잘못되었을 수도 있지만 사용자가 실수로 상품 구매와 관련된 작업을 수행하면 심각한 위협 이있는 것 같습니다 . 예를 들어 공격자는 사용자를 속여 웹 사이트에 로그인하도록 유도하고 사용자는 다른 계정 (아마존 또는 이와 유사한 것)에 있다는 사실을 모르고 항목을 구매합니다. 이제 공격자는 저장된 결제 정보에 액세스하고 구매 등을 리디렉션 할 수 있습니다.
you786

14

CSRF의 요점은 공격자가 미리 합법적으로 보이는 요청을 위조 할 수 있다는 것입니다. 그러나 공격자가 피해자의 사용자 이름과 비밀번호를 모르는 경우 로그인 양식으로이를 수행 할 수 없습니다.이 경우보다 효율적인 공격 방법이 있습니다 (자신의 로그인).

궁극적으로 공격자가 할 수있는 유일한 일은 보안 시스템이 일정 기간 동안 사용자를 잠글 수있는 경우 로그인에 실패한 스팸 메일로 사용자를 불편하게하는 것입니다.


2
와우 슈퍼 빠른 답변! 고마워요! 이제 자신있게 웹 사이트를 계속 구축 할 수 있습니다.
php_learner

21
로그인 CSRF는 여전히 사용자 seclab.stanford.edu/websec/csrf/csrf.pdf
squiddle

6
@ squiddle : 링크에 감사드립니다. 그러나 공격자의 통제하에있는 계정으로 사용자가 로그인에 달려 뭔가를 실현하지 않습니다 사용자 권한이 아니라고 가정 하고 그런 다음 사용자가 서버에 저장 될 것입니다 민감한 정보를 생성하는 것입니다 가정합니다. 따라서 IMHO는 "클래식"CSRF보다 덜 심각합니다.
Jon

6
@Jon 예, 덜 심각 할 수는 있지만 결국에는 개인 정보 침해와 같은 불편한 것 이상이 될 수 있습니다. 모든 서비스는 자체 위협 모델을 정의하고 그에 따라 처리해야합니다. 그러려면 최소한 가능한 위협에 대해 알고 있어야합니다. 그래서 2 센트를 더했습니다.
squiddle

1
"보안 시스템이 사용자를 일정 시간 동안 잠글 수있는 경우, 침입자가 할 수있는 유일한 방법은 로그인 실패로 스팸 메일을 보내 사용자를 불편하게하는 것입니다."
samthebest

0

, 따라서 다른 웹 사이트는 귀하의 로그인 양식을 모방 할 수 없습니다! 저것과 같이 쉬운.

그들은 그렇게함으로써 무엇을 달성 할 수 있습니까?

  • 첫째, 당신은 그것을 허용하고 싶지 않습니다.
  • 둘째 : 매우 간단한 실패 사례조차도 :
    • 잘못된 비밀번호로 인해 사용자를 차단합니다 n. 때때로, 피할 수 있습니다.
    • 허위 해킹 경고를 방지 할 수 있습니다. 등

이 점의 대부분은 틀립니다. 공격자는 로그인 양식을 생성하고, 사용자의 자격 증명을 가져 와서 로그인 양식 (csrf 토큰으로)을로드하고 세 가지 정보를 대상에 게시 할 수 있습니다. CSRF는이를 방지하지 않습니다.
Snapey

@Snapey 브라우저는 일반적으로 JS가 CSRF 데이터를 읽도록 허용하지 않습니다. JS를 사용하면 실제 양식 제출 요청을 모방 할 수 없습니다.
mayankcpdixit

csrf 토큰은 종종 자바 스크립트에서 사용하기 위해 클라이언트로 전달됩니다. 나는 공격자가 로그인 양식을 요청하고 자격 증명을 채우는 것에 대해 이야기하고 있지 않습니다. @mayankcpdxit. csrf가 자격 증명을 채우는 것을 방지한다는 것을 암시하는 것 같습니다.
Snapey

이론적으로는 막을 수 없습니다. 그러나 iframe에서 CSRF 양식로드를 중지하고 출처 간 요청을 허용하지 않으면 CSRF 이후에 자격 증명 채우기를 자동화 할 수 없습니다.
mayankcpdixit

-1

CSRF 유효성 검사 사전 로그인은 IMHO에 그다지 의미가 없습니다.

덕분에 링크 @squiddle합니다 : seclab.stanford.edu/websec/csrf/csrf.pdf을 , 우리는 매우 첫 페이지에 읽을 수 있습니다 :

The most popular CSRF defense is to include a secret
token with each request and to validate that the received
token is correctly bound to the users session,
preventing CSRF by forcing the attacker to guess the
sessions token.

사전 로그인 CSRF 유효성 검사를 시도하면 잠재적 인 공격자에게 웹 사이트의 유효한 코드를 긁을 수있는 기회가 주어집니다! 그 / 그녀는 그 목적을 무너 뜨리는 토큰을 다시 게시 할 수있었습니다.

아마도 침입자는 사이트의 사용자 이름을 추측하려고 시도 할 수 있습니다. 내가 한 일은 IP 주소가 성공하지 않고 10 명의 사용자 이름을 추측하려고하면 단순히 블랙리스트에 올립니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.