왜 중국 웹사이트에서 검색이 많이 발생하나요?

목록에 그보다 훨씬 더 많은 항목이 있는데, 혹시 아이디어가 있나요?

오늘 우리 고객 중 한 곳의 로그에서 이 내용을 확인했는데, 이건 단순한 우연이 아닙니다.

수정: 아니, 역시 우연인 것 같습니다. ymwears .cn를 검색해보니 리퍼럴 스팸에 대한 불만이 더 많이 나오는데, 예를 들어 이 것들(1년 이상 된) Relevanssi shows weird search queries on my page | WordPress.org 과 Block specific referrer or agent to enter url | WordPress.org 등이 있습니다.

지난달 한 고객이 이 문제로 불만을 제기한 적이 있습니다. 몇몇 IP를 차단하고, 해당 URL을 검색하는 IP를 차단하도록 fail2ban을 설정하는 방안을 고려해 보았지만, 실제로는 아무 조치도 취하지 않았습니다. 지역 기반 차단을 조사해 보았지만, 이를 구현하려면 월 20달러짜리 데이터베이스가 필요한 것 같았습니다.

재미있네요. 서버 자체를 건드리지 않아도 되는 해결책이 있는지 아시는 분 계신가요?

@pfaffman @RGJ

리퍼러 스팸은 꽤 큰 문제이며, 구글 애널리틱스 같은 대형 서비스조차 이를 100% 성공적으로 막아내지 못하고 있습니다. 현재로서는 해당 항목들을 수동으로 삭제하는 것 외에는 떠오르는 방법이 없습니다.

해당 사이트들이 여러 독립적인 디스코urs 사이트에서 적어도 부분적으로 동일하게 나타나고 있는 것 같으니(스크린샷에 거의 동일한 목록이 표시되는 것으로 보아), 동적 블랙리스트를 도입하는 건 어떨까요? @codinghorror 님, 어떤 제안이 있으신가요?

저희는 수년 동안 대규모로 이 문제를 인지하고, 대응하며 완화해 왔습니다. 그리고 지난 몇 년간 무법(rogue) 봇을 차단하는 가장 신뢰할 수 있는 방법은 사용자 에이전트(UA) 문자열을 기반으로 차단하는 것(때로는 GeoIP 정보와 조합하여)임을 발견했습니다.

수년간 수억 건 이상의 중국발 봇 접근을 차단해 왔으며, IP 주소를 기반으로 차단하는 방식이 UA 문자열을 기반으로 클라이언트를 차단하는 방식만큼 장기적으로 잘 작동하는 경우는 거의 없었습니다.

예시로, 저희 사이트 중 하나에서 사용하는 코드 조각을 하나 소개합니다:

$user_agents = explode('|',$string_of_bad_user_agents,-1);
$hide_content_useragent = $_SERVER['HTTP_USER_AGENT'];
$IS_A_BAD_BOT = FALSE;

foreach($user_agents as $hcag) {
    trim($hcag);
    if (preg_match("/$hcag/i", "$hide_content_useragent")) {
        $IS_A_BAD_BOT = TRUE;
        break;
    }
}

대부분의(전부는 아니지만) 무법 봇은 비교적 쉽게 식별하고 차단할 수 있는 UA 문자열을 사용합니다(미래에는 상황이 어떻게 변할지 모르겠지만, 현재 시점에서는 그렇습니다). 따라서 저희는 수년 전부터 IP 주소를 기반으로 무법 봇을 차단하려는 방식을 포기했습니다. IP 기반 차단을 포기한 이유는 중국, 러시아, 북한 등 많은 국가들이 현재 다른 국가의 서버에서 봇 농장을 운영하기 때문입니다. IP 주소는 실제 출처나 의도를 나타내는 좋은 지표가 아닙니다. 또한, 대규모 IP 주소 블록을 차단하면 합법적인 사용자가 접근을 거부당하는 좋은 주소도 함께 차단될 수 있습니다.

예를 들어, 중국은 브라질 및 미국에 지리적으로 더 가까운 다른 국가에서 거대한 봇 서버 농장을 운영하여 출처를 위장하고 데이터를 더 빠르게 수집(인터넷 도달 거리 단축)합니다.

때로는 WHOIS 데이터가 중국, 북한 또는 러시아(예시)의 실제 물리적 주소와 일치하지만, 그렇지 않은 경우도 있으며, 현지 국가의 물리적 주소를 사용하기도 합니다. 지난 몇 년간 브라질 기업에 등록되어 있는 수많은 무법 중국 봇을 목격했으며, UA 문자열이 중국의 무법 봇과 일치하는 것을 확인(및 검증)할 수 있었습니다. 또한, 해당 UA 문자열로 구글 검색을 수행하면 다른 사용자들도 많은 동일한 UA 문자열을 중국발로 식별하고 있음을 볼 수 있습니다(예를 들어).

요약하자면, 많은 사람들이 무법 봇 활동을 차단하기 위해 즉시 IP 주소 차단을 시도하지만, 가장 정교한 봇 농장들은 봇을 다른 국가에서 운영하는 데 매우 능숙합니다. 대부분의 국가에서 VPS를 설정하는 것은 쉽고, 물론 봇이 대상 국가에 가까울수록 봇이 스크래핑할 수 있는 데이터가 더 많습니다. VPS는 몇 분 만에 생성되고 삭제될 수 있으며, 봇 소프트웨어는 전 세계 거의 모든 VPS 데이터 센터에 매우 빠르게 배포될 수 있습니다.

지난 몇 년간 UA 문자열 기반 차단은 더 신뢰할 수 있는 방법으로 입증되어 왔습니다(때로는 GeoIP 정보와 조합하고, 때로는 그렇지 않습니다). 하지만 물론 스팸 발송자, 봇 운영자 및 그들의 대리인들도 수년간 IP 주소를 위장해 왔듯이 이제 UA 문자열도 위장하기 시작하고 있습니다.

도움이 되길 바랍니다.

감사합니다 & 행복한 봇 사냥을!

네, IP 차단이 효과적이지 않다는 데에 전적으로 동의합니다.

스패머가 User-Agent를 계속 변경하지 않는 한, User-Agent 차단은 꽤 잘 작동하는 편입니다.

그래서 제 생각은 리퍼러 스팸을 받고 있는 실제 URL 자체를 블랙리스트에 올리는 쪽으로 향했습니다.

이 방식이 더 “좋게” 느껴지는 이유는, 근본적인 전제(예: “이 User-Agent가 나쁜 리퍼러를 제공하므로 신뢰할 수 없다”)에 기반하여 무언가를 차단하는 것이 아니라, 실제로 차단하려는 것(“이 웹사이트가 여러 Discourse 사이트에서 리퍼러 스팸으로 확인되므로 데이터베이스에 저장하지 말자”)을 직접 차단하기 때문입니다. 적어도 이 방식은 우회하기가 더 어렵습니다.

좋은 생각입니다.

불법 및 악성 봇을 막는 만능 해결책은 없으며, 각 사이트는 자신에게 가장 적합한 제어 방법을 평가해야 합니다.

비슷한 맥락에서…

블랙리스트와 스팸 또는 불법 봇 데이터베이스에 주로 의존하는 사이트들도 문제가 있을 수 있습니다. 예를 들어, 경쟁사(또는 단순히 우리를 화나게 하거나 모욕한) 사이트인 www.our-arch-rival.com을 누군가가 싫어한다고 가정해 봅시다. 그런 경우 일부 사람들은 해당 사이트 www.our-arch-rival.com를 블랙리스트나 DB에 등록하고, 이로 인해 다른 사이트들이 블랙리스트 DB 방식에서 비롯된 이러한 “부정적 결과” 때문에 정당한 사이트를 필터링하게 됩니다.

물론 블랙리스트 옹호자들은 "블랙리스트 사이트에 가서 보고서를 제출하고 삭제를 요청할 수 있다"고 주장하지만, 바쁘고 오래된 사이트들의 경우 이는 시간을 낭비하는 일이 될 수 있습니다.

일반적으로 문제를 분석하고 시나리오에 기반한 완화 전략을 수립하는 것이 중요합니다. 모든 "적"은 다르기 때문입니다. 이는 손자의 『손자병법』에서 나온 "적을 알라"는 오래된 교훈과 같습니다. 현실에서는 모든 상황이 조금씩 다르며, 안타깝게도 시스템 관리자가 악성 또는 원치 않는 사이버 활동에 대한 최적의 완화 전략을 수립하려면 분석 역량이 필요합니다.

이것이 또한 Discourse를 리버스 프록시 뒤에 실행해야 하는 좋은 이유입니다. 리버스 프록시는 이러한 트래픽이 Discourse 앱에 도달하기 전에 악성 활동을 분석, 분류 및 제어하기에 좋은 위치이기 때문입니다.

2020년 현재, 사이버 공간의 불법 봇과 기타 악성 활동을 제어하고 완화하는 것은 전일제 업무가 될 수 있습니다. 관리자가 하나의 좋은 탐지 및 완화 전략을想出하자마자, 스팸 공격자와 스크레이퍼는 그에 맞춰 대응하고 우회 방법을 찾아냅니다. 저는 이러한 사이버 공간의 문제들이 시간이 지날수록 좋아지기보다는 나빠질 것이므로, 충분한 여유 공간을 확보할 수 있도록 서버를 넉넉하게 구성할 것을 사람들에게 조언하는 편입니다.

레디 플레이어 원!

이것이 IP 블랙리스트를 피해야 하는 또 다른 이유입니다: 스팸러들은 여러분이 조치를 취하고 있다는 사실을 알게 될 테니까요.

클라우드플레어를 통해 대부분의 스팸을 차단할 수 있다고 생각하지만, 브라우저 에이전트에 대해 어떤 규칙을 설정해야 할지 확신이 서지 않습니다.

@neounix "UA 문자열"이 정확히 무엇을 의미하는지, 그리고 이것이 클라우드플레어 방화벽 규칙에서 어떻게 사용될 수 있는지 궁금합니다.

하지만 이건 레퍼러 스팸도 아닌 것 아닌가요? 해당 URL을 검색하는 것뿐이니까 실제로 아무것도 수행하지 않는 거잖아요? 그 보고서가 무엇을 의미하는지 제가 완전히 오해하고 있는 건가요? 그 보고서는 관리자만 볼 수 있는 거죠, 맞나요?

@pfaffman 님, 말씀이 맞으신 것 같습니다. 이 리포트는 포럼에서 이루어진 검색에 대해서만 작성된 것 같습니다. CTR(클릭률)도 포함되어 있는데, 이는 리퍼러 리포트라면 의미가 없기 때문입니다.

네, 기술적으로 이건 리퍼러 스팸이 아닙니다. 하지만 이런 종류의 악용에 대한 정확한 용어가 있는지 잘 모르겠네요. 리퍼러 스팸과 매우 비슷하지만, 검색 쿼리 보고서에만 나타나는 것 같아서요.

리퍼러 스팸은 실제로 아무것도 하지 않으며, 보고서에 나타나게 하기 위한 목적만 있습니다.

@Yassine_Yousfi

여기 있습니다…

HTTP에서 User-Agent 문자열은 주로 콘텐츠 협상에 사용되며, 원본 서버가 응답에 적합한 콘텐츠나 운영 매개변수를 선택하는 데 활용됩니다. 예를 들어, 웹 서버는 특정 버전의 클라이언트 소프트웨어의 알려진 기능에 기반하여 변형을 선택하기 위해 User-Agent 문자열을 사용할 수 있습니다. 콘텐츠 맞춤화 개념은 “특정 사용자 에이전트의 제한 사항을 피하기 위해 응답을 맞춤화하기 위해” HTTP 표준에 RFC 1945에 내장되어 있습니다.

User-Agent 문자열은 로봇 배제 표준( robots.txt 파일)을 사용하여 웹 크롤러가 웹사이트의 특정 부분에 접근하는 것을 제외하는 기준 중 하나입니다.

다른 많은 HTTP 요청 헤더와 마찬가지로, “User-Agent” 문자열의 정보는 사용자가 서로 상당히 달라질 수 있으므로 클라이언트가 서버로 보내는 정보에 기여합니다.[5]

참고:

@Yassine_Yousfi. 인터넷에는 HTTP 사용자 에이전트(UA) 문자열에 대해 다양한 방식으로 사용하는 방법, 봇 및 기타 악성 사이버 활동 감지 시 센서로 사용하는 방법 등을 포함하여 수많은 참고 자료가 있습니다.

봇 사냥愉快하세요!

참고:

  1. 봇 사용자 에이전트의 Discourse 보기를 여기서 확인할 수 있습니다(일부 UA 문자열은 잘림):
https://discourse.your-great-domain.com/admin/reports/web_crawlers
  1. 어떤 감지 알고리즘도 100%의 정확도로 모든 봇을 감지할 수 없습니다.

  2. 웹 서버 로그 파일 및 기타 방법으로도 UA 문자열을 가져올 수 있습니다.

또한 참고:

https://serverfault.com/questions/89773/get-list-of-user-agents-from-nginx-log