As inovações do OpenBSD
(openbsd.org)O projeto OpenBSD desenvolve e mantém diversos softwares e ideias. A seguir, uma organização aproximada em ordem de introdução
Conceitos (Concepts)
- IPSec(4): o OpenBSD foi o primeiro sistema operacional livre a oferecer uma pilha IPSec. Introduzido em 20 de fevereiro de 1997
- INET6(4): integração completa de IPv6 no OpenBSD 2.7. Desenvolvimento iniciado em 6 de janeiro de 1999, alcançando estado quase totalmente funcional no primeiro hackathon em 6 de junho do mesmo ano
- Separação de privilégios (Privilege Separation): implementada pela primeira vez no OpenSSH em março de 2002. Depois aplicada a vários programas como bgpd(8), dhclient(8), smtpd(8), tmux(1) etc.
- Revogação de privilégios (Privilege Revocation): aplicação de um método que reduz privilégios enquanto mantém certos recursos. Ex.: ping(8), traceroute(8)
- Protetor de pilha (Stack Protector): baseado em "propolice", desenvolvido desde 2001. Ativado por padrão no OpenBSD 3.3
- W^X (Write XOR Execute): aplicado pela primeira vez no OpenBSD 3.3. Desde o OpenBSD 6.0, é rigidamente imposto por padrão
- Proteção de GOT e PLT: no OpenBSD 3.3, o
ld.sofoi aprimorado para proteger a GOT (Global Offset Table) e a PLT (Procedure Linkage Table) - ASLR (Address Space Layout Randomization): o OpenBSD 3.4 foi o primeiro a ativá-lo por padrão
- Análise e verificação de gcc-local(1): introduzidas pela primeira vez no OpenBSD 3.4
- Reforço de segurança de malloc(3): aplicação de randomização e liberação atrasada na alocação de memória. Reimplementado no OpenBSD 4.4
- Executáveis independentes de posição (PIE): ativados por padrão pela primeira vez no OpenBSD 5.3. Em 7 plataformas de hardware
- Inicialização de memória baseada em aleatoriedade: adição da seção ELF
.openbsd.randomdatano OpenBSD 5.3 - Protetor de pilha por objeto compartilhado: aplicação de cookies individuais de protetor de pilha para cada objeto compartilhado no OpenBSD 5.3
- Static-PIE: suporte a binários estáticos independentes de posição em /bin, /sbin e RAM disk. Introduzido no OpenBSD 5.7
- Mitigação contra ataques SROP: ativada por padrão no OpenBSD 6.0
- Randomização da ordem de carregamento de bibliotecas: ativada por padrão no OpenBSD 6.0 e 6.2
- Melhoria do lazy-binding para segurança W^X em ambientes multithread: introduzida no OpenBSD 5.9
- Reforço do layout de memória: aplicado a todos os programas e bibliotecas no OpenBSD 6.1
- Uso do método fork+exec: reforço da proteção do espaço de endereçamento em programas com separação de privilégios
- trapsleds: aplicação de uma técnica de conversão de NOP com o objetivo de mitigar ataques ROP (Return-Oriented Programming)
- Relink do kernel na inicialização: randomiza o layout interno do kernel a cada boot
- Reforço da segurança de sequências de instruções i386/amd64: melhorias para dificultar ataques ROP
- Adição da opção MAP_STACK: evita a exploração de memória não pertencente à pilha em ataques ROP
- RETGUARD: mecanismo de proteção mais forte que o protetor de pilha existente, introduzido a partir do OpenBSD 6.4
- Adição da opção MAP_CONCEAL: impede que informações sensíveis vazem em core dumps
- Bloqueio de chamadas de sistema em memória PROT_WRITE: introduzido no OpenBSD 6.5
- Fixação da localização de chamadas de sistema: restringe chamadas de sistema a locais específicos
- Reforço da proteção do espaço de endereçamento: limita alterações de memória via mmap(2), mprotect(2) etc.
- Relink do sshd na inicialização: introduzido no OpenBSD 7.2
- Suporte a código não legível (xonly): restringe a leitura de memória executável
- Proteção de chamadas de sistema pinsyscalls(2): protege registrando previamente os locais de chamadas de sistema
- Proteção de alvos de desvio indireto (BTI, IBT): aplicação de recursos de segurança baseados em hardware
- Adição do recurso -fret-clean: impede que valores de retorno permaneçam na pilha, bloqueando vazamento de informações. Atualmente aplicado apenas em amd64
Funções (Functions)
- issetugid(2): função introduzida no OpenBSD 2.0 que fornece a capacidade de verificar se o processo está executando com user ID ou group ID configurado
- arc4random(3): função de geração de números aleatórios, adicionada no OpenBSD 2.1
- bcrypt(3): função para hashing de senhas. Introduzida pela primeira vez no OpenBSD 2.1
- strlcpy(3), strlcat(3): funções para cópia e concatenação seguras de strings. Introduzidas no OpenBSD 2.4
- strtonum(3): função que converte string em número evitando erros. Introduzida no OpenBSD 3.6
- imsg: API de troca de mensagens, usada em vários daemons. Adicionada à libutil no OpenBSD 4.8
- timingsafe_bcmp(3): função de comparação de bytes com tempo de execução constante. Introduzida no OpenBSD 4.9
- explicit_bzero(3): função para apagar memória com segurança. Adicionada no OpenBSD 5.5
- ohash: implementação de tabela hash. Incluída na libutil no OpenBSD 5.6
- asr: resolvedor DNS alternativo. Ativado no OpenBSD 5.6
- reallocarray(3): função que evita overflow ao realocar memória. Adicionada no OpenBSD 5.6
- getentropy(2): função que fornece números aleatórios criptograficamente seguros. Introduzida no OpenBSD 5.6
- sendsyslog(2): função para enviar mensagens syslog a partir do kernel. Adicionada no OpenBSD 5.6
- timingsafe_memcmp(3): função de comparação de memória com tempo de execução constante. Introduzida no OpenBSD 5.6
- pledge(2): função que melhora a segurança restringindo system calls. Adicionada no OpenBSD 5.9
- getpwnam_shadow(3), getpwuid_shadow(3): funções para buscar dados de senha shadow com reforço de segurança. Introduzidas no OpenBSD 5.9
- recallocarray(3): função que preenche dados existentes com zero ao redimensionar memória. Adicionada no OpenBSD 6.1
- freezero(3): função que libera memória preenchendo-a com zero. Introduzida no OpenBSD 6.2
- unveil(2): função que restringe acesso ao sistema de arquivos. Adicionada no OpenBSD 6.4
- malloc_conceal(3), calloc_conceal(3): fornecem proteção para dados sensíveis durante a alocação de memória. Adicionadas no OpenBSD 6.5
- ober: API ASN.1 Basic Encoding Rules. Movida para a libutil no OpenBSD 6.6
Programas e subsistemas (Programs and Subsystems)
- Utilitários relacionados a YP: ypbind(8), ypset(8), ypcat(1), ypmatch(1), ypwhich(1), adição de suporte à libc. Distribuídos pela primeira vez no NetBSD 0.9
- ypserv(8): servidor YP introduzido no OpenBSD 2.0
- mopd(8): daemon com suporte a MOP (Maintenance Operations Protocol). Adicionado no OpenBSD 2.0
- AnonCVS: sistema projetado para permitir acesso anônimo ao repositório de código do OpenBSD
- aucat(1): utilitário relacionado ao servidor de áudio. Adicionado no OpenBSD 2.1
- OpenSSH: ferramenta de comunicação segura baseada em SSH. Introduzida no OpenBSD 2.6
- mg(1): editor de texto leve. Incluído no OpenBSD 2.7
- m4(1): processador de macros. Expandido e mantido desde o OpenBSD 2.7
- pf(4), pfctl(8), pflogd(8), authpf(8), ftp-proxy(8): firewall de filtragem de pacotes. Adicionado no OpenBSD 3.0
- systrace(4), systrace(1): ferramenta de monitoramento de system calls. Adicionada no OpenBSD 3.2, mas substituída por pledge(2) após o OpenBSD 5.9
- spamd(8): daemon para filtragem de spam. Introduzido no OpenBSD 3.3
- dc(1), bc(1): utilitários de calculadora. Adicionados no OpenBSD 3.5
- sensorsd(8): ferramenta de monitoramento de sensores de hardware. Incluída no OpenBSD 3.5
- pkg_add(1): utilitário de gerenciamento de pacotes. Introduzido no OpenBSD 3.5
- carp(4): protocolo de interface de rede para failover. Adicionado no OpenBSD 3.5
- OpenBGPD: daemon de roteamento BGP. Introduzido no OpenBSD 3.5
- dhclient(8), dhcpd(8): cliente e servidor DHCP. Adicionados entre o OpenBSD 3.5 e 3.6
- hotplugd(8): daemon de tratamento de eventos hotplug. Adicionado no OpenBSD 3.6
- OpenNTPD: daemon NTP (Network Time Protocol). Adicionado no OpenBSD 3.6
- dpb(1): sistema distribuído de build de pacotes. Introduzido no OpenBSD 3.6
- ospfd(8), ospfctl(8), ospf6d(8): daemons de roteamento OSPF (Open Shortest Path First). Introduzidos entre o OpenBSD 3.7 e 4.2
- ifstated(8): ferramenta de gerenciamento de estado de interface. Adicionada no OpenBSD 3.8
- bioctl(8): ferramenta de gerenciamento de dispositivos de bloco e RAID. Incluída no OpenBSD 3.8
- hostapd(8): ferramenta de gerenciamento de ponto de acesso sem fio. Introduzida no OpenBSD 3.8
- watchdogd(8): watchdog timer para garantir a estabilidade do sistema. Adicionado no OpenBSD 3.8
- sdiff(1): utilitário de comparação de arquivos. Introduzido no OpenBSD 3.9
- dvmrpd(8), dvmrpctl(8): suporte a DVMRP (Distance Vector Multicast Routing Protocol). Adicionado no OpenBSD 4.0
- ripd(8), ripctl(8): suporte a RIP (Routing Information Protocol). Incluído no OpenBSD 4.1
- pkg-config(1): ferramenta de configuração de pacotes. Introduzida no OpenBSD 4.1
- relayd(8), relayctl(8): ferramentas de relay de tráfego de rede. Adicionadas no OpenBSD 4.1
- cwm(1): gerenciador de janelas leve. Adicionado no OpenBSD 4.2
- libtool(1): ferramenta de automação de build de bibliotecas. Incluída no OpenBSD 4.3
- snmpd(8): daemon SNMP (Simple Network Management Protocol). Adicionado no OpenBSD 4.3
- sysmerge(8): ferramenta de mesclagem de arquivos de configuração do sistema. Adicionada no OpenBSD 4.4
- ypldap(8): servidor YP baseado em LDAP. Incluído no OpenBSD 4.4
- OpenSMTPD: servidor SMTP (Simple Mail Transfer Protocol). Introduzido no OpenBSD 4.6
- tmux(1): multiplexador de terminal. Incluído no OpenBSD 4.6
- ldpd(8), ldpctl(8): suporte ao protocolo de distribuição de rótulos (LDP). Adicionado no OpenBSD 4.6
- mandoc(1): ferramenta de documentação de páginas de manual. Introduzida no OpenBSD 4.8
- ldapd(8), ldapctl(8): servidor LDAP (Lightweight Directory Access Protocol). Adicionado no OpenBSD 4.8
- OpenIKED: implementação do protocolo IKE (Internet Key Exchange). Introduzida no OpenBSD 4.8
- iscsid(8), iscsictl(8): daemons iSCSI. Incluídos no OpenBSD 4.9
- rc.d(8), rc.subr(8): gerenciamento de scripts de inicialização do sistema. Adicionado no OpenBSD 4.9
- npppd(8), npppctl(8): daemons PPP (Point-to-Point Protocol). Adicionados no OpenBSD 5.3
- ldomd(8), ldomctl(8): ferramentas de gerenciamento de LDOM (Logical Domains). Incluídas no OpenBSD 5.3
- sndiod(8): servidor de áudio. Introduzido no OpenBSD 5.3
- cu(1): utilitário de comunicação serial. Adicionado no OpenBSD 5.4
- slowcgi(8): ferramenta para tratar requisições HTTP lentas. Incluída no OpenBSD 5.4
- signify(1): ferramenta para assinatura e verificação de arquivos. Adicionada no OpenBSD 5.5
- LibreSSL: projeto derivado do OpenSSL para reforçar a segurança. Lançado pela primeira vez no OpenBSD 5.6
- httpd(8): servidor web leve. Incluído no OpenBSD 5.6
- rcctl(8): utilitário de gerenciamento de serviços rc.d. Adicionado no OpenBSD 5.7
- doas(1): utilitário simples de elevação de privilégios. Introduzido no OpenBSD 5.8
- radiusd(8): implementação de servidor RADIUS. Adicionada no OpenBSD 5.8
- eigrpd(8), eigrpctl(8): suporte a EIGRP (Enhanced Interior Gateway Routing Protocol). Incluído no OpenBSD 5.9
- vmm(4), vmd(8), vmctl(8): sistema de gerenciamento de máquinas virtuais. Adicionado no OpenBSD 5.9
- acme-client(1): cliente para emissão de certificados usando o protocolo ACME. Introduzido no OpenBSD 6.1
- syspatch(8): ferramenta de gerenciamento de patches de segurança. Adicionada no OpenBSD 6.1
- xenodm(1): versão limpa derivada do XDM. Incluída no OpenBSD 6.1
- unwind(8): resolvedor DNS local. Introduzido no OpenBSD 6.5
- sysupgrade(8): ferramenta de upgrade automático do sistema. Adicionada no OpenBSD 6.6
- rpki-client(8): cliente RPKI (Route Origin Validation). Introduzido no OpenBSD 6.7
- resolvd(8): ferramenta que gerencia a configuração de DNS em ambientes de rede dinâmicos. Adicionada no OpenBSD 6.9
- dhcpleased(8): cliente DHCP aprimorado. Incluído no OpenBSD 6.9
Projetos mantidos por desenvolvedores do OpenBSD fora do OpenBSD
- sudo: ferramenta que permite a administradores de sistema conceder a usuários específicos permissão para executar comandos limitados. Incluída no OpenBSD 2.7
- femail: ferramenta simples de envio de e-mail. Iniciada em 2005, e a porta para OpenBSD foi disponibilizada em 22 de setembro do mesmo ano
- midish: sequenciador e ferramenta de processamento MIDI. Iniciado em 2003, e a porta para OpenBSD foi disponibilizada em 4 de novembro de 2005
- fdm: ferramenta para filtragem e organização de e-mails. Iniciada em 2006, e a porta para OpenBSD foi disponibilizada em 18 de janeiro de 2007
- toad: ferramenta de implantação automatizada de software para OpenBSD. Iniciada em 2013, e a porta para OpenBSD foi disponibilizada em 8 de outubro do mesmo ano
- docbook2mdoc: ferramenta que converte documentos DocBook para o formato de páginas de manual mdoc. Iniciada em 2014, e a porta para OpenBSD foi disponibilizada em 3 de abril do mesmo ano
- portroach: ferramenta de rastreamento de atualizações de ports desenvolvida a partir de um fork do portscout do FreeBSD. Iniciada em 2014, e a porta para OpenBSD foi disponibilizada em 5 de setembro do mesmo ano
- cvs2gitdump: ferramenta para converter repositórios CVS em Git. Iniciada em 2012, e a porta para OpenBSD foi disponibilizada em 1º de agosto de 2016
- Game of Trees: sistema de controle de versão que pode substituir o Git. Iniciado em 2017, e a porta para OpenBSD foi disponibilizada em 9 de agosto de 2019
1 comentários
Comentários do Hacker News
A fundação OpenBSD arrecadou cerca de US$ 380 mil
John Ioannidis faleceu há algumas semanas, e quase ninguém percebeu
Além do design de
privdrop/privsepdo OpenBSD e da adoção depledge(2)/unveil(2), trabalhos recentes de mitigação comomimmutablenão estão recebendo atençãoNa versão OpenBSD 5.3, a memória de dados aleatórios foi implementada por Matthew Dempsky
O AmigaOS usava executáveis independentes de posição (PIE) e ASLR em 1985
Expressam surpresa por
pledge/unveilnão terem sido apresentados com mais destaquePerguntam se o OpenBSD implementou o ISO C11
_Thread_localQuestionam por que a página do OpenBSD usa apenas HTML básico, sem estilização nem CSS
Recomendam também outro ótimo material: <a href="https://why-openbsd.rocks/" rel="nofollow">https://why-openbsd.rocks/</a>