{"id":29880,"date":"2019-10-31T21:32:27","date_gmt":"2019-10-31T18:32:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/milliony-binarnikov-spustya-kak-ukreplyalsya-linux\/"},"modified":"2019-10-31T21:32:27","modified_gmt":"2019-10-31T18:32:27","slug":"milliony-binarnikov-spustya-kak-ukreplyalsya-linux","status":"publish","type":"post","link":"https:\/\/prohoster.info\/nl\/blog\/milliony-binarnikov-spustya-kak-ukreplyalsya-linux","title":{"rendered":"Miljoenen binaire bestanden later. Hoe Linux is versterkt","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Miljoenen binaire bestanden later. Hoe Linux is versterkt\" src=\"\/wp-content\/uploads\/2019\/03\/bf51e5698530d4a6a44ff97f542a2a87.png\" style=\"display:block;margin: 0 auto;\" \/><b>TL;DR<\/b>. In dit artikel onderzoeken we de hardening-schemas die standaard werken in vijf populaire Linux-distributies. Voor elk hebben we de standaard kernelconfiguratie genomen, alle pakketten geladen en de beschermingssyndroms in geneste binaire bestanden geanalyseerd. De distributies die worden behandeld zijn OpenSUSE 12.4, Debian 9, CentOS, RHEL 6.10 en 7, evenals Ubuntu 14.04, 12.04 en 18.04 LTS. <\/p>\n<p>De resultaten bevestigen dat zelfs basisvoorzieningen zoals stack canaries en position-independent code nog niet door iedereen worden gebruikt. De situatie is nog erger met compilers als het gaat om bescherming tegen kwetsbaarheden zoals stack clash, die in januari in de schijnwerpers kwam na de publicatie <noindex><a rel=\"nofollow\" href=\"https:\/\/capsule8.com\/blog\/exploiting-systemd-journald-part-1\/\">van informatie over kwetsbaarheden in systemd<\/a><\/noindex>. Maar alles is niet zo hopeloos. In een aanzienlijk aantal binaire bestanden zijn basisbeschermingsmethoden ge\u00efmplementeerd, en hun aantal groeit van versie tot versie. <\/p>\n<p>De controle toonde aan dat het grootste aantal beschermingsmethoden is ge\u00efmplementeerd in Ubuntu 18.04 op het niveau van het besturingssysteem en applicaties, gevolgd door Debian 9. Aan de andere kant zijn ook in OpenSUSE 12.4, CentOS 7 en RHEL 7 basisbeschermingsschema's ge\u00efmplementeerd, en de bescherming tegen stack clashes wordt nog breder toegepast met een veel dichter pakketaanbod als standaard.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1>Inleiding<\/h1>\n<p>\nHet is moeilijk om software van hoge kwaliteit te waarborgen. Ondanks het enorme aantal geavanceerde tools voor statische code-analyse en dynamische analyse tijdens runtime, evenals aanzienlijke vooruitgang in de ontwikkeling van compilers en programmeertalen, kampt moderne software nog steeds met kwetsbaarheden die voortdurend door aanvallers worden uitgebuiten. De situatie is nog erger in ecosystemen die verouderde code bevatten. In dergelijke gevallen worden we niet alleen geconfronteerd met het eeuwige probleem van het zoeken naar mogelijk uitbuitbare fouten, maar zijn we ook beperkt door strikte kaders van achterwaartse compatibiliteit die vaak vereisen dat we beperkte, en nog erger, kwetsbare of glitchy code behouden.<\/p>\n<p>Hier komen hardening methoden van programma's in het spel. Sommige soorten fouten kunnen we niet voorkomen, maar we kunnen het leven van de aanvaller moeilijker maken en gedeeltelijk het probleem oplossen door te voorkomen of te hinderen <i>uitbuiting<\/i> deze fouten. Deze bescherming wordt in alle moderne besturingssystemen gebruikt, maar de methoden verschillen sterk in complexiteit, effectiviteit en prestaties: van stack canaries en <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Address_space_layout_randomization\">ASLR<\/a><\/noindex> tot volledige bescherming <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Control-flow_integrity\">CFI<\/a><\/noindex> en <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Return-oriented_programming\">ROP<\/a><\/noindex>. In dit artikel bekijken we welke beschermingsmethoden worden toegepast in de meest populaire Linux-distributies in de standaardconfiguratie, en we onderzoeken de eigenschappen van de binaire bestanden die worden verspreid via de pakketbeheersystemen van elke distributie.<\/p>\n<h3>CVE en beveiliging<\/h3>\n<p>\nWe hebben allemaal artikelen gezien met titels zoals 'De kwetsbaarste applicaties van het jaar' of 'De kwetsbaarste besturingssystemen'. Gewoonlijk geven ze statistieken over het totale aantal meldingen van kwetsbaarheden, type <noindex><a rel=\"nofollow\" href=\"https:\/\/cve.mitre.org\/\">CVE (Common Vulnerability and Exposures)<\/a><\/noindex>, verkregen uit <noindex><a rel=\"nofollow\" href=\"https:\/\/nvd.nist.gov\/\">de Nationale Kwetsbaarheidsdatabase (NVD)<\/a><\/noindex> van <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nist.gov\/\">NIST<\/a><\/noindex> en andere bronnen. Vervolgens worden deze applicaties of besturingssystemen gerangschikt op basis van het aantal CVE. Helaas, hoewel CVE zeer nuttig zijn voor het volgen van problemen en het informeren van leveranciers en gebruikers, zeggen ze weinig over de werkelijke veiligheid van software.<\/p>\n<p>Als voorbeeld bekijken we het totale aantal CVE in de afgelopen vier jaar voor de Linux-kernel en de vijf meest populaire serverdistributies, namelijk Ubuntu, Debian, Red Hat Enterprise Linux en OpenSUSE.<\/p>\n<p><img decoding=\"async\" alt=\"Miljoenen binaire bestanden later. Hoe Linux is versterkt\" src=\"\/wp-content\/uploads\/2019\/03\/16d74634f010e340aedbce441513e3f8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Figuur 1<\/i><\/p>\n<p>Wat vertelt deze grafiek ons? Betekent een groter aantal CVE dat \u00e9\u00e9n distributie kwetsbaarder is dan de andere? Het antwoord is nee. Bijvoorbeeld, in dit artikel zult u zien dat Debian striktere beschermingsmechanismen heeft in vergelijking met bijvoorbeeld OpenSUSE of RedHat Linux, en toch heeft Debian meer CVE. Dit betekent echter niet noodzakelijk dat er sprake is van verminderde beveiliging: zelfs de aanwezigheid van CVE zegt niets over de exploiteerbaarheid van een kwetsbaarheid. <i>exploiteerbaar<\/i>. Ernstscores geven een idee van hoe <i>waarschijnlijk<\/i> het gebruik van een kwetsbaarheid is, maar uiteindelijk hangt de exploiteerbaarheid in belangrijke mate af van de bescherming die aanwezig is in de getroffen systemen, evenals van de middelen en mogelijkheden van aanvallers. Bovendien zegt het ontbreken van CVE-meldingen niets over andere <i>niet-geregistreerde of onbekende kwetsbaarheden<\/i> kwetsbaarheden. Het verschil in CVE kan worden verklaard door andere factoren dan de kwaliteit van de software, zoals de middelen die zijn toegewezen voor testen of de omvang van de gebruikersbasis. In ons voorbeeld kan het hogere aantal CVE voor Debian eenvoudigweg aangeven dat Debian meer softwarepakketten levert. <\/p>\n<p>Natuurlijk biedt het CVE-systeem nuttige informatie die helpt bij het cre\u00ebren van passende beveiligingen. Hoe beter we de oorzaken van softwarefalen begrijpen, hoe gemakkelijker het is om mogelijke exploitatiemethoden te identificeren en geschikte mechanismen te ontwikkelen. <i>detectie en respons<\/i>. Figuur 2 toont de categorie\u00ebn van kwetsbaarheden voor alle distributies in de afgelopen vier jaar (<noindex><a rel=\"nofollow\" href=\"https:\/\/www.cvedetails.com\/top-50-products.php\">bron<\/a><\/noindex>). Het is meteen duidelijk dat de meeste CVE in de volgende categorie\u00ebn vallen: denial of service (DoS), code-executie, buffer overflow, geheugenbeschadiging, informatielek (exfiltratie) en privilege-escalatie. Hoewel veel CVE meerdere keren in verschillende categorie\u00ebn zijn geteld, blijven dezelfde problemen in grote lijnen van jaar tot jaar bestaan. In het volgende deel van het artikel zullen we het gebruik van verschillende beschermingsschema's beoordelen ter voorkoming van de exploitatie van de genoemde kwetsbaarheden.<\/p>\n<p><img decoding=\"async\" alt=\"Miljoenen binaire bestanden later. Hoe Linux is versterkt\" src=\"\/wp-content\/uploads\/2019\/03\/45948bc64673540cfb3e1774c3247634.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Figuur 2<\/i><\/p>\n<h3>Taken<\/h3>\n<p>\nIn dit artikel willen we de volgende vragen beantwoorden:<\/p>\n<ul>\n<li>Wat is de veiligheid van verschillende Linux-distributies? Welke beschermingsmechanismen zijn er in de kernel en applicaties in de gebruikersruimte?\n<\/li>\n<li>Hoe is de acceptatie van beschermingsmechanismen voor verschillende distributies in de loop van de tijd veranderd?\n<\/li>\n<li>Wat zijn de gemiddelde afhankelijkheden van pakketten en bibliotheken voor elke distributie?\n<\/li>\n<li>Welke beveiligingen zijn ge\u00efmplementeerd voor elke binaire?<\/li>\n<\/ul>\n<p><\/p>\n<h3>Keuze van distributies<\/h3>\n<p>\nHet blijkt moeilijk te zijn om exacte statistieken over installaties van distributies te vinden, omdat in de meeste gevallen het aantal downloads geen betrouwbare indicatie is van het aantal echte installaties. Niettemin maken Unix-opties het merendeel uit van server systemen (69,2% op webservers, volgens <noindex><a rel=\"nofollow\" href=\"https:\/\/w3techs.com\/technologies\/overview\/operating_system\/all\">statistieken<\/a><\/noindex> W3techs en andere bronnen), en hun aandeel neemt gestaag toe. Voor ons onderzoek hebben we ons dan ook gericht op de distributies die direct beschikbaar zijn op het platform <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/\">, Google Cloud<\/a><\/noindex>. We hebben in het bijzonder de volgende besturingssystemen gekozen:<\/p>\n<p>Distributie\/versie<br \/>\nKernel<br \/>\nBuild<\/p>\n<p>OpenSUSE 12.4<br \/>\n4.12.14-95.3-default<br \/>\n#1 SMP Wed Dec 5 06:00:48 UTC 2018 (63a8d29)<\/p>\n<p>Debian 9 (stretch)<br \/>\n4.9.0-8-amd64<br \/>\n#1 SMP Debian 4.9.130-2 (2018-10-27)<\/p>\n<p>CentOS 6.10<br \/>\n2.6.32-754.10.1.el6.x86_64<br \/>\n#1 SMP Tue Jan 15 17:07:28 UTC 2019<\/p>\n<p>CentOS 7<br \/>\n3.10.0-957.5.1.el7.x86_64<br \/>\n#1 SMP Fri Feb 1 14:54:57 UTC 2019<\/p>\n<p>Red Hat Enterprise Linux Server 6.10 (Santiago)<br \/>\n2.6.32-754.9.1.el6.x86_64<br \/>\n#1 SMP Wed Nov 21 15:08:21 EST 2018<\/p>\n<p>Red Hat Enterprise Linux Server 7.6 (Maipo)<br \/>\n3.10.0-957.1.3.el7.x86_64<br \/>\n#1 SMP Thu Nov 15 17:36:42 UTC 2018<\/p>\n<p>Ubuntu 14.04 (Trusty Tahr)<br \/>\n4.4.0\u2013140-generic<br \/>\n <br \/>\n#166~14.04.1-Ubuntu SMP Sat Nov 17 01:52:43 UTC 20\u2026<\/p>\n<p>Ubuntu 16.04 (Xenial Xerus)<br \/>\n4.15.0\u20131026-gcp<br \/>\n#27~16.04.1-Ubuntu SMP Fri Dec 7 09:59:47 UTC 2018<\/p>\n<p>Ubuntu 18.04 (Bionic Beaver)<br \/>\n4.15.0\u20131026-gcp<br \/>\n#27-Ubuntu SMP Thu Dec 6 18:27:01 UTC 2018<\/p>\n<p><i>Tabel 1<\/i> <\/p>\n<h1>Analyse<\/h1>\n<p>\nLaten we de standaard kernelconfiguratie en de eigenschappen van de pakketten bekijken die uit de doos beschikbaar zijn via de pakketbeheerder van elke distributie. Zo kijken we alleen naar de pakketten uit de standaardspiegels van elke distributie, waarbij we pakketten uit ongewenste repositories (zoals de 'testing'-spiegels in Debian) en externe pakketten (zoals Nvidia-pakketten van de standaardspiegels) negeren. Bovendien bekijken we geen aangepaste kernelcompilaties of configuraties met verbeterde beveiliging.<\/p>\n<h3>Analyse van de kernelconfiguratie<\/h3>\n<p>\nWe hebben een analyse-script toegepast op basis van <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/a13xp0p0v\/kconfig-hardened-check\">de vrije checker kconfig<\/a><\/noindex>. We bekijken de out-of-the-box beveiligingsinstellingen van de genoemde distributies en vergelijken deze met de lijst van <noindex><a rel=\"nofollow\" href=\"http:\/\/kernsec.org\/wiki\/index.php\/Kernel_Self_Protection_Project\/Recommended_Settings\">Het Kernel Self-Protection Project<\/a><\/noindex> (KSPP). Voor elke configuratieparameter beschrijft tabel 2 de gewenste instelling: een vinkje staat voor de distributies die voldoen aan de aanbevelingen van KSSP (zie uitleg van termen <noindex><a rel=\"nofollow\" href=\"https:\/\/capsule8.com\/blog\/kernel-configuration-glossary\/\">hier<\/a><\/noindex>; in toekomstige artikelen zullen we uitleggen hoe veel van deze beveiligingsmethoden zijn ontstaan en hoe men het systeem kan compromitteren zonder deze).<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/dx\/oh\/o0\/dxoho0z-lifjcybajszqb-aiirq.png\"><img decoding=\"async\" alt=\"Miljoenen binaire bestanden later. Hoe Linux is versterkt\" src=\"\/wp-content\/uploads\/2019\/03\/b1a42826f4afc78a2b25d158100b2ba4.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"Miljoenen binaire bestanden later. Hoe Linux is versterkt\" src=\"\/wp-content\/uploads\/2019\/03\/2177579e65e4fe6bb320903756a04b9b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOver het algemeen hebben de nieuwe kernels strengere instellingen out-of-the-box. Bijvoorbeeld, CentOS 6.10 en RHEL 6.10 op kernel 2.6.32 hebben een gebrek aan de meeste kritische functies die zijn ge\u00efmplementeerd in nieuwere kernels, zoals <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Supervisor_Mode_Access_Prevention\">SMAP<\/a><\/noindex>, strikte RWX-rechten, adresrandomisatie of copy2usr-bescherming. Het is belangrijk op te merken dat veel van de configuratieopties in de tabel ontbreken in oudere kernelversies en niet praktisch toepasbaar zijn \u2014 dit wordt nog steeds aangegeven als onvoldoende bescherming in de tabel. Evenzo, als een configuratieparameter in deze versie ontbreekt en het uitschakelen van deze parameter vereist is voor veiligheid, wordt dit beschouwd als een redelijke configuratie. <\/p>\n<p>Een ander punt bij de interpretatie van de resultaten: sommige kernelconfiguraties die het aanvalsoppervlak vergroten, kunnen tegelijkertijd voor beveiliging worden gebruikt. Voorbeelden hiervan zijn uprobes en kprobes, kernelmodules en BPF\/eBPF. Onze aanbeveling is om de bovengenoemde mechanismen te gebruiken voor echte bescherming, aangezien ze niet triviaal zijn in gebruik en hun exploitatie impliceert dat kwaadwillenden al in het systeem zijn gevestigd. Maar als deze opties zijn ingeschakeld, moet de systeembeheerder actief toezien op misbruik.<\/p>\n<p>Bij het verder bestuderen van de gegevens in tabel 2, zien we dat moderne kernels verschillende opties bieden voor bescherming tegen de exploitatie van kwetsbaarheden zoals informatielekken en stack\/heap overflow. We merken echter op dat zelfs de nieuwste populaire distributies nog niet meer geavanceerde beveiliging hebben ge\u00efmplementeerd (bijvoorbeeld met patches <noindex><a rel=\"nofollow\" href=\"https:\/\/grsecurity.net\/\">grsecurity<\/a><\/noindex>) of moderne bescherming tegen code hergebruik aanvallen (bijvoorbeeld, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.cs.columbia.edu\/~theofilos\/files\/slides\/krx.pdf\">een combinatie van randomisatie met R^X-achtige schema's voor code<\/a><\/noindex>). Wat nog erger is, is dat zelfs deze geavanceerdere beschermingsmaatregelen niet beschermen tegen het volledige spectrum van aanvallen. Daarom is het voor systeembeheerders van cruciaal belang om redelijke configuraties aan te vullen met oplossingen die detectie en preventie van exploits tijdens runtime bieden.<\/p>\n<h3>Applicatie-analyse<\/h3>\n<p>\nHet is niet verwonderlijk dat verschillende distributies verschillende pakketkenmerken, compilatie-opties, bibliotheeks afhankelijkheden, enz. hebben. Er zijn zelfs verschillen voor <noindex><a rel=\"nofollow\" href=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/1\/1b\/Linux_Distribution_Timeline.svg\">verwante<\/a><\/noindex> distributies en pakketten met een beperkt aantal afhankelijkheden (bijvoorbeeld coreutils in Ubuntu of Debian). Om de verschillen te beoordelen, hebben we alle beschikbare pakketten gedownload, hun inhoud uitgepakt en de binaire bestanden en afhankelijkheden geanalyseerd. Voor elk pakket hebben we de andere pakketten gevolgd waar het van afhankelijk is, en voor elke binaire hebben we zijn afhankelijkheden gevolgd. In dit gedeelte vatten we de bevindingen samen.<\/p>\n<h4>Distributies<\/h4>\n<p>\nIn totaal hebben we 361.556 pakketten voor alle distributies gedownload, waarbij we alleen pakketten van de standaard spiegels hebben gehaald. We negeerden pakketten zonder uitvoerbare ELF-bestanden, zoals broncodes, lettertypen, enz. Na filtering bleven er 129.569 pakketten over, met in totaal 584.457 binaire bestanden. De verdeling van pakketten en bestanden over de distributies wordt weergegeven in fig. 3.<\/p>\n<p><img decoding=\"async\" alt=\"Miljoenen binaire bestanden later. Hoe Linux is versterkt\" src=\"\/wp-content\/uploads\/2019\/03\/a24975fba7413ac8069c07412e5476cc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Figuur 3<\/i><\/p>\n<p>Opvallend is dat naarmate een distributie moderner is, er meer pakketten en binaire bestanden in zitten, wat logisch is. Bovendien bevatten de pakketten van Ubuntu en Debian veel meer binaire bestanden (zowel uitvoerbare bestanden als dynamische modules en bibliotheken) dan CentOS, SUSE en RHEL, wat potentieel de aanvalsvector voor Ubuntu en Debian kan be\u00efnvloeden (het is belangrijk op te merken dat de cijfers alle binaire bestanden van alle versies van het pakket weerspiegelen, wat betekent dat sommige bestanden meerdere keren worden geanalyseerd). Dit is vooral relevant gezien de afhankelijkheden tussen pakketten. Een kwetsbaarheid in de binaire van \u00e9\u00e9n pakket kan veel delen van het ecosysteem be\u00efnvloeden, zoals een kwetsbare bibliotheek die alle binaire bestanden be\u00efnvloedt die deze importeren. Als referentie bekijken we de verdeling van het aantal afhankelijkheden per pakket in verschillende besturingssystemen:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/ii\/e3\/e5\/iie3e5-ei26ezg5yvcyvtzqzl80.png\"><img decoding=\"async\" alt=\"Miljoenen binaire bestanden later. Hoe Linux is versterkt\" src=\"\/wp-content\/uploads\/2019\/03\/c6570e643d92103c87659e61f5d395a6.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<i>Figuur 4<\/i> <\/p>\n<p>Bijna in alle distributies hebben 60% van de pakketten minimaal 10 afhankelijkheden. Bovendien hebben sommige pakketten aanzienlijk meer afhankelijkheden (meer dan 100). Dit geldt ook voor omgekeerde afhankelijkheden van pakketten: zoals verwacht, worden verschillende pakketten door veel andere pakketten in de distributie gebruikt, waardoor kwetsbaarheden in deze weinige gekozen pakketten een hoog risico hebben. Ter illustratie worden in de volgende tabel 20 pakketten met de meeste omgekeerde afhankelijkheden in SLES, CentOS 7, Debian 9 en Ubuntu 18.04 vermeld (in elke cel staat het pakket en het aantal omgekeerde afhankelijkheden).<\/p>\n<p><img decoding=\"async\" alt=\"Miljoenen binaire bestanden later. Hoe Linux is versterkt\" src=\"\/wp-content\/uploads\/2019\/03\/0aa544db8be1af7bffe21b6314537e18.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Tabel 3<\/i><\/p>\n<p>Een interessant feit. Hoewel alle geanalyseerde besturingssystemen zijn gebouwd voor de x86_64-architectuur, en de architectuur van de meeste pakketten is gedefinieerd als x86_64 en x86, bevatten pakketten vaak binaire bestanden voor andere architecturen, zoals weergegeven in fig. 5.<\/p>\n<p><img decoding=\"async\" alt=\"Miljoenen binaire bestanden later. Hoe Linux is versterkt\" src=\"\/wp-content\/uploads\/2019\/03\/b40f607e0c2f169bd1df21bd9994de8c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Figuur 5<\/i><\/p>\n<p>In het volgende gedeelte zullen we dieper ingaan op de kenmerken van de geanalyseerde binaire bestanden.<\/p>\n<h4>Statistiek over de bescherming van binaire bestanden<\/h4>\n<p>\nAls absoluut minimum moet een basisset van beschermingsopties voor bestaande binaire bestanden worden bestudeerd. Verschillende Linux-distributies worden geleverd met scripts die dergelijke controles uitvoeren. Bijvoorbeeld, in Debian\/Ubuntu is er zo'n script. Hier is een voorbeeld van de werking ervan:<\/p>\n<pre><code class=\"bash\">$ hardening-check $(which docker)\n\/usr\/bin\/docker:\n Position Independent Executable: ja\n Stack protected: ja\n Fortify Source functions: nee, alleen onbeveiligde functies gevonden!\n Read-only relocations: ja\n Immediate binding: ja<\/code><\/pre>\n<p>\nHet script controleert vijf <noindex><a rel=\"nofollow\" href=\"http:\/\/manpages.ubuntu.com\/manpages\/trusty\/man1\/hardening-check.1.html\">beschermingsfuncties<\/a><\/noindex>:<\/p>\n<ul>\n<li>Position Independent Executable (PIE): geeft aan of de tekstsectie van het programma in het geheugen kan worden verplaatst om randomisatie te bereiken, als ASLR in de kernel is ingeschakeld.\n<\/li>\n<li>Stack Protected: zijn stackcanaries ingeschakeld ter bescherming tegen stack-overloopaanvallen.\n<\/li>\n<li>Fortify Source: worden onveilige functies (bijvoorbeeld strcpy) vervangen door veiligere alternatieven, en worden de tijdens runtime gecontroleerde aanroepen vervangen door hun niet-gecontroleerde alternatieven (zoals memcpy in plaats van __memcpy_chk).\n<\/li>\n<li>Read-only relocations (RELRO): zijn de relocatietabelvermeldingen gemarkeerd als 'alleen-lezen', indien deze zijn uitgevoerd v\u00f3\u00f3r de start van de uitvoering.\n<\/li>\n<li>Immediate binding (directe binding): staat de runtime-linker alle relocaties toe v\u00f3\u00f3r het begin van de uitvoering van het programma (dit is gelijk aan volledige RELRO).<\/li>\n<\/ul>\n<p>\nIs het voldoende om de hierboven genoemde mechanismen te hebben? Helaas niet. Er zijn bekende manieren om al deze beveiligingen te omzeilen, maar hoe strenger de beveiliging, hoe moeilijker het wordt voor een aanvaller. Bijvoorbeeld, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.usenix.org\/system\/files\/conference\/usenixsecurity15\/sec15-paper-di-frederico.pdf\">methoden om RELRO te omzeilen<\/a><\/noindex> zijn moeilijker toe te passen als zowel PIE als directe binding actief zijn. Evenzo vereist volledige ASLR extra inspanning om een werkende exploit te cre\u00ebren. Maar geavanceerde aanvallers zijn al voorbereid om dergelijke beveiligingen te omzeilen: hun afwezigheid versnelt in feite de inbraak. Daarom is het cruciaal dat deze maatregelen worden gezien als een noodzakelijke <i>minimum<\/i>. <\/p>\n<p>We wilden onderzoeken hoeveel binaire bestanden in de onderzochte distributies beschermd zijn door deze, evenals nog drie methoden:<\/p>\n<ul>\n<li>De niet-uitvoerbare bit (<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Executable_space_protection\">NX<\/a><\/noindex>) voorkomt de uitvoering in elk gebied dat niet uitvoerbaar zou moeten zijn, zoals in de stack heap, enzovoort.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Rpath\">RPATH\/RUNPATH<\/a><\/noindex> geeft het uitvoerpad aan dat door de dynamische lader wordt gebruikt om de juiste bibliotheken te vinden. De eerste is een <i>vereiste<\/i> voor elk modern systeem: het ontbreken ervan stelt aanvallers in staat om willekeurige payloads in het geheugen te schrijven en deze zonder wijziging uit te voeren. Voor de tweede helpen onjuiste configuraties van de uitvoeringspaden bij het introduceren van onbetrouwbare code, wat kan leiden tot verschillende problemen (bijvoorbeeld, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nth-dimension.org.uk\/pub\/BTL.pdf\">privilege-escalatie<\/a><\/noindex>, evenals <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.debian.org\/RpathIssue\">andere problemen<\/a><\/noindex>).<\/li>\n<li>Stack collision protection biedt bescherming tegen aanvallen die de stack laten overlappen met andere geheugengebieden (bijvoorbeeld, de heap). Gezien recente exploits die misbruik maken van <noindex><a rel=\"nofollow\" href=\"https:\/\/capsule8.com\/blog\/exploiting-systemd-journald-part-1\/\">heap collision kwetsbaarheden in systemd<\/a><\/noindex>, hebben we het passend geacht om dit mechanisme op te nemen in onze dataset.<\/li>\n<\/ul>\n<p>\nDus, zonder verdere ceremonie, laten we naar de cijfers gaan. Tabellen 4 en 5 bevatten een samenvatting van de analyse van uitvoerbare bestanden en bibliotheken van verschillende distributies, respectievelijk.<\/p>\n<ul>\n<li>Zoals te zien is, is NX-bescherming vrijwel overal ge\u00efmplementeerd, met enkele uitzonderingen. In het bijzonder valt op dat het gebruik ervan iets lager is in de distributies Ubuntu en Debian vergeleken met CentOS, RHEL en OpenSUSE.\n<\/li>\n<li>Stack canaries ontbreken op veel plekken, vooral in distributies met oudere kernels. Er is enige vooruitgang te zien in recente distributies van CentOS, RHEL, Debian en Ubuntu.\n<\/li>\n<li>Met uitzondering van Debian en Ubuntu 18.04, is er in de meeste distributies slechte ondersteuning voor PIE.\n<\/li>\n<li>Stack collision bescherming is slecht ge\u00efmplementeerd in OpenSUSE, CentOS 7 en RHEL 7 en ontbreekt vrijwel volledig in de overige.\n<\/li>\n<li>Alle distributies met moderne kernels hebben enige ondersteuning voor RELRO, waarbij Ubuntu 18.04 de leider is en Debian op de tweede plaats komt.<\/li>\n<\/ul>\n<p>\nZoals eerder vermeld, zijn de statistieken in deze tabel gemiddeld over alle versies van het binaire bestand. Als we alleen naar de laatste versies van de bestanden kijken, zullen de cijfers anders zijn (bijvoorbeeld, zie <noindex><a rel=\"nofollow\" href=\"http:\/\/outflux.net\/debian\/hardening\/\">de vooruitgang van Debian met de implementatie van PIE<\/a><\/noindex>). Bovendien controleren de meeste distributies vaak alleen de bescherming van een paar functies in de binaire code bij het tellen van statistieken, terwijl in onze analyse het werkelijke percentage van versterkte functies wordt weergegeven. Dus als in de binaire code 5 van de 50 functies zijn beveiligd, geven we het een score van 0,1, wat overeenkomt met 10% versterkte functies.<\/p>\n<p><img decoding=\"async\" alt=\"Miljoenen binaire bestanden later. Hoe Linux is versterkt\" src=\"\/wp-content\/uploads\/2019\/03\/82e881c5ba2a3911f3a0ffae1a3475f4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Tabel 4. Kenmerken van de bescherming voor uitvoerbare bestanden, weergegeven in fig. 3 (de implementatie van de relevante functies als percentage van het totale aantal uitvoerbare bestanden)<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Miljoenen binaire bestanden later. Hoe Linux is versterkt\" src=\"\/wp-content\/uploads\/2019\/03\/57c8e67be7a57341105262c6e956594c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Tabel 5. Beschermingseigenschappen voor bibliotheken, weergegeven in fig. 3 (implementatie van de bijbehorende functies in procenten van het totale aantal bibliotheken)<\/i><\/p>\n<p>Is er vooruitgang? Zeker: dit blijkt uit de statistieken van afzonderlijke distributies (bijvoorbeeld, <noindex><a rel=\"nofollow\" href=\"http:\/\/outflux.net\/debian\/hardening\/\">Debian<\/a><\/noindex>), evenals uit de hierboven weergegeven tabellen. Ter illustratie tonen we in fig. 6 de implementatie van beveiligingsmechanismen in drie opeenvolgende Ubuntu LTS-distributies (we hebben de statistieken voor stack collision protection weggelaten). We merken op dat van versie tot versie steeds meer bestanden ondersteuning bieden voor stack canaries, en dat steeds meer binaire bestanden systematisch met volledige RELRO-beveiliging worden geleverd.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/d1\/ni\/or\/d1niordj1hmiklmg2-w5rsk6dla.png\"><img decoding=\"async\" alt=\"Miljoenen binaire bestanden later. Hoe Linux is versterkt\" src=\"\/wp-content\/uploads\/2019\/03\/9130099db6d59106da8f0a0fc760410e.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<i>Figuur 6<\/i><\/p>\n<p>Helaas hebben verschillende uitvoerbare bestanden in verschillende distributies nog steeds geen van de bovenstaande beveiligingen. Zo valt op bij Ubuntu 18.04 dat het binaire bestand ngetty (de vervanger van getty), evenals de shells mksh en lksh, de interpreter picolisp, de pakketten nvidia-cuda-toolkit (een populair pakket voor GPU-versnelling in toepassingen zoals machine learning frameworks) en klibc-utils geen bescherming bieden. Evenzo worden het binaire bestand mandos-client (een beheertool die automatisch machines met versleutelde bestandssystemen kan opnieuw opstarten) en de rsh-redone-client (een herimplementatie van rsh en rlogin) zonder NX-beveiliging geleverd, hoewel ze SUID-rechten hebben :(. Bovendien ontbreekt bij verschillende suid-binaire bestanden de basisbescherming, zoals stack canaries (bijvoorbeeld het binaire bestand Xorg.wrap uit het Xorg-pakket).<\/p>\n<h1>Samenvatting en conclusies<\/h1>\n<p>\nIn dit artikel hebben we verschillende beveiligingskenmerken van moderne Linux-distributies belicht. De analyse toont aan dat de nieuwste LTS-distributie van Ubuntu (18.04) gemiddeld de sterkste beveiliging op besturingssysteem- en applicatieniveau biedt onder distributies met relatief nieuwe kernels, zoals Ubuntu 14.04, 12.04 en Debian 9. Echter, de onderzochte distributies CentOS, RHEL en OpenSUSE leveren standaard een dichte set pakketten en de laatste versies (CentOS en RHEL) hebben een hoger percentage implementatie van stack collision protection vergeleken met Debian-gebaseerde concurrenten (Debian en Ubuntu). Bij de vergelijking van de versies van CentOS en RedHat zien we grote verbeteringen in de implementatie van stack canaries en RELRO van versie 6 naar 7, maar gemiddeld gezien heeft CentOS meer functies ge\u00efmplementeerd dan RHEL. In het algemeen moeten alle distributies bijzondere aandacht besteden aan PIE-beveiliging, die, met uitzondering van Debian 9 en Ubuntu 18.04, in minder dan 10% van de binaire bestanden in onze dataset is ge\u00efmplementeerd. <\/p>\n<p>Tot slot is het belangrijk op te merken: hoewel we het onderzoek handmatig hebben uitgevoerd, zijn er talloze beveiligingstools (zoals <noindex><a rel=\"nofollow\" href=\"https:\/\/cisofy.com\/lynis\/\">Lynis<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nongnu.org\/tiger\/\">Tiger<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/hubblestack\/hubble\">Hubble<\/a><\/noindex>), die analyses uitvoeren en helpen om onveilige configuraties te vermijden. Helaas garandeert zelfs sterke beveiliging met redelijke configuraties niet de afwezigheid van exploits. Daarom zijn we er vast van overtuigd dat het essentieel is om <noindex><a rel=\"nofollow\" href=\"https:\/\/capsule8.com\/\">betrouwbare monitoring en preventie van aanvallen in real-time te waarborgen<\/a><\/noindex>, met focus op exploitatiepatronen en het voorkomen daarvan.<\/p>\n<p>Bron: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444418\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>TL;DR. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u0437\u0430\u0449\u0438\u0442\u043d\u044b\u0435 \u0441\u0445\u0435\u043c\u044b (hardening schemes), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u043f\u044f\u0442\u0438 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430\u0445 Linux. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u044b \u0432\u0437\u044f\u043b\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u044f\u0434\u0440\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0438 \u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0438 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u0445\u0435\u043c\u044b \u0437\u0430\u0449\u0438\u0442\u044b \u0432\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445. \u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u044b OpenSUSE 12.4, Debian 9, CentOS, RHEL 6.10 \u0438 7, \u0430 \u0442\u0430\u043a\u0436\u0435 Ubuntu 14.04, 12.04 \u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-29880","post","type-post","status-publish","format-standard","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"TL;DR.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/nl\/blog\/milliony-binarnikov-spustya-kak-ukreplyalsya-linux\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u043e\u0432 \u0441\u043f\u0443\u0441\u0442\u044f. \u041a\u0430\u043a \u0443\u043a\u0440\u0435\u043f\u043b\u044f\u043b\u0441\u044f Linux | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"TL;DR.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/nl\/blog\/milliony-binarnikov-spustya-kak-ukreplyalsya-linux\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:32:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:32:27+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Miljoenen binaire bestanden later. Hoe Linux werd versterkt | ProHoster","description":"TL;DR.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/milliony-binarnikov-spustya-kak-ukreplyalsya-linux","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u043e\u0432 \u0441\u043f\u0443\u0441\u0442\u044f. \u041a\u0430\u043a \u0443\u043a\u0440\u0435\u043f\u043b\u044f\u043b\u0441\u044f Linux | ProHoster","og:description":"TL;DR.","og:url":"https:\/\/prohoster.info\/nl\/blog\/milliony-binarnikov-spustya-kak-ukreplyalsya-linux","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:32:27+00:00","article:modified_time":"2019-10-31T18:32:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"29880","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-20 22:50:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:46:28","updated":"2026-01-20 22:50:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/29880","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=29880"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/29880\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=29880"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=29880"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=29880"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}