좋아, 충분히 실속; 여기에 내가 지금까지 생각해 낸 것이 있습니다
(죄송합니다, 긴 글입니다. 용감하고 친구여, 여행은 그만한 가치가 있습니다)
원래 게시물의 방법 3과 4를 일종의 '퍼지'또는 동적 화이트리스트로 결합한 다음 , 화이트리스트에없는 IP를 차단하지 않고,이를 지옥으로 되돌려 놓는 요령이 있습니다.
이 법안이되어 있습니다 만 공격이 매우 구체적인 유형을 방해하기위한 것. 실제로, 그것은 인증에 대한 다른 모범 사례 접근 방식과 함께 작동합니다 : 고정 사용자 이름 제한, IP 당 제한, 코드 적용 강력한 암호 정책, 차단되지 않은 쿠키 로그인, 저장하기 전에 모든 암호를 해시, 절대 보안 질문 등 사용
공격 시나리오에 대한 가정
공격자가 가변 사용자 이름을 대상으로하는 경우 사용자 이름 제한이 실행되지 않습니다. 공격자가 봇넷을 사용 중이거나 넓은 IP 범위에 액세스 할 수있는 경우 IP 제한은 무력합니다. 공격자가 사용자 목록을 미리 스크랩 한 경우 (일반적으로 공개 등록 웹 서비스에서 가능) '사용자를 찾을 수 없음'오류 수에 따라 진행중인 공격을 탐지 할 수 없습니다. 또한 시스템 전체 (모든 사용자 이름, 모든 IP) 제한을 제한하는 경우 그러한 공격은 공격 기간과 제한 기간 동안 전체 사이트를 DoS합니다.
그래서 우리는 다른 것을해야합니다.
대책의 첫 번째 부분 : 화이트리스트
우리가 확실히 확신 할 수있는 것은 공격자가 수천 명의 사용자 (+)의 IP 주소를 탐지하고 동적으로 스푸핑 할 수 없다는 것입니다. 어떤하게 허용 된 사이트 목록 가능. 다시 말해, 각 사용자에 대해 사용자가 이전에 (최근에) 로그인 한 (해시 된) IP 목록을 저장합니다.
따라서 우리의 화이트리스트 체계는 잠긴 '정문'역할을하며, 사용자는 로그인을 위해 인식 된 '좋은'IP 중 하나에서 연결해야합니다. 이 '정문'에 대한 무차별 대입 공격은 사실상 불가능합니다 (+).
(+) 공격자가 서버, 모든 사용자 상자 또는 연결 자체를 소유하지 않는 한-더 이상 '인증'문제가 없으면 프랜차이즈 크기의 풀-더 플러그 FUBAR 상황
대책의 두 번째 부분 : 인식 할 수없는 IP의 시스템 전체 조절
사용자가 컴퓨터를 자주 전환하거나 동적 IP 주소에서 연결하는 공개 등록 웹 서비스에 대한 화이트리스트 작업을 수행하려면 인식 할 수없는 IP에서 연결하는 사용자를 위해 '고양이 문'을 열어 두어야합니다. 요령은 봇넷이 막히고 합법적 인 사용자가 가능한 한 귀찮게하도록 문을 디자인하는 것 입니다.
내 계획에서 이것은 승인되지 않은 IP에 의한 매우 제한적인 최대 로그인 실패 횟수를 3 시간 (예 : 서비스 유형에 따라 더 짧거나 더 긴 기간을 사용하는 것이 더 현명 할 수 있음) 동안 설정함으로써 달성됩니다. 그 제한을 세계화하는 것 , 즉 모든 사용자 계정에 대해
이 방법을 사용하면 느린 (1 ~ 2 분 사이의) 무차별 대포도 탐지하여 빠르고 효과적으로 방해 할 수 있습니다. 물론, 매우 느린 무차별 대입은 여전히 눈에 띄지 않을 수 있지만 너무 느린 속도는 무차별 대입 공격의 목적을 무너 뜨립니다.
이 제한 메커니즘으로 달성하고자하는 것은 최대 한계에 도달하면 '고양이 문'슬램이 잠시 닫히지 만 정문 사용자는 일반적인 방법으로 연결하는 정식 사용자에게 열려 있다는 것입니다.
- 인식 된 IP 중 하나에서 연결하여
- 또는 영구 로그인 쿠키를 사용하여 (어디서나)
공격 중에 영향을받는 유일한 합법적 인 사용자, 즉 제한이 활성화 된 동안 – 알 수없는 위치에서 또는 동적 IP로 로그인 한 영구 로그인 쿠키가없는 사용자가됩니다. 스로틀 링이 종료 될 때까지 해당 사용자는 로그인 할 수 없습니다 (공격자가 스로틀 링에도 불구하고 공격자가 봇넷을 계속 실행 한 경우 시간이 걸릴 수 있음).
봇이 여전히 망치로 쳐져있는 동안에도이 작은 부분의 사용자가 그렇지 않으면 봉인 된 고양이 문을 쥐어 짜기 위해 CAPTCHA와 함께 '백업'로그인 양식을 사용합니다. 따라서 "죄송하지만 현재이 IP 주소에서 로그인 할 수 없습니다"메시지가 표시되면 " 보안 백업 로그인-휴먼 만 ( 봇 : 거짓말 없음 ) " 이라는 링크를 포함 시키십시오 . 농담을 제외하고는 해당 링크를 클릭하면 사이트 전체 조절을 우회하는 reCAPTCHA 인증 로그인 양식을 제공합니다. 그들은 인간과 올바른 로그인 + 암호를 알고 (및 보안 문자를 읽을 수있는) 경우 그 방법은, 그들은 것입니다 결코 그들이 알 수없는 호스트에서 연결하고 자동 로그인 쿠키를 사용하지 않는 경우에도 서비스가 거부되지 않습니다.
아, 그리고 간단히 설명하자면 : 보안 문자가 일반적으로 악하다고 생각하기 때문에 '백업'로그인 옵션은 조절이 활성화 된 동안에 만 나타납니다 .
이와 같은 지속적인 공격이 여전히 DoS 공격의 형태를 구성한다는 것을 부인할 수는 없지만 설명 된 시스템을 사용하면 사용자의 작은 하위 집합 인 것으로 의심되는 대상, 즉 "나를 기억하십시오"쿠키가 발생하고 공격이 진행되는 동안 로그인이 발생하며 일반적인 IP 중 하나에서 로그인하지 않으며 보안 문자를 읽을 수없는 사용자입니다. 봇 공격 중에는 해당 기준 (특히 봇 및 실제로 운이 좋지 않은 장애인)에 대해 모두 거부 할 수있는 사람 만 제외됩니다.
편집 : 실제로, 나는 '잠금'중에 보안 문자 문제가있는 사용자조차 통과 할 수있는 방법을 생각했습니다. 백업 보안 문자 로그인 대신 또는 보완으로 사용자에게 일회용 옵션을 제공합니다 , 사용자 별 잠금 코드를 자신의 이메일로 전송하여 제한을 우회하는 데 사용할 수 있습니다. 이것은 내 '불쾌'임계 값을 확실히 넘어서지 만 작은 사용자 하위 집합의 최후의 수단 으로 만 사용 되기 때문에 여전히 계정에서 잠긴 것이므로 허용됩니다.
(또한 여기에 설명 된 불쾌한 분산 버전보다 공격이 정교하지 않으면 이러한 일이 발생 하지 않습니다 . 공격이 단지 몇 개의 IP에서 발생하거나 몇 명의 사용자 이름 만 공격하는 경우 훨씬 일찍 차단됩니다. 사이트 전체에 영향 을 미치지 않음 )
그것이 그것이 소리이고 내가 놓친 훨씬 더 간단한 해결책이 없다는 것을 확신하면 이것이 바로 인증 라이브러리에서 구현할 대책입니다. 사실, 안보에는 잘못된 일을하는 미묘한 방법이 많이 있으며, 허위 가정이나 절망적으로 잘못된 논리를 만드는 것은 아닙니다. 따라서 모든 피드백, 비판 및 개선, 미묘한 부분 등은 높이 평가됩니다.