ข้ามไปที่เนื้อหาหลัก
การสนับสนุน
ลงชื่อเข้าใช้
ลงชื่อเข้าใช้ด้วย Microsoft
ลงชื่อเข้าใช้หรือสร้างบัญชี
สวัสดี
เลือกบัญชีอื่น
คุณมีหลายบัญชี
เลือกบัญชีที่คุณต้องการลงชื่อเข้าใช้

สรุป

นอกเหนือจากการอนุญาตให้ผู้ใช้ให้ตนเอง keypairs SSH สำหรับการรับรองความถูกต้อง แพลตฟอร์ม Microsoft Azure อาศัย keypairs SSH เพื่อเปิดใช้งานคุณลักษณะบางอย่างที่ถูกเพิ่มไปยังเครื่องเสมือน (VM) ในขณะที่ปรับใช้ เราเพิ่งพบว่า ในบางสถานการณ์จำกัด คีย์สาธารณะจากใบรับรองเหล่านี้แพลตฟอร์ม Azure สามารถโดยไม่คาดคิดเพิ่มไปยังแฟ้ม.ssh/authorized_keys สถานการณ์เหล่านี้จะครอบคลุมเฉพาะในสถานการณ์ที่ VM ถูกเตรียมใช้งาน โดยใช้ cloud-เริ่มต้น และผู้ใช้เลือกคุณลักษณะ Azure เพิ่มเติมที่อาศัยใบรับรอง เช่นข้อมูลเฉพาะตัวของบริการจัดการระบบ

ลักษณะการทำงานที่ไม่คาดคิดนี้เกิดขึ้นเนื่องจาก มีการเปลี่ยนแปลงในตรรกะการเตรียมใช้งานระบบปฏิบัติการที่เฉพาะเจาะจง เหล่านี้คือระบบที่ใช้ cloud init และที่ไม่ได้ตั้งใจติดตั้งคีย์สาธารณะได้จากใบรับรองทั้งหมดที่พร้อมใช้งานใน VM ลงในแฟ้ม ssh ได้รับอนุญาตคีย์ระหว่างการสร้าง VM. 

เมื่อต้องการเรียนรู้เพิ่มเติม ไปที่2019-CVE-0816

ข้อมูลเพิ่มเติม

รายละเอียดของสถานการณ์จำลอง

เป็นที่รู้จักตรรกะ init เมฆที่กล่าวถึงในส่วน "สรุป" อยู่ในขณะนี้มีอยู่ในรูปของ Azure สำหรับ Ubuntu 18.04 นอกเหนือจาก 7.4/7.5/7.6 RHEL อย่างสาธารณะและรูปเมฆ init CentOS 7.4 นั้นอาจมีอยู่ในรูปแบบกำหนดเองที่ใช้ระบบปฏิบัติการเหล่านี้    ถ้าคุณเปิดใช้งานลักษณะการทำงานต่อไปนี้อย่างใดอย่างหนึ่งในขณะที่คุณเตรียมใช้รูป Linux คุณอาจเห็นคีย์เพิ่มเติม ที่ไม่คาดคิดในแฟ้ม.ssh/authorized_keys เช่นต่อไปนี้:

  • ข้อมูลเฉพาะตัวที่มีการจัดการ

  • ส่วนขยายที่ มีการตั้งค่าที่ได้รับการป้องกัน

  • ปรับใช้กับชุดเก็บคีย์คีย์ใน VM VM

ระบุ และ remediate VMs ที่มีอยู่

ระบุ

เมื่อต้องการตรวจสอบว่า คุณมีแป้นเพิ่มเติม ตรวจทานแฟ้มคีย์ที่ได้รับอนุญาต (แฟ้ม.ssh/authorized_keys vi) เพื่อตรวจสอบว่า มีการเพิ่มคีย์เพิ่มเติมใด ๆ ที่คุณไม่ได้ตั้งใจที่จะรวมไว้

ไซต์มีความปลอดภัยไปด้วยตนเองเอาใด ๆ เติม ssh สาธารณะแป้นขึ้นไปซึ่งอาจมีการเพิ่ม จะไม่มีผลต่อลักษณะการทำงานที่มีการติดตั้งพร้อมกับการ VM ดังกล่าวจะไม่ส่งผลต่อการระบุ SSH คู่ของคีย์สำหรับการรับรองความถูกต้อง

ถ้าคุณไม่ทราบ หรือไม่สามารถแยกความแตกต่างที่คีย์สาธารณะในแฟ้ม.ssh/authorized_keys คุณระบุสำหรับการรับรองความถูกต้อง ให้ทำตามขั้นตอนเหล่านี้:

  1. ตรวจทานการปรับใช้แม่แบบ:

    1. ssh คีย์สาธารณะ

    2. ssh คีย์ในการตั้งค่าคอนฟิก cloud init

  2. เรียกการใช้งาน ssh คีย์ในเวลาที่สร้างจากภายใน VM ถ้าคุณสามารถเข้าถึง sudo/ราก เมื่อต้องการทำเช่นนี้ ให้ทำตามขั้นตอนเหล่านี้

    1. ตรวจสอบการตั้งค่าคอนฟิก init เมฆที่ถูกส่งผ่านใน CustomData: sudo cat /var/lib/waagent/ovf-env.xml | grep "<ns1:CustomData>"ใช้ค่า CustomData และจากนั้น ใช้ base64 ถอดรหัสเพื่อรับคีย์สาธารณะที่คุณปรับใช้: echo "<customData value>" | base64 -D

    2. อีกวิธีหนึ่งคือ ตรวจสอบการอินสแตนซ์ Meta ข้อมูลการบริการ (IMDS) เมื่อต้องการดู ssh คีย์สาธารณะที่ผ่านเข้ามาใน ssh คุณสมบัติของคีย์สาธารณะของสร้าง VM: curl -H Metadata:true "http://169.254.169.254/metadata/instance/compute/publicKeys?api-version=2018-04-02&format=json"

Remediate

ถ้าคุณได้ระบุใบรับรองที่คุณไม่ต้องการปรับใช้ VM จะไม่ เพิ่มเติม คุณสามารถลบสิ่งเหล่านี้ โดยการลบบรรทัดสอดคล้องจากแฟ้ม authorized_keys

เรียกใช้ด้านที่ ด้วยการเชื่อมต่อแบบ VM มีการโต้ตอบ หรือใช้นามสกุลของสคริปต์กำหนดเองหรือ RunCommand ที่ข้ามหลาย VMs

VMs ปรับใช้ โดยใช้ส่วนขยายที่มีป้องกันการตั้งค่าหรือข้อมูลเฉพาะตัวที่มีการจัดการ

ใช้สคริปต์ต่อไปนี้เพื่อลบคีย์สาธารณะจากใบรับรองที่ถูกปรับใช้กับส่วนขยาย VM หรือจัดการข้อมูลเฉพาะตัว ดำเนินการนี้จะเอาไม่คีย์ที่ระบุไว้ เมื่อคุณปรับใช้ VM หรือ ถ้า VM ถูกปรับใช้กับชุดเก็บคีย์คีย์

สิ่งสำคัญ

เราขอแนะนำให้ คุณสำรองแฟ้ม authorized_keys ก่อนที่คุณเรียกใช้สคริปต์นี้

 

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

หลังจากรันสคริปต์ ตรวจสอบแฟ้ม ssh/authorized_keys เพื่อให้แน่ใจว่า มีเฉพาะคีย์สาธารณะทราบ

VMs ที่ปรับใช้กับความลับกชุดเก็บคีย์

เมื่อต้องการระบุว่าคีย์ถูกเพิ่มเมื่อปรับใช้กับแป้นกชุดเก็บคีย์ ให้ทำตามขั้นตอนเหล่านี้:

  1. ดูชื่อของใบรับรองกชุดเก็บคีย์ที่คุณปรับใช้ โดยใช้ VM ทบทวนรหัสของการปรับใช้ไม่ Az หรือแม่แบบ ARM หรือรันไม่ Az นี้: az vm show --resource-group <resourceGroupName> --name <vmName> | grep certificateUrlคำตอบจะแสดงชื่อของใบรับรอง: "certificateUrl": "https://<keyVaultname>.vault.azure.net/secrets/<certName>/xxxxxxxxxxxxx"

  2. ดาวน์โหลดใบรับรอง: az keyvault certificate download --vault-name <keyVaultName> --name <certName> --encoding PEM --file public.pem

  3. ขยายคีย์สาธารณะ: openssl x509 -in public.pm -pubkey -noout | ssh-keygen -f /dev/stdin -i -m PKCS8

  4. เปรียบเทียบผลลัพธ์จากขั้นตอนก่อนหน้าเพื่อใบรับรองเหลืออยู่ในไฟล์ ssh/authorized_keys vi .ssh/authorized_keys file

การแก้ไข

รูป azure MarketPlace

มีการใช้การแก้ไขปัญหากับเมฆเริ่มต้นในรูป 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

รูปแบบกำหนดเอง

ถ้าคุณกำลังใช้รูปภาพกำหนดเองที่ถูกเตรียมใช้งาน โดยเมฆเริ่มต้นสำหรับระบบปฏิบัติการที่รู้จัก คุณจะต้องปรับปรุงรูปแบบกำหนดเองของต้นฉบับของคุณ

รูป Ubuntu 18.04

การปรับปรุงรูปแบบกำหนดเองเป็นแหล่งที่มา คุณต้องทำการแก้ไขต่อไปนี้:

  • แก้ไขแฟ้มต่อไปนี้: /etc/cloud/cloud.cfg.d/90-azure.cfg

  • เพิ่มรหัสต่อไปนี้ลงในส่วนท้ายของแฟ้ม

สิ่งสำคัญ

ต้องเพิ่มรหัสเหมือนกับที่แสดง รวมเว้นวรรค

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

RHEL 7.4/7.5/7.6 และ CentOS 7.6 ภาพพื้นหลัง

ถ้าคุณเคยสร้างรูป RHEL/CentOS โดยใช้ขั้นตอนเหล่านี้(หรือวิธีการคล้ายกัน), คุณต้องปรับปรุงรูปต้นฉบับที่คุณสร้างขึ้นมาแบบ VMs ต่อไปนี้คือ ขั้นตอนเพิ่มเติมที่จำเป็นเพื่อเพิ่มโครงรูป VM แหล่งที่มีอยู่ของคุณ:

ขั้นตอนที่ 1

แก้ไขแฟ้มต่อไปนี้:

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

สิ่งสำคัญ

ต้องเพิ่มรหัสเหมือนกับที่แสดง รวมเว้นวรรค

เพิ่มบรรทัดต่อไปนี้ลงในส่วนท้ายของแฟ้ม:

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

ขั้นตอนที่ 2

ปรับปรุงการตั้งค่าคอนฟิกของบริษัทตัวแทนดังนี้:

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

แพคเกจ cloud init

แพคเกจ init เมฆทั้งหมดที่มีการแก้ไขกำลังอยู่ในระหว่างการปรับปรุง Microsoft กำลังทำการวิจัยปัญหานี้ และจะโพสต์ข้อมูลเพิ่มเติมในบทความนี้เมื่อข้อมูลที่พร้อมใช้งาน

คำถามที่ถามบ่อย

Q1: มี Microsoft กำไรเข้าถึง VM ของฉันได้อย่างไร

A1: ใช้คีย์การเข้ารหัสลับในการจัดการรหัสประจำตัว และนามสกุลไม่ออกแบบมาสำหรับการเข้าถึง โดยพนักงานของ Microsoft เรามีกระบวนการในการตรวจสอบ บันทึก และป้องกันการเข้าถึงชนิดนี้ เป็นการระวังรักษาความปลอดภัย เราจะตรวจทานแฟ้มบันทึกทั้งหมดเพื่อให้แน่ใจว่า ไม่มีคีย์ลูกค้ามีการเข้าถึงโดยไม่เหมาะสม สำหรับใบรับรองที่เก็บอยู่ในชุดเก็บคีย์ที่ถูกอ้างอิงในการปรับใช้ VM หรือ VMSS พนักงานของ Microsoft ไม่ได้เข้าถึงเคล็ดลับ

Q2: มี OSs init เมฆที่ปรับใช้และรุ่นที่ได้รับผลกระทบทั้งหมดหรือไม่

A2: ไม่ เราได้เห็นประเด็นหลักนี้ไม่เกี่ยวข้องที่เกิดขึ้นในระบบปฏิบัติการที่ระบุเท่านั้น เราไม่เห็นจะเกิดขึ้นใน Ubuntu รุ่นที่เก่ากว่า เป็นเช่นนี้ เพราะระบบเหล่านั้นใช้กลไกต่าง ๆ เพื่อตั้งค่าคีย์สาธารณะ

Q3: ทำแพ็คเกจ init เมฆที่ได้รับผลกระทบสำหรับการกระจายการ Linux รวมการแก้ไขหรือไม่

A3: เรากำลังดำเนินการในการเพิ่มการแก้ไขไปที่แพคเกจสำหรับรุ่นได้รับผลกระทบ และเราจะปรับปรุงบทความนี้เมื่องานนั้นเสร็จสมบูรณ์แล้ว

Q4: จะ Microsoft อัพเด VMs ที่ได้รับผลกระทบใด ๆ หรือไม่

A4: ไม่ Microsoft จะไม่เปลี่ยนแปลงเนื้อหาของ VMs ที่คุณได้เตรียมใช้งานแล้ว

Q5: นโยบายความปลอดภัยของเราป้องกันไม่ให้ฉันทำ VM Linux กับเนื้อหาที่เกี่ยวข้องใน authorized_keys ฉันสามารถทำอะไรเกี่ยวกับเรื่องนี้ในวันนี้หรือไม่

A5: คุณสามารถลบบรรทัดมีได้อย่างปลอดภัยจากแฟ้ม authorized_keys สิ่งนี้จะกระทบ keypair SSH ที่คุณสร้างขึ้น และควบคุม หรือข้อมูลประจำตัวที่มีการจัดการ คุณสามารถทำเช่นนี้ด้วยตนเอง หรือ โดยการเรียกใช้สคริปต์แบบกำหนดเองหรือคำสั่งที่กำหนดเองระหว่างกลุ่มที่ได้รับผลกระทบใด ๆ

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ

ชุมชนช่วยให้คุณถามและตอบคําถาม ให้คําติชม และรับฟังจากผู้เชี่ยวชาญที่มีความรู้มากมาย

ข้อมูลนี้เป็นประโยชน์หรือไม่

คุณพึงพอใจกับคุณภาพภาษาเพียงใด
สิ่งที่ส่งผลต่อประสบการณ์ใช้งานของคุณ
เมื่อกดส่ง คำติชมของคุณจะถูกใช้เพื่อปรับปรุงผลิตภัณฑ์และบริการของ Microsoft ผู้ดูแลระบบ IT ของคุณจะสามารถรวบรวมข้อมูลนี้ได้ นโยบายความเป็นส่วนตัว

ขอบคุณสำหรับคำติชมของคุณ!

×