ถอดรหัสทราฟฟิก SSL ด้วยเครื่องมือบรรทัดคำสั่ง openssl


2

ฉันกำลังพยายามดึง / เข้ารหัส / ถอดรหัสข้อมูลด้วยตนเองด้วยopensslเครื่องมือบรรทัดคำสั่ง

ฉันได้ตรวจสอบ RFC5246 เพื่อหาสิ่งที่ฉันต้องทำ มันไม่ชัดเจนสำหรับฉันถ้าฉันจะทำขั้นตอนนี้ด้วยเครื่องมือนั้น ฉันสมมติว่ารหัสส่วนตัวในคำอธิบายคือรหัสส่วนตัวที่สร้างขึ้นเมื่อฉันสร้างใบรับรองที่ลงชื่อด้วยตนเอง

เมื่อ RSA ใช้สำหรับการรับรองความถูกต้องของเซิร์ฟเวอร์และการแลกเปลี่ยนคีย์ pre_master_secret 48- ไบต์จะถูกสร้างโดยไคลเอนต์เข้ารหัสภายใต้คีย์สาธารณะของเซิร์ฟเวอร์และส่งไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์ใช้ไพรเวตคีย์เพื่อถอดรหัส pre_master_secret ทั้งสองฝ่ายจะแปลง pre_master_secret เป็น master_secret ดังที่ระบุไว้ข้างต้น

ใครสามารถบอกฉันได้ว่าการสันนิษฐานของฉันถูกต้องหรือไม่ สามารถใช้opensslเครื่องมือบรรทัดคำสั่งและให้มาพร้อมกับคีย์ส่วนตัวเซิร์ฟเวอร์ของฉันและ pre_master_secret ที่เข้ารหัสจากไคลเอนต์เพื่อสร้างคีย์ pre_master สำหรับเซิร์ฟเวอร์เพื่อให้สามารถใช้สร้างคีย์หลักได้หรือไม่

ถ้าเป็นเช่นนั้นฉันไม่แน่ใจว่าจะทำอย่างไรเพราะฉันไม่คุ้นเคยกับเครื่องมือมากนัก

อีกสิ่งที่ฉันควรชี้ให้เห็นก็คือชุดรหัสที่ฉันกำลังทำงานคือ TLS_RSA_WITH_AES_256_CBC_SHA และฉันเห็นใน Wireshark ว่า pre_master_secret จากไคลเอ็นต์ยาว 256 ไบต์

คำตอบ:


4

ฉันไม่แน่ใจทั้งหมด แต่ฉันคิดว่าคำตอบคือไม่ opensslลูกค้าบรรทัดคำสั่งเป็นชุดที่แตกต่างกันของเครื่องมือ คำสั่ง X.509 อาจมีประโยชน์ในการจัดการใบรับรอง แต่คำสั่งการเข้ารหัสมักไม่ค่อยมีประโยชน์สำหรับสิ่งอื่นใดนอกจากทดสอบ OpenSSL เอง

หากคุณต้องการคำนวณการเข้ารหัสลับด้วยอัลกอริทึมทั่วไปฉันขอแนะนำบรรทัดคำสั่งแบบโต้ตอบ Python ที่มีไลบรารีCryptodome

แต่ในการถอดรหัสการเชื่อมต่อ SSL วิธีที่ง่ายที่สุดคือการใช้ Wireshark บอก Wireshark ว่าจะหาคีย์ส่วนตัวได้ที่ไหนและจะถอดรหัสการเชื่อมต่อ TLS ที่ใช้การเข้ารหัส RSA สำหรับการเชื่อมต่อโดยใช้ Diffie-Hellman ชั่วคราวคุณไม่สามารถถอดรหัสการจราจรที่มีคีย์เพียงอย่างเดียวที่คุณต้องการข้อมูลเพิ่มเติมจากทั้งลูกค้าหรือเซิร์ฟเวอร์


โปรดทราบว่าการใช้TLS_RSA_WITH_AES_256_CBC_SHAciphersuite เป็นแนวคิดที่ไม่ดีด้วยเหตุผลหลายประการ:

  • มันไม่มีความลับส่งต่อดังนั้นหากคีย์ส่วนตัวของเซิร์ฟเวอร์ไม่ปลอดภัยการเชื่อมต่อทั้งหมดที่ทำด้วยคีย์นี้จะถูกโจมตีด้วยเช่นกัน Ciphersuites ที่ใช้การแลกเปลี่ยนคีย์ Diffie-Hellman (ที่มี EDH หรือ ECDHE ในชื่อของพวกเขา) มีความลับไปข้างหน้า
  • มันใช้การถอดรหัส RSA ซึ่งเกี่ยวข้องกับการแพ็ดดิ้งซึ่งเป็นแหล่งที่มาของข้อบกพร่องการใช้งานและการรั่วไหลผ่านช่องทางด้านข้าง Ciphersuites กับ EDH หรือ ECDHE ในชื่อของพวกเขานอกเหนือจาก RSA หรือกับ DSA หรือ ECDSA ใช้ลายเซ็นแทนการถอดรหัสและมีโอกาสน้อยที่จะได้รับข้อบกพร่องในการใช้งาน
  • มันใช้การถอดรหัส CBC ซึ่งเกี่ยวข้องกับการแพ็ดดิ้งซึ่งเป็นแหล่งที่มาของข้อบกพร่องการใช้งานและการรั่วไหลผ่านช่องทางด้านข้าง Ciphersuites ที่ไม่มี CBC ในนามของพวกเขามีโอกาสน้อยที่จะได้รับข้อบกพร่องในการใช้งาน

1

RSAES-PKCS1v1_5 ซึ่งการแลกเปลี่ยนคีย์ SSL / TLS-through-1.2 ที่ใช้ในการแลกเปลี่ยนคีย์ RSA นั้นสามารถถอดรหัสได้โดยการดำเนินการตามคำสั่งของ OpenSSL rsautlหรือpkeyutl (หลังตั้งแต่ 1.1.0 ในปี 2010) ดูหน้าคนของตนซึ่งควรจะมีอยู่ในระบบของคุณถ้าไม่ Windows หรือออนไลน์

หมายเหตุสิ่งนี้จะให้ข้อมูลลับเกี่ยวกับผู้ดูแลระบบซึ่งคุณไม่สามารถถอดรหัสการรับส่งข้อมูล คุณต้องใช้ premaster plus nonces เพื่อรับความลับของมาสเตอร์และจากนั้น secret secret และ nonces เพื่อให้ได้มาซึ่งคีย์การทำงาน (พหูพจน์) ฟังก์ชั่นที่ได้รับ 'PRF' แตกต่างกันระหว่าง SSLv3 (ไม่ได้ใช้งาน), TLS 1.0 และ 1.1 (RFCs 2246 และ 4346) และ TLS 1.2 (RFC 5246) (PRF จะแตกต่างกันอีกครั้งใน TLS 1.3 ตามที่ร่างไว้ แต่จะกำจัดการแลกเปลี่ยนคีย์ RSA ธรรมดาทั้งหมดด้วย)

Commandline ไม่สามารถเข้าถึง SSL / TLS PRFs ได้โดยตรง แต่สามารถทำ HMACs ที่สร้างขึ้น (ยกเว้น SSLv3) ดู man page สำหรับdgstในสถานที่เดียวกันกับด้านบนและหมายเหตุ-hmac $keyสามารถจัดการลำดับไบต์ที่สามารถส่งผ่านจาก shell / etc ซึ่งไม่ใช่ทั้งหมดดังนั้นคุณอาจต้องการ-mac hmac -macopt hexkey:$hexkeyแทน

ที่กล่าวว่าฉันเห็นด้วยกับ Gilles มันง่ายกว่ามากที่จะปล่อยให้ wireshark ทำ หากปัญหาของคุณคือคุณมีข้อมูลในรูปแบบอื่นนอกเหนือจากไฟล์ดักจับ wireshark distros มาพร้อมกับเครื่องมือ commandline เสริมหลายตัวสำหรับจัดการไฟล์ที่สามารถสร้างการดักจับแบบปลอมซึ่งในกรณีนี้ wireshark หรือ tshark main สามารถถอดรหัสได้


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

(1) ฉันไม่รู้ MUMPS (แม้ว่าฉันได้ยินว่า 'ย่อ' เป็น M?) ดังนั้นฉันไม่สามารถบอกได้ว่าจะจัดการบรรทัดคำสั่ง openssl ได้หรือไม่ นั่นอาจเป็นเรื่องเกี่ยวกับ stackoverflow (ไม่ใช่ที่นี่) (2) ปรัชญาสแต็คทั่วไปคือมี 1 คำถามต่อ Q และคำตอบสำหรับ Q นั้น (พร้อมลิงก์หากช่วยอธิบาย) ดังนั้นแต่ละคนสามารถค้นพบได้โดยการค้นหาปัญหาหรือหัวข้อเหล่านั้น แต่ถ้าการติดตามของคุณใกล้เคียงกับต้นฉบับคุณอาจหลีกเลี่ยงการแก้ไข Q นี้เพื่อเพิ่ม (แต่ไม่สุภาพที่จะลบปัญหาที่ได้แก้ไขไปแล้ว)
dave_thompson_085

บางครั้ง MUMPS เรียกว่า "M" ใช่คุณถูกต้อง ฉันได้ถามคำถามติดตามที่นี่ลิงค์ ] ฉันหวังว่าจะสามารถจัดการทุกอย่างที่ฉันต้องการใน MUMPS ที่ openssl ไม่สามารถทำได้ จนถึงตอนนี้ฉันพยายามอ่าน RFC และทำตามแม้ว่าฉันจะยอมรับว่าฉันกำลังดิ้นรนอยู่บ้าง โปรแกรม MUMPS ของฉันกำลังให้บริการใบรับรองและฉันอยู่ในขั้นตอนการเจรจากับข้อความจับมือ (s) ที่ดูดี หากคุณหรือใครบางคนสามารถตรวจสอบการติดตามของฉันและช่วยเหลือในครั้งต่อไปที่จะช่วยได้
David B
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.