edr: dns域名采集
dns采集信息
type DnsInfo struct {
//请求的域名
Qname string `json:"qname"`
Cname []string `json:"cname"`
Ipv4 []string `json:"ipv4"`
Ipv6 []string `json:"ipv6"`
Md5 string `json:"md5"`
}
恶意软件一般通过使用DGA算法与C2服务器建立通信,因此, 在本地机器上采集dns请求信息可以检测是否存在恶意软件,因而 推测出主机是否已经失陷。
Tcpdump
winsun@ubuntu:~$ sudo tcpdump -i ens33 -nt -s 500 port domain
listening on ens33, link-type EN10MB (Ethernet), capture size 500 bytes
IP 192.168.121.137.33266 > 192.168.121.2.53: 42909+ A? www.baidu.com. (31)
IP 192.168.121.137.46547 > 192.168.121.2.53: 11678+ AAAA? www.baidu.com. (31)
IP 192.168.121.2.53 > 192.168.121.137.33266: 42909 3/0/0 CNAME www.a.shifen.com., A 180.101.50.188, A 180.101.50.242 (90)
IP 192.168.121.2.53 > 192.168.121.137.46547: 11678 1/1/0 CNAME www.a.shifen.com. (115)
IP 192.168.121.137.35671 > 192.168.121.2.53: 47145+ AAAA? www.a.shifen.com. (34)
IP 192.168.121.2.53 > 192.168.121.137.35671: 47145 0/1/0 (97)
IP 192.168.121.137.57397 > 192.168.121.2.53: 13108+ PTR? 242.50.101.180.in-addr.arpa. (45)
IP 192.168.121.2.53 > 192.168.121.137.57397: 13108 NXDomain*- 0/0/0 (45)
DGA
DGA(Domain Generation Algorithm)算法,生成速变域名,
该方式作为备用或者主要的与C2服务器通信的手段,可以构造更加鲁棒的僵尸网络,
做到对感染肉鸡的持续性控制。
DGA算法由两部分构成,种子和算法,可以根据种子和算法对DGA域名进行分类。 DGA域名可以表示为AGD(Algorithmically-Generated Domains)。
- 按照种子进行分类
种子是攻击者和客户端恶意软件共享的一个DGA算法的输入参数之一,不同的种子得出的DGA域名是不一样的。 一般来说,种子可按如下方式进行分类:
-
基于时间的种子(Time dependence)。 DGA算法将会使用时间信息作为输入,如:感染主机的系统时间,http响应的时间等。
-
是否具有确定性(Determinism)。 主流的DGA算法的输入是确定的,因此AGD可以被提前计算,但是也有一些DGA算法的输入是不确定的, 如:Bedep以欧洲中央银行每天发布的外汇参考汇率作为种子, Torpig用twitter的关键词作为种子,只有在确定时间窗口内注册域名才能生效。
根据种子的分类方法,DGA域名可以分为以下4类:
算法 | 时间相关性 | 确定性 |
---|---|---|
TID(time-independent and deterministic | 与时间相关 | 可确定 |
TDD(time-dependent and deterministic) | 与时间不相关 | 可确定 |
TDN(time-dependent and non-deterministic) | 与时间相关 | 不可确定 |
TIN(time-independent and non-deterministic) | 与时间不相关 | 不可确定 |
- 按照生成算法进行分类
现有DGA生成算法一般可以分为如下4类:
算法分类 | 算法内容 |
---|---|
基于算术 | 该类型算法会生成一组可用ASCII编码表示的值,从而构成DGA域名,流行度最高。 |
基于哈希 | 用哈希值的16进制表示产生DGA域名,被使用的哈希算法常有:MD5,SHA256。 |
基于词典 | 该方式会从专有词典中挑选单词进行组合,减少域名字符上的随机性,迷惑性更强,字典内嵌在恶意程序中或者从公有服务中提取。 |
基于排列组合 | 对一个初始域名进行字符上的排列组合。 |
根据种子和生成算法的不同,DGA域名可以选择不同种子类型和算法类型的组合方式,因此最终DGA域名的生成形式多样性高。
- DGA域名存活时间
Plohmann Daniel等人对43个恶意软件家族做逆向分析, 实现了DGA算法并对超过1亿个DGA域名做分析,结合WHOIS信息,统计出了不同DGA家族域名存活时间的分布。 总结来说DGA域名的存活时间一般较短,大部分域名的存活时间为1-7天,因此DGA域名这种存活时间短的特性对防守方的检测实时性提出了更高的要求, 防守方需要在尽量短的时间内对检测出DGA域名,并作出相应的处置措施,才能有效降低风险。
简单dga算法
def map_to_lowercase_letter(s):
return ord('a') + ((s - ord('a')) % 26)
def next_domain(domain):
dl = [ord(x) for x in list(domain)]
dl[0] = map_to_lowercase_letter(dl[0] + dl[3])
dl[1] = map_to_lowercase_letter(dl[0] + 2*dl[1])
dl[2] = map_to_lowercase_letter(dl[0] + dl[2] - 1)
dl[3] = map_to_lowercase_letter(dl[1] + dl[2] + dl[3])
return ''.join([chr(x) for x in dl])
seed = 'earnestnessbiophysicalohax.com' # 15372 equal to 0 (seed = 0)
domain = seed
for i in range(1000):
print(domain)
domain = next_domain(domain)
DGA:
earnestnessbiophysicalohax.com
kwtoestnessbiophysicalohax.com
rvcxestnessbiophysicalohax.com
hjbtestnessbiophysicalohax.com
txmoestnessbiophysicalohax.com
agekestnessbiophysicalohax.com
dbzwestnessbiophysicalohax.com
sgjxestnessbiophysicalohax.com
igjyestnessbiophysicalohax.com
zxahestnessbiophysicalohax.com
zfrpestnessbiophysicalohax.com
hdquestnessbiophysicalohax.com
umcuestnessbiophysicalohax.com
hrbyestnessbiophysicalohax.com
ysrtestnessbiophysicalohax.com
kgteestnessbiophysicalohax.com
hfsnestnessbiophysicalohax.com
njxfestnessbiophysicalohax.com
lpagestnessbiophysicalohax.com
DGA检测
参考
- 原文作者:winsun
- 原文链接:https://winsun.github.io/fightsec/post/edr_02_dns/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。