Spark, Mesos, Zeppelin, HDFS를 활용한 대용량 보안 데이터 분석

라인플러스에서 게임 보안 개발을 담당하고 있는 오왕진, 한광희입니다.

대규모 이용자들이 모바일로 접속을 하는 LINE 게임(LINE Game)의 상황상 빠른 분석과 대응은 어려울 수 밖에 없습니다. LINE 게임(LINE Game)의 접속자와 해외 이용자들이 큰 규모로 증가함에 따라 다양한 어뷰징(허가 받지 않은 조작을 통해 이익을 취하는 행위) 상황이 계속 관찰되고 있습니다. 어뷰징은 정상적으로 게임을 이용하는 다른 이용자들에게 영향을 주고, 게임 서비스 자체에도 직접적인 영향을 미치게 됩니다. 게임의 안정성을 지키고, 정상 사용자들을 보호하기 위하여 게임 어뷰징 행위에 빠르게 대응하는 것이 중요합니다.

이런 어뷰징에 대응하기 위해서는 서로 다른 형태의 로그들을 연관해서 분석함으로써 문제의 원인을 찾고, 수정하는 것이 필요한데 가장 큰 걸림돌은 대용량의 로그 데이터들을 빠르게 처리할 수 있는가였습니다. 라인에서 다루는 각종 데이터의 분량이 많아지면서 기존의 전통적인 방식으로의 Big Data 처리과정은 현상이 발생한 후 수십 분, 수백 분 후에 사안을 확인할 수 있었습니다. 또한, 데이터의 형태(RDB, NoSQL, File, API)나 대용량 서비스를 위한 Data Sharding과 같은 기술 도입 등의 이유로 모든 데이터를 연계하는 것은 쉬운 일이 아니었습니다. 무엇보다도 인기 게임의 경우는 유입되는 데이터 자체가 매우 많습니다. 다양한 관점에서 빠른 데이터 처리를 가능하게 하는 여러 오픈 소스들을 조합하여 가능성을 체크해보았습니다. 그 결과, 작업 분배와 자원 활용을 위해 Apache Mesos와 Apache Spark을 활용하고 시각화는 Apache Zeppelin을 사용하는 것이 원하는 데이터 처리 요구사항에 가장 근접하는 것임을 확인하였고 적절한 구성을 시도하였습니다.

전체 구성은 Spark와 Mesos, Zeppelin, HDFS의 오픈소스로 구성해 보았습니다. 결과적으로 여러 형태의 데이터를 연결하여 15TB 가량을 10분 이내에 처리하고 결과를 확인할 수 있는 안정적인 분석 환경을 구성할 수 있었습니다. 또한 다양한 어뷰저들을 데이터(게임, 엑세스, 빌링)에 대한 연관 분석을 통해 추출합니다. 더불어 언제든지 위험성이 높은 사용자들을 빠른 시간 내에 조회하고 확인할 수 있어야 한다는 요구 사항을 만족하는 체계를 만들었습니다. 이러한 체계를 Airborne이라고 명명하였습니다.

Airborne 구성 목표

Airborne을 구성하면서 아래의 항목들을 고려하였습니다.

  • 분산 병렬 데이터 처리
  • 분산 환경의 작업 분배 및 실행의 최적화를 위한 시스템 자원 관리
  • 유연한 서버 확장 기술
  • 효율적인 시각화 도구
  • 스트리밍 데이터 처리
  • 장애 극복

Airborne 아키텍처

Airborne 아키텍처는 아래와 같습니다.

Airborne 시스템

Airborne 시스템은 아래 그림과 같이 구성했습니다. airborne system

RDB, SNS, LOG 등의 여러 형태의 데이터는 Python, Perl, C 언어를 사용해서 수집하고 있습니다. MySQL에 한해서는 실시간 시계열 데이터 수집을 위해서 mysql binlog 유틸리티를 사용합니다. 쿼리를 통한 데이터 획득 대신에 원격으로 복제 로그를 수집해서 파싱하는 방법도 사용합니다.

구성상에서 Spark는 standalone 모드로 사용하고 Mesos를 통해 자원을 관리합니다. 로컬리티를 위해서 HDFS와 Spark executor는 최대한 가까운 곳에 두기로 했습니다. 물론, disk의 경우도 I/O 속도를 확보하고자 SSD를 사용하였습니다. 최초 수행 시에는 Mesos를 통해서 HDFS에 저장된 Spark executor package를 관리하는 위치에 압축 해제하고 실행환경을 자동으로 구성해 줍니다. 또한 Zeppelin을 사용하여 필요한 데이터를 정의, 구성하고 Spark SQL을 통해서 데이터를 효과적이고 빠르게 시각화할 수 있습니다.

분산 데이터 저장소로 Cassandra on Mesos를 활용하며 대용량 처리를 통해서 얻은 요약 정보를 저장하는 용도로 사용합니다. Cassandra node는 Marathon을 통해서 유연한 확장을 할 수 있게 구성하였습니다. Marathon을 통해서 fault tolerance를 수행합니다. 필요한 경우에는 node의 factor를 필요한 만큼 추가하여 클러스터를 자동으로 확장할 수 있습니다.

보안데이터 분석

많은 시행착오를 통해 Airborne을 구성할 수 있었고, 현재는 이 시스템을 활용하여 여러 가지 보안 업무를 수행할 수 있게 되었습니다. 대용량의 데이터를 빠른 시간 안에 일반적인 쿼리를 통해서 질의하고, 이를 시각화함으로써 효율적으로 문제 부분을 확인할 수 있습니다. 물론, 여러 유형의 데이터를 하나의 행으로 연결하여 일반적인 방법으로는 분석이 어려웠던 데이터를 좀 더 유연하게 볼 수 있습니다. 일부 데이터에 대해서는 실시간 수준의 시각화도 가능한 상태입니다.

다음은 탐지, 분석 중인 일부 어뷰징 사례에 대해서 소개하고자 합니다.

사례 1 – 빌링 데이터 분석을 통한 코인 어뷰징 탐지

case1 빌링 데이터를 주기적으로 분석하고 정해진 필터링 조건에 의해서 어뷰징 요소를 탐지합니다. 일부 어뷰징 요소의 정책에 따른 대응을 실시하였고, 실시 후 어뷰징 요소가 감소되는 결과를 확인할 수 있습니다.

실제 대응을 실시한 후 화살표로 표시한 것과 같이 어뷰징이 감소함을 확인할 수 있습니다. 어뷰징 유형은 해킹 툴을 이용하여 메모리를 변조하거나 코드를 변경하여 실제 로직과는 다른 행위를 하는 것 등 여러 가지 방법이 존재합니다. 이와 같은 부분을 데이터의 관점으로 탐지해서 대응한 사례입니다.

사례 2 – LINE Rangers 게임 데이터 분석을 통한 어뷰징 탐지

case2 Airborne을 통해서 다양한 방법의 해커 시도가 있음을 인지할 수 있고, 게임 데이터를 분석함으로써 필요한 부분에 적절한 보안 대응을 하고 대응 결과를 바로 확인할 수 있습니다. 탐지된 어뷰징 요소는 지속적으로 관찰할 수 있도록 시간별 또는 일별로 주기적으로 자동 분석 되도록 하고 모니터링을 하고 있습니다.

특정 국가에서 소셜을 통해 확산되는 부정행위를 탐지하고 화살표로 표시한 것과 같이 해당 부정행위가 대응으로 인해 해소됨을 확인할 수 있습니다. 실제 게임을 수행하지 않고도 자동으로 캐릭터를 육성하거나 랭킹을 조작하는 경우도 부정행위로 간주하고 대응한 사례가 됩니다.

사례 3 – LINE Bubble 어뷰징 탐지

case3 데이터를 쉽고 빠르게 다룰 수 있게 됨으로써 새로 출시되는 서비스에도 분석 환경을 바로 제공하여 상시 모니터링이 가능합니다.

신규로 출시되는 서비스의 경우는 초기에는 어뷰징 요소가 발생하지 않습니다. 다만, 서비스가 성장하는데 있어서 어뷰징 요소는 서비스의 위험이 될 수 있기 때문에 다른 서비스에서 관찰된 동일한 형태의 유형이 없는지의 확인도 필수적으로 관찰하는 부분입니다.

노란색과 빨간색 타원으로 표시한 데이터는 정상적인 데이터로, 유형을 나누어 다각도로 확인하고 있음을 보여줍니다.

결론

Airborne을 활용해서 그동안 규모가 커서 다룰 수 없었던 여러 이슈들에 대해서도 위의 사례와 같이 개발 부서와 운영 부서에서 직접 문제점을 확인하고 대응하는 것이 가능해졌습니다. 아직 적용 초기 단계인 상황에서 다양한 상황과 문제들에 직면하게 되겠지만 그동안 빠르게 처리할 수 없는 데이터들에 대해 문제점을 찾아내고, 빠르게 대응할 수 있도록 구성한 부분은 의미가 있다고 생각합니다.

다양한 빅데이터 처리 환경이 빠르게 발전하고 있습니다. 그러나 필요한 목적에 맞는 환경을 구축하고 결과를 얻어내는 것은 여전히 어려운 부분입니다. 게임 보안 개발에서는 게임의 안정성과 부정사용자들의 빠른 탐지를 위해 이와 같은 체계를 구성함으로써 안전하게 게임을 할 수 있는 환경을 제공하고자 노력하고 있습니다. 빠른 데이터 처리가 필요한 곳에도 많은 도움이 되지 않을까 생각합니다.