# UNIX

> **Um guia abrangente sobre UNIX** – desde suas origens nos laboratórios Bell até as arquiteturas modernas, incluindo sistemas de arquivos, mecanismos de segurança, artefatos forenses e procedimentos de investigação em ambientes UNIX e Unix-like.

***

## 📜 Histórico e Evolução do UNIX

O UNIX é o sistema operacional que serviu como base conceitual e filosófica para praticamente todos os sistemas modernos, incluindo Linux, macOS, BSD e Solaris. Sua história é fundamental para entender a arquitetura e os artefatos forenses encontrados nesses sistemas.

### 1.1 Origens: Bell Labs (1969-1979)

O UNIX foi criado no **AT\&T Bell Labs** por **Ken Thompson**, **Dennis Ritchie** e **Douglas McIlroy** como um sistema operacional para programadores, com foco em simplicidade e portabilidade.

| **Marco**                                               | **Ano**   | **Descrição**                                                                                                 |
| ------------------------------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------- |
| **Multics**                                             | 1964-1969 | Projeto colaborativo (MIT, Bell Labs, GE) que inspirou UNIX. Bell Labs se retirou em 1969.                    |
| **UNICS (Uniplexed Information and Computing Service)** | 1969      | Ken Thompson desenvolve o primeiro sistema em um PDP-7, originalmente chamado UNICS (trocadilho com Multics). |
| **Primeira versão (V1)**                                | 1971      | Reescrito em assembly para PDP-11.                                                                            |
| **V4 (Reescrita em C)**                                 | 1973      | Dennis Ritchie reescreve o kernel em linguagem C, tornando-o portável.                                        |
| **V6 (Primeira versão externa)**                        | 1975      | Distribuído para universidades; primeira versão amplamente disponível fora da AT\&T.                          |
| **V7 (Versão clássica)**                                | 1979      | Última versão pura da AT\&T; mãe do UNIX moderno. Introduz o Bourne shell (`sh`), `awk`, `make`, `tar`.       |

**Filosofia UNIX (Princípios de Design):**

* **"Make each program do one thing well"** – programas devem ter uma única responsabilidade bem definida
* **"Everything is a file"** – arquivos, diretórios, dispositivos, pipes, sockets são representados como arquivos
* **Text is the universal interface** – comunicação entre programas via texto simples
* **Write programs that work together** – entrada e saída em formato compatível

### 1.2 A Fragmentação: System V vs BSD (1980-1990)

Em 1984, a AT\&T foi desmembrada (consent decree) e começou a licenciar comercialmente o UNIX, gerando a ramificação:

| **Ramo**                                 | **Origem**                           | **Características**                                                                                        |
| ---------------------------------------- | ------------------------------------ | ---------------------------------------------------------------------------------------------------------- |
| **System V**                             | AT\&T (comercial)                    | Padrão para UNIX comercial (IBM AIX, HP-UX, Solaris, SCO). Inclui SysVinit, `System V IPC`                 |
| **BSD (Berkeley Software Distribution)** | Universidade da Califórnia, Berkeley | Código aberto, inovações técnicas: TCP/IP, vi, csh, job control, FFS, NFS. Base para SunOS, macOS, FreeBSD |

**Versões importantes:**

* **4.2BSD (1983):** TCP/IP, NFS, vi, csh, Fast File System (FFS)
* **4.3BSD (1986):** Melhorias de performance, suporte a redes
* **System V Release 4 (SVR4, 1989):** Unificação de System V e BSD (Sun Solaris)

### 1.3 UNIX Comercial e o Surgimento do Linux (1991-2000)

| **Sistema** | **Lançamento** | **Base**            | **Status**            |
| ----------- | -------------- | ------------------- | --------------------- |
| **Solaris** | 1992           | SVR4                | Ativo (Oracle)        |
| **AIX**     | 1986           | System V            | Ativo (IBM)           |
| **HP-UX**   | 1984           | System V            | Ativo (HPE)           |
| **IRIX**    | 1988           | System V            | Descontinuado (SGI)   |
| **FreeBSD** | 1993           | 4.4BSD-Lite         | Ativo                 |
| **OpenBSD** | 1996           | NetBSD              | Ativo (segurança)     |
| **NetBSD**  | 1993           | 4.4BSD-Lite         | Ativo (portabilidade) |
| **Linux**   | 1991           | Kernel independente | Ativo (Unix-like)     |

**The UNIX Wars (1988-1995):**\
Guerra de padrões entre AT\&T (System V) e o grupo de fornecedores BSD (Sun, IBM, DEC) resultando na fragmentação. O **UNIX®** é atualmente uma marca comercial administrada pelo **Open Group**, que define o padrão **POSIX** (Portable Operating System Interface) e concede certificação para sistemas compatíveis.

### 1.4 UNIX Hoje: Padrão POSIX e Sistemas Modernos

O padrão **POSIX (IEEE 1003.1)** define a interface de programação (API), shell e utilitários que um sistema deve ter para ser considerado compatível.

**Sistemas UNIX certificados:**

* **Oracle Solaris** (SPARC, x86-64)
* **IBM AIX** (Power)
* **HPE HP-UX** (Itanium)
* **Apple macOS** (a partir do OS X, certificado UNIX 03)
* **Inspur K-UX**

**Sistemas Unix-like (não certificados, mas compatíveis):**

* **Linux** (todas as distribuições)
* **FreeBSD / OpenBSD / NetBSD**
* **illumos** (OpenSolaris fork)

***

## 🏗️ Arquitetura do UNIX

### 2.1 Camadas do Sistema UNIX

```mermaid
graph TB
    subgraph "User Space (Aplicações)"
        A[Shells: sh, bash, ksh, zsh]
        B[Programas: ls, ps, grep, find]
        C[Aplicações de Usuário]
        D[Bibliotecas: libc, libpthread]
    end
    
    subgraph "System Call Interface"
        E[Syscalls: open, read, write, fork, exec]
    end
    
    subgraph "Kernel"
        F[Gerenciador de Processos]
        G[Gerenciador de Memória]
        H[Virtual File System VFS]
        I[Gerenciador de Rede]
        J[Device Drivers]
    end
    
    subgraph "Hardware"
        K[CPU, Memória, Discos, Rede]
    end
    
    A & B & C --> D
    D --> E
    E --> F & G & H & I & J
    F & G & H & I & J --> K
```

### 2.2 O Kernel UNIX

O kernel UNIX é o núcleo do sistema operacional, responsável por gerenciar recursos e fornecer serviços para os programas de usuário. A maioria dos kernels UNIX modernos é **monolítica** (todos os serviços em um único espaço de endereçamento), exceto macOS (XNU, híbrido) e alguns microkernels experimentais.

**Principais subsistemas do kernel:**

| **Subsistema**                | **Função**                                                                                    |
| ----------------------------- | --------------------------------------------------------------------------------------------- |
| **Gerenciador de Processos**  | Criação/terminação de processos, escalonamento (scheduler), comunicação entre processos (IPC) |
| **Gerenciador de Memória**    | Memória virtual, paginação, swapping, mapeamento de arquivos                                  |
| **Virtual File System (VFS)** | Abstração para diferentes sistemas de arquivos (UFS, ZFS, ext4, NFS, etc.)                    |
| **Gerenciador de Rede**       | Pilha TCP/IP, sockets, roteamento, firewalling                                                |
| **Device Drivers**            | Interação com hardware (discos, placas de rede, terminais)                                    |

### 2.3 O Modelo de Arquivos e Dispositivos

O princípio **"everything is a file"** é central no UNIX:

| **Tipo**                      | **Representação**                          | **Exemplo**                      |
| ----------------------------- | ------------------------------------------ | -------------------------------- |
| **Arquivos regulares**        | Arquivos comuns                            | `/etc/passwd`, `/var/log/syslog` |
| **Diretórios**                | Arquivos especiais contendo nomes e inodes | `/home`, `/tmp`                  |
| **Dispositivos de bloco**     | `/dev`                                     | `/dev/sda` (disco)               |
| **Dispositivos de caractere** | `/dev`                                     | `/dev/tty0` (terminal)           |
| **Pipes nomeados**            | FIFO                                       | `mkfifo /tmp/pipe`               |
| **Sockets**                   | Unix domain sockets                        | `/var/run/syslog.sock`           |
| **Links simbólicos**          | Apontadores para outro arquivo             | `/usr/bin/python -> python3`     |

### 2.4 Processos e Gerenciamento

**Hierarquia de processos:**

```
sched (PID 0) - processo de escalonamento do kernel
  └── init (PID 1) - primeiro processo no user space
        ├── sshd (PID 200)
        │     └── bash (PID 250) - sessão do usuário
        ├── syslogd (PID 150)
        └── cron (PID 160)
```

**Comandos para análise:**

```bash
ps aux            # Lista todos os processos
ps -ef            # Formato System V
pstree -p         # Árvore de processos
top               # Monitoramento em tempo real
lsof -i           # Arquivos abertos e conexões
```

***

## 💾 Sistemas de Arquivos UNIX

### 3.1 UFS/FFS – Unix File System / Fast File System

O **UFS (Unix File System)**, também conhecido como **FFS (Fast File System)** quando implementado no BSD, foi o sistema de arquivos padrão do UNIX por décadas.

#### 3.1.1 Estrutura Clássica do UFS

```
[Boot Block] → [Superblock] → [Cylinder Groups (CG0...CGn)]
```

| **Componente**     | **Descrição**                                                                                                                 |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| **Boot Block**     | Primeiros 8 KB; código de boot (não necessário se outro loader for usado)                                                     |
| **Superblock**     | Metadados do volume: tamanho, número de inodes, localização dos cylinder groups                                               |
| **Cylinder Group** | Agrupamento de trilhas/cilindros para reduzir fragmentação. Contém: superblock backup, inode table, block bitmap, data blocks |

#### 3.1.2 Inodes no UFS/FFS

O inode é a estrutura de metadados fundamental do UFS:

| **Campo**   | **Descrição**                                                                                |
| ----------- | -------------------------------------------------------------------------------------------- |
| `i_mode`    | Tipo de arquivo e permissões (ex.: 0644, 0755)                                               |
| `i_nlink`   | Número de links (hard links)                                                                 |
| `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
stat /etc/passwd          # Estatísticas completas
ls -li /etc/              # Lista com números de inode
df -i /                   # Uso de inodes no sistema de arquivos
```

### 3.2 ZFS – Zettabyte File System (Solaris/illumos/FreeBSD)

O **ZFS** foi originalmente desenvolvido pela Sun Microsystems para o Solaris e é considerado um dos sistemas de arquivos mais avançados, agora disponível em illumos, FreeBSD e Linux (OpenZFS).

**Características fundamentais:**

* **Pool de armazenamento:** gerencia múltiplos discos como um pool unificado
* **Copy-on-write:** nunca sobrescreve dados existentes (snapshots eficientes)
* **Checksum end-to-end:** verificação de integridade de dados e metadados
* **Compressão e deduplicação:** integradas, transparentes
* **Snapshots e clones:** instantâneos, eficientes
* **RAID-Z:** RAID integrado (Z1, Z2, Z3)

**Estrutura ZFS:**

```
pool (zpool)
  ├── dataset (filesystem) - /home
  ├── dataset (filesystem) - /var
  ├── volume (zvol) - dispositivo de bloco virtual
  └── snapshot - cópia point-in-time
```

**Comandos ZFS:**

```bash
# Listar pools
zpool list

# Listar sistemas de arquivos
zfs list

# Criar snapshot
zfs snapshot tank/home@2025-03-27

# Enviar snapshot para backup
zfs send tank/home@2025-03-27 | zfs receive backup/home

# Verificar integridade
zpool scrub tank
```

### 3.3 Sistemas de Arquivos de Sistemas UNIX Modernos

| **Sistema** | **Sistema de Arquivos Padrão** | **Alternativas Suportadas**   |
| ----------- | ------------------------------ | ----------------------------- |
| **Solaris** | ZFS                            | UFS                           |
| **FreeBSD** | UFS (FFS) ou ZFS               | ext2/3/4 (leitura), FAT, NTFS |
| **OpenBSD** | FFS (UFS)                      | ext2 (leitura), FAT           |
| **NetBSD**  | FFS (UFS)                      | ext2/3/4, ZFS (experimental)  |
| **AIX**     | JFS (Journaled File System)    | -                             |
| **HP-UX**   | VxFS (Veritas File System)     | HFS (UFS)                     |
| **macOS**   | APFS                           | HFS+, UFS (leitura)           |

### 3.4 Estrutura de Diretórios Padrão (FHS) em UNIX

O **Filesystem Hierarchy Standard (FHS)** define a estrutura de diretórios em sistemas Unix-like. Embora sistemas UNIX certificados possam ter variações, a maioria segue este padrão:

| **Diretório** | **Conteúdo**                                     |
| ------------- | ------------------------------------------------ |
| `/`           | Raiz do sistema de arquivos                      |
| `/bin`        | Executáveis essenciais (ls, cp, mv, sh)          |
| `/boot`       | Arquivos de boot (kernel, loader)                |
| `/dev`        | Dispositivos                                     |
| `/etc`        | Arquivos de configuração do sistema              |
| `/home`       | Diretórios pessoais dos usuários                 |
| `/kernel`     | Kernel (em Solaris)                              |
| `/lib`        | Bibliotecas compartilhadas essenciais            |
| `/mnt`        | Pontos de montagem temporários                   |
| `/opt`        | Software adicional (aplicações de terceiros)     |
| `/proc`       | Sistema de arquivos virtual de processos         |
| `/root`       | Diretório pessoal do root (não `/home/root`)     |
| `/sbin`       | Executáveis para administração (fdisk, ifconfig) |
| `/tmp`        | Arquivos temporários                             |
| `/usr`        | Aplicações e bibliotecas de usuário              |
| `/var`        | Dados variáveis (logs, spool, cache)             |

**Variações específicas:**

* **Solaris:** `/kernel`, `/platform`, `/export/home` (em vez de `/home`)
* **AIX:** `/usr/sbin` (administração), `/etc/security` (políticas)
* **HP-UX:** `/stand` (kernel), `/usr/contrib` (software adicional)

### 3.5 Sistemas de Arquivos Especiais

| **Sistema**   | **Ponto de Montagem**      | **Descrição**                                             |
| ------------- | -------------------------- | --------------------------------------------------------- |
| **procfs**    | `/proc`                    | Informações de processos e kernel                         |
| **devfs**     | `/dev`                     | Gerenciamento dinâmico de dispositivos (FreeBSD, Solaris) |
| **tmpfs**     | `/tmp`, `/run`, `/dev/shm` | Sistema de arquivos em memória                            |
| **fdescfs**   | `/dev/fd`                  | Descritores de arquivos (FreeBSD)                         |
| **linprocfs** | `/compat/linux/proc`       | Emulação Linux no FreeBSD                                 |

### 3.6 Inodes e Metadados

O inode é a estrutura central dos sistemas de arquivos UNIX tradicionais (UFS, FFS, ext2/3/4). Ele contém todos os metadados de um arquivo, exceto o nome (armazenado no diretório) e o conteúdo (armazenado em blocos de dados).

**Recuperação forense:**

```bash
# Recuperar arquivo deletado (UFS/FFS) no FreeBSD
ffind -a /dev/ada0s1 | grep inode_number

# Escanear por assinaturas de arquivo
foremost -i /dev/ada0s1 -o /output
scalpel /dev/ada0s1 -o /output
```

***

## 🛡️ Mecanismos de Segurança UNIX

### 4.1 Modelo de Permissões Clássico (rwx)

O modelo de permissões UNIX clássico é baseado em três classes e três permissões:

| **Classe**       | **Identificador** | **Aplicação**                |
| ---------------- | ----------------- | ---------------------------- |
| **User (owner)** | `u`               | O proprietário do arquivo    |
| **Group**        | `g`               | Usuários no grupo do arquivo |
| **Other**        | `o`               | Todos os outros usuários     |

| **Permissão**   | **Arquivo**        | **Diretório**            |
| --------------- | ------------------ | ------------------------ |
| **read (r)**    | Ler conteúdo       | Listar conteúdo (`ls`)   |
| **write (w)**   | Modificar conteúdo | Criar/excluir arquivos   |
| **execute (x)** | Executar programa  | Acessar diretório (`cd`) |

**Representação octal:**

```
-rwxr-xr-- 1 user group 1024 Mar 27 12:00 file.txt
 |  |  |  |
 |  |  |  └── outros (leitura)
 |  |  └────── grupo (leitura + execução)
 |  └────────── proprietário (leitura, escrita, execução)
 └────────────── tipo ( - = arquivo, d = diretório, l = link)
```

**Comandos de gerenciamento:**

```bash
chmod 755 file           # Octal: rwxr-xr-x
chmod u+x,g-w,o=r file   # Simbólico: adiciona execução para owner, remove escrita do grupo, define leitura para outros
chown user:group file    # Altera proprietário e grupo
```

### 4.2 ACLs (Access Control Lists)

ACLs estendem o modelo clássico, permitindo permissões para usuários e grupos específicos.

**POSIX ACLs (Solaris, Linux, FreeBSD):**

```bash
# Visualizar ACLs
getfacl file.txt

# Definir ACL
setfacl -m u:john:rwx file.txt
setfacl -m g:developers:rx file.txt

# Remover ACL
setfacl -x u:john file.txt
```

**NFSv4/ZFS ACLs (Solaris, FreeBSD, ZFS):**\
Sistema mais granular, com permissões como `read_data`, `write_data`, `append`, `execute`, `delete`, etc.

### 4.3 Capabilities (Linux) e Privilege Separation

**Linux Capabilities:** Permite conceder privilégios específicos a processos sem necessidade de root completo.

```bash
# Adicionar capacidade de ouvir em porta baixa
setcap cap_net_bind_service+ep /usr/bin/myservice

# Verificar capacidades
getcap /usr/bin/myservice
```

**Privilege Separation (OpenBSD):** Processos são divididos em partes privilegiadas e não privilegiadas, reduzindo superfície de ataque.

### 4.4 MAC: SELinux, AppArmor e TrustedBSD

**Mandatory Access Control (MAC)** impõe políticas de segurança obrigatórias, além das permissões discricionárias (DAC).

| **Sistema**                    | **Implementação**            | **Uso**                                                                    |
| ------------------------------ | ---------------------------- | -------------------------------------------------------------------------- |
| **SELinux**                    | Linux (Fedora, RHEL, CentOS) | Políticas de domínio baseadas em contexto; aplicado a processos e arquivos |
| **AppArmor**                   | Linux (Ubuntu, SUSE)         | Perfis de aplicações (baseados em caminho)                                 |
| **TrustedBSD**                 | FreeBSD                      | MAC Framework com módulos (Biba, MLS, strict)                              |
| **Solaris Trusted Extensions** | Solaris                      | Label-based security (multilevel security)                                 |

**SELinux (Linux):**

```bash
# Verificar status
getenforce

# Verificar contexto de um arquivo
ls -Z /etc/passwd

# Verificar contexto de um processo
ps -Z
```

**TrustedBSD (FreeBSD):**

```bash
# Carregar módulo MAC
kldload mac_bsdextended

# Verificar status
sysctl security.mac.ugidfw.rules
```

### 4.5 Pluggable Authentication Modules (PAM)

PAM é um framework de autenticação modular que separa os mecanismos de autenticação das aplicações.

**Arquivo de configuração:** `/etc/pam.conf` (System V) ou `/etc/pam.d/` (Linux, BSD)

**Exemplo (Linux):**

```
/etc/pam.d/sshd:
auth     required     pam_unix.so
auth     required     pam_tally2.so deny=5 unlock_time=300
account  required     pam_unix.so
```

### 4.6 Audit Frameworks (BSM, Auditd)

| **Framework**                   | **Sistemas**                                  | **Descrição**                                                 |
| ------------------------------- | --------------------------------------------- | ------------------------------------------------------------- |
| **Basic Security Module (BSM)** | Solaris, macOS (derivado), FreeBSD (emulação) | Eventos de segurança, logs estruturados                       |
| **auditd**                      | Linux, AIX                                    | Framework de auditoria com regras e logs no formato audit.log |
| **OpenBSM**                     | FreeBSD, macOS, illumos                       | Implementação open-source do BSM                              |

**Auditd (Linux):**

```bash
# Adicionar regra de auditoria
auditctl -w /etc/passwd -p wa -k passwd_changes

# Visualizar logs
ausearch -k passwd_changes
aureport
```

**BSM (Solaris):**

```bash
# Configurar auditoria
auditconfig -setflags lo,ad,fd
# Visualizar logs
praudit /var/audit/*.log
```

***

## 👥 Gerenciamento de Contas de Usuário

### 5.1 Arquivos de Senha e Shadow (/etc/passwd, /etc/shadow)

**/etc/passwd** (legível por todos):

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

O campo senha contém `x` – a senha real está em `/etc/shadow` (acesso restrito ao root).

**/etc/shadow** (acesso restrito):

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

| **Campo**     | **Descrição**                                      |
| ------------- | -------------------------------------------------- |
| `$6$`         | Algoritmo de hash (SHA-512)                        |
| `$5$`         | SHA-256                                            |
| `$2y$`        | bcrypt                                             |
| `$1$`         | MD5 (obsoleto)                                     |
| `last_change` | Dias desde 01/01/1970 da última alteração          |
| `min`         | Dias mínimos entre alterações                      |
| `max`         | Dias máximos entre alterações (expiração)          |
| `warn`        | Dias de aviso antes da expiração                   |
| `inactive`    | Dias após expiração até desativação                |
| `expire`      | Data de expiração da conta (dias desde 01/01/1970) |

### 5.2 Grupos e Permissões

**Arquivos de grupo:**

* `/etc/group` – lista de grupos e membros
* `/etc/gshadow` – senhas de grupo (acesso restrito)

**GIDs reservados:**

* **0:** `wheel` (administradores) ou `root` (depende do sistema)
* **65534:** `nobody` (usuário sem privilégios)

### 5.3 UIDs Especiais: 0, 65534, e Reserves

| **UID**     | **Conta** | **Descrição**                               |
| ----------- | --------- | ------------------------------------------- |
| **0**       | root      | Superusuário; acesso irrestrito ao sistema  |
| **1-99**    | Varia     | Contas de sistema tradicionais              |
| **100-999** | Varia     | Contas de sistema modernas (serviços)       |
| **65534**   | nobody    | Usuário sem privilégios; usado por serviços |
| **65535**   | nfsnobody | NFS anonymous (em alguns sistemas)          |

### 5.4 Contas de Sistema e Serviços

| **Conta**  | **UID/GID típico** | **Função**                                        |
| ---------- | ------------------ | ------------------------------------------------- |
| **daemon** | 1                  | Serviços do sistema (impressão, etc.)             |
| **bin**    | 2                  | Proprietário de binários do sistema (tradicional) |
| **sys**    | 3                  | Proprietário de arquivos do sistema (tradicional) |
| **adm**    | 4                  | Logs do sistema (tradicional)                     |
| **lp**     | 9                  | Impressão                                         |
| **uucp**   | 10                 | UUCP (Unix-to-Unix Copy)                          |
| **nobody** | 65534              | NFS, serviços sem privilégios                     |

***

## 🔍 Artefatos Forenses em Sistemas UNIX

### 6.1 Logs do Sistema

**Syslog (estrutura tradicional):**

| **Arquivo**         | **Conteúdo**                   |
| ------------------- | ------------------------------ |
| `/var/log/messages` | Logs gerais do sistema (Linux) |
| `/var/log/syslog`   | Logs gerais (Debian/Ubuntu)    |
| `/var/log/auth.log` | Autenticações (Debian/Ubuntu)  |
| `/var/log/secure`   | Autenticações (RHEL/CentOS)    |
| `/var/log/kern.log` | Logs do kernel                 |
| `/var/log/boot.log` | Logs de inicialização          |
| `/var/log/maillog`  | Logs de e-mail                 |
| `/var/log/cron`     | Tarefas agendadas              |

**Syslog-ng e rsyslog:** permitem configuração avançada, envio para servidores remotos e logs estruturados.

**Eventos críticos de autenticação:**

```bash
# Logins bem-sucedidos (Linux)
grep "Accepted password" /var/log/auth.log

# Tentativas de login com falha
grep "Failed password" /var/log/auth.log

# Sudo executions
grep "sudo" /var/log/auth.log

# SSH activity
grep "sshd" /var/log/auth.log
```

### 6.2 Arquivos de Configuração e Históricos

| **Arquivo**                 | **Função**                   |
| --------------------------- | ---------------------------- |
| `/etc/passwd`               | Contas de usuário            |
| `/etc/shadow`               | Senhas criptografadas        |
| `/etc/group`                | Grupos de usuários           |
| `/etc/sudoers`              | Permissões sudo              |
| `/etc/fstab`                | Pontos de montagem           |
| `/etc/hosts`                | Resolução estática de nomes  |
| `/etc/resolv.conf`          | Servidores DNS               |
| `/etc/ssh/sshd_config`      | Configuração do servidor SSH |
| `/etc/crontab`              | Tarefas agendadas (sistema)  |
| `/var/spool/cron/crontabs/` | Crontabs de usuários         |

**Histórico de comandos:**

| **Shell**   | **Arquivo de Histórico**                            |
| ----------- | --------------------------------------------------- |
| sh (Bourne) | Não possui (variável `$HISTFILE` pode ser definida) |
| bash        | `~/.bash_history`                                   |
| ksh         | `~/.sh_history`                                     |
| zsh         | `~/.zsh_history`                                    |
| csh/tcsh    | `~/.history`                                        |

### 6.3 Artefatos de Execução e Persistência

| **Mecanismo**         | **Localização**                                       | **Descrição**                         |
| --------------------- | ----------------------------------------------------- | ------------------------------------- |
| **init.d scripts**    | `/etc/init.d/`                                        | Scripts de inicialização (System V)   |
| **rc.d scripts**      | `/etc/rc.d/` ou `/etc/rc*.d/`                         | Scripts de runlevel                   |
| **inittab**           | `/etc/inittab`                                        | Configuração de runlevels (System V)  |
| **systemd units**     | `/etc/systemd/system/`, `/usr/lib/systemd/system/`    | Unidades de serviço (Linux)           |
| **SMF services**      | `/lib/svc/`                                           | Service Management Facility (Solaris) |
| **rc.conf**           | `/etc/rc.conf`                                        | Configuração de serviços (BSD)        |
| **cron jobs**         | `/etc/crontab`, `/var/spool/cron/crontabs/`           | Tarefas agendadas                     |
| **at jobs**           | `/var/spool/at/`                                      | Tarefas de execução única             |
| **shell startup**     | `~/.profile`, `~/.bashrc`, `~/.kshrc`, `/etc/profile` | Comandos executados no login          |
| **PATH modification** | `/etc/environment`, `/etc/profile.d/`                 | Variáveis de ambiente                 |

### 6.4 Artefatos de Rede

| **Artefato**            | **Localização**                                                              | **Informação**                |
| ----------------------- | ---------------------------------------------------------------------------- | ----------------------------- |
| **DNS cache**           | `/var/run/nscd/db*` (Linux)                                                  | Resoluções DNS recentes       |
| **DHCP leases**         | `/var/lib/dhcp/dhclient.leases`                                              | Leases DHCP (Linux)           |
| **SSH known hosts**     | `~/.ssh/known_hosts`                                                         | Hosts conectados via SSH      |
| **SSH authorized keys** | `~/.ssh/authorized_keys`                                                     | Chaves autorizadas para logon |
| **SSH history**         | `~/.ssh/`                                                                    | Histórico de conexões         |
| **Network interfaces**  | `/etc/network/interfaces` (Debian), `/etc/sysconfig/network-scripts/` (RHEL) | Configurações de rede         |
| **pf logs**             | `/var/log/pflog`                                                             | Logs de firewall (BSD)        |
| **iptables logs**       | `/var/log/kern.log` (por padrão)                                             | Logs de firewall (Linux)      |

### 6.5 Artefatos de Armazenamento Externo

**Histórico de dispositivos USB (Linux):**

```bash
# Registros de conexão USB
lsusb
grep -i usb /var/log/messages
journalctl --dmesg | grep -i usb
```

**Histórico de montagens:**

```bash
# Verificar montagens atuais
mount

# Histórico de montagens (logs)
grep -i mount /var/log/messages
```

**Formatos de dispositivos:**

```bash
# Identificar sistema de arquivos
file -s /dev/sda1
blkid /dev/sda1
```

***

## 📀 Aquisição Forense em UNIX

### 7.1 Desafios Específicos por Sistema

| **Desafio**                 | **Descrição**                                                  | **Exemplo**                                     |
| --------------------------- | -------------------------------------------------------------- | ----------------------------------------------- |
| **Criptografia de volume**  | ZFS encryption (Solaris/FreeBSD), LUKS (Linux), GELI (FreeBSD) | Requer senha para descriptografar               |
| **ZFS pool structure**      | ZFS não pode ser imageado por volume individual                | Imagem do pool ou dispositivo físico            |
| **Live system alteração**   | Aquisição em execução altera timestamps                        | Minimizar ferramentas, usar metodologia live    |
| **Filesystem variation**    | UFS/FFS, ZFS, JFS, VxFS, etc.                                  | Ferramentas específicas por sistema de arquivos |
| **Resource forks (macOS)**  | Metadados estendidos APFS/HFS+                                 | Preservar com formatos nativos (DMG)            |
| **Secure Boot/SIP (macOS)** | Proteções de integridade                                       | Desabilitar via Recovery Mode                   |

### 7.2 Aquisição de Sistemas em Execução (Live)

**Coleta de informações voláteis:**

```bash
# Coletar informações do sistema
uname -a > uname.txt
date > date.txt
hostname > hostname.txt
ifconfig -a > ifconfig.txt   # ou ip addr show
netstat -an > netstat.txt
netstat -rn > routing.txt
arp -a > arp.txt
ps auxww > ps.txt
lsof > lsof.txt
w > w.txt
last > last.txt
lastb > lastb.txt
df -h > df.txt
mount > mount.txt
```

**Aquisição de disco:**

```bash
# Cópia bit-a-bit usando dd (Linux, BSD, macOS)
dd if=/dev/sda of=/path/to/image.dd bs=4096 conv=noerror,sync

# Cópia com compressão (gzip)
dd if=/dev/sda bs=4096 conv=noerror,sync | gzip -c > image.dd.gz

# Cópia com progresso (ddrescue - GNU)
ddrescue /dev/sda image.dd mapfile.log

# Cópia com dc3dd (melhor para forense)
dc3dd if=/dev/sda of=image.dd hash=sha256 log=log.txt
```

### 7.3 Aquisição de Sistemas Parados (Dead)

{% stepper %}
{% step %}

### Identificar o sistema de arquivos e estrutura de partições

```bash
fdisk -l /dev/sda        # MBR
gdisk -l /dev/sda        # GPT
```

{% endstep %}

{% step %}

### Verificar criptografia

```bash
cryptsetup status /dev/mapper/crypt
zfs get encryption pool
```

{% endstep %}

{% step %}

### Montar o sistema de arquivos em modo somente leitura

```bash
mount -o ro /dev/sda1 /mnt
```

{% endstep %}

{% step %}

### Realizar imagem forense

```bash
dd if=/dev/sda of=image.dd bs=4096 conv=noerror,sync
```

{% endstep %}
{% endstepper %}

### 7.4 Workflow Recomendado

```mermaid
graph LR
    A[Identificar tipo de sistema] --> B{Em execução?}
    B -->|Sim| C[Coletar dados voláteis]
    C --> D[Desmontar discos]
    D --> E[Realizar imagem com dd/dc3dd]
    B -->|Não| F[Identificar partições]
    F --> G{Encriptado?}
    G -->|Sim| H[Obter chave/senha]
    H --> I[Decriptografar]
    G -->|Não| E
    I --> E
    E --> J[Calcular hashes]
    J --> K[Analisar em ferramenta compatível]
```

***

## 🦠 Análise de Malware em UNIX

### 8.1 Principais Ameaças por Sistema

| **Sistema**   | **Ameaças Comuns**                                                       | **Características**                                    |
| ------------- | ------------------------------------------------------------------------ | ------------------------------------------------------ |
| **Linux**     | Ransomware (Linux.Encoder), mineradores (XMRig), botnets (Mirai, Gafgyt) | Alvo principal devido à popularidade em servidores     |
| **FreeBSD**   | Rootkits (Rkit), backdoors, miners                                       | Menos visado, mas utilizado em servidores e firewalls  |
| **Solaris**   | Exploits de serviços (RPC, NFS), backdoors                               | Alvo de ataques direcionados em ambientes empresariais |
| **AIX/HP-UX** | Ameaças de código específico, engenharia social                          | Alvos raros, geralmente ataques direcionados           |

### 8.2 Metodologia de Análise

**Análise Estática:**

```bash
# Strings e identificação
file malware.bin
strings malware.bin | head -50
md5sum malware.bin
sha256sum malware.bin

# Verificar se é ELF
readelf -h malware.bin
objdump -d malware.bin | head -100

# Bibliotecas dependentes
ldd malware.bin               # Linux
readelf -d malware.bin | grep NEEDED
```

**Análise Dinâmica:**

```bash
# Executar em sandbox (com restrições)
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
```

**Análise de Memória:**

```bash
# Extrair memória (Linux)
cat /proc/kcore > memory.dump
# ou usar LiME
insmod lime.ko "path=/root/memory.dump format=lime"

# Análise com Volatility (Linux)
volatility -f memory.dump --profile=LinuxUbuntu1804x64 linux_pslist
```

### 8.3 Ferramentas de Análise

| **Ferramenta** | **Descrição**                      | **Plataformas**     |
| -------------- | ---------------------------------- | ------------------- |
| **radare2**    | Disassembler e debugger            | Linux, BSD, macOS   |
| **Ghidra**     | RE suite (NSA)                     | Multiplataforma     |
| **capa**       | Detecção de capacidades de malware | Linux, Windows      |
| **YARA**       | Regras de detecção                 | Multiplataforma     |
| **ClamAV**     | Antivírus de código aberto         | Linux, BSD          |
| **rkhunter**   | Detecção de rootkits               | Linux               |
| **chkrootkit** | Detecção de rootkits               | Linux               |
| **OSSEC**      | HIDS                               | Linux, BSD, Solaris |
| **Tripwire**   | Integridade de arquivos            | Multiplataforma     |

***

## ⚖️ UNIX vs Linux vs macOS: Matriz Comparativa

| **Aspecto**                    | **UNIX Tradicional**                               | **Linux**                 | **macOS**                               |
| ------------------------------ | -------------------------------------------------- | ------------------------- | --------------------------------------- |
| **Kernel**                     | System V, BSD, Solaris                             | Linux                     | XNU (Mach + BSD)                        |
| **Sistema de Arquivos Padrão** | UFS, ZFS (Solaris), JFS (AIX)                      | ext4, XFS, Btrfs          | APFS                                    |
| **Gerenciador de Serviços**    | init.d, SMF (Solaris), rc.d (BSD)                  | systemd (maioria), OpenRC | launchd                                 |
| **Gerenciador de Pacotes**     | pkg (Solaris), rpm (AIX), ports (BSD)              | APT, DNF, pacman, etc.    | pkgutil, Homebrew (terceiros)           |
| **Sistema de Auditoria**       | BSM (Solaris), auditd (AIX)                        | auditd                    | BSM (derivado)                          |
| **MAC**                        | TrustedBSD (FreeBSD), Trusted Extensions (Solaris) | SELinux, AppArmor         | TCC, SIP                                |
| **Shell Padrão**               | sh, ksh (Solaris), bash (Linux, BSD)               | bash, zsh                 | zsh (Catalina+)                         |
| **Comercial vs Open Source**   | Comercial (Solaris, AIX, HP-UX) / Open (BSD)       | Open Source               | Comercial (código aberto apenas Darwin) |
| **Certificação UNIX**          | ✅ Sim (Solaris, AIX, HP-UX, macOS)                 | ❌ Não (Unix-like)         | ✅ Sim (UNIX 03)                         |

***

## 📚 Referências e Ferramentas

### Documentação e Padrões

* [The Open Group: UNIX Standard](https://www.opengroup.org/unix)
* [POSIX Specification](https://pubs.opengroup.org/onlinepubs/9699919799/)
* [Filesystem Hierarchy Standard](https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.pdf)

### Sistemas Específicos

* [Oracle Solaris Documentation](https://docs.oracle.com/en/operating-systems/solaris/)
* [IBM AIX Documentation](https://www.ibm.com/docs/en/aix)
* [FreeBSD Handbook](https://docs.freebsd.org/en/books/handbook/)
* [OpenBSD Documentation](https://www.openbsd.org/faq/)

### Forense Digital

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

### 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/>
* **MalwareBazaar** – <https://bazaar.abuse.ch>

### Segurança e Hardening

* **CIS Benchmarks** – <https://www.cisecurity.org/cis-benchmarks/>
* **Lynis** – <https://cisofy.com/lynis/>
* **rkhunter** – <http://rkhunter.sourceforge.net/>
* **chkrootkit** – <http://www.chkrootkit.org/>
* **OpenSCAP** – <https://www.open-scap.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/unix.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.
