 |
|
난이도 : 중급 Uche Ogbuji, Partner, Zepheira, LLC
원문 게재일 : 2008 년 12 월 02 일 번역 게재일 : 2009 년 3 월 10 일 웹 상에서 스팸은 오늘날 웹 개발자에게 가장 큰 위협 요소 중 하나입니다. 스팸은
해가 갈수록 더욱 더 교활한 방법으로 연결되어 있는 모든 Web 2.0 페이지를 통해 무차별적으로
광고 메일을 뿌리고 자아 증식하고 있습니다. 설상가상으로 스팸을 사용해서 malware를 배포하는 경우도
늘어나고 있습니다. 군비 경쟁이 시작되었기 때문에 웹 개발자들은 웹 사이트에서 스팸과 맞서 싸울 때 사용할 수
있는 기본적인 도구를 알고 있어야 합니다. 2회에 걸쳐 연재되는 이 기사에서는 스팸 차단 기술에 대해
자세히 설명합니다. 이 첫 번째 기사에서는 방문자가 스패머인지 여부를 평가하는 방법과
스팸을 차단하도록 사이트 워크플로우를 구성하는 방법에 대해 설명합니다.
1994년, National Science Foundation에서는 인터넷 상에서의 광고 금지를 중단했다. 당시는
이메일과 Usenet이 통신 포럼의 주류를 이루고 있고, Gopher 등의 단순한 게시 시스템이 사용자 기반을 넓히려고
하던 시절이었다. 웹은 이때까지도 아직 등장하지 않았다. 바로 그 해에 Canter & Siegel이라는 법률 회사에서
Perl 프로그래머를 고용하여 "그린 카드 복권" 서비스를 광고하는 첫 번째 대량 상업 스팸을 Usenet에 올렸으며,
이 스팸은 6,000개 이상의 뉴스그룹으로 순식간에 퍼져 나갔다. 그들은 악명을 얻어 유명해진 후 스팸을 만들어주는
사업에 진출하여 스팸의 장점을 홍보하고 "인터넷 마케팅"을 주제로 한 책까지 냈다. 그 이후 모든 온라인
포럼이 원하지 않는 상업 광고로 인한 피해를 입었다. 온라인 토론장으로서의 웹의 중요성이
높아지고 Web 2.0 기술로 인해 사람들이 단순히 읽는 것에 그치지 않고 쓸 수도 있는 공간이 마련되면서
스팸의 폐해도 더욱 심해졌다.
웹 스팸은 때때로 사소한 문제로 그치기도 하지만 대부분의 경우에는 치명적인 문제를
야기시킨다. 스패머는 한두 개의 메시지를 게시하는 데 만족하지 않고 원하는 대상을 완전히 압도할 때까지
스팸 메시지로 포럼을 도배한다. 스팸에는 포럼 참가자의 반감을 일으키는 춘화나 반사회적 메시지가
들어 있기도 하다. 대부분의 검색 엔진은 스팸 메시지가 들어 있거나 스팸에 연결된 사이트에 대한 링크가
포함된 페이지를 차단한다. 이는 결국 스팸이 검색 엔진의 최적화에 부정적인 영향을 주게 된다는 것을
뜻한다. 그리고 최종적인 피해는 다른 작업에 투자할 시간을 빼서 스팸을 처리하기 위해 리소스를 낭비해야
하는 웹 게시자에게 돌아가게 된다. 웹 스팸은 다음과 같은 여러 가지 형태를 가지고 있다.
- wiki에 올려져 있는 스팸 기사 및 악의적 기사
- Weblog에 올려져 있는 주석 스팸
- 포럼, 이슈 트래커 및 기타 토론 사이트에 게시된 스팸
- 리퍼러 스팸(스팸 사이트가 리퍼러를 나열한 대상 사이트로 사용자를 유인하는 경우)
- 소셜 네트워크의 잘못된 사용자 항목
웹 스팸 처리가 매우 어려움에도 불구하고 웹 개발자들은 스팸 예방 책임을 등한시하고
있다. 이 기사와 Part 2에서는 여러 종류의 웹 스팸을 차단할 수 있는 기법, 기술 및 서비스에 대해 설명한다.
스패머의 동작 온라인에서
발생하는 사람들의 행동을 분석하면 타이밍과 컨텐츠에 불규칙한 패턴이 있다는 것을 알 수 있다. 스팸은
일반적으로 Canter & Siegel에서 6,000개의 Usenet 그룹에 도배했던 Perl 스크립트 같은 프로그램에
의해 생성된다. 이러한 프로그램의 기계적 패턴을 사용하여 스패머에 대응할 수도 있다. 등록이 필요한
경우 다양한 경고 기호를 사용하여 계정에 플래그를 지정한 후 나중에 검토할 수 있다. 예를 들어 .ru,
.br, .biz 등의 최상위 레벨 도메인의 계정은 스패머와 관련되어 있을 가능성이 높다. 계정에 플래그가
지정된 경우 해당 계정의 처음 몇 개의 게시물을 일단 보류한 후 게시물을 검토하고 보류를 풀 수 있다.
플러드 제어 Wiki, Weblog 및 포럼
스패머는 수 초 내에 수십 개의 요청을 보내기도 한다. 이 경우 한 사용자나 IP 주소에서 일정 간격 내에
보낼 수 있는 요청의 수를 제한하여 피해를 최소화할 수 있다. 이 기법을 플러드 제어라고 한다. 이 방법을
사용할 때는 한 페이지가 아닌 사이트 전체에 대한 요청을 제어해야 한다. 이러한 동작 평가 기법과
다음 섹션에서 설명하는 기법들을 사용하여 스팸 외에도 웹에서 발생하는 다른 유형의 남용을 차단할 수
있다. 예를 들어 웹 메일 서비스를 호스트하는 경우 스패머가 스팸을 보낼 수 있는 계정을 대량으로 만들려고
시도하거나 온라인 경매 사이트를 호스트하는 경우 스패머가 경매 프로세스를 조작하는 프로그램을 작성할 수
있다. 신규 사용자를 등록하는 시스템이 있는 사이트라면 어디에서나 신규 사용자 중 일부가 문제를 일으키기
위해 자동 가입 방법을 찾으려고 시도하는 경우를 자주 볼 수 있다. 이러한 시도가 발생할 경우 웹 개발자는
서비스 사용자 중에 스패머가 있다는 것을 쉽게 확인할 수 있다.
워크플로우 제어 대부분의 스팸은
로보트를 이용해서 생성되기 때문에 사이트의 사용량을 보면 몇 가지 특징적인 패턴을 발견할 수 있으며
이러한 패턴을 이용해서 스팸을 차단할 수 있다. 그림 1에서는 일반적인 사람과 일반적인 로보트가 사이트에
추가할 메시지나 주석을 제출할 때 나타나는 워크플로우의 차이점을 보여 준다.
그림 1. 사람과 로보트의 일반적인 웹 워크플로우 비교
POST 요청으로 직접 접근하는 일반적인 로보트 워크플로우를 감지하여 많은 양의 스팸을 차단할 수 있다. 폼
변형 가장 먼저 확인할 사항은 요청자가 기본 폼을 로드했는지 여부이다. 이를 확인하는 한 가지
방법은 폼의 일부를 사용자에게 표시하거나 숨기는 방식으로 변경하는 것이다. 일반적인 속임수는 폼 필드의
이름을 변경하는 것이다. 날짜, 사용자 IP 등의 수정자를 기본 이름에 사용하여 만든 필드 이름(예:
content_081010_68_45_76_45)과 함께 기본 컨텐츠가 담긴 텍스트 영역을 사용자에게
보낼 수 있다. 변형 필드 이름의 재사용을 허용하지 않을 수 있으며 일부 사용자에게 게시할 때 상자를 선택하도록
요청하여 변형을 표시할 수도 있다. 이 경우 다른 패턴이 나타나면 사용 중인 IP를 의심해 볼 수 있다.
임의 값 테스트 임의 값은 폼이 포함된
각 페이지 보기에 대해 생성되는 추측하기 어려운 값이다. 그런 다음 해당 임의 값을 폼 제출의 필드 중 하나로
요청한다. 로보트는 폼 제출을 바로 POST하려고 시도하지만 HTML 페이지를 로드하지 않았기 때문에 예상
임의 값을 알지 못한다. 여러 가지 방법으로 임의 값 테스트의 세부사항을 조정할 수 있다. 모든 경우에
임의 값을 재사용할 수 없도록 설정할 수 있다. 그렇게 하지 않으면 스패머가 쉽게 우회할 수 있다. 페이지가
요청된 날짜 또는 시간과 IP 주소를 사용하여 임의 값을 생성하고 임의 값의 유효성을 검증할 수 있다. JavaScript
감지 일부 로보트는 페이지를 로드한 후 임의 값을 읽어서 임의 값 테스트를 무력화하려고
시도한다. 부주의한 스패머의 경우 필수 정보를 가지고 있다고 해서 로보트에서 POST를 즉시 보내기도
한다. 사람이 폼 입력을 채운다고 가정할 때 폼 입력을 완성할 수 없는 짧은 시간 간격을 사용하여 폼이
로드된 직후 제출된 폼에 플래그를 지정할 수 있다. 이 기법은 플러드 제어 테스트와 관련된다. 주의를
기울여서 만든 로보트라고 하더라도 폼 페이지의 JavaScript를 실행하는 로보트는 많지 않다. 이 특징을
여러 가지 방법으로 사용할 수 있다. 무엇보다도 폼 페이지의 실제 컨텐츠에서 임의 값을 생성하지 않는
것이다. 대신 폼 페이지의 보조 JavaScript 요청을 사용하여 임의 값을 생성한다. 사용자가 기본 컨텐츠
필드에 데이터를 처음 입력할 때 사용할 이벤트 처리기를 설정할 수 있다. 그림 2에서 이를 설명한다.
그림 2. JavaScript를 사용하여 임의 값 테스트 개선
이 기법을 사용할 때 발생하는 주요 문제는 일부 사용자가 JavaScript를 사용하지 않는다는
것이다. 실제로 일부 회사 정책에서는 JavaScript를 사용하지 않도록 요구하고 있다. 따라서 이 문제를
해결하려면 사용자가 스스로 인증할 수 있는 보조 수단을 제공해야 한다. 예를 들어 JavaScript를 호출하지
않는 사용자에 대해서만 폼 변형을 사용하는 등의 방안을 마련해야 한다. 반면 일부 스패머는 브라우저
엔진 내에서 스크립트를 사용하여 공격을 실행하기 때문에 JavaScript 호출이 발생한다. 이 경우에는 스팸
감지 과정 중에 JavaScript 테스트를 절대적인 판단 요소가 아닌 일종의 가중 요소로 사용할 수 있다.
인간
지수 테스트 임의 값 테스트 변형이 웹 스팸을 차단하는 방법으로 많이 사용되고 있다. 사람에게는
쉽지만 로보트에게는 까다로운 시각적 테스트를 POST 폼에 포함시키는 방법이다. 그 중 가장 많이 사용되는
방법이 CAPTCHA이다. 이 테스트에서는 사용자가 읽고 폼 필드에 입력해야 하는 영숫자 문자를 보여 주는
이미지를 제공한다. 스패머는 광학 문자 인식을 사용하여 CAPTCHA를 뚫으려고 시도하지만 이들 이미지에는
대개 상당히 왜곡된 부분이 포함되어 있다. 그림 3은 CAPTCHA 이미지의 예이다.
그림 3. 사용자가 "smwm"이라고 응답해야 하는 CAPTCHA 이미지
이 예처럼 약한 수준의 왜곡이 적용된 경우 스패머가 CAPTCHA를 뚫을 수 있었다. 결국 스패머를
막기 위해 그림 4처럼 더욱 높은 수준의 왜곡이 사용되고 있다.
그림 4. 사용자가 "following finding"이라고 응답해야 하는 CAPTCHA 이미지
여기에는 몇 가지 문제점이 있다. 첫 번째 문제점은 스패머를 막기 위해 CAPTCHA의 왜곡이
심해질수록 사람들이 읽기 어려워진다는 것이다. 시각 장애인처럼 CAPTCHA 이미지를 전혀 볼 수 없는 사람들도
있기 때문에 이 기법을 사용할 경우 액세스 가능성이 낮아질 뿐 아니라 합법적이지 못한 상황까지도 발생할
수 있다. 이러한 난제가 있음에도 불구하고 CAPTCHA는 가장 유명한 스팸 차단 기법 중 하나가 되었다. 텍스트
확인 액세스 가능성 문제를 피할 수 있는 비슷한 기법은 임의의 텍스트 질문을 사용자에게
제시하는 것이다. 사이트에 특정 도메인이 있다면 해당 도메인에 대한 기본적인 지식을 묻는 질문을
제시할 수 있다. 의학 뉴스 및 정보 사이트의 경우 "호흡과 연관된 주 기관은 무엇입니까?"와 같은 질문을
제시하고 "폐"라는 대답을 기대할 수 있다. 이 기법을 사용할 경우에는 여러 가지 변형된 질문을
사용해야 하고 사람들은 일반적으로 대답할 수 있지만 로보트는 추측할 수 없는 단어를 선정해야
한다는 점이 중요하다.
결론 사람들에게
자신의 게시물을 미리 보도록 하면 이 기사에서 설명한 모든 기법의 난해도를 높일 수 있다. 이 워크플로우
단계를 추가하기만 해도 일부 스패머를 잡을 수 있으며 좀 더 주의를 기울이면, 예를 들어 JavaScript를
사용하여 일부 사용자에 대한 미리보기를 자동화하면 사용자의 불편을 최소화할 수 있다. 워크플로우에 따라
CAPTCHA, 폼 변형, 임의 값 등의 기법을 적용하여 대부분의 유효한 사용자가 알아차릴 수 없는 방법으로
스패머를 곤경에 빠뜨릴 수 있다.
동작을 평가하고 워크플로우를 관리하기만 해도 스팸을 줄일 수 있지만 완전히 제거할 수는
없다. 예를 들어 일부 스패머는 사람을 고용하여 이 기사에서 설명한 모든 통제를 뚫기도 한다("mechanical
turk" 공격이라고도 함). 스패머는 인건비가 낮은 사람에게 비용을 지불하고 대상 사이트로 가서 스팸 메시지를
직접 남겨두도록 시킨다. 대부분의 교활한 스팸 로보트뿐 아니라 mechanical turk까지도 해결하려면 여러분처럼
스팸을 싫어하는 사람들이 모인 대규모 커뮤니티의 도움을 받아야 한다. 이를 실현하는 방법에 대한 내용은 이
시리즈의 다음 기사에서 설명하겠다.
참고자료 교육
토론
필자소개  | 
|  | Uche Ogbuji는 차세대 웹 기술에 특화된 솔루션 회사인 Zepheira, LLC의
파트너로 XML, RDF 및 지식 관리 애플리케이션용 오픈 소스 플랫폼인
4Suite와 후속 플랫폼인 Akara의
책임 개발자로 활동하고 있다. 팀 웹 개발을 위한 Jacqard
애자일 방법론과 Versa RDF 쿼리 언어에 대한 연구에도 참여하고 있다. 나이지리아 출신의 컴퓨터 엔지니어이자 작가인 그는 미국 콜로라도의 볼더
지역에서 살고 있다. Ogbuji의 Weblog Copia에서 더
많은 정보를 찾아볼 수 있다. |
기사에 대한 평가
 |
| 이 문서 북마킹 하기
|
|