Applies ToVirtual Machine running Linux

Rezumat

Pe lângă lasa utilizatorii furnizează propriile keypairs SSH pentru autentificarea, platforma Microsoft Azure se bazează pe SSH keypairs pentru a activa anumite caracteristici adăugate la mașina virtuală (VM) timp de implementare. Am descoperit recent că, în unele scenarii limitată, chei publice din aceste certificate platforma Azure ar putea fi adaugă în mod neașteptat .ssh/authorized_keys fișierul. Aceste scenarii sunt au activat numai la o situație în care VM este furnizat utilizând cloud init și utilizatorul selectează caracteristici suplimentare Azure, care se bazează pe certificate, cum ar fi o identitate service gestionată de sistem.

Acest comportament neașteptat se produce din cauza unei modificări în logica de aprovizionare specifice de sisteme de operare. Acestea sunt sisteme care utilizează cloud init și care din greșeală instalați cheia publică din toate certificatele care sunt disponibile pentru VM în fișier ssh-autorizat cheile în timpul creării VM. 

Pentru a afla mai multe, du-te la CVE-2019-0816.

Mai multe informații

Scenariu detalii

Logica cloud init care este menționat în secțiunea "Rezumat" în prezent se știe că există în Azure imagini pentru Ubuntu 18.04 lângă 7.4/7.5/7.6 Public Preview RHEL şi CentOS 7.4 cloud-init imagini. Aceasta poate, de asemenea, există în imagini particularizate utilizând aceste sisteme de operare.    Dacă activați unul dintre următoarele caracteristici în timp ce vă configurați una dintre imagini Linux, este posibil să vedeți cheile suplimentare, neaşteptate într-un fișier .ssh/authorized_keys, cum ar fi oricare dintre următoarele:

  • Identitate gestionate

  • Extensii cu setările protejate

  • Implementați un VM cu cheie seiful cheile într-un VM

Identificarea și remedierea existente SMS

Identificarea

Pentru a verifica dacă aveți alte chei, examinați cheile autorizat (fișier vi .ssh/authorized_keys) pentru a determina dacă s-au adăugat toate cheile suplimentare care nu doriți să includeți.

Manual este protejat pentru a elimina orice suplimentare ssh public chei care s-ar putea au fost adăugate. Acest lucru va nu afectează caracteristicile care sunt implementate împreună cu VM. De asemenea, nu va afecta vă specificat SSH cheie pereche pentru autentificare.

Dacă nu ştiţi sau nu face deosebirea care chei publice în .ssh/authorized_keys fișierul specificat pentru autentificarea, urmați acești pași:

  1. Examinați de șabloane de implementare:

    1. SSH chei publice

    2. SSH cheile în cloud-init configurare

  2. Prelua implementată ssh tastele la momentul creării din interiorul VM, dacă aveți acces sudo/root. Pentru a face acest lucru, urmați acești pași:

    1. Verificați configurația cloud init care s-a introdus în CustomData: sudo cat /var/lib/waagent/ovf-env.xml | grep "<ns1:CustomData>"Utilizați valoarea CustomData și apoi utilizați base64 decode pentru a obţine cheile publice care se implementează: echo "<customData value>" | base64 -D

    2. Ca alternativă, Verificați instanță Meta servicii de date (IMDS) pentru a vedea ssh cheie publică care s-a introdus în ssh proprietate cheie publică a crea VM: curl -H Metadata:true "http://169.254.169.254/metadata/instance/compute/publicKeys?api-version=2018-04-02&format=json"

Remedierea

Dacă ați identificat certificate suplimentare care nu doriți să implementați pentru VM, puteţi elimina aceste prin ștergerea linie corespunzătoare din fișierul authorized_keys.

Executați remedierea prin conectarea la VM interactiv, sau utilizați extensia Script particularizat sau ExecuţieComandă prin mai multe SMS.

Virtuale poate să fie implementate utilizând extensii care au protejat setări sau o identitate gestionate

Utilizați următorul script pentru a elimina cheile publice de certificate în care VM a fost implementat cu extensii sau gestionate de identitate. Aceasta va elimina cheile care s-a specificat atunci când se implementează o VM, sau dacă VM a fost implementat cu cheie seiful taste .

Important: Se recomandă să creați copii de rezervă authorized_keys fișierul înainte de a executa acest script.

 

#!/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 

După executarea scriptului, verificați fișierul ssh/authorized_keys pentru a asigura numai taste cunoscute public sunt prezente.

SMS implementat cu cheie seiful secretele

Pentru a identifica dacă s-a adăugat o cheie atunci când se implementează cu cheie seiful de chei, urmați acești pași:

  1. Obțineți numele certificatului cheie seif care se implementează utilizând VM, examinați implementare cod Az CLI sau ARM șabloane sau să executați acest Az CLI: az vm show --resource-group <resourceGroupName> --name <vmName> | grep certificateUrlRăspunsul va afișa numele certificatului: "certificateUrl": "https://<keyVaultname>.vault.azure.net/secrets/<certName>/xxxxxxxxxxxxx"

  2. Descărcați certificatul: az keyvault certificate download --vault-name <keyVaultName> --name <certName> --encoding PEM --file public.pem

  3. Extrage cheia publică: openssl x509 -in public.pm -pubkey -noout | ssh-keygen -f /dev/stdin -i -m PKCS8

  4. Comparați ieșirea din pasul anterior certs rămase în fișierul ssh/authorized_keys. vi .ssh/authorized_keys file

Rezolvare

Imagini Azure MarketPlace

S-au aplicat remedieri pentru cloud-init în imaginile identificate Azure:

  • 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

Imagini particularizate

Dacă utilizați imagini particularizate care sunt direcționați de cloud-init cunoscute pentru sistemele de operare, va trebui să actualiza imaginea sursă particularizate.

Ubuntu 18.04 imagini

Pentru a actualiza o imagine particularizată sursă, trebuie să efectuați următoarele modificări:

  • Editați fișierul următor: /etc/Cloud/Cloud.cfg.d/90-Azure.cfg

  • Adăugaţi următorul cod la sfârşitul fişierului.

Important: Codul trebuie să fi adăugat exact așa cum se arată, inclusiv spații.

datasource:
   Azure:
     agent_command: [service, walinuxagent, start]

RHEL 7.4/7.5/7.6 şi CentOS 7,6 imagini

Dacă ați creat anterior RHEL/CentOS imaginile utilizând pașii (sau o metodă similară), trebuie să actualizați imaginea sursă din care ați creat SMS. Pași suplimentari care sunt necesare pentru a adăuga existente sursă VM Imagine configurației sunt următoarele:

Pasul 1

Editați fișierul următor:

/etc/cloud/cloud.cfg.d/91-azure_datasource.cfg

Important: Codul trebuie să fi adăugat exact așa cum se arată, inclusiv spații.

Adăugați următoarele linii la sfârşitul fişierului:

datasource:
   Azure:
     agent_command: [systemctl, start, waagent, --no-block]

Pasul 2

Actualizarea configuraţiei Agent după cum urmează:

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

pachetele de cloud-init

Toate pachetele de cloud-init care includ o remediere sunt în curs de actualizare. Microsoft cercetează această problemă și va publica mai multe informații în acest articol atunci când informațiile devine disponibil.

Întrebări frecvente

Întrebarea 1: A dobândit Microsoft acces la VM meu?

Răspunsul 1: Cheile de criptare sunt utilizate de gestionare identități și extensii nu sunt proiectate pentru acces de angajați Microsoft. Avem procese în loc să monitorizați, jurnal și preveni acest tip de acces. Ca măsură de precauție, vă sunt revizuirea toate jurnalele pentru a vă asigura că nu chei de clienți au fost accesat distribuitorilor. Certificate care sunt stocate în cheia seif care se face referire într-o implementare VM sau VMSS, angajați Microsoft nu orice acces la secretele.

Întrebarea 2: Sunt toate OSs cloud-init implementat și versiunile afectate?

Răspunsul 2: Nu. Am văzut această problemă cheie străină apar numai în sistemele de operare identificate. Am văzut nu se produce în versiunile mai vechi de Ubuntu. Aceasta se întâmplă deoarece aceste sisteme utilizează un alt mecanism pentru a seta chei publice.

Întrebarea 3: Includ pachetele afectate cloud-init distribuţii Linux fix?

Răspunsul 3: Lucrăm la adăugarea remedierile la pachetele pentru versiunile afectate și vom actualiza acest articol atunci când acest lucru s-a terminat.

Întrebarea 4: Va Microsoft actualiza automat orice SMS afectate?

Răspunsul 4: Nu. Microsoft nu va modifica conținutul SMS care deja ați asigurat accesul.

Q5: Politicile noastre de securitate împiedică automată a VM Linux cu conținut nepotrivite în authorized_keys de operare. Ce pot face despre acest astăzi?

A5: Puteţi elimina linia ofensator în siguranță din fișierul authorized_keys. Acest lucru nu va afecta keypair SSH pe care l-ați creat și control sau identitatea gestionate. Puteți face acest lucru manual sau executând un script particularizat sau comandă particularizată pe orice flota afectate.

Aveți nevoie de ajutor suplimentar?

Doriți mai multe opțiuni?

Explorați avantajele abonamentului, navigați prin cursurile de instruire, aflați cum să vă securizați dispozitivul și multe altele.

Comunitățile vă ajută să adresați întrebări și să răspundeți la întrebări, să oferiți feedback și să primiți feedback de la experți cu cunoștințe bogate.