10 pontos por GN⁺ 2025-02-23 | 1 comentários | Compartilhar no WhatsApp

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.so foi 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.randomdata no 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

 
GN⁺ 2025-02-23
Comentários do Hacker News
  • A fundação OpenBSD arrecadou cerca de US$ 380 mil

    • Considerando que criou o OpenSSH e que todas as empresas da Fortune 500 o utilizam, acham que deveria arrecadar entre US$ 1 e 2 milhões por ano
    • Já passou da hora de essas empresas contribuírem
    • Os fabricantes de hardware também deveriam abrir o código-fonte, com menção direta à Nvidia
  • John Ioannidis faleceu há algumas semanas, e quase ninguém percebeu

    • Ele também é conhecido por ter criado a base do Mobile IP (que tornou possível o funcionamento de IP em celulares)
  • Além do design de privdrop/privsep do OpenBSD e da adoção de pledge(2)/unveil(2), trabalhos recentes de mitigação como mimmutable não estão recebendo atenção

    • No OpenBSD, o espaço de endereçamento estático da maioria dos programas passou a se tornar imutável automaticamente
    • Em máquinas Intel/AMD e ARM modernas, memória somente para execução e BTI/IBT estão ativados por padrão
    • Isso também inclui o trabalho de desenvolvimento de ports para preparar o ecossistema de software mais amplo
  • Na versão OpenBSD 5.3, a memória de dados aleatórios foi implementada por Matthew Dempsky

    • Um caso de uso desse recurso é o RETGUARD
    • O RETGUARD substitui o stack protector e usa cookies aleatórios por função para verificar de forma consistente o endereço de retorno na pilha
  • O AmigaOS usava executáveis independentes de posição (PIE) e ASLR em 1985

    • Como o Amiga não tinha MMU e tinha pouca memória, tudo o que era carregado precisava ser colocado na RAM disponível
    • Seções individuais podiam ser colocadas em posições diferentes, e o compilador gerava muitas seções para isso
  • Expressam surpresa por pledge/unveil não terem sido apresentados com mais destaque

  • Perguntam se o OpenBSD implementou o ISO C11 _Thread_local

    • Esse era o maior incômodo ao portar software para OpenBSD
    • O OpenBSD era o único grande sistema operacional sem suporte nativo a armazenamento local de thread
  • Questionam por que a página do OpenBSD usa apenas HTML básico, sem estilização nem CSS

    • A tipografia é importante para a legibilidade, e no mínimo deveria haver altura de linha adequada e um limite de cerca de 60 caracteres por linha
    • Perguntam se o OpenBSD não leva usuários em potencial a sério
    • A experiência do usuário importa, e a legibilidade da documentação também faz parte da UX
  • Recomendam também outro ótimo material: <a href="https://why-openbsd.rocks/" rel="nofollow">https://why-openbsd.rocks/</a>;