잘못된 암호를 확인하는 것이 올바른 암호를 확인하는 것보다 더 오래 걸리는 이유는 무엇입니까?


83

이 질문은 항상 저를 괴롭 혔습니다.

Linux에서 암호를 묻는 메시지가 표시되면 입력 한 내용이 맞으면 거의 지체없이 즉시 확인합니다. 그러나 반대로 잘못된 암호를 입력하면 확인하는 데 시간이 더 걸립니다. 왜 그런 겁니까?

나는 내가 시도한 모든 Linux 배포판 에서 이것을 관찰 했습니다.


Windows에서도 마찬가지입니다. 또한 제목을 "왜 잘못된 암호가 올바른 암호보다 오래 걸립니다."와 같은 것으로 변경합니다. 더 많은 프로그래밍 관련이 될 것입니다.
he_the_great

방금 Ubuntu 시스템에 로그인하고 잘못된 암호를 입력하고 같은 질문을했습니다. :-)
johngreen 2014 년

답변:


106

실제로는 무차별 대입 공격이 초당 수백만 개의 암호를 시도하는 것을 방지하기위한 것입니다. 아이디어는 암호 확인 속도를 제한하는 것이며 따라야 할 규칙이 많이 있습니다.

  • 성공적인 사용자 / 암호 쌍은 즉시 성공해야합니다.
  • 이 없어야 감지 할 수 실패 이유에 식별 차이.

마지막 것이 특히 중요합니다. 다음과 같은 유용한 메시지가 없음을 의미합니다.

Your user name is correct but your password is wrong, please try again

또는:

Sorry, password wasn't long enough

"유효하지 않은 사용자 및 암호"와 "유효한 사용자이지만 유효하지 않은 암호"실패 이유 사이의 응답 시간 차이도 없습니다.

모든 실패는 텍스트 및 기타 정확히 동일한 정보를 제공해야합니다.

일부 시스템은 더 나아가서 각 실패에 대한 지연을 증가 시키거나 3 개의 실패 만 허용 한 다음 재 시도를 허용하기 전에 엄청난 지연을 겪습니다.


1
이렇게하면 앱이 포크하고 암호를 시도하는 것을 어떻게 막을 수 있으며, 일정 시간 내에 성공하지 못하면 자식을 죽이고 다시 포크합니다. 예, 일부 사용자로 로그인 할 수있는 경우에만 작동하지만 그로 인해 누군가가 언제 중지 되었습니까?
BCS

2
그것은 누구를 막을 수는 없지만 여전히 그 "일정의 시간"을 지연시켜야합니다. 심지어 작은 지연이 쓸모없는 암호의 수백만을 확인합니다, 당신은 것입니다 동안 로그온을하고 있다면 감지 - 당신은 아무것도 로그인 실패에 대한 기록되지 않습니다 생각하십니까?
paxdiablo

5
BCS : 제안한 작업을 수행 할 수있는 충분한 권한이있는 유효한 로그인이 이미있는 경우 더 이상 무차별 대입 공격이 필요하지 않을 가능성이 있습니다 (사용 가능한 다른 공격 벡터가 있기 때문). 지연은 외부 공격자에게 가장 유용합니다.
Erich Kitzmueller


12

확실하지 않지만 잘못된 암호를 입력 한 후 지연을 통합하여 공격을 더 어렵게 만드는 것이 일반적입니다. 이렇게하면 몇 개의 암호 만 확인하는 데 오랜 시간이 걸리기 때문에 공격을 실질적으로 불가능하게 만듭니다.

생년월일, 고양이 이름 등 몇 가지 암호를 입력하는 것조차 재미가 없습니다.


그리고 종종 두 번째 실패의 시간 초과가 첫 번째 실패의 시간 초과보다 길기도합니다.
Jonathan Leffler

가장 가능성이 높은 암호에 대한 뉴스 게시물을 보셨습니까? 123456은 매우 인기가 있습니다!
Spence

@Spence, 나는 실제로 그 항목을 보았지만, 기억에서 사람들이 만든 것만 큼 나쁘지는 않습니다. 매체가 그렇게하지 않을 것입니다. 암호는 온라인에서 발견 된 손상된 계정 목록에서 추출 되었으므로 (손상 되었기 때문에) 안전하지 않을 가능성이 훨씬 더 높습니다. 123456 손상 계좌 (예를 들어) 30 %를 구성하지만, 어디 근처에서 의미가 될 가능성이 있는 모든 계정.
paxdiablo

아니요, 이러한 목록은 암호 데이터베이스 해킹에서 가져온 것이며 대부분은 수백만 개의 샘플 세트를 나타냅니다. 이러한 해킹의 결과는 여러 온라인 데이터 세트에서 확인되었으며 "평균적인"소비자를 대표합니다. 더 나은 비밀번호를 얻을 수있는 유일한 방법은 생성시 비밀번호를 적용하거나 어쨌든 훨씬 더 유용한 2 단계 인증을 사용하는 것입니다.
Spence 2018 년

12

기본적으로 무차별 대입 및 사전 공격을 완화합니다.

에서 리눅스-PAM 응용 프로그램 개발자 가이드 :

지연 계획

extern int pam_fail_delay(pam_handle_t *pamh, unsigned int micro_sec);

이 함수는 pam_authenticate () 호출이 실패한 후 응용 프로그램에 제어가 반환되기 전에 시간 지연을 용이하게하기 위해 Linux-PAM에서 제공합니다. 이 기능을 사용할 때 응용 프로그램 프로그래머는 다음과 같이 사용할 수 있는지 확인해야합니다.

#ifdef PAM_FAIL_DELAY
    ....
#endif /* PAM_FAIL_DELAY */

일반적으로 애플리케이션은 사용자가 pam_authenticate () 또는 pam_chauthtok () 호출을 통해 Linux-PAM에 의해 인증되도록 요청합니다. 이러한 함수는 관련 Linux-PAM 구성 파일에 나열된 각 스택 인증 모듈을 호출합니다. 이 파일의 지시에 따라 하나 이상의 모듈이 실패하여 pam _... () 호출이 오류를 반환 할 수 있습니다. 응용 프로그램이 계속되기 전에 일시 중지하는 것이 바람직합니다. 이러한 지연의 주된 이유는 보안입니다. 지연은 주로 무차별 대입 사전 공격을 막는 역할을하지만 시간 제한 (비밀 채널) 공격을 방해하는데도 도움이됩니다.


8

보안을 크게 향상시킬 수있는 매우 간단하고 사실상 쉬운 방법입니다. 중히 여기다:

  1. 시스템 A에는 지연이 없습니다. 공격자는 사용자 이름 / 암호 조합을 만드는 프로그램을 가지고 있습니다. 분당 수천 번의 시도 속도로 모든 조합을 시도하고 성공한 모든 로그인을 기록하는 데 몇 시간 밖에 걸리지 않습니다.

  2. 시스템 B은 각각의 잘못된 추측 후 5 초 지연을 생성합니다. 공격자의 효율성은 분당 12 번의 시도로 감소하여 무차별 대입 공격을 효과적으로 방해합니다. 몇 시간이 아니라 유효한 로그인을 찾는 데 몇 달이 걸릴 수 있습니다. 해커가 그 환자라면 합법적 일 것입니다. :-)


4

실패한 인증 지연은 로그인 시도 비율을 줄이기 위해 존재합니다. 누군가가 사전 또는 사용자 계정에 대해 무차별 대입 공격을 시도하는 경우 해당 공격자는 실패 지연을 기다려야하므로 더 많은 시간을 들여 탐지 할 수있는 기회를 더 많이 제공해야합니다.

로그인 셸로 사용하는 항목에 따라 일반적으로이 지연을 구성하는 방법이 있다는 사실을 알고 싶을 수도 있습니다.

GDM에서 지연은 gdm.conf 파일 (일반적으로 /etc/gdm/gdm.conf에 있음)에 설정됩니다. RetryDelay = x를 설정해야합니다. 여기서 x는 초 단위의 값입니다.

오늘날 대부분의 리눅스 배포판은 /etc/login.defs에 정의 된 FAIL_DELAY를 지원하므로 로그인 시도 실패 후 대기 시간을 설정할 수 있습니다.

마지막으로, PAM을 사용하면 인증 라인에 nodelay 속성을 설정하여 실패 지연을 우회 할 수 있습니다. ( 여기 PAM 및 Linux에 대한 기사입니다 )


1

답변이 제안하는 것만 큼 간단 할 수 있다고 생각하지 않습니다.

올바른 암호에 대한 응답이 즉각적인 경우 (일부 값) 암호가 잘못되었음을 알기 위해 해당 값보다 오래 기다릴 필요가 없습니까? (적어도 확률 적으로 알고 있습니다. 크래킹 목적으로는 괜찮습니다.) 어쨌든이 공격을 병렬로 실행할 것입니다.이 모든 것이 하나의 큰 DoS 환영 매트입니까?


그것은 그들이 의미하는 바가 아닙니다. 암호를 틀리거나 옳은 것에는 분명한 차이가 있습니다. 그들이 의미하는 것은 잘못된 사용자 이름과 잘못된 암호 사이에 차이가 없어야한다는 것입니다. 이 공격을 병렬로 실행한다는 뜻입니까? 어떻게 병렬로 실행할 수 있습니까?
mpen 2009

병렬로 실행되는 @Mark는 여러 연결을 열고 로그인을 시도해야 할 것입니다. 여전히 시간이 많이 걸리고 실용적이지 않습니다.
he_the_great

느리지 않은 연결에서 초당 백만 개의 검사를 실행할 수 있고 연결에 실패한 시도에 대해 1 초 지연이 추가 된 경우 동일한 효과를 얻으려면 백만 개의 공격 클라이언트가 필요합니다. 서버가 많은 텔넷 세션을 만들 수 있을지 의심됩니다.
paxdiablo

요점은 다음 암호를 입력하기 전에 지연을 기다릴 필요가 없다는 것입니다. 그래서 무슨 소용이 있습니까?

@Greg, 호스트에 다시 연결해야하며 필요한 경우 다음 단계는 IP 주소를 확인하여이를 포착하는 것입니다.
paxdiablo

1

이전에 시도한 것은 작동하는 것처럼 보였지만 실제로는 작동하지 않았습니다. 관심이 있다면 위키 편집 기록을 검토해야합니다 ...

무엇을 수행 하기 위해 인 (내게) 작업을 모두 pam_faildelay.so 지연 = X에서의 낮은 값 의 /etc/pam.d/login (I는 500,000로 낮아, 0.5 초)을, 또한 nodelay 추가 (a 선행 space)를 Gabriel이 답변에 설명 한 것처럼 common-auth 의 줄 끝에 .

auth [success=1 default=ignore] pam_unix.so nullok_secure nodelay

적어도 나에게는 (debian sid), 이러한 변경 중 하나만 수행해도 지연이 기본 3 초 미만으로 단축되지는 않지만 /etc/pam.d/login의 값만 변경하여 지연을 늘릴 수는 있습니다.

이런 종류의 쓰레기는 어른을 울게하기에 충분합니다!


0

Ubuntu 9.10에서는 새 버전도 찾고있는 파일이

/etc/pam.d/login

라인 편집 :

인증 선택적 pam_faildelay.so 지연 = 3000000

당신이 원하는 다른 숫자 3을 변경합니다.

'nodelay'인증을 받으려면 파일을 편집해야한다고 생각합니다.

/etc/pam.d/common-auth

너무. 라인에서 :

auth [success = 1 default = ignore] pam_unix.so nullok_secure

마지막에 'nodelay'를 추가합니다 (따옴표없이). 그러나 'nodelay'에 대한이 마지막 설명은 제가 생각하는 것입니다.


0

개발자 관점에서 메모를 추가하고 싶습니다. 육안으로는 분명하지 않지만 현명한 개발자는 일치 항목이 발견되면 일치 쿼리에서 벗어날 수 있습니다. 증인에서 성공적인 경기는 실패한 경기보다 빨리 완료됩니다. 일치 기능은 올바른 일치를 찾을 때까지 모든 알려진 계정과 자격 증명을 비교하기 때문입니다. 즉, ID 순으로 사용자 계정이 1,000,000 개 있다고 가정 해 보겠습니다. 001, 002, 003 등. 귀하의 ID는 43,001입니다. 따라서 올바른 사용자 이름과 암호를 입력하면 검색이 43,001에서 중지되고 로그인됩니다. 자격 증명이 올바르지 않으면 1,000,000 개의 레코드를 모두 검색합니다. 듀얼 코어 서버의 처리 시간 차이는 밀리 초 단위 일 수 있습니다. 5 개의 사용자 계정이있는 Windows Vista에서는 나노초 단위입니다.


여기에있는 포스터의 99 %가 한 수준 또는 다른 수준의 개발자라는 것을 알게 될 것입니다. 너무 화려하게 들리지 마세요.

우분투를 사용하는데 사용자는 한 명뿐입니다. 그러나 잘못된 비밀번호를 제출하면 응답을받는 데 3 초가 걸립니다. 그래서, 당신은 틀 렸습니다 :)
Halil Bilgin 2014-08-13

0

나는 동의한다. 이것은 임의의 프로그래밍 결정입니다. 지연 시간을 3 초가 아닌 1 초로 설정하는 것은 비밀번호의 크랙 가능성을 실제로 해치는 것은 아니지만 더 사용자 친화적으로 만듭니다.


0

기술적으로이 의도적 인 지연"선형화 공격" 과 같은 공격을 방지하기위한 것입니다 (다른 공격과 이유도 있음) .

공격을 설명하기 위해 입력 된 시리얼이 올바른 시리얼과 일치하는지 확인하는 프로그램 (이 경우에는 " xyba ")을 고려하십시오 . 효율성을 위해 프로그래머는 한 번에 하나의 문자를 확인하고 잘못된 문자가 발견되는 즉시 종료하기로 결정했으며 시작하기 전에 길이도 확인했습니다.

올바른 직렬 길이는 잘못된 직렬 길이보다 처리하는 데 더 오래 걸립니다. 공격자의 경우 더 좋은 점은 첫 번째 문자가 올바른 일련 번호가 잘못된 첫 번째 문자가있는 일련 번호보다 오래 걸린다는 것입니다. 대기 시간의 연속 단계는 루프가 하나 더있을 때마다 올바른 입력을 통해 비교하기 때문입니다.

  • 따라서 공격자는 4 자 문자열을 선택할 수 있으며 x로 시작하는 문자열 에 가장 많은 시간이 걸립니다. (추측 작업으로)
  • 공격자는 문자를 x 로 고정 하고 두 번째 문자를 변경할 수 있습니다.이 경우 y 가 가장 오래 걸린다는 것을 알게됩니다 .
  • 공격자는 처음 두 문자를 xy 로 수정하고 세 번째 문자를 변경하면 b 가 가장 오래 걸린다는 것을 알게됩니다 .
  • 공격자는 처음 세 문자를 xyb 로 수정하고 네 번째 문자를 변경하면 a 가 가장 오래 걸린다는 것을 알게됩니다 .

따라서 공격자는 한 번에 일련의 문자 하나를 복구 할 수 있습니다.

선형화 .java.

Linearization.docx, 샘플 출력

일련 번호는 4 자이며 각 문자에는 128 개의 가능한 값이 있습니다. 그런 다음 128 4 = 2 28 = 268,435,456 개의 가능한 일련 번호가 있습니다. 공격자가 전체 일련 번호를 무작위로 추측해야한다면 약 2 27 = 134,217,728 번의 시도로 일련 번호를 추측 할 것 입니다. 이는 엄청난 양의 작업 입니다. 반면에 위의 선형화 공격을 사용하면 각 문자에 대해 평균 128/2 = 64 개의 추측 만 필요하며 총 예상 작업은 약 4 * 64 = 2 8 = 256 개의 추측이며 이는 사소한 양입니다. 일의.

서면 군의 대부분은에서 적응 (마크 스탬프의 "원칙과 실천 정보 보안"에서 촬영). 또한 위의 계산은 올바른 일련 길이를 파악하는 데 필요한 추측의 양을 고려하지 않습니다.

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