10 puntos por GN⁺ 2025-02-23 | 1 comentarios | Compartir por WhatsApp

El proyecto OpenBSD desarrolla y mantiene diversos programas e ideas. A continuación, una organización aproximada según el orden de incorporación

Conceptos (Concepts)

  • IPSec(4): OpenBSD fue el primer sistema operativo Free en ofrecer una pila IPSec. Incorporado el 20 de febrero de 1997
  • INET6(4): Integración completa de IPv6 en OpenBSD 2.7. El desarrollo comenzó el 6 de enero de 1999, y para el primer hackathon del 6 de junio de ese mismo año ya estaba en un estado de funcionamiento casi completo
  • Separación de privilegios (Privilege Separation): Implementada por primera vez en OpenSSH en marzo de 2002. Después se aplicó a varios programas como bgpd(8), dhclient(8), smtpd(8) y tmux(1)
  • Revocación de privilegios (Privilege Revocation): Aplicación de un método para reducir privilegios mientras se conservan ciertos recursos. Ej.: ping(8), traceroute(8)
  • Protector de pila (Stack Protector): Basado en "propolice", desarrollado desde 2001. Activado por defecto en OpenBSD 3.3
  • W^X (Write XOR Execute): Aplicado por primera vez en OpenBSD 3.3. Desde OpenBSD 6.0 se impone estrictamente por defecto
  • Protección de GOT y PLT: En OpenBSD 3.3 se mejoró ld.so para proteger la GOT (Global Offset Table) y la PLT (Procedure Linkage Table)
  • ASLR (Address Space Layout Randomization): OpenBSD 3.4 fue el primero en activarlo por defecto
  • Análisis e inspección de gcc-local(1): Introducido por primera vez en OpenBSD 3.4
  • Refuerzo de seguridad en malloc(3): Se aplican aleatorización y liberación diferida al asignar memoria. Reimplementado en OpenBSD 4.4
  • Ejecutables independientes de posición (PIE): Activados por defecto por primera vez en OpenBSD 5.3. En 7 plataformas de hardware
  • Inicialización de memoria basada en aleatoriedad: En OpenBSD 5.3 se agregó la sección ELF .openbsd.randomdata
  • Protector de pila por objeto compartido: En OpenBSD 5.3 se aplica una cookie individual del protector de pila a cada objeto compartido
  • Static-PIE: Soporte para binarios estáticos independientes de posición en /bin, /sbin y RAM disk. Introducido en OpenBSD 5.7
  • Mitigación de ataques SROP: Activada por defecto en OpenBSD 6.0
  • Aleatorización del orden de carga de bibliotecas: Activada por defecto en OpenBSD 6.0 y 6.2
  • Mejora de lazy-binding para la seguridad W^X en entornos multihilo: Introducida en OpenBSD 5.9
  • Refuerzo del diseño de memoria: Aplicado a todos los programas y bibliotecas en OpenBSD 6.1
  • Uso del método fork+exec: Refuerza la protección del espacio de direcciones en programas con separación de privilegios
  • trapsleds: Aplicación de una técnica de conversión NOP para mitigar ataques ROP (Return-Oriented Programming)
  • Reenlazado del kernel al arrancar: Aleatoriza el diseño interno del kernel en cada arranque
  • Refuerzo de secuencias de instrucciones en i386/amd64: Mejoras para dificultar ataques ROP
  • Adición de la opción MAP_STACK: Evita que en ataques ROP se abuse de memoria distinta de la pila
  • RETGUARD: Mecanismo de protección más fuerte que el protector de pila tradicional, introducido desde OpenBSD 6.4
  • Adición de la opción MAP_CONCEAL: Evita que información sensible se filtre en core dumps
  • Bloqueo de llamadas al sistema desde memoria PROT_WRITE: Introducido en OpenBSD 6.5
  • Fijación de la ubicación de las llamadas al sistema: Restringe las llamadas al sistema para que solo puedan ejecutarse desde ubicaciones específicas
  • Refuerzo de la protección del espacio de direcciones: Restringe cambios de memoria mediante mmap(2), mprotect(2), etc.
  • Reenlazado de sshd al arrancar: Introducido en OpenBSD 7.2
  • Soporte para código no legible (xonly): Restringe la lectura de memoria ejecutable
  • Protección de llamadas al sistema pinsyscalls(2): Protege registrando de antemano las ubicaciones de llamadas al sistema
  • Protección de destinos de salto indirecto (BTI, IBT): Aplicación de funciones de seguridad basadas en hardware
  • Adición de la función -fret-clean: Evita que los valores de retorno permanezcan en la pila y bloquea fugas de información. Actualmente solo se aplica en amd64

Funciones (Functions)

  • issetugid(2): Función introducida en OpenBSD 2.0 que permite verificar si un proceso tiene un user ID o group ID establecido durante la ejecución
  • arc4random(3): Función de generación de números aleatorios, agregada en OpenBSD 2.1
  • bcrypt(3): Función para hash de contraseñas. Introducida por primera vez en OpenBSD 2.1
  • strlcpy(3), strlcat(3): Funciones para copia y concatenación segura de cadenas. Introducidas en OpenBSD 2.4
  • strtonum(3): Función para convertir cadenas en números evitando errores. Introducida en OpenBSD 3.6
  • imsg: API de mensajería usada en varios demonios. Agregada a libutil en OpenBSD 4.8
  • timingsafe_bcmp(3): Función de comparación de bytes con tiempo de ejecución constante. Introducida en OpenBSD 4.9
  • explicit_bzero(3): Función para borrar memoria de forma segura. Agregada en OpenBSD 5.5
  • ohash: Implementación de tabla hash. Incluida en libutil en OpenBSD 5.6
  • asr: Resolver DNS alternativo. Activado en OpenBSD 5.6
  • reallocarray(3): Función que evita overflows al reasignar memoria. Agregada en OpenBSD 5.6
  • getentropy(2): Función que proporciona números aleatorios criptográficamente seguros. Introducida en OpenBSD 5.6
  • sendsyslog(2): Función para enviar mensajes syslog desde el kernel. Agregada en OpenBSD 5.6
  • timingsafe_memcmp(3): Función de comparación de memoria con tiempo de ejecución constante. Introducida en OpenBSD 5.6
  • pledge(2): Función que limita system calls para mejorar la seguridad. Agregada en OpenBSD 5.9
  • getpwnam_shadow(3), getpwuid_shadow(3): Funciones para consultar datos de contraseñas shadow con fines de refuerzo de seguridad. Introducidas en OpenBSD 5.9
  • recallocarray(3): Función que rellena con 0 los datos existentes al redimensionar memoria. Agregada en OpenBSD 6.1
  • freezero(3): Función que libera memoria rellenándola con 0. Introducida en OpenBSD 6.2
  • unveil(2): Función que restringe el acceso al sistema de archivos. Agregada en OpenBSD 6.4
  • malloc_conceal(3), calloc_conceal(3): Proporcionan protección de datos sensibles durante la asignación de memoria. Agregadas en OpenBSD 6.5
  • ober: API de ASN.1 Basic Encoding Rules. Movida a libutil en OpenBSD 6.6

Programas y subsistemas (Programs and Subsystems)

  • Utilidades relacionadas con YP: ypbind(8), ypset(8), ypcat(1), ypmatch(1), ypwhich(1), además de soporte en libc. Distribuidas por primera vez en NetBSD 0.9
  • ypserv(8): Servidor YP introducido en OpenBSD 2.0
  • mopd(8): Demonio con soporte para MOP (Maintenance Operations Protocol). Agregado en OpenBSD 2.0
  • AnonCVS: Sistema diseñado para permitir acceso anónimo al repositorio de código de OpenBSD
  • aucat(1): Utilidad relacionada con el servidor de audio. Agregada en OpenBSD 2.1
  • OpenSSH: Herramienta de comunicación segura basada en SSH. Introducida en OpenBSD 2.6
  • mg(1): Editor de texto liviano. Incluido en OpenBSD 2.7
  • m4(1): Procesador de macros. Ampliado y mantenido desde OpenBSD 2.7 en adelante
  • pf(4), pfctl(8), pflogd(8), authpf(8), ftp-proxy(8): Firewall de filtrado de paquetes. Agregado en OpenBSD 3.0
  • systrace(4), systrace(1): Herramienta de monitoreo de system calls. Agregada en OpenBSD 3.2, pero sustituida por pledge(2) después de OpenBSD 5.9
  • spamd(8): Demonio para filtrado de spam. Introducido en OpenBSD 3.3
  • dc(1), bc(1): Utilidades de cálculo. Agregadas en OpenBSD 3.5
  • sensorsd(8): Herramienta de monitoreo de sensores de hardware. Incluida en OpenBSD 3.5
  • pkg_add(1): Utilidad de gestión de paquetes. Introducida en OpenBSD 3.5
  • carp(4): Protocolo de interfaz de red para failover. Agregado en OpenBSD 3.5
  • OpenBGPD: Demonio de enrutamiento BGP. Introducido en OpenBSD 3.5
  • dhclient(8), dhcpd(8): Cliente y servidor DHCP. Agregados entre OpenBSD 3.5 y 3.6
  • hotplugd(8): Demonio de manejo de eventos hotplug. Agregado en OpenBSD 3.6
  • OpenNTPD: Demonio NTP (Network Time Protocol). Agregado en OpenBSD 3.6
  • dpb(1): Sistema distribuido de construcción de paquetes. Introducido en OpenBSD 3.6
  • ospfd(8), ospfctl(8), ospf6d(8): Demonios de enrutamiento OSPF (Open Shortest Path First). Introducidos entre OpenBSD 3.7 y 4.2
  • ifstated(8): Herramienta de gestión del estado de interfaces. Agregada en OpenBSD 3.8
  • bioctl(8): Herramienta de gestión de dispositivos de bloque y RAID. Incluida en OpenBSD 3.8
  • hostapd(8): Herramienta de gestión de puntos de acceso inalámbricos. Introducida en OpenBSD 3.8
  • watchdogd(8): Temporizador de vigilancia para garantizar la estabilidad del sistema. Agregado en OpenBSD 3.8
  • sdiff(1): Utilidad de comparación de archivos. Introducida en OpenBSD 3.9
  • dvmrpd(8), dvmrpctl(8): Soporte para DVMRP (Distance Vector Multicast Routing Protocol). Agregado en OpenBSD 4.0
  • ripd(8), ripctl(8): Soporte para RIP (Routing Information Protocol). Incluido en OpenBSD 4.1
  • pkg-config(1): Herramienta de configuración de paquetes. Introducida en OpenBSD 4.1
  • relayd(8), relayctl(8): Herramientas de relay de tráfico de red. Agregadas en OpenBSD 4.1
  • cwm(1): Window manager liviano. Agregado en OpenBSD 4.2
  • libtool(1): Herramienta de automatización para construcción de bibliotecas. Incluida en OpenBSD 4.3
  • snmpd(8): Demonio SNMP (Simple Network Management Protocol). Agregado en OpenBSD 4.3
  • sysmerge(8): Herramienta para fusionar archivos de configuración del sistema. Agregada en OpenBSD 4.4
  • ypldap(8): Servidor YP basado en LDAP. Incluido en OpenBSD 4.4
  • OpenSMTPD: Servidor SMTP (Simple Mail Transfer Protocol). Introducido en OpenBSD 4.6
  • tmux(1): Multiplexor de terminal. Incluido en OpenBSD 4.6
  • ldpd(8), ldpctl(8): Soporte para Label Distribution Protocol (LDP). Agregado en OpenBSD 4.6
  • mandoc(1): Herramienta de documentación de páginas de manual. Introducida en OpenBSD 4.8
  • ldapd(8), ldapctl(8): Servidor LDAP (Lightweight Directory Access Protocol). Agregado en OpenBSD 4.8
  • OpenIKED: Implementación del protocolo IKE (Internet Key Exchange). Introducida en OpenBSD 4.8
  • iscsid(8), iscsictl(8): Demonios iSCSI. Incluidos en OpenBSD 4.9
  • rc.d(8), rc.subr(8): Gestión de scripts de inicialización del sistema. Agregada en OpenBSD 4.9
  • npppd(8), npppctl(8): Demonios PPP (Point-to-Point Protocol). Agregados en OpenBSD 5.3
  • ldomd(8), ldomctl(8): Herramientas de gestión de LDOM (Logical Domains). Incluidas en OpenBSD 5.3
  • sndiod(8): Servidor de audio. Introducido en OpenBSD 5.3
  • cu(1): Utilidad de comunicación serial. Agregada en OpenBSD 5.4
  • slowcgi(8): Herramienta para manejar solicitudes HTTP lentas. Incluida en OpenBSD 5.4
  • signify(1): Herramienta para firmar y verificar archivos. Agregada en OpenBSD 5.5
  • LibreSSL: Proyecto derivado de OpenSSL para reforzar la seguridad. Lanzado por primera vez en OpenBSD 5.6
  • httpd(8): Servidor web liviano. Incluido en OpenBSD 5.6
  • rcctl(8): Utilidad de gestión de servicios rc.d. Agregada en OpenBSD 5.7
  • doas(1): Utilidad simple de elevación de privilegios. Introducida en OpenBSD 5.8
  • radiusd(8): Implementación de servidor RADIUS. Agregada en OpenBSD 5.8
  • eigrpd(8), eigrpctl(8): Soporte para EIGRP (Enhanced Interior Gateway Routing Protocol). Incluido en OpenBSD 5.9
  • vmm(4), vmd(8), vmctl(8): Sistema de gestión de máquinas virtuales. Agregado en OpenBSD 5.9
  • acme-client(1): Cliente de emisión de certificados usando el protocolo ACME. Introducido en OpenBSD 6.1
  • syspatch(8): Herramienta de gestión de parches de seguridad. Agregada en OpenBSD 6.1
  • xenodm(1): Versión depurada derivada de XDM. Incluida en OpenBSD 6.1
  • unwind(8): Resolver DNS local. Introducido en OpenBSD 6.5
  • sysupgrade(8): Herramienta de actualización automática del sistema. Agregada en OpenBSD 6.6
  • rpki-client(8): Cliente RPKI (Route Origin Validation). Introducido en OpenBSD 6.7
  • resolvd(8): Herramienta para gestionar configuración DNS en entornos de red dinámicos. Agregada en OpenBSD 6.9
  • dhcpleased(8): Cliente DHCP mejorado. Incluido en OpenBSD 6.9

Proyectos mantenidos por desarrolladores de OpenBSD fuera de OpenBSD

  • sudo: Herramienta que permite a administradores del sistema otorgar a ciertos usuarios permisos limitados para ejecutar comandos. Incluida en OpenBSD 2.7
  • femail: Herramienta simple de envío de correo. Comenzó en 2005, y el port de OpenBSD se ofreció el 22 de septiembre de ese mismo año
  • midish: Secuenciador y herramienta de procesamiento MIDI. Comenzó en 2003, y el port de OpenBSD se ofreció el 4 de noviembre de 2005
  • fdm: Herramienta de filtrado y organización de correo. Comenzó en 2006, y el port de OpenBSD se ofreció el 18 de enero de 2007
  • toad: Herramienta de despliegue automático de software para OpenBSD. Comenzó en 2013, y el port de OpenBSD se ofreció el 8 de octubre de ese mismo año
  • docbook2mdoc: Herramienta para convertir documentos DocBook al formato de páginas de manual mdoc. Comenzó en 2014, y el port de OpenBSD se ofreció el 3 de abril de ese mismo año
  • portroach: Herramienta de seguimiento de actualizaciones de ports desarrollada a partir de un fork de portscout de FreeBSD. Comenzó en 2014, y el port de OpenBSD se ofreció el 5 de septiembre de ese mismo año
  • cvs2gitdump: Herramienta para convertir repositorios CVS a Git. Comenzó en 2012, y el port de OpenBSD se ofreció el 1 de agosto de 2016
  • Game of Trees: Sistema de control de versiones que puede sustituir a Git. Comenzó en 2017, y el port de OpenBSD se ofreció el 9 de agosto de 2019

1 comentarios

 
GN⁺ 2025-02-23
Comentarios de Hacker News
  • La fundación OpenBSD recaudó unos 380 mil dólares

    • Considerando que creó OpenSSH y que todas las empresas Fortune 500 lo usan, creen que debería recaudar entre 1 y 2 millones de dólares al año
    • Ya es momento de que esas empresas contribuyan
    • Los fabricantes de hardware también deberían publicar el código fuente, y se menciona directamente a Nvidia
  • John Ioannidis falleció hace unas semanas, y casi nadie se dio cuenta

    • También es conocido por haber sentado las bases de Mobile IP (que hizo posible el funcionamiento de IP en teléfonos móviles)
  • Además del diseño privdrop/privsep de OpenBSD y la adopción de pledge(2)/unveil(2), trabajos recientes de mitigación como mimmutable no están recibiendo atención

    • En OpenBSD, el espacio de direcciones estático de la mayoría de los programas ahora se vuelve inmutable automáticamente
    • En máquinas modernas Intel/AMD y ARM, la memoria de solo ejecución y BTI/IBT están habilitados por defecto
    • También incluye trabajo de desarrollo en ports para preparar al ecosistema de software más amplio
  • En OpenBSD 5.3, Matthew Dempsky implementó memoria de datos aleatorizados

    • Un caso de uso de esta función es RETGUARD
    • RETGUARD reemplaza al stack protector y usa cookies aleatorias por función para verificar de forma consistente la dirección de retorno de la pila
  • AmigaOS usó ejecutables independientes de la posición (PIE) y ASLR en 1985

    • Amiga no tenía MMU y contaba con poca memoria, por lo que todo lo cargado tenía que colocarse en la RAM disponible
    • Las secciones individuales podían colocarse en distintas ubicaciones, y el compilador generaba muchas secciones para ello
  • Expresan sorpresa de que pledge/unveil no se haya presentado de forma más destacada

  • Se preguntan si OpenBSD implementó ISO C11 _Thread_local

    • Ese era el mayor inconveniente al portar software a OpenBSD
    • OpenBSD era el único sistema operativo importante que no soportaba almacenamiento local de hilos nativo
  • Cuestionan por qué la página de OpenBSD usa solo HTML básico y no usa estilos ni CSS

    • La tipografía es importante para la legibilidad, y como mínimo debería haber una altura de línea adecuada y limitar la longitud a unas 60 letras por línea
    • Se preguntan si OpenBSD no considera seriamente a los posibles usuarios
    • La experiencia de usuario importa, y la legibilidad de la documentación también forma parte de la UX
  • Recomiendan <a href="https://why-openbsd.rocks/" rel="nofollow">https://why-openbsd.rocks/</a>; como otro gran recurso