เปรียบเทียบโปรไฟล์ OpenVPN สองไฟล์โดยไม่ทำให้คีย์รั่ว
diff ของข้อความอาจเปิดเผยคีย์ที่ฝังอยู่ได้ง่ายพอ ๆ กับการแสดงไดเรกทีฟที่เปลี่ยนไป เปรียบเทียบตามบทบาทบนสำเนาที่ได้รับการป้องกัน แล้วสร้างไฟล์วินิจฉัยที่ปิดข้อมูลแยกต่างหาก
สองโปรไฟล์ ตัวหนึ่งเชื่อมต่อได้ อีกตัวเชื่อมต่อไม่ได้ และวิธีดูสาเหตุอย่างรวดเร็วคือ diff ปัญหาคือ diff เดียวกันนั้นพิมพ์คีย์ส่วนตัวที่ฝังอยู่ คีย์แบบสแตติก และบล็อกข้อมูลรับรองใด ๆ ที่ไฟล์มีออกมา และผู้คนวางผลลัพธ์ลงในแชตก่อนจะสังเกตเห็น การตัดสินใจว่าจะเปรียบเทียบอะไรต้องมาก่อนการรันคำสั่ง เปรียบเทียบโครงสร้างและบทบาทบนสำเนาที่ได้รับการป้องกัน และสร้างไฟล์ที่ปิดข้อมูลแยกต่างหากเมื่อมีคนอื่นต้องดู
ไฟล์ .ovpn มีอะไรอยู่จริง ๆ
ไฟล์ .ovpn เป็นการกำหนดค่าที่มีบล็อกฝังตัวแบบเลือกได้ อาจมีใบรับรอง CA ใบรับรองไคลเอนต์ คีย์ส่วนตัว คีย์ tls-auth หรือ tls-crypt และไดเรกทีฟที่ชี้ไปยังไฟล์ภายนอกหรือขอข้อมูลรับรอง สองไฟล์อาจดูเกือบเหมือนกันและต่างกันเพียงภายในบล็อก หรือต่างกันในไดเรกทีฟเดียวที่เปลี่ยนการรับส่งทั้งหมด จำนวนบรรทัดไม่ได้บอกอะไรว่าสิ่งใดเกิดขึ้น
ความแตกต่างภายในบล็อกคีย์ไม่ใช่หลักฐานสาธารณะของสิ่งใด ใบรับรองที่ออกใหม่และใบรับรองที่มีคีย์ใหม่สามารถสร้างรูปแบบการเปลี่ยนแปลงเดียวกันได้ ดังนั้นความไม่ตรงกันของบล็อกบอกว่าวัสดุแตกต่างกัน ไม่ใช่การตัดสินใจใดสร้างมันขึ้นมา มองเป็นสัญญาณให้เปรียบเทียบฟิลด์ ไม่ใช่ข้อค้นพบ
เปรียบเทียบตามบทบาท ไม่ใช่ตามบรรทัด
ทำตามลำดับของการเชื่อมต่อเอง: จุดปลายและการรับส่งก่อน จากนั้นความเชื่อถือและตัวตนที่คาดหวัง จากนั้นการยืนยันตัวตนผู้ใช้ จากนั้นเส้นทาง DNS และฮุกสคริปต์ ลำดับนี้ตรงกับสิ่งที่ไคลเอนต์ทำ ดังนั้นความแตกต่างแรกที่คุณพบคือสิ่งแรกที่อาจทำให้การเชื่อมต่อขาด การเปรียบเทียบตามตัวอักษรกลับกระจายการตั้งค่าที่เกี่ยวข้องไปทั่วผลลัพธ์
การตรวจที่คำนึงถึงฟิลด์จะดูรายการเหล่านี้ตามลำดับนั้น ทุกสิ่งที่ไคลเอนต์ถามแบบโต้ตอบอยู่ในแถวการยืนยันตัวตน ไม่ใช่แถวความเชื่อถือ
remote,protoและพอร์ต รวมทุกบล็อกการเชื่อมต่อcaและcert: ผู้ออก เรื่อง และวันที่หมดอายุ- มีคีย์ส่วนตัวอยู่หรือไม่เลย ไม่ใช่มีอะไรอยู่ข้างใน
tls-authหรือtls-cryptการมีอยู่และทิศทางของคีย์- ไดเรกทีฟการยืนยันตัวตน รวมถึงการอ้างอิงไฟล์ข้อมูลรับรองใด ๆ
- เส้นทาง ตัวเลือก DNS และฮุกสคริปต์ที่รันเมื่อเชื่อมต่อ
เมื่อไฟล์มีหลายบล็อกการเชื่อมต่อ ให้เก็บแต่ละตัวเลือกไว้กับจุดปลายของมัน การเปรียบเทียบเพียงบรรทัด remote แรกอาจพลาดทางเลือกที่ไคลเอนต์เลือกจริงบนเครือข่ายนี้
ทำไม diff ธรรมดาจึงเป็นเครื่องมือที่ผิด
diff ธรรมดาสร้างขึ้นสำหรับข้อความ ไม่ใช่สำหรับความลับ มันจะพิมพ์คีย์ส่วนตัวลงในประวัติหน้าจออย่างเต็มใจ และจะไม่บอกคุณว่าไดเรกทีฟที่คุณจ้องอยู่ไม่เกี่ยวข้องกับความล้มเหลว การดึงฟิลด์ปลอดภัยกว่าและอ่านง่ายกว่าในเวลาเดียวกัน เพราะวัสดุใบรับรองสามารถเปรียบเทียบเป็นเมทาดาทาแทนไบต์
openssl x509 -in ca.crt -noout -subject -issuer -enddate
openssl x509 -in client.crt -noout -subject -issuer -enddate
grep -E '^(remote|proto|port|tls-auth|tls-crypt|route|dhcp-option)' profile.ovpn
สองคำสั่งแรกพิมพ์ตัวตนและความถูกต้องโดยไม่แตะคีย์ ผลลัพธ์จึงปลอดภัยที่จะวาง grep พิมพ์ชื่อและค่าของไดเรกทีฟแต่ไม่เคยพิมพ์เนื้อในของบล็อก ทำให้เป็นรอบแรกที่ถูกต้องเมื่อคุณสงสัยความแตกต่างของการรับส่งหรือเส้นทาง หากต้องเปรียบเทียบ블็อกเอง ให้เปรียบเทียบแฮชแทนเนื้อหา
สร้างสำเนาที่ปิดข้อมูลสำหรับตั๋ว
ลบความลับจริงและตัวระบุที่ไม่จำเป็นออกโดยเก็บชื่อฟิลด์และโครงสร้างให้พออธิบายความแตกต่าง เครื่องหมายรูปแบบเดียวกันยังคงเผยว่าวัสดุอยู่ที่ใดและยาวเท่าไร ดังนั้นตัดสินใจว่าสิ่งนั้นยอมรับได้หรือไม่ ตรวจสอบไฟล์แนบสุดท้ายด้วยตนเองแทนการเชื่อถือคำสั่งที่คุณจำได้ว่าได้รัน อย่าแก้ไขต้นฉบับที่ใช้งานอยู่เพียงเพื่อสร้างตัวอย่าง เพราะโปรไฟล์ที่ปิดข้อมูลไม่จำเป็นต้องรันได้และไม่ควรนำเข้ากลับอีก
เก็บต้นฉบับให้ระบุได้ด้วยชื่อไฟล์และแฮชแทนการคัดลอกไปยังสามไดเรกทอรีที่มีชื่อคล้ายกัน สตริงแฮชเพียงพอที่จะพิสูจน์ว่าไฟล์ใดถูกตรวจสอบและไม่มีค่าใช้จ่ายหากรั่วไหล ตัดสำเนาทิ้งเมื่อการเปลี่ยนแปลงปิดลง เพื่อให้คนถัดไปได้รับไฟล์ที่มีอำนาจเพียงหนึ่งเดียว
ผูกการเปรียบเทียบไว้กับความล้มเหลว
การเปรียบเทียบคุ้มค่าก็ต่อเมื่อมันตอบคำถามเกี่ยวกับการนำเข้าหนึ่งครั้งหรือความล้มเหลวของการเชื่อมต่อหนึ่งครั้ง ระบุขั้นตอนที่ล้มเหลวก่อน แล้วเปรียบเทียบเฉพาะฟิลด์ที่ขั้นตอนนั้นพึ่งพา การรวบรวมข้อมูลรับรองทั้งหมดของไคลเอนต์ไว้ในไดเรกทอรีเดียวทำให้การรั่วไหลครั้งถัดไปมีโอกาสมากขึ้นและการวินิจฉัยครั้งถัดไปช้าลง ยิ่งคำถามแคบลง รายการฟิลด์ที่ตอบได้ก็ยิ่งสั้นลง
หากไฟล์ใหม่มาจากผู้ดูแล ให้ยืนยันเส้นทางการเผยแพร่ก่อนแทนที่วัสดุความเชื่อถือ หลังการเปลี่ยนแปลง ให้ตรวจสอบสำเนาที่นำเข้าซึ่งไคลเอนต์เลือกจริงและผลลัพธ์ที่เจรจาได้ เพราะไดเรกทีฟอาจถูกละเลยหรืออ่านต่างออกไปโดยไคลเอนต์เวอร์ชันอื่น ไฟล์บนดิสก์ไม่ใช่หลักฐานของการเชื่อมต่อที่รันไปแล้ว ความหมายของไดเรกทีฟอยู่ใน คู่มือ OpenVPN 2.6.