Linux comandos mais usados pelos invasores Linux Commands Most Used by Attackers
Este artigo explica que são os comandos Linux mais utilizado por atacantes e como se defender contra esses ataques . Embora as soluções são baseadas em Linux que trabalhar em outros sistemas Unix-like também.
Os comandos foram obtidos a partir de um estudo por D. Ramsbrock, R. Berthier e M. Cukie da Universidade de Maryland, eKippo SSH registros provenientes de fontes diversas.
Comandos Linux
Uma vez que um atacante comprometa um host, ele executa tarefas que podem ser classificados em estágios ou estados: Verifique a configuração de software, instalar um programa, baixar um arquivo, etc.
Esses "estados" estão relacionados com os comandos abaixo.Alguns comandos recuperar informações do sistema, outros comandos baixar arquivos de fontes externas, outros comandos pode alterar a configuração do sistema, etc.
Linux Commands
Once an attacker compromises a host, he performs tasks that can be classified in stages or states: Check software configuration, install a program, download a file, etc.
These ‘states’ are related with the commands below. Some commands retrieve system information, other commands download files from external sources, other commands can change the system configuration, etc.
- cat [/etc/* | .bash_history | /proc/cpuinfo]. Concatenate files and print on the standard output.
- chmod. Change file mode bits.
- cp. Copy files and directories.
- curl. Transfer a URL.
- export. Bash builtin command to set environment variables.
- ftp. Internet file transfer program.
- history. GNU History Library
- id. Print real and effective user and group IDs
- ifconfig. Configure a network interface.
- kill. Send a signal to a process.
- last. Show listing of last logged in users.
- lwp-download. Fetch large files from the web.
- mail. Send and receive Internet mail.
- mkdir. Make directories
- mv. Move (rename) files.
- nano. Nano’s ANOther editor, an enhanced free Pico clone.
- passwd. Change user password.
- perl. Practical Extraction and Report Language.
- php. PHP Command Line Interface ‘CLI’.
- pico. Simple text editor in the style of the Alpine Composer.
- ps. Report a snapshot of the current processes.
- python. An interpreted, interactive, object-oriented programming language.
- rm. Remove files or directories.
- sshd. OpenSSH SSH daemon.
- tar. GNU ‘tar’ saves many files together into a single tape or disk archive, and can restore individual files from the archive.
- uname. Print system information
- unzip. List, test and extract compressed files in a ZIP archive
- uptime. Tell how long the system has been running.
- useradd. Create a new user or update default new user information.
- userdel. Delete a user account and related files.
- vi. Screen-oriented text editor.
- vim. Vi IMproved, a programmers text editor.
- wget. The non-interactive network downloader.
- whoami. Print effective userid.
- w. Show who is logged on and what they are doing.
- gato [/ etc / * | bash_history | / proc / cpuinfo]. Concatenar arquivos e imprimir na saída padrão.
- chmod . Mudança de bits de modo de arquivo.
- cp . Copiar arquivos e diretórios.
- cacho . Transferir um URL.
- exportação . Comando para definir as variáveis de ambiente Bash embutido.
- ftp . Arquivo de Internet programa de transferência.
- história . Biblioteca de História GNU
- id . Imprimir usuário e grupo real e efetiva IDs
- ifconfig . Configurar uma interface de rede.
- matar . Enviar um sinal para um processo.
- última . Mostrar lista de última usuários logados.
- lwp-download . Buscar arquivos grandes da web.
- -mail . Enviar e receber correio da Internet.
- mkdir . Faça diretórios
- mv . Move (renomear) arquivos.
- nano . Nano de outro editor, um clone Pico livre reforçada.
- passwd . Alterar senha do usuário.
- perl . Prática de Extracção e Idioma do relatório.
- php . PHP Command Line Interface 'CLI'.
- pico . Editor de texto simples no estilo do Alpine Composer.
- ps . Relatar um instantâneo dos processos atuais.
- python . Um interpretada, interativa, linguagem de programação orientada a objetos.
- rm . Remover arquivos ou diretórios.
- sshd . Daemon OpenSSH SSH.
- tar . GNU 'tar' salva vários arquivos em um único arquivo de fita ou disco, e pode restaurar arquivos individuais a partir do arquivo.
- uname . Informações do sistema de impressão
- unzip . Lista, testar e extrair arquivos compactados em um arquivo ZIP
- uptime . Diga quanto tempo o sistema está em funcionamento.
- useradd . Criar um novo novas informações de usuário ou de atualização padrão.
- userdel . Excluir uma conta de usuário e arquivos relacionados.
- vi . Orientada para a tela do editor de texto.
- vim . Vi melhorado, um editor de textos de programadores.
- wget . O downloader rede não-interativo.
- whoami . Imprimir UserID eficaz.
- w . Mostrar quem está conectado e que eles estão fazendo.
Contramedidas
Como podemos proteger o nosso sistema contra a execução de comandos sensíveis? Obviamente, não podemos restringir a execução de todos os comandos acima. Alguns deles são essenciais para as tarefas diárias (
cd
, mv
, cp
, ps
, etc.). No entanto, outros comandos são potencialmente prejudiciais ( useradd
,userdel
, kill
).Como veremos mais tarde, os editores de linha de comandotambém são importantes (
vi
, vim
, pico
, nano
). Tenha em atenção que a combinação de outros comandos também pode ser usado como um editor primitivo ( id >> victim-info.txt
, cat /etc/passwd >> victim-info.txt
).Mas vamos nos concentrar sobre os comandos críticos . Podemos restringir sua execução e aplicar outras medidas de segurança para obstruir as atividades do invasor.
Countermeasures
How can we protect our system against the execution of sensitive commands? Obviously, we cannot restrict execution to all the commands above. Some of them are essential for daily tasks (
cd
, mv
, cp
, ps
, etc.). Nevertheless, other commands are potentially harmful (useradd
, userdel
, kill
).As we will see later, the command-line editors are also important (
vi
, vim
, pico
, nano
). Keep in mind that the combination of other commands can also be used as a primitive editor (id >> victim-info.txt
, cat /etc/passwd >> victim-info.txt
).But let’s focus on the critical commands. We can restrict their execution and apply other security measures to obstruct the attacker’s activities.
Restringir execução com permissões de
O método mais fácil para limitar a execução é brincar com as permissões de arquivo UNIX .
Por exemplo, para desativar a execução de
wget
:$ chgrp root:root /usr/bin/wget
$ chmod 0710 /usr/bin/wget
Se precisamos restringir a execução de
wget
comando para um grupo de usuários especial, podemos fazer algo como:$ groupadd spusers
$ usermod -aG spusers bob
$ usermod -aG spusers alice
$ chgrp spusers /usr/bin/wget
$ chmod 0710 /usr/bin/wget
Shell restrito
Outra solução é usar Shells restritos . Por exemplo, um
bash
shell restrito fornece uma camada adicional de segurança para bash
, não permitindo algumas características, tais como:- Alterando diretórios com o builtin cd.
- Activar ou desactivar os valores das variáveis SHELL, PATH, ENV, ou BASH_ENV.
- Especificando nomes de comandos que contêm barras.
- Especificando um nome de arquivo que contém uma barra como um argumento para o. comando builtin.
- Redirecionando a saída usando o
>
,>|
,<>
,>&
,&>
, e>>
operadores de redirecionamento. - Adicionar ou excluir comandos internos com o
-f
e-d
opções para o builtin habilitar.
Infelizmente, ele não é seguro . Um usuário determinado pode ignorá-lo se ele descobrir uma maneira de gerar outro shell sem restrições. Por exemplo, utilizando-se
vi
:$ vi
:set shell=/bin/bash
:shell
Endurecimento Shell Restrito
Podemos corrigir as limitações das conchas restritas, controlando o acesso a certos comandos, como conchas e
vi
editor. Mas nós pode acabar usando alguma solução esotérica como:$ chsh --shell /bin/rbash bob
$ mkdir -p /usr/local/rbash/bin
$ find /bin -exec ln -s {} /usr/local/rbash{} ;
$ grep -v "^#" /etc/shells | while read shell; do rm /usr/local/rbash"${shell}"; done
$ echo "export PATH=/usr/local/bin:/usr/local/rbash/bin:/usr/bin" >> /home/bob/.bash_profile
$ chmod 750 /usr/bin/{vi,vim*}
Certamente, esta não é a forma mais recomendada para restringir a execução do comando , mas pode funcionar como uma solução temporária fácil.
De outros
Tecnologias como
SELinux
ou Virtualization Technologies
( KVM, QEMU , VirtualBox , etc.) são soluções mais seguras do que o anterior, mas sua instalação e utilização estão fora do escopo deste documento. Por favor, consulte a sua documentação oficial.Eles levam mais esforço do que as outras abordagens, mas eles podem valer a pena. Ele só depende do valor do sistema a proteger.
Execução de comando de auditoria
O próximo passo no endurecimento nosso sistema contra esses ataques é implantar auditoria de segurança. O sistema de auditoria Linux fornece uma maneira de controlar as informações pertinentes para a segurança no sistema.
Primeiro, vamos instalar
auditd
pacote:$ apt-get install auditd
Os arquivos de configuração são armazenados em
/etc/audit
. Asregras são definidas no /etc/audit/audit.rules
.Por exemplo, se quisermos monitorar a execução
wget
ecurl
acrescentar:-w /usr/bin/wget -p x -k crit_execs
-w /usr/bin/ftp -p x -k crit_execs
Em seguida, reinicie o serviço auditd para recarregar as regras:
$ service auditd restart
$ ausearch -k crit_execs -i
type=PATH msg=audit(11/22/2016 00:28:21.709:16) : item=1 name=(null) inode=61 dev=fe:00 mode=file,755 ouid=root ogid=root rdev=00:00
type=PATH msg=audit(11/22/2016 00:28:21.709:16) : item=0 name=/usr/bin/wget inode=8311 dev=fe:03 mode=file,755 ouid=root ogid=root rdev=00:00
type=CWD msg=audit(11/22/2016 00:28:21.709:16) : cwd=/home/bob
type=EXECVE msg=audit(11/22/2016 00:28:21.709:16) : argc=(null) a0=wget
type=SYSCALL msg=audit(11/22/2016 00:28:21.709:16) : arch=x86_64 syscall=execve success=yes exit=0 a0=20fb228 a1=20fd668 a2=20f8e08 a3=0 items=2 ppid=6847 pid=6854 auid=bob uid=bob gid=bob euid=bob suid=bob fsuid=bob egid=bob sgid=bob fsgid=bob tty=tty2 ses=5 comm=wget exe=/usr/bin/wget key=crit_execs
----
type=PATH msg=audit(11/22/2016 00:28:25.865:18) : item=1 name=(null) inode=61 dev=fe:00 mode=file,755 ouid=root ogid=root rdev=00:00
type=PATH msg=audit(11/22/2016 00:28:25.865:18) : item=0 name=/usr/bin/wget inode=8311 dev=fe:03 mode=file,755 ouid=root ogid=root rdev=00:00
type=CWD msg=audit(11/22/2016 00:28:25.865:18) : cwd=/home/alice
type=EXECVE msg=audit(11/22/2016 00:28:25.865:18) : argc=(null) a0=wget
type=SYSCALL msg=audit(11/22/2016 00:28:25.865:18) : arch=x86_64 syscall=execve success=yes exit=0 a0=1125488 a1=11233c8 a2=1121e08 a3=0 items=2 ppid=6857 pid=6862 auid=alice uid=alice gid=alice euid=alice suid=alice fsuid=alice egid=alice sgid=alice fsgid=alice tty=tty2 ses=6 comm=wget exe=/usr/bin/wget key=crit_execs
Ou analisá-lo com
aureport
:$ ausearch -k crit_execs --raw | aureport --summary --user -i
User Summary Report
===========================
total auid
===========================
1 bob
1 alice
Medidas de segurança adicionais
Além para restringir a execução e sistema de auditoria, existem algumas medidas de segurança adicionais que podem ser aplicadas para limitar esses ataques.
Protegendo partições temporárias
Às vezes, os atacantes baixar e executar arquivos de diretórios temporários . Nós podemos desativar a execução montando esses diretórios com
noexec
opção .tmpfs /tmp tmpfs nodev,nosuid,noexec,noatime,size=2G 0 0
Os arquivos e diretórios localizados em / var / tmp não deve ser excluído quando o sistema é inicializado.
Aqui temos duas opções: dedicar uma partição para
/var/tmp
ou criar um arquivo e montá-lo como /var/tmp
. Se formos com o último, mais simples, podemos proceder da seguinte forma:$ dd if=/dev/zero of=/var/tmp.fs bs=1 count=0 seek=4G
$ mkfs.ext4 /var/tmp.fs
$ mount -o loop,rw,nodev,nosuid,noexec /var/tmp.fs /var/tmp
$ chmod 1777 /var/tmp
Em seguida, editar
/etc/fstab
a torná-lo permanente:/var/tmp /var/tmp.fs ext4 rw,nodev,nosuid,noexec,noatime 0 0
Gota Conexões de Saída
Depois de invadir um sistema, o atacante quase sempre abre uma conexão de rede de saída . Por quê? Às vezes, porque eles precisam de suas ferramentas de hacking preciosas, arquivos geralmente comprimidos com scanners de rede, crackers de senhas, bots IRC, etc. Outra razão é porque eles enviam os dados de suas vítimas de volta à sua infra-estrutura.
Nem sempre é possível, mas se o sistema não precisa abrir conexões de saída que pode bloqueá-los com um firewall . O exemplo a seguir elimina quaisquer novas ligações feitas a partir do sistema. É uma opção perigosa que deve ser aplicada com cautela.
$ iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
$ iptables -P OUTPUT DROP
Nós também pode restringir o escopo das conexões de saída. Estas regras só permitem que as solicitações de DNS e HTTP / S conexões do sistema:
$ iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
$ iptables -A OUTPUT -p tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
$ iptables -A OUTPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
$ iptables -A OUTPUT -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT
$ iptables -P OUTPUT DROP
Um cenário ideal seria combinar as portas com intervalos de endereços IP confiáveis para maior segurança.
Esta será sempre melhor do que ter o tráfego de saída irrestrita. Nós apenas temos que ajustar as regras para as nossas políticas.
Conclusão
Nós descrevemos algumas técnicas para restringir a execução de comandos em sistemas Unix-like e como detectar atividades anormais com auditoria de segurança.
Estas medidas não vão parar todos os ataques. Como os analistas de segurança, teremos incidentes de segurança , mais cedo ou mais tarde. Precisamos estar preparado e ter um plano de recuperação de desastres.
https://www.cybrary.it/0p3n/linux-commands-used-attackers/https://www.cybrary.it/0p3n/linux-commands-used-attackers/