비밀번호에 뭔가 이상한 점을 발견했습니다(글쎄요, 제가 아는 한). 예를 들어, 로그인할 때 잘못된 비밀번호를 입력하면 시스템에서 몇 초 동안 알려주는 것이 지연됩니다. 또한 sudo
잘못된 비밀번호로 시도할 때 쉘이 "죄송합니다. 다시 시도하십시오"라고 말할 때까지 기다려야 합니다.
잘못된 비밀번호를 "인식"하는 데 왜 그렇게 오랜 시간이 걸리는지 궁금합니다. 이것은 내가 사용한 여러 배포판(OSX 포함)에서도 나타났으므로 배포판에만 국한된 문제는 아닌 것 같습니다.
답변1
이는 보안 문제이며 실제로 이를 깨닫는 데 오랜 시간이 걸리지 않습니다. 이는 2가지 취약점을 해결합니다:
이는 로그인 시도를 제한합니다. 즉, 누군가가 해킹을 시도할 수 있는 만큼 빠르게 시스템을 공격할 수 없습니다(초당 100만 시도? 모르겠습니다).
자격 증명이 잘못된 것을 확인한 후 즉시 이 작업을 수행하면 자격 증명을 무효화하는 데 걸리는 시간을 활용하여 일부 자격 증명이 올바른지 추측하는 데 도움을 주어 추측 시간을 크게 줄일 수 있습니다.
이 두 가지를 방지하려면 시스템이 완료되는 데 일정 시간만 필요합니다. PAM을 사용하여 대기 시간을 구성할 수 있다고 생각합니다(Michael의 답변을 확인하십시오.).
안전공학(제3판, 아마존|두 번째 버전, 무료)는 이러한 문제에 대해 더 나은 설명을 제공합니다. 바라보다2장(PDF)— 특히 조항 2.4 및 2.5.3.3.
답변2
이는 의도적인 것이며 무차별 대입 공격을 제한하려는 시도입니다. 일반적으로 FAIL_DELAY
구성 항목을 찾아 /etc/login.defs
해당 값(기본적으로 초)을 변경하여 이를 수정할 수 있지만 파일의 주석을 보면 PAM이 어쨌든 최소 1초의 지연을 적용하는 3
것처럼 들리지만2
답변3
최신 Linux 시스템에서는 pam_unix.so가 이러한 지연을 부과하기 때문입니다. 앞서 언급한 대로 이를 변경하여 FAIL_DELAY
2초로 구성할 수 있습니다 /etc/login.defs
. 지연을 더 줄이려면 pam_unix.so에 "nodelay" 옵션을 제공해야 합니다. 예를 들어 내 시스템에서 처음부터 포함 내용을 추적하면 /etc/pam.d/sudo
다음 줄을 편집해야 한다는 것을 알 수 있습니다 /etc/pam.d/system-auth
.
auth required pam_unix.so try_first_pass nullok
다음과 같이 변경합니다.
auth required pam_unix.so try_first_pass nullok nodelay
불행하게도 내 Linux 배포판(아치)이 구성하는 방식에 따라 sshd가 사용하는 파일에 동일한 system-auth
파일이 포함됩니다 system-remote-login
.
sudo에 대한 지연을 제거하는 것은 기록되고 로컬 사용자만 사용하며 어쨌든 로컬 공격자가 우회할 수 있으므로 안전하지만 원격 로그인에 대해서는 이러한 지연을 제거하고 싶지 않을 수 있습니다. 물론 공유 시스템 인증 파일보다 더 많은 것을 포함하는 사용자 정의 sudo를 작성하여 이 문제를 해결할 수 있습니다.
개인적으로 나는 sudo의 지연(및 SIGINT 무시)은 큰 실수라고 생각합니다. 즉, 잘못된 비밀번호를 입력했다는 사실을 알고 있는 사용자는 프로세스가 종료되어도 좌절감을 느끼지 않을 것입니다. 물론 sudo가 SIGTSTP를 포착하지 못하기 때문에 여전히 Ctrl-Z를 사용하여 sudo를 중지할 수 있으며, 중지한 후에 Kill -9(SIGKILL)를 사용하여 종료할 수 있습니다. 하기가 귀찮을 뿐입니다. 따라서 이는 자동화된 공격이 매우 빠른 속도로 의사 터미널에서 sudo를 실행할 수 있음을 의미합니다. 그러나 이러한 지연은 합법적인 사용자를 좌절시키고 sudo를 다시 사용하지 않기 위해 종료하는 대신 루트 셸을 일시 중지하도록 권장합니다.