# Linux

> **Um guia abrangente sobre o Linux** – desde suas origens no projeto GNU e concepção do kernel até sistemas de arquivos, técnicas de análise forense e resposta a incidentes. Inclui detalhes sobre FHS (Filesystem Hierarchy Standard) e a estrutura completa de diretórios.

***

## 📜 Histórico e Concepção do Linux

### 1.1 O Projeto GNU e Richard Stallman

Em 1983, **Richard Stallman**, pesquisador do MIT, anunciou o **Projeto GNU** (GNU's Not Unix). O objetivo era criar um sistema operacional **completamente livre**, inspirado no Unix, que qualquer pessoa pudesse usar, modificar e distribuir.

**Filosofia do Software Livre (Free Software Foundation - FSF):**

* **Liberdade 0:** executar o programa para qualquer propósito.
* **Liberdade 1:** estudar como o programa funciona e adaptá-lo às suas necessidades (acesso ao código-fonte).
* **Liberdade 2:** redistribuir cópias para ajudar outros.
* **Liberdade 3:** distribuir versões modificadas para beneficiar a comunidade.

**Principais componentes desenvolvidos pelo GNU:**

* **GCC (GNU Compiler Collection):** compilador de C, C++, Fortran, etc.
* **Glibc (GNU C Library):** biblioteca padrão do C.
* **GNU Core Utilities (coreutils):** comandos básicos (ls, cp, mv, rm, cat, etc.)
* **Bash (Bourne Again Shell):** shell de linha de comando.
* **GNU Emacs:** editor de texto extensível.
* **GRUB (Grand Unified Bootloader):** gerenciador de boot.

Até o início dos anos 1990, o projeto GNU havia desenvolvido quase todos os componentes de um sistema operacional, exceto o **kernel**. O kernel planejado era o **GNU Hurd**, um microkernel que enfrentava atrasos significativos no desenvolvimento.

### 1.2 O Kernel Linux e Linus Torvalds

Em 1991, **Linus Torvalds**, um estudante finlandês da Universidade de Helsinque, começou a desenvolver um kernel como hobby. Inspirado no **Minix** (um sistema Unix educacional criado por Andrew Tanenbaum), Linus criou o que viria a ser o **kernel Linux**.

**Cronologia do kernel Linux:**

* **Agosto de 1991:** Linus anuncia o projeto em um grupo de notícias (comp.os.minix).

  > *"I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones."*
* **Setembro de 1991:** Lançamento da versão 0.01 (código-fonte limitado).
* **Outubro de 1991:** Versão 0.02 (primeira versão funcional).
* **Março de 1994:** Lançamento do Linux 1.0.

**Características fundamentais do kernel Linux:**

* **Monolítico:** o kernel opera em um único espaço de endereçamento (diferente de microkernels como Hurd).
* **Modular:** permite carregar e descarregar módulos em tempo real (Loadable Kernel Modules - LKM).
* **Portável:** suporte a múltiplas arquiteturas (x86, ARM, RISC-V, PowerPC, etc.).
* **Open Source:** licenciado sob GPLv2 (GNU General Public License).

### 1.3 A União GNU/Linux

Em 1992, o kernel Linux foi licenciado sob **GPLv2**, permitindo sua combinação com as ferramentas GNU. A união resultou em um sistema operacional completo, funcional e livre.

**Por que "GNU/Linux"?** A Free Software Foundation (FSF) defende o termo **"GNU/Linux"** para reconhecer a contribuição fundamental do projeto GNU. Richard Stallman argumenta que o sistema operacional é, essencialmente, GNU com o kernel Linux.

**Componentes que formam um sistema GNU/Linux:**

```
Sistema GNU/Linux = Kernel Linux + GNU Core Utilities + Glibc + Gerenciador de Pacotes + Serviços (systemd) + Interface (X11/Wayland) + Aplicações
```

### 1.4 Distribuições Linux

Uma **distribuição Linux** é um empacotamento do kernel Linux com ferramentas GNU, gerenciadores de pacotes, serviços e aplicações, adaptado para diferentes públicos e finalidades.

**Principais famílias de distribuições:**

| **Família**       | **Gerenciador**                      | **Pacotes**    | **Exemplos**                                                 |
| ----------------- | ------------------------------------ | -------------- | ------------------------------------------------------------ |
| **Debian**        | APT (Advanced Package Tool)          | `.deb`         | Debian, Ubuntu, Linux Mint, Kali Linux                       |
| **Red Hat**       | YUM/DNF (Yellowdog Updater Modified) | `.rpm`         | Red Hat Enterprise Linux (RHEL), CentOS, Fedora, Rocky Linux |
| **Arch**          | Pacman                               | `.pkg.tar.zst` | Arch Linux, Manjaro, EndeavourOS                             |
| **SUSE**          | Zypper                               | `.rpm`         | openSUSE, SUSE Linux Enterprise                              |
| **Alpine**        | APK                                  | `.apk`         | Alpine Linux (foco em segurança e tamanho)                   |
| **Independentes** | Variados                             | Variados       | Slackware, Gentoo, Void Linux                                |

**Evolução das principais distribuições:**

```
Debian (1993) → Ubuntu (2004) → Linux Mint (2006) → Kali Linux (2013)
Slackware (1993) → SUSE (1994) → openSUSE (2005)
Red Hat Linux (1995) → Fedora (2003) → RHEL (2002) → CentOS (2004) → Rocky Linux (2021)
Arch Linux (2002) → Manjaro (2011)
```

***

## 🏗️ Arquitetura do Linux

### 2.1 Modos de Operação: User Space e Kernel Space

| **Nível**        | **Nome**     | **Descrição**                                                                   |
| ---------------- | ------------ | ------------------------------------------------------------------------------- |
| **User Space**   | Modo Usuário | Aplicações executam com privilégios restritos. Acesso ao hardware via syscalls. |
| **Kernel Space** | Modo Kernel  | Núcleo do sistema operacional. Acesso direto à memória, CPU e dispositivos.     |

```mermaid
graph TB
    subgraph User Space
        A[Processos do Usuário]
        B[Bibliotecas - glibc]
        C[Syscalls]
    end
    subgraph Kernel Space
        D[System Call Interface]
        E[Gerenciador de Processos]
        F[Gerenciador de Memória]
        G[Sistema de Arquivos VFS]
        H[Drivers de Dispositivo]
        I[Gerenciador de Rede]
    end
    subgraph Hardware
        J[CPU, Memória, Discos, Rede]
    end
    A --> B --> C --> D
    D --> E & F & G & H & I
    E & F & G & H & I --> J
```

### 2.2 Componentes Principais do Kernel

| **Componente**                    | **Descrição**                                                                   |
| --------------------------------- | ------------------------------------------------------------------------------- |
| **System Call Interface (SCI)**   | Camada que expõe syscalls para o user space.                                    |
| **Process Scheduler**             | Gerencia a execução de processos (CFS - Completely Fair Scheduler).             |
| **Memory Manager**                | Gerencia memória virtual, paginação, swapping, mapeamento de arquivos.          |
| **Virtual File System (VFS)**     | Camada de abstração que permite suporte a múltiplos sistemas de arquivos.       |
| **Network Stack**                 | Implementação dos protocolos TCP/IP, sockets, firewalling (netfilter/iptables). |
| **Device Drivers**                | Controladores para hardware (discos, rede, USB, etc.).                          |
| **Loadable Kernel Modules (LKM)** | Mecanismo para carregar código no kernel em tempo real.                         |

### 2.3 Syscalls e API do Kernel

Syscalls são a interface entre user space e kernel space.

```c
// Exemplo de syscall write em C
#include <unistd.h>
int main() {
    write(1, "Hello, Linux!\n", 14);
    return 0;
}
```

**Syscalls comuns:**

| **Syscall** | **Função**                                  |
| ----------- | ------------------------------------------- |
| `read()`    | Ler dados de um descritor de arquivo        |
| `write()`   | Escrever dados para um descritor de arquivo |
| `open()`    | Abrir um arquivo                            |
| `close()`   | Fechar um descritor de arquivo              |
| `fork()`    | Criar um novo processo (cópia do atual)     |
| `execve()`  | Executar um programa                        |
| `mmap()`    | Mapear arquivo ou dispositivo na memória    |
| `ioctl()`   | Controle de dispositivos                    |
| `socket()`  | Criar um socket de rede                     |
| `ptrace()`  | Rastrear e depurar processos                |

***

## 💾 Sistema de Arquivos do Linux

### 3.1 Filesystem Hierarchy Standard (FHS) – Estrutura Completa

O **Filesystem Hierarchy Standard (FHS)** é mantido pela Linux Foundation e define a estrutura de diretórios nos sistemas Unix-like.

#### Diretórios Essenciais

| **Diretório** | **Conteúdo**                                                            | **Persistência**                  |
| ------------- | ----------------------------------------------------------------------- | --------------------------------- |
| `/`           | Raiz do sistema de arquivos.                                            | Permanente                        |
| `/bin`        | Executáveis essenciais do sistema (ls, cp, mv, cat, bash).              | Permanente                        |
| `/boot`       | Arquivos de boot (kernel, initrd, GRUB).                                | Permanente                        |
| `/dev`        | Dispositivos (discos, terminais, dispositivos de caractere/bloco).      | Virtual (gerado pelo kernel/udev) |
| `/etc`        | Arquivos de configuração do sistema.                                    | Permanente                        |
| `/home`       | Diretórios pessoais dos usuários.                                       | Permanente                        |
| `/lib`        | Bibliotecas compartilhadas essenciais e módulos do kernel.              | Permanente                        |
| `/lib64`      | Bibliotecas 64-bit (em sistemas x86\_64).                               | Permanente                        |
| `/media`      | Pontos de montagem para mídias removíveis (CD, USB).                    | Temporário                        |
| `/mnt`        | Pontos de montagem temporários para administradores.                    | Temporário                        |
| `/opt`        | Software adicional (aplicações de terceiros).                           | Permanente                        |
| `/proc`       | Sistema de arquivos virtual com informações de processos e kernel.      | Virtual (procfs)                  |
| `/root`       | Diretório pessoal do usuário root.                                      | Permanente                        |
| `/run`        | Dados voláteis em tempo de execução (PIDs, sockets, serviços).          | Temporário (tmpfs)                |
| `/sbin`       | Executáveis para administração do sistema (fdisk, ifconfig, systemctl). | Permanente                        |
| `/srv`        | Dados de serviços servidos pelo sistema (HTTP, FTP).                    | Permanente                        |
| `/sys`        | Interface com o kernel (dispositivos, drivers, power management).       | Virtual (sysfs)                   |
| `/tmp`        | Arquivos temporários (limpos no reboot ou periodicamente).              | Temporário                        |
| `/usr`        | Aplicações e bibliotecas de usuário (segundo nível hierárquico).        | Permanente                        |
| `/var`        | Dados variáveis (logs, spool, cache, e-mails).                          | Permanente                        |

#### Estrutura do `/usr` (User System Resources)

| **Diretório**  | **Conteúdo**                                                          |
| -------------- | --------------------------------------------------------------------- |
| `/usr/bin`     | Executáveis de aplicações de usuário.                                 |
| `/usr/sbin`    | Executáveis administrativos não essenciais.                           |
| `/usr/lib`     | Bibliotecas para aplicações em `/usr/bin`.                            |
| `/usr/libexec` | Binários internos executados por outros programas.                    |
| `/usr/local`   | Software instalado localmente (fora do gerenciador de pacotes).       |
| `/usr/share`   | Dados independentes de arquitetura (documentação, ícones, man pages). |
| `/usr/src`     | Código-fonte (incluindo kernel).                                      |
| `/usr/include` | Arquivos de cabeçalho para desenvolvimento.                           |

#### Estrutura do `/var` (Variable Data)

| **Diretório** | **Conteúdo**                                                          |
| ------------- | --------------------------------------------------------------------- |
| `/var/log`    | Logs do sistema e aplicações.                                         |
| `/var/cache`  | Dados em cache de aplicações.                                         |
| `/var/spool`  | Filas de impressão, e-mails pendentes, cron jobs.                     |
| `/var/lib`    | Dados persistentes de serviços (bancos de dados, pacotes).            |
| `/var/run`    | Arquivos PID, locks, sockets (geralmente link simbólico para `/run`). |
| `/var/tmp`    | Arquivos temporários persistentes entre reboots.                      |
| `/var/mail`   | Caixas de e-mail dos usuários.                                        |

#### Estrutura do `/proc` (Process Information)

| **Arquivo/Diretório** | **Conteúdo**                                  |
| --------------------- | --------------------------------------------- |
| `/proc/[PID]/`        | Informações do processo com PID específico.   |
| `/proc/cpuinfo`       | Informações da CPU.                           |
| `/proc/meminfo`       | Informações de memória.                       |
| `/proc/self/`         | Link simbólico para o processo atual.         |
| `/proc/net/`          | Informações de rede (tcp, udp, unix).         |
| `/proc/sys/`          | Parâmetros do kernel (ajustáveis via sysctl). |
| `/proc/version`       | Versão do kernel.                             |
| `/proc/loadavg`       | Média de carga do sistema.                    |

#### Estrutura do `/sys` (Sysfs)

| **Diretório**   | **Conteúdo**                                 |
| --------------- | -------------------------------------------- |
| `/sys/block/`   | Dispositivos de bloco (discos).              |
| `/sys/bus/`     | Barramentos do sistema (pci, usb).           |
| `/sys/class/`   | Classes de dispositivos (net, input, sound). |
| `/sys/devices/` | Árvore completa de dispositivos.             |
| `/sys/kernel/`  | Parâmetros do kernel.                        |
| `/sys/power/`   | Configurações de gerenciamento de energia.   |

### 3.2 ext4 – Fourth Extended Filesystem

O **ext4** é o sistema de arquivos padrão na maioria das distribuições Linux, sucessor do ext3 e ext2.

#### 3.2.1 Estrutura do ext4

```
[Boot Block] → [Superblock] → [Group Descriptors] → [Block Bitmap] → [Inode Bitmap] → [Inode Table] → [Data Blocks]
```

| **Componente**        | **Descrição**                                                   |
| --------------------- | --------------------------------------------------------------- |
| **Boot Block**        | Primeiros 1024 bytes; código de boot opcional.                  |
| **Superblock**        | Metadados do volume (tamanho, número de blocos/inodes, versão). |
| **Group Descriptors** | Descritores de cada grupo de blocos.                            |
| **Block Bitmap**      | Mapeamento de blocos livres/ocupados.                           |
| **Inode Bitmap**      | Mapeamento de inodes livres/ocupados.                           |
| **Inode Table**       | Tabela de inodes (metadados dos arquivos).                      |
| **Data Blocks**       | Área de dados (conteúdo dos arquivos).                          |

#### 3.2.2 Inodes

Cada arquivo ou diretório é representado por um **inode**.

**Estrutura do inode ext4:**

| **Campo**   | **Descrição**                                                                                |
| ----------- | -------------------------------------------------------------------------------------------- |
| `i_mode`    | Tipo de arquivo e permissões (ex.: 0644, 0755)                                               |
| `i_uid`     | ID do proprietário                                                                           |
| `i_gid`     | ID do grupo                                                                                  |
| `i_size`    | Tamanho do arquivo em bytes                                                                  |
| `i_atime`   | Último acesso (access time)                                                                  |
| `i_mtime`   | Última modificação (modify time)                                                             |
| `i_ctime`   | Última mudança de status (change time)                                                       |
| `i_blocks`  | Número de blocos alocados                                                                    |
| `i_block[]` | Ponteiros para blocos de dados (12 diretos, 1 indireto, 1 duplo indireto, 1 triplo indireto) |

**Comandos para visualizar inodes:**

```bash
# Estatísticas de um arquivo
stat /etc/passwd

# Listar inodes em um diretório
ls -li /etc/

# Sistema de arquivos de um arquivo
df -i /
```

#### 3.2.3 Timestamps no ext4

| **Timestamp** | **Descrição** | **Comportamento**                                                         |
| ------------- | ------------- | ------------------------------------------------------------------------- |
| **atime**     | Access time   | Atualizado ao ler o arquivo (pode ser desabilitado com `noatime`).        |
| **mtime**     | Modify time   | Atualizado ao modificar o conteúdo.                                       |
| **ctime**     | Change time   | Atualizado ao modificar conteúdo ou metadados (permissões, proprietário). |

### 3.3 XFS – High-Performance Journaling Filesystem

O **XFS** é um sistema de arquivos de alta performance, especialmente adequado para servidores e grandes volumes.

**Características:**

* **Journaling** de metadados.
* **Alocação baseada em extent** (blocos contíguos).
* **Escalabilidade:** suporta volumes de até 8 EB e arquivos de até 8 EB.
* **Allocation Groups (AGs):** permite operações paralelas.

**Comandos:**

```bash
# Criar sistema de arquivos XFS
mkfs.xfs /dev/sdb1

# Verificar e reparar
xfs_repair /dev/sdb1

# Informações do sistema de arquivos
xfs_info /mnt/ponto
```

### 3.4 Btrfs – B-Tree Filesystem

O **Btrfs** (B-Tree File System) oferece recursos avançados como snapshots, compressão, checksums e subvolumes.

**Características:**

* **Snapshots:** cópias instantâneas e eficientes.
* **Checksum de dados e metadados:** integridade verificada.
* **Compressão:** transparente (zstd, zlib, lzo).
* **Subvolumes:** múltiplos sistemas de arquivos dentro do mesmo volume.
* **RAID nativo:** suporte a RAID 0, 1, 10, 5, 6.

**Comandos:**

```bash
# Criar sistema de arquivos Btrfs
mkfs.btrfs /dev/sdb1

# Criar snapshot
btrfs subvolume snapshot /mnt/@ /mnt/@snap

# Listar subvolumes
btrfs subvolume list /mnt

# Scrub (verificar integridade)
btrfs scrub start /mnt
```

### 3.5 ZFS – Zettabyte File System

Originalmente desenvolvido pela Sun Microsystems, o **ZFS** é portado para Linux via **OpenZFS**.

**Características:**

* **Pool de armazenamento:** gerencia múltiplos discos como um pool.
* **Copy-on-write:** nunca sobrescreve dados existentes.
* **Checksum end-to-end:** verificação de integridade.
* **Snapshots e clones:** eficientes e instantâneos.
* **Compressão e deduplicação.**

**Comandos:**

```bash
# Criar pool ZFS
zpool create tank /dev/sdb /dev/sdc

# Criar sistema de arquivos
zfs create tank/dados

# Snapshot
zfs snapshot tank/dados@snap1

# Enviar snapshot para backup
zfs send tank/dados@snap1 | zfs receive backup/dados
```

### 3.6 Sistemas de Arquivos Especiais (procfs, sysfs, devtmpfs, tmpfs)

| **Sistema de Arquivos** | **Ponto de Montagem**      | **Descrição**                                           |
| ----------------------- | -------------------------- | ------------------------------------------------------- |
| **procfs**              | `/proc`                    | Informações de processos e kernel (virtual).            |
| **sysfs**               | `/sys`                     | Interface com dispositivos, drivers e power management. |
| **devtmpfs**            | `/dev`                     | Gerenciamento dinâmico de dispositivos.                 |
| **tmpfs**               | `/tmp`, `/run`, `/dev/shm` | Sistema de arquivos em memória RAM (rápido, volátil).   |
| **debugfs**             | `/sys/kernel/debug`        | Interface de depuração do kernel.                       |
| **cgroupfs**            | `/sys/fs/cgroup`           | Controle de recursos (cgroups).                         |
| **pstore**              | `/sys/fs/pstore`           | Armazenamento persistente de logs pós-falha.            |
| **securityfs**          | `/sys/kernel/security`     | Interface para módulos de segurança (SELinux).          |

### 3.7 Estrutura de Armazenamento: Blocos, Inodes e Superblocks

| **Conceito**   | **Descrição**                                                                   |
| -------------- | ------------------------------------------------------------------------------- |
| **Setor**      | Unidade física de armazenamento (512 bytes ou 4096 bytes).                      |
| **Bloco**      | Unidade lógica de alocação (tamanho configurável: 1K, 2K, 4K).                  |
| **Superblock** | Metadados do sistema de arquivos (tamanho do volume, número de inodes, versão). |
| **Inode**      | Metadados de um arquivo (permissões, timestamps, ponteiros para blocos).        |

### 3.8 Journaling e Recovery

Sistemas de arquivos modernos (ext4, XFS, Btrfs) implementam **journaling** (registro de transações) para garantir consistência após falhas.

| **Journaling Mode**        | **Descrição**                                                                |
| -------------------------- | ---------------------------------------------------------------------------- |
| **Journal**                | Metadados e dados são registrados antes da escrita. Mais seguro, mais lento. |
| **Ordered (ext4 default)** | Metadados são journaled; dados escritos antes da confirmação do journal.     |
| **Writeback**              | Apenas metadados são journaled. Mais rápido, risco de dados corrompidos.     |

**Recuperação:**

```bash
# Verificar e reparar sistema de arquivos
fsck /dev/sda1

# Forçar verificação no próximo boot
touch /forcefsck
```

### 3.9 Formatação, Alocação e Exclusão de Arquivos

**Formatação:**

```bash
# Formatar partição como ext4
mkfs.ext4 /dev/sdb1

# Criar sistema de arquivos com parâmetros específicos
mkfs.ext4 -b 4096 -i 16384 /dev/sdb1
```

**Alocação:**

* O sistema de arquivos aloca blocos em grupos (block groups) para minimizar fragmentação.
* Arquivos pequenos podem ser armazenados dentro do próprio inode (inline data).

**Exclusão de Arquivos:**

* A exclusão remove a referência no inode e marca os blocos como livres.
* Os dados permanecem até serem sobrescritos.
* **Recuperação forense:** ferramentas como `extundelete`, `testdisk`, `scalpel`.

```bash
# Recuperar arquivos deletados em ext3/ext4
extundelete /dev/sda1 --restore-all

# Escanear por assinaturas de arquivo
scalpel /dev/sda1 -o /output/dir
```

***

## 🔍 Artefatos Forenses do Linux

### 4.1 Logs do Sistema (syslog, journald, auditd)

**Logs tradicionais (syslog):**

| **Arquivo**                               | **Conteúdo**                                           |
| ----------------------------------------- | ------------------------------------------------------ |
| `/var/log/syslog` ou `/var/log/messages`  | Logs gerais do sistema (kernel, serviços, aplicações). |
| `/var/log/auth.log` ou `/var/log/secure`  | Eventos de autenticação (logins SSH, sudo, falhas).    |
| `/var/log/kern.log`                       | Logs do kernel.                                        |
| `/var/log/boot.log`                       | Logs de inicialização.                                 |
| `/var/log/dpkg.log` ou `/var/log/yum.log` | Instalação e remoção de pacotes.                       |
| `/var/log/audit/audit.log`                | Logs de auditoria (auditd).                            |

**Systemd Journal (journald):**

```bash
# Visualizar todos os logs
journalctl

# Logs desde o último boot
journalctl -b

# Logs de um serviço específico
journalctl -u sshd

# Logs em tempo real
journalctl -f
```

**Auditd (Audit Framework):**

```bash
# Configurar regras de auditoria
auditctl -w /etc/passwd -p wa -k passwd_changes

# Visualizar logs
ausearch -k passwd_changes

# Relatório resumido
aureport
```

### 4.2 Arquivos de Configuração do Sistema

| **Arquivo**                     | **Função**                                      |
| ------------------------------- | ----------------------------------------------- |
| `/etc/passwd`                   | Contas de usuário (UID, GID, home, shell).      |
| `/etc/shadow`                   | Senhas criptografadas e políticas de expiração. |
| `/etc/group`                    | Grupos de usuários.                             |
| `/etc/sudoers`                  | Permissões sudo.                                |
| `/etc/fstab`                    | Pontos de montagem de sistemas de arquivos.     |
| `/etc/hosts`                    | Resolução estática de nomes.                    |
| `/etc/resolv.conf`              | Servidores DNS.                                 |
| `/etc/ssh/sshd_config`          | Configuração do servidor SSH.                   |
| `/etc/crontab` e `/etc/cron.d/` | Tarefas agendadas.                              |
| `/etc/systemd/system/`          | Unidades systemd personalizadas.                |
| `/etc/rc.local`                 | Scripts executados no final do boot (SysVinit). |

### 4.3 Histórico de Comandos

| **Shell** | **Arquivo de Histórico**           |
| --------- | ---------------------------------- |
| bash      | `~/.bash_history`                  |
| zsh       | `~/.zsh_history`                   |
| sh        | `~/.sh_history`                    |
| fish      | `~/.local/share/fish/fish_history` |

**Comandos úteis:**

```bash
# Visualizar histórico com timestamps (bash)
export HISTTIMEFORMAT="%F %T "
cat ~/.bash_history

# Limpar histórico (pode indicar tentativa de ocultação)
history -c
rm ~/.bash_history
```

### 4.4 Artefatos de Shell e Terminal

| **Arquivo**                     | **Conteúdo**                                                      |
| ------------------------------- | ----------------------------------------------------------------- |
| `~/.bashrc`, `~/.zshrc`         | Configurações de shell (aliases, variáveis, execução automática). |
| `~/.profile`, `~/.bash_profile` | Configurações executadas no login.                                |
| `~/.bash_logout`                | Comandos executados ao sair.                                      |
| `~/.inputrc`                    | Configurações de leitura de linha (teclas de atalho).             |
| `~/.ssh/authorized_keys`        | Chaves SSH autorizadas.                                           |
| `~/.ssh/known_hosts`            | Hosts SSH já conectados.                                          |
| `~/.ssh/id_rsa`                 | Chave privada SSH.                                                |
| `~/.netrc`                      | Credenciais para FTP, curl, wget.                                 |
| `~/.history`                    | Histórico (varia por shell).                                      |

### 4.5 Artefatos de SSH e Conexões Remotas

```bash
# Verificar logins SSH atuais
last

# Histórico de logins
last -a

# Tentativas de login com falha
lastb

# Conexões SSH ativas
ss -tunp | grep :22
netstat -tunp | grep :22

# Logs de autenticação SSH
grep sshd /var/log/auth.log
```

### 4.6 Artefatos de Navegadores

| **Navegador**   | **Localização**                                     |
| --------------- | --------------------------------------------------- |
| Firefox         | `~/.mozilla/firefox/*.default/`                     |
| Chrome/Chromium | `~/.config/google-chrome/` ou `~/.config/chromium/` |
| Brave           | `~/.config/BraveSoftware/`                          |
| Opera           | `~/.config/opera/`                                  |

**Bancos de dados SQLite de interesse:**

* `places.sqlite` (histórico, favoritos)
* `cookies.sqlite`
* `formhistory.sqlite`
* `logins.json` (senhas, no Firefox)

### 4.7 Contas de Usuário e Shadow

**Formato do /etc/passwd:**

```
username:password:x:UID:GID:comment:home:shell
```

* `password` normalmente contém `x` (senha em `/etc/shadow`).

**Formato do /etc/shadow:**

```
username:$6$salt$hash:last_change:min:max:warn:inactive:expire
```

* `$6$` indica SHA-512 (padrão moderno).
* `$2y$` indica bcrypt.
* `$5$` indica SHA-256.

**Comandos de auditoria:**

```bash
# Listar usuários com UID 0 (root)
grep :0: /etc/passwd

# Encontrar contas sem senha
awk -F: '($2 == "") {print $1}' /etc/shadow

# Encontrar usuários com shell inválido
grep -v nologin /etc/passwd | grep -v false
```

### 4.8 Arquivos Temporários e Cache

| **Localização**         | **Conteúdo**                                                 |
| ----------------------- | ------------------------------------------------------------ |
| `/tmp`                  | Arquivos temporários (limpos no reboot).                     |
| `/var/tmp`              | Arquivos temporários persistentes entre reboots.             |
| `~/.cache/`             | Cache de aplicações (navegadores, gerenciadores de pacotes). |
| `~/.local/share/Trash/` | Lixeira do usuário (no GNOME, KDE).                          |
| `~/.thumbnails/`        | Miniaturas de imagens (similar ao thumbcache do Windows).    |

***

## 🧠 Análise de Memória Volátil (Live Forensics)

### 5.1 Metodologia e Ferramentas

A análise de memória no Linux captura dados voláteis como processos, conexões de rede, módulos do kernel e credenciais em memória.

**Ferramentas de aquisição:**

* **LiME (Linux Memory Extractor)** – módulo do kernel para captura de memória.
* **AVML (Acquisition VM)** – ferramenta da Microsoft para aquisição de memória.
* **fmem** – driver de kernel para acesso a memória física.
* **dd** – cópia de `/dev/mem` ou `/proc/kcore` (limitado).

**Aquisição com LiME:**

```bash
# Compilar LiME
git clone https://github.com/504ensicsLabs/LiME.git
cd LiME/src
make

# Carregar módulo e capturar memória
insmod lime.ko "path=/root/memory.dump format=lime"
```

### 5.2 Volatility Framework (Linux)

O Volatility suporta análise de memória Linux com os profiles apropriados.

**Identificação de profile:**

```bash
volatility -f memory.dump imageinfo
volatility -f memory.dump linux_banner
```

**Comandos essenciais para Linux:**

| **Comando**           | **Função**                                    |
| --------------------- | --------------------------------------------- |
| `linux_pslist`        | Lista processos ativos                        |
| `linux_psscan`        | Escaneia por processos (incluindo terminados) |
| `linux_pstree`        | Hierarquia de processos                       |
| `linux_psaux`         | Processos com linha de comando                |
| `linux_netstat`       | Conexões de rede                              |
| `linux_lsof`          | Arquivos abertos por processo                 |
| `linux_bash`          | Comandos do histórico bash                    |
| `linux_check_syscall` | Verifica hooks de syscall (rootkits)          |
| `linux_check_modules` | Lista módulos do kernel                       |
| `linux_malfind`       | Detecta injeção de código                     |
| `linux_dump_map`      | Extrai seções de memória de processos         |

### 5.3 Processos, Conexões e Handles

**Análise de processos em live system:**

```bash
# Listar processos com detalhes
ps auxf

# Árvore de processos
pstree -p

# Processos com portas abertas
ss -tunlp

# Arquivos abertos por processo
lsof -i
lsof -p <PID>

# Processos ocultos (comparação)
ps aux | cat | wc -l
ls /proc/ | grep -E '^[0-9]+$' | wc -l
```

### 5.4 LKM Rootkits e Injeção de Código

**Loadable Kernel Modules (LKM)** maliciosos podem modificar o comportamento do kernel.

**Detecção:**

```bash
# Listar módulos carregados
lsmod

# Verificar módulos não listados
cat /proc/modules | awk '{print $1}'
ls /sys/module/ | grep -v "`lsmod | awk '{print $1}'`"

# Verificar syscall table hooks (com ferramentas)
# Ex: check_syscall.py, kstat
```

**Técnicas comuns de rootkits:**

* **Syscall hooking:** substituir syscalls legítimas.
* **Kernel module hiding:** ocultar o próprio módulo.
* **Process hiding:** remover processos de `/proc`.
* **File hiding:** interceptar `getdents()` syscall.
* **Netfilter hooks:** interceptar tráfego de rede.

***

## 🦠 Análise de Malware e Segurança

### 6.1 Tipos de Malware no Linux

| **Tipo**       | **Descrição**                           | **Exemplos**                         |
| -------------- | --------------------------------------- | ------------------------------------ |
| **Backdoor**   | Acesso remoto não autorizado            | Tsunami, Perlbot, Shellbot           |
| **Rootkit**    | Oculta atividades maliciosas            | Diamorphine, Reptile, Knark          |
| **Ransomware** | Criptografa arquivos                    | Linux.Encoder, DarkRadiation, Erebus |
| **Miner**      | Mineração de criptomoedas               | Kinsing, XMRig, PwnRig               |
| **Worm**       | Auto-replicação via rede                | Slapper, Linux.Wifatch, Mirai        |
| **Bot**        | Participa de redes de ataque            | Mirai (IoT), Gafgyt, Qbot            |
| **Web Shell**  | Scripts PHP/Python para controle remoto | China Chopper, WSO, b374k            |
| **Dropper**    | Baixa e instala outros malwares         | Shellshock-based, CVE-2014-6271      |

### 6.2 Metodologia de Análise

```mermaid
graph LR
    A[Coleta] --> B[Análise Estática]
    B --> C[Análise Dinâmica]
    C --> D[Análise de Memória]
    D --> E[Relatório e IOCs]
```

**Análise Estática:**

```bash
# Strings e informações básicas
file malware
strings malware | head -20
md5sum malware

# Verificar se é ELF
readelf -h malware
objdump -d malware | head -50

# Verificar bibliotecas necessárias
ldd malware

# Análise com ferramentas avançadas
radare2 malware
ghidra
```

**Análise Dinâmica:**

```bash
# Executar em sandbox isolada (VM)
strace -f -o trace.log ./malware
ltrace -o libtrace.log ./malware

# Monitoramento de rede
tcpdump -i any -w capture.pcap

# Monitoramento de processos
ps auxf > before.txt
# executar malware
ps auxf > after.txt
diff before.txt after.txt
```

### 6.3 Técnicas de Persistência

| **Técnica**          | **Localização**                                    | **Comando para Detecção**          |
| -------------------- | -------------------------------------------------- | ---------------------------------- |
| **Cron jobs**        | `/etc/crontab`, `/var/spool/cron/crontabs/`        | `crontab -l`, `ls /etc/cron.*`     |
| **systemd services** | `/etc/systemd/system/`, `/usr/lib/systemd/system/` | `systemctl list-unit-files`        |
| **Init scripts**     | `/etc/init.d/`, `/etc/rc*.d/`                      | `ls /etc/init.d/`, `update-rc.d`   |
| **Shell startup**    | `~/.bashrc`, `~/.profile`, `/etc/profile`          | `grep -r "\.sh" /etc/profile.d/`   |
| **LD\_PRELOAD**      | Variável de ambiente                               | `grep LD_PRELOAD /proc/*/environ`  |
| **Kernel modules**   | `/lib/modules/`                                    | `lsmod`                            |
| **.service files**   | `~/.config/systemd/user/`                          | `systemctl --user list-unit-files` |

### 6.4 Rootkits e LKM Maliciosos

**Identificação de rootkits:**

```bash
# Verificar integridade de binários (rpm -V no Red Hat)
rpm -V coreutils
# No Debian/Ubuntu
debsums coreutils

# Verificar assinaturas de arquivos
aide --check

# Ferramentas de detecção
chkrootkit
rkhunter
tripwire
```

**Exemplo de hook de syscall detectado:**

```bash
# Verificar syscall table com ferramenta
./check_syscall.py /boot/System.map-$(uname -r)
```

### 6.5 Hardening e Mitigações

**Configurações de segurança recomendadas:**

```bash
# Desabilitar módulos de kernel não utilizados
echo "install usb-storage /bin/false" >> /etc/modprobe.d/disable-usb-storage.conf

# Restringir acesso ao cron
echo "ALL" > /etc/cron.deny

# Configurar auditd para monitoramento
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/shadow -p wa -k shadow_changes

# Habilitar ASLR
echo 2 > /proc/sys/kernel/randomize_va_space

# Restringir acesso ao sysctl
sysctl -w kernel.kptr_restrict=2
sysctl -w kernel.dmesg_restrict=1
```

**Ferramentas de segurança:**

| **Ferramenta** | **Função**                                                      |
| -------------- | --------------------------------------------------------------- |
| **SELinux**    | Security-Enhanced Linux – controle de acesso obrigatório (MAC). |
| **AppArmor**   | Perfil de aplicações (confining).                               |
| **Firewall**   | iptables, nftables, firewalld, ufw.                             |
| **Fail2ban**   | Bloqueio de tentativas de ataque (brute force).                 |
| **Auditd**     | Auditoria de eventos do sistema.                                |
| **ClamAV**     | Antivírus de código aberto.                                     |
| **Lynis**      | Auditoria de segurança e hardening.                             |
| **OpenSCAP**   | Verificação de conformidade com políticas de segurança.         |

***

## 📚 Referências e Ferramentas

### Documentação Oficial

* [Linux Kernel Documentation](https://www.kernel.org/doc/)
* [Filesystem Hierarchy Standard (FHS)](https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.pdf)
* [The Linux Documentation Project (TLDP)](https://tldp.org/)
* [GNU Project](https://www.gnu.org/)
* [Systemd Documentation](https://systemd.io/)

### Forense Digital e Análise de Memória

* **The Sleuth Kit** – <https://www.sleuthkit.org>
* **Autopsy** – <https://www.autopsy.com>
* **LiME (Linux Memory Extractor)** – <https://github.com/504ensicsLabs/LiME>
* **Volatility Framework** – <https://www.volatilityfoundation.org>
* **GRR Rapid Response** – <https://github.com/google/grr>
* **REMnux** – <https://remnux.org>

### Análise de Malware

* **Radare2** – <https://rada.re/n/>
* **Ghidra** – <https://ghidra-sre.org>
* **capa** – <https://github.com/mandiant/capa>
* **YARA** – <https://virustotal.github.io/yara/>
* **VirusTotal** – <https://www.virustotal.com>
* **Cuckoo Sandbox** – <https://cuckoosandbox.org/>

### Segurança e Hardening

* **CIS Benchmarks** – <https://www.cisecurity.org/cis-benchmarks/>
* **Lynis** – <https://cisofy.com/lynis/>
* **ClamAV** – <https://www.clamav.net/>
* **rkhunter** – <http://rkhunter.sourceforge.net/>
* **chkrootkit** – <http://www.chkrootkit.org/>
* **OpenSCAP** – <https://www.open-scap.org/>

### Distribuições para Análise Forense

* **Kali Linux** – <https://www.kali.org>
* **CAINE (Computer Aided Investigative Environment)** – <https://www.caine-live.net>
* **REMnux** – <https://remnux.org>
* **SIFT Workstation** – <https://www.sans.org/tools/sift-workstation>
* **BlackArch** – <https://blackarch.org>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://0xmorte.gitbook.io/bibliadopentestbr/conceitos/ambientes/linux.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
