Povzetek
Poleg dajanje v najem uporabnik zagotoviti svoje SSH keypairs za preverjanje pristnosti, platformi Microsoft Azure opira na SSH keypairs omogočiti nekatere funkcije, ki so dodali v navidezni stroj (VM) v času uvajanja. Pred kratkim smo ugotovili, da v nekaterih omejenih primerih, javne ključe od teh potrdil Azure platformo bi nepričakovano dodajo .ssh/authorized_keys datoteke. Ti scenariji so zajeta samo na situacijo, v kateri VM je omogočena z uporabo oblak-init in uporabnik izbere Azure dodatne funkcije, ki se zanašajo na potrdila, kot so sistem upravlja storitev identitete.
To nepričakovano vedenje se pojavi zaradi spremembe v oskrbovalno logiko operacijski sistem. To so sistemi, ki uporabljajo oblak-init in nehote namestitvi javnega ključa iz vse certifikate, ki so na voljo v VM v ssh-pooblaščeni ključe datoteko med ustvarjanjem VM.
Če želite izvedeti več, pojdite na CVE-2019-0816.
Več informacij
Scenarij podrobnosti
Oblak-init logike, ki je omenjeno v razdelku »Povzetek« je trenutno znano, da obstajajo barve slike za Ubuntu 18.04 poleg javno predogled RHEL 7.4/7.5/7.6 in CentOS 7.4 oblak-init slike. Obstajajo lahko tudi v slike po meri z uporabo teh operacijskih sistemov. Če omogočite eno od teh funkcij, medtem ko omogočate eden od Linux slike, lahko vidite dodatne, nepričakovanih tipke v datoteko .ssh/authorized_keys, kot nekaj od tega:
-
Upravljana identiteta
-
Razširitve z zaščiteno nastavitve
-
Uvajanje VM z ključnih Vault sklepnik v a VM
Prepoznavanje in sanacijo obstoječih VMs
Prepoznavanje
Preverite, ali imate dodatne tipke, preglejte datoteko pooblaščeni ključe (vi .ssh/authorized_keys datoteke) za določitev, ali so bile dodane vse dodatne tipke, ki niste nameravali vključiti.
To je varno ročno odstranite dodatni ssh javne ključe, ki morda so bile dodane. To hoteti ne vplivati na značilnosti, ki se razporedi skupaj s VM. Tudi, to ne bo vplivalo na vaš določen SSH par ključev za preverjanje pristnosti.
Če ne veste ali ne morejo razlikovati katere javne ključe v datoteko .ssh/authorized_keys, določite za preverjanje pristnosti, sledite tem korakom:
-
Pregled uvajanja predloge:
-
SSH javnih ključev
-
SSH sklepnik v oblak-init konfiguracijo
-
-
Rešitev je razporejeno ssh tipke na ustvarjeno od znotraj VM, če imate sudo/root dostop. Če želite to narediti, sledite tem korakom:
-
Preverite konfiguracijo init oblak, ki je bil sprejet v CustomData: sudo cat /var/lib/waagent/ovf-env.xml | grep "<ns1:CustomData>"Uporabite vrednost CustomData in potem uporabo base64 dešifrirati dobiti javne ključe, ki ste uvedli: echo "<customData value>" | base64 -D
-
Pa preverite stopnje Meta podatkov storitev (IMDS) za prikaz je ssh javni ključ, ki je bil sprejet na ssh javnega ključa lastnost VM ustvariti: curl -H Metadata:true "http://169.254.169.254/metadata/instance/compute/publicKeys?api-version=2018-04-02&format=json"
-
Sanacijo
Če so ugotovljene dodatne certifikate, da ne nameravate uvesti VM, lahko odstranite to z izbris ustrezne vrstice iz authorized_keys datoteke.
Sanacijo vzpostavite VM interaktivno ali uporabljate skript po meri razširitev ali je dejanje čez več.
VMs, uvedeno z uporabo pripone, ki so zaščitene nastavitve ali upravljane identiteto
Uporabite ta skript umakniti javnih ključev s certifikati v kateri VM je bila uvedena z razširitvami ali upravljati identitete. To bo ne odstrani ključi, ki so navedli, ko ste uvedli VM ali VM je bil uveden s zakleniti Vault tipke.
Pomembno
Priporočamo, da ustvarite varnostno kopijo authorized_keys datoteke, preden zaženete ta skript.
#!/bin/bash
set -e
# /var/lib/waagent has *.crt files that include the crt files corresponding to
# the user provided public keys and one additional .crt file from MSI.
# This script converts the content of the .crt file into the ssh public key and
# remove it from the authorized_keys file
readarray -t CRT_FILES < <(grep -l -E "(Microsoft.ManagedIdentity|Windows Azure)" /var/lib/waagent/*.crt)
for ((i=0; i < ${#CRT_FILES[@]}; i++))
do
PUBKEY=$(openssl x509 -in "${CRT_FILES[$i]}" -pubkey -noout | ssh-keygen -f /dev/stdin -i -m PKCS8)
sed -i -e "\@$PUBKEY@d" $HOME/.ssh/authorized_keys
Done
Ko je teči scenarij, preverite ssh/authorized_keys datoteke, da zagotovi prisotnost le znane javne tipke.
VMs, uveden s zakleniti Vault skrivnosti
Ugotoviti ali ključ je bila dodana, ko s zakleniti Vault ključe, sledite tem korakom:
-
Dobil ime ključa Vault potrdilo, ki ste uvedli z uporabo VM, pregled uvajanje kodo Az CLI ali roko predloge ali teči ta skupina Az CLI: az vm show --resource-group <resourceGroupName> --name <vmName> | grep certificateUrlV odgovor prikaže ime potrdila: "certificateUrl": "https://<keyVaultname>.vault.azure.net/secrets/<certName>/xxxxxxxxxxxxx"
-
Travnato gričevje potrdilo: az keyvault certificate download --vault-name <keyVaultName> --name <certName> --encoding PEM --file public.pem
-
Citat javnega ključa: openssl x509 -in public.pm -pubkey -noout | ssh-keygen -f /dev/stdin -i -m PKCS8
-
Primerjati izhod iz prejšnjega koraka v preostalih cert v ssh/authorized_keys datoteke. vi .ssh/authorized_keys file
Rešitev
Sinje MarketPlace slike
Popravki so bili uporabljeni za oblak-init v opredeljenih Azure slike:
-
Canonical:UbuntuServer:18.04-LTS:18.04.201902190
-
Canonical:UbuntuServer:18.10-DAILY:18.10.201903200
-
RedHat:RHEL:7-RAW-CI:7.6.2019030421
-
OpenLogic:CentOS-CI:7-CI:7.6.20190306
Slike po meri
Če uporabljate slike po meri, ki so omogočeni z oblak-init za znane operacijske sisteme, boste morali posodobiti vaš meri slike vir.
Ubuntu 18.04 slike
Posodobiti sliko po meri vir, naredite naslednje spremembe:
-
Izdajati sledeč pila: /etc/Cloud/Cloud.cfg.d/90-Azure.cfg
-
Dodajte naslednjo kodo na konec datoteke.
Pomembno
Kodo je treba dodati natančno, kot je prikazano, vključno s presledki.
datasource:
Azure:
agent_command: [service, walinuxagent, start]
RHEL 7.4/7.5/7.6 in CentOS 7,6 slike
Če ste prej ustvarili RHEL/CentOS slike po teh navodilih (ali na podoben način), je treba posodobiti slike vir, iz katerega ste ustvarili SSP. V nadaljevanju so dodatne ukrepe, ki so morali dodati obstoječo vir VM podoba konfiguracijo:
Korak 1
Izdajati sledeč pila:
/etc/cloud/cloud.cfg.d/91-azure_datasource.cfg
Pomembno
Kodo je treba dodati natančno, kot je prikazano, vključno s presledki.
Na koncu datoteke dodajte naslednje vrstice:
datasource:
Azure:
agent_command: [systemctl, start, waagent, --no-block]
Korak 2
Posodobi konfiguracijo agenta, kot sledi:
cp /lib/systemd/system/waagent.service /etc/systemd/system/waagent.service
sed -i 's/After=network-online.target/WantedBy=cloud-init.service\\nAfter=network.service systemd-networkd-wait-online.service/g' /etc/systemd/system/waagent.service
systemctl daemon-reload
oblak-init paketi
Vse oblak-init pakete, ki vključujejo popravek so v procesu posodablja. Microsoft težavo še raziskuje in bo po več informacij v tem članku, ko ti podatki postanejo dostopni.
Pogosta vprašanja
V1: Ali je Microsoft pridobil dostop do svoj VM?
A1: Šifrirni ključi se uporabljajo za upravljanje identitet in razširitve niso namenjeni za dostop Microsoft zaposlenih. Imamo postopke za spremljanje, se prijavite in preprečiti to vrsto dostopa. Kot varnostni ukrep, smo pregled vseh dnevnikov prepričati kupca ključev, ki so neprimerno dostopne. Za potrdila, ki so shranjeni v trezorju ključ ki so navedeni v VM ali VMSS uvajanja, Microsoftovi zaposleni nimajo dostop do skrivnosti.
Q2: So vse oblak-init razporejeno OSs in različice vpliva?
A2: ne. Smo videli to tuje ključno vprašanje, ki se pojavljajo le na ugotovljene operacijskih sistemov. Videli smo, ne da pride v starejši prevod od Ubuntu. To je zato, ker ti sistemi uporabljajo drugačen mehanizem nastaviti javne ključe.
V3: Ali prizadetih oblak-init paketov za Linux distribucij vključujejo pritrditi?
A3: Delamo na dodajanje popravki paketi za prizadete različice in bomo posodobitev tega člena, ko to delo končano.
V4: Microsoft samodejno posodobi vse prizadete VMs?
A4: ne. Microsoft ne bo spremenilo vsebini VMs, ki so že omogočeni.
V5: Naše varnostne pravilnike me preprečujejo delujejo VM Linux z tuje vsebine v authorized_keys. Kaj lahko storim glede tega danes?
A5: Lahko odstranite vrstico krši varno authorized_keys datoteke. To ne vpliva na keypair SSH, ki ste jo ustvarili in nadzor ali upravljanje identitete. To lahko storite ročno ali teče skript po meri ali po meri zapoved čez vse prizadete flote.