이는 SaaS 서비스를 구축하고 운영하는 데 필요한 다양한 측면을 다루는 일련의 블로그 중 네 번째 블로그입니다.
이전 블로그 에서는 암호화 기술을 사용하여 플랫폼(인프라, 앱, 데이터)을 보호하는 데 따르는 과제에 대한 통찰력을 제공했습니다. 이 블로그에서는 네트워크(인터넷과 내부)에서 발생하는 표적형 공격으로부터 플랫폼을 보호하는 데 사용하는 기술을 다룹니다. 앱이 더 이상 물리적 위치에 제약을 받지 않기 때문에 기존의 경계 기반 방화벽과 서명 기반 보안 솔루션은 더 이상 효과적이지 않습니다. 우리는 최초의 제로 트러스트 보안 구현의 단점을 간략히 설명하고, 이를 머신 러닝과 알고리즘 기술로 보강하여 분산 인프라와 앱 클러스터의 보안을 적절히 유지한 방법을 설명하겠습니다.
당사 플랫폼은 엣지, 글로벌 네트워크, AWS 및 Azure 퍼블릭 클라우드에서 자체 클러스터를 운영하는 여러 팀에서 많은 수의 앱을 실행합니다. 대부분의 워크로드는 Kubernetes를 사용하여 마이크로서비스로 오케스트레이션되지만, Terraform을 사용하여 관리하는 소수의 대규모 모놀리스(예: Elasticsearch)도 있습니다. 그림 1은 우리 플랫폼의 분산적 특성을 보여줍니다. 예를 들어, 18개 이상의 글로벌 네트워크 PoP(물리적 서버 수십 개에서 100개가 조금 넘는 수) 각각에서 수천 개의 앱 포드를 실행합니다. 하지만 오늘날에는 3,000개 이상의 활성 위치(각 위치마다 1~7개의 컴퓨팅 장치 있음)에서 수십 개의 앱 포드를 실행하는 개별 고객 배포가 있습니다.
이 플랫폼은 완전한 멀티 테넌트 방식으로, 각 노드는 다양한 고객(및 당사 자체)의 워크로드를 실행합니다. 이러한 앱 중 일부는 공개 인터넷에 노출되어 있으므로 앱과의 모든 통신이 보안되도록 해야 합니다. 이전 두 블로그에서 설명한 대로, 우리는 서비스 메시 와 API 게이트웨이를 구동하는 자체 L3-L7+ 네트워크 데이터 경로(VoltMesh)와 함께 강력한 ID, 인증 및 권한 부여 시스템을 구축했습니다. 그림 2에서 볼 수 있듯이 이를 통해 앱 클러스터(mTLS), 사용자(TLS/mTLS), 직원(mTLS) 전반에 걸쳐 전송 수준 보안을 제공하고, 인증+권한 부여에 따른 액세스 제어도 제공할 수 있었습니다.
이러한 제로 트러스트 구현은 많은 이점을 제공하지만, 여러 보안 문제는 자동으로 해결하지 못했습니다.
이 플랫폼을 개발해 온 지난 2.5년 동안 우리는 개발자들이 오픈소스 앱을 통합하고 컨테이너화한 다음 DevOps 팀에 플랫폼에 배포해 달라고 요청하는 경우가 많다는 사실을 깨달았습니다. 하지만 보안 팀에서 통신을 허용 목록에 추가하기 위한 정책을 만드는 데 필요한 이러한 앱 내의 API 수준 상호작용에 대한 세부 정보가 부족한 경우가 많습니다. 이는 앱에서 사용하는 API만 허용하고 다른 모든 트래픽을 차단하는 허용 목록 정책을 요구하기 때문에 제로 트러스트 보안 구현에 큰 걸림돌입니다. 이 요구 사항에 예외를 만들 때마다 일부 앱은 매우 기본적인 네트워크 수준 세분화되어 공격 표면이 늘어났습니다.
결과적으로, 위에 나열된 문제를 처리하기 위해 기존의 제로 트러스트 보안 솔루션을 추가적인 보안 기능으로 보강해야 했습니다. 우리는 플랫폼에 구축해야 할 추가 보안 기능 목록을 확인했습니다.
우리는 이러한 문제를 해결하기 위해 기존의 서명 기반 기술, 통계적 알고리즘, 그리고 보다 동적인 머신 러닝 접근 방식을 결합하기로 결정했습니다. 이를 위해 SaaS 백엔드를 변경하고 네트워크 데이터 경로에 새로운 기능을 추가해야 했습니다.
플랫폼을 잠그기 위해 모든 앱에 대한 API 화이트리스트에 따라 네트워크 연결만 허용합니다. 이를 위해 보안팀은 개발자와 협력하고 프로그래밍 가능한 정책 엔진에 올바른 API 정보가 제공되도록 해야 합니다. 우리는 우리 서비스 프레임워크를 사용하여 구축되지 않은 앱에 대해 개발자가 이러한 정보를 제공하는 것이 불가능하다는 사실을 금방 깨달았습니다.
서비스 메시 프록시가 앱에 대한 모든 액세스의 네트워크 경로에 있으므로 프록시를 통과하는 모든 액세스에 대한 런타임 분석을 수행하여 앱에서 노출되는 API와 정적 리소스를 알아보기로 했습니다. 이 접근 방식의 과제는 URL을 검사하고 동적으로 생성된 구성 요소를 분리하여 API 엔드포인트를 식별하는 것입니다. 예를 들어, API "api/user/<user_id>/vehicle/"의 경우 프록시는 다음과 같은 액세스를 볼 수 있습니다.
이런 요청은 수백만 건에 달할 수 있으므로 해독하기가 매우 어렵습니다. 결과적으로, 이러한 관련 요청에서 동적 구성 요소를 식별하는 작업은 딥 러닝과 그래프 분석을 통해 수행됩니다. 우리는 전체 URL 구성 요소 세트를 그래프로 표현한 다음, 동적으로 생성된 구성 요소의 특정 속성을 포착하는 기능 세트를 사용하여 유사한 속성을 가진 하위 그래프를 찾기 위해 그래프 클러스터링을 수행합니다. 이러한 속성은 다음과 같습니다.
결과적으로 동적 구성 요소가 분류되고 시스템 출력은 다음과 같습니다.
API의 머신 러닝을 사용하면 서비스 메시 프록시에서 시행할 수 있는 정책을 쉽고 자동으로 생성할 수 있습니다. 발견된 API 엔드포인트를 기반으로 어떤 앱이 다른 앱과 통신하기 위해 어떤 API를 사용하는지, 이러한 API의 일반적인 동작 등과 같은 기타 속성도 알아낼 수 있습니다. 이를 통해 보안 팀이 포렌식, 검색 및 API 수준의 마이크로 세분화를 위해 서비스 간 상호 작용을 시각화하는 데 도움이 되는 서비스 그래프를 구축할 수 있습니다.
나머지 두 가지 기능(이상 탐지 및 동작 프로파일링)을 추가하기 전에, 우리는 기존 솔루션이 도움이 될 수 있는지 알아보기로 했습니다. 시중에는 다양한 경계 방화벽과 웹 앱 방화벽 제품이 있지만, 이러한 솔루션의 대부분은 인터넷에 연결된 앱을 보호하는 데 중점을 두고 있습니다. 그들은 서비스되는 트래픽이 웹 트래픽이라는 가정을 하고 HTML, 자바스크립트, SQL, CMS 등에 대한 타깃형 보호 기능을 제공합니다. 이를 통해 취약점과 알려진 익스플로잇을 포착하기 위한 서명과 규칙을 작성하는 것이 비교적 쉬워집니다.
이 기능이 웹 트래픽에 중요한 것은 사실이지만, 우리 환경에서는 점점 더 많은 양의 API와 머신 간 트래픽도 처리해야 합니다. 이를 해결하려면 보안팀에서 OWASP CRS와 같은 알려진 일반적인 웹 규칙에 해당하지 않는 앱별 규칙을 작성해야 합니다. 일반적으로 보안 관리자는 앱에 대해 거의 알지 못하며, 환경의 동적 특성으로 인해 앱 유형과 구조를 추적하여 앱별 규칙을 작성하는 것이 더욱 어려워집니다. 따라서 당사 플랫폼 팀은 네트워크 데이터 경로에서 이 기능을 제공하지만, 보안 팀에서는 자주 사용하지 않습니다.
우리 네트워크에서 상당한 양의 데이터를 확보한 또 다른 문제는 앱 공격이 시간이 지남에 따라 훨씬 더 정교해지고 있다는 것입니다. 공격자는 HTTP/TCP 서명 등을 살펴서 API, 앱, 기반 인프라, OS 유형의 세부 사항을 파악하기 위해 며칠 동안 정찰을 수행합니다. 이러한 상황에서 기존의 서명 및 규칙 기반 접근 방식은 매우 제한적으로 사용되며, 우리는 사용자 행동을 자동으로 학습하고 좋은 행동과 나쁜 행동을 강제하는 AI 기반 접근 방식을 계속 사용하기로 결정했습니다.
대부분의 앱은 특정 워크플로(API 시퀀스)와 컨텍스트(API 내 데이터)를 갖고 있으며, 이를 기반으로 다양한 사용 사례/배포가 설계되고 일반적으로 앱 사용자가 이를 따릅니다. 우리는 이러한 속성을 활용하여 기계 학습 알고리즘을 훈련하여 앱과 일반적인 사용자 상호작용에서 "유효한" 행동 패턴을 모델링합니다.
그림 3에서 볼 수 있듯이, 데이터 경로는 관련 데이터와 함께 각 API에 대한 요청/응답을 샘플링하여 중앙 학습 엔진으로 전송합니다. 이 엔진은 유효한 행동 패턴 모델을 지속적으로 생성하고 업데이트하며, 이후 데이터 경로에서 실행되는 추론 엔진이 이를 사용하여 의심스러운 행동에 대한 경고/차단을 실행합니다.
학습 엔진은 API 순서, 요청 간 간격, 동일한 API에 대한 반복 요청, 인증 실패 등 여러 가지 측정 항목을 살펴봅니다. 이러한 측정항목은 각 사용자별로 분석되고 집계되어 좋은 행동과 나쁜 행동을 분류합니다. 또한 우리는 "좋은 행동"의 여러 다른 시퀀스를 식별하기 위해 행동 클러스터링을 수행합니다. 이를 설명하기 위해 예를 들어 보겠습니다.
다음 API 시퀀스는 시스템에서 의심스럽거나 잘못된 동작으로 표시되며 시스템에서 자동으로 완화하거나 관리자가 개입할 수 있는 경고를 생성합니다.
1년 전 이 시스템을 생산에 투입한 이후, 우리는 사용량과 고객 피드백을 토대로 모델을 지속적으로 개선해 왔습니다. 우리는 다음과 같은 유형의 공격을 성공적으로 식별할 수 있었습니다.
그럼에도 불구하고 우리는 이 접근 방식에는 몇 가지 문제가 있다는 것을 깨달았습니다. 즉, 비정상 탐지 기술을 적용해야 하는 저속 공격(무차별 대입 공격, 앱 서비스 거부 공격, 스캐너)을 찾아낼 수 없습니다.
때로는 우리의 행동 분석 기술의 레이더에 잡히지 않는 대규모 분산 봇넷을 이용한 매우 정교한 공격을 볼 수도 있습니다. 이러한 공격의 예는 다음과 같습니다.
네트워크 데이터 경로가 글로벌 네트워크 전반의 각 노드에서 정보를 수집하기 때문에 요청 비율, 오류 비율, 응답 처리량 등과 같은 특정 앱의 집계 지표에 대한 분석을 수행하는 것이 비교적 쉬워집니다. 이러한 분석을 통해 분산형 공격을 감지하고 해당 봇넷에 포함될 수 있는 사용자를 식별하여 (모든 노드에서) 공격을 완화할 수 있습니다. 다양한 시간 창(마지막 5분, 30분, 4시간, 24시간)에서 요청 속도를 살펴보고, 주어진 시간 창 내에서 요청 속도가 높으면 시스템에서 액세스 로그에 대한 다음과 같은 심층 분석을 수행하는 예를 들어보겠습니다.
이상 탐지는 방화벽 어플라이언스의 침입 탐지 및 방지(IDS/IPS)를 위한 중요한 기술이었지만, 이러한 어플라이언스는 글로벌 앱 계층 공격을 완화할 수 없습니다. 글로벌 플랫폼 전반에서 API 마크업과 학습을 수행할 수 있는 역량을 바탕으로, 이제 분산 네트워크 전반에서 소스에 대한 공격을 억제할 수 있습니다.
우리는 서비스 메시와 API 게이트웨이를 기반으로 한 제로 트러스트 구현에 매우 만족했지만, 그것이 분산된 앱 클러스터를 취약점과 악의적인 공격으로부터 보호하기에 포괄적이지 않다는 것을 깨달았습니다. 더 나은 보안 솔루션을 제공하기 위해 기존의 시그니처+규칙 기반 기술과 더불어 동작 분석+이상 탐지를 위한 머신 러닝으로 보완해야 했습니다.
우리는 중앙 집중형 SaaS에서 실행되는 학습 코어와 함께 L3-L7+ 네트워크 데이터 경로에 분산 추론을 추가하여 세 가지 중요한 이점을 얻었습니다.
네트워크 및 앱 보안은 끝없는 활주로와 같으며, 아직도 추가해야 할 새로운 기능이 잔뜩 쌓여 있는 듯합니다. 가까운 시일 내에 다시 방문하여 우리가 구현한 증분적 알고리즘과 기술에 대한 추가적인 통찰력을 공유하겠습니다.
이 블로그 시리즈에서는 퍼블릭 클라우드의 많은 앱 클러스터, 프라이빗 네트워크 PoP, 엣지 사이트를 활용하여 전 세계적으로 분산된 SaaS 서비스를 구축하고 운영하는 데 필요한 다양한 측면을 다룰 것입니다. 다음은 "글로벌 분산 플랫폼 전반의 관찰 가능성"(곧 출시)입니다.