3P by GN⁺ 5시간전 | ★ favorite | 댓글 1개
  • Miasma는 AI 웹 스크레이퍼를 무한 루프에 빠뜨려 훈련 데이터 수집을 방해하는 Rust 기반 서버 도구
  • 웹사이트 콘텐츠를 대규모로 수집하는 AI 기업의 트래픽을 리디렉션해, ‘poison fountain’에서 가져온 오염된 데이터와 자기참조 링크를 반환
  • 빠른 처리 속도와 낮은 메모리 사용량으로 서버 자원 낭비 없이 방어 가능
  • Nginx 리버스 프록시숨겨진 링크 삽입을 통해 스크레이퍼를 /bots 경로로 유도해 무한 순환 구조 형성
  • 정상 검색엔진은 robots.txt 예외 규칙으로 보호하며, 오픈소스로 커뮤니티 기여를 허용함

설치 및 실행

  • Cargo를 이용해 설치 가능
    • cargo install miasma 명령으로 설치
  • GitHub Releases 페이지에서 미리 빌드된 바이너리 다운로드 가능
  • 기본 설정으로 실행 시 miasma 명령만 입력
  • 모든 설정 옵션은 miasma --help로 확인 가능

스크레이퍼 트랩 설정 방법

  • /bots 경로를 스크레이퍼 유입 지점으로 설정
  • Nginx를 리버스 프록시로 사용해 /bots 경로의 요청을 Miasma 서버로 전달
    location ~ ^/bots($|/.*)$ {
      proxy_pass http://localhost:9855;
    }
    
    • /bots, /bots/, /bots/12345 등 모든 변형 경로를 매칭
  • 숨겨진 링크 삽입

    • 웹페이지 내에 인간 방문자에게는 보이지 않지만 스크레이퍼가 탐지할 수 있는 숨겨진 링크 추가
      <a href="/bots" style="display: none;" aria-hidden="true" tabindex="1">
        Amazing high quality data here!
      </a>
      
    • display: none, aria-hidden="true", tabindex="1" 속성으로 접근성 도구와 사용자에게는 비노출
  • Miasma 실행

    • /bots를 링크 접두사로 지정하고 포트와 동시 연결 제한 설정
      miasma --link-prefix '/bots' -p 9855 -c 50
      
    • 최대 50개의 동시 연결을 허용하며, 초과 요청은 HTTP 429 응답 반환
    • 50개 연결 시 약 50~60MB 메모리 사용량 예상
  • 배포 후 동작

    • 설정 완료 후 배포하면 스크레이퍼는 /bots 경로를 따라 무한히 오염된 데이터 페이지를 순환
    • 로그를 통해 스크레이퍼의 반복 요청을 실시간으로 확인 가능

robots.txt 설정

  • 정상적인 검색엔진 크롤러가 Miasma에 접근하지 않도록 robots.txt에 예외 규칙 추가 필요
    User-agent: Googlebot
    User-agent: Bingbot
    User-agent: DuckDuckBot
    User-agent: Slurp
    User-agent: SomeOtherNiceBot
    Disallow: /bots
    Allow: /
    

설정 옵션

  • CLI 옵션을 통해 세부 설정 가능
옵션 기본값 설명
port 9999 서버가 바인딩할 포트
host localhost 서버가 바인딩할 호스트 주소
max-in-flight 500 동시에 처리 가능한 최대 요청 수. 초과 시 429 응답 반환. 메모리 사용량은 이 값에 비례
link-prefix / 자기참조 링크의 접두사. 예: /bots
link-count 5 각 응답 페이지에 포함할 자기참조 링크 수
force-gzip false 클라이언트의 Accept-Encoding 헤더와 무관하게 항상 gzip 압축 적용. 전송 비용 절감에 유용
poison-source https://rnsaffn.com/poison2/ 오염된 훈련 데이터를 가져올 프록시 소스

개발 및 기여

  • 버그 리포트나 기능 제안은 GitHub Issues를 통해 제출 가능
  • AI가 생성한 코드 기여는 자동으로 거부됨
  • 커뮤니티 기여를 환영하며, 프로젝트는 오픈소스로 유지됨
Hacker News 의견들
  • 누군가 전화 스패머를 45분 동안 붙잡아두는 것처럼, 이런 봇 교란 기법이 실제로 효과가 있는지 의문임
    Google Search 정책에 따르면 숨겨진 링크 삽입은 명백한 위반으로, 사이트 순위가 떨어지거나 검색 결과에서 제외될 수 있음
    결국 이런 방식은 봇보다 내 사이트에 더 큰 피해를 줄 수도 있음

    • 자동화한다면 효과가 있을 수도 있다고 생각함
      유튜버 Kitboga가 AI 콜센터로 스팸 전화를 붙잡아두는 영상처럼, 적의 자원을 소모시키는 게릴라식 전술로 볼 수 있음
    • 나는 실제로 전화 스패머를 오래 붙잡아둔 뒤로 더 이상 전화가 오지 않음
      그들은 “전화 금지 목록”과 “비수익 목록”을 따로 두는 것 같음. 후자에 오르는 게 핵심임
    • 2000년대 러시아의 영어 학원 스팸 사례가 떠오름
      사람들이 너무 화가 나서 Golden Telecom이 자동 보복 전화를 걸어 회사가 사라졌음
      이런 식으로 효과를 볼 수도 있지만, 모뎀 풀 임대가 필요함
    • 숨겨진 링크 삽입이 금지된다는 점은 맞지만, 나는 오히려 ‘스몰 웹’ 부활의 계기로 보고 싶음
      반(反)스크래핑, 반(反)Google 크롤러, 인간 중심의 검색 인덱스를 갖춘 도구가 생긴다면 가능성이 있음
    • 실제로 이런 데이터 오염 기법이 효과가 있다는 연구가 있음
  • 내 공개 웹사이트의 콘텐츠가 스크래퍼들에게 도둑맞고 있음
    결국 나도 이 글을 훔쳤고, 너도 내 댓글을 훔치는 셈임. 세상은 도둑투성이

    • 문제는 그들이 너무 많은 요청을 보내서 내 사이트가 다운된다는 점임
      콘텐츠는 모두에게 열려 있지만, 모두가 접근할 수 없게 만드는 건 싫음
    • ‘도둑질’이라는 표현은 과하지만, 내 글이 돈벌이 수단으로 악용되는 건 불쾌함
      이런 상황이 계속되면 더 이상 공유하고 싶지 않음
    • 인간은 법적으로 권리와 자유를 가지지만, LLM은 그렇지 않음
      결국 인간과 기업의 도구를 동일선상에 놓는 건 잘못된 비교임
    • “Welcome to the internet…” 식의 풍자적 문구처럼, 이미 우리는 데이터와 프라이버시를 포기한 세상에 살고 있음
  • 예전에 유료 소프트웨어를 만들며 복제 방지 코드를 넣었는데, 매번 새로운 크랙이 등장했음
    결국 그 싸움이 무의미하다는 걸 깨닫고 보호 코드를 제거했음
    AI 봇의 크롤링을 막으려는 시도도 같은 두더지 잡기 게임 같음

    • 차라리 크래킹을 지루하게 만드는 전략을 썼다면 이겼을지도 모름
      하지만 커뮤니티의 동기 자체가 재미와 명성이라 현실적으로 어렵다고 봄
    • 사실 많은 문제는 집착을 내려놓으면 해결됨
      하지만 SNS와 저작권 집착이 사람들의 통제 욕구를 키워버렸음
  • 이런 기법이 실제로 효과가 있는지 궁금함
    대부분의 스크래퍼는 이미 이런 방어를 우회할 기술을 갖췄을 것 같음

    • 설령 효과가 있더라도, 솔직히 이제는 신경 쓸 힘이 없음. 피로감만 남음
    • 나는 가짜 Python 라이브러리를 만들어 GitHub에 올렸는데, 몇 달 뒤 ChatGPT가 그걸 학습했음
      내 경험상 이런 방식은 어느 정도 통함
    • 수백 개의 봇이 유료 프록시를 쓰고 있으니, 그들에게 비용을 지불하게 만들면 됨
    • Meta나 Anthropic의 크롤러는 생각보다 정교하지 않음
      내가 만든 쓰레기 데이터를 학습했는지는 모르겠지만, 꿈이라도 꿔보는 중임
  • 데이터 오염(data poisoning) 접근은 흥미로움
    모델이 웹 데이터를 학습할 때 그 안의 편향과 조작을 그대로 물려받음
    악의적 행위자가 대규모로 데이터를 오염시키면 학습 자체가 적대적 구조로 변함
    결국 해결책은 신뢰 가능한 데이터 출처 관리(provenance)

  • 이런 시도는 결국 AI가 더 똑똑해지는 훈련 데이터를 제공하는 셈임
    광고 기반 콘텐츠 시장이 무너질 가능성이 크고, 그 결과 콘텐츠 품질 중심의 시장으로 재편될 것 같음

    • “그럼 아무것도 하지 말자는 거냐?”는 반문이 나올 수 있지만, 현실적으로 대응이 쉽지 않음
    • AI가 광고 기반 콘텐츠의 종말을 앞당길 것
      대신 직접 라이선스를 맺고 데이터를 제공하는 모델이 자리 잡을 것임
    • 만약 크롤러가 모든 링크를 클릭하지 않고 로컬에서 파싱만 한다면, 그건 오히려 승리라고 생각함
    • 결국 기술은 끝없는 군비 경쟁의 연속임
  • 단순히 style="display:none"이나 aria-hidden="true" 속성을 제거하면 이런 트릭을 피할 수 있지 않나 싶음

    • 하지만 그렇게 하면 robots.txt를 무시하게 됨
      정직한 스크래퍼라면 그 규칙을 따르는 게 맞음
    • 링크를 완전히 숨기지 말고, 화면 밖에 작게 배치하면 됨
      사람은 못 보고, 봇은 따라가게 할 수 있음
  • 이런 아이디어는 멋지지만, 결국 중소기업(SME) 에게 더 큰 피해를 줄 것임
    대기업만 더 강해지고, 작은 사이트는 AI 검색 결과에서 사라짐
    결국 흐름에 따르는 수밖에 없고, 가끔 작은 저항을 남기는 정도가 현실임

  • Nightshade 2.0 같은 도구는 엉성한 주목 끌기용 프로젝트로 보임
    진짜 해결책은 LLM 친화적 포맷으로 데이터를 제공하는 것임
    단순한 display:none 트릭은 스마트 크롤러에게는 통하지 않음
    관련 스레드 참고

  • 진짜 흥미로운 건 이 프로젝트가 사용하는 Poison Fountain 데이터셋
    rnsaffn.com/poison3에 “기계 지능 시스템에 피해를 주고 싶다”는 문구가 있음
    이런 해커 이념이 역할극(roleplay) 처럼 느껴져 공감하기 어렵다고 생각함

    • 하지만 정작 “오염된 데이터가 무엇인지”, 그리고 “소량으로도 큰 영향을 준다”는 주장의 근거는 아무도 설명하지 않음