需要帮助识别产生奇怪网络流量的 OSX 进程

信息安全 网络 攻击 苹果系统
2021-09-01 11:33:56

从过去几天开始,我注意到我的路由器有点慢,有时会自行重启。查看其日志时,他们的条目如下:

Friday Jul 13 13:09:02 2012 1 Blocked by DoS protection 59.145.XX.XX

我以为我被来自指定 IP 的数据包轰炸并联系了所有者,只是被告知路由器正在阻止我网络中的机器向所述 IP 发送垃圾邮件。

最终,我将不良流量缩小到我的 MBP。即,当我的 MBP 连接时,我偶尔会在路由器中获得这些条目,但对于任何其他机器都没有。为了找出导致问题的原因,我安装了Private Eye,但这并没有标记任何内容。

最后,我运行了 Wireshark,发现某些东西不断地向看似随机的 IP 发送大量数据包。不过,数据包的顺序有一点规律。

  1. 我的机器会向远程 IP 发送一个 ICMP 数据包。
  2. 然后,该 IP 将使用 TCP SYN 返回我的机器,尝试连接到 30149(可能是随机选择的,但这个端口号在我监控它的 5 个小时内没有改变)。
  3. 我的机器会返回一个 [RST, ACK],可能是因为该端口上没有任何东西在监听,因此终止了连接。
  4. 中间还有一个发往同一端口(30149)的 UDP 数据包。
  5. 我记得除了某些 IP 的所有这些之外,我还看到了一个 BitTorrent 连接(由 Wireshark 识别),但那是一次性实例(可能是单个数据包),我无法完全理解这些数据。

我看过其他一些帖子,人们抱怨奇怪的流量,答案通常是机器的一些闲置流量。但这绝对不像是闲置流量。这一系列数据包不断发送。实际上,对于多个 IP,这些步骤一直在并行发生(但它们的相对顺序似乎被保留了)。所以,流量还是蛮大的。当我查看活动监视器时,流量似乎稳定在 5-6 KB/s,除了它是垃圾邮件之外,这并不是很多。

我试图将所有这些缩小到一个过程(或一组),希望这有助于我更好地了解情况。虽然到目前为止我还没有成功。

'lsof -i :30149' 没有帮助,因为那里没有任何东西在听。

我已经安装了Little Snitch,但还没来得及尝试(等待病毒扫描完成以重新启动机器并完成安装)。不过,考虑到Private Eye没有发现任何东西,我不太希望它能确定罪魁祸首。

那么,是否有人对我如何找出产生此流量的过程有任何建议?有人见过类似的流量吗?任何帮助表示赞赏。

- 编辑 -

Ran Little Snitch,但这并没有出现任何问题。即当我运行 Wireshark 时,仍然有同样奇怪的流量。但是Little Snitch并没有提示我这些连接,可能是因为没有建立连接。所以,我仍然不知道是哪个进程产生了这个流量。

- 更新 -

我的步骤错了。该序列以外部 IP 尝试向我的 TCP/UDP 端口 30149 发送数据包开始,但我的机器拒绝了该数据包。在 TCP 的情况下,结果是一个 [RST, ACK]。在 UDP 的情况下,它似乎会发回 ICMP 错误消息(从不知道 ICMP 消息会被发回以响应 UDP 错误)。这是 Wireshark 捕获的屏幕截图,过滤到其中一个 IP: Wireshark 捕获 - 过滤到一个 IP

这是另一个屏幕截图,显示了典型的网络活动: Wireshark 捕获 - 典型的网络活动

192.168.2.5 是 MBP。

因此,我试图将其缩小到本地进程是错误的想法,因为所有这些都是入站连接。

奇怪的是,我只在我的宽带连接上看到这种流量。当我通过我的 Datacard 连接时捕获(关闭 wifi,通常连接到宽带连接),看不到任何流量。因此,看起来所有这些 IP 都在尝试访问我的公共 IP(宽带),这些 IP 是动态分配给我的(但它在一个多月内仍然保持不变)。也许该 IP 的前任所有者被感染了,这只是其结果。不确定。我仍然不明白为什么这个流量只出现在 MBP 上。当我在其他(Windows)机器上设置捕获时它没有出现。

在这一点上,我完全糊涂了,如果这一切看起来有点荒谬,我很抱歉。我知道我应该改写/重写这个问题。我稍后再谈。

3个回答

我通常建议netstat -n -p在 linux 中使用,但 Mac/BSD 版本与与 linux 版本不同的进程的连接不相关。

所以也许试试看sudo lsof -lnP +M -i4sudo如果不是您的用户 ID 正在运行它,-lnP请不要将 UID/IP 地址/端口转换为用户名/域名/公共服务,+M以获取端口映射器注册信息,并-i4查看所有 ipv4 开放连接。

也许watch为该端口编写一个脚本来grep。再次授予 mac 没有 watch 命令,但您可以使用快速脚本进行模拟,例如:

sudo su
while true; do lsof -lnP +M -i4 | grep '30149'; sleep 1; done

并最终按 Ctrl-C 退出。


查看您的编辑;我认为您的计算机可能没问题,但您可能应该在路由器上重新配置防火墙/端口转发规则。

您应该让您的路由器充当防火墙并丢弃/忽略并非源自您发起的连接的随机数据包(并且不会发送到您正在运行的服务器的端口,该端口应该可供外界访问)。假设您的 ISP 发布的 IP 地址是100.101.102.103,我的计算机是1.2.3.4,而您的 macbook pro 是路由器后面的一台计算机,具有本地 IP 地址192.168.2.5如果我从我的机器向100.101.102.103端口 30149 上的机器发送一个数据包,那么您的路由器应该没有理由将该数据包转发到192.168.2.5(与连接到该路由器的任何其他计算机相比)。路由器应该只是丢弃它。

这与您的计算机发起的合法请求形成对比。例如,如果您的路由器知道192.168.2.5已在某个端口请求连接1.2.3.4(例如,我托管的网络服务器的端口为 80;您端的某个随机端口为 58325),那么您的路由器会将接收到的数据包1.2.3.4定向到100.101.102.103端口 58325到192.168.2.5端口 58325 的 macbook 知道这是给谁的数据包(您的路由器记住 IP + 端口组合源自您的计算机),因此默认情况下会适当地转发它。

如果您想在路由器后面的计算机上托管某种服务器,这也与之形成对比。然后,您需要为在某个端口发起连接的外部计算机定义一些端口转发规则,100.101.102.103然后将其映射到正确计算机上的正确端口。例如,如果你有一个 macbook pro 和一个 linux box 192.168.2.3(转发到 macbook pro 的 ssh 端口(192.168.2.5 端口 22)。

总而言之:您的路由器不应设置任何端口转发规则,除非您在需要外部访问的已知端口上运行 http/ssh/nfs/cifs 等服务。

你的电脑很好恕我直言。

我认为您正在被扫描,这是对端口 30149 的目标扫描。我不知道该端口上运行的任何易受攻击的服务,但在我看来,有人正在该端口上寻找某些东西。我怀疑他们正在扫描一个大型网络块,而您的 ISP 提供的公共 IPv4 IP 只是被扫描的众多 IP 之一。

我不相信这是恶意软件 C&C 流量,因为据我所知,一切都是入站启动的。

攻击者正在对端口 TCP 和 UDP 端口 30149 执行扫描,并且根据它们各自的 RFC,当目标端口关闭时,您的 MBP 正确响应(分别为 RFC 793 和 768) - 将 TCP Syn 尝试作为端口的 RST/ACK在 MBP 上已关闭,对于具有 ICMP 端口不可达(类型 3,代码 3)的 UDP 类似,这一切都很好。

如果您对尝试连接到您的各种 IP 执行反向 DNS 查找dig -t x IP,您会发现它们在地理上非常多样化。鉴于攻击的时间很短,这让我相信攻击你的人有一个小型僵尸网络,显然,如果他们不错,你应该看不到他们的真实 IP。

  • 121.54.54.36 - 没有反向记录,但 whois 显示 => 无线宽带,菲律宾马卡蒂市

  • 86.176.100.134 - host86-176-100-134.range86-176.btcentralplus.com => 英国的 ISP

  • 49.156.159.35 - 没有反向记录,但“whois”说 => CityOnline Services Ltd,班加罗尔

  • 78-60-80-5 - 78-60-80-5.static.zebra.lt => 立陶宛媒体公司

  • 81.203.200.189 - 81.203.200.189.dyn.user.ono.com

  • 46.240.50.22 - 没有反向记录,但在欧洲是 RIPE 的一部分

  • 78.165.164.69 - 78.165.164.69.dynamic.ttnet.com.tr => 土耳其的某种 ISP

  • 186-228-40-136 - 186-228-40-136.ded.intelignet.com.br => 巴西邮政服务什么的

  • 81.203.200.189 - 81.203.200.189.dyn.user.ono.com

  • 90.14.19.81 - ALyon-152-1-212-81.w90-14.abo.wanadoo.fr

  • 41.96.92.136 - 它在阿尔及利亚,但没有反向 DNS

这些 IP 地址都来自已被入侵且与您相似的系统(很可能是宽带连接),它们具有来自 ISP 的静态 IP(在上述大多数情况下,主机名是赠品)。

因此,这是您在 Internet 上随处可见的非常标准的入站扫描。'dr jimbob' 提出了一些很好的建议,您应该收紧外部路由器的规则,基本上只允许出站发起的流量(这可能会是“主动 ftp”,但希望您既不使用 ftp,如果使用,它也是“被动的” ')。您可以创建一些 ACL,这样当端口/服务关闭时,您就不会像 ICMP 类型 3 消息一样泄漏信息。我可以在这里永远继续下去,但是这里有很多关于如何创建周边保护的论文忽略了这些天没有真正的周边的事实)。

最后,非常有趣的是,如果您查看Dshield,您会发现 6 月 29 日/30 日,全球范围内扫描端口 30149 的次数激增。

大多数家用路由器(以及不错的路由器)上都有 iptables,您可以在上面做很多事情 - 请参阅HowTo

我会使用 dtrace。设置一个过滤器来查找用于发送 UDP 数据包的 sendto 或 sendmsg、SEND(2) 命令,类似这样;

dtrace -n 'syscall::send*:entry  { printf("%s %d",execname,pid); }'

您必须在其中添加一些额外的解码才能获得传递给这些调用的参数。sendto 和 sendmsg 的参数不同,因此每个调用都需要单独的逻辑。您可以在手册页的第 2 节中找到这些参数。也许搜索一些示例 dtrace 脚本,展示如何解开堆栈以获取参数。