การป้องกันความลับออกจากการควบคุมแหล่ง - เราเพิ่งจะย้ายปัญหาหรือไม่


10

ฉันสืบทอดบางโปรเจ็กต์ที่ความลับอยู่ในการควบคุมซอร์สใน App.config และไฟล์ที่คล้ายกัน โชคดีที่มันไม่ใช่ที่เก็บข้อมูลสาธารณะดังนั้นความเสี่ยงจึงไม่ร้ายแรงเท่าที่ควร ฉันกำลังมองหาวิธีที่ดีกว่าในการจัดการสิ่งนี้เช่น Azure KeyVault (แต่ฉันไม่ได้ตั้งใจจะให้คำถามนี้เฉพาะเจาะจงกับโซลูชันนั้น)

โดยทั่วไปเราไม่ได้เป็นเพียงแค่การแก้ปัญหาหรือไม่ ตัวอย่างเช่นด้วย Azure KeyVault รหัสแอปและความลับของแอปกลายเป็นสิ่งที่คุณต้องการหลีกเลี่ยงการควบคุมแหล่งที่มา นี่เป็นตัวอย่างทั่วไปที่น่าเสียดายที่สิ่งนี้มีแนวโน้มที่จะผิดพลาด วิธีการอื่น ๆ นั้นมีความคล้ายคลึงกันโดยใช้คีย์ API หรือไฟล์ที่เก็บคีย์ที่คุณต้องปกป้อง

สำหรับฉันแล้วดูเหมือนว่าผลิตภัณฑ์อย่าง Azure KeyVault นั้นไม่ดีกว่าและซับซ้อนกว่าการเก็บความลับของคุณในไฟล์กำหนดค่าแยกต่างหากและทำให้แน่ใจว่ามันอยู่ใน. gitignore หรือเทียบเท่า ไฟล์นี้จะต้องมีการแบ่งปันตามต้องการผ่านช่องทางด้านข้าง แน่นอนว่าผู้คนอาจจะส่งอีเมลถึงกันอย่างไม่ปลอดภัย ...

มีวิธีการจัดการความลับที่ไม่เพียง แต่ย้ายปัญหาหรือไม่ ฉันเชื่อว่าคำถามนี้มีคำตอบที่ชัดเจนคำตอบเดียว โดยการเปรียบเทียบถ้าฉันถามว่า HTTPS ไม่เพียงแค่เคลื่อนย้ายปัญหาคำตอบก็คือปุ่ม CA จะกระจายไปกับระบบปฏิบัติการของคุณและเราเชื่อมั่นพวกเขาเพราะเราเชื่อถือวิธีการกระจายของระบบปฏิบัติการ (ไม่ว่าเราควรเป็นคำถามแยกต่างหาก ... )

คำตอบ:


12

คุณสามารถบอกได้ว่าคุณเป็นเพียงการเคลื่อนย้ายปัญหา ในที่สุดจะต้องมีการจัดเก็บความลับบางแห่งที่แอปของคุณสามารถเข้าถึงได้เพื่อให้มีรหัสผ่านคีย์ ssh หรืออะไรก็ตาม

แต่ถ้าทำถูกต้องคุณกำลังย้ายปัญหาจากที่ที่ยากต่อการรักษาความปลอดภัยไปยังที่ที่คุณสามารถป้องกันได้ดีกว่า ตัวอย่างเช่นการใส่ความลับใน repo GitHub สาธารณะค่อนข้างเหมือนการทิ้งกุญแจบ้านไว้ที่ประตูหน้าบ้านของคุณ ใครก็ตามที่ต้องการพวกเขาจะไม่มีปัญหาในการหาพวกเขา แต่ถ้าคุณย้ายไปพูดที่เก็บคีย์บนเครือข่ายภายในโดยไม่มีการเชื่อมต่อภายนอกคุณจะมีโอกาสที่ดีกว่าในการรักษารหัสผ่านของคุณให้ปลอดภัย มันเหมือนกับเก็บกุญแจไว้ในกระเป๋าของคุณ มันเป็นไปไม่ได้ที่จะสูญเสียพวกเขา (เช่นเดียวกับการให้รหัสผ่าน Azure ของคุณเป็นต้น) แต่เป็นการ จำกัด การเปิดเผยของคุณเทียบกับการกดปุ่มของคุณไปที่ประตูของคุณ


4

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

วิธีที่ถูกต้องในการรักษาสิ่งแวดล้อม (หรือความลับทั่วโลก) คือการปฏิบัติต่อคุณเช่นเดียวกับคุณลักษณะการกำหนดค่าด้านสิ่งแวดล้อมอื่น ๆ พร้อมการควบคุมความปลอดภัยเพิ่มเติมสำหรับการวัดที่ดี โมดูลโค้ดที่ได้รับการออกแบบมาอย่างดีเป็นอิสระและเป็นเวอร์ชั่นควรจะเหมือนกันในทุกสภาพแวดล้อมเช่นสภาพแวดล้อมที่มีการปรับใช้เพื่อแจ้งแอปพลิเคชันเกี่ยวกับคุณลักษณะต่างๆ (เช่นรายละเอียดการเชื่อมต่อฐานข้อมูลหนังสือรับรองจุดสิ้นสุดบริการเว็บ รายละเอียดการกำหนดค่าที่สำคัญสำหรับแอปพลิเคชันของคุณถูกทำให้เป็นภายนอกและกลายเป็นพารามิเตอร์การกำหนดค่าของสภาพแวดล้อมของคุณ

ตอนนี้เพื่อจัดการข้อโต้แย้งของคุณ:

โดยทั่วไปแล้วเราไม่ได้เป็นเพียงปัญหา

ไม่มีสิ่งใดที่เป็นระบบความปลอดภัยที่สมบูรณ์แบบอย่างไรก็ตาม "การย้าย" ปัญหาไปยังพื้นที่ที่สามารถวางมาตรการและการควบคุมเพิ่มเติมได้จะช่วยเพิ่มความยากลำบากและลดโอกาสของการเปิดเผยความลับโดยไม่ตั้งใจหรือเป็นอันตราย กฎง่ายๆที่ควรปฏิบัติเมื่อออกแบบระบบที่ต้องปกป้องข้อมูลที่เป็นความลับคือการวางการควบคุมในสองครั้ง สิ่งที่ฉันหมายถึงคือเพื่อให้แน่ใจว่าการเปิดเผยข้อมูลที่เป็นความลับหรือเหตุการณ์ด้านความปลอดภัยที่เกิดขึ้นโดยบังเอิญหรือเป็นอันตรายนั้นจะต้องมีความล้มเหลวหรือในการควบคุมสองอย่างหรือมากกว่านั้น

ตัวอย่างที่ดีของสิ่งนี้อาจจัดเก็บไฟล์ที่เข้ารหัสบนเซิร์ฟเวอร์ ฉันยังมีคีย์ถอดรหัสลับที่ฉันต้องเก็บเป็นความลับในไฟล์อื่น

  • จัดเก็บคีย์และไฟล์ที่เข้ารหัสในเซิร์ฟเวอร์เดียวกัน (0 การควบคุมใครก็ตามที่เข้าถึงเซิร์ฟเวอร์สามารถรับข้อมูลที่เป็นความลับได้)
  • ดำเนินการตามขั้นตอนด้านบนและป้องกันการเข้าถึงไฟล์ทั้งสองไฟล์เพื่อให้ผู้ใช้แอปพลิเคชันรันไทม์ของระบบปฏิบัติการสามารถอ่านได้ (1 การควบคุมการทำลายรหัสผ่านของผู้ใช้รูทหรือผู้ใช้รันไทม์ของแอปพลิเคชัน
  • จัดเก็บคีย์ในห้องเก็บกุญแจภายนอกรับคีย์พร้อมมาตรการความปลอดภัยหลายรายการเช่นรายการที่อยู่ IP การตรวจสอบความถูกต้องใบรับรองและมาตรการอื่น ๆ สำหรับแอปพลิเคชันที่สามารถเข้าถึงไฟล์ที่เข้ารหัสในระบบไฟล์ (การควบคุมหลายตัวการควบคุมความปลอดภัยที่ล้มเหลวหลายครั้งจะต้องเกิดขึ้นเพื่อให้ข้อมูลที่เป็นความลับถูกโจมตี)

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

สำหรับผมแล้วดูเหมือนว่าผลิตภัณฑ์อย่าง Azure KeyVault นั้นไม่ได้ดีกว่าและซับซ้อนกว่ามาก

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

กว่าเก็บความลับของคุณในไฟล์กำหนดค่าแยกต่างหากและตรวจสอบให้แน่ใจว่าเป็นไฟล์. gitignore หรือเทียบเท่า

จนกว่าจะมีใครตรวจสอบโดยไม่ได้ตั้งใจเข้าไปในตัวควบคุมแหล่งที่มาตอนนี้ความลับจะถูกฝังอยู่ในประวัติศาสตร์การควบคุมแหล่งที่มาตลอด

แน่นอนว่าผู้คนอาจจะส่งอีเมลถึงกันอย่างไม่ปลอดภัย ...

ความปลอดภัยไม่ได้เป็นเพียงปัญหาทางเทคนิค แต่เป็นปัญหาของคนเช่นกัน นั่นจะเป็นหัวข้อนอกเรื่อง แต่ฉันรู้สึกว่า ณ จุดนี้คุณกำลังพยายามที่จะพูดออกมาจากการทำสิ่งที่จำเป็น

มีวิธีการจัดการความลับที่ไม่เพียง แต่ย้ายปัญหาหรือไม่ ฉันเชื่อว่าคำถามนี้มีคำตอบที่ชัดเจนคำตอบเดียว โดยการเปรียบเทียบถ้าฉันถามว่า HTTPS ไม่เพียงแค่เคลื่อนย้ายปัญหาคำตอบก็คือปุ่ม CA จะกระจายไปกับระบบปฏิบัติการของคุณและเราเชื่อมั่นพวกเขาเพราะเราเชื่อถือวิธีการกระจายของระบบปฏิบัติการ

การรักษาความปลอดภัยไม่ได้ทำให้ปัญหาหายไปตลอดเวลาส่วนใหญ่จะควบคุมสิ่งรอบตัว การเปรียบเทียบของคุณสั้นกระชับเพราะจริง ๆ แล้วการเข้ารหัสคีย์สาธารณะทำอะไร เรากำลัง "ย้ายปัญหา" ไปที่ CA โดยการมอบความไว้วางใจใน CA ของเราให้แก่ผู้อื่นเพื่อรับรองบัตรประจำตัวของนิติบุคคลที่เป็นเจ้าของใบรับรองสาธารณะ โดยพื้นฐานแล้วไม่มีอะไรสั้น ๆ ของสตริงของความล้มเหลวที่ร้ายแรง (เช่นการสูญเสียความน่าเชื่อถือใน CA) จะต้องเกิดขึ้นเพื่อนำไปสู่ปัญหาด้านความปลอดภัย

เช่นเดียวกับหลาย ๆ สิ่งความปลอดภัยเป็นสิ่งที่คุณต้องคำนึงถึงตามอัตวิสัยลักษณะของข้อมูลผลที่ตามมาของการเปิดเผยความอยากอาหารความเสี่ยงงบประมาณ ฯลฯ


0

ควรพิจารณาgit secretโครงการ ( http://git-secret.io/ ) เพื่อเก็บไฟล์ลับใน git repo ที่เข้ารหัสด้วยคีย์ asymetric กุญแจสาธารณะยังอยู่ใน repo คีย์ส่วนตัวไม่ได้

คุณสมบัติของวิธีนี้คือ:

  • เมื่อผู้ใช้ / เครื่องจักรใหม่จำเป็นต้องถอดรหัสไฟล์ที่ปลอดภัย - เขาเผยแพร่ / ส่งคีย์ gpg สาธารณะ (gnu ยามรักษาความปลอดภัยหรือ aka pgp) สาธารณะของเขา ผู้ใช้ที่สามารถถอดรหัสไฟล์ที่รักษาความปลอดภัยแล้วสามารถเข้ารหัสด้วยคีย์เพิ่มเติมใหม่หลังจากผู้ใช้ใหม่สามารถถอดรหัสไฟล์ที่ปลอดภัยด้วยรหัสส่วนตัวของเขา
  • เห็นได้ชัดว่าคุณต้องควบคุมผู้ที่สามารถคอมมิท / พุชไปยังที่เก็บ git มิฉะนั้นผู้โจมตีสามารถส่งมอบกุญแจสาธารณะของเขาเองและรอจนกว่าผู้ที่ได้รับอนุญาตจะทำการเข้ารหัสไฟล์ที่ปลอดภัยด้วยกุญแจสาธารณะที่ถูกบุกรุกใหม่นี้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.