2009-10-26 3 views

답변

0

글쎄, 로그인 시도의 출처 IP를 알고 있다면 5 회 시도한 다음 5 분 동안 "쿨 - 오프 (cool-off)"기간 동안 IP를 대기 상태로 만들 수 있습니다. 5 분이 너무 짧다고 생각하면, 좀 더 적합 할 때까지 올려주세요 (24 시간이나 그 이상이 필요할 것으로 생각되면 더 높을 수 있습니다). botnet에 수십 개의 조정 노드가있는 경우에는이 기능이 제대로 작동하지 않을 수 있습니다.

1

하나의 접근법은 각 요청의 IP 주소 (또는 심지어 IP 주소의 첫 번째 3 옥텟)를 추적하고 IP에서 오는 요청에 대한 응답 (또는 심지어 삭제)에 상당한 시간을 추가하는 것입니다 마지막 y 분 내에 x 개 이상의 요청을 처리했습니다.

이것은 분산 공격에 비해 효과적이지 못하며 (또는 덜 효과적이지만) 비교적 간단한 implentation을 위해 꽤 잘 작동합니다.

강력한 보호를 위해 체계적으로 그러한 IP에 대한 액세스를 거부하여 위반 IP (IP 또는 IP의 첫 번째 3 옥텟, 지난 2 분 이내에 6 번의 불량 시도를 제출 한 것)를 블랙리스트에 추가 할 수 있습니다 예를 들어 15 분 동안

18

brute force cracking을 방지하는 것은 처음에는 더 까다로울 수 있습니다. 해결책은 컨트롤을 결합하는 것입니다. 하나의 컨트롤만으로는 겨자를자를 수 없습니다. 목표를 기억하십시오. 무차별 공격을 효과가없는 지점으로 늦추거나 원하는 공격을 감지하고 조치를 취할 수 있습니다. 두 번째 옵션은 일반적으로 첫 번째 옵션보다 효과적입니다.

captcha를 사용할 수 있지만 (현재는 널리 사용되는 기술 임) captcha는 종종 자동으로 읽을 수 있으며 컴퓨터로 읽을 수없는 경우 저급 근로자에게 지불하거나 "자유로운"포르노를 보호하기 위하여 captcha를 사용해서 (두 기술 다 사용되었다).

비밀 값을 사용하는 다른 사람들의 조언은 실제로 도움이되지 않습니다. 공격자는 단순히 HTML을 구문 분석하여 비밀 값을 찾아 게시에 포함시켜야합니다. 이것은 자동화하기가 매우 쉽기 때문에 좋은 방어가 아닙니다. 아, 그리고 가치가 쉽게 예측할 수있는 것으로 밝혀지면 (가난하거나 부러진 PRNG 또는 나쁜 씨앗을 사용하여) 다시 크릭을 올릴 수 있습니다.

NAT를 지원하지 않는 경우에만 IP 주소를 추적해도 괜찮습니다. NAT를 사용하면 유효한 사용자가 중복 된 것으로 보입니다. 그리고 공격자가 다른 시스템을 가장 할 수 있다는 것을 기억하십시오. 단일 공격 시스템은 다른 IP 주소를 사용할 수 있으며 해당 시스템에 대한 트래픽도 차단할 수 있습니다 (ARP 중독이 이에 대한 하나의 좋은 메커니즘 임).

지정된 시간 동안 (예 : 1 시간 내에 3 회) 최대 실패 횟수 제한을 사용할 수 있습니다. 이렇게하면 공격자가 느려지지만 반드시 중지하지는 않습니다. 자동화 된 잠금 해제를 포함 할 수 있지만 수학을 수행하고 잠금 해제 시간이 실제로 유용해야합니다.

지수 백 오프는 또 다른 유용한 메커니즘입니다. 이것은 공격자가 서버로 돌아갈 필요가없는 세션과 IP 주소 (NAT로 중단 된 상태) 또는 계정 (여러 계정에서 무차별 공격을 설명하지 않음)에 연결할 수 있습니다. .

다른 방어 기능을 유용하게 사용하려면 강력한 암호가 있어야합니다. 추측하기 쉬운 암호 (사전에있는 암호는 짧지 만 복잡합니까?) 공격이 성공합니다.최소한의 암호 강도 요구 사항과 "불법 암호"사전 (해당 사전에 대한 일반적인 문자 대체와 함께)을 구현하는 것이 좋습니다. 또는 OATH, 인증서 로그인 또는 하드웨어 토큰 (예 : RSA의 SecurID)과 같은 시스템을 사용할 수도 있습니다.

저는 클라이언트 퍼즐에 대해 이야기 한 것은 Burt Kaliski였습니다. 기본적으로, 당신은 클라이언트에게 서버에 대해 쉬운 도전을 제공하지만 클라이언트에게는 어렵습니다. 클라이언트는 자체 리소스를 낭비하여 DoSes 자체를 해결할 수 있습니다. 여기서 어려움은 퍼즐의 올바른 복잡성을 결정하는 것입니다. 예를 들어 많은 수를 고려할 수 있습니다. 그것이 무엇이든, 가능한 가장 효율적인 알고리즘을 가정해야하며, 다른 컴퓨터에서 다른 브라우저의 다른 성능을 처리 할 수 ​​있어야하고 (잠재적으로 느린) 브라우저 외부에서 자동 공격을 느리게 할 수 있어야합니다. 귀하의 자바 스크립트). JavaScript로 솔루션을 구현해야한다고 언급 했습니까?

하지만 여전히 여러 계정에서 작동하는 공격이 계속됩니다. IP 주소를 추적 할 수 없다면 공개적으로 사용되는 컨트롤에 대해서는 잘 알지 못합니다.

그런 다음 사용자 이름을 보호해야합니다. 사용자 이름을 알지 못하는 공격자 (사용자 이름이 유효한 시점을 알려주지 않는 시스템이 필요함)는 사용자 이름을 쉽게 확인한 다음 암호를 공격하는 대신 사용자 이름과 암호를 모두 알아야합니다.

그리고 오류 메시지와 서버 타이밍이 올바른 암호를 알려주지 않도록주의해야합니다.

그리고 오류 메시지를 처리 ​​할 때 비밀번호 복구 메커니즘으로 아무 것도주지 말아야합니다. 달리 좋은 시스템이라 할지라도, 암호 복구는 모든 것을 날려 버릴 수 있습니다.

하지만 공격은 궁극적으로 서버의 성능에 따라 달라집니다. 단순히 인증을위한 매우 느린 메커니즘을 구현할 수도 있습니다 (유효한 인증과 무효 인증 모두에 대해 느려야 함). 온라인 공격은 서버가 요청을 처리 할 수있는 것보다 빠르지 않습니다.

그런 다음 무차별 공격을 탐지해야 시스템에서 감사 추적 기능이 필요합니다. 그러나 너무 많은 로그 메시지를 기록하지 않도록주의하거나 디스크 공간을 가득 채워 서버를 쉽게 사용할 수있는 방법을 열어 두어야합니다. syslog의 "이전 메시지가 1000 번 수신되었습니다"와 같은 메시지가 유용 할 것입니다.

일단 설계가 끝나면 다시 구현을 완료하면 전체 시스템과 시스템의 모든 기능을 검사하고 현재 설정과 서버의 기능을 수학적으로 모델링해야합니다. (a) 단일 계정 및 (b) 모든 계정 (계정 별 제어를 피하기 위해 여러 계정을 무차별 적으로 강제 실행)을 결정할 수 있습니다.

관련 문제