Jak stwierdzić, jaki proces ma otwarty port w systemie Linux?

32

Uruchomiłem nmap na moim serwerze i znalazłem dziwny otwarty port. Próbuję dowiedzieć się, czy istnieje sposób odwzorowania tego portu na konkretny proces, ale nie mam pojęcia, czy istnieje takie narzędzie.

Jakieś sugestie?

jnman
źródło
Głosowanie za odpowiedź nr 1 w Gogle, czerwiec 2018 r.
SDsolar

Odpowiedzi:

57

Podobnie jak Netstat, wspomniany w innych postach, polecenie lsof powinno być w stanie to zrobić dobrze. Po prostu użyj tego:

lsof -i :<port number>

i wszystkie procesy powinny się pojawić. Używam go w systemie OS X dość często.

Artykuł na temat administracji Debiana dla lsof

bjtitus
źródło
ciekawy. Nie wiedziałem o tym. jednak patrzę na to w wyniku próby włamania. maszyna należy do przyjaciela. możesz telnet do portu naruszającego, ALE lsof AND netstat oba nie ujawniają portu jako otwartego.
jnman
port to 5631, który według / etc / services jest bardzo podejrzany.
jnman
To miło, nie wiedziałem o tym! Zawsze używany netstat. Dzięki
niszczyciel
4
Jeśli ani netstat, ani lsof nie wskazują portu jako używanego, ale maszyna na niego reaguje, istnieje prawdopodobieństwo, że zainstalowano zestaw root. Polecam przeniesienie jakichkolwiek danych z komputera gdzie indziej, a następnie ich nukanie.
Kamil Kisiel
6
To jest rzeczywiście rootkit. Widziałem to wcześniej i zawsze jest to rootkit. Twój system jest zagrożony i nie można ufać żadnym używanym narzędziom. Uruchom na Live CD (który ma zaufane pliki binarne tylko do odczytu) i użyj go do wyodrębnienia danych, ustawień itp. Wszelkie programy, które posiadasz, wszystkie skrypty, porzuć je. Nie przynoś ich. Traktuj system tak, jakby miał trąd, ponieważ ma / robi /. Gdy skończysz, odbierz go z orbity. Zrób to jak najszybciej. Aha i odłącz połączenie sieciowe - odmów dostępu napastnikowi.
Avery Payne
23

Ostrzeżenie: Twój system jest zagrożony.

Potrzebne jest narzędzie lsof, które wyświetli listę plików (oraz gniazd i portów). Najprawdopodobniej jest zainstalowany i najprawdopodobniej jest to wersja atakującego, co oznacza, że ​​będzie cię okłamywać .

To jest rzeczywiście rootkit. Widziałem to wcześniej i zawsze jest to rootkit. Twój system jest zagrożony i nie można ufać żadnym używanym narzędziom pochodzącym z tego samego komputera. Uruchom komputer na Live CD (który ma zaufane pliki binarne tylko do odczytu) i użyj go do wyodrębnienia danych, ustawień itp. Wszelkie programy, które posiadasz, wszelkie skrypty, porzuć je . Nie przynoś ich . Traktuj ich i system tak, jakby mieli trąd, ponieważ tak .

Gdy skończysz, odbierz go z orbity .

Gra ponad człowiekiem, gra zakończona.

Zrób to jak najszybciej. Aha i odłącz połączenie sieciowe - odmów dostępu napastnikowi.

Avery Payne
źródło
1
To mówi wszystko naprawdę. Dowiedz się, co poszło nie tak, spłaszcz serwer, przywróć z ostatniej znanej dobrej kopii zapasowej. Życie jest zbyt krótkie, aby grać w gry.
Rob Moir
2
Po prostu dodaj: upewnij się, że znasz datę włamania, ponieważ możesz przywracać ten sam rootkit, który właśnie usunąłeś. W przeciwnym razie tak, przywróć z / przed / tą datą.
Avery Payne
1
To zabawna grafika. Wiem, że system jest zagrożony (na szczęście nie jest mój). Ciekawe było dla mnie pytanie, w jaki sposób znalazł się w pierwszej kolejności. Podejrzewam, że przez php / joomla, ale chciałem zrozumieć, w jaki sposób / dlaczego ten port pozostawał otwarty, gdy żadne z narzędzi do wykrywania rootkatów nie pokazywało tego portu.
jnman
1
lol @ „Och, i odłącz połączenie sieciowe”
theman_on_osx
6
Zanim przejdziesz do tego wniosku , istnieją inne możliwe wyjaśnienia nieoczekiwanego otwarcia portów; na przykład pakiet, który zainstalowałeś, ale o którym zapomniałeś.
David J.
14
sudo netstat -lnp  

Wyświetla listę portów nasłuchujących połączeń przychodzących i powiązanego procesu, który ma otwarty port.

Joe
źródło
4

netstat -anp

„-P” informuje go o wyświetleniu identyfikatora procesu, który ma otwarty port. -An nakazuje mu wyświetlić listę nasłuchujących portów i nie rozpoznawać nazw. Na zajętych systemach, które mogą znacznie przyspieszyć szybkość powrotu.

netstat -anp | grep „LIST”

To po prostu da ci otwarte porty.

sysadmin1138
źródło
4

Jeśli nie widzisz portu otwartego za pomocą narzędzi systemu operacyjnego i podejrzewasz włamanie, być może zainstalowano rootkita.

Rootkit mógł zmienić narzędzia systemowe, aby uniknąć pewnych procesów i portów, lub zmienić moduły jądra.

Możesz sprawdzić rootkit za pomocą kilku zautomatyzowanych narzędzi. „rootkit wyszukiwania apt-cache” pokazuje następujące elementy w Ubuntu:

chkrootkit - rootkit detector
rkhunter - rootkit, backdoor, sniffer and exploit scanner
unhide - Forensic tool to find hidden processes and ports

Jeśli zdarzy ci się mieć rootkita, możesz przywrócić „zmieniony” do swojego systemu, ale radzę dowiedzieć się, jak doszło do włamania i wzmocnić system, aby się nie powtarzał.


Nie są one wyłączne dla Ubuntu, możesz ich również używać w CentOS. Po prostu wyszukaj pakiet lub pobierz go ze swojej strony.


Na podstawie danych wyjściowych z tego portu wydaje się, że rzeczywiście uruchamiasz program pcanywhere: „ Ы <Enter>” jest bardzo podobny do „Proszę nacisnąć <Enter>”, który jest wiadomością powitalną pcanywhere. Nie wiem, dlaczego proces nie pojawia się na liście procesów. Czy jesteś rootem?

Możesz także spróbować ponownie uruchomić komputer, aby sprawdzić, czy jest to proces jednorazowy.

chmeee
źródło
jakieś sugestie dotyczące centos?
jnman
o dziwo, unhide-tcp nie pokazuje żadnych podejrzanych portów. chkrootkit / rkhunter zgłosiło wszystko jasne (ale głównie dlatego, że usunąłem podejrzane katalogi przed zadaniem tego pytania)
jnman
FWIW, rootkit zainstalował się jako apache w / var / tmp / ... i /var/tmp/.ICE-Unix/* Drugi był podstępny, ponieważ nie zauważyłem go za pierwszym razem i zastanawiałem się, jak to zrobić cholera, proces bash wciąż się pojawiał po zabiciu.
jnman
Okazuje się, że cracker zainstalował zadanie crona.
jnman
0

Aby wyjaśnić odpowiedź autorstwa @bjtitus, możesz uzyskać bardzo szczegółowe informacje, na przykład:

$ lsof -i :8000
COMMAND  PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
squid3  1289 proxy   15u  IPv6 14810490      0t0  TCP *:8000 (LISTEN)

$ ps -fp 1289
UID        PID  PPID  C STIME TTY          TIME CMD
proxy     1289     1  0 09:48 ?        00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf

Widzę tam, że kałamarnica jest procesem, ale tak naprawdę to mój squid-deb-proxyport zajmuje.

Kolejny dobry przykład aplikacji Java:

$ lsof -i :4242
COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
java    3075 root   86u  IPv4    12019      0t0  TCP *:4242 (LISTEN)

$ ps -fp 3075
UID        PID  PPID  C STIME TTY          TIME CMD
root      3075     1 15 May24 ?        3-16:07:25 /usr/local/crashplan/jre/bin/java -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPl

Możesz zobaczyć w lsof(LiSt Open Files), że jest to Java, co jest mniej niż pomocne. Po uruchomieniu pspolecenia z PID od razu widać, że jest to CrashPlan.

ErebusBat
źródło