검색 어뷰징 패턴 및 필터링 방법

Posted at 2007. 11. 25. 21:12 // in 구글이야기 // by 김윤수


얼마 전에 검색하다가 경험했던 황당한 사례와 이런 어뷰징 패턴 및 스팸을 막을 수 있는 방법을 나름대로 생각해 본 것들이다.

1. 사례 #1
어뷰징 패턴:
구글 검색 결과로 상당히 상단에 위치했었는데 막상 클릭했더니 검색 결과와 관련 있는 기사가 잠시 보이더니 몇 초 후에 물건 구매를 유도하는 페이지로 자동으로 Redirect 됐던 경험. (검색어랑 그 페이지 URL, Redirect 됐던 URL 등을 기억해 놓았어야 하는데 안타깝다. 증거를 제시하지 못하는게...)

패턴 분석:
아무래도 검색 결과에 직접 노출된 페이지는 유명한 페이지를 그대로 복사해서 SEO 기법을 적용해 검색 엔진이 읽기 쉽게 하고, delic.io.us, digg 같은 social network service 를 이용해 해당 페이지를 노출시켜 놓음으로써 몇 개의 외부 링크를 받고, 제목이나 키워드에 매칭되는 텍스트를 특별한 색이나 큰 폰트로 강조해 놓는다면 구글 검색 엔진 안에서는 상당히 높은 PageRank 를 받을 수 있을 듯함. 그런 후 특정 페이지로 자동으로 Redirect 되는 코드를 넣어 놓는다면 이런 효과를 얻을 수 있을 것임

필터링 방안:
몇 초만에 다른 페이지로 Redirect 되도록 해 놓은 페이지는 무조건 검색 결과에서 제외시킨다. 다른 페이지로 Redirect 되도록 해 놓은 페이지는 <HEAD> 의 <META> 태그를 분석하면 알 수 있을 것이다. 무조건 검색 결과에서 제외시키는 근거는 ? 어차피 다른 페이지로 넘어가게 했다면 해당 페이지는 유용한 정보가 없는 것으로 판단해도 무방할 것이다. 단, Redirect 된 페이지는 무조건 검색 결과에서 제외하는 것이 아니라 일정 기간 동안 링크를 받는 수를 Tracking 하다가 그 일정 기간 동안 링크를 받지 못하는 경우에는 Redirect 된 페이지도 검색 결과에서 제외시킨다.

사족:
물론 이렇게 하면 모든 Redirect 당하는 페이지에 대해 일정 기간 동안 링크를 받는 개수를 모니터링 해야 하므로 processing overhead 가 상당할 것이다. 근데 검색 결과가 좋아야 검색 엔진을 사람들이 찾아와 쓸 것이므로 이런 건 당연히 해결해야 한다. 검색 트래픽으로 먹고 사는 검색 엔진이라면 당연히 해결해야할 운명이다. 자신을 검색 엔진으로 규정하고 있지 않은 회사라면 ? 이렇게 하지 않아도 된다.

2. 사례 #2
어뷰징 패턴:
얼마전 네이버에서 애드센스라는 키워드로 검색했더니 어떤 사람이 자기 카페에 모든 글의 제목과 본문에 '애드센스'라는 키워드로 도배를 해 놓았더라. 그런데 그게 검색 순위에서 제일 상단에 있었다.

패턴 분석:
이건 솔직히 분석하고 자시고 할 것도 없다. 그냥 네이버의 약점을 이용하는 방법이 아닌가 생각한다. 무조건 키워드가 많이 매치된다고 검색 순위 상단에 위치시키는 건 너무 어뷰징당하기 쉬운 방법이다.

필터링 방안:
이건 이렇게 하면 어떨까 ? 어뷰징을 시도하는 문서를 제외한 다른 문서들을 모두 분석해서 그 안에 있는 단어(또는 키워드 ?)들의 나오는 회수로 구성된 확률분포를 구한다. 그럼 아마 정규분포 비슷한 그래프가 나오지 않을까 생각한다. 이런 확률분포의 평균치를 구한다. 이것도 아마 정규 분포 비스한 그래프가 나오지 않을까 생각한다. 새로운 데이터가 검색 DB에 들어옴에 따라 이 데이터는 물론 계속해서 update 해야할 것이다. 이 확률분포와 일반 문서를 비교하여 일반 문서의 단어 분포가 이 확률분포와 너무 동떨어져 있다면(예를 들어 특정 키워드만 50% 정도 반복되고 나머지는 거의 나오지 않는다던지) 그 문서는 어뷰징 문서로 규정하여 검색 매칭 우선 순위를 떨어뜨린다.

사족:
왜 검색 DB에서 제외하지 않고, 검색 결과에서 제외하나 ? 혹시라도 그 문서에 유용한 정보가 있을 확률도 전혀 배제할 수 없으니까. 게다가 알고리즘으로 판단하면 전혀 오류 가능성이 없다고 볼 수는 없으니까. 확률분포와 너무 동떨어져 있다라는 건 어떤 정도를 의미하나 ? 그 정도는 tuning 해야 하는 파라미터이다. 실제 운용하면서 적당한 값을 찾아야 할 것으로 생각된다.

3. 사례 #3
어뷰징 패턴:
이건 자세히 설명할 필요 없이, 글을 직접 보는 게 나을 듯.
'구글 검색엔진', 새로운 스팸 통로?
[머니투데이 성연광 기자][구글 검색 악용한 스팸메일 급증...검색결과 클릭하면 악성 사이트 접속] 스패머들이 이제 구글 검색까지 스팸 공격의 도구로 이용하고 있다. 시만텍이 13일 발표한 11월 전세계 '시만텍 월간 스팸보고..
패턴 분석:
메일 안에 특정 검색어를 입력하도록 유도하는 문구를 넣어 놓고, 그 검색어를 검색한 결과를 클릭하면 스팸 페이지가 뜨도록 하는 패턴. 특히 복잡한 검색어 패턴을 사용할 수 밖에 없다. 왜냐면 이런 페이지는 웬만해서는 노출시키기도 쉽지 않고, 외부에서 링크도 거의 못받을 것이 뻔하기 때문이다.

필터링 방안:
이런 문서 필터링은 그냥 Target 문서가 스팸 문서 패턴을 보일 때는 그냥 검색 결과 우선 순위를 낮추면 될 듯하다. 스팸 메일 필터링과 비슷한 알고리즘을 사용하면 될 것이다.

사족:
그렇담 스팸 메일 필터링은 어떻게 하지 ? 스팸 메일 필터링하는 방법은 다음 글을 시작으로 한 번 찾아보시길. 저도 잘 모른다.

새로운 스팸의 유형 - 이미지 스팸
procmail 을 이용한 스팸 메일 필터링
Bayesian spam filtering - Wikipedia
alt.spam FAQ or "Figuring out fake E-Mail & Posts".

이 중에 베이시안 필터링에 대해 조금만 자세히 얘기한다면, 다음과 같은 기본적인 수학 정리를 기반으로 하고 있다.

사용자 삽입 이미지

베이시안 필터링 기법의 이론적 배경

즉, 어떤 단어들로 구성된 이메일이 스팸일 확률은 스팸 메일에 그 단어들이 나오는 확률 x 전체 이메일 중에 스팸 메일의 비율 / 그 단어들이 임의의 메일에서 나오는 확률입니다.

좀 더 쉽게 설명하자면 이메일들은 당연히 어떤 단어들로 구성되어 있을텐데요. 그 단어들 중에 스팸 메일에 자주 나오는 단어들이 있을 것이라는 가정하에서 시작합니다. 어떤 메일이 몇 가지 단어들로 구성되어 있는데 그 메일이 스팸일 확률은 이미 스팸 메일로 분류된 메일들에서 그 단어들이 어떤 빈도로 나왔었는지에 대한 비율에 전체 이메일 중 스팸 메일의 비율을 곱하고 그 값을 다시 전체 이메일들에서 그 단어들이 나오는 비율로 나눈 것입니다.

이렇게 하기 위해서는 먼저 시스템을 학습을 시켜야 합니다. 즉, 스팸 메일이라고 생각되는 메일들을 분석해서 그 안에 있는 단어들을 끄집어 내고, 그 단어들이 스팸 메일에서 나오는 비율을 정리해 놓는 것이지요. 그리고 나서 사용자들이 특정 메일을 스팸 메일이냐 일반 메일이냐로 분류하느냐에 따라 계속해서 학습을 시킬 수도 있겠지요. 전체 이메일들에서 그 단어들이 나오는 비율은 시스템에서 계속해서 계산하고 있으면 될 것이구요.

상당히 강력한 방법이기는 할 것 같은데, 스패머들이 정상 메일인 것처럼 메일 본문에 스팸과 관련 없는 정상적인 메일에 나오는 단어들을 의미 없이 많이 넣어둘 경우에는 베이시안 필터를 통과할 수 있다고 하네요. 그렇게 되면 사용자들이 다시 그걸 스팸으로 분류하게 되고, 그런게 반복되다 보면 전체 확률 시스템이 무너질 수도 있답니다.

이렇게 정리해 놓고 보니, 구글 검색이랑 지메일에서는 어떤 필터링 방법을 쓰고 있을지 궁금하군요. 그런 필터링 방법의 구체적인 내용은 공개하지 않겠죠 ? 공개하면 스패머들이 그걸 역으로 이용해서 필터를 통과할 수 있는 방법을 고안할테니까요.

정말 스팸은 골치덩이이긴 하지만 스팸과 이를 막으려는 노력은 계속될 수밖에 없다는 생각이 드네요.

여러분은 이런 사례 말고 다른 사례를 보신 적 있으신가요 ?