ค้นหาไฟล์ PDF ที่เป็นอันตรายโดยใช้การตรวจสอบ PHP หรือไม่

ขณะนี้สำหรับการตรวจสอบความถูกต้องของไฟล์จะมีการดำเนินการต่อไปนี้

  • การตรวจสอบประเภทไฟล์โดยใช้รายละเอียด MIME เช่น แอปพลิเคชัน/pdf
  • ตรวจสอบนามสกุลไฟล์พร้อมกับรายละเอียด MIME

แต่ไฟล์ PDF บางไฟล์มีสคริปต์ที่เป็นอันตราย เช่น JavaScript ที่สร้างความเสียหายให้กับระบบ

รายละเอียดเพิ่มเติมเกี่ยวกับการโจมตี PDF:

http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2008-2992

คำถาม: สำหรับกรณีนี้ มีวิธีแก้ปัญหาที่แนะนำไหม


person Sundar    schedule 21.09.2016    source แหล่งที่มา
comment
มีแนวโน้มมากที่สุดที่จะเป็น security.stackexchange.com ไม่สามารถแนะนำคำถามนี้สำหรับการย้ายข้อมูลได้เนื่องจาก security.stackexchange.com ไม่อยู่ในรายการ 5 อันดับแรก   -  person Wilt    schedule 21.09.2016
comment
ฉันโหวตแล้ว มันเป็นคำถามที่ดี คุณอาจได้รับคำตอบที่ดีกว่าจริงๆ ... ตรวจสอบโพสต์อื่น ๆ เหล่านี้เกี่ยวกับการรักษาความปลอดภัย pdf บน security.stackexchange.com< /ข>.   -  person Wilt    schedule 21.09.2016


คำตอบ (3)


ดูโปรเจ็กต์นี้ https://github.com/urule99/jsunpack-n - A JavaScript Unpacker ทั่วไป

jsunpack-n จำลองการทำงานของเบราว์เซอร์เมื่อไปที่ URL จุดประสงค์คือเพื่อตรวจจับช่องโหว่ที่กำหนดเป้าหมายไปที่ช่องโหว่ของเบราว์เซอร์และปลั๊กอินของเบราว์เซอร์ ยอมรับอินพุตประเภทต่างๆ มากมาย: ( รวมถึง PDFs* )

โดยดูไฟล์ ths https://raw.githubusercontent.com/urule99/jsunpack-n/master/pre.js ดูเหมือนว่าจะแก้ไขปัญหาของคุณได้โดยตรง

var util = {
375     printf : function(a,b){print ("//alert CVE-2008-2992 util.printf length ("+ a.length + "," + b.length + ")\n"); },

เมื่ออัปโหลด ฉันจะป้อน PDF ลงในเครื่องมือนี้และตรวจสอบผลลัพธ์

ด้านล่างนี้เป็นแหล่งข้อมูลที่น่าสนใจที่เกี่ยวข้องกับช่องโหว่ซึ่งอธิบายทุกอย่างในเชิงลึก

http://resources.infosecinstitute.com/hacking-pdf-part-1/

http://resources.infosecinstitute.com/hacking-pdf-part-2/

ในส่วนที่ 2 ของบทความมีส่วนบอกว่าคุณสามารถใช้ Spider Monkey เพื่อรัน pre.js (ไฟล์ที่ฉันพูดถึง eariler ) เพื่อรับข้อมูลเกี่ยวกับ CVE

js -f pre.js -f util_printf.pdf.out

// alert CVE-2008-2992 util.printf length (13, ไม่ได้กำหนด)

person Pawel Dubiel    schedule 24.09.2016

ฉันทำสิ่งนี้เมื่อไม่กี่ปีก่อน (ไม่มีรหัสอีกต่อไป)

  • On upload
    • Scan the file for malicious code (similar to a virus scanner)
    • ปฏิเสธหรืออนุญาตไฟล์ตามตรรกะการทำงาน

โค้ดที่เป็นอันตรายมักจะซ่อนอยู่ในฟังก์ชันฐาน 64 ภายในไฟล์เมตา หรือใช้โค้ดอักขระเพื่อแสดงโค้ดที่เป็นอันตราย

คุณจะต้องค้นหาพจนานุกรมที่มีโค้ดที่เป็นอันตรายทั่วไป หรือสร้างพจนานุกรมของคุณเองแล้วเปิดไฟล์ด้วยฟังก์ชัน php และสแกนหารายการภายในพจนานุกรมของคุณ (อาร์เรย์)

ณ จุดนี้ คุณอาจคิดว่านั่นไม่ได้รับการปรับให้เหมาะสมที่สุดหรืออาจช้า...ฯลฯ

นี่ถูกต้อง; เมื่อใดก็ตามที่คุณโยนการรักษาความปลอดภัย มันจะกระทบต่อประสิทธิภาพการทำงาน แต่คุณสามารถหลีกเลี่ยงมันได้ด้วยการสร้างเซิร์ฟเวอร์ใหม่ที่ไฟล์จะถูกอัพโหลดและสแกนไป จากนั้นส่งกลับไปยังเซิร์ฟเวอร์เดิม... ฯลฯ

เท่าที่สแกนเนอร์ใช้ ฉันแน่ใจว่าคุณอาจพบบริการหรือโค้ดโอเพ่นซอร์ส เพิ่งพบสิ่งนี้ https://github.com/mikestowe/Malicious-Code-Scanner/blob/master/phpMalCodeScanner.php (ไม่เคยใช้ หรือฉันแนะนำ)

person Perspective    schedule 23.09.2016

เพิ่มคำตอบอื่นเนื่องจากโครงการด้านล่างนี้ใช้งานง่ายกว่ามากและยังสามารถค้นหาช่องโหว่ CVE-2008-2992 ได้อีกด้วย ฉันรู้ว่าคุณกำลังถามเกี่ยวกับ PHP แต่คุณสามารถเรียกใช้สคริปต์ใดก็ได้จาก PHP โดยใช้ตัวอย่าง escapeshellcmd

peepdf เป็นเครื่องมือ Python สำหรับสำรวจไฟล์ PDF เพื่อดูว่าไฟล์นั้นอาจเป็นอันตรายหรือไม่ จุดมุ่งหมายของเครื่องมือนี้คือการจัดหาส่วนประกอบที่จำเป็นทั้งหมดที่นักวิจัยด้านความปลอดภัยอาจต้องการในการวิเคราะห์ PDF โดยไม่ต้องใช้เครื่องมือ 3 หรือ 4 ชิ้นในการทำงานทั้งหมด ด้วย peepdf คุณสามารถดูออบเจ็กต์ทั้งหมดในเอกสารที่แสดงองค์ประกอบที่น่าสงสัย รองรับตัวกรองและการเข้ารหัสที่ใช้มากที่สุดทั้งหมด สามารถแยกวิเคราะห์ไฟล์เวอร์ชันต่างๆ สตรีมออบเจ็กต์ และไฟล์ที่เข้ารหัสได้

https://github.com/jesparza/peepdf

คำแนะนำ: http://eternal-todo.com/tools/peepdf-pdf-analysis-tool

และคุณใช้มันเหมือนด้านล่าง และในตอนท้าย คุณจะได้รับองค์ประกอบที่เป็นปัญหาทั้งหมดเกี่ยวกับข้อมูล CVE

$ ./peepdf.py -f fcexploit.pdf

File: fcexploit.pdf
MD5: 659cf4c6baa87b082227540047538c2a
SHA1: a93bf00077e761152d4ff8a695c423d14c9a66c9
Size: 25169 bytes
Version: 1.3
Binary: True
Linearized: False
Encrypted: False
Updates: 0
Objects: 18
Streams: 5
Comments: 0
Errors: 1

Version 0:
    Catalog: 27
    Info: 11
    Objects (18): [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 22, 23, 24, 25, 26, 27, 28]
        Errors (2): [11, 25]
    Streams (5): [5, 7, 9, 10, 11]
        Encoded (4): [5, 7, 9, 10]
    Objects with JS code (1): [5]
    Suspicious elements:
        /OpenAction: [1]
        /JS: [4]
        /JavaScript: [4]
        getAnnots (CVE-2009-1492): [5] 
person Pawel Dubiel    schedule 24.09.2016