EDYCJA 2 :
jest jeden dobry powód, dla którego ten post przyciąga tak wiele uwagi: udało ci się nagrać całą sesję na żywo intruza na komputerze. To bardzo różni się od naszych codziennych doświadczeń, w których zajmujemy się odkryciem konsekwencji jego działań i staramy się je naprawić. Tutaj widzimy go w pracy, widzącego, że ma on problemy z ustanowieniem backdoora, podąża śladami, pracuje gorączkowo (być może dlatego, że siedział przy twoim biurku, jak sugerowano powyżej, a może, moim zdaniem, bardziej prawdopodobne, ponieważ był niezdolny do uruchomienia złośliwego oprogramowania w systemie, przeczytaj poniżej) i spróbuj wdrożyć w pełni samodzielne instrumenty kontroli. Właśnie tego badacze bezpieczeństwa codziennie obserwują za pomocą pułapek na miód . Dla mnie jest to bardzo rzadka szansa i źródło rozrywki.
Na pewno zostałeś zhakowany. Dowody na to nie pochodzą z fragmentu wyświetlanego auth.log
pliku, ponieważ zgłasza to nieudaną próbę zalogowania, występującą w krótkim okresie czasu (dwie sekundy). Zauważysz, że druga linia mówi Failed password
, podczas gdy trzecia zgłasza pre-auth
rozłączenie: facet próbował i nie udało się.
Dowody przychodzi zamiast z zawartości dwóch plików http://222.186.30.209:65534/yjz
i http://222.186.30.209:65534/yjz1
które atakujący pobranych do systemu.
Witryna jest obecnie dostępna dla wszystkich, aby je pobrać, co zrobiłem. Najpierw file
na nich natknąłem się, co pokazało:
$ file y*
yjz: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.2.5, not stripped
yjz1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
Potem przeniosłem je na 64-bitową maszynę wirtualną Debiana, którą posiadam; badanie ich zawartości za pomocą strings
polecenia ujawniło wiele podejrzanych (odniesienie do różnych dobrze znanych ataków, poleceń, które należy zastąpić, skrypt, który był wyraźnie używany do utworzenia nowej usługi itd.).
Następnie utworzyłem skróty MD5 obu plików i podałem je do bazy danych skrótów Cymru, aby sprawdzić, czy są znanymi agentami złośliwego oprogramowania. Chociaż yjz
nie jest, yjz1
jest, a Cymru zgłasza prawdopodobieństwo wykrycia przez oprogramowanie antywirusowe w wysokości 58%. Wskazuje również, że ten plik był ostatnio widziany jakieś trzy dni temu, więc jest dość nowy.
Uruchamianie clamscan (część clamav
pakietu) na dwóch plikach, które uzyskałem:
$ clamscan y*
yjz: Linux.Backdoor.Gates FOUND
yjz1: Linux.Trojan.Xorddos FOUND
więc jesteśmy teraz pewni, że standardowe oprogramowanie Linux może to zidentyfikować.
Co powinieneś zrobić?
Choć raczej nowy, żaden system nie jest bardzo nowy, zobacz na przykład ten artykuł z XorDdos z stycznia 2015 r . Dlatego większość darmowych pakietów powinna móc je usunąć. Należy starać: clamav
, rkhunter
, chkrootkit
. Googlowałem wokoło i widziałem, że twierdzą, że potrafią to zauważyć. Użyj ich, aby sprawdzić pracę poprzednika, ale po uruchomieniu tych trzech programów powinieneś być gotowy do pracy.
Jeśli chodzi o większe pytanie, what should you do to prevent future infections
odpowiedź Czeladnika jest dobrym pierwszym krokiem. Pamiętaj tylko, że jest to ciągła walka, którą wszyscy (łącznie ze mną!) Moglibyśmy przegrać, nawet o tym nie wiedząc.
EDYCJA :
Na pytanie (pośrednie) Viktora Totha chciałbym dodać kilka komentarzy. Z pewnością prawdą jest, że intruz napotkał pewne trudności: pobiera dwa różne narzędzia hakerskie, kilkakrotnie zmienia ich uprawnienia, kilkakrotnie uruchamia je ponownie i wiele razy próbuje wyłączyć zaporę. Łatwo zgadnąć, co się dzieje: spodziewa się, że jego narzędzia hakerskie otworzą kanał komunikacyjny w kierunku jednego z zainfekowanych komputerów (patrz później), a gdy nie widzi, że ten nowy kanał wyskakuje na jego kontrolnym interfejsie GUI, obawia się hakowania narzędzie jest blokowane przez zaporę, więc powtarza procedurę instalacji. Zgadzam się z Viktorem Tothem, że ten konkretny etap jego działalności nie wydaje się przynosić oczekiwanych owoców, ale bardzo gorąco zachęcam aby nie lekceważyć zakresu szkód wyrządzonych komputerowi.
Podaję tutaj częściowy wynik strings yjz1
:
etc/init.d/%s
/etc/rc%d.d/S90%s
--del
chkconfig
remove
update-rc.d
/etc/cron.hourly/gcc4.sh
/etc/rc.d/rc%d.d/S90%s
--add
defaults
/proc/%d/exe
/proc/self/exe
HOME=/
MYSQL_HISTFILE=/dev/null
#!/bin/sh
# chkconfig: 12345 90 90
# description: %s
### BEGIN INIT INFO
# Provides: %s
# Required-Start:
# Required-Stop:
# Default-Start: 1 2 3 4 5
# Default-Stop:
# Short-Description: %s
### END INIT INFO
case $1 in
start)
stop)
esac
sed -i '/\/etc\/cron.hourly\/gcc4.sh/d' /etc/crontab && echo '*/3 * * * * root /etc/cron.hourly/gcc4.sh' >> /etc/crontab
etc/init.d/%s
GET %s HTTP/1.1
%sHost: %s
POST %s HTTP/1.1
%sHost: %s
Content-Type: application/x-www-form-urlencoded
Content-Length: %d
%s%s
Accept: */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; TencentTraveler ; .NET CLR 1.1.4322)
Connection: Keep-Alive
Dostarcza to dowodów na manipulowanie usługami (wewnątrz /etc/init.d
i na zewnątrz /etc/rc.d
), z crontab
plikiem historii mysql
i kilkoma plikami, w proc
których znajdują się linki do bash
(co sugeruje, że została umieszczona niestandardowa, fałszywa wersja twojej powłoki). Następnie program generuje żądanie HTTP (do strony w języku chińskim,
Accept-Language: zh-cn
co nadaje treść powyższemu komentarzowi Davida Schwartza), co może doprowadzić do jeszcze większego spustoszenia. W żądaniu pliki binarne ( Content-Type: application/x-www-form-urlencoded
) należy pobrać na zaatakowany komputer (GET) i przesłać na komputer sterujący (POST). Nie udało się ustalić, co będzie pobrana do zaatakowanego komputera, ale ze względu na niewielki rozmiar zarówno yjz
i yjz1
(1.1MB i 600KB, repectively), mogę zaryzykować przypuszczenie, że większość plików potrzebnych płaszcz rootkita, czyli zmienionych wersje ls
, netstat
, ps
, ifconfig
, ..., zostanie pobrana w ten sposób. To by tłumaczyło gorączkowe próby atakującego, aby rozpocząć pobieranie.
Nie ma pewności, że powyższe wyczerpuje wszystkie możliwości: z pewnością brakuje nam części transkrypcji (między wierszami 457 i 481) i nie widzimy wylogowania; ponadto szczególnie niepokojące są linie 495–497,
cd /tmp; ./yd_cd/make
które odnoszą się do pliku, którego nie widzieliśmy pobranego, a które może być kompilacją: jeśli tak, oznacza to, że atakujący (w końcu?) zrozumiał, na czym polegał problem z jego plikami wykonywalnymi i próbuje go naprawić, w którym to przypadku zaatakowany komputer odszedł na dobre. [W rzeczywistości dwie wersje złośliwego oprogramowania, które atakujący pobrał na zhakowaną maszynę (i ja na moją 64-bitową maszynę Debian VM), mają nieodpowiednią architekturę, x86, podczas gdy sama nazwa zaatakowanego komputera ujawnia fakt, że zajmował się architekturą zbrojeń].
Powodem, dla którego napisałem tę edycję, jest nakłanianie cię tak mocno, jak to możliwe, albo do przeczesania systemu profesjonalnym instrumentem, albo do ponownej instalacji od zera.
Nawiasem mówiąc, jeśli okaże się to przydatne dla nikogo, jest to lista 331 adresów IP, z którymi yjz
próbuje się połączyć. Ta lista jest tak duża (i prawdopodobnie powinna być jeszcze większa), że uważam, że to jest powód do manipulacji mysql
. Lista dostarczona przez drugi backdoor jest identyczna, co, jak przypuszczam, jest powodem pozostawienia tak ważnej informacji na zewnątrz ( myślę, że atakujący nie chciał się starać przechowywać ich w formacie jądra, więc umieścił całą listę w pliku tekstowym, który prawdopodobnie jest wczytywany przez wszystkie jego backdoory, dla dowolnego systemu operacyjnego:
61.132.163.68
202.102.192.68
202.102.213.68
202.102.200.101
58.242.2.2
202.38.64.1
211.91.88.129
211.138.180.2
218.104.78.2
202.102.199.68
202.175.3.3
202.175.3.8
202.112.144.30
61.233.9.9
61.233.9.61
124.207.160.110
202.97.7.6
202.97.7.17
202.106.0.20
202.106.46.151
202.106.195.68
202.106.196.115
202.106.196.212
202.106.196.228
202.106.196.230
202.106.196.232
202.106.196.237
202.112.112.10
211.136.17.107
211.136.28.231
211.136.28.234
211.136.28.237
211.147.6.3
219.141.136.10
219.141.140.10
219.141.148.37
219.141.148.39
219.239.26.42
221.130.32.100
221.130.32.103
221.130.32.106
221.130.32.109
221.130.33.52
221.130.33.60
221.176.3.70
221.176.3.73
221.176.3.76
221.176.3.79
221.176.3.83
221.176.3.85
221.176.4.6
221.176.4.9
221.176.4.12
221.176.4.15
221.176.4.18
221.176.4.21
58.22.96.66
218.104.128.106
202.101.98.55
211.138.145.194
211.138.151.161
211.138.156.66
218.85.152.99
218.85.157.99
222.47.29.93
202.101.107.85
119.233.255.228
222.47.62.142
122.72.33.240
211.98.121.27
218.203.160.194
221.7.34.10
61.235.70.98
113.111.211.22
202.96.128.68
202.96.128.86
202.96.128.166
210.21.3.140
210.21.4.130
211.95.193.97
211.98.2.4
211.98.4.1
211.162.61.225
211.162.61.235
211.162.61.255
211.162.62.1
211.162.62.60
221.4.66.66
202.103.176.22
202.96.144.47
210.38.192.33
202.96.134.33
202.96.134.133
202.96.154.15
210.21.196.6
221.5.88.88
202.103.243.112
202.193.64.33
61.235.164.13
61.235.164.18
202.103.225.68
221.7.136.68
202.103.224.68
211.97.64.129
211.138.240.100
211.138.242.18
211.138.245.180
221.7.128.68
222.52.118.162
202.98.192.67
202.98.198.167
211.92.136.81
211.139.1.3
211.139.2.18
202.100.192.68
211.97.96.65
211.138.164.6
221.11.132.2
202.100.199.8
202.99.160.68
202.99.166.4
202.99.168.8
222.222.222.222
202.102.224.68
202.102.227.68
222.85.85.85
222.88.88.88
210.42.241.1
202.196.64.1
112.100.100.100
202.97.224.68
219.235.127.1
61.236.93.33
211.93.24.129
211.137.241.34
219.147.198.230
202.103.0.68
202.103.0.117
202.103.24.68
202.103.44.150
202.114.0.242
202.114.240.6
211.161.158.11
211.161.159.3
218.104.111.114
218.104.111.122
218.106.127.114
218.106.127.122
221.232.129.30
59.51.78.210
61.234.254.5
202.103.96.112
219.72.225.253
222.243.129.81
222.246.129.80
211.142.210.98
211.142.210.100
220.168.208.3
220.168.208.6
220.170.64.68
218.76.192.100
61.187.98.3
61.187.98.6
202.98.0.68
211.93.64.129
211.141.16.99
202.98.5.68
219.149.194.55
211.138.200.69
202.102.3.141
202.102.3.144
58.240.57.33
112.4.0.55
114.114.114.114
114.114.115.115
202.102.24.34
218.2.135.1
221.6.4.66
221.131.143.69
202.102.8.141
222.45.0.110
61.177.7.1
218.104.32.106
211.103.13.101
221.228.255.1
61.147.37.1
222.45.1.40
58.241.208.46
202.102.9.141
202.102.7.90
202.101.224.68
202.101.226.68
211.141.90.68
211.137.32.178
202.96.69.38
211.140.197.58
219.149.6.99
202.96.86.18
101.47.189.10
101.47.189.18
118.29.249.50
118.29.249.54
202.96.64.68
202.96.75.68
202.118.1.29
202.118.1.53
219.148.204.66
202.99.224.8
202.99.224.67
211.90.72.65
211.138.91.1
218.203.101.3
202.100.96.68
211.93.0.81
222.75.152.129
211.138.75.123
202.102.154.3
202.102.152.3
219.146.1.66
219.147.1.66
202.102.128.68
202.102.134.68
211.138.106.19
211.90.80.65
202.99.192.66
202.99.192.68
61.134.1.4
202.117.96.5
202.117.96.10
218.30.19.40
218.30.19.50
116.228.111.118
180.168.255.18
202.96.209.5
202.96.209.133
202.101.6.2
211.95.1.97
211.95.72.1
211.136.112.50
211.136.150.66
119.6.6.6
124.161.97.234
124.161.97.238
124.161.97.242
61.139.2.69
202.98.96.68
202.115.32.36
202.115.32.39
218.6.200.139
218.89.0.124
61.139.54.66
61.139.39.73
139.175.10.20
139.175.55.244
139.175.150.20
139.175.252.16
168.95.1.1
210.200.211.193
210.200.211.225
211.78.130.1
61.31.1.1
61.31.233.1
168.95.192.1
168.95.192.174
61.60.224.3
61.60.224.5
202.113.16.10
202.113.16.11
202.99.96.68
202.99.104.68
211.137.160.5
211.137.160.185
219.150.32.132
202.98.224.68
211.139.73.34
61.10.0.130
61.10.1.130
202.14.67.4
202.14.67.14
202.45.84.58
202.45.84.67
202.60.252.8
202.85.128.32
203.80.96.9
203.142.100.18
203.142.100.21
203.186.94.20
203.186.94.241
221.7.1.20
61.128.114.133
61.128.114.166
218.202.152.130
61.166.150.123
202.203.128.33
211.98.72.7
211.139.29.68
211.139.29.150
211.139.29.170
221.3.131.11
222.172.200.68
61.166.150.101
61.166.150.139
202.203.144.33
202.203.160.33
202.203.192.33
202.203.208.33
202.203.224.33
211.92.144.161
222.221.5.240
61.166.25.129
202.96.103.36
221.12.1.227
221.130.252.200
222.46.120.5
202.96.96.68
218.108.248.219
218.108.248.245
61.130.254.34
60.191.244.5
202.96.104.15
202.96.104.26
221.12.33.227
202.96.107.27
61.128.128.68
61.128.192.68
218.201.17.2
221.5.203.86
221.5.203.90
221.5.203.98
221.7.92.86
221.7.92.98
Poniższy kod
#!/bin/bash
echo 0 > out
while read i; do
whois $i | grep -m 1 -i country >> out
done < filename
cat out | grep -i cn | wc -l
z powyższej listy wynika, że 302 z 331 adresów znajduje się w Chinach kontynentalnych, pozostałe w Hongkongu, Mongolii i na Tajwanie. To stanowi dodatkowe poparcie dla twierdzenia Davida Schwartza, że jest to głównie chiński bot ring.
EDYCJA 3
Na prośbę @ vaid (autor OP, przeczytaj swój komentarz poniżej) dodam komentarz na temat wzmocnienia bezpieczeństwa podstawowego systemu Linux (w przypadku systemu zapewniającego wiele usług jest to o wiele bardziej złożony temat). vaid
stwierdza, że wykonał następujące czynności:
Zainstaluj ponownie system
zmieniono hasło root na 16 znaków z mieszanymi małymi i dużymi literami oraz znakami i cyframi.
Zmieniłem nazwę użytkownika na 6-znakową długą nazwę użytkownika i zastosowałem to samo hasło, co w rootie
zmieniono port SSH na coś powyżej 5000
wyłączono logowanie roota SSH.
To dobrze (z wyjątkiem tego, że używam portu powyżej 10 000, ponieważ wiele przydatnych programów używa portów poniżej 10 000). Ale nie mogę wystarczająco podkreślić potrzeby używania kluczy kryptograficznych do logowania ssh zamiast haseł. Dam ci osobisty przykład. Na jednym z moich VPS nie byłem pewien, czy zmienić port ssh; Zostawiłem go o 22, ale do uwierzytelnienia użyłem kluczy kryptograficznych. Miałem setki prób włamań dziennie , żadna nie powiodła się. Kiedy zmęczony codziennym sprawdzaniem, że nikomu się nie udało, ostatecznie zmieniłem port na coś powyżej 10.000, próby włamania spadły do zera. Pamiętaj, że nie jest tak, że hakerzy są głupi (nie są!), Po prostu polują na łatwiejszą zdobycz.
Łatwo jest aktywować klucz kryptograficzny za pomocą RSA jako algorytmu podpisu, patrz komentarz poniżej Jan Hudec (dzięki!):
cd; mkdir .ssh; chmod 700 .ssh; cd .ssh; ssh-keygen -t rsa (then hit <kbd>ENTER>/kbd> three times); cat id_rsa.pub >> authorized_keys; chmod 600 *
Teraz wystarczy skopiować plik id_rsa
na maszynę, z której chcesz się połączyć (w katalogu .ssh
, również chmod
edytuj do 700), a następnie wydać polecenie
ssh -p YourChosenNonStandardPort -i ~/.ssh/id_rsa me@RemoteMachine
Gdy masz pewność, że to działa, edytuj na serwerze (= maszynę, z którą chcesz się połączyć) plik /etc/ssh/sshd_config
i zmień wiersz
#PasswordAuthentication yes
do
PasswordAuthentication no
i ponownie uruchom ssh
usługę ( service ssh restart
lub systemctl restart ssh
, lub coś takiego, w zależności od dystrybucji).
To bardzo wytrzyma. W rzeczywistości, obecnie nie są znane żadne exploity przeciwko bieżącym wersjom openssh v2
RSA i używanym przez openssh v2
.
Wreszcie, aby naprawdę zablokować komputer, musisz skonfigurować zaporę (netfilter / iptables) w następujący sposób:
iptables -A INPUT -p tcp --dport YourChosenNonStandardPort -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
To, 1) pozwala na połączenia ssh zarówno z sieci LAN, jak i WAN, 2) zezwala na wszystkie dane pochodzące z twoich żądań (na przykład podczas ładowania strony internetowej), 3) upuszcza wszystko inne na wejściu, 4) zezwala na wszystko wyjście i 5-6) pozwala na wszystko w interfejsie sprzężenia zwrotnego.
W miarę wzrostu potrzeb i otwierania kolejnych portów możesz to zrobić, dodając na górze listy reguły takie jak:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
aby na przykład umożliwić dostęp do przeglądarki internetowej.