동적 시드가 있는 DGA 계통: DNS 트래픽의 예상치 못한 동작
편집 및 추가 설명: 트리샤 하워드(Tricia Howard) 및 랜스 로즈(Lance Rhodes)
핵심 요약
Akamai 연구원들이DNS(Domain Name System) 트래픽 데이터 내에서, 리버스 엔지니어링 알고리즘이 제안하는 것과 다른 동작이 동적으로 시드된 DGA(Domain Generation Algorithm) 계통에서 관찰되는 이유를 밝히고 그 이유를 설명합니다.
변경된 동작은 악성 공격자가 DGA 계통의 기능을 더욱 강화해 C2(Command and Control) 통신 채널의 수명을 연장함으로써 봇넷을 보호하려 하고 있음을 시사합니다.
보안 연구원들은 정적으로 시드된 DGA보다 동적으로 시드된 DGA의 향후 생성 도메인 이름을 예측하는 것이 더 복잡하다는 사실을 발견했습니다.
Pushdo 및 Necurs의 DGA 계통을 자세히 살펴보면, 예상 생성 날짜 전후에 악성 도메인을 출력한다는 것을 알 수 있습니다.
서론
이 블로그 게시물에서는 DGA에 대한 간략한 개요를 제공한 다음 몇 가지 흥미로운 결과를 공유합니다.
Akamai Security Intelligence Group은 CacheServe DNS 서버에서 발생하는 DNS 쿼리의 익명화된 로그를 분석할 수 있습니다. 봇넷 탐지 노력의 일환으로 100개 이상의 알려진 DGA 계통의 실제 동작을 관찰하고 모니터링합니다.
그 결과 동적으로 시드된 DGA(DGA의 하위 세트)는 리버스 엔지니어링된 DGA 알고리즘 자체에서 보이는 것과는 매우 다른 동작을 보이는 경우가 많다는 사실을 발견했습니다. 보다 정확하게는 DGA 도메인 네임이 예상 생성 날짜 이전에 활성화되는 것을 확인했습니다.
도메인 생성 알고리즘이란 무엇일까요?
멀웨어(예: 봇넷)는명령이나 업데이트를 받기 위해 중앙 집중식 서버와 통신해야 하는 경우가 많습니다.
DGA는 대량의 반무작위 도메인 이름을 생성하기 위해 멀웨어에 사용되는 알고리즘입니다.
감염된 디바이스는 DGA가 제공하는 알고리즘으로 생성된 전체 도메인 세트에 주기적인 연결을 시도합니다. 하나의 도메인에만 성공적으로 도달하면 C2 서버와의 연결을 설정할 수 있습니다. 따라서 사이버 보안 연구원들이 C2 통신을 차단하기가 더 어렵습니다.
작동 방식
예를 들어, 하루에 500개의 악성 도메인 이름을 생성하는 가상의 DGA 계통이나 변종을 사용하는 봇넷이 있다고 가정해 보겠습니다.
이 DGA 계통을 사용하는 감염된 디바이스는 매일 500개의 도메인 이름을 모두 쿼리합니다. 봇넷의 C2 서버는 매일 동일한 500개의 도메인 이름을 생성합니다(동일한 시드가 사용된다고 가정하며, 이에 대해서는 나중에 자세히 설명합니다). 그러나 악성 공격자는 이 500개의 도메인 중 1개만 제어하면 감염된 머신(봇)과의 통신이 설정될 수 있습니다.
때로는 시드가 변경되어 새로운 도메인 세트가 생성되고 프로세스가 새로 시작되기도 합니다. 도메인이 자주 변경되고 "ghlidae[.]com"과 같이 무작위로 보이는 도메인이 많기 때문에 보안 연구원들이 악성 트래픽을 차단하기 어렵습니다.
TLD(Top-Level Domain)은 하드코딩되어 있으며 대부분 취득 비용이 저렴한 TLD로 제한되어 있습니다.
DGA에는 매우 다양한 종류가 있습니다. 보안 커뮤니티에서 새로운 알고리즘을 발견하면(때로는 리버스 엔지니어링에 성공하기도 함) 일반적으로 ‘계통 이름’을 부여합니다. 가장 잘 알려진 DGA 계통으로는 Conficker, Mirai,CryptoLocker가 있습니다.
DGA의 역사
예를 들어 봇넷,크라임웨어, 랜섬웨어와 같은 멀웨어는 감염된 디바이스와 통신해야 합니다. DGA가 등장하기 전에는 멀웨어 작성자가 단순히 도메인이나 도메인 목록을 멀웨어 코드에 하드코딩했습니다. 그러면 감염된 머신이 주기적으로 하드코딩된 도메인에 연결을 시도해 C2 서버와 통신을 설정했습니다.
보안 팀이 멀웨어의 소스 코드를 확보하면 하드코딩된 모든 도메인을 간단히 차단 목록에 올릴 수 있었습니다.
연구원: 1. 악성 공격자: 0.
DGA를 구축한 최초의 멀웨어 계통은 2008년 초의 Kraken 계통이었습니다. 그러나 그해 말 Conficker 계통이 DGA를 대중화했습니다.
Conficker.A는 하루에 250개의 도메인 이름을 생성했습니다. Conficker.C는 한발 더 나아가 하루에 5만 개의 도메인을 만들었습니다. 결과적으로 보안 팀은 갑자기 매일 수많은 신규 도메인을 탐지하고 차단해야 했습니다. 반면에 악성 공격자들은 매일 도메인 이름 중 단 하나만 제어하는 것으로 충분했습니다.
연구원: 1. 악성 공격자: 1.
C2 통신의 강화
DGA는 C2 통신을 더욱 견고하게 만들어, 다음과 같은 캠페인을 활성화시켰습니다.
분산 서비스 거부 (DDoS) 공격
암호화폐 채굴
감염된 디바이스의 민감한 정보 판매
스파이웨어
광고 및 이메일 사기
멀웨어의 자체 확산
이러한 캠페인 중 일부는 오늘날까지도 사이버 보안 커뮤니티를 괴롭히고 있습니다. DGA는 매우 효과적인 것으로 입증되었습니다.
동적 시드와 정적 시드란 무엇일까요?
DGA에는 동적 시드와 정적 시드라는 두 가지 주요 범주가 있습니다. 차이점을 이해하려면 먼저 ‘시드’라는 개념을 이해해야 합니다.
시드는 기본적으로 PRNG(Pseudorandom Number Generator)의 시작 입력입니다. 시드는 PRNG를 사용하는 모든 알고리즘의 출력에 직접적인 영향을 미칩니다.
예를 들어 42의 시드를 사용하는 특정 DGA 계통은 항상 정확히 동일한 도메인 이름 목록을 출력합니다. 시드를 50과 같은 다른 값으로 변경하면 완전히 다른 결과가 출력됩니다.
아시다시피 시드는 DGA에 매우 중요한 역할을 합니다. 감염된 봇넷 디바이스는 접속해야 하는 C2 서버와 동일한 DGA 알고리즘뿐만 아니라 동일한 시드를 사용해야 합니다.
DGA 시드는 다양한 방법과 다양한 소스를 기반으로 생성될 수 있습니다.
DGA 시드가 시간이 지나도 변경되지 않는 경우(종종 하드코딩됨) 이를 정적 시드 DGA라고 부릅니다.
일부 DGA는 시간이 지남에 따라 변경되는 시드를 사용합니다. 이를 동적 시드 DGA라고 합니다.
정적으로 시드된 DGA
정적 시드는 난수, 유명인 이름, 독립 선언문, 단어 사전 등 악성 공격자가 쉽게 다른 것으로 바꿀 수 있는 모든 것이 될 수 있습니다.
이러한 시드는 일반적으로 오랜 기간 동안 일정하게 유지되며 일관된 도메인 이름 시퀀스를 생성합니다.
이러한 DGA와 시드의 조합은 알고리즘이 리버스 엔지니어링되지 않고 사이버 보안 연구원이 시드를 발견하지 않는 한 계속 유효합니다. 시드가 발견되면 생성된 모든 도메인 이름은 빠르게 차단 목록에 올라갑니다. 그러면 악성 공격자는 새로운 도메인 이름 목록을 생성하기 위해 시드를 변경해야 합니다.
Akmai 내부에서는 정적으로 시드된 DGA를 ‘정적 DGA’로 간편하게 부르며, 이 글의 나머지 부분에서는 이 용어를 사용하겠습니다.
동적으로 시드된 DGA
동적으로 시드된 DGA(또는 간단히 ‘동적 DGA’)는 보안 연구원을 괴롭히는 존재입니다.
동적 DGA는 시간에 따라 달라지는 시드를 사용합니다. 일반적으로 현재 날짜가 가장 많이 사용됩니다. 환율, 기온, 심지어 Google 트렌드나 Twitter 인기 토픽을 사용하는 DGA도 있습니다.
시드를 예측할 수 있는 경우 보안 연구원들은 미래의 특정 시점에 어떤 도메인 이름이 생성될지 예측할 수 있습니다. 물론 DGA 계통을 성공적으로 리버스 엔지니어링해야 합니다.
시드가 날짜를 기준으로 하는 경우, 일반적으로 24시간 동안 동일한 도메인 이름 세트가 나타납니다(즉, 매일 자정 직후에 새로운 도메인 세트가 생성됨).
내일 활성화될 DGA 도메인을 알면 이러한 도메인을 차단 목록에 선제적으로 추가해 봇넷으로부터 최종 사용자를 보호할 수 있습니다.
안타깝게도 Google 트렌드, 기온 또는 환율 같이 예측할 수 없는 시드에서는 이러한 시나리오가 불가능합니다. 계통 소스 코드가 있더라도 향후 생성될 DGA 도메인 이름을 정확히 예측할 수는 없습니다.
동적 DGA: 기대와 현실
Akamai 리서치 팀은 12개 이상의 DGA에 대해 예상치 못한 동작을 관찰하고 조사했습니다. 특히 흥미로운 두 가지 동작을 살펴보겠습니다.
두 가지 예는 모두 날짜를 시드로 사용하는 동적 DGA 계통입니다. 즉, 시드(날짜)를 리버스 엔지니어링된 DGA와 결합하면 DNS 쿼리 로그에 언제어떤 도메인 이름이 표시될지 예측할 수 있습니다.
예측한 내용과 실제 DNS 트래픽 데이터에서 확인된 내용을 비교해 보겠습니다.
보다 간결하게, 이 섹션의 나머지 부분에서는 ‘날짜를 시드로 사용하는 동적 DGA 계통’의 줄임말로 ‘DGA’나 ‘DGA 계통’을 사용하겠습니다.
트래픽 데이터의 DGA 보기
그림 1은 트래픽 데이터의 DGA에 대한 일반화된 보기를 제공합니다. 이 그림의 직관적 의미를 제대로 전달하려면 약간의 컨텍스트가 필요합니다.
먼저 축을 정의해 보겠습니다.
X축은 DNS 트래픽 데이터에서 DGA 계통의 도메인 이름이 표시되는 예상 날짜(시드 날짜)와 관찰 날짜 사이의 시간 차이(일 수로 측정)를 나타냅니다.
Y축은 트래픽 데이터에 표시된 도메인의 고유 번호입니다.
시드는 24시간마다 변경될 것으로 예상됩니다. 즉, 매일 자정이 지나면 DGA가 새 시드에서 새 도메인 이름 세트를 활성화할 것입니다. 즉, 24시간 동안 동일한 도메인 이름 세트가 표시되다가 변경된다는 뜻입니다. 이를 빨간색 막대로 표시합니다. 빨간색 막대는 지연 시간이 없는 이상적인 세계에서 이러한 DGA 계통에 예상되는 것을 보여줍니다.
오른쪽에는 보라색 막대로표시된 DNS 데이터가 시스템에 도달하기 전 다양한 단계에서의 지연 시간을 고려했을 때 예상되는 지연 시간입니다. 대부분의 지연 시간은 의도된 것이 아닌 한 며칠이 아닌 몇 분 또는 몇 시간 단위로 측정되기 때문에, 오른쪽으로 약간 이동할 뿐입니다.
하지만 왼쪽에는 녹색 막대로표시된 예상치 못한 현상이 있습니다. 무슨 일이 일어나고 있는 것일까요? 이론적으로 생성된 날짜 이전에 DGA 도메인 이름이 관찰되고 있습니다!
이 이상한 동작은 악성 공격자가 탐지를 더욱 복잡하게 만들고 악성 활동을 보호하기 위해 이러한 DGA를 수정했음을 시사합니다.
Pushdo 계통 트래픽
Pushdo 계통의 경우, X축에 0~1일 사이의 24시간 동안 쿼리된 모든 도메인이 표시될 것으로 예상됩니다(그림 2). 이것은 빨간색 음영으로 표시되었습니다.
실제로 관찰되는 것은 예상 날짜로부터 -50일에서 +50일 사이의 트래픽에서 고유 도메인 이름의 분포입니다. 피크는 0이 되기 바로 전인 10000에 있습니다.
시드(날짜)가 정규 분포처럼 보이는 무언가를 통해 최대 50일까지 이동한 것으로 보입니다.
이를 위한 Python 코드는 다음과 같습니다.
import numpy as np
import pandas as pd
from datetime import datetime
seed = datetime.now().date()
shift = np.random.normal(loc=0, scale=15, size=1).astype(int)[0]
modified_seed = seed + pd.to_timedelta(f'{shift} days')
Akamai는 이를 악성 공격자가 보안 연구원들을 좌절시키거나 혼란스럽게 하려는 시도로 해석합니다.
다행히 Akamai는 전혀 혼란스럽지 않습니다. Akamai의 DGA 탐지 시스템은 그림 2에 표시된 전체 스펙트럼을 커버합니다.
Necurs 계통 트래픽
Necurs 계통의 경우, -7일에서 +7일 사이의 고유 도메인 이름 분포를 볼 수 있습니다(그림 3). 또한 +12일 전후로 훨씬 작은 스파이크가 있지만, 이는 설계의 산물로 간주할 수 있을 만큼 충분히 큽니다.
이는 일부 악성 공격자들이 동일한 도메인 세트를 사용하기 위해 충분히 오래 기다리지만, 예상 날짜로부터 7일이 지난 후로 사용을 미루면서 도메인 이름을 7일간 지연시키고 있음을 시사합니다.
결론
DNS 요청에서 동적으로 시드된 DGA의 활동을 분석할 때 몇 가지 예상치 못한 동작을 관찰했습니다. 이러한 비정상적인 동작은 악성 공격자가 다양한 방식으로 DGA 시드를 수정하기 때문일 수 있다는 결론을 내렸습니다. Akamai가 조사한 Pushdo와 Necurs의 두 가지 DGA 계통은 예상 생성일 전후로 악성 도메인을 출력하며, 그 범위는 예상 생성일로부터 50일 전후까지 다양합니다.
Akamai의 분석에 따르면 이는 DGA 탐지 시스템을 피하고 보안 리서치 팀의 작업을 복잡하게 만들기 위한 시도로 보입니다. 악성 공격자들은 봇넷을 보호하고 C2 통신 채널의 수명을 연장할 방법을 계속 찾고 있으나, 보안 연구원들은 이러한 조치에 대응하고 실제 상황과 예상되는 상황을 효과적으로 식별하고 있습니다.
관심 유지
Akamai의 최신 보안 리서치 내용을 확인하려면 Twitter에서 Akamai를 팔로우하세요.