차단 기능은 여전히 작동하고 있지만 완전히 작동하지는 않는 것 같습니다. 로그에서 기록에 대한 일반적인 일치 항목은 여전히 확인되지만 모든 조합에 대해서는 그렇지 않습니다. 해당 사용자는 오늘 동일한 차단된 Gmail 계정을 이용해 수백 개의 계정을 생성할 수 있었습니다.
그들이 사용하는 Gmail 마침표 변형은 마침표가 6개에서 14개 사이이며, 이메일 길이는 19자(@ 이전)입니다. + 변형은 사용하지 않고 있습니다(또는 해당 변형은 모두 성공적으로 차단되고 있습니다).
관련이 있을 수 있는 점으로, 스팸머 이메일의 Levenshtein 거리를 3으로 설정해 두었습니다(기본값은 2). Discourse가 최근 2.6.x에서 2.7.1 안정판으로 업데이트되었습니다.
그렇다면 sara.hanson@이 끔찍한 일을 저질러서 sarah.anson@이 그 여파에 휘말리게 된다면 어떻게 될까요? joe98@과 joe99@를 동일한 이메일 주소로 볼 수 있는지도 확신이 서지 않습니다. 아마도 이는 커뮤니티 구성원의 특성 및 매칭 과정에서 사용되는 수동 판단의 수준에 따라 달라질 것입니다.
“플러스 어드레싱”(Plus addressing)은 적어도 같은 이메일 주소의 메일박스에 속한 폴더를 가리킵니다(“+” 기호 앞의 모든 부분이 동일하다는 전제 하에).
IP 범위 기반의 스팸 등록을 차단하는 것은 어떨까요? 이 모든 것은 스팸 공격자의 정교한 정도에 달려 있습니다. Let’s Encrypt 커뮤니티에서 이곳으로 넘어온 입장에서, 거기에 꽤 광범위한 스팸 공격 시도가 자세히 기록된 추적 스레드가 있습니다. 심지어 몇 주 후에 스팸을 보내기 전에 실제 기술적 도움을 제공한 사람들도 있었습니다.
우리가 내린 결론은 “결국 도달한 상태가 마음에 들지 않아요. 이건 지원(서포트)의 악몽이 될 테고, 영원히 사라지지 않을 테니까요 :).” 였던 것 같습니다.
사이트가 스팸 벡터(spam vector)라면 "내 모든 이메일을 canonical로 처리해 줘"라고 말할 수 있게 해야 한다고 생각합니다. 단점은 상관없습니다.
즉, 이 두 이메일 모두 samsam@somewhere.com을 canonical로 가집니다.
sam.sam@somewhere.com
samsam+11@somewhere.com
sam.sam@somewhere.com이 등록되어 있다면, samsam+11@somewhere.com은 더 이상 등록할 수 없게 됩니다.
이것이 제 원래 수정안이었지만, 결국 되돌렸습니다(다만 구글의 경우 특수 처리했는데, 돌이켜 보면 그 정도로는 부족했습니다).
새로운 사이트 설정을 추가하여 이 문제를 뒤로 넘기는 것이 좋다고 생각합니다:
“OMG, 나는 거대한 스팸 벡터야, 최고 수준의 방호 모드(메가 틴포일 모드)를 켜 줘”
버그와 관련하여, 차단 조치를 지연시키면 쉽게 우회될 수 있습니다. 현재는 100% 반응형(reactive) 프로세스입니다.
즉, 이 동작은 정상적으로 작동합니다(@markersocial 님, 콘솔에서 테스트해 보셔도 됩니다):
./launcher enter app
rails c
ScreenedEmail.block('examplemailaddress@gmail.com')
ScreenedEmail.should_block?('e.x.a.m.pl.e.m.ai.lad.dre.ss@gmail.com')
# true
문제는 이겁니다:
# 수백 개의 계정이 이미 생성된 상태
ScreenedEmail.block('examplemailaddress@gmail.com')
# 수백 개의 계정은 여전히 존재
저는 원래 수정안이 완벽하게 작동했으며 gmail 관련 문제를 해결했음을 확인합니다. 이 선택적 모드가 복원된다면 정말 큰 도움이 될 것입니다.
스패머들은 끊임없이 새로운 기법을 배우고 있으며, Facebook, Instagram, Twitter 같은 대형 플랫폼조차도 여전히 성공적으로 속이고 있습니다. 이로 인해 대부분의 다른 사이트들은 '이지 모드’가 됩니다. 스팸 발송은 그들에게 전일제 업무가 되므로, 본질적으로 다음과 같은 상황이 됩니다:
활용 가능하고 (필요한 자원 < 얻는 수익)이면, 반드시 악용될 것이다.
그들은 사실상 모든 조치를 우회할 수 있으며, 유일한 희망은 그렇게 하는 비용을 수익보다 높게 만들어 경제적 이득이 없도록 하는 것입니다.
(탐지 및 mod/admin이 정통 gmail을 사후적으로 차단하고 수동으로 게시물을 삭제하기 전에) 거의 무제한의 이메일/계정으로 대량 스팸을 발송할 수 있는 것은 상당히 비용 효율적입니다. 24시간 365일 운영되는 moderator 팀이 없다면 더욱 그렇습니다.
반스팸 조치를 우회하는 비용은 계속 감소하고 있습니다. 예를 들어 4/5G 프록시를 사용하면 월 $30~$50 정도면 사실상 무제한의 실제 모바일 IP에 접근할 수 있습니다. 이 IP들은 합법적인 ISP/ASN에서 자동으로/수동으로 로테이션되며, 주요 ISP의 합법적인 사용자들(도시/주 전체)이 공유합니다. 4/5G IP는 많은 사용자가 동시에 공유합니다.
이러한 ISP/ASN 또는 IP를 차단하는 것은 적합하지 않습니다(verizon, at&t 등을 사용하는 모든 사람을 차단할 수는 없죠). 그들은 일반적으로 IP를 한 번 사용하고 버립니다. 이렇게 개별 IP를 차단하면 해당 IP 주소를 랜덤으로 공유하는 합법적인 사용자들도 차단됩니다. IP 차단은 점점 레거시 관행이 되고 있습니다(알려진 호스팅 회사의 ASN 제외). 이 포럼에서 빙산의 일각을 볼 수 있습니다:
스패머들은 완전히 또는 부분적으로 수동으로 제작된 봇과 수동 스팸의 혼합체라고 생각합니다. Discourse가 더 많은 시장 점유율을 차지하고 있으며(분명히 환상적으로 성장하고 있으므로), 상용 봇의 표적이 되지 않는다면 놀랄 것입니다.
Xrumer가 최신 reCAPTCHA 버전을 지원하기 시작할 때, 저는 레거시 포럼의 대부분의 웹마스터들이 스팸이 크게 증가하는 것을 목격할 것이라고 생각합니다. 스팸 발송 비용이 바닥에 도달했기 때문입니다(이미 1,000건당 매우 저렴한 캡차 해결 API를 더 이상 사용할 필요가 없게 됨):
http://botmasterlabs.net/buy1/
사람들은 이미 Xrumer를 사용하여 기본적으로 모든 플랫폼을 지원하는 자체 플러그인/스크립트를 만들 수 있습니다. 하지만 언젠가 Discourse를 기본적으로 지원하게 된다면:
합법적인 gmail이 덜 차단되지만, 여전히 이메일에 1개 이상의 마침표가 있는 합법적인 gmail 사용자를 차단합니다.
스패머들은 단일 30자 gmail로 훨씬 더 많은 변형을 만들 수 있습니다. 약 842개의 조합 정도라고 생각합니다.
차단 생성 날짜가 2월 1일인 것을 확인했으며, 차단이 활성화된 후에도 새 계정이 유입되었음을 확인합니다. 저는 어제 새로운 계정이 생성되는 것을 지켜보았으며, 차단 규칙의 새로운 최근 매칭 사례와 동일한 이메일(마침표 조합)을 사용하여 새 등록이 들어오는 두 가지 경우를 모두 확인했습니다.
저는 밤새 등록을 비활성화했고, 오늘 아침에 다시 활성화했습니다. 오늘까지 해당 gmail 주소의 순열을 사용하여 104개의 새 계정을 생성했으며, 계속해서 더 많은 등록이 이루어지고 있습니다. 이 계정들의 이메일에서 마침표를 제거하면 Screened Emails 차단 기록과 정확히 일치함을 확인했습니다.
설명된 대로 rails c에서 차단을 테스트해 보았는데, 여기서 약간 이상한 점이 있습니다.
일부 기록은 의도대로 'true’를 반환하는 반면, 테스트한 이메일이 정통 차단 이메일과 정확히 일치하더라도 일부는 'false’를 반환하는 것 같습니다. 'true’를 반환하는 기록의 경우, 테스트한 모든 변형에 대해 'true’를 반환하며 의도대로 완전히 작동했습니다. 하지만 'false’를 반환하는 이메일의 경우, 테스트한 모든 변형도 'false’를 반환했습니다.
이메일 길이 (@ 이전)
문자와 숫자를 포함하는 이메일
매칭 횟수 (차단된 횟수)
매칭 날짜
차단 생성 날짜와 상관관계가 있는 것 같습니다. 오래된 기록일수록 작동할 가능성이 낮습니다(false 반환). 9일 전에 생성된 기록은 true/false 혼합을 반환했으며, 지금까지 테스트한 그보다 이전(1시간~8일)에 생성된 모든 기록은 true를 반환하고 있습니다.
‘max age unmatched emails’ 옵션과 관련이 있을 수도 있습니다. 이 옵션은 다소 새로운 것 같으며, 기본값인 365일로 설정되어 있습니다.