1
恶意软件发起恶意域名请求通常也不会fork新的进程。和正常的应用程序一样,恶意软件通常会在其已有的进程上下文中使用网络API来执行DNS查询。这样做更加高效,因为fork新进程会消耗更多的系统资源,并且可能会引起安全软件的注意。
恶意软件通常会尽量避免引起注意,因此它们倾向于使用以下方法之一来发起DNS请求:
直接在应用程序中发起请求:恶意软件可以直接使用标准的网络库函数(如getaddrinfo)在其当前进程中发起DNS请求。
使用系统工具:恶意软件可能会使用系统上已有的工具(如nslookup、dig等)来发起DNS请求,这些工具可能会创建新的进程,但这是工具自身的行为,而不是恶意软件直接使用fork。
异步或后台线程:恶意软件可能会在后台线程中发起DNS请求,这样可以避免阻塞主执行线程,同时保持对系统资源的低消耗。
利用已有的网络连接:如果恶意软件已经建立了与其控制服务器的网络连接,它可能会通过这个已有的连接来发送DNS查询请求,而不是直接与DNS服务器通信。
利用其他进程:在某些情况下,恶意软件可能会注入代码到其他进程中,利用这些进程来发起DNS请求,以隐藏其活动并绕过安全检测。
在所有这些情况中,恶意软件的目标通常是最小化其在系统上的可见性和资源占用,同时执行其恶意活动。因此,除非有特定的技术需求或策略目的,恶意软件通常不会仅仅为了发起DNS请求而fork新的进程。
2
这段话似乎混合了两个不同的概念:拦截恶意域名请求和拦截fork调用。让我们分开来看:
拦截恶意域名请求:
拦截恶意域名请求通常是通过监控DNS查询来实现的。这可以通过网络层的监控工具、防火墙、DNS过滤服务或者本地代理来完成。这些工具会检查发出的DNS请求,并与已知的恶意域名数据库进行比对。如果发现请求的域名是已知的恶意域名,请求可以被阻止,并返回一个错误或者假的IP地址给请求者。
通过preload机制hook fork调用:
这是一个不同的技术,通常用于改变或监控进程创建行为。通过设置LD_PRELOAD环境变量,可以在进程启动时加载一个自定义的共享库。如果这个库提供了一个与fork同名的函数,那么所有对fork的调用都会被重定向到这个自定义函数。在这个自定义的fork函数中,可以实现逻辑来决定是否允许进程分叉,或者在分叉前后执行特定的操作。
将这两个概念结合起来,可能的情况是:
有一个自定义的共享库,它使用LD_PRELOAD来hook进程的创建(fork调用)。
在这个自定义的fork函数中,可能会有逻辑来监控子进程的行为,包括它们发起的DNS请求。
如果监测到子进程试图发起到恶意域名的DNS请求,这个自定义的fork函数可以决定阻止这个请求,或者阻止子进程的创建。
然而,这种方法并不是拦截DNS请求的常规做法,因为它侧重于监控和控制进程的创建,而不是直接监控网络活动。拦截DNS请求通常更直接地在网络层或者应用层进行,而不需要通过fork调用的hook来实现。可能这段话的意思是在进程创建时(通过fork)就开始监控其网络行为,包括DNS请求,但这样的描述并不准确。
3
DNS lookup,或称为DNS查询,是指将域名转换为与之对应的IP地址的过程。这个过程是由DNS(Domain Name System)客户端功能实现的,它可以是操作系统内置的一部分,也可以是某些应用程序提供的功能。
当你在浏览器中输入一个网址或者当一个应用程序尝试连接到互联网上的某个服务时,DNS查询就会被触发。这个查询会经过以下几个步骤:
本地缓存检查:系统首先检查本地DNS缓存,看看之前是否已经解析过这个域名。如果有缓存的条目,就可以直接使用,无需进一步查询。
递归查询:如果本地缓存中没有找到,系统的DNS客户端会向配置的DNS服务器发送查询请求。这通常是一个递归查询,意味着你的本地DNS服务器会代表你向其他DNS服务器查询,直到找到答案。
迭代查询:在某些情况下,如果DNS服务器没有设置为递归查询,或者是在更高级的DNS查询工具中,DNS客户端可能会执行迭代查询。在这种情况下,DNS客户端会从根DNS服务器开始,逐步向下查询,直到找到权威DNS服务器,然后获取到最终的IP地址。
在大多数操作系统中,DNS查询是透明的,用户通常不需要手动执行。但是,如果你想手动进行DNS查询,可以使用如nslookup、dig或host这样的命令行工具。这些工具允许用户查询DNS记录,并提供关于域名解析过程的详细信息。
例如,在命令行中使用nslookup:
nslookup example.com
这个命令会显示example.com域名对应的IP地址,以及执行查询的DNS服务器信息。