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

Posted at 2007.11.25 04: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 전체 이메일 중에 스팸 메일의 비율 / 그 단어들이 임의의 메일에서 나오는 확률입니다.

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

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

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

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

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

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

  1. 너른호수

    2007.11.25 06:54 신고 [수정/삭제] [답글]

    Gmail도 기본적으로는 베이지언 필터링 시스템을 쓰고 있지 않나... 추측하고 있습니다. :) 베이지언 필터링 시스템은 학습량이 많으면 많을수록 False-positive가 줄어드는 경향(눈에 잘 보이지 않더라도...)이 있기 때문에 시간이 충분하거나 샘플이 넘쳐날 정도로 많다면, 그리고 베이지언 기본공식 외에 다른 추가적인 변수를 반영한다면 신뢰성있는 필터링율이 나올 가능성이 높아지지요. 베이지언만 적용했다간 스팸필터링율이 엉망이 될 수 있기 때문에 대부분의 메일 서비스 사업자들은 베이지언 외에도 다른 필터를 동시에 적용하고 있습니다.

  2. META-MAN

    2007.11.25 17:54 신고 [수정/삭제] [답글]

    님의 의견은 재미있기는 한데, 구글쪽의 필터링 보다는 클라이언트쪽의 필터링으로 봐도 될거 같습니다.
    머 구글에서 필터링을 하면 좋겠지만, 섹스,폭력,테러등이 아닌 페이지들까지 사용자의 요구로 필터링 해버리면, 기술적인 문제보다도 법률적인 문제같은게 발생할 수 있을거 같습니다.
    결국 돈낸 광고만 보여주자는 말로도 될수 있으니까요...

    차라리 자신의 네트워크에 필터링을 깔아보세요~~~~
    저희 회사는 fortinet제품을 쓰는데, 짜증날 정도입니다.
    적당히 놔주어야지 쓸만하겠죠, 구글의 검색이 회사의 파이어월처럼 각박해진다면 구글도 밥숟가락 놓아야 할지도 ~~~~....

    구글 검색을 통한 남의것 엿보기도 구글성장의 원동력중 하나라고 생각합니다.

    Fortinet Web Filtering -> http://www.fortinet.com/solutions/web_filtering.html


    글쓰는 도중 대충 생각한건데 예상외로 구글의 관음증적 그리고 빅브라더적 감시와 엿보기에 대한 글이 엄청나군요
    ==> http://www.google.com.au/search?hl=en&q=google+peeping+tom&btnG=Search&meta=

    • 김윤수

      2007.11.25 21:25 신고 [수정/삭제]

      구글의 빅브라더적 감시와 엿보기...에 대한 우려가 높아질 수 밖에 없는 것 같습니다. 너무 많은 데이터들을 검색의 영역으로 끌어들일려는게 아닌가라는 생각이 저도 많이 들거든요. 위 필터링 기법들도 결국 내용을 어느정도 분석해야 된다는 얘기인데... 그건 시스템이 우리 메일을 훔쳐본다라고 이해할 수도 있는 거잖아요. 당연히 Privacy 이슈가 발생할 수 밖에 없을 것 같습니다. 좋은 의견 감사합니다. ^^

  3. 샤핑의왕

    2009.01.10 22:57 신고 [수정/삭제] [답글]

    좋은글 잘 읽고 갑니다.

댓글을 남겨주세요.