지난 포스트에서 자동화 프로그램인 Selenium을 이용하여 크롤러를 만들어 보았는데요, 이번에는 반대 측면에서 자동화 프로그램의 사용을 어렵게 하는 CAPTCHA를 소개 해 볼까 합니다.
CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart, 완전 자동화된 사람과 컴퓨터 판별, 캡차)는 HIP(Human Interaction Proof) 기술의 일종으로, 어떠한 사용자가 실제 사람인지 컴퓨터 프로그램인지를 구별하기 위해 사용되는 방법이다. – 라고 위키백과에 서술되어 있는데요, 현재의 컴퓨터 (인공지능) 기술로는 인식이 어렵도록 작성한 문제를 내고, 답안을 제출 받도록 하여 자동화된 기계 프로그램을 무력화 하는 기술입니다.
비즈스프링에서 자동화 프로그램을 무력화하기 위해 CAPTCHA를 이용한 사례를 소개해 보겠습니다.
비즈스프링 홈 페이지 내 여러 메뉴에서는 여러 사업 주제에 대한 문의를 아래와 같이 폼메일로 받고 있습니다. (현재는 하단에 CAPTCHA가 적용되어 있습니다.)
보통은 고객이 문의를 접수하게 되면, 접수가 잘 되었고, 연락을 드리겠다는 피드백 메시지를 문의 고객과 담당자에게 이메일로 자동 전송하게 됩니다. 이때 프로그램에서는 등록된 이메일 정보의 형식이 맞는지만 검사하게 되는데, 이것만으로는 실제 고객의 것인지 위조된 것인지 판별이 매우 어렵습니다. 이렇게 프로그램이 이메일을 전송하는 기능을 악용하여 해커들은 스팸/공격용 메일을 보내는데 이용하게 됩니다.
어느 날부터 해외의 사용자로부터 위와 같이 동일한 형식의 게시물(문의 메일)들이 접수되기 시작했고, 내용을 확인해 보니 신용카드 영수증을 가장하여 악성코드를 설치 링크를 발송하는 피싱 메일을 보내고 있습니다. 문의를 접수한 고객에게 응답 메일을 발송하는 기능을 악용하여 스팸을 보내고자 하는 대상 이메일 주소를 회신 주소로 등록하여, 비즈스프링의 메일 시스템이 악성 메일 발송을 대행하게 된 케이스입니다.
보통 해커들은 위와 같은 취약점을 찾고 나서는 자동화 프로그램을 이용하여 반복적으로 공격을 진행합니다. 본 사례에서도 웹서버 로그를 살펴 본 결과 문의 항목을 입력하는 폼페이지가 생략된 채, 문의 항목 폼이 제출되는 서브밋 페이지만 호출되는 것을 확인하였고 자동화 프로그램 사용이 의심되었습니다. 이를 막기 위해서 처음에는 자동화 프로그램의 공격 근원지 – IP를 찾고, 방화벽을 이용하여 네트워크 대역을 차단하는 방법을 사용하였습니다. 하지만 약 200여 개의 네트워크 대역을 매일 찾아서 막는데도 불구하고, 어느 사이에 또 메일이 발송되는 것이 반복됩니다. IP를 조회 해보면 특정 국가가 아닌 유럽, 북미, 남미, 아시아… 전 세계의 수많은 소위 좀비 PC가 해킹에 활용되고 있기 때문입니다. 이제는 근원지를 찾아 방화벽으로 막는 방법으로는 원천적인 차단이 불가능하다는 것을 알게 되었습니다.
위와 이미지와 같이 네이버 클라우드에서 (유료) 제공하는 이미지/음성 형식의 CAPTCHA API를 이용하였습니다. 실제 적용은 두 개 페이지의 코드를 수정함으로써 쉽게 적용할 수 있었습니다. 고객 문의 사항을 입력받는 폼페이지, 입력 완료된 폼을 제출하는 서브밋 페이지 코드를 수정합니다.
1. 폼 페이지에서는 화면에 출력할 캡챠 이미지를 API로부터 가져오는 부분을 구현하며, 이때 일회용으로 발급되는 키도 입력 폼에 같이 (숨겨진 입력으로) 저장합니다.
2. 서브밋 페이지에서는 캡챠의 답안과 일회용 키가 제출되었는지 확인하고, 답안과 키를 CAPTCHA API에 제출하여 유효성을 검증 후, 기존의 메일 프로그램이 작동하도록 수정합니다.
이와 같이 프로그램을 변경함으로써, 자동화(해킹) 프로그램이 서브밋 페이지에 자동화된 값을 제출하더라도 메일이 발송하지 않도록 수정되었고, 해킹 시도는 차단되었습니다. 물론 아직은 사람이 손으로 입력하는 것은 막을 수는 없습니다. 하지만 확률이 낮은 피싱 메일을 해커가 일일이 수동으로 입력하는 노력을 하지는 않을 것으로 예상됩니다.
폐쇄적인 어떤 시스템에서 데이터를 크롤링 할 필요가 있었고, CAPTCHA를 무력화하기 위해 인공지능을 이용해 보려고 시도해 본 적이 있습니다. 이미지/문자 인식과 관련된 AI가 많은 수준을 따라왔지만 CAPTCHA를 무력화하기에는 부족한 면이 있었고, 아직까지는 막는 쪽의 승리로 보입니다.
자동화 프로그램의 이용은 단순 반복 업무의 자동화와 같이 긍정적인 측면도 있는 반면에, 위의 악성 메일 발송 사례와 같이 해킹으로 악용하는 부정적인 측면도 있습니다. 이를 막기 위한 시스템도 없어서는 안 될 존재입니다.
기술이 발전하면서 문자 인식이나 음성 인식의 AI가 고도화되고, 자동화 프로그램이 CAPTCHA를 뚫을 확률이 높아질 것입니다. 하지만, 이를 막기 위한 기술도 가만히 있지는 않겠죠.
최근 비즈스프링이 겪은 피싱 메일 공격과 그에 대응하기 위한 노력 및 CAPTCHA 프로그램에 대해 알아보았습니다. 언제 어디서 어떻게 들어올지 모르는 공격에 조심하시기 바라며, 오늘도 안전하게 업무를 보실 수 있기를 바라겠습니다.
ad@bizspring.co.kr / 02-6919-5516
마케팅에서의 데이터 활용 기술과 인사이트
No.1 Data Partner for Data-Driven Growth
비즈스프링
공식 블로그 | 페이스북 | 네이버 블로그 | 유튜브 | 트위터 | 슬라이드쉐어