Reddit 안티스팸 내부를 엿보다
1 week ago
14
2021년 Reddit의 일시적 오류로 보이는 현상 때문에, Relay for reddit에서 평소 Removed: Auto로 숨겨지던 사이트 전체 스팸 제거 사유 와 내부 판단 데이터가 노출됨
공개 아카이브 코드상 제거 정보는 ban_info.banner를 거쳐 전달되며, Relay는 API의 banned_by=true를 Auto 로 바꿔 표시했지만 같은 필드에 내부 사유가 들어가면서 문제가 생긴 것으로 보임
노출된 사유에는 domain, spammit, banned user, shadowban, spamurai 등이 있었고, spamurai는 계정 나이, karma, 신고 수, ISP, 이메일 도메인, User-Agent, 언어 헤더, TLS 지문, referrer, Perspective API 점수까지 포함함
Google Perspective API 의 SPAM 점수와 Reddit 제거 로그 값이 거의 일치했으며, 짧은 문자 추가·키릴 문자 치환·대소문자와 숫자 무시 같은 특성 때문에 점수가 크게 흔들리는 사례가 확인됨
Reddit 안티스팸은 Python 2.7 기반 검사, Lua 규칙 기반 REV1/REV2, Snooron, OCR·이미지 분류 도구가 섞인 다세대 시스템으로 보이며, 2026년에는 Perspective API 종료와 LLM 기반 스팸 변화로 공개 위험이 낮아졌다고 판단함
2021년에 드러난 제거 사유
Reddit 중재자였던 사용자는 2021년 Relay for reddit 앱에서 제거된 스팸 알림을 받던 중, 평소 보이지 않아야 할 안티스팸 내부 메시지 를 확인함
일반적인 중재자 화면에서는 자동 스팸 제거가 Removed: Auto처럼 표시되지만, 당시에는 실제 제거 사유와 내부 데이터가 빨간 텍스트로 나타남
이 현상은 약 한 시간 뒤 정상으로 돌아왔고, 남은 자료는 당시 찍은 스크린샷뿐임
Reddit 중재와 Auto 표시 방식
Reddit의 하위 커뮤니티인 subreddit에서는 커뮤니티 중재자가 게시물 제거, 사용자 차단, modmail 관리 등을 맡음
중재자는 게시물이나 댓글이 누구에 의해 제거됐는지 볼 수 있음
일반 중재자 제거는 중재자 이름으로 표시됨
AutoModerator 제거는 AutoModerator로 표시됨
Reddit의 사이트 전체 스팸 필터나 관리자 제거는 Auto로 표시될 수 있음
중재 로그에서는 사이트 전체 제거가 reddit 또는 Anti-Evil Operations로 나타남
공개 아카이브 코드로 본 노출 경로
Reddit은 2017년까지 소스 코드 를 공개했으며, 해당 아카이브 코드로 제거 처리 흐름 일부를 추적할 수 있음
중재자 제거 함수인 POST_remove 는 admintools.spam을 호출함
moderator_banned는 제거 주체가 중재자인지 관리자인지 구분함
banner는 제거 작업을 수행한 사용자 이름을 기록함
get_mod_attributes 는 제거된 항목의 ban_info를 API 응답으로 내보냄
중재자가 제거한 경우 banner 값을 banned_by로 반환함
관리자가 제거한 경우 실제 이름 대신 True를 반환함
Relay for reddit은 디컴파일된 코드상 bannedBy가 "true"이면 이를 Auto 문자열로 바꿔 표시함
Reddit에는 링크 제출 시 금지 도메인을 감지하면 banner = "domain (REASON)"처럼 내부 사유를 banner 필드에 넣는 코드 경로도 있었음
내부 제거 사유가 들어간 banner 필드는 원래 사이트 전체 관리자에게만 보여야 했으나, 비슷한 코드 경로의 오류로 중재자에게 노출된 것으로 추정됨
노출된 제거 사유 범주
domain
도메인 기반 제거는 공개 코드에서도 확인 가능한 범주임
대부분은 Removed: domain (spam) 형태였지만, 구체적인 메모가 붙은 경우도 있었음
Tumblr 관련 스팸 실험을 위해 2012년에 특정 도메인을 제거한 사례가 있었음
le sexxxxy sex spam 같은 문구도 제거 사유로 나타남
spammit
spammit은 게시물을 분석해 스팸 확률 퍼센트 를 붙이는 범주로 보임
확인된 제거 사례의 점수는 낮게는 39.71% , 높게는 98.19% 였음
해당 subreddit들에서는 정상적인 Imgur 게시물도 70~98% 스팸 점수로 제거된 사례가 많아 정확도가 높아 보이지 않았음
차단 사용자와 shadowban
Removed: banned user 또는 Removed: Reddit (banall performed) 형태의 제거가 있었음
해당 사례들은 대부분 광고성 서비스 링크 등 명백한 스팸 게시물로 나타남
shadowban된 사용자의 게시물은 Removed: Reddit (shadowban applied on 날짜)처럼 표시됐음
shadowban은 사용자 본인은 계속 글을 쓸 수 있는 것처럼 보이지만, 다른 사람에게는 게시물과 댓글이 보이지 않는 침묵형 차단임
spamurai가 드러낸 내부 판단 데이터
spamurai 는 노출된 범주 중 내부 데이터가 가장 많이 포함된 항목임
공개 발표 자료에는 Reddit이 “ML”에 Minsky, “Rules”에 Spamurai를 사용한다고 되어 있음
spamurai 제거 사유에는 단순 규칙과 상세 데이터 덤프가 함께 있었음
echelon이라는 하위 시스템으로 보이는 이름이 특정 키워드 제거에 나타남
30분 미만 계정이 스팸 조건에 맞는 댓글을 올렸을 때 제거한 사례가 있었음
의심되는 셔츠 제휴 스팸, URL-only 댓글, 높은 Perspective 점수 댓글 등 구체적 규칙이 보였음
spamurai 데이터 덤프의 항목
link t3_... 또는 comment t1_...는 Reddit의 fullname ID 임
t1은 댓글
t2는 사용자
t3는 게시물
t4는 private message
t5는 subreddit
perspective spam 값은 Google Perspective API 의 SPAM 점수로 확인됨
계정 관련 데이터가 포함됨
계정 나이
spammy 점수
karma
신고 수
이메일 도메인
ISP 또는 조직명
접속·환경 데이터도 들어 있었음
oauth.reddit.com 사용 여부
User-Agent
언어 헤더 LANG
referrer
브라우저 지문으로 보이는 RHS
TLS 지문으로 보이는 값
썸네일 URL
게시물 또는 댓글 본문
원본 Reddit 링크
Perspective API와 우회 가능성
Reddit 로그의 0.12571795 perspective spam 값은 Perspective API 의 SPAM 속성 호출 결과와 사실상 일치함
같은 텍스트로 Perspective API를 호출했을 때 0.12571794가 반환됐고, 차이는 0.00000001 이라 반올림 오차로 볼 수 있음
Perspective 문서의 예시 점수 형식과 Reddit CTO의 사례 인용도 Reddit이 Perspective를 사용했다는 정황으로 쓰임
Perspective의 SPAM 속성은 독성 탐지가 아니라 스팸 탐지를 위한 experimental 속성이며, New York Times 댓글과 중재 데이터의 단일 데이터셋으로 학습됐다고 되어 있음
2026년 2월 이후 Google Cloud에서 새 Perspective API 프로젝트를 만들 수 없게 되어 새로 시험하기 어려워짐
SPAM 점수의 민감한 변화
Perspective SPAM 점수는 몇 글자만 추가해도 크게 바뀌는 사례가 있었음
Puppygirl Consulting is the best way to grow your revenue는 0.8638981
뒤에 qp를 붙이면 0.010811162 로 떨어짐
숫자와 대소문자는 무시되는 듯한 결과가 나옴
전화번호 숫자와 대소문자를 바꿔도 같은 점수가 반환됨
일부 다른 문자 체계도 같은 점수로 처리됨
서로 다른 키릴 문자 문자열이 같은 0.35077864 점수를 받음
Buy my product에서 라틴 p를 키릴 р로 바꾸면 점수가 0.6473346 에서 0.4452748 로 내려감
공개 API를 기준으로 메시지를 조금씩 바꾸면 spamurai의 주요 판단 기준 중 하나를 회피할 수 있었을 가능성이 있음
사용자 신고와 중재자 승인 반영
spamurai는 사용자 신고도 제거 규칙에 반영하는 것으로 보임
REPORT: High spam perspective score on comment with hyperlink reported for spam 사유는, 스팸으로 신고된 하이퍼링크 댓글의 Perspective 점수가 높아 제거됐고 중재자가 재승인할 수 있음을 나타냄
특정 제거 사유에는 “중재자가 이 콘텐츠를 승인하면 앞으로 제거가 줄어든다”는 문구가 포함됨
Reddit 공개 코드의 admintools.spam에 있는 train_spam 인자는 중재자 액션을 안티스팸 학습에 사용할지 결정함
subreddit에서 정상 게시물을 승인하면 false positive를 줄이는 데 영향을 줄 수 있다는 해석이 가능함
기타 제거 규칙과 URL 검사
Pinterest redirect 링크, mega.nz 링크, 자유롭게 만들 수 있는 subdomain 관련 링크도 제거된 사례가 있었음
mega.nz 링크 제거 중에는 실제로 YouTube 아카이브 영상 링크였던 정상 사례도 있어 오탐이 있었음
Matched forbidden regex u'torenteu' 사례는 본문에 직접 torenteu가 없었지만 제거됨
Reddit은 unidecode 를 사용해 유니코드 문자열을 ASCII로 변환함
한국어 토렌.트가 변환과 추가 처리를 거쳐 torenteu와 매칭될 수 있었음
Failed inspection: Phrase(s) [u'UA-49307539-'] 사례는 댓글 본문이나 변환된 텍스트가 아니라, 링크가 리다이렉트된 페이지의 HTML 안 Google Analytics ID와 매칭된 것으로 나타남
inspection은 Reddit이 URL을 열고 리다이렉트를 따라간 뒤 페이지에서 패턴을 찾는 동작으로 보임
테스트 계정에 해당 문자열을 둔 웹페이지 링크를 올리자 5년 된 계정이 즉시 차단되고 게시 이력이 삭제됨
더 많은 활동 이력이 있는 친구 계정에서는 같은 재현이 되지 않았음
해당 필터가 아직 활성인지, 계정 차단이 우연인지 확실하지 않아 실제 문자열은 바꿔 공개됨
과거·현재 Reddit 안티스팸 구성요소
Reddit Engineering의 2023년 글 Protecting Reddit Users in Real Time at Scale 에는 Rule-Executor-V1, REV2, Snooron이 등장함
이해한 타임라인은 다음과 같음
REV1은 2016년에 만들어짐
Snooron은 2021년에 REV1을 현대화하기 위해 개발됨
이후 약 2년 뒤 REV2로 마이그레이션됨
REV1과 REV2는 Lua 규칙으로 동작하며, nil 같은 문자열과 시점상 spamurai와 연결될 가능성이 있음
u'torenteu', u'UA-49307539-' 같은 Python 2.7 유니코드 문자열은 spamurai 외부의 Python 2.7 기반 검사 코드이거나 REV1이 호출하는 별도 URL 검사 코드일 수 있음
Snooron은 관련 발표 에 따르면 Flink Stateful Functions 위에서 동작하고, 이미지 분류와 OCR을 수행하며, worker에 Python 3를 사용함
2024년 기준 Reddit은 Australian eSafety 문서에서 OCR과 이미지·비디오 분류에 Hive AI 와 Google Vision OCR API 를 사용한다고 밝힘
Hive OCR은 12개 언어를 지원하고, Google OCR은 더 많은 언어 지원을 위해 함께 쓰이며, Reddit은 80개 언어를 지원하는 내부 도구도 작업 중이라고 되어 있음
2009년 ticket에서는 crm114라는 사용자가 중재자 학습이 가능한 스팸 필터라고 확인됐고, CRM114 는 오래된 오픈소스 스팸 분류 소프트웨어임
2026년에 공개한 이유
2021년에 이 정보를 공개했다면 Reddit의 스팸 문제에 치명적일 수 있었다고 판단함
2026년에는 Perspective API is shutting down 이 연말 종료 예정이라 Reddit이 계속 쓰더라도 곧 마이그레이션해야 함
LLM이 스팸 산업을 바꿨기 때문에 Reddit이 2026년에 맞춰 안티스팸 시스템을 많이 개편했을 것이라고 판단함
이런 이유로 2026년 현재는 해당 정보 공개의 위험이 낮다고 봄
Homepage
개발자
Reddit 안티스팸 내부를 엿보다
🔉 볼륨 줄이기
🔊 볼륨 키우기
🔇 음소거
⏭️ 다음 곡