我的 ubuntu 机器上的未知进程通过 UDP proto 通过多个端口进行通信

信息安全 Web应用程序 恶意软件 攻击 开发 已知漏洞
2021-08-21 19:39:26

我有一个Django Web 应用程序,其中 Web 应用程序和postgresql数据库托管在两个独立的基于 Ubuntu 的机器上。

在我的数据库机器(而不是我的 Web 应用程序)上,如果我运行sudo netstat -4plunt,我会得到如下输出:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *.*.*.*:16001           0.0.0.0:*               LISTEN      831/python      
tcp        0      0 127.0.0.1:29131         0.0.0.0:*               LISTEN      46329/mdsd      
tcp        0      0 0.0.0.0:1270            0.0.0.0:*               LISTEN      1582/omiserver  
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1160/sshd       
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      55903/postgres  
udp        0      0 0.0.0.0:51802           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:35637           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:36013           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:52523           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:36139           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:52618           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:36340           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:53408           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:53711           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:53774           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:53899           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:54031           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:54054           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:54275           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:54375           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:38157           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:38468           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:55391           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:39133           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:55708           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:39963           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:40181           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:56780           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:40441           0.0.0.0:*                           63911/facebook  
udp        0      0 0.0.0.0:56992           0.0.0.0:*                           63911/facebook  

如果我运行sudo strace -p 63911,我会得到以下信息:

Process 63911 attached
[ Process PID=63911 runs in 32 bit mode. ]
select(17, [16], NULL, NULL, {15, 76647}) = 1 (in [16], left {14, 911022})
recv(16, "1", 4096, 0)                  = 1
select(17, [16], NULL, NULL, {20, 0})   = 1 (in [16], left {14, 953682})
recv(16, "1", 4096, 0)                  = 1
select(17, [16], NULL, NULL, {20, 0})   = 1 (in [16], left {14, 910776})
recv(16, "1", 4096, 0)   

这看起来有点像 postgresql 查询,但我不能确切地说。

如果我运行ps -p 63911 -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS,我会得到:

  PID MEMORY USER     GROUP    COMMAND         ARGS
63911 3742124 postgres postgres facebook       /tmp/facebook

/tmp/我看到两个文件。一个是名为facebook(大小:1.3MB)的可执行文件,另一个是名为gameover.so(大小:8KB)的可执行文件

接下来chkrootkit我在我的机器上运行。我得到了一个积极的结果:Searching for Suckit rootkit... Warning: /sbin/init INFECTED然而,这是一个广为人知的误报chkrootkit不能确定,所以我要重建系统。

然而,我不想在没有确定我当前的漏洞并相应改进的情况下这样做。那么,任何人都可以告诉我这gameover.so是什么,以及我可以做些什么来防范未来的这些攻击?我的防火墙可能很弱(如何阻止所有不需要的端口),但我还没有安装rkhunter(或类似 Tripwire 的东西)。


顺便说一句,我使用该iptables-persistent软件包,并且 /etc/iptables/rules.v4 包含以下内容:

*filter
# Allow all outgoing, but drop incoming and forwarding packets by default
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# Custom per-protocol chains
:UDP - [0:0]
:TCP - [0:0]
:ICMP - [0:0]

# Acceptable UDP traffic

# Acceptable TCP traffic
-A TCP -p tcp --dport 22 -j ACCEPT
-A TCP -p tcp --dport 5432 -i eth0 -j ACCEPT

# Acceptable ICMP traffic

# Boilerplate acceptance policy
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i lo -j ACCEPT

# Drop invalid packets
-A INPUT -m conntrack --ctstate INVALID -j DROP

# Pass traffic to protocol-specific chains
## Only allow new connections (established and related should already be handled)
## For TCP, additionally only allow new SYN packets since that is the only valid
## method for establishing a new TCP connection
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP

# Reject anything that's fallen through to this point
## Try to be protocol-specific w/ rejection message
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable

# Commit the changes
COMMIT

*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT

*security
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT

运行strings /tmp/gameover.so | less产量:

__gmon_start__
_init
_fini
_ITM_deregisterTMCloneTable
_ITM_registerTMCloneTable
__cxa_finalize
_Jv_RegisterClasses
Pg_magic_func
text_ptr_to_char_ptr
malloc
chr_ptr_to_text_ptr
pg_finfo_sys_exec
pg_detoast_datum
system
pfree
pg_finfo_sys_eval
popen
realloc
strncpy
fgets
pclose
pg_finfo_sys_bineval
fork
sysconf
mmap
waitpid
pg_finfo_sys_fileread
fopen
fseek
ftell
fclose
fread
libc.so.6
_edata
__bss_start
_end
GLIBC_2.2.5
fffff.
[]A\
AUATUH
H;] t
Y[]A\D
AWAVAUATUSAQH
<(Ic
[]A\A]A^A_
ATUSH
[]A\
AUATUSH
 []A\A]A^
0123456789ABCDEF
;*3$"
GCC: (Debian 4.7.2-5) 4.7.2
.shstrtab
.note.gnu.build-id
.gnu.hash
.dynsym
.dynstr
.gnu.version
.gnu.version_r
.rela.dyn
.rela.plt
.init
.text
.fini
.rodata
.eh_frame_hdr
.eh_frame
.init_array
.fini_array
.jcr
.dynamic
.got
.got.plt
.data
.bss
.comment

运行strings /tmp/facebook | less产生我不明白的命名法:

PTRhP
QVh0
[^_]
<;t 9u
,[^_]
,[^_]
[^_]
[^_]
[^_]
[^_]
[^_]
[^_]
[^_]
[^_]
[^_]
[^_]
\[^_]
[^_]
WVS1
[^_]
[^_]
[^_]
[^_]
        [^_]
[^_]
[^_]
[^_]
[^_]
P[^]
[^_]
XXXX
[^_]
[^_]
[^_]
[^_]
[^_]
[^_]
[^_]
[^_]
[^_]
0[^]
amp.
[^_]
[^_]
[^_]
[^_]
[^_]
[^_]
ffffff.
9Qhu
9Qhu
ffff.
fff.
B`@c
Bd@c
[^_]
,[^_]
[^_]
[^_]
[^_]
CdHc
[^_]
4个回答

所以任何人都可以告诉我发生了什么

你被黑了。但它可以是任何东西(SQL 注入、远程文件包含、Shellshock ......),如果不仔细查看系统就无法判断。即便如此,也可能无法判断,因为攻击者可能已经删除了系统受到攻击的任何痕迹。

顺便说一句,我使用 iptables-persistent 包...

像 iptables 这样的包过滤防火墙无法保护您免受 SQL 注入或类似的应用程序级别的攻击。

一个是名为 facebook 的可执行文件,而另一个名为 gameover.so(动态链接库?)。

文件名无关紧要,代码很重要。

...我能做些什么来防止这种情况发生?

了解您是如何被黑客入侵的。解决问题。重建服务器。不要只是从备份中恢复服务器,因为那样你可能很快就会再次受到同样的攻击。

如果您自己无法做到这一点,请寻求专业帮助。

编辑:

您似乎是 SQL 注入的受害者。有一个脚本(可能是 PHP)从 Web 接收数据并在没有足够的清理输入的情况下查询数据库。

在你之前kill 63911,看看ps ho lstart 63911

这将让您在您的网络服务器日志中搜索在进程63911运行之前发生的事情

第一篇文章

  1. 是什么/tmp/facebook??

    A)你可以strace -p 63911知道这是做什么的......

    B)你可以tcpdump -ani eth0 udp port 51802随机跟随连接。

    C)您可以使用less /tmp/facebook,或者如果它是二进制文件,strings /tmp/facebook | less/tmp/gameover.so当然也可以使用)。

  2. 怎么样/sbin/init

    使用相同发行版的相同版本构建另一台主机,并比较大小和日期(使用ls -l)和sha1sum /sbin/init.

  3. 再说一遍:让您的系统保持最新!有备份

注意:如果您的系统受到强烈(有效)感染,您必须在执行之前将其关闭checksumsstring甚至ls. 但由于netstat似乎没有隐藏任何东西就可以工作,但事实并非如此......

该答案特别针对:

我可以做些什么来防止将来发生这些攻击

因为识别实际的原始感染媒介非常困难,而且如果存在多个漏洞 - 这很可能 - 本身就不足。从对整个系统集进行总体强化开始,并添加日志记录 (IDS/IPS),这两者都可以在感染发生时捕获它们,并且可以在它们被尝试时阻止它们。

要真正改进,请阻止两个方向并开始运行 IDS/IPS;不要忘记查看这些日志,这将有助于识别 NEXT 感染媒介。

我建议您执行以下操作:

  • 除了您的机器之外,还要从 Internet 上拔下您的防火墙:

    • 买一个新的

    • 或者给它一个硬重置,并使用另一个网络上的未受损机器为其下载任何固件更新。如果因为旧而没有...请参阅“购买新的”

      • 如果他们能够使用局域网内的计算机,他们就能够尝试或成功登录到您的防火墙。

      • 还要检查您的防火墙是否 许多漏洞之一 如果是这样,请参阅“购买新的”

      • 购买一个严肃的硬件路由器/防火墙,例如在具有 2 个 NIC 的旧机器上运行pfSense 免费软件,或者他们自己的设备,或者一台 fitlet微型无风扇 PC,或其他任何东西。

        • 然后安装 Snort 或 Suricata 包 - 这些是 IDS/IPS 包,它们有可能注意到正在进行的攻击并可选择在一段时间内阻止 IP - 在你的情况下,我会说阻止几天并观察你的日志非常小心地让他们尝试重新进入。

        • 并购买 Snort VRT 规则的订阅;还要考虑 ET Pro 规则,尽管它们更昂贵。

        • 阻止一切;一开始你会有大量的阻塞;基于每个 IP*规则的白名单,并观察他们继续尝试重新加入。

      • 或者至少是一个Ubiquiti Edgerouter Lite - 便宜得多,但在 GUI 中非常有限(所有真正高级的东西都在命令行中,绝对不适合运行 IDS/IPS)。

      • 并将其设置为阻止一切,包括入站和出站。根据需要打开单个 IP 或小型子网/块上的单个出站端口(例如,用于操作系统更新)。

        • 这会很烦人 - 如果你走那条路,请在 pfSense 中使用别名

        • 这也将严重限制防火墙内任何东西进入命令和控制服务器的能力。

    • 如果可能,请将 Web 服务器和数据库服务器放在完全不同的 VLAN 或防火墙端口上,这样它们就只能通过启用加密的数据库连接单向通信。

  • 使某些您的所有软件完全更新,并保存在那里

  • 为组合中的每个软件寻找强化指南。

    • 并跟随他们。
  • 更改防火墙、服务器、数据库、路由器等上的所有密码。

    • 使用KeePass 之类的东西为每个服务生成长随机数。

    • 不要忘记进入数据库设置、安全性,点击“1 秒延迟”链接或按钮,然后将其增加 - 花费 3 或 4 或 7 秒打开 KeePass 是让攻击者不得不工作的小代价难以置信地比默认值更难。

  • 保持机器关闭,而您:

    • 购买新硬盘

    • 插入电源但不联网(尤其是 Wifi;物理移除/关闭所有 wifi)

    • 从头开始安装新的操作系统

    • 设置您的软件和操作系统/应用程序级别的安全性,并对其进行修补。

    • 如果您的受损机器中的驱动器是固态的,请将它们拆开并破解芯片,或对它们使用火炬直到它们融化。

      • 或者执行另一种物理销毁方法,以保护您留在其中的任何重要数据,并防止驱动器再次被使用。
    • 如果您受损机器中的驱动器有旋转盘片,请购买一把大锤、一盒加仑的自封袋和一条小厨房毛巾。

      • 将受损硬盘包裹在小厨房毛巾中

      • 将包装好的 HD 放入至少 6 个自封袋中,每个袋子都密封

      • 用大锤砸碎驱动器,直到玻璃碎片通过毛巾泄漏,或者它有明显的凹痕(如果你有金属盘片)。

      • 从现有备份中恢复有价值的数据

  • 或者,如果您不更换受损的 HD,则风险更大,请使用DBAN或类似工具擦除它并重新开始

    • 如果您在同一网络上有任何 Windows 计算机,请执行几次脱机病毒扫描。

      • 使用几种,因为没有一种产品可以涵盖所有内容,但是通过使用几种不同的产品,您可以显着减少未覆盖的空间。我建议:

      • 至少 AVG 和 Avira 之一(或两者)

      • 至少 Web 博士和 Kapersky 之一(最好是两者),以获得一些俄罗斯的参与。

      • Comodo Rescue Disk(它也宣传 rootkit 扫描)

      • 选择另外几个你最喜欢的。

      • 截至 2016 年 2 月,PCSupport.about.com 的前 15 名名单相当不错

      • 如果您真的很担心,请在网络上的每台机器上执行此操作。

        • 真的不会花太多时间——你可以把 AVG 放在一个,Avira 放在另一个,Kapersky 放在第三个,Dr.Web 放在第四个,然后当它们完成后简单地把它们移到右边的机器上循环时尚。
      • 他们几乎肯定会找到跟踪cookies——这很正常,没什么好担心的,尽管我总是会删除它们。

毕竟,一旦您再次完全在线

  • 确保您的操作系统已修补并保持修补。

  • 定期阅读您的 Snort/Suricata 日志,并调整设置。

  • pfSense 和 Edgerouter Lite 都可以设置多种类型的 VPN。无论如何,对除您的网络服务器之外的任何入站访问都使用基于证书的证书

  • 确保您的(新)防火墙已打补丁并且是最新的。

  • 确保所有其他软件都已打补丁并且是最新的。

  • 永远。

您的系统被黑了,看起来您的服务器正被用于僵尸网络。如果您知道它发生的时间并且您有详细的日志文件,那么您可以分析日志以查看是否存在妥协的迹象。

大多数系统通过攻击具有可用补丁的众所周知的漏洞或允许攻击者破解您的系统的错误代码而被黑客入侵。解决方案是跟上您的操作系统和应用程序补丁,强化您的系统和应用程序,并对您的应用程序进行代码分析以填补任何空白。