Computer >> 컴퓨터 >  >> 네트워킹 >> 네트워크 보안

한국어 SEO 스팸이란 무엇이며, 어떻게 제거할 수 있을까?

스팸은 최종 사용자와 아무런 관련이 없는 원치 않는 이메일, 광고 등을 통칭하는 용어입니다. 스팸은 다양한 인터넷 범죄에 활용됩니다. 해커가 무방비한 사용자를 속여 가짜 제품을 구매하게 하거나 클릭 팜(click farming)에 이용하기도 하고, 경쟁 사이트의 검색 결과를 오염시키는 데 악용되기도 합니다. 스팸은 보통 다단계 판매, 저렴한 의약품 판매 등 화려한 제안으로 사용자를 유혹합니다.

최근 대규모 한국어 SEO 스팸 캠페인이 발견되었습니다. 이번 캠페인에서 특히 우려되는 점은 정상적인 웹사이트의 검색 결과를 오염시키기 위해 사용된 매우 교묘한 기법들이었다는 것입니다. 스패머들은 날로 더 지능적으로 진화하고 있습니다. 저서 『Spam: A Shadow History of the Internet』의 저자는 이에 대해 다음과 같이 언급했습니다.

관련 글 – 웹사이트에서 일본어 SEO 스팸/키워드 해킹을 제거하는 방법

한국어 SEO 스팸의 다층 구조 분석

이번 한국어 SEO 스팸은 주로 index.php, functions.php 같은 일반적인 CMS 파일을 표적으로 삼습니다. 해당 파일들 내부에는 base64 형식으로 코드가 숨겨져 있습니다. base64를 디코딩하면 그 안에 또 한 겹의 난독화가 숨어 있음을 확인할 수 있습니다.

한국어 SEO 스팸이란 무엇이며, 어떻게 제거할 수 있을까?

이미지에서 볼 수 있듯이 해커들은 "Signature For Report"라는 주석을 심어 코드를 분석하려는 사람들의 주의를 분산시켰습니다. 하지만 추가로 디코딩하면 이번 한국어 SEO 스팸 캠페인 전체의 작동 방식이 드러납니다. 그 핵심은 다음과 같습니다.

  • 한국어 스팸 키워드를 외부에서 가져옵니다.
  • 가져온 키워드를 캐싱합니다.
  • 클로킹(cloaking) 기법으로 방문자마다 다른 콘텐츠를 보여줍니다.

관련 글 – Magento, OpenCart & Prestashop 웹사이트가 SEO 스팸에 감염되었나요?

한국어 SEO 스팸의 구성 요소

스팸 콘텐츠 가져오기

해커들은 이번 한국어 키워드 해킹의 콘텐츠를 가져오기 위해 hxxp://god.sm79[.]xyz/api.php?g=gitt 링크를 사용했습니다. 이 링크에 접속하면 아래 이미지처럼 base64로 인코딩된 콘텐츠가 반환됩니다.

한국어 SEO 스팸이란 무엇이며, 어떻게 제거할 수 있을까?

이를 디코딩하면 긴 목록의 한국어 키워드와 삽입(injection) 유형이 담긴 데이터가 나타납니다.

한국어 SEO 스팸 콘텐츠의 설정 배열

hxxp://god.sm79[.]xyz/api.php?g=gitt에서 가져온 콘텐츠에는 수많은 배열이 포함되어 있으며, 스패머들은 이를 활용해 다양한 형태의 스팸을 제작·확산시킵니다. 이 링크에서 확인되는 주요 배열은 다음과 같습니다.

1. 스팸 룰(spam rules)용 설정 배열입니다. 무려 약 199개의 스팸 규칙이 담겨 있어 스팸 소재가 고갈되지 않도록 설계되어 있습니다!

한국어 SEO 스팸이란 무엇이며, 어떻게 제거할 수 있을까?

2. 사용자를 리다이렉트하는 데 사용되는 도메인 배열입니다.

한국어 SEO 스팸이란 무엇이며, 어떻게 제거할 수 있을까?

3. 공격 대상 키워드 약 900개 이상(한 배열에는 309개, 다른 배열에는 608개)으로 구성된 배열입니다. 대표적인 키워드로는 "call girls for travelers(출장 서비스)", "online gambling(온라인 도박)", "off-white merchandise(명품 의류)" 등이 있습니다.

한국어 SEO 스팸이란 무엇이며, 어떻게 제거할 수 있을까?

타겟 지역화

이번 한국어 SEO 스팸 캠페인은 한국에서 발생한 트래픽만을 표적으로 삼습니다. 아래 스팸 코드 조각을 보면 더 명확하게 이해할 수 있습니다.

if(strpos(strtolower(@$_SERVER['HTTP_REFERER']), ".kr") !== false ||
strpos(strtolower(@$_SERVER['HTTP_ACCEPT_LANGUAGE']), "ko") !== false){
...
die('<!DOCTYPE html><html><body><script>document.location=
("$sc_arr[0]");
</script></body></html>');
}

코드 첫 줄은 요청이 한국 검색엔진 버전, 즉 ".kr" 도메인에서 시작되었는지 확인합니다. 세 번째 줄은 사용자의 브라우저 기본 언어가 한국어("ko")인지 검사합니다. 두 조건이 모두 충족되면 해당 요청은 리다이렉트됩니다. 또한 앞서 가져온 스팸 콘텐츠에는 한국 도시 목록 배열이 포함되어 있어, 도시별로 스팸 콘텐츠를 개인화할 수도 있습니다.

한국어 SEO 스팸이란 무엇이며, 어떻게 제거할 수 있을까?

SERP가 한국어 SEO 스팸으로 오염되었나요? 채팅 위젯으로 메시지를 남겨주세요. 지금 바로 사이트 복구를 도와드리겠습니다.

낡은 수법, 새로운 기교

한국어 SEO 스팸은 일본어 SEO 스팸과 여러 면에서 유사합니다. 예를 들어 한국어 SEO 스팸 역시 전 세계 수많은 사이트에 스팸성 도어웨이(doorway) 페이지를 생성합니다. 저렴한 의약품을 판매하려 한다는 점도 같고, 일본어 SEO 스팸과 마찬가지로 감염된 사이트의 소유권을 주장하기도 합니다.

하지만 이번 한국어 SEO 스팸 캠페인이 특별한 이유는, 감염되지 않은 정상 웹사이트의 검색 결과까지 오염시키는 새롭고 놀라운 방식을 사용했다는 데 있습니다. hxxp://god.sm79[.]xyz/api.php?g=gitt에서 가져온 콘텐츠의 설정 배열 중 하나에는 약 500개의 무작위 사이트 목록이 포함되어 있으며, 이들 사이트의 URL은 https://example.com/?s=[검색어] 형식으로 저장되어 있습니다. URL 끝의 "/?s=검색어"는 WordPress 사이트에 특정 쿼리의 검색을 요청하는 역할을 합니다.

공격자들이 한 일은 바로 이 무작위 사이트들을 한국어 스팸 키워드에 연결한 것입니다. 앞서 말했듯이 이 사이트들은 감염되지 않았기 때문에 해당 한국어 키워드에 대한 실제 검색 결과는 존재하지 않습니다. 그러나 '결과 없음(not found)' 페이지 자체에 해당 키워드가 포함되어 있었고, 결국 Googlebot은 이 사이트들을 해당 키워드로 색인·순위화해버린 것입니다.

더 잘 이해하기 위해 아래 예시를 살펴보세요.

한국어 SEO 스팸이란 무엇이며, 어떻게 제거할 수 있을까?

이 페이지는 단순히 검색어를 찾을 수 없다는 안내만 하지만, 동시에 스팸 키워드가 포함된 전체 검색어를 함께 담고 있습니다. 또한 페이지에는 이번 스팸 캠페인에서 홍보되는 사이트 gmvcs[.]com의 이름도 포함되어 있습니다. 따라서 이 사이트를 구글에서 간단히 검색해봐도 수백만 개의 색인된 페이지가 노출될 수 있습니다. 실제로는 그 어느 페이지에도 해당 검색어가 존재하지 않음에도 말입니다. 결국 이는 정상 사이트의 SERP를 수많은 스팸 키워드와 홍보 사이트로 오염시켜 네거티브 SEO(negative SEO)를 유발하며, 해당 웹마스터들에게는 그야말로 악몽과도 같은 상황을 초래합니다!

대응 및 제거 방법

NoIndex 설정

내 웹사이트의 검색 결과 오염을 방지하려면 검색 결과 페이지에 다음 태그를 삽입하세요.

<meta name="robots" content="noindex">

또 다른 방법은 robots.txt 파일로 색인을 차단하는 것입니다. 사이트 루트 폴더에 robots.txt 파일을 생성하고 다음 코드를 추가하면 됩니다.

User-agent: *
Noindex: /

WordPress 플러그인을 통해서도 동일한 설정이 가능합니다.

Astra로 웹사이트 보호하기

Astra는 사이트의 보안 취약점, 특히 한국어 SEO 스팸과 관련된 no-index 문제까지 탐지할 수 있습니다. 또한 Astra와 같은 종합 보안 솔루션을 갖추면 향후 유사한 스팸 공격으로부터도 웹사이트를 지킬 수 있습니다. 아울러 Astra 방화벽은 스팸 시도, SQLi, XSS, CSRF, 악성 봇 등 수백 가지 일반적인 웹 공격을 차단합니다. 지금 바로 Astra의 보호 계층을 웹사이트에 추가해 보세요!