실패한 로그인 시도를 기록하면 비밀번호가 노출됩니다


38

웹 사이트에서 다음과 같은 메시지로 로그인 시도 실패를 기록하기 시작했습니다.

Failed login attempt by qntmfred

이 로그 중 일부가 다음과 같이 보입니다.

Failed login attempt by qntmfredmypassword

일부 사용자는 사용자 이름 필드에 사용자 이름과 비밀번호를 입력하여 로그인에 실패한 것 같습니다. 암호는 데이터베이스에서 해시되지만 DB가 손상된 경우 이러한 로그 메시지는 공격자가 소수의 사람들이 이와 같이 로그인에 실패한 암호를 알아낼 수있는 방법이 될 수 있습니다.

이것을 처리하는 더 좋은 방법이 있습니까? 이 가능성에 대해 걱정해야합니까?


14
예, 걱정해야합니다.
FoolishSeth


4
UX와 보안에 대한 흥미로운 질문입니다. Michael의 링크 중 하나에서 언급했듯이 Javascript (클라이언트 측)를 사용하여 대부분의 경우를 막을 수 있습니다. 비밀번호 필드가 비어있는 동안 로그인 버튼을 비활성화하십시오. 자바 스크립트가없는 사용자는 버튼을 사용할 수 없으므로 로그인 화면을 계속 사용할 수 있습니다.
MSalters

답변:


65

다음과 같이 시도하십시오.

사용자 이름이 존재하면 "로그인 시도 실패 username"를 기록하십시오. 그렇지 않은 경우 123.45.67.89대신 " IP로 로그인 시도 실패 "를 기록하십시오. 실수로 로그에 비밀번호가 표시되는 문제를 해결해야합니다.


14
빈 암호를 확인한 경우 해당 오류로 인해 실패 할 수도 있습니다.
Mike Weller

사용자 이름 인쇄는 OP가 설명하는 문제입니다. 사용자가 [tab] 키를 누락하고 사용자 이름 필드에 사용자 이름과 비밀번호를 모두 빠르게 입력하고 Enter 키를 누르면 로그인이 실패하는 경우가 있습니다. 당신의 제안은 이것을 다루지 않습니다.
BZink

7
@BZink : 그렇습니다. 사용자 이름이 있으면 그대로 로그인하십시오. 사용자가 실수로 비밀번호를 사용자 이름에 추가하는 경우 결과 문자열도 거의 유효한 사용자 이름이 아닙니다.
메이슨 휠러

12

데이터베이스에 그러한 사용자 이름이 있는지 단순히 확인하지 않는 이유는 무엇입니까? 이것은 두 가지 가능한 결과를 남길 것입니다.

  1. 사용자가 올바른 사용자 이름을 입력했습니다. 그런 다음 지금 기록한 내용을 간단히 기록 할 수 있습니다.

  2. 사용자 이름 필드에 비밀번호를 입력 했으므로 사용자 이름이 유효하지 않습니다. 알 수없는 사용자의 로그인 시도가 실패했다는 로그 항목을 입력하십시오.

물론 IP, 날짜 및 기타 정보를 기록하는 추가 필드를 가질 수 있습니까?


3
# 2의 로그 항목에 사용자 이름의 해시를 추가하지 않겠습니까? 이렇게하면 암호가 숨겨 지지만 동시에 로그를보고있는 사람이 동일한 미확인 사용자가 여러 번 시도했는지 확인할 수 있습니다.
emory

사용자 이름이 포함 된 레코드가없는 경우에는 이들이 잘못되었다는 것이 명백하므로 문제 해결에 여전히 유용합니다.
JeffO

2
@emory, 사용자가 실수로 사용자 이름과 함께 암호를 입력 한 경우 문자열의 사용자 이름 부분 만 추출 할 수있는 방법이 없습니다. 그리고 반복적으로 사용자 이름 필드에 비밀번호를 입력하는 사람은 거의 없을 것 같습니다. 이것은 당신이하는 "일회성"실수입니다. 우리 중 최고에
이르렀지만,

@galdikas 사용자 이름에서 아무것도 추출 할 필요가 없습니다. 예를 들어, 비밀번호가 'password'인 'user'사용자입니다. 'userpassword'로 로그인하면 해시 함수가 'userpassword'를 17에 매핑합니다. 로그에 "식별되지 않은 사용자 17의 로그인 시도 실패"가 표시됩니다.
emory

1
@galdikas 어쩌면 몇 번 이상 계속 할 정도로 어리 석거나 끈질긴 사람은 없지만 수천 번 할 수있는 어리 석고 끈기있는 스크립트가있을 것입니다. 차이점을 알고 싶지 않습니까?
모리

1

고려 사항 :

  1. 다른 사람이 자신의 사용자 이름을 잘못 사용하는 것과는 달리 언제 이런 일이 발생했는지 감지 할 수 있습니까? 잘못 입력 한 사용자 이름을 기록하면 지원 목적으로 유용 할 수 있습니다. 즉 "로그온 할 수없는"질문에 "사용자 이름을 잘못 입력 했으므로 점이 아닌 대시 여야합니다"또는 "대괄호가 있습니다" 그런 다음 공백-잘라서 붙여 넣었습니까? " 소수의 고가의 유료 사용자 (즉, 다른 소셜 네트워킹 사이트가 아님)가있는 경우 이러한 종류의 지원을 제공해야합니다.

  2. 누군가해야 할 적절한 조치는 무엇입니까? 사용자 이름은 해킹 시도의 지표 일 수 있습니다. 사용자 이름이 목록에 나타나지 않는다고해서 그것이 무엇인지 알 필요는 없습니다. 그러나 이것이 심각한 문제라고 생각하고 암호가 누구인지 감지 한 경우, 암호가 변경된 후 사용자에게 암호를 변경하도록 요구할 수 있습니다.

  3. 산업 관행이란 무엇입니까? 산업 관행은 사용자 이름 필드는 기록하지만 암호 필드는 기록하지 않습니다. 당신은이 일을 해고 당하지 않을 것입니다.

일반적인 고려 사항이없는 한 다음과 같은 업계 관행을 따르고 사용자 이름 필드를 기록하십시오. 이것이 적절하지 않다고 생각되면 강제 암호 변경을 제안 2로 고려하십시오.


1

안전을 위해 현재 앱에 로그인하면 로그인 또는 비밀번호 재설정 메소드에 전달 된 매개 변수가 저장되지 않습니다. 로그 호출에는이를 제어하는 ​​선택적 매개 변수가 있습니다. true로 설정하면 저장된 매개 변수 오브젝트가로 대체됩니다 [Redacted]. 물론 약간의 데이터를 놓치지 만 IP 주소가 있으므로 평문에서 민감한 것을 얻는 위험은 없습니다.

이런 종류의 것을 실제로 기록하려면 로그인 시도를 기록 할 때 사용자 이름 필드에있는 이름과 일치하는 이름의 사용자를 데이터베이스에서 확인하고 일치하는 경우에만 저장하는 것이 좋습니다. 그렇지 않으면 "알 수없는 사용자"로 저장하면됩니다. 이 값에 그 값이 포함되어 있는지 확인하면 멋지게 보일 수 있지만 항상 [User] [Password] 및 [UserPas] [sword]와 같은 조합이 발생할 위험이 있습니다.이 경우 IP를 확인하여 추론 할 수 있습니다 실수로 다른 사람의 비밀번호 시작을 빈 공간에 저장했습니다. 불가능한 [User] [Password] 및 [UserPassword] [??]로이를 확장 할 수 있습니다.이 경우 "UserPassword에 의한 로그인 실패"와 "사용자에 의한 로그인 실패"가 표시되고 모두 추론 될 수 있습니다.사용자 비밀번호. 일반적으로 안전을 위해 로그인에 성공하지 않는 한 사용자 이름을 기록하지 말고 싶습니다.

추가하려면 다음을 편집하십시오.

실패한 로그인 시도에 대해 사용자 이름을 기록하기 위해 사람들이 게시하는 대부분의 주장은 다른 방법으로 더 잘 처리됩니다.

예를 들어, 고객이 "왜 로그온 할 수 없습니까?"라고 물으면 로그인 한 사용자 이름으로 오타를 지적 할 수 있다고합니다. 이것은 사실이지만 암호를 잡을 위험도 없습니다. 대신 실패시 사용자를 로그인 양식으로 다시 리디렉션하고 사용자 이름 필드를 강조 표시하고 사용자가 직접 볼 수 있도록 입력 한 내용으로 다시 채 웁니다.

또 다른 주장은 해킹 시도를 식별 할 수 있다는 것입니다. 하나의 사용자 이름에 대한 일련의 실패는 암호를 무차별 적으로 시행하려는 시도 일 수 있습니다. Users 테이블에 "BadLogins"열을 사용하여이 작업을 수행합니다.이 열은이 사용자와 일치하는 사용자 이름으로 로그인이 실패 할 때마다 증가하며, 로그인이 성공하면 사용자에게 " x 마지막 로그인 이후 실패한 로그인 시도 "및 사용자가 시도한 것이 아닌 경우 어떻게해야하는지 조언합니다. 실제로 철저히 로그인하려면 로그인 후에도 BadLogins 열의 마지막 값을 저장하는 다른 열 및 / 또는이 열의 가장 높은 값을 저장하는 열 및 / 또는 이 계정에 발생한 총 로그인 실패 횟수를 저장합니다.

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