กำลังรับรหัส RSA จากอินสแตนซ์ที่ใช้งานอยู่ของ Apache หรือไม่


26

ฉันสร้าง RSA keypair สำหรับใบรับรอง SSL และเก็บคีย์ส่วนตัว/etc/ssl/private/server.keyไว้ น่าเสียดายที่นี่เป็นเพียงสำเนาส่วนตัวของรหัสส่วนตัวที่ฉันมี

จากนั้นฉันเขียนทับไฟล์บนดิสก์โดยไม่ตั้งใจ (ใช่ฉันรู้)

Apache ยังคงทำงานและยังคงให้บริการคำขอ SSL ทำให้ฉันเชื่อว่าอาจมีความหวังในการกู้คืนรหัสส่วนตัว (อาจมีลิงก์สัญลักษณ์อยู่ที่ใดที่หนึ่ง/procหรือบางอย่าง)

เซิร์ฟเวอร์นี้ใช้งาน Ubuntu 12.04 LTS

คำตอบ:


39

ความสำเร็จ!

ฉันสามารถดึงคีย์ส่วนตัว แต่มันไม่ง่ายเลย นี่คือสิ่งที่คุณต้องทำ:

  1. ตรวจสอบให้แน่ใจว่าคุณไม่รีสตาร์ทเซิร์ฟเวอร์หรือ Apache เกมสิ้นสุดลง ณ จุดนั้น นั่นหมายถึงการทำให้แน่ใจว่าไม่มีบริการการตรวจสอบรีสตาร์ท Apache
  2. คว้าไฟล์นี้ - รหัสแหล่งสำหรับเครื่องมือที่ชื่อกุญแจพิเศษ
  3. แตกซอร์สโค้ดและปรับบรรทัดที่ 9 Makefile.mainเป็น:

    $(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS)
    

    (ขอให้สังเกตว่า$(OBJS)และ$(LDFLAGS)มีการกลับรายการในลำดับ)

  4. ./build.shวิ่ง
  5. คว้า PID ของ Apache โดยใช้:

    service apache2 status
    
  6. รันpasse-partoutคำสั่งในฐานะรูท:

    sudo passe-partout [PID]
    

    ... ซึ่ง[PID]เป็นค่าที่คุณได้รับในขั้นตอนที่ # 5

  7. หากโปรแกรมสำเร็จไดเรกทอรีปัจจุบันของคุณจะมีคีย์พิเศษมากมาย:

    you@server:~# ls
    id_rsa-0.key  id_rsa-1.key  id_rsa-2.key
    

หากทุกอย่างเป็นไปด้วยดี (และหวังว่าจะเป็นเช่นนั้น) หนึ่งในกุญแจเหล่านั้นคือกุญแจที่คุณต้องการ อย่างไรก็ตามหากคุณมีใบรับรอง / คีย์ไฟล์มากกว่าหนึ่งรายการในการใช้งานคุณจะต้องพิจารณาว่าเป็นไฟล์ใด นี่คือวิธีที่คุณทำ:

ก่อนคว้าสำเนาของใบรับรองที่ตรงกับคีย์ลงนาม สมมติว่าไฟล์มีชื่อserver.crtเรียกใช้คำสั่งต่อไปนี้:

openssl x509 -noout -modulus -in server.crt | openssl md5

สิ่งนี้จะส่งออกค่าที่คุณจะต้องจับคู่กับแต่ละปุ่ม สำหรับแต่ละคีย์ให้รันคำสั่งต่อไปนี้:

openssl rsa -noout -modulus -in id_rsa-0.key | openssl md5

หากหนึ่งในนั้นตรงกับที่คุณพบกุญแจ


เครดิต: บทความนี้ชี้ให้ฉันเห็นว่าส่วนหนึ่ง


2
หาสิ่งที่ดีในยูทิลิตี้นั้น
Falcon Momot

3
+1 สำหรับการเขียน (และ +1 เสมือนสำหรับผู้เขียนบทความ: การละอายใจและยังคงจดบันทึกช่วยผู้อื่นในสถานการณ์นั้น)
Joachim Sauer

2
โอ้มันยอดเยี่ยมและสกปรกมาก ฉันรักมัน.
Tom O'Connor

8

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

ในทางทฤษฎีคุณสามารถดึงมันออกมาจากอิมเมจกระบวนการหากคุณแนบดีบักเกอร์แม้ว่าพวกเขาจะปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดมันจะถูกเข้ารหัสกับบางสิ่งในหน่วยความจำ

ที่กล่าวว่าถ้ามันเกิดขึ้นว่ามันยังคงมีการเปิด/proc/${PID}/fd/${SOMETHING}อาจเป็นได้ หากคุณเขียนทับรหัสของคุณจะไม่อยู่ที่นั่นเพราะข้อมูลการเขียนทับจะเป็น หากคุณคัดลอกสิ่งอื่นเข้ามาแทนที่ (หรือลบหรือยกเลิกการเชื่อมโยงหรือลบไดเรกทอรีหลักซ้ำ ๆ ) มันจะอยู่ที่นั่น


ฉันใช้cpเพื่อคัดลอกคีย์ใหม่แทนที่เก่า
นาธานออสมัน

ฉันดูคำอธิบายไฟล์แบบเปิดใน/proc... ไม่มีอะไรเลย
นาธานออสมัน

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

ฉันเข้าใจแล้ว! คุณพูดถูก - Apache เก็บกุญแจไว้ในหน่วยความจำและฉันสามารถดึงมันออกมาได้ โปรดดูคำตอบของฉัน
นาธานออสมัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.