이 질문은 항상 저를 괴롭 혔습니다.
Linux에서 암호를 묻는 메시지가 표시되면 입력 한 내용이 맞으면 거의 지체없이 즉시 확인합니다. 그러나 반대로 잘못된 암호를 입력하면 확인하는 데 시간이 더 걸립니다. 왜 그런 겁니까?
나는 내가 시도한 모든 Linux 배포판 에서 이것을 관찰 했습니다.
답변
실제로는 무차별 대입 공격이 초당 수백만 개의 암호를 시도하는 것을 방지하기위한 것입니다. 아이디어는 암호 확인 속도를 제한하는 것이며 따라야 할 규칙이 많이 있습니다.
- 성공적인 사용자 / 암호 쌍은 즉시 성공해야합니다.
- 이 없어야 더 감지 할 수 실패 이유에 식별 차이.
마지막 것이 특히 중요합니다. 다음과 같은 유용한 메시지가 없음을 의미합니다.
Your user name is correct but your password is wrong, please try again
또는:
Sorry, password wasn't long enough
“유효하지 않은 사용자 및 암호”와 “유효한 사용자이지만 유효하지 않은 암호”실패 이유 사이의 응답 시간 차이도 없습니다.
모든 실패는 텍스트 및 기타 정확히 동일한 정보를 제공해야합니다.
일부 시스템은 더 나아가서 각 실패에 대한 지연을 증가 시키거나 3 개의 실패 만 허용 한 다음 재 시도를 허용하기 전에 엄청난 지연을 겪습니다.
답변
이로 인해 암호를 추측하는 데 시간이 더 걸립니다.
답변
확실하지 않지만 잘못된 암호를 입력 한 후 지연을 통합하여 공격을 더 어렵게 만드는 것이 일반적입니다. 이렇게하면 몇 개의 암호 만 확인하는 데 오랜 시간이 걸리기 때문에 공격을 실질적으로 불가능하게 만듭니다.
생년월일, 고양이 이름 등 몇 가지 암호를 입력하는 것조차 재미가 없습니다.
답변
기본적으로 무차별 대입 및 사전 공격을 완화합니다.
지연 계획
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 _… () 호출이 오류를 반환 할 수 있습니다. 응용 프로그램이 계속되기 전에 일시 중지하는 것이 바람직합니다. 이러한 지연의 주된 이유는 보안입니다. 지연은 주로 무차별 대입 사전 공격을 막는 역할을하지만 시간 제한 (비밀 채널) 공격을 방해하는데도 도움이됩니다.
답변
보안을 크게 향상시킬 수있는 매우 간단하고 사실상 쉬운 방법입니다. 중히 여기다:
-
시스템
A
에는 지연이 없습니다. 공격자는 사용자 이름 / 암호 조합을 만드는 프로그램을 가지고 있습니다. 분당 수천 번의 시도 속도로 모든 조합을 시도하고 성공한 모든 로그인을 기록하는 데 몇 시간 밖에 걸리지 않습니다. -
시스템
B
은 각각의 잘못된 추측 후 5 초 지연을 생성합니다. 공격자의 효율성은 분당 12 번의 시도로 감소하여 무차별 대입 공격을 효과적으로 방해합니다. 몇 시간이 아니라 유효한 로그인을 찾는 데 몇 달이 걸릴 수 있습니다. 해커가 그 환자라면 합법적 일 것입니다. 🙂
답변
실패한 인증 지연은 로그인 시도 비율을 줄이기 위해 존재합니다. 누군가가 사전 또는 사용자 계정에 대해 무차별 대입 공격을 시도하는 경우 해당 공격자는 실패 지연을 기다려야하므로 더 많은 시간을 들여 탐지 할 수있는 기회를 더 많이 제공해야합니다.
로그인 셸로 사용하는 항목에 따라 일반적으로이 지연을 구성하는 방법이 있다는 사실을 알고 싶을 수도 있습니다.
GDM에서 지연은 gdm.conf 파일 (일반적으로 /etc/gdm/gdm.conf에 있음)에 설정됩니다. RetryDelay = x를 설정해야합니다. 여기서 x는 초 단위의 값입니다.
오늘날 대부분의 리눅스 배포판은 /etc/login.defs에 정의 된 FAIL_DELAY를 지원하므로 로그인 시도 실패 후 대기 시간을 설정할 수 있습니다.
마지막으로, PAM을 사용하면 인증 라인에 nodelay 속성을 설정하여 실패 지연을 우회 할 수 있습니다. ( 여기 PAM 및 Linux에 대한 기사입니다 )
답변
답변이 제안하는 것만 큼 간단 할 수 있다고 생각하지 않습니다.
올바른 암호에 대한 응답이 즉각적인 경우 (일부 값) 암호가 잘못되었음을 알기 위해 해당 값보다 오래 기다릴 필요가 없습니까? (적어도 확률 적으로 알고 있습니다. 크래킹 목적으로는 괜찮습니다.) 어쨌든이 공격을 병렬로 실행할 것입니다.이 모든 것이 하나의 큰 DoS 환영 매트입니까?