소개
Cloudflare 봇 매니지먼트 플랫폼을 구축하는 것은 멋진 경험이었습니다. 분산형 시스템, 웹 개발, 머신 러닝, 보안 및 연구(그리고 그 사이의 모든 분야)를 한데 결합하는 동시에 강력한 동기로 무섭게 적응하는 공격자들과 맞서는 일이기 때문입니다.
이 글은 Cloudflare의 지속적인 봇 매니지먼트 노력을 담은 이야기이자 그 바탕에서 작동하는 감지 메커니즘을 다룬 블로그 시리즈의 서론입니다. 먼저 봇 관리 분야의 용어들을 정리한 다음, 제품 및 기술 요구 사항을 살펴보고 Cloudflare가 구축한 플랫폼의 개요를 소개하겠습니다. 이어서 봇 매니지먼트 플랫폼을 구동하는 감지 메커니즘에 대한 세부 정보를 공유하며 마무리하겠습니다.
봇 매니지먼트 분야의 용어부터 알아봅시다.
용어 정의
봇(Bot) - 네트워크 상에서 컴퓨터 시스템이나 사용자와 상호작용할 수 있는 자율 프로그램으로, 인간 사용자의 행동을 모방하거나 대체할 수 있고 반복적인 작업을 인간 사용자보다 훨씬 빠르게 수행합니다.
좋은 봇(Good bot) - 봇이 상호작용하는 비즈니스에 유용한 봇입니다. (예: Googlebot, Bingbot과 같은 검색 엔진 봇이나 Facebook 봇과 같은 소셜 미디어 플랫폼 상의 봇)
악성 봇(Bad bot) - 악의적인 행동을 수행하여 궁극적으로 비즈니스에 피해를 입히도록 설계된 봇입니다. (예: 크리덴셜 스터핑 봇, 서드파티 스크래핑 봇, 스팸 봇, 스니커봇)
봇 매니지먼트(Bot Management) - 봇 매니지먼트 솔루션은 봇 활동을 감지하고 건전하거나 불건전한 봇 활동을 구분하며 불건전한 활동의 출처를 확인하는 등의 기능을 수행하여 유용한 봇의 웹 사이트 액세스를 허용하는 한편 무단 또는 악의적인 봇의 트래픽은 차단하는 활동입니다.
WAF - 일련의 보안 규칙을 기반으로 네트워크 트래픽을 모니터링하고 컨트롤하는 보안 시스템입니다.
수집 요구 사항
Cloudflare는 그동안 악의적인 봇이 웹 사이트에 액세스하거나 API를 오용하는 것을 즉시 감지하여 막아내는 동시에 그러한 봇이 발생시키는 탄소 비용을 상쇄함으로써 환경을 보호해 왔습니다. 그러나 시간이 지남에 따라 다양한 봇 퇴치 기술을 통합하고 고객 경험을 간소화할 전용 플랫폼이 필요하다는 점이 분명해졌습니다. Cloudflare는 이 새로운 플랫폼을 설계할 때 다음과 같은 핵심 요구 사항에 중점을 두었습니다.
복잡하지 않고 완전한 사용자 경험 - 고객은 웹 사이트, 모바일 응용 프로그램 또는 API를 보호하는 봇 매니지먼트 기능을 버튼 클릭 한 번으로 간편하게 켜거나 끌 수 있습니다.
신뢰성 - 고객은 웹 사이트 방문자의 신원을 신뢰할 수 있는지 확인하고 싶어 하므로, 해당 신뢰 수준에 대한 확실성 지표를 제공합니다.
유연성 - 고객은 봇 매니지먼트를 통한 완화를 적용할 트래픽의 하위 집합을 정의할 수 있어야 합니다. (예: 로그인 URL만, 가격 페이지에서만, 사이트 전체)
정확성 - 봇 매니지먼트를 통한 감지에는 오류 발생이 억제되어야 합니다. (예: 사람 방문자를 봇으로 잘못 식별하는 경우가 극히 드물어야 함)
복구 가능성 - 잘못된 예측이 이루어진 경우에도 방문자가 웹 사이트에 액세스할 수 있을 뿐만 아니라 좋은 봇도 통과할 수 있어야 합니다.
또한 새로운 봇 매니지먼트 제품은 다음과 같은 사용 사례에서도 잘 작동하도록 설계되었습니다.
기술 요구 사항
Cloudflare의 엔지니어들은 위의 제품 요구 사항 외에도 새로운 Bot Management 플랫폼에 꼭 필요한 요소들의 목록을 가지고 있었습니다. 가장 필요한 요소는 다음과 같습니다.
확장성 - 플랫폼은 초당 1천만 개 이상의 요청이 있더라도 모든 요청에 대한 점수를 계산할 수 있어야 합니다.
짧은 대기 시간 - 추가 하드웨어 없이도 요청 처리 속도를 100마이크로초 이내로 유지하면서 매우 빠르게 감지를 수행해야 합니다.
구성 가능성 - 각 도메인/데이터 센터/서버 수준별 트래픽을 포함하여 어떤 트래픽에 어떤 감지를 적용할 것인지 구성할 수 있어야 합니다.
수정 가능성 - 플랫폼은 더 많은 감지 메커니즘, 다양한 완화 조치, 더 풍부한 분석 및 로그 등으로 쉽게 확장할 수 있어야 합니다.
보안 - 고객을 보호하는 모델을 구축하는 과정에서 또 다른 고객의 민감한 정보가 사용되어서는 안 됩니다.
설명 가능성 및 디버깅 가능성 - 예측 내용을 직관적인 방식으로 설명하고 조정할 수 있어야 합니다.
이러한 요구 사항들을 정리해둔 Cloudflare의 소규모 엔지니어 팀은 2018년부터 차세대 Cloudflare 봇 관리를 설계하고 구축하는 프로젝트에 착수했습니다.
점수화
"단순함은 궁극의 정교함이다."
- 레오나르도 다 빈치
Cloudflare의 네트워크는 방대합니다. 이 글을 작성하는 현재는 2,600만 개 이상의 인터넷 웹 사이트를 보호하고, 초당 평균 1,100만 요청을 처리하며(피크 시 1,400만 이상), 다양한 프로토콜 수준에서 250개 이상의 요청 속성을 검사하는 수준입니다. 그러므로 모든 고객을 현대의 사이버 위협으로부터 간단하고 안정적이며 설명 가능한 방식으로 보호하기 위해 이렇게 "거대한" 데이터의 힘을 어떤 식으로 활용할 것인지가 무엇보다 중요합니다.
봇 매니지먼트는 까다로운 작업입니다. 일부 봇은 감지하기가 훨씬 어려우며, 해당 요청의 속성을 오랜 시간에 걸쳐 다양한 측면에서 살펴봐야 하고 때로는 단 하나의 요청 속성이 단서가 될 수 있습니다. 더 많은 신호가 도움이 될 수도 있겠지만, 일반화가 가능할까요?
트래픽 분류 과정에서 고객이 무엇을 할지 결정해야 할까요, 아니면 Cloudflare가 고객을 대신하여 결정을 내려도 될까요? Cloudflare가 이렇게 불확실한 모든 문제를 해결하고 위의 요구 사항을 충족할 수 있으려면 어떤 개념을 염두에 두어야 할까요?
섹션 제목에서 짐작할 수 있듯, Cloudflare는 이 모든 질문에 답하기 위해 '신뢰도 점수(Trusted Score, 줄여서 Score)'라는 개념을 고안했습니다. 신뢰도 점수는 특정 요청의 출처가 사람(높은 점수)인지, 아니면 자동화된 프로그램(낮은 점수)인지 여부를 0에서 100 사이의 가능성 점수로 나타내 보여줍니다.
"One Ring to rule them all" 제작: idreamlikecrazy, CC BY 조건 하에 사용 / 원본에서 채도 조정함
자, 여러분이 들어오는 모든 HTTP/HTTPS 요청에 대해 이러한 점수를 할당할 수 있다고 가정해 봅시다. Cloudflare 또는 고객은 이를 어떻게 활용할 수 있을까요? 해당 점수를 로그를 통해 제공하는 것만으로도 충분할 수 있습니다. 그렇게 하면 고객 스스로 이를 분석하여 점수가 가장 낮으면서도 빈도는 가장 높은 IP를 찾아낸 다음 Cloudflare 방화벽으로 해당 IP를 차단할 수 있습니다. 이러한 프로세스 역시 유용하기는 하지만 이는 수작업을 해야 하고 오류가 발생하기 쉬우며, 무엇보다 고객의 인터넷 자산을 보호하기 위한 실시간 수행이 어렵다는 문제가 있습니다.
다행스럽게도, 개발팀이 이 시스템 작업을 시작할 즈음에 방화벽 팀의 동료들이 마침 방화벽 규칙을 발표했습니다. 널리 알려진 Wireshark® 언어에서 영감을 얻은 이 새로운 기능은 고객이 요청을 유연하고 직관적인 방식으로 제어할 수 있도록 도와주었습니다. 방화벽 규칙이 다양한 요청 필드를 지원했기 때문에, 개발팀은 신뢰도 점수를 이러한 필드 중 하나로서 설정하는 방식을 착안했습니다. 그러면 고객이 세부적인 규칙을 작성하여 공격 유형들을 매우 구체적으로 차단할 수 있게 됩니다. 그렇게 cf.bot_management.score
필드가 탄생했습니다.
Cloudflare 봇 매니지먼트 솔루션에 곧바로 점수가 표시됨에 따라 여러 제품 및 기술과 관련한 요구 사항을 한 번에 해결할 수 있게 되었으며, 이는 간단하고 유연하며 구성이 가능한 방식이면서도 봇에 대한 원격 측정을 요청 단위로 제공해줍니다. 고객은 긍정 오류/부정 오류 민감도 설정에 따라 방화벽 규칙의 점수 임계값을 조정할 수 있습니다. 또한 이 직관적인 점수는 고객이 일일이 구성을 조정할 필요 없이 Cloudflare의 감지 기능을 자체적으로 확장할 수 있도록 도와줍니다.
그렇다면 이 점수는 어떤 방식으로 어떤 노력을 통해 매겨질까요? 다음 섹션에서 알아보겠습니다.
아키텍처 개요
봇 매니지먼트 점수의 이면에서 어떤 기술이 작동할까요? 한 마디로 마이크로서비스 세트가 있습니다. 개발팀은 이 플랫폼을 구축하는 과정에서 가능한 한 많은 파이프라인과 데이터베이스, 구성 요소를 재사용하고자 노력했지만, 많은 서비스를 처음부터 구축해야만 했습니다. 먼저 전체 아키텍처를 한번 살펴봅시다(봇 매니지먼트 관련 서비스 위주로 의도적으로 단순화된 버전입니다).
핵심 봇 매니지먼트 서비스
간단히 설명하자면, Cloudflare의 시스템은 엣지 데이터 센터에서 수신한 데이터를 처리하고 다음과 같은 기술들을 사용하여 봇 감지 메커니즘에 필요한 데이터를 생성 및 저장합니다.
데이터베이스 및 데이터 저장소 - Kafka, ClickHouse, Postgres, Redis, Ceph.
프로그래밍 언어 - Go, Rust, Python, Java, Bash.
구성 및 스키마 관리 - Salt, Quicksilver, Cap’n Proto.
컨테이너화 - Docker, Kubernetes, Helm, Mesos/Marathon.
이러한 각각의 서비스는 탄력성, 성능, 관찰 가능성 및 보안을 염두에 두고 구축되었습니다.
엣지 봇 매니지먼트 모듈
모든 봇 감지 메커니즘은 모든 요청에 대해 실시간으로 적용되며, 이는 Cloudflare 엣지 로케이션의 모든 머신에서 실행되는 봇 매니지먼트 모듈의 요청 처리 단계에서 이루어집니다. 요청이 들어오면 필요한 요청 속성을 추출 및 변환한 다음 Cloudflare 감지 메커니즘에 투입하게 됩니다. 그러면 봇 매니지먼트 모듈이 다음과 같은 출력을 생성합니다.
방화벽 필드 - 봇 매니지먼트 필드
- cf.bot_management.score - 특정 요청의 출처가 사람(높은 점수)인지, 아니면 자동화된 프로그램(낮은 점수)인지의 가능성을 0에서 100 사이의 정수로 나타내는 영역입니다.
- cf.bot_management.verified_bot - 그러한 요청의 출처가 Cloudflare 허용 목록에 포함된 봇인지 여부를 나타내는 불값(boolean)입니다.
- cf.bot_management.static_resource - 요청이 여러 유형의 정적 리소스에 대한 파일 확장자와 일치하는지 여부를 나타내는 불값입니다.
쿠키 - 특히 봇과의 관련성을 나타내는 기준과 일치하는 수신 트래픽의 관리를 도와주는 cf_bm을 생성합니다.
JS 챌린지 - Cloudflare가 보이지 않는 JavaScript 챌린지에 인젝트하는 일부 감지 사례 및 고객과 관련하여 더 많은 봇 감지용 신호를 제공합니다.
감지 로그 - Cloudflare는 각각의 적용된 감지, 사용된 기능 및 플래그에 대한 세부 정보를 ClickHouse로의 데이터 파이프라인을 통해 기록하며, 이 중 일부는 분석 및 고객 로그용으로 사용되고 다른 일부는 모델을 디버그하고 개선하는 데 사용됩니다.
봇 매니지먼트 모듈이 필수 필드를 생성하고 나면 실제 봇 완화 작업은 방화벽이 담당합니다.
방화벽 통합
사용자는 Cloudflare 방화벽의 직관적인 대시보드를 통해 간단한 클릭만으로 강력한 규칙을 구축할 수 있으며 Terraform 통합도 사용할 수 있습니다. 방화벽에 대한 모든 요청은 규칙 엔진을 통해 검사됩니다. 의심스러운 요청은 사용자의 필요에 따라 차단, 챌린지, 또는 기록이 가능하고, 정상적인 요청은 봇 관리 모듈과 임계값 설정에 의해 생성된 점수를 바탕으로 해당 목적지로 라우팅됩니다.
방화벽 규칙은 다음과 같은 봇 완화 조치들을 제공합니다.
로그 - 일치하는 요청을 고객에게 제공되는 Cloudflare 로그에 기록합니다.
우회 - 고객은 이를 통해 특정 요청에 대해서는 Cloudflare 보안 기능을 동적으로 비활성화할 수 있습니다.
허용 - 일치하는 요청은 다른 방화벽 규칙 콘텐츠에 의해 트리거되는 챌린지 및 차단 작업에서 제외됩니다.
챌린지(Captcha) - 사이트에 액세스하는 방문자가 자동화된 봇이 아닌 사람인지 확인하는 데 유용합니다.
JS 챌린지 - 봇과 스팸이 요청된 리소스에 액세스하는 것을 막는 데 유용하지만, 브라우저는 얼마든지 챌린지를 자동으로 충족할 수 있습니다.
차단 - 일치하는 요청은 사이트에 대한 액세스가 거부됩니다.
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
request = new Request(request);
request.headers.set("Cf-Bot-Score", request.cf.bot_management.score)
return fetch(request);
}
ClickHouse 및 GraphQL API로 구동되는 Cloudflare의 방화벽 분석 도구를 사용하는 고객은 직관적인 인터페이스를 통해 보안 위협을 신속하게 식별하고 조사할 수 있습니다. Cloudflare는 분석 외에도 모든 봇 관련 활동에 대한 자세한 로그를 Logpull API 및/또는 LogPush를 통해 제공하며, 여기서 해당 로그를 고객의 클라우드 스토리지로 손쉽게 가져올 수 있습니다.
Cloudflare Workers 통합
고객이 점수를 기반으로 요청을 처리하는 데 더 많은 유연성을 원하는 경우(예: 신규 HTML 페이지 콘텐츠 삽입, 기존 HTML 페이지 콘텐츠 변경, 봇에 잘못된 데이터 제공, 특정 요청에 대한 지연), Cloudflare Workers을 통해 그러한 작업들을 수행할 수 있습니다. 예를 들어 다음과 같은 간단한 코드 스니펫을 사용하여 해당 점수를 오리진 서버로 다시 전달한 다음 고급 실시간 분석 또는 완화 조치를 진행할 수 있습니다.
다음으로 단일 점수가 다중 감지 메커니즘을 통해 생성되는 과정을 살펴보겠습니다.
감지 메커니즘
Cloudflare 봇 매니지먼트 플랫폼은 현재 자체 점수를 생성하는 5종의 상호 보완적인 감지 메커니즘을 사용하고 있으며, 이를 종합함으로써 방화벽으로 전송될 단일 점수를 생성합니다. 대부분의 감지 메커니즘은 모든 요청에 적용되지만, 일부는 특정 요구에 부합하기 위해 고객마다 개별적으로 활성화됩니다.
모든 고객에 대한 모든 요청에 점수를 매김으로써 다음과 같은 이점을 얻을 수 있습니다.
온보딩의 용이성 - 봇 매니지먼트를 액티브 모드로 활성화하기 전에도 특정 고객 환경에서 봇 매니지먼트가 얼마나 효율적일지 미리 알 수 있으며, 봇 활동에 대한 지난 추세도 제공할 수 있습니다.
피드백 루프 - 모든 요청에 대한 점수와 관련 피처를 얻을 수 있으므로 Cloudflare 감지 메커니즘의 지속적인 개선에 커다란 도움이 됩니다.
확장성 보장 - 모든 고객에 대한 모든 요청 점수를 계산한다는 것은 Cloudflare가 보호하는 모든 인터넷 자산이 봇 매니지먼트의 잠재적인 고객임을 의미합니다.
글로벌 봇 인사이트 - Cloudflare는 2,600만 개 이상의 인터넷 자산을 보호하고 있으므로, 시간이 지날수록 보안 및 위협 인텔리전스 분야에서 발생하는 구조적 변화를 더 잘 이해하고 대응할 수 있게 됩니다.
전 세계적으로는 Cloudflare이 관찰 가능한 인터넷 트래픽의 1/3 이상이 악성 봇에서 발생하는 반면, 봇 관리 고객의 경우는 악성 봇의 비율이 43%로 훨씬 더 높습니다!
그러면 Cloudflare 봇 매니지먼트와의 통합이 이루어진 시간순으로 각각의 감지 메커니즘을 살펴봅시다.
머신러닝
점수에 대한 대부분의 결정은 Cloudflare의 머신 러닝 모델을 통해 이루어집니다. 이는 2018년 당시 점수 생성 및 고객 온보딩을 최초로 진행했던 감지 메커니즘이기도 합니다. 머신 러닝을 성공적으로 적용하려면 분량, 다양성, 품질 측면에서 우수한 데이터가 필요한데, Cloudflare는 무료 및 유료 고객 덕분에 이 세 가지 요소를 모두 확보할 수 있었고, 모든 고객을 위해 모델 학습 및 개선을 지속적으로 이어갈 수 있었습니다.
머신 러닝 감지 메커니즘의 핵심에는 의사결정 트리의 그래디언트 부스팅을 위한 고성능 오픈소스 라이브러리인 CatBoost가 있습니다. CatBoost을 선택한 것은 뛰어난 라이브러리 기능 때문이었습니다.
범주형 피처 지원 - 카디널리티가 매우 높은 피처에 대해서도 학습할 수 있도록 도와줍니다.
탁월한 정확도 - 새로운 그래디언트 부스팅 방식을 사용하여 과적합을 억제할 수 있습니다.
추론 속도 - Cloudflare의 경우 모델 적용에 50마이크로초 미만이 걸리므로 요청 처리 속도가 매우 빠르게 유지됩니다.
C 및 Rust API - 엣지 상의 대부분의 Cloudflare 비즈니스 로직은 Lua, 보다 구체적으로 LuaJIT를 사용하여 작성되므로, 호환 가능한 FFI 인터페이스를 통해 모델을 적용할 수 있다는 점은 환상적입니다.
Cloudflare의 엣지에서는 모든 머신의 모든 요청에 대해 섀도우 모드로 실행되는 여러 CatBoost 모델들이 활약하고 있습니다. 이러한 모델 중 하나는 액티브 모드에서 구동되며, 이는 방화벽으로 전달되는 최종 점수에 영향을 줍니다. 모든 ML 감지 결과 및 피처는 추가 분석, 모델 개선, 분석 및 고객 대면 로그를 위해 ClickHouse에 로깅 및 기록됩니다. Cloudflare는 요청 속성 및 Gagarin 요청 간 피처 플랫폼 상에서 이러한 속성을 사용하여 계산, 전달 및 구축된 요청 간 피처에서 범주형 피처와 수치적 피처를 추출한 다음 이를 모두 모델에 투입합니다.
극도로 안정적이고 성능이 뛰어난 Quicksilver 구성 데이터베이스를 사용하면 새로운 ML 모델을 단 몇 초 만에 배포할 수 있습니다. 해당 메커니즘은 특정 고객에 대해서는 액티브 모드에서 실행해야 하는 ML 모델 버전을 구성하는 용도로도 사용이 가능합니다.
Cloudflare의 머신 러닝 감지 메커니즘에 대한 분석을 심층적으로 다루려면 별도의 블로그 지면이 필요하며, 여기서는 Cloudflare가 GPU를 사용하여 수조 건에 달하는 요청에 대해 모델을 학습시키고 검증하는 방법, 모델 피처의 전달 및 추출이 이루어지는 방식, 그리고 Cloudflare가 모델의 예측을 내부 및 외부를 대상으로 설명하고 디버그하는 방법을 다룰 예정입니다.
휴리스틱 엔진
머신 러닝이 세상의 모든 문제를 풀 수 있는 것은 아닙니다. 다양한 방법으로 ML 모델을 조정할 수는 있지만, 여전히 기본 휴리스틱보다 성능이 떨어지는 경우도 있을 수 있습니다. 머신 러닝으로 해결하려는 문제가 완전히 새로운 종류가 아닐 때가 많습니다. 개발팀이 봇 매니지먼트 솔루션을 구축할 때, 요청과 관련한 단 하나의 속성이 봇의 정체를 드러낼 수도 있다는 것이 분명해졌습니다. 이는 봇을 직접적으로 캡처하는 간단한 규칙을 여러 개 만들어 이용해도 긍정 오류를 최소화할 수 있음을 의미합니다.
휴리스틱 엔진은 2019년에 두 번째로 Cloudflare 봇 매니지먼트 플랫폼에 통합된 감지 메커니즘이며, 이 역시도 모든 요청마다 적용됩니다. Cloudflare는 요청의 특정 속성들에 기반한 여러 휴리스틱 유형과 수백 개의 구체적인 규칙을 정립했으며, 그 중 일부는 스푸핑하기가 매우 어렵습니다. 요청 가운데 단 하나라도 휴리스틱 규칙과 일치하는 경우 가장 낮은 점수인 1이 할당됩니다.
이 엔진에는 다음과 같은 속성이 있습니다.
속도 - ML 모델 추론에 모델당 50마이크로초 미만이 소요된다면, 휴리스틱은 20마이크로초 안에 수백 개는 적용이 가능합니다!
배포 가능성 - 휴리스틱 엔진을 사용하면 Quicksilver를 통해 단 몇 초 만에 새로운 휴리스틱을 추가할 수 있으며, 이는 모든 요청에 적용됩니다.
광범위한 적용 - 간단한 휴리스틱 세트만으로도 전 세계 트래픽의 ~15%와 봇 매니지먼트 고객 트래픽의 ~30%를 봇으로 분류할 수 있습니다. 가정이기는 하지만 훌륭한 결과이지 않습니까?
최소화된 긍정 오류 - Cloudflare는 휴리스틱을 추가할 때 확실한 경우들에 대해서만 보수적으로 접근하기 때문에, 이 감지 메커니즘의 FP 비율은 모든 감지 메커니즘 가운데 가장 낮습니다.
ML용 레이블 - Cloudflare는 휴리스틱으로 분류한 요청의 높은 확실성 때문에 이를 ML 학습에도 활용하고 있으며, 이로써 휴리스틱에서 학습한 행동을 일반화하여 감지 정확도를 개선할 수 있습니다.
따라서 머신 러닝의 조정을 거친 휴리스틱은 커다란 도움이 되었고, 여기에는 각종 봇에 대한 많은 직관이 담겨 있어 Cloudflare는 봇 매니지먼트 플랫폼을 발전시키고 더 많은 고객을 온보딩할 수 있었습니다.
행동 분석(BA)
머신 러닝과 휴리스틱 감지는 엄청난 가치를 제공하지만, 둘 다 레이블에 사람의 개입을 필요로 하거나 옳고 그름의 차이를 학습시킬 교사 역할을 요구합니다. Cloudflare가 지도했던 ML 모델은 배운 것과 유사한 새로운 위협이 등장했을 때도 충분히 일반화할 수 있었지만, 개발팀은 한발 더 나아갔습니다. 교사가 필요하지 않고 오히려 악의적인 행동과 정상적인 행동의 구별 방법을 스스로 배울 수 있는 접근법이 있다면 어떨까요?
여기서 2018년에 처음 개발되어 2019년에 봇 매니지먼트 플랫폼에 통합된 행동 분석 감지 메커니즘이 빛을 발합니다. 이는 다음과 같은 속성을 가진 비지도 방식의 머신 러닝 접근법입니다.
고객별 니즈에 대응 - 모든 봇 매니지먼트 고객을 위해 자동으로 활성화되어 정상적인 방문자 행동을 장기간에 걸쳐 계산 및 분석합니다.
이전에 본 적이 없는 봇을 감지 - 알려진 봇 레이블을 사용하지 않기 때문에 특정 고객 웹 사이트 상의 정상적인 행동으로부터 봇과 이상 행동을 감지해낼 수 있습니다.
회피의 어려움 - 변칙적 행동은 봇의 특정 목표에 따른 직접적인 결과일 때가 많습니다.
보이지 않는 공격으로부터 많은 고객을 보호하는 이 훌륭한 감지 메커니즘을 지원하는 플랫폼 및 행동 분석 모델에 대해 보다 자세히 다루는 후속 블로그도 읽어보시기 바랍니다.
검증된 봇
지금까지 악성 봇과 사람을 감지하는 방법에 대해 알아보았습니다. 때로는 고객 웹 사이트에 매우 유용하기도 한 좋은 봇의 경우는 어떨까요? 여기에도 전용 감지 메커니즘이 필요하거나, 아니면 앞서 설명했던 감지 메커니즘 가운데 일부를 사용할 수 있을까요? 대부분의 좋은 봇 요청(예: Googlebot, Bingbot, LinkedInbot)이 이미 다른 감지 메커니즘에 의해 낮은 점수를 얻었지만, 유용한 봇이 실수로 차단되는 것을 방지할 방법도 필요합니다. 그래서 2019년에 cf.bot_management.verified_bot 방화벽 필드가 등장하게 되었으며, 이는 모든 좋은 봇을 통과시킬지 아니면 웹 사이트의 특정 부분에 대한 액세스를 제한할지 여부를 고객이 스스로 결정할 수 있도록 해줍니다.
Verified Bot(인증된 봇) 플래그를 계산하는 실제 플랫폼에 대해서는 별도의 블로그가 필요하겠지만, 여기에는 간단히 말해 다음과 같은 속성이 있습니다.
검증자 기반 접근법 - Cloudflare는 다수의 유효성 검사 메커니즘을 지원하며, 그 각각은 IP 집합을 클러스터링함으로써 좋은 봇 ID를 안정적으로 확인할 수 있습니다.
역방향 DNS 검사기 - 역방향 DNS 조회를 수행하여 특정 봇의 IP 주소가 표시된 해당 호스트 이름과 일치하는지 확인합니다.
ASN 블록 검사기 - rDNS 조회와 유사하지만 ASN 블록에서 수행됩니다.
다운로더 검사기 - 텍스트 파일 또는 봇 소유자 사이트에서 호스팅되는 HTML 페이지로부터 좋은 봇의 IP를 수집합니다.
머신 러닝 검사기 - 비지도 학습 알고리즘을 사용하여 다른 수단을 통해서는 검증이 어려운 좋은 봇 IP를 클러스터링합니다.
봇 디렉터리 - Cloudflare 네트워크를 통과하는 봇을 저장하고 관리하는 UI가 포함된 데이터베이스입니다.
봇 디렉터리 UI 샘플
인증된 봇 감지 메커니즘은 위에 나열된 여러 유효성 검사 방법을 사용하여 다양한 회사 및 범주에 속한 수백 개의 고유한 좋은 봇 ID를 식별합니다.
JS 지문인식
봇 관리 감지의 품질은 결국에는 신호의 품질과 양에 의해 결정됩니다. 앞에서 설명한 모든 감지는 네트워크를 통해 전송되어 서버 측에서 다양한 기술을 통해 분석된 요청 속성을 사용합니다. 감지 결과를 개선하기 위해 클라이언트로부터 추출할 수 있는 더 많은 신호가 있을까요?
사실 모든 브라우저에는 고유한 구현 방식이 있기 때문에 수많은 신호가 이미 존재합니다. 캔버스 등의 모든 웹 브라우저 그래픽 출력은 하드웨어(GPU) 및 소프트웨어(드라이버, 운영 체제 렌더링)와 같은 복수의 계층에 의존합니다. 이렇게 고유한 출력을 이용하면 다양한 브라우저/장치 유형을 정확하게 구분해낼 수 있습니다. 게다가 이는 슈퍼쿠키가 아니므로 웹 사이트 방문자의 프라이버시를 희생하지 않고서도 목적 달성이 가능하고, 개별 사용자를 추적 및 식별하는 용도로는 사용이 불가능하며, 오직 요청의 사용자 에이전트가 브라우저 캔버스 API를 통해 수집된 다른 원격 분석 내용과 일치하는지 확인하는 용도로만 사용될 수 있습니다.
이 감지 메커니즘은 Cloudflare 엣지의 웹페이지에 챌린지가 인젝트되는 형태의 챌린지-응답 시스템으로서 구현됩니다. 그런 다음 해당 챌린지는 제공된 그래픽 지침을 사용하여 백그라운드에서 렌더링되고, 그 결과는 유효성 검사 및 점수 생성과 같은 추가 작업을 위해 Cloudflare로 다시 전송됩니다. 그 이면에서는 재생 공격에 대비한 변조 방지 기능을 유지하는 동시에 사용자의 개인 정보를 희생하지 않고서도 신뢰도 높은 결과를 얻어낼 수 있도록 많은 일이 진행되고 있습니다. 이 시스템은 현재 비공개 베타 상태에서 그 효과에 대한 평가가 진행 중이며, 벌써 매우 유망한 결과가 나타나고 있습니다. 이 새로운 감지 메커니즘이 널리 보급되는 과정과 개발팀의 구축 방법을 다루는 후속 블로그도 읽어보시기 바랍니다.
이것으로 Cloudflare가 지금까지 구축한 5가지 감지 메커니즘에 대한 개요를 마무리하겠습니다. 전체 내용을 요약해 봅시다!
요약
Cloudflare는 매주 네트워크로 쏟아져 들어오는 수조 개의 요청으로부터 데이터를 수집하는 고유의 기술을 갖추고 있습니다. Cloudflare는 이 데이터를 머신 러닝, 휴리스틱, 행동 분석 및 기타 감지 메커니즘에 사용함으로써 잠재적 봇 활동을 식별할 수 있습니다. Cloudflare 봇 매니지먼트는 WAF 및 Workers와 같은 다른 Cloudflare 제품과 원활하게 통합됩니다.
이 모든 것은 여러 팀들의 열정과 수고 없이는 불가능했습니다! 우선 이 플랫폼을 현실화하기 위해 엄청난 노력을 기울인 봇 팀의 모든 분들께 감사드립니다. 다른 Cloudflare 팀들, 특히 방화벽, 데이터, 솔루션 엔지니어링, 성능, SRE 팀도 이 훌륭한 플랫폼을 설계, 구축 및 지원하는 데 도움을 아끼지 않았습니다.
오스틴 팀 서밋 2019 행사에서 도끼로 봇을 사냥 중인 봇 팀 :)
마지막으로, Cloudflare 감지 메커니즘의 구조를 자세히 소개할 봇 시리즈의 더 많은 블로그가 곧 공개될 예정이므로 Cloudflare 봇 매니지먼트에 대한 더 흥미로운 이야기를 계속 지켜봐 주시기 바랍니다!