De ontwikkelaars van de cryptografische bibliotheek wolfSSL ontwikkelen de TCP/IP-stack wolfIP, geoptimaliseerd voor gebruik op ingebedde apparaten met beperkte middelen, evenals voor systemen die in realtime functioneren en oplossingen vereisen die een hoge mate van betrouwbaarheid vereisen (Safety-Critical). Voor voorspelbaar middelenverbruik worden in wolfIP geen dynamische geheugentoewijzingen gebruikt - alle buffers en sockettabellen hebben een vaste grootte en worden tijdens de compilatie ingesteld. De projectcode is geschreven in C en wordt verspreid onder de GPLv3-licentie.
Het project kan worden gebruikt als een TCP/IP-stack die in de gebruikersruimte draait, ter vervanging van de netstack in Linux, FreeBSD en macOS, en is ook geschikt voor gebruik in ingebedde systemen die zijn gebaseerd op FreeRTOS, SafeRTOS, Zephyr, Azure RTOS ThreadX, NuttX, RTEMS, VxWorks en QNX. Bovendien kunnen op basis van wolfIP zelfvoorzienende netwerktoepassingen worden gemaakt die draaien op de hardware (bare-metal). In combinatie met de wolfSSL-bibliotheek is er ondersteuning voor TLS 1.3, wat het mogelijk maakt om compacte ingebedde systemen te creƫren die HTTPS ondersteunen.
Belangrijkste kenmerken van wolfIP:
- Gebruik van voorgeallocateerde buffers in statisch geheugen bij de verwerking van netwerkpakketten. Aanroepen van malloc en free worden niet gebruikt.
- De mogelijkheid om in plaats van de standaard systeemnetwerkstacks te gebruiken op POSIX-systemen.
- Ondersteuning voor BSD-sockets in zowel niet-blokkerende als blokkerende modus.
- Compacte grootte (4200 regels code, vier keer kleiner dan de TCP/IP-stack lwIP).
- Ondersteuning voor STM32 Ethernet-netwerkinterfaces.
- De mogelijkheid om de TAP-netwerkinterface te gebruiken voor testen zonder hardware.
- Ontwikkeling met het oog op systemen met hogere beveiligingseisen: deterministische en reproduceerbare configuratie; implementatiemodel dat veiligheid waarborgt (Secure-by-default); isolatie tussen componenten. Ondersteuning voor veilige versie-updates; langdurige ondersteuning.
- Rekening houden met de eisen van hoogbetrouwbare systemen: geen dynamische toewijzing van middelen; vaste geheugenpools; gecontroleerd middelenverbruik; voorspelbaar gedrag; vereenvoudigde architectuur; ondersteuning voor de generatie van artefacten voor verificatie.
- Implementatie van IPv4, UDP, TCP, IPSEC, ARP, ICMP, DHCP-client, DNS-client en HTTP/HTTPS-server. Ondersteuning voor TCP-implementatie RFC 7323 (TCP-timestamps, RTT-metingen, PAWS, venstervergroting), MSS (Maximaal segmentformaat), RTO (Hertransmissietime-out) en SACK (Selectieve bevestiging). Verschillende congestiecontrole-algoritmen.
Een beperking van wolfIP is dat het alleen als eindpunt kan worden gebruikt dat verbindingen kan accepteren en tot stand kan brengen, maar geen verkeersroutering tussen netwerkinterfaces ondersteunt.
Daarnaast kan worden opgemerkt dat een medewerker van Red Hat actief werkt aan een vergelijkbare TCP/IP-stack passt, die in de gebruikersruimte werkt en geen dynamische geheugentoewijzing gebruikt. Het passt-project ontwikkelt zich om een communicatielijn te organiseren tussen de hostomgeving en gastsystemen in QEMU als een veiligere vervanging voor libslirp. De code van passt is geschreven in C, bestaat uit ongeveer 5000 regels en wordt verspreid onder de GPLv2+-licentie.
Kenmerken van passt zijn onder andere: ondersteuning voor IPv6 naast IPv4, optimalisaties op basis van AVX2-instructies, bescherming tegen synflood, ingebouwde ondersteuning voor QEMU, libvirt en Podman, pakketten voor alle populaire distributies, ARP-proxyservice, minimalistische DHCPD-, DHCPv6- en NDP-servers, seccomp-profiel voor het blokkeren van alle ongebruikte systeemaanroepen, NAT-ondersteuning, mogelijkheid om als transparante vervanging voor slirp4netns te worden gebruikt.
Bron: opennet.ru
