John the Ripper 1.9.0-jumbo-1 เปิดตัวพร้อมรองรับ FPGA

ปล่อยแล้ว เวอร์ชันใหม่ของโปรแกรมเดารหัสผ่านที่เก่าแก่ที่สุดที่รองรับ จอห์น เดอะ ริปเปอร์ 1.9.0-จัมโบ้-1 (โครงการได้รับการพัฒนามาตั้งแต่ปี 1996) เวลาผ่านไป 1.8.0 ปีนับตั้งแต่การเปิดตัวเวอร์ชันก่อนหน้า 1-jumbo-4.5 ซึ่งในระหว่างนั้นมีการเปลี่ยนแปลงมากกว่า 6000 รายการ (คอมมิตคอมไพล์) จากนักพัฒนามากกว่า 80 คน ขอบคุณ การบูรณาการอย่างต่อเนื่องซึ่งรวมถึงการตรวจสอบเบื้องต้นของการเปลี่ยนแปลงแต่ละครั้ง (การดึงคำขอ) บนหลาย ๆ แพลตฟอร์ม ในช่วงเวลานี้ผู้พัฒนาแนะนำให้ใช้ ฉบับปัจจุบันจาก GitHubซึ่งสถานะนั้นยังคงมีเสถียรภาพแม้ว่าจะมีการเปลี่ยนแปลงก็ตาม รหัสโครงการหลัก จัดจำหน่ายโดย ภายใต้ใบอนุญาต GPLv2+ และรหัสของส่วนประกอบบางส่วนอยู่ภายใต้ใบอนุญาต BSD

คุณสมบัติพิเศษของเวอร์ชันใหม่คือการรองรับ FPGA (นอกเหนือจาก CPU, GPU และ Xeon Phi) สำหรับบอร์ด ZTEX 1.15yรวมถึงชิป FPGA 4 ตัวและแต่เดิมใช้สำหรับการขุด Bitcoin เป็นหลัก ตอนนี้มีการใช้แฮชรหัสผ่าน 7 ประเภท: bcrypt, descrypt แบบคลาสสิก (รวมถึง bigcrypt), sha512crypt, sha256crypt, md5crypt (รวมถึง Apache apr1 และ AIX smd5), Drupal7 และ phpass (ใช้แล้ว โดยเฉพาะใน WordPress) บางส่วนมีการใช้งานบน FPGA เป็นครั้งแรก

สำหรับ bcrypt ประสิทธิภาพที่ได้รับที่ ~119k c/s ด้วยการวนซ้ำ 2^5 ครั้ง (“$2b$05”) พร้อมการใช้พลังงานที่ ~27 วัตต์ เหนือกว่าผลลัพธ์ของ GPU รุ่นล่าสุดต่อบอร์ด ต่อราคาฮาร์ดแวร์ และต่อวัตต์อย่างมาก . ยังรองรับ กลุ่ม ของบอร์ดประเภทนี้ซึ่งได้รับการทดสอบถึง 16 บอร์ด (64 ชิป FPGA) ควบคุมจาก Raspberry Pi 2 ตัวเดียว รองรับฟังก์ชันการทำงานของ John the Ripper ปกติ รวมถึงโหมดการเดารหัสผ่านทั้งหมดและการดาวน์โหลดแฮชจำนวนมากพร้อมกัน .

เพื่อเร่งการทำงาน เราได้ปรับใช้การใช้มาสก์ (โหมด “—มาสก์” รวมถึงการใช้ร่วมกับโหมดอื่นๆ) และการเปรียบเทียบแฮชที่คำนวณได้กับแฮชที่โหลดในด้าน FPGA จากมุมมองของการนำไปปฏิบัติ การออกแบบหลายๆ แบบ (เช่น sha512crypt และ Drupal7) บล็อกที่ประกอบด้วยแกนประมวลผลแบบมัลติเธรด (แกน CPU แบบอ่อน) ที่โต้ตอบกับแกนเข้ารหัสถูกนำมาใช้ การพัฒนาฟังก์ชันนี้นำโดย Denis Burykin โดยประสานงานกับนักพัฒนาขนาดจัมโบ้คนอื่นๆ

การเปลี่ยนแปลงที่สำคัญอื่นๆ:

  • รองรับแฮช, ไซเฟอร์ และอื่นๆ อีกมากมายหลายประเภท รวมถึงแฮชรหัสผ่านแบบคลาสสิก (เช่น จาก QNX เวอร์ชันใหม่) รวมถึงกระเป๋าเงินดิจิทัล ไฟล์เก็บถาวรที่เข้ารหัส และระบบไฟล์ที่เข้ารหัส (เช่น Bitlocker และ FreeBSD geli) รวมถึงการรองรับรูปแบบประเภทใหม่ที่รองรับก่อนหน้านี้ (เช่น เพิ่มการรองรับ bcrypt-pbkdf สำหรับ OpenBSD softraid) และอีกมากมาย โดยรวมแล้ว มีการเพิ่มรูปแบบ 80 รูปแบบบน CPU และ 47 รูปแบบบน OpenCL จำนวนรูปแบบทั้งหมดในขณะนี้คือ 407 บน CPU (หรือ 262 ไม่รวมรูปแบบ "ไดนามิก" ที่กำหนดค่าจากไฟล์กำหนดค่า) และ 88 รูปแบบบน OpenCL
  • ปฏิเสธที่จะสนับสนุนภาษา CUDA แทน OpenCL ซึ่งไม่มีทางรบกวนการใช้งาน NVIDIA GPU เต็มรูปแบบ (และยังช่วยได้ด้วยการมุ่งเน้นการพัฒนาและการเพิ่มประสิทธิภาพในการใช้งานแต่ละรูปแบบสำหรับ GPU แทนที่จะเป็นการใช้งานสองครั้งก่อนหน้านี้)
  • รองรับชุดคำสั่ง SIMD ใหม่ - AVX2, AVX-512 (รวมถึง Xeon Phi รุ่นที่สอง) และ MIC (สำหรับรุ่นแรก) - รวมถึงการใช้งาน SIMD ที่เป็นสากลและสมบูรณ์มากขึ้นในการใช้งานหลายรูปแบบ รวมถึงการใช้ คำสั่งที่รองรับก่อนหน้านี้ตั้งค่าเป็น AVX และ XOP บน x86(-64) และ
    NEON, ASIMD และ AltiVec บน ARM, Aarch64 และ POWER ตามลำดับ

  • การเพิ่มประสิทธิภาพมากมายสำหรับ CPU และ OpenCL เพื่อให้ทำงานได้อย่างมีประสิทธิภาพมากขึ้นกับแฮชจำนวนมากพร้อมกัน (เช่น มีการทดสอบการโหลดแฮช SHA-320 จำนวน 1 ล้านครั้งบน GPU) และเพื่อเพิ่มความเร็วในการคำนวณแฮช การเพิ่มประสิทธิภาพบางส่วนเป็นแบบสากล บางส่วนครอบคลุมรูปแบบย่อยที่แตกต่างกัน และหลายรายการเป็นแบบเฉพาะสำหรับแต่ละรูปแบบ
  • (อัตโนมัติ-) การกำหนดค่าการบัฟเฟอร์ที่เหมาะสมที่สุดของรหัสผ่านที่ตรวจสอบบน CPU (“—tune=auto —verbosity=5”) และขนาดงานที่เหมาะสมที่สุดบน OpenCL (เปิดใช้งานโดยค่าเริ่มต้น) รวมถึงการคำนึงถึงการขึ้นลงที่ช้าจนถึงความถี่การทำงานเต็ม ของ NVIDIA GTX series GPUs 10xx และใหม่กว่า การใช้แฮชที่โหลดจริงและความยาวจริงของรหัสผ่านที่กำลังตรวจสอบ (เมื่อทราบล่วงหน้า) สำหรับการปรับอัตโนมัติดังกล่าว
  • การเพิ่มคอมไพเลอร์สำหรับ "นิพจน์ไดนามิก" ที่ระบุโดยตรงบนบรรทัดคำสั่ง และการใช้ประเภทแฮชไฮบริดใหม่ เช่น "-format=dynamic='sha1(md5($p).$s)'" ซึ่งคำนวณบน CPU โดยใช้ SIMD . ในฐานะที่เป็นส่วนประกอบของนิพจน์ดังกล่าว มีการรองรับแฮชด่วนหลายสิบรายการ (ตั้งแต่แฮชทั่วไปเช่น MD5 ไปจนถึงแฮชที่แปลกใหม่ในระดับปานกลางเช่น Whirlpool) การต่อสตริงย่อย การเข้ารหัสและการถอดรหัส การแปลงตัวพิมพ์อักขระ การอ้างอิงรหัสผ่าน เกลือ ชื่อผู้ใช้ และค่าคงที่สตริง
  • การกำจัดความแตกต่างที่ไม่พึงประสงค์จาก hashcat รวมถึงการสนับสนุนกฎเฉพาะของ hashcat ก่อนหน้านี้ (คำสั่งกฎรายการคำ) การเปลี่ยนไปใช้การกำหนดหมายเลขอุปกรณ์ OpenCL จาก 1 การใช้ค่าเริ่มต้นของรหัสผ่านที่มีความยาวเท่ากัน (ปกติคือ 7) สำหรับการทดสอบประสิทธิภาพ
  • โหมดใหม่สำหรับการสร้างรหัสผ่านที่ตรวจสอบได้ (โหมดแคร็ก) รวมถึง PRINCE จาก hashcat (สร้าง "วลี" โดยการรวมคำหลายคำตามลำดับความยาวที่เพิ่มขึ้น) ชุดย่อย (แสดงรหัสผ่านที่มีจำนวนอักขระต่างกันไม่เพียงพอ แม้ว่าอักขระเหล่านี้จะมาก็ตาม จากชุดที่เป็นไปได้จำนวนมาก) และไฮบริดภายนอก (อนุญาตโหมดภายนอกตามที่อธิบายไว้ในไฟล์การกำหนดค่าในภาษา C-like เพื่อสร้างรหัสผ่านที่ตรวจสอบได้จำนวนมากโดยอิงตาม "คำ" พื้นฐานแต่ละอันที่ได้รับจากโหมดอื่น) นอกจากนี้ยังมีโหมดภายนอกที่กำหนดไว้ล่วงหน้าใหม่หลายโหมด
  • คุณสมบัติเพิ่มเติมสำหรับการใช้หลายโหมดพร้อมกัน (โหมดหนึ่งอยู่ด้านบนของโหมดอื่น - การซ้อน) รวมถึงการใช้ชุดกฎ (การซ้อนกฎรายการคำศัพท์)
  • การปรับปรุงโหมดมาส์ก (การยืดมาส์กอย่างค่อยเป็นค่อยไปในช่วงความยาวที่ระบุ การใช้มาส์กที่ด้านข้างของอุปกรณ์ OpenCL หรือบอร์ด FPGA) และแคร็กเดี่ยว (พฤติกรรมที่เหมาะสมบนอุปกรณ์ที่คำนวณแฮชจำนวนมากในแบบคู่ขนาน ซึ่งก่อนหน้านี้มีรหัสผ่านที่ตรวจสอบได้ไม่เพียงพอในโหมดนี้ และยังมีข้อจำกัดในการใช้หน่วยความจำด้วย)
  • การปรับปรุงมากมายเพื่อรองรับ Unicode และการเข้ารหัสอื่น ๆ ในระบบย่อยที่แตกต่างกัน
  • การปรับปรุงมากมายสำหรับโปรแกรม *2john (ซึ่งแปลงไฟล์ในรูปแบบที่แตกต่างกันสำหรับ
    ใช้กับ john) โดยเฉพาะ wpapcap2john (จัดการการรับส่งข้อมูล WiFi)

  • มีตัวเลือกบรรทัดคำสั่งใหม่มากมาย การตั้งค่าใน john.conf กำหนดค่าตัวเลือกสคริปต์ และคุณสมบัติใหม่ที่เกี่ยวข้อง ซึ่งไม่ได้กล่าวถึงทั้งหมดที่นี่
  • การปรับปรุงคุณภาพของโค้ดด้วยการสนับสนุนในตัวสำหรับการสร้างการแก้ไขข้อบกพร่องด้วย AddressSanitizer (ก่อนหน้านี้) และ UndefiorSanitizer (เพิ่ม) โดยเพิ่ม fuzzer รูปแบบในตัว (เป็นส่วนหนึ่งของ GSoC 2015) โดยใช้การผสานรวมอย่างต่อเนื่อง (สร้างสำหรับระบบปฏิบัติการและคอมไพเลอร์หลายสิบตัว ผสมผสานและทดสอบการสนับสนุนที่ถูกต้องสำหรับทุกรูปแบบ)

ที่มา: opennet.ru

เพิ่มความคิดเห็น