什麼是DGA?
DGA(Domain Generation Algorithm,網域生成算法)是一種由惡意軟體或惡意行為者使用的技術,用於自動生成大量隨機或偽隨機的網域名稱。
這些網域名稱通常指向惡意伺服器,使得惡意軟體能夠避開傳統的安全防護措施並保持與控制伺服器的通信。
DGA的工作原理
DGA技術主要包括以下步驟:
- 算法設計:攻擊者設計一個DGA算法,根據一些變量(如日期、時間、隨機數等)生成網域名稱。
- 惡意軟體部署:惡意軟體被設計為在運行時使用該算法生成網域名稱。
- 嘗試連接:惡意軟體會依次嘗試與生成的網域名稱進行連接,直到找到一個有效的控制伺服器。
- 通信和控制:一旦連接成功,惡意軟體可以接收控制指令,進行數據竊取、破壞或其他惡意活動。
DGA算法設計
DGA算法的設計和生成的網域名稱可以根據使用的種子和算法類型進行分類。
根據種子進行分類
種子是攻擊者利用DGA算法生成DGA域名的輸入參數之一,不同的種子得出的DGA域名是不一樣的。
DGA使用的種子有很多種類,包括日期、社交網絡搜索熱詞、隨機數或詞典等,DGA根據種子生成一串字符前綴,添加頂級域名後得到最終生成的域名(AGD, Algorithmically Generated Domain)。
種子有兩個維度:
- 基於時間維度的種子:DGA算法使用時間信息作為輸入,例如受控主機的系統時間、HTTP響應的時間等。
- 基於確定性維度的種子:主流的DGA算法的輸入是確定的,因此AGD可以被提前計算,但是也有一些DGA算法的輸入是不確定的,例如:知名惡意軟體Bedep以歐洲銀行每天發布的外匯參考匯率作為種子,惡意軟體Torpig用大型社交網站的關鍵詞作為種子,只有在確定時間窗口內註冊域名才能生效。
根據種子的分類方法,DGA域名可以分為以下4類:
- TDD(time-dependent and deterministic):與時間相關,可確定。
- TDN(time-dependent and non-deterministic):與時間相關,不可確定。
- TIN(time-independent and non-deterministic):與時間不相關,不可確定。
- TID(time-independent and deterministic):與時間不相關,可確定。
根據生成算法進行分類
現有DGA生成算法一般可以分為如下4類:
- 基於算術(Arithmetic-based):該類型算法會生成一組可用ASCII編碼表示的值,從而構成DGA域名,流行度最高。
- 基於哈希(Hash-based):用哈希值的16進制表示產生的DGA域名,常使用的哈希算法有:MD5、SHA256等。
- 基於詞典(Wordlist-based):該方式會從專有詞典中挑選單詞進行組合,減少域名字符上的隨機性,迷惑性更強,詞典內嵌在惡意程序中或者從公有服務中提取。
- 基於排列組合(Permutation-based):對一個初始域名進行字符上的排列組合。
DGA的缺點
DGA技術雖然強大,但也有其自身的缺點:
- 查詢效率低:需要逐一便利查詢AGD(Algorithmically Generated Domain),尋址效率低。
- 易被發現:大量NXDomain(Non-Existent Domain)流量會導致通信容易被檢測到並發現。
- 高成本和風險:如果AGD數量過多,出於時間和金錢成本的考慮,攻擊者難以全部註冊,防禦人員可以搶註並通過sinkhole手段測量或劫持僵屍網絡。
具體示例
假設攻擊者設計了一個簡單的DGA算法,根據當前日期生成網域名稱:
import time
import hashlib
def generate_domain(date):
# 使用當前日期生成一個種子
seed = date.strftime("%Y-%m-%d")
# 對種子進行哈希處理
hash = hashlib.md5(seed.encode()).hexdigest()
# 從哈希中取出部分字符作為網域名稱
domain = hash[:8] + ".example.com"
return domain
# 生成當前日期的網域名稱
current_date = time.localtime()
domain = generate_domain(current_date)
print("Generated domain:", domain)
假設今天是2024年6月23日,上述算法會生成如下網域名稱:
Generated domain: d41d8cd9.example.com
資訊安全風險
DGA技術對資訊安全構成了以下主要風險:
- 難以追蹤和攔截:由於生成的網域名稱是動態且大量的,這使得安全專家難以預測和攔截這些通信。同時,也增加了惡意軟體操作的持續性和難以被阻斷的特性。
- 提高生存能力:即使某些網域名稱被識別和阻斷,新的網域名稱會繼續生成,確保惡意軟體能夠繼續運作。
- 隱蔽性強:攻擊者可以利用DGA生成的網域名稱來分散其惡意活動,這樣即使部分網域被阻斷,其他網域仍能繼續運作。
如何防護
為了有效防護DGA技術帶來的風險,企業和個人可以採取以下措施:
- DNS流量分析:利用先進的DNS流量分析技術,識別和阻斷異常的網域生成模式。
- 威脅情報共享:參與威脅情報共享計劃,獲取最新的DGA網域情報,及時更新安全防護策略。
- 機器學習:採用機器學習算法來識別DGA生成的網域名稱,這些算法可以通過分析網域名稱的特徵來檢測和阻斷潛在的威脅。
- 黑名單和白名單:建立和維護網域名的黑名單和白名單,阻止已知惡意網域,同時允許可信網域的正常通信。
- 定期安全審計:定期對網絡進行安全審計,檢查是否有異常的網域訪問記錄,及時發現和處理潛在威脅。
結論
DGA技術的出現為惡意軟體帶來了更強的隱蔽性和持續性,對資訊安全構成了嚴峻挑戰。
然而,通過採取適當的防護措施,如DNS流量分析、威脅情報共享和機器學習等技術,可以有效降低DGA技術帶來的風險,保護數據和系統安全。