Como saber qual processo possui uma porta específica aberta no Linux?

32

Corri o nmap no meu servidor e encontrei uma porta estranha aberta. Estou tentando descobrir se existe uma maneira de mapear essa porta para um processo específico, mas não tenho idéia se existe essa ferramenta.

Alguma sugestão?

jnman
fonte
Upvote por ser # 1 resposta no Gogle de Junho de 2018.
SDsolar

Respostas:

57

Assim como o Netstat, mencionado em outras postagens, o comando lsof deve ser capaz de fazer isso perfeitamente. Apenas use isto:

lsof -i :<port number>

e todos os processos devem surgir. Eu o uso no OS X com bastante frequência.

Artigo de Administração Debian para lsof

bjtitus
fonte
interessante. Eu não sabia sobre isso. no entanto, estou analisando isso como resultado de uma tentativa de invasão. máquina é de um amigo. você pode telnetar para a porta incorreta, MAS lsof AND netstat não revelam a porta como aberta.
jnman
a porta é 5631 que, de acordo com / etc / services, pode ser muito suspeita.
jnman
Agora, que bom, eu não sabia disso! Sempre usei netstat. Obrigado
buster
4
Se nem o netstat nem o lsof mostram a porta como sendo usada, mas a máquina está respondendo a ela, é provável que tenha havido um kit raiz instalado. Eu recomendo mover qualquer dado da máquina para outro lugar e depois colocá-lo em sua arma.
27510 Kamil Kisiel
6
Este é realmente um rootkit. Eu já vi esse comportamento antes, e é sempre um rootkit. Seu sistema está comprometido e quaisquer ferramentas que você está usando não são confiáveis. Inicialize em um Live CD (que possui binários confiáveis ​​somente leitura) e use-o para extrair seus dados, configurações, etc. Não os traga. Trate o sistema como se estivesse com hanseníase, porque / faz /. Quando terminar, tire da órbita. Faça isso o mais rápido possível. Ah, e desconecte sua conexão de rede - negue o acesso do invasor.
Avery Payne
23

Aviso: Seu sistema está comprometido.

A ferramenta que você precisa é a lsofque lista os arquivos (e soquetes e portas). Provavelmente está instalado e é provavelmente a versão do invasor, o que significa que mentirá para você.

Este é realmente um rootkit. Eu já vi esse comportamento antes, e é sempre um rootkit. Seu sistema está comprometido e não é possível confiar em nenhuma ferramenta que você esteja usando originada na mesma máquina. Inicialize em um Live CD (que possui binários confiáveis ​​somente leitura) e use-o para extrair seus dados, configurações, etc. Todos os programas que você teve, quaisquer scripts que você teve, os abandonaram . Não os traga . Trate-os e o sistema como se tivessem hanseníase, porque o fazem .

Quando terminar, tire da órbita .

Game over man, game over.

Faça isso o mais rápido possível. Ah, e desconecte sua conexão de rede - negue o acesso do invasor.

Avery Payne
fonte
1
Isso diz tudo realmente. Descobrir o que deu errado, achatar o servidor, restaurar a partir do último backup válido. A vida é muito curta para jogar.
Rob Moir
2
Apenas adicionando: não se esqueça da data da invasão, pois você pode estar restaurando o mesmo rootkit que acabou de remover. Caso contrário, sim, restaure a partir / antes / dessa data.
Avery Payne
1
Esse é um gráfico engraçado. Eu sei que o sistema está comprometido (felizmente não é meu). A pergunta sobre a qual eu estava mais curioso foi rastrear como ele entrou em primeiro lugar. Eu suspeito que via php / joomla, mas queria entender como / por que essa porta estava aberta quando nenhuma das ferramentas de detecção de kit raiz mostrava essa porta.
jnman
1
lol @ "Oh, e desconecte sua conexão de rede"
theman_on_osx
6
Antes de você chegar a essa conclusão , existem outras explicações possíveis para portas inesperadas sendo abertas; como um pacote que você instalou, mas esqueceu.
David J.
14
sudo netstat -lnp  

Lista as portas que estão atendendo às conexões de entrada e o processo associado que tem a porta aberta.

Joe
fonte
4

netstat -anp

O "-p" diz para listar o ID do processo que possui a porta aberta. O -an diz para listar portas de escuta e não resolve nomes. Em sistemas ocupados que podem acelerar bastante a rapidez com que ele retorna.

netstat -anp | grep "LIST"

Isso apenas fornecerá portas abertas.

sysadmin1138
fonte
4

Se você não conseguir ver a porta aberta com as ferramentas do sistema operacional e suspeitar de uma invasão, pode ser que um rootkit tenha sido instalado.

O rootkit pode ter alterado as ferramentas do sistema para evitar certos processos e portas ou os módulos do kernel.

Você pode verificar o rootkit com várias ferramentas automatizadas. 'apt-cache search rootkit' mostra o seguinte no Ubuntu:

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

Se você tiver um rootkit, poderá reverter o 'alterado' para o seu sistema, mas eu recomendo que você descubra como a invasão foi feita e proteja o sistema para que ele não se repita.


Eles não são exclusivos do Ubuntu, você também pode usá-los no CentOS. Basta procurar o pacote ou baixá-lo da página deles.


Pela saída dessa porta, parece que você está executando o pcanywhere: " Ы <Enter>" é muito semelhante a "Por favor, pressione <Enter>", que é a mensagem de boas-vindas do pcanywhere. Não sei por que o processo não aparece na lista de processos. Você é root?

Você pode tentar reiniciar para ver se é um processo único em execução também.

chmeee
fonte
alguma sugestão para centos?
jnman
estranhamente, o unhide-tcp não mostra nenhuma porta suspeita. chkrootkit / rkhunter contaram tudo claro (mas principalmente porque eu deletei o dirs suspeito antes de fazer esta pergunta)
jnman
FWIW, o rootkit havia se instalado como apache em / var / tmp / ... e /var/tmp/.ICE-Unix/* o inferno um processo bash continuou gerando-se depois de ser morto.
jnman
Acontece que o cracker instalou um trabalho cron.
jnman
0

Para explicar a resposta de @bjtitus, você pode obter informações muito detalhadas, por exemplo:

$ 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

Eu posso ver ali que o squid é o processo, mas na verdade é o meu squid-deb-proxyque está ocupando o porto.

Outro bom exemplo de aplicativo 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

Você pode ver em lsof(LiSt Open Files) que é java, o que é menos que útil. Executando o pscomando com o PID, podemos ver imediatamente que é o CrashPlan.

ErebusBat
fonte