Docker SBOM

Docker har precis släppt en ny funktion som gör det möjligt att skapa en Software Bill Of Materials (SBOM) på en docker-image. Förutom att det är ett krav på amerikanska myndigheter att upprätta en SBOM så är det säkerhetsmässigt mycket bra att veta exakt vilka beroenden som återfinnes i ett IT-system eller mjukvara. Vid sårbarheter såsom den i log4j går det snabbare och enklare att identifiera var sårbara bibliotek återfinnes.

syft

Dockers sbom-funktion bygger på open-source projektet Syft. Och följande paket stödjer docker sbom/syft att identifiera i containers:

  • Alpine (apk)
  • Dart (pubs)
  • Debian (dpkg)
  • Go (go.mod, Go binaries)
  • Java (jar, ear, war, par, sar)
  • JavaScript (npm, yarn)
  • Jenkins Plugins (jpi, hpi)
  • PHP (composer)
  • Python (wheel, egg, poetry, requirements.txt)
  • Red Hat (rpm)
  • Ruby (gem)
  • Rust (cargo.lock)

Och för att skapa själva rapporten så finns ett antal olika SBOM-format såsom spdx, cyclonedx, json och text. Jag testade att snabbt jämföra debian med alpine utan några extra paket och då såg det ut så här:

  • Alpine – 14 paket (apk)
  • Debian – 96 paket (deb)
  • Alma Linux – 153 paket (rpm)
  • Rocky Linux – 151 paket (rpm)

Och tittar vi på hur en text-rapport från alpine:latest ser ut som är skapad med hjälp av kommandot docker sbom alpine:latest

Syft v0.43.0
 ✔ Loaded image
 ✔ Parsed imag
 ✔ Cataloged packages      [14 packages]

NAME                    VERSION      TYPE
alpine-baselayout       3.2.0-r18    apk
alpine-keys             2.4-r1       apk
apk-tools               2.12.7-r3    apk
busybox                 1.34.1-r5    apk
ca-certificates-bundle  20211220-r0  apk
libc-utils              0.7.2-r3     apk
libcrypto1.1            1.1.1n-r0    apk
libretls                3.3.4-r3     apk
libssl1.1               1.1.1n-r0    apk
musl                    1.2.2-r7     apk
musl-utils              1.2.2-r7     apk
scanelf                 1.3.3-r0     apk
ssl_client              1.34.1-r5    apk
zlib                    1.2.12-r0    apk

Hjälptext för docker sbom:

Observera att docker sbom bara finns i Docker Desktop från version 4.7.0 än så länge. Men givetvis går syft att ladda hem och köra separat.

Underrättelseutmaning 22

Uppdatering: Nu finns det en discord länk för den som vill ställa frågor: https://discord.gg/gZF5yY5Pkr

De tre myndigheterna MUST, FRA och Säpo anordnar en CTF samt event på Armémuseumet. Du kan redan nu anmäla dig till CTF:en och eventet på undutmaning.se.

CTF står för Capture The Flag och är en typ av tävling där deltagaren ska försöka lösa utmaningar inom olika områden och hitta ”flaggor” för att bevisa att man klarat av utmaningen.

Det fysiska eventet går av stapeln på torsdag den 28:e april klockan 16-21 och CTF:en startar 2022-04-09 kl 08:00. Det finns även en tillhörande Discord-server för att ställa frågor.

Totalt finns det 24 st utmaningar och de områden som gäller för utmaningarna är bl.a. inom IT-forensikkrypto och programmering. Arrangörerna lovar att vissa av utmaningarna är riktigt svåra att lösa.

Eva Björkman som jobbar på Säpo berättar om denna CTF:

Genom denna gemensamma CTF lyfter vi inte bara upp den enorma kompetens som våra medarbetare har, utan vi ger också potentiella medarbetare en liten inblick i våra verksamheter.

Spring4Shell – Två nya sårbarheter i Spring

Två nya RCE:er har publicerats i java-ramverket Spring. Den ena sårbarheten går under namnet Spring4Shell och återfinnes i Spring Cloud Function SPEL:

  • CVE-2022-22963 – Spring Expression Resource Access Vulnerability

Exempel på anrop där sårbarheten utnyttjas:

curl -i -s -k -X $’POST’ -H $’Host: 192.168.1.2:8080′ -H $’spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec(\”touch /tmp/test”)’ –data-binary $’exploit_poc’ $’http://192.168.1.2:8080/functionRouter’

Att uppgradera till Spring Cloud Function 3.1.7 eller 3.2.3 löser problemet med den ena sårbarheten. Sårbarheten har fått en CVSS score på hela 9.0 av 10, vilket är mycket allvarligt.

Den andra RCE:n återfinnes i Spring Core. Och en PoC återfinnes på Github här bl.a. (obs kör på egen risk):

Enligt universitetet i peking så utnyttjas minst en av dessa sårbarheter aktivt:

All versions of JDK9 and above may be affected. Currently, this vulnerability has been exploited in the wild.

Och några mer uppdateringar:

The new Spring RCE (coined Spring4Shell) is as bad as it seems! It is a ClassLoader manipulation (no unsafe deserialization or jndi as I heard). It allows attackers to plant a webshell when running Spring MVC apps on top of JRE 9. Just a POST needed. No patch available yet.

Troligtvis uppstår problemet på grund av följande (källa)

Uppdatering: Kan vara så att jag blandat ihop dessa två, att Spring4Shell är den i Spring Core.

Gällande den ena sårbarheten utan CVE så är den relativt gammal och går under CVE-2010-1622.

Troligt intrång hos Okta

Molnleverantören Okta som tillhandahåller identitets- och åtkomsthantering har troligtvis blivit hackade av hackergruppen LAPSUS$. Intrånget genomfördes troligtvis ett hackat konto som anslöt via PaloAlto GlobalProtect som tillhandahåller VPN mot Okta. Tittar man också på skärmdumpar så framgår det att intrånget genomfördes i Januari 2022 och Lapsus själva hävdar att intrånget genomfördes för att man ville komma åt en kund till Okta.

Det framkommer även på skärmdumparna att Lapsus har eller har haft tillgång till flertalet tjänster hos Okta såsom: AWS, Okta Superuser, Zoom app, Okta Sales, Atlassian Cloud Jira & Confluence, Cornerstone (Okta learning portal), Gmail, Crayon och Splunk.

Att just detta intrång är extra intressant är för att många organisationer helt litar på Okta när det gäller identitets- och åtkomsthantering. Om just Er organisation använder Okta så bör ni genast genomföra en utredning huruvida ni har blivit påverkade av detta intrång. Vad har ni för möjlighet att genomföra threat hunting och incidentutredning?

Följande kommentar skrev Lapsus i deras Telegram-kanal:

Lapsus är en känd ransomware-grupp, som förutom Okta också på senare tid hävdat att dom hackat Microsoft Azure DevOps.

Microsoft patch-tisdag

Idag var det dags för Microsofts månatliga släpp gällande säkerhetspatchar. Det var ingen liten lista med patchar som släpptes idag med hela 71 st brister som åtgärdas. Sammanfattningsvis ser det ut enligt följande:

  • Microsoft Windows: 41 sårbarheter
  • Microsoft Office: 5 sårbarheter
  • Microsoft Exchange: 3 st sårbarheter

Och utöver ovan sårbarheter så har även följande brister åtgärdats:

  • CVE-2022-24502: Internet Explorer Security Feature Bypass Vulnerability
  • CVE-2022-24508: SMB Server Remote Code Execution Vulnerability
  • CVE-2022-24512: .NET and Visual Studio Remote Code Execution Vulnerability
  • CVE-2022-21990: Remote Desktop Client Remote Code Execution Vulnerability
  • CVE-2022-23277: Microsoft Exchange Server Remote Code Execution Vulnerability
  • CVE-2022-24459: Windows Fax and Scan Service Elevation of Privilege Vulnerability

Microsoft uppger att inget aktivt utnyttjande har detekterats av dessa brister ännu. Men det är troligtvis bara en tidsfråga innan bindiffandet börjar och exploits finns färdiga.

Mer information finnes du hos Microsoft här:

DirtyPipe – Ny allvarlig sårbarhet i Linux-kerneln

Dirtypipe - Ny allvarlig sårbarhet i Linux-kerneln

Uppdatering: Ny PoC-exploit vid namn dirtypipez från blasty som skriver över godtycklig suid-binär och sedan återställer den för att erhålla root.

Uppdatering 2: Denna sårbarhet gäller även containers. Se detta blogginlägg från Aquasec

Max Kellermann har identifierat en ny säkerhetsbrist i Linux-kerneln som medger att du kan skriva över godtycklig fil. Sårbarheten har fått CVE-2022-0847 och finns i alla Linux-kernels från version 5.8. Fixades i versionerna 5.16.11, 5.15.25 och 5.10.102. Även Android är drabbad av denna sårbarhet eftersom Android-baserade system använder sig av Linux-kerneln.

Även värt att notera så skriver Max följande:

To make this vulnerability more interesting, it not only works without write permissions, it also works with immutable files, on read-only btrfs snapshots and on read-only mounts (including CD-ROM mounts). That is because the page cache is always writable (by the kernel), and writing to a pipe never checks any permissions.

Vissa förutsättningar måste dock uppfyllas, men dessa är rätt enkla:

  • Angriparen måste ha läsrättigheter
  • Offset får inte vara på en page boundary
  • Skrivningen kan inte ske över en page boundary
  • Storleken på filen kan inte ändras

Demo på hur CVE-2022-0847 kan utnyttjas för att erhålla root på en Kali Linux-installation (privilege escalation). Detta är på en fullt patchad Kali:

Oklart dock huruvida detta fungerar med säkerhetshöjande lösningar såsom Apparmor, SELinux etc. Rekommenderar även att läsa Max intressanta write-up om hur han hittade buggen. Även finnes fungerande exploit här:

Observera att många operativsystem såsom Debian har under dagen idag måndag, åtgärdat buggen.

Tips för att höja cybersäkerheten

Tips för att höja cybersäkerheten

Med anledning av senaste tidens händelser och en ökad hotbild på cyberarenan så tänkte jag passa på att skriva ner några bra tips och råd på hur Er organisation kan höja cybersäkerheten.

Cyberresiliens och överbelastningsattacker

Er hemsida kan utsättas för överbelastningsattacker eller DDoS som det också brukar kallas. Antagonisten kommer att försöka identifiera kritiska punkter och skicka anrop om och om igen till dessa. Därför är det viktigt att se över hela den exponering som återfinnes mot Internet. Glöm inte API:er, subdomäner, DNS, SMTP osv.

Se till att ha en nödsajt samt alternativa vägar för att kommunicera inom Er organisation. Om internetförbindelsen går ner till Er organisation eller om tjänster såsom Slack går ner på grund av ökad belastning, hur kan ni då kommunicera? Om ni använder tjänster såsom Cloudfront, Akamai eller Cloudflare, se då till att den bakomliggande infrastrukturen inte går att nås via utanför dessa tjänster.

Internetexponering

Att veta hur organisationen ser ut från internet är otroligt viktigt. För det är just på dessa exponerade punkter som antagonisten kommer att fokusera först på. Kontrollera därför Er domän eller IP-adresser mot följande tjänster:

360PassiveDNS, ARIN, Ahrefs, AlienVault, AnubisDB, BinaryEdge, BGPView, BufferOver, BuiltWith, C99, Chaos, CIRCL, Censys, CommonCrawl, DNSdumpster, DNSDB, DNSlytics, DNSRepo, Detectify, FOFA, FullHunt, GitHub, GitLab, Greynoise, HackerTarget, Hunter, IntelX, IPdata, IPinfo, Maltiverse, Mnemonic, N45HT, NetworksDB, ONYPHE, PassiveTotal, PentestTools, Quake, RADb, Robtex, SecurityTrails, ShadowServer, Shodan, SonarSearch, Spamhaus, Spyse, Sublist3rAPI, TeamCymru, ThreatBook, ThreatCrowd, ThreatMiner, Twitter, Umbrella, URLScan, VirusTotal, WhoisXMLAPI, ZETAlytics, ZoomEye.

Eller använd OAWSP amass som gör det automatiskt. Använd DNS Anycast och försök att fronta via CDN och WAF. Även om jag inte är ett stort fan av Web Application Firewalls så kan det vinna Er några timmar.

Autentisering

Denna punkt har också att göra med ovan punkt. Dvs identifiera alla exponerade delar mot internet där en användare kan autentisera sig. Här är det otroligt viktigt att använda flera lager av skydd, jag rekommenderar att använda VPN som omslutning för allt. Och se till att också använda tvåfaktorsautentisering med hårdvaru-tokens såsom Yubikeys och certifikat.

Så kortfattat: Exponera inget mot internet som går att köra över VPN. Se till att den som ansluter via VPN inte kommer åt mer än nödvändigt, tänk zero-trust arkitektur.

Patchning och uppdatering

Om möjligt, se till att systemen uppdaterar sig själva automatiskt med nya säkerhetspatchar. Men var också medveten om att det finns möjlighet för bakdörrar att sig sig in den vägen. Dvs gör ett noga övervägande om för respektive nackdelar med automatiskt säkerhetspatchning. För majoriteten så är detta rätt väg att gå men inte något för alla.

Patcha inte bara mjukvaror, glöm inte heller switchar, skrivare, firmware och annat som också måste uppdatera. Och håll koll på om produkter eller system börjar närma sig End-of-Life och vad ni har för möjligheter då.

Har ni system som är äldre och som inte går att uppdatera men som ni ändå är beroende av, se till att isolera dessa extra noga. Exempelvis ett eget segment i nätverket där allt är filtrerat in och ut samt en speciell jump-host måste användas för att komma åt detta gamla system.

Härda systemen och se till att enbart mjukvaror som används exponeras eller är påslagna.

Övervaka, öva och testa

Testa säkerheten kontinuerligt med automatiska testverktyg såsom Holm Security, Detectify eller Nessus. Anlita konsulter som gör återkommande manuella penetrationstester samt genomför kodgranskning löpande om ni utvecklar mjukvara.

Öva på att återställa backup och se till att backuperna lagras offline eller på annat sätt icke åtkomliga från den ordinarie IT-infrastrukturen.

En komprometterad klient kan snabbt leda till att hela Er Windows AD-miljö blir övertagen. Se därför till att ni snabbt kan detektera om en klient börjar att bete sig suspekt. Har ni inte förmågan själva så se till att anlita ett företag som är experter på SIEM/SOC. Och vad gör ni när ni upptäcker något suspekt eller blivit utsatta för intrång, då är det bra att redan ha upparbetade kontaktvägar eller plan hur delar ska isoleras för att begränsa skada.

Glöm inte att allt ni ansluter kan producera loggfiler och hjälpa till att upptäcka intrång, syslog har funnits med länge och går att slå på och använda på nästan allt som kopplas upp.

Sammanfattning

Sist men inte minst, det ni inte känner till kan ni inte heller skydda. Se därför till att inventera och ha en god koll på vilken utrustning ni har, såväl mobiltelefoner, servrar, laptops och annat.

Administrativa konton bör användas ytterst begränsas och om möjligt med dubbelhandsfattning, tidsbegränsat eller liknande. Inventera dessa konton kontinuerligt.

Se också över beroendet gällande leverantörer, underleverantörer och tredjepartsberoenden. Upprätta en SBOM eller liknande. Jobba långsiktigt och systematiskt med cybersäkerheten och genomför omvärldsbevakning löpande, jag själv använder Twitter som en källa.

FRA FMV Försvarsmakten Säkerhetspolisen Polisen Post och Telestyrelsen MSB

Relevanta myndighetsdokument att läsa vidare:

ContiLeaks – Chattloggar från ransomware-gruppen Conti

Uppdaterat: En sak som många verkar ha missat är att Conti förutom Mega.io verkar använda gsocket för exfiltration av data. Det är ett verktyg från The Hackers Choice och läs mer om gsocket här. Samt övervaka kommunikation till och från *.gs.thc.org i era nätverksperimetrar.

Ransomware-grupperingen Conti har drabbats av en läcka där kommunikationen internt har skett över RocketChat, Tor och Jabber. Totalt rör det sig om 2535 användare och 60690 meddelanden som har läckts, allt skrivet på ryska.

Jag har sammanfattat några av de mer intressanta delar jag har hittat från läckan här nedan:

Ngrok

Här installeras ngrok och NSSM (NSSM – the Non-Sucking Service Manager) samt så används en konfigurationsfil till ngrok som ställer in så att ngrok pratar TCP på port 3389. Detta är rätt enkelt att detektera på nätverket och redan något som många säkerhetsprodukter gör. Exempelvis kan utgående kommunikation gå till subdomäner under tcp.eu.ngrok.io såsom 0.tcp.eu.ngrok.io

Även så byter antagonisterna namn på ngrok.exe till sysmon.exe för att försvåra detektion.

AnyDesk

Här nedan installeras AnyDesk i silent-mode. AnyDesk är en populär mjukvara för fjärradministration, såsom TeamViewer:

SharpZero SharpChrome och Mimikatz

Här försöker antagonisterna flertalet olika attacker såsom dazzleUP, hashdump, logonpasswords, Kerberoast, exfiltration till Mega.io, mimikatz, SharpChrome, SharpSniper, AdFind. Detta körs via en Cobalt Strike-beacon.

Det går även att se från dumparna att antagonisterna köper abonnemang på tjänster såsom Shodan och SpiderFoot. Även så köper man in olika antivirus-mjukvaror för att utveckla skadlig kod som är Fully UnDetectable (FUD).

På Github finns stora delar av chattloggarna översatta här: https://github.com/TheParmak/conti-leaks-englished

Web3 och säkerhetsproblem

Web3 (eller web 3, web 3.0) beskrivs som en decentraliserad form av internet som baseras på blockkedjeteknik. Men länge har det ifrågasatts hur decentraliserad web3 egentligen är, bl.a. genom ett blogginlägg av Signals grundare Moxie Marlinspike.

Själva grundstommen i web 3 består av marknadsplatser såsom OpenSea och Rarible där webbläsar-tillägg såsom Metamask och TrustWallet används (dApps) och decentralized finance (DeFi) är också ett begrepp som cirkulerar. Men bara för att det är tillägg till webbläsaren och du själv sitter på dina privata nycklar så används olika centraliserade API:er.

Metamask

Senaste dagarna så har även phishingen ökat markant, speciellt eftersom få läser igenom de smarta Ethereum-kontrakt som man godkänner via sin webbläsar-plånbok. Det har även visat sig att det går att skapa kontrakt där ett enda godkännande kan användas för att stjäla samtliga NFT:er som någon äger. Och för den som inte är insatt så står NFT för Non-fungible token och används främst för att köpa och sälja digital konst.

Bild på hur phishing kan se ut via E-post där någon utger sig för att vara marknadsplatsen OpenSea:

Och förutom E-post så används även Discord i stor utsträckning. Även så förekommer andra sociala medier såsom Twitter:

Och att bli av med en eller NFT:er kan innebära stora summor. Den senaste Bored Ape Yacht Club (BAYC) såldes för 2.3 miljoner kronor. Men jag är dock positiv till hela rörelsen med Web 3 och anser att det vi ser nu är bara initiala problem. För flertalet problem har redan lösts eller håller på att lösa sig såsom att många NFT:er förlitar sig på centrala servrar eller IPFS-pekare som är single point of failures. Därför har flertalet projekt nu konverterat till NFT on-chain.

Phishingen är dock inte lika enkel att lösa rent tekniskt: Framförallt gäller det att begränsa vilka sajter man godkänner i MetaMask samt se över vilka godkännande man har, se exempelvis Etherscan Token Approval Checker. Att använda sig av flertalet wallets såsom en ”burner wallet”, men inte lika enkelt då gas fees (transaktionsavgifterna) är relativt höga på Ethereum-nätverket.

Och har man blivit av med en NFT eller kryptovaluta så är det svårt att få tillbaka dessa. Just för att det inte finns någon central styrning. Men att använda stulen kryptovaluta eller NFT:er måste någon gång omsättas och då finns det skydd på de flesta centrala handelsplatserna och därför använder kriminella exempelvis over-the-counter transaktioner (OTC) eller Tornado Cash mixer.

Sammanfattning

Jag tror Web3 är här för att stanna och problemen vi ser just nu bara är initiala problem och växtvärk. Oavsett vilken bransch man verkar inom så är phishing svårt att förbygga men det går, bl.a. genom tekniska lösningar och utbildning.

Skulle det inte vara möjligt för Metamask och andra att ge någon slags fingervisning vad kontraktet man godkänner verkligen innehåller?

Givetvis så har även marknadsplatserna en hel del att lära och utveckla:

Wyvern (ERC20, ERC721) är ett av de protokoll som smarta kontrakt som Ethereum använder sig av.

Ransomware-attacker blir mer sofistikerade

CISA Ransomware-attacker blir mer sofistikerade

Amerikanska cybersäkerhetsmyndigheten Cybersecurity and Infrastructure Security Agency (CISA) gick för några dagar sedan ut med en varning gällande att ransomware-attacker blir allt mer sofistikerade.

Varningen skickades ut av CISA tillsammans med motsvarande myndigheter från Storbritannien och Australien. Framförallt gäller det två trender som myndigheterna ser:

  • Initial tillgång till systemen sker via RDP, phishing eller attacker som utnyttjar svagheter och brister i mjukvaror. Även ser man en uppgång där läckta användarnamn eller lösenord används för initial access, eller brute-force av lösenord/användarnamn.
  • En ökning av ransomware-as-a-service (RaaS) där cyberskurkarna köper och säljer tjänster av varandra. De blir mer professionella och fungerar mer som riktiga företag och organisationer skulle göra.

Tyvärr så fortsätter utpressarna att tjäna pengar och gör att de kan gå efter ännu större mål och göra ännu mer omfattande skador:

Every time a ransom is paid, it confirms the viability and financial attractiveness of the ransomware criminal business model.

Tidigare så genomförde ransomware-gängen vad som kallas “big-game” hunting och försökte ge sig på stora amerikanska bolag. Men FBI var aktiva och lyckades slå ner och begränsa förmågan hos de som utförde attackerna. Detta har dock fått till följd att ransomware-gängen nu ger sig på medelstora bolag och framförallt många nya branscher såsom: hälsa och sjukvård, finansiella tjänster, utbildning, mathandel, offentlig verksamhet och jurister.

Utpressningsmetoderna utvecklas också och förutom att kryptera och göra information otillgänglig, så gör man också internetaccess obrukbar samt hotar att släppa information och informera eventuella investerare och konkurrenter om intrånget.

Övrigt värt att nämna är att man ser en ökning där man ger sig på underleverantörer och leverantörer som i fallet med Coop och Kaseya. Attackerna sker ofta på helger och vid högtider då mindre personal är på plats och kan förhindra ett aktivt pågående intrång. En ökning sker även mot industrier som har värdefulla processer som måste vara uppe och fungera, samt mot managed service providers (MSPs) som hanterar många kunder.

Åtgärder för att förhindra och försvåra ransomware-attacker

Att förhindra och försvåra ransomware-attacker är ingen enkel och lätt match, utan flertalet åtgärder måste vidas. Och inte bara en gång utan det är viktigt att jobba med dessa frågor långsiktigt och systematiskt.

Denna lista har CISA släppt för att försvåra ransomware-attacker:

  • Håll all mjukvara uppdaterad med senaste säkerhetspatchar, se även över hårdvara som behöver uppdateras. Kontrollera även så att mjukvara inte har blivit eller snart kommer att bli End-of-life (EOL)
  • Kontinuerligt genomför automatisk sårbarhetsskanning. Se även över tredjepartsbiblioteket som behöver uppdateras
  • Slå på säkerhetsfunktioner och stäng av tjänster som inte används, framförallt se över RDP. Och använd VPN samt MFA (multifaktorsautentisering). Övervaka alla inloggningar över RDP och se till att det finns inställning som är satt för antalet misslyckade inloggningsförsök.
  • Träna och utbilda anställda med bl.a. phishing-medvetenhet
  • Använd multifaktorsautentisering överallt och se till att långa unika lösenord används. Att inte lösenord återanvänds
  • Om Linux används se till att SELinux, AppArmor eller SecComp används för defence in depth
  • Vid nyttjande av molnlösningar se till att backup finnes på flertalet ställen åtskilda

Rekommendationer för att försvåra för angripare att ta sig vidare i nätverken och systemen:

  • Segmentera nätverket
  • Implementera end-to-end kryptering såsom mutual Transport Layer Security (mTLS) 
  • Använd nätverksintrångsdetektering för att se avvikelser på nätverksnivå
  • Dokumentera externa anslutningar
  • Inför tidsbaserad åtkomst för administrativa konton
  • Minimera konton och behörigheter som är administrativa
  • Håll backuper offline och testa att återställa dessa
  • Använd telemetridata och inte enbart lokalt utan även från molntjänster. Såsom hur APIer nyttjas, flow logs, token logs, nedladdningar osv

Här kan du ladda ner PDF-dokumentet med samtliga rekommendationer i sin helhet: