문제

먼저 약간의 배경:이 비밀은 없는 나를 구현하 auth+auth 시스템에 대한 CodeIgniter,그리고 지금까지 나는 우승(말하).로 예쁜 아닌 사소한 도전(가장 auth 라이브러리를 놓치는 완전히지만,나는 주장에 제대로 처리):을 처리하는 방법을 지능적으로 함 대규모,배포,변수 사용자 이름 brute-force attacks.

나는 모든 일반적인 트:

  1. 제한의 실패 당 IP/스 고 부정 범죄자에 액세스(예:Fail2Ban)-는 더 이상 작동 이후 봇넷 성장했 스마
  2. 결합으로 블랙리스트의 알려진'나쁜'IPs/hosts (예:DenyHosts)-에 의존하는 봇넷지#1, 그들은 점점 더지
  3. IP/호스트 주소록 과 함께 전통적인 인증(슬프게도 쓸모없는 동적 IP 사용자와 높은 변동에 대부분의 웹 사이트)
  4. 설정 사이트 전체 제한 에#의 실패에는 분 N/시간 기준 및 제한(중단)모든 로그인을 시도 그 후의 수에 대한 분/시간(하는 문제 DoS 당신을 공격하게 됩 botnet 아동의 놀이)
  5. 필수 디지털 서명 (공개 키 인증서)또는 RSA 토큰 하드웨어 모든 사용자를 위한 없이 로그인/암호 옵션을(문제 없이 견고한 솔루션이지만,실제적인 폐쇄에 전념,서비스)
  6. 강제 적용 매우 강력한 암호 계획 (예:>25 말도 캐릭터로 기호,또 다시 너무 허무에 대한 캐주얼의 사용자)
  7. 그리고 마지막으로, Captcha (일할 수 있는 대부분의 경우,그러나 있는가에 대한 사용자와 거의 쓸모없결정하고,풍부 공격자)

이제 이들은 단지 이론으로 실행할 수 있는 아이디어.가 쓰레기의 아이디어는 타 사이트의 넓은 열기(예:을 사소한 DoS 공격).내가 무엇을 원하는 무언가를 더합니다.고 더 나은,나는 의미한다:

  • 그것은 보안(+)에 대한 DoS 및 brute-force attacks,지를 소개하는 새로운 취약점을 허용될 수 있습니다 약간 은밀한 로봇을 계속하고 운영되는 레이더

  • 그것은 자동화되어 있습니다.필요한 경우 연결을 확인하는 각 로그인 또는 모니터에 의심스러운 활동이다,그것은 작동하지 않을 실시 시나리오

  • 그것은 가능한 일반 웹 사용(ie.높은 이탈,높은 볼륨 및 등록을 수행할 수 있는 프로그래머가 아닌)

  • 할 수 없을 방해 사용자 경험을 지점에 일반 사용자는 짜증 얻을 것이다거나 좌절(과 잠재적으로 포기 사이트)

  • 그것은 수 없는 새끼 고양이 포함되지 않는 한, 정말 정말 안전한 새끼 고양이

(+) 해'안전',나는 의미에서도로 보안적으로 편집하는 사용자의 능력을 계속 자신의 비밀번호 비밀

그래서-그것을 듣자! 어떻게 당신이 그것을?당신의 최고의-실습는 언급하지 않은(아시기 바랍 당신이 그렇게 말하)?나는 나의 아이디어가 내 자신의(조합한 아이디어에서 3 및 4)지만,가 진정한 전문가들은 말하기 곤란 자신;-)

도움이 되었습니까?

해결책

모든 권리,충분한 경우;여기에 나는 지금까지

(죄송합니다,오후 앞서 있습니다.용감,친구,여행을 가치가있을 것입니다)

결합하는 방법을 3 과 4 에서 원래 포스팅의 일종으로'퍼지'또는 동적 허용,그리고-그리고 여기에 속이 지 않을 차단하는 비 허용 IPs,다만 제한이 그들을 지옥에.

이 측정 것을 막기 위해 이것을 아주 특정 유형의 공격합니다.실제로,과정,그것은 작품과 함께 모범 사례에 접근하 auth:고정 사용자 이름은 제한,IP 한 제한,코드 적용 강력한 암호 정책되지 않도록 지정하려면 쿠키를 로그인 해싱하는 모든 비밀번호 등가물,저장하기 전에는 결코 사용하여 보안 문제,등등.

가정을 공격에 대한 시나리오

면 공격자 대상 변수 사용자 이름,우리의 이름은 제한되지 않 불.면 공격자는 봇넷을 사용하거나 액세스할 수 있는 큰 IP 범위,우리의 제한 IP 은 힘이다.면 공격자 사전 까 userlist(일반적으로 가능한에서 열등록 웹서비스),우리가 할 수 없을 감지하는 지속적인 공격의 수에 따라'가지 않는다'오류가 있습니다.그리고 우리는 적용을 제한하는 시스템(모든 사용자 이름,모든 IPs)제한은,어떤 공격이 DoS 우리 사이트 전체의 내구를 위해 플러스 공격의 제한 기간입니다.

그래서 우리는 뭔가를 해야 합니다.

첫 번째 부분의 보안 대책:화

우리가 무엇을 할 수 있습은 상당히 확,는 공격할 수 없을 감지하는 동적으로 위조의 IP 주소가 몇 천명의 사용자는(+).는 가능 합니다.다른 말로:각 사용자를 위해,우리는 우리의 목록을 저장(해시)IPs 에서 사용자가 이전에(최근)에 기록됩니다.

따라서,우리의 허 방식의 기능을 잠겨 있는'정문'사용자가 연결되어야 중 하나에서 그의 인식'좋은'IPs 에서 로그인하기 위해서다.무작위 공격에'정문 될 수 있을 것이 거의 불가능(+).

(+)지 않으면 공격자는'소유하는'하나의 서버,우리의 모든 사용자,또는 자체 연결-및 이러한 경우에,우리는 더 이상'인증'문제,우리는 우리 정품 프랜차이즈 크기의 풀서 플러그 LINKEDIN 황

두 번째 부분의 보안 대책:시스템 전체 제한 의 알 수 없는 IPs

을 만들기 위해서 허용을 작업에 대한 열등록 웹 서비스 사용자 컴퓨터 스위치에 자주 또는 연결에서 동적 IP 주소,우리는 계속해야양한 문'열린 사용자의 연결에서 인식할 수 없는 IPs.트릭을 디자인하는 문 봇넷 박히,그리고 합법적 사용자에게 방해가 가능한 한 작은.

내 계획,방법은 다음과 같습니다 설정 제한 최대 로그인 시도가 실패하여 승인되지 않은 Ip,말씀,3 시간 기준(수명을 사용하는 이상 짧은 기간의 종류에 따라 서비스),그리고 그러한 제한을 만들기 글로벌, ie.모든 사용자 계정이 있습니다.

어(1-2 분 간의 시)무력을 것이 발견되고 좌절을 사용하여 빠르고 효율적으로 이 방법입니다.물론, 정말로 느린 무차별 수 있는 여전히 주목하지만,너무 느린 속도로 패배를 목적의 공격.

내가 달성을 기대하는 이 제한 메커니즘이 있는 경우에는 최대 한도에 도달,우리의'고양이 문'태세를 폐쇄하는 동안,하지만 우리의 문 앞에 열려 합법적 사용자에 의하여 연결하는 일반적인 수단:

  • 중 하나에 의해 연결 중 하나에서 자신의 인식 IPs
  • 를 사용하거나 영구적인 쿠키(에서 어디서나)

의 합법적 사용자에 영향을 받는 공격하는 동안-ie.는 동안 제한이 활성화되었을 것이라고 것이 없는 사용자가 영구적인 쿠키는 사람이었에서 로그인하 있는 알려지지 않은 장소와 함께 또는 동적 IP.이러한 사용자 수 없는 것이 로그인할 때까지 제한을 입었(수 있는 시간이 걸릴 경우,침입자 보관하는 그의 봇넷의 실행에도 불구하고 제한).

을 허용하는이 작은 사용자 하위 집합을 짜기를 통해 그렇지 않으면 밀봉한 고문,심지어는 동안 로봇 여전히 망치는 거리에,나는 고용'백업'로그인 폼 보안 문자와 함께.도록,표시할 때"죄송합니다,하지만 당신은 확인할 수 있게 되었습니다 이것에서 IP 주소는 순간에"메시지에 대한 링크가 포함되"라는안전한 백업 로그인이 인간만(로봇:없는 거짓말)".농담 고객께할 때,그들은 해당 링크를 클릭하고,그들에게 reCAPTCHA-인증 로그인 형태를 우회하는 사이트의 넓은 제한이 적용됩니다.는 방법으로는 경우에,그들은 인간과 알고 올바른 로그인+비밀번호(있을 읽을 수 있 Captcha),그들 것이다 될 서비스를 거부하는 경우에도,그들은 연결하는 알 수 없는 호스트를 사용하지 않고 자동 로그인 쿠키입니다.

아,그리고 그냥을 명확히:이후 나는 고려한 보안문자는 일반적으로,악마'백업'로그인 옵션 는 동안 제한 활동.

부인할 수 없는 지속적인 공격이 좋아하는 아직도 구성하는 형태의 DoS 공격하지만,설명하는 시스템이 장소에서,그것은 단지 어떤 영향을 미칠 생각을 작은 하위 사용자,즉 사용하지 않는 사람들은"저를 기억"쿠키고하는 일에 로그인하는 동안 공격은 일어나지 않는 로그인에서 그들의 일반적인 IPs 고 읽을 수 없습니다 Captcha.만 사람들은 말할 수 없음을 사람들의 모든 기준을-특히 로봇과 정말 운이 좋 장애인-될 것입니다 멀리하는 동안 로봇 공격합니다.

편집: 엄선한 고화질 이미 생각하자 심지어는 보안 문자 도전하는 사용자를 통해 전달하는 동안'잠금':대신하거나 보완하고,백업 CAPTCHA 로그인,사용자에게 제공하는 옵션이 있는 단일 사용하여,사용자는 특정 코드를 잠금 보내신 이메일로,그는 사용할 수 있습니다를 우회하는 스로틀을 방지할 수 있습니다.이것은 확실히 십자가는 나의'두통'임계지만,이렇게 단으로 사용 마지막 리조트 한이 작은 사용자 하위 집합 이후,그것은 여전히 비트이 잠겨 당신의 계정을 것이 허용됩니다.

(또한,note 없음 의 이런 경우에는 공격은 모든 적은 정교한 것보다 불쾌한 분산 버전이 나는 여기에 설명되어 있습니다.는 경우 공격에서 나오는 단지 몇 IPs 또는 유일한 치는 몇 가지 사용자 이름,그것은 방해 훨씬 이전에,그와 함께 no 사이트 결과)


그래서,그는 대책이 나는 것을 구현에 내 auth 러면 저는 그것의 소리 없다는 훨씬 더 간단한 솔루션을 내 놓쳤다는 뜻입니다.사실 이렇게 많은 미묘한 방법으로 할 일이 잘못에서 보안,그리고 나는 위 만드는 잘못된 가정이나 절망적으로 흠이 있는 논리입니다.그러므로 모든 의견을 비판하고 개선,미묘 등입니다.매우 감사합니다.

다른 팁

몇 가지 간단한 단계 :

특정 공통 사용자 이름을 블랙리스트하고 허니팟으로 사용하십시오. 관리자, 손님 등 ... 다른 사람 이이 이름으로 계정을 만들지 못하게하므로 누군가가 로그인하려고하면 누군가가해야 할 일을하는 사람이라는 것을 알 수 있습니다.

사이트에 실질적인 전원이있는 사람에게는 안전한 비밀번호가 있는지 확인하십시오. 문자, 숫자 및 기호가 혼합 된 더 긴 암호를 갖도록 관리자/ 중재자가 필요합니다. 설명을 통해 일반 사용자의 사소한 간단한 비밀번호를 거부하십시오.

당신이 할 수있는 가장 간단한 일 중 하나는 누군가가 자신의 계정에 로그인하려고 할 때 사람들에게 말하고 사건이 아닌 경우 사건을보고하는 링크를 제공하는 것입니다. "누군가가 수요일 오전 4시 20 분에 계정에 로그인하려고 시도했을 때 간단한 메시지. 공격에 대한 통계를 유지할 수 있습니다. 사기 액세스가 갑자기 증가한 경우 모니터링 및 보안 조치를 강화할 수 있습니다.

는 경우 내가 이해하는 모의 무력을 공격으로 다음 중 하나 이상 사용자는 노력이 지속적으로.

두 가지 제안을 나는 생각하지 않는 본 적이 아직 여기:

  • 나는 항상 생각하는 표준 관행을 지체(두 번째 정도)이후는 각 잘못된 로그인한 모든 사용자.이 deters brute-force,모르겠지만 얼마나 하나의 초기 작동하지 않기 때문에 사용하고 사전에 공격하 베이 등이 있습니다.(사전 10,000 말==10,000 초==약 3 시간입니다.Hmm.은 충분하지 않습니다.)
  • 대신 사이트의 넓은 느리게,왜 사용자 이름 스로틀.스로틀이 점점 더 가혹 서로 잘못을 시도(최대 한,나도 그렇게 생각해 실제 사용자는 여전히 로그인)

편집:에 응하여 의견에 사용자 이름은 제한:이것은 특정 사용자 이름 스로틀에 관계없이 소스의 공격합니다.

사용자 이름은 제한된,심지어 조정된 사용자 이름을 공격(멀티 IP,단 하나 추측 당 IP,자 이름과 동일)는 것입니다.개별 사용자에 의해 보호되는 스로틀,경우에도 공격자는 무료로 다른 사용자/전달하는 동안 시간 제한.

에서 공격자의 관점,는 동안 시간 제한할 수 있습을 취할 수 있는 첫 번째 시간에 맞춰 100 암호,그리고 신속하게 발견 중 하나는 잘못된 암호를니다.당신이 될 수 있을 만들 수 있 50 번째는 추측에 대한 동일한 기간.

사용자 계정에서의 관점,그것은 여전히 동일한 수의 평균을 추측의 암호를 깨는 경우에도,추측은 오는 여러 소스에서.

에 대한 공격에서 최고의,그것은 동일한 노력을 끊 100 계정 것으로 1 계정이지만,때문에 당신이 제한이 사이트에서 넓은 기초할 수 있습 램프는 스로틀우게 됩니다.

추가정:

  • 검색 IPs 는 추측되는 여러 계좌-408 요청 시간 제한
  • 검색 IPs 는 추측되는 같은 계좌-408 요청 시간 제한 후 큰(100)수의 추측.

UI 아이디어(적합하지 않을 수 있습니다 이 상황에서),이는 또한 구체화상:

  • 는 경우에는 제어의 암호 설정,다음을 보여주는 사용자 어떻게 강한 자신의 비밀번호가 그들을 격려하는 데 하나입니다.
  • 는 경우에 당신은 당신의 통제에 로그인 페이지, 후에,작은(10)수의 추측의 단일 사용자 이름을 제공 CAPTCHA.

인증의 세 가지 요소가 있습니다.

  1. 사용자 알고 있습니다 뭔가 (즉, 암호)
  2. 사용자 가지다 뭔가 (예 : 키 FOB)
  3. 사용자 ~이다 뭔가 (즉, 망막 스캔)

일반적으로 웹 사이트는 정책 #1 만 시행합니다. 대부분의 은행조차도 정책 1을 시행합니다. 대신 2 단계 인증에 대한 "다른 것을 알고있는"접근 방식에 의존합니다. (예 : 사용자는 암호와 어머니의 처녀 이름을 알고 있습니다.) 가능하다면 두 번째 인증 요소를 추가하는 방법은 그리 어렵지 않습니다.

약 256 자의 무작위성을 생성 할 수 있다면 16 × 16 테이블로 구조화 한 다음 셀 A-14 테이블의 값을 제공하도록 요청할 수 있습니다. 사용자가 가입하거나 암호를 변경하면 테이블을 제공하고 인쇄하여 저장하도록 지시하십시오.

그 접근 방식의 어려움은 사용자가 암호를 잊어 버릴 때, 표준 "이 질문에 대답하고 새로운 비밀번호를 넣는 것"을 제공 할 수는 없다는 것입니다. 또한 이메일도 손상 될 수 있으므로 재설정하고 새 제품을 이메일로 보내지 못합니다. (참조 : makeuseof.com 및 도난 도메인).)

또 다른 아이디어 (새끼 고양이 포함)는 Boa가 Sitekey라고 부르는 것입니다 (나는 그들이 이름을 상표했다고 생각합니다). 간단히 말하면, 사용자가 등록 할 때 이미지를 업로드하고 로그인하려고 할 때 8 또는 15 (또는 그 이상) 임의의 이미지를 선택하도록 요청하십시오. 따라서 사용자가 새끼 고양이 사진을 업로드하면 이론적으로 다른 모든 새끼 고양이 (또는 꽃 또는 무엇이든)에서 어떤 사진인지 정확히 알고 있습니다. 이 접근법이 가지고있는 유일한 실질적인 빈번한 것은 중간의 공격입니다.

한 가지 더 아이디어 (새끼 고양이는 없음)는 사용자가 시스템에 액세스하는 IPS를 추적하고 추가 인증을 수행해야합니다 (CAPTCHA, 키티를 선택 하고이 테이블에서 키를 선택). '전에. 또한 Gmail과 유사하게 사용자가 최근 로그인 한 위치를 볼 수 있습니다.

편집, 새로운 아이디어 :

로그인 시도를 검증하는 또 다른 방법은 사용자가 로그인 페이지에서 왔는지 여부를 확인하는 것입니다. 참조기는 쉽게 위조 될 수 있으므로 확인할 수 없습니다. 필요한 것은 사용자가 로그인 페이지를 볼 때 _session var에서 키를 설정 한 다음 로그인 정보를 제출할 때 키가 있는지 확인하는 것입니다. 로그인 페이지에서 BOT가 제출되지 않으면 로그인 할 수 없습니다. 또한 쿠키를 설정하는 데 사용하거나로드 된 후 양식에 정보를 추가하여 프로세스에 JavaScript를 포함하여이를 용이하게 할 수 있습니다. 또는 양식을 두 개의 다른 제출물로 나눌 수 있습니다 (예 : 사용자는 사용자 이름을 입력하고 제출 한 다음 새 페이지에서 암호를 입력하여 다시 제출하십시오.)

이 경우 열쇠가 가장 중요한 측면입니다. 이를 생성하는 일반적인 방법은 사용자 데이터, IP 및 제출 시간의 조합입니다.

이 문제에 대한 비용 편익 분석을 수행했는지 물어봐야합니다. 많은 암호를 추측하기에 충분한 웹 존재가있는 공격자로부터 자신을 보호하려고하는 것처럼 들립니다. 그런 종류의 공격 비용은 얼마입니까? 보호하려는 계정의 가치보다 더 비쌉니까? 당신이 가진 것을 얼마나 원하는 가간 봇넷은 몇 개입니까?

대답은 아니오 일 수 있습니다. 그러나 그렇다면, 당신이 일종의 보안 전문가로부터 도움을 받기를 바랍니다. 프로그래밍 기술 (및 stackoverflow score)은 보안 노하우와 밀접한 관련이 없습니다.

나는 이전에 매우 비슷한 질문에 대답했습니다. PHP에서 사용자 로그인 시도를 스로틀하려면 어떻게해야합니까?. 많은 사람들이 실제 코드를 보는 데 정보가 있고 유용하다고 생각하기 때문에 제안 된 솔루션을 반복 할 것입니다. 요즘 볼트 차 버스터에서 사용되는 정확한 알고리즘으로 인해 보안 문자를 사용하는 것이 가장 좋은 솔루션이 아닐 수도 있습니다.

단순히 단일 IP 또는 사용자 이름으로 스로틀링을 체인하여 DOS 공격을 방지 할 수는 없습니다. 지옥, 당신은이 방법을 사용하여 빠른 로그인 시도를 방해 할 수 없습니다.

왜요? 공격은 여러 IP와 사용자가 스로틀 시도를 우회하기 위해 여러 IP와 사용자 계정에 걸쳐있을 수 있기 때문입니다.

나는 다른 곳에서 게시 된 것을 보았습니다. 이상적으로 당신은 사이트에서 실패한 모든 로그인 시도를 추적하고 타임 스탬프와 연결해야한다는 것을 알았습니다.

CREATE TABLE failed_logins(
    id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(16) NOT NULL,
    ip_address INT(11) UNSIGNED NOT NULL,
    attempted DATETIME NOT NULL
) engine=InnoDB charset=UTF8;

에 따라 특정 지연을 결정하십시오 전반적인 주어진 시간에 실패한 로그인 수. 당신은 이것을 당신에서 가져온 통계 데이터를 기반으로해야합니다. failed_logins 테이블 시간이지 나면서 바뀌다 사용자 수와 비밀번호를 기억하고 입력 할 수있는 사용자 수를 기준으로합니다.


10 failed attempts = 1 second
20 failed attempts = 2 seconds
30 failed attempts = reCaptcha

모든 실패한 로그인 시도에서 테이블을 쿼리하십시오. 주어진 시간 동안 실패한 로그인 수를 찾으려고 15 분.


SELECT COUNT(1) AS failed FROM failed_logins WHERE attempted > DATE_SUB(NOW(), INTERVAL 15 minute);

주어진 기간 동안의 시도 횟수가 한계를 초과하는 경우, 주어진 기간 동안 실패한 시도의 수가 임계 값보다 작을 때까지 모든 사용자가 스로틀을 시행하거나 모든 사용자가 캡처 (즉, recaptcha)를 사용하도록 강제로 강제로 강제로 강제로 강제로 강제로 강제로 제한을합니다.

// array of throttling
$throttle = array(10 => 1, 20 => 2, 30 => 'recaptcha');

// assume query result of $sql is stored in $row
$sql = 'SELECT MAX(attempted) AS attempted FROM failed_logins';
$latest_attempt = (int) date('U', strtotime($row['attempted']));
// get the number of failed attempts
$sql = 'SELECT COUNT(1) AS failed FROM failed_logins WHERE attempted > DATE_SUB(NOW(), INTERVAL 15 minute)';
// assume the number of failed attempts was stored in $failed_attempts
krsort($throttle);
foreach ($throttle as $attempts => $delay) {
    if ($failed_attempts > $attempts) {
        // we need to throttle based on delay
        if (is_numeric($delay)) {
            $remaining_delay = time() - $latest_attempt - $delay;
            // output remaining delay
            echo 'You must wait ' . $remaining_delay . ' seconds before your next login attempt';
        } else {
            // code to display recaptcha on login form goes here
        }
        break;
    }
}

특정 임계 값에서 recaptcha를 사용하면 여러 전선의 공격이 최소화 정상적인 사이트 사용자는 합법적 인 실패 로그인 시도에 대한 상당한 지연을 경험하지 않을 것입니다. 보트 샤가 파열 될 수 있다고 이미 확장 되었기 때문에 나는 gaurantee 예방을 할 수 없습니다. 대체 솔루션, 아마도 "이 동물의 이름"의 변형이 있으며, 이는 대체물로 잘 작동 할 수 있습니다.

Jens의 체계를 의사 상태 전이 다이어그램/룰베이스로 요약합니다.

  1. 사용자 + 암호 -> 항목
  2. 사용자 +! 암호 -> 거부
  3. user + clady_ip (user) -> 정문, // never throttle
  4. user + unknown_ip (user) -> catflap
  5. (#Denied> n) Catflaps (사이트) -> 스로틀 catflaps (site) // slow the bots
  6. catflap + 스로틀 + 암호 + Captcha-> Entry // humans still welcome
  7. catflap + 스로틀 + 암호 +! captcha-> 거부 // a correct guess from a bot

관찰 :

  • 정문을 스로틀하지 마십시오. 엘본 주 경찰은 집에 컴퓨터를 가지고 있지만 심문 할 수는 없습니다. Brute Force는 컴퓨터의 실행 가능한 접근 방식입니다.
  • "잊어 버린 비밀번호"를 제공하는 경우? 링크, 이메일 계정은 공격 표면의 일부가됩니다.

이러한 관찰은 반대하려는 사람들에 대한 다른 유형의 공격을 다룹니다.

당신이 방어하려고하는 것 같습니다 분포 된 무차별 인력. 당신이 그것에 대해 할 수있는별로는 아닙니다. 우리는 PKI와 비밀번호 로그인을 사용하지 않습니다. 도움이되지만 고객이 가끔씩 워크 스테스팅을 할 수있는 경우에는 적용 할 수 없습니다.

면책 조항 : 저는 2 요인 회사에서 일하지만 연결하기 위해 여기에 있지 않습니다. 여기에 몇 가지 관찰이 있습니다.

쿠키는 XSS 및 브라우저 Vulns로 도난 당할 수 있습니다. 사용자는 일반적으로 브라우저를 변경하거나 쿠키를 청소합니다.

소스 IP 주소는 동시에 동적으로 가변적이며 스푸핑 가능합니다.

Captcha는 유용하지만 특정 인간을 인증하지는 않습니다.

여러 방법을 성공적으로 결합 할 수 있지만 좋은 맛은 확실히 순서입니다.

비밀번호 복잡성은 좋으며, 암호 기반은 중요한 엔트로피를 가진 암호에 크게 의존합니다. IMHO, 안전한 물리적 위치에 기록 된 강력한 암호는 메모리의 약한 암호보다 낫습니다. 사람들은 세 가지 웹 사이트의 비밀번호로 사용될 때 강아지 이름으로 효과적인 엔트로피를 파악하는 방법을 아는 것보다 종이 문서의 보안을 훨씬 더 잘 평가하는 방법을 알고 있습니다. 사용자에게 일회성 사용 패스 코드로 가득 찬 크거나 작은 페이지를 인쇄 할 수있는 기능을 고려하십시오.

"고등학교 마스코트는 무엇입니까?"와 같은 보안 질문은 대부분 "당신이 아는 것"의 또 다른 형태입니다. 대부분은 공개 영역에서 쉽게 추측 할 수 있거나 명백합니다.

당신이 언급했듯이, 뒤로 물러서서 실패한 로그인 시도는 무차별적인 공격을 방지하는 것과 계정 투약의 용이성 사이의 상충 관계입니다. 공격적인 잠금 정책은 비밀번호 엔트로피에 대한 신뢰 부족을 반영 할 수 있습니다.

나는 개인적으로 어쨌든 웹 사이트에서 비밀번호 만료를 시행하는 이점을 보지 못합니다. 공격자는 당신의 비밀번호를 한 번 받고, 그것을 변경하고 가능한 한 쉽게 해당 정책을 준수 할 수 있습니다. 아마도 한 가지 이점은 공격자가 계정 비밀번호를 변경하면 사용자가 더 빨리 알 수 있다는 것입니다. 공격자가 액세스하기 전에 사용자가 어떻게 든 통보 된 경우 더 나을 것입니다. "마지막 로그인 이후 실패한 시도"와 같은 메시지는 이와 관련하여 유용합니다.

최상의 보안은 첫 번째 인증의 두 번째 인증 요소에서 비롯됩니다. 당신이 말했듯이, "당신이 가진 것"의 하드웨어 토큰은 훌륭하지만 많은 사람들 (모두가 아님)은 분포와 관련된 실제 관리자 오버 헤드를 가지고 있습니다. 나는 웹 사이트에 좋은 생체 인식 "당신이있는 것"솔루션을 모른다. 일부 2 요인 솔루션은 OpenID 제공 업체와 함께 작동하며 일부는 PHP/PERL/PYTHON SDK를 가지고 있습니다.

내 가장 높은 추천은 단순히 당신이 사용자에게 정보를 제공하십시오 계정에 대한 잘못된 로그인 시도는 누군가가 실제로 누군가가 자신의 계정에 들어가려고한다는 증거가 제시되면 비밀번호의 강점을 훨씬 더 심각하게 받아 들일 것입니다.

나는 실제로 내 동생의 MySpace 계정을 해킹 한 누군가가 그를 설정하고 '이메일로 내 비밀번호를 재설정'기능을 사용했기 때문에 내 동생의 MySpace 계정을 해킹했습니다.

  1. 일반 비밀번호를 입력하기 전에 일회성 패스 워드를 요구하는 것은 어떻습니까? 그것은 누군가가 메인 비밀번호를 추측 할 수있는 많은 기회를 얻기 전에 공격하고 있다는 것이 매우 분명 할 것입니까?

  2. 로그인 실패의 글로벌 카운트/비율을 유지하십시오 - 이것은 공격의 지표입니다. 공격 중에 로그인 고장에 대해 더 엄격 해집니다.

나는 완벽한 답변이 있다고 생각하지 않지만 공격이 감지되면 로봇을 혼란스럽게하려고 노력하는 것에 기초하여 접근하는 경향이 있습니다.

내 마음의 꼭대기에서 :

대체 로그인 화면으로 전환하십시오. 실제로 나타나는 여러 사용자 이름과 암호 공백이 있지만 그중 하나만 올바른 위치에 있습니다. 필드 이름은입니다 무작위의-세션 키는 로그인 화면과 함께 전송되며 서버는 어떤 필드가 무엇인지 알아낼 수 있습니다. 성공하거나 실패한 그런 다음 버려지게되므로 재생 공격을 시도 할 수 없습니다. 비밀번호를 거부하면 새 세션 ID가 나타납니다.

잘못된 필드에 데이터와 함께 제출 된 모든 양식은 로봇에서 나온 것으로 가정됩니다. 로그인은 실패, 기간 및 IP가 조절되었습니다. 임의의 필드 이름이 합법적 인 필드 이름과 일치하지 않도록하여 암호를 기억하는 것을 사용하는 사람이 오도하지 않도록하십시오.

다음으로, 다른 종류의 보안관은 어떻습니까 : 인간에게 문제를 일으키지 않는 일련의 질문이 있습니다. 그러나 그들은입니다 아니다 무작위의. 공격이 시작되면 모든 사람에게 질문 #1이 주어집니다. 한 시간 후 질문 #1이 버려지는 것은 다시는 사용되지 않으며 모든 사람이 질문 #2 등을 얻습니다.

공격자는 질문의 일회용 특성 때문에 로봇에 데이터베이스를 다운로드하는 것을 조사 할 수 없습니다. 그는 한 시간 안에 봇넷에 새로운 지침을 보내야합니다.

몇몇 사람들은 보안관을 폴백 인간 메커니즘으로 포함 했으므로, 나는 Captcha의 효과에 대한 이전의 stackoverflow 질문과 스레드를 추가하고 있습니다.

Recaptcha는 금이 간 / 해킹 / OCR'D / 패배 / 부서 졌습니까?

Captcha를 사용하는 것은 당신의 스로틀 링 및 기타 제안의 개선을 제한하지는 않지만, Captcha를 낙하로 포함하는 답변 수는 보안을 위반하려는 사람들이 이용할 수있는 인간 기반 방법을 고려해야한다고 생각합니다.

사용자 비밀번호의 강도를 기반으로 스로틀을 할 수도 있습니다.

사용자가 암호를 등록하거나 변경하면 암호에 대한 강도 등급을 계산합니다.

"비밀번호"와 같은 것은 1 점수를 기록한 반면 "C6EQAPREPE7ET*AWR@CH"는 9 또는 10을 기록하고 스로틀링이 시작되는 데 더 오래 걸리는 점수가 높아질 수 있습니다.

이 질문을 할 때 일반적으로 들었던 첫 번째 대답은 포트를 변경하는 것이지만, 그것을 잊고 IPv4를 비활성화하는 것입니다. IPv6 네트워크의 클라이언트 만 허용하는 경우 더 이상 간단한 네트워크 스캔을 위해기도하지 않으며 공격자는 DNS 조회에 의지합니다. Apache (AAAA)/Sendmail (MX-> AAAA)과 같은 주소로 실행하지 마십시오. 영역이 Xferd가 될 수 없는지 확인하십시오. 다른 사람이 영역을 다운로드 할 수 있도록 기다리십니까?

봇에서 서버 설정 새 호스트 이름을 찾으면 호스트 이름에 횡설수설을 전제하고 주소를 변경하십시오. 봇 넷에 대한 이전 이름과 설정 ** Honeypot 이름을 타임 아웃으로 남겨 두십시오.

** 리버스 (PTR) 레코드 (IP6.ARPA에 따라)를 테스트하여 레코드 대 /4가없는 /4의 0에 사용할 수 있는지 확인하십시오. 즉, 일반적으로 IP6.arpa는 ~ 32 "를 가질 것입니다."S는 주소에 있지만 마지막 몇 번의 누락으로 시도하면 레코드가없는 네트워크 블록을 피할 수 있습니다. 더 나아가면 주소 공간의 많은 부분을 건너 뛰는 것이 가능해집니다.

최악의 경우 사용자는 IPv6 터널을 설정해야합니다. DMZ로 VPNING까지 가야하는 것과는 다릅니다. 왜 이것이 첫 번째 옵션이 아닌지 궁금합니다.

또한 Kerberos는 멋지지만 IMHO LDAP가 불타고 있습니다 (Nisplus의 기술적으로 무엇이 잘못 되었는가? Sun은 사용자가 LDAP를 원한다고 결정했고, 이로 인해 NIS+를 떨어 뜨 렸습니다). Kerberos는 LDAP 또는 NIS없이 잘 작동하며 호스트별로 사용자를 관리해야합니다. Kerberos를 사용하면 자동화되지 않은 경우 PKI를 쉽게 사용할 수 있습니다.

여기서 조금 늦었지만 어려운 사례를 가정 할 때, 공격자는 많은 임의의 IP, 임의의 사용자 이름 및 10,000 개의 가장 인기있는 목록에서 선택한 임의의 암호를 사용합니다.

특히 시스템에 많은 잘못된 암호 시도가 있다는 점에서 시스템이 공격을 받고있는 경우, 특히 비밀번호가 낮은 엔트로피 인 경우 부모의 이름이 무엇인지와 같은 보조 질문을하는 것입니다. . 공격자가 암호 'Password1'을 시도하는 백만 계정을 때리면 많은 기회가 있지만 이름을 올바르게 얻는 확률은 성공을 극적으로 줄일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top