‘프러스트레이션 루프’
(herman.bearblog.dev)- 무료 블로그 플랫폼 Bear는 낮은 가입 장벽 때문에 백링크 농장, 피싱, 불법 약물 판매, 온라인 카지노 광고, 크립토 홍보 스팸의 표적이 됨
- no-index·no-follow와 피드 제외로 노출은 줄일 수 있었지만, 스팸 콘텐츠가 플랫폼에 올라오는 것 자체는 막기 어려웠음
- Akismet 기반 차단은 효과가 있었지만, 차단 메시지가 스패머에게 우회 단서를 주는 문제가 생김
- ‘프러스트레이션 루프’는 차단 대신 양식 초기화, 붙여넣기 비활성화, 포커스 이동, 반복 오류로 스패머의 시간을 낭비하게 만드는 방식임
- 적용 후 신규 블로그의 스팸 비율이 약 30%에서 5% 미만으로 줄었고, 3개월 동안 문제를 신고한 사용자는 온라인 카지노 광고자 1명뿐이었음
Bear가 스팸 표적이 된 이유
- Bear는 무료로 사용할 수 있어 가입이 쉽고, 그만큼 플랫폼을 악용하려는 스패머가 몰림
- 스팸은 단순 봇 트래픽보다 Fiverr에서 “100개 백링크”를 구매하는 식의 스팸 농장에 가까움
- 수백 명의 저임금 작업자가 웹 곳곳에 콘텐츠를 제출함
- 목적은 SEO 순위 상승이지만, 실제 효과는 없다고 봄
- Bear는 스팸이 게시되더라도 더 넓은 인터넷에 노출되지 않도록 기본 방어선을 둠
- 검토되지 않은 블로그에는 no-index와 no-follow 태그가 붙음
- 사이트맵과 디스커버리 피드에도 나타나지 않음
- 사용자가 검토 요청을 선택하면 이 상태를 해제할 수 있음
- 다만 노출을 막는 것과 별개로, 스팸 콘텐츠가 플랫폼 안에 존재하는 상황 자체를 줄이고 싶어함
차단보다 우회를 늦추는 방식
- 스팸 탐지에는 WordPress 계열 도구인 Akismet을 사용함
- GPT4로 자체 탐지 시스템을 만들려 했지만, Akismet보다 정확도가 낮고 비용도 더 비쌌음
- 이후 Akismet 구독으로 전환함
- 가입 시점 차단은 일부 효과가 있었지만, 시간이 지나며 스패머가 대응 방식을 학습함
- 차단은 어떤 콘텐츠가 걸리는지 알려주는 신호가 됨
- 스패머는 합법적인 블로그처럼 보인 뒤 규제가 약한 영역에 스팸을 올림
- 결국 수동으로 찾아내고 표시해야 했음
- IP 차단도 실효성이 낮음
- 스패머가 Nord 같은 상용 VPN을 사용함
- Nord VPN만 해도 전 세계에 수백 개 서버가 있어 IP 차단으로는 거의 막기 어려움
- 특정 IP의 게시를 막으면 정상 사용자까지 차단될 수 있음
‘프러스트레이션 루프’의 동작 방식
- The Frustration Loop는 스팸이 감지됐을 때 블로그를 바로 막지 않고, 시스템 오류나 실패처럼 보이게 만들어 사용자를 지치게 함
- 아이디어는 The Password Game에서 얻음
- 스팸이 감지되면 양식을 지우고 “Our servers are bearly managing. Try again later.” 같은 오류를 표시함
- 모든 텍스트 영역에서 붙여넣기를 비활성화함
- 5~10초마다 입력 포커스를 다른 입력란으로 옮겨, 타이핑 중 엉뚱한 곳에 입력될 수 있게 함
- 다시 제출하면 “Ensure content contains necessary parameters.” 같은 다른 오류를 표시함
- 이 과정을 반복해 소프트웨어가 고장 났다고 판단하고 포기하게 만듦
- 정상 사용자에게 발동될 가능성은 낮다고 봄
- 테스트에서는 명시적으로 의심스러운 행동을 하지 않고는 발동시키지 못함
- 프로덕션에서 3개월 동안 운영됐고, 문제를 신고한 사용자는 1명뿐이었음
- 그 사용자는 온라인 카지노를 광고하고 있었음
적용 결과와 남은 구멍
- 적용 후 신규 블로그 중 스팸 비율이 약 30%에서 5% 미만으로 감소함
- 완벽한 해결책은 아니며, 개선할 부분과 막아야 할 구멍은 여전히 남아 있음
- 방식을 공개하면 잠재적 스패머가 우회할 수 있다는 우려가 있지만, 스패머가 이 블로그를 읽지는 않을 것이라고 봄
댓글과 토론
Hacker News 의견들
-
예전 ESPN 동료였던 Mike Davidson[1]이 2006년에 만든 초기 커뮤니티 뉴스 사이트 Newsvine[2]이 떠오름
Newsvine은 댓글, 추천, 링크 제출, 글 작성이 있었고 뉴스 중심의 Reddit 같은 서비스였음. 스팸머와 트롤을 처리하려고 백엔드에서 사용자를 트롤로 표시하면, 그 계정의 모든 페이지 로드에 무작위 10~60초 지연을 넣었고 꽤 효과적으로 문제를 줄였던 것으로 기억함
1- http://mikeindustries.com/blog/
2- https://en.wikipedia.org/wiki/Newsvine- 그 기준이면 새 Reddit 모바일 UI는 모두를 트롤로 보는 듯함
- Twitter/X 같은 서비스에서 미국 정부 인사와 소통하는 개인까지 고려하면 어떻게 적용될지 궁금함
전혀 다른 이유로 백엔드에서 트롤로 표시된 사람이 정부 관계자와 소통할 때 지연을 겪게 될 수 있음. 지연이 차단과 같지는 않지만, 연방 판사가 보기에도 사용자 경험 훼손이 충분히 비슷한지 의문임 - Newsvine을 좋아했음. 정말 혁신적이고 환영받는 느낌이었음
- 스팸과 트롤링은 종이신문, 라디오, TV, 책, 잡지에서도 일어남. 다만 거기서는 돈을 내야 가능할 뿐임
역사적으로 부유층, 의전 계층, 유한 계층은 더 많은 관심을 살 수 있었기 때문에 머릿속에 떠오르는 온갖 잡음을 계속 뿌려왔음. 이제는 콘텐츠 생산량이 소비량을 압도해서 어떤 것에도 충분한 관심이 남지 않음
HN의 댓글과 링크 중 99%를 아무도 읽지 않는다면, HN을 운영하는 뛰어난 천재들이 그걸 말해줄까? 플랫폼들은 자신들이 뭘 만들고 있는지도 모른 채 모두에게 무료 방송권을 줬고, 이제 부자뿐 아니라 모두가 무료로 스팸과 트롤링을 하게 됨. 남는 건 소음뿐이니 UN의 관심 경제 보고서를 읽어보면 됨
단선적인 소프트웨어 엔지니어들이 시스템을 빠르게 만들고 확장할 수 있게 된 것이, 모두의 시간과 에너지를 낭비하는 이런 무의미한 시스템들이 생긴 유일한 이유처럼 보임
-
Akismet 내부에서 6년 넘게 일했음
Akismet은 댓글 스팸 탐지에는 매우 뛰어나지만, 가입 스팸 탐지를 잘했다면 wordpress.com에 그렇게 많은 스팸 블로그가 생기지는 않았을 것임
검색엔진, 선별한 용어 목록, 개발자가 만들어준 도구를 써서 스팸 블로그를 추적했고, 진짜 스팸 블로그 수천 개를 정지시켰음. 실수도 가끔 있었지만 드물었음
이후 자동화 도구가 일부 만들어졌지만 이런 사냥과 정지는 우선순위에서 밀렸음. 초기에 wordpress.com이 깨끗해 보여야 성장할 수 있었지만 충분히 커졌다고 판단되자 멈춘 셈임. 불타는 차를 물총으로 끄는 수준이라는 건 알았지만 오래 걸리지 않았고 꽤 만족스러웠음
이맘때면 Halloween 스팸 블로그를 뒤지고, Christmas 스팸 블로그도 보이기 시작했음 -
제3자 필터 없이 이메일 스팸을 없애는 간단한 방법을 씀
이메일용 개인 도메인을 갖고 있고, 도메인으로 오는 모든 메일을 받는 캐치올 계정을 둠. 대신 사이트와 서비스마다 sitea@mydomain.com, site2@mydomain.com처럼 서로 다른 주소를 줌
이렇게 하면 보낸 곳에 따라 메일을 안정적으로 자동 분류할 수 있고, 내가 주는 이름 형식도 일관되게 만들어서 그 형식과 맞지 않는 랜덤 메일은 즉시 삭제되어 보지도 않음
스팸은 거의 안 오지만, 어떤 서비스가 주소를 유출하면 그 서비스의 이메일을 바꾸거나 해지하고 해당 주소를 수신 차단 목록에 넣음. 너무 단순해서 모든 이메일 프로그램이 도메인 전체를 이런 식으로 다룰 수 있어야 한다고 느낌- 개인 도메인이 없다면 대안으로 Fastmail masked emails(https://app.fastmail.com), Firefox Relay(https://relay.firefox.com/), SimpleLogin(https://simplelogin.io/) 같은 게 있고, 그 외에도 많음
- 비슷하게 외부 대상마다 별도 주소를 쓰고 있는데, 피싱 인식에도 도움이 됨
예를 들어 어떤 쇼핑몰용으로 만든 주소로 “은행에서 온 알림”이 오면 진짜일 수 없음. 악용된 주소는 /etc/aliases에서 삭제해 무효화할 수 있음
그 외에 postfix 서버는 보내는 쪽에 역방향 DNS 매핑이 없으면 연결을 거부하도록 설정해둠. 20년 전에도 통했고 지금도 로그를 보면 여전히 유용함 - 비슷한 시스템을 씀. 도메인은 캐치올이지만, 모든 사람에게 별도 주소를 주고 별칭 끝에 이메일 규칙이 무엇을 해야 할지 나타내는 조각을 붙임
예를 들어 anything_s@mydomain.com으로 오면 바로 스팸함으로 감. Google부터 작은 웹사이트 가입까지 거의 다 여기에 씀. 어차피 대개 스팸만 보내기 때문이고, 가끔 스팸함을 확인해도 중요한 건 한 번도 없었음
일반적인 업체들이 보내는 메일도 대부분 관심 없어서 스팸으로 봄. Uber Eats도 주문마다 여러 통을 보내는데 내 기준에서는 그냥 스팸임. 정말 신경 쓰는 서비스라면 스팸으로 가지 않는 다른 접미사를 붙인 주소를 주겠지만 거의 그럴 일이 없음
웹사이트가 주소를 유출했을 때 오는 피싱 스팸뿐 아니라, 대부분의 웹사이트가 보내는 “작은 상호작용에 대한 중요한 정보”류 메일도 잘 걸러짐 - 비슷한 시스템을 쓰지만 주소를 먼저 .txt 파일에 “등록”함. 형식은 sitename-random-number@mydomain임
캐치올은 스패머 쪽에서 모든 메일이 성공적으로 전달된 것으로 보이게 하므로, 스패머가 계속 다시 보내며 자원을 낭비시킬 수 있음 - 몇 년째 비슷하게 하고 있지만 자동 삭제는 하지 않음
관찰해보니 스팸은 블로그에 공개한 메일 주소와 GitHub 주소로만 옴. 아무도 내 주소를 스패머에게 판 게 아니라, 공개된 주소만 긁어간 것으로 보임
-
소셜 네트워크의 스팸 팀은 보통 스패머를 섀도 밴함
목표는 스패머가 잡혔다는 사실을 알아내기 최대한 어렵게 만드는 것임. 그래서 짜증 유발 기법이나 단순 계정 정지는 널리 쓰이지 않는다고 봄
스팸 방지는 본질적으로 탐지 전술을 배포하는 회사와, 탐지를 피하려고 점점 복잡한 방법을 쓰는 정교한 스패머 사이의 군비 경쟁이라 흥미로움. 스패머가 자기 방법을 발전시킬 필요가 없다고 믿게 만들 수 있다면 회사 입장에서는 이득임- 실제 사람이 걸려드는 게 문제임. 내 TikTok 계정은 섀도 밴 상태라 지금 뭘 올려도 조회수가 0이고 LIVE도 시청자가 0명임
Instagram 계정은 내가 나를 사칭했다는 이유로 영구 정지됐음. 계정 전체를 잃어서 더 나빴고, 셀피까지 보내라고 하더니 이미지를 제출한 바로 그 순간 영구 정지됨 - 아이러니하게도 최고의 스팸 탐지 팀은 스패머를 위해 일함. 광고는 스팸이고, 단지 adtech가 월급을 내줄 때만 예외가 됨
- 맥락에 따라 계정 정지는 무기화될 수 있음. 싫어하는 사람이 수상한 행동을 하는 것처럼 보이게 만들어 정지시키는 식임
- 내가 본 현대적인 스팸 도구들은 이런 이유로 검증용 두 번째 계정 목록을 받음
댓글이 보이는지 표본 확인해서 섀도 밴된 계정을 자동으로 제거할 수 있음
- 실제 사람이 걸려드는 게 문제임. 내 TikTok 계정은 섀도 밴 상태라 지금 뭘 올려도 조회수가 0이고 LIVE도 시청자가 0명임
-
Akismet에는 제대로 작동하는 이의제기 절차가 없음. 아주 오래전에 내 블로그에 댓글을 달다가 Akismet에 밴당했음
Akismet을 쓰는 곳에 댓글을 달면 조용히 필터링됨. Disqus에서도 아는 사람들의 블로그 댓글에 유용한 링크를 많이 올렸다는 이유로 밴당했지만, 그쪽은 2일 만에 해결했고 매우 정중했음
Akismet은 적어도 셀 수 없이 오래전에 밴된 WordPress 사용자들을 정리해야 하고, WordPress는 좀 덜 제정신 아닌 대안으로 바꿔야 함
내 WordPress 블로그에서 답글을 못 다는 건 사실 꽤 웃기고, 나야 다른 블로그 엔진을 쓰면 되니 쉽지만, WordPress가 자기 사용자를 “스팸을 좀 죽이자” 식으로 대하는 건 별로임- Akismet 개발자임. support@akismet.com으로 정보를 보내주면 댓글이 왜 잡히는지 살펴볼 수 있음
- 이런 상황에서는 보통 그 사이트를 아예 포기함
도메인을 uBlock 목록에 추가하고 제목을 Google에서 검색하는 데는 클릭 한 번이면 됨. 어떤 이의제기 절차도 그만큼 쉽고 믿을 만할 수는 없음
-
원글에서 유효한 사용자를 어떻게 판별해 짜증 루프에 넣지 않는지가 빠져 있음
Akismet으로 가입 시 스팸을 막는 건 어느 정도 통했지만 우회가 쉬웠고, 일부 스패머는 정상 블로그처럼 보이는 방법을 찾아 수동으로 찾아내고 표시해야 했다고 함. 이후 스팸이 탐지되면 시간을 낭비시키고 포기하게 만드는 “Frustration Loop”를 만들었다고 설명함
하지만 정상 사용자에게 트리거되지 않느냐는 부분에서는 3개월 동안 운영했고 문제를 신고한 사용자가 한 명뿐이었다는 정도만 나옴. 개인적으로는 이 부분이 글에서 가장 흥미로운 대목임
스패머를 짜증나게 하는 조치 자체는 멋지지만, 스패머와 실제 사용자 분리, 오탐과 미탐 파악 같은 내용이 더 있었으면 했음. 탐지 세부사항을 공개하기 어렵고 글의 주제가 Frustration Loop라는 점은 이해함- Akismet에 돈을 내고 사용자 가입 정보를 넘김. 글의 GIF에서 어떤 데이터를 보내는지 볼 수 있음
Akismet이 스팸이라고 답하면 짜증 루프를 켜는 방식이라 꽤 영리하다고 봤음 - Akismet이 가입 시점의 스패머도 탐지하나? 내가 알기로 주 기능은 주어진 댓글이 스팸인지 판별하는 API임
https://akismet.com/developers/comment-check/ - 바로 그 부분임. 아무도 문제를 해결하고 싶어 하지 않는 느낌임
해결하면 지표와 수익만 해칠 테니, 이제는 그렇게 생각하게 됐음
- Akismet에 돈을 내고 사용자 가입 정보를 넘김. 글의 GIF에서 어떤 데이터를 보내는지 볼 수 있음
-
메일 연락처 폼에서 가장 잘 먹힌 스팸 방지는 “blindcopy”, “bcc”, “cc”, “additional address” 같은 이름의 숨겨진 텍스트 입력 필드 여러 개였음
모두 기본값을 넣어두고, 제출 처리기가 이 필드들의 값이 기본값과 달라진 걸 감지하면 제출을 거부했음. 그 폼에서 가짜 이메일을 한 통도 받지 않았던 것 같음- 스팸 스크립트는 그보다 훨씬 덜 똑똑함
연락처 폼에 텍스트 없는 숨김 필드를 하나 넣고, 접근성을 위해 힌트 텍스트로 정중한 경고를 붙였음. 그 필드에 뭔가 채워지면 조용히 버렸고, 입력 내용은 나에게 참조 발송되게 했는데 폼이 올라가 있던 약 8년 동안 스팸 메일은 0통이었던 것 같음 - 이 개념을 허니팟 필드라고 부르는 걸 들어봤고, 말한 것처럼 꽤 잘 작동함
다만 비밀번호 관리자나 자동완성이 어떻게 걸려들지 않는지 궁금함. 필드가 보이지 않는다는 걸 감지할 수 있는 걸까? - Hacker News도 이런 걸 쓰지 않나? 로그인 페이지에 숨겨진 입력 필드가 있음
- 나도 똑같이 했고, 정말 효과가 좋았음
- 스팸 스크립트는 그보다 훨씬 덜 똑똑함
-
“짜증” 사용자들이 넣는 콘텐츠를 샘플링해서 실제로 정상인지 확인하나? 오탐률과 미탐률이 있나? 전체 정상 가입 수가 줄었는지 늘었는지도 봤나?
이런 방식은 혼자만 쓰는 게 아님. 많은 페이지가 VPN을 쓰면 오류도 표시하지 않고 조용하면서도 짜증나는 방식으로 실패함. VPN을 끄면 마법처럼 전부 작동함. Etsy도 한동안 VPN을 쓰면 빈 페이지를 반환했는데 극도로 짜증났음 -
Instagram에는 짜증 루프가 있음. 내 계정에서 발동되기 때문에 알고 있음
내가 하는 모든 행동마다, 아무리 사소해도 다시 로그인하게 만듦. 링크 하나를 클릭하든 뭘 하든 매번 로그인 화면을 거쳐야 함
처음에는 “계정에서 의심스러운 활동이 감지됨”으로 시작했고, 이어 “계정이 비활성화됨”이 떴음. 실제 이유는 말해주지 않지만 공식 규칙에 나온 현실적인 이유는 누군가를 불쾌하게 하는 게시물을 올렸다는 것뿐임
그런데 그 설명에는 문제가 있음. 나는 아무것도 올린 적이 없음. 몇 명을 팔로우하는 게 Instagram에서 하는 전부임. 코드 입력, 본인 사진 전송까지 거쳐 계정 접근은 되찾았지만, 이제는 뭘 하든 다시 로그인해야 함. 이게 우연이나 버그라고 믿기 어렵고, 분명 나를 문제 인물로 식별했지만 처형할 증거가 부족해 상상 속 위반에 대해 벌주는 것처럼 보임
아마 가끔 Instagram 사진 링크를 따라간 것이 원인 같음. Meta의 일부라는 점도 문제라, Instagram을 완전히 닫아버리면 멀리 있는 친구 몇 명과 연락하는 데 쓰는 Facebook 계정 접근도 잃게 됨
세상은 Facebook에서 떠났고 이제 모두 Instagram에 있음. 나도 아마 그랬을 텐데, Instagram이 허락만 했다면 가능했을 것임- 크롤러나 스크레이퍼로 식별한 것 같음. 또 다른 Cambridge Analytica 사건을 원치 않는 듯함
-
스팸 탐지가 스패머와 탐지자 사이의 창의성 전쟁이라는 말이 보이는데, Akismet이라면 맞을 수 있음. 하지만 스패머가 모일 장소를 제공하는 웹사이트라면 더 이상 그런 구도가 아님
이건 내 블로그/웹사이트와 다른 블로그/웹사이트 사이의 경쟁임. 내가 이웃보다 더 잘 보호되어 있으면 스패머는 이웃에게 감. 특히 봇이 아니라 클릭 농장을 막는 경우에는 더 그렇다
농담처럼, 숲에서 곰보다 빨리 달릴 필요는 없고 무리에서 가장 느리지만 않으면 됨