JavaScript Obfuscation คืออะไรและทำไมจึงเป็นภัยคุกคาม


29

AVG เพิ่งบอกฉันว่าหน้าเว็บที่ถูกบล็อกเพราะJavaScript Obfuscation

เพราะเหตุใดหน้าเว็บจึงถูกปิดกั้นและหมายความว่าอย่างไร


คำตอบ:


38

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

บางรูปแบบของความสับสน:

  1. เปลี่ยนชื่อตัวแปรโดยอัตโนมัติเป็นชื่อที่ไม่มีความหมายสั้น ๆ เพื่อให้โค้ดอ่านน้อยลงและเข้าใจยากขึ้น
  2. การลบช่องว่างและการแบ่งบรรทัดพิเศษทั้งหมดเพื่อให้รหัสเป็นหนึ่งบรรทัดยาวยักษ์
  3. การสร้างส่วนต่าง ๆ ของการสร้างรหัสเองเพื่อให้การส่งรหัสครั้งแรกเพื่อสร้างรหัสจริงที่จะดำเนินการตามที่ตั้งใจไว้
  4. ใช้รหัสตัวอักษรและการจัดการสตริงรวมกับ eval มากกว่ารหัสจาวาสคริปต์ปกติเพื่อสร้างรหัสจริงที่จะทำงาน

การปิดบังไม่ได้เป็นความชั่วร้าย แต่สามารถใช้ซ่อนความตั้งใจชั่วร้ายและนั่นอาจเป็นสิ่งที่ AVG คัดค้าน มันตรวจพบความสับสนมากจนไม่สามารถบอกได้ว่าจาวาสคริปต์กำลังพยายามทำสิ่งที่พยายามป้องกันไว้หรือไม่ ดังนั้นจึงประกาศรหัสว่าไม่ปลอดภัยโดยค่าเริ่มต้นเนื่องจากไม่สามารถตรวจสอบว่ารหัสดูเหมือนว่าตกลง


นั่นคือสิ่งที่ฉันคิด แต่ต้องการยืนยัน ขอขอบคุณสำหรับการชี้แจง.
L84

หาก AVG บล็อกการเข้าถึงเว็บไซต์ที่เป็นที่รู้จักและมีชื่อเสียงคุณสามารถลบล้างได้ ฉันจะไม่แนะนำว่าถ้าคุณไม่ทราบว่าตัวแทนเว็บไซต์
uSlackr

4
บางเว็บไซต์ใช้การบีบอัด js เพื่อให้โหลดได้เร็วขึ้น (ดีสำหรับทุกคน), โค้ดจะดูสับสน
jcubic

9
1และ2ยังทำโดย javascript compressors Compressors ทำให้งงงวยรหัสเป็นผลข้างเคียง แต่นั่นไม่ใช่วัตถุประสงค์หลักของพวกเขา; วัตถุประสงค์หลักของมันคือการทำให้จาวาสคริปต์เล็กลงเพื่อลดแบนด์วิดท์
BlueRaja - Danny Pflughoeft

5. นอกจากนี้ยังใช้เพื่อบีบอัดไฟล์ JS เพื่อการดาวน์โหลดที่เร็วขึ้น Yahoo ทำมาแล้วตั้งแต่พวกเขาอยู่บนเว็บและเครื่องมือของ Google สำหรับการสร้างเว็บแอปพลิเคชันก็ทำเช่นเดียวกัน (เช่น GMail และปฏิทิน)
Chloe

13

การทำให้งงหมายถึงการซ่อนความหมายที่ตั้งใจไว้ของบางสิ่งบางอย่าง

ในกรณีนี้ตัวอย่าง JavaScript ที่อ่านได้ชัดเจนเช่น

window.onload = function() { alert("Hello " + username) };

สามารถทดแทนได้โดย

var _0xc5b2=["\x6F\x6E\x6C\x6F\x61\x64",
        "\x48\x65\x6C\x6C\x6F\x20"];window[_0xc5b2[0]]=
    function (){alert(_0xc5b2[1]+username);} ;

หรือแม้กระทั่ง

eval(unescape("var%20_0xc5b2%3D%5B%22onload%22%2C%22Hello%20%22%5D%3Bwindow"+
  "%5B_0xc5b2%5B0%5D%5D%3Dfunction%20%28%29%7Balert%28_0xc5b2%5B1%5D+username"+
  "%29%3B%7D%20%3B"));

ตัวอย่างโค้ดทั้งสามนั้นทำสิ่งเดียวกัน แต่การอ่านเพียงครั้งแรกจะช่วยให้คุณเข้าใจความตั้งใจได้ง่าย

เห็นได้ชัดว่า AVG พยายามเข้าใจวัตถุประสงค์ของรหัส JavaScript ก่อนที่จะอนุญาตให้มีการดำเนินการ เมื่อรหัสยุ่งเหยิง AVG อาจจะล้มเหลว ดังนั้นการเตือน

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


3
แม้ว่าในขณะที่ฉันพบบ่อยรหัส deobfusticating แสดงให้ฉันเห็นบ่อยๆมันซ่อนจาวาสคริปต์ที่เขียนโค้ดไม่คุ้มกับการขโมย มันเป็นสัญญาณที่โปรแกรมเมอร์ใช้เวลากังวลเกี่ยวกับการโจรกรรมมากกว่าเทคนิคการเขียนโปรแกรมที่เหมาะสมและไม่สามารถทำให้เกิดความสับสนได้ดังนั้นมันจึงแตกง่าย คนเดียวที่ใช้เวลาในการสร้างรหัสยากที่จะแยกแยะ deobfusticate เป็นโปรแกรมเมอร์มัลแวร์ซึ่งเป็นสาเหตุที่ AVG ติดธงว่าเป็นเหตุผลที่ดีมากในการหลีกเลี่ยงไซต์
Fiasco Labs

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

@Kaz: มันเป็นเพียงตัวอย่าง แต่มีวิธีการที่ซับซ้อนมากขึ้นของการทำให้งงงวยที่ต้องใช้เครื่องมือ JavaScript ที่จะเข้าใจ สแกนเนอร์มัลแวร์มักจะค้นหารูปแบบบางอย่างแทนที่จะรันสคริปต์เพื่อเหตุผลด้านประสิทธิภาพ
เดนนิส

การไร้ค่าตามหลักวิชาและไร้ค่าในทางปฏิบัติมีความแตกต่าง - ในทางทฤษฎีรหัสที่ทำให้งงงวยจะไร้ประโยชน์ตกลงกัน แต่ถ้าค่าใช้จ่ายของการ deobfuscating คล้ายกับค่าใช้จ่ายในการสร้างรหัสนวนิยาย (หรือแม้กระทั่งค่าใช้จ่ายสูงพอที่จะป้องกันขโมยขี้เกียจ) จากนั้น obfuscation เพื่อป้องกันการโจรกรรมกามอาจเป็นประโยชน์
Ronald

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