Libscout เป็นเครื่องมือวิเคราะห์แบบคงที่ที่มีน้ำหนักเบาและมีประสิทธิภาพในการตรวจจับไลบรารีของบุคคลที่สามในแอพ Android/Java การตรวจจับมีความยืดหยุ่นต่อเทคนิคการทำให้งงงวยแบบไบต์ทั่วไปเช่นการเปลี่ยนชื่อตัวระบุหรือการทำให้งงงวยตามรหัสเช่นการซ่อน API แบบสะท้อนหรือการสุ่มควบคุมการไหล นอกจากนี้ Libscout มีความสามารถในการระบุเวอร์ชันไลบรารีที่แน่นอนรวมถึงรุ่นที่มีข้อบกพร่องที่รุนแรงหรือปัญหาด้านความปลอดภัย
libscout ต้องการไลบรารี SDK ดั้งเดิม (คอมไพล์ไฟล์. jar/.AAR) เพื่อแยกโปรไฟล์ไลบรารีที่สามารถใช้สำหรับการตรวจจับแอพ Android โปรไฟล์ห้องสมุดที่สร้างไว้ล่วงหน้านั้นโฮสต์อยู่ที่พื้นที่เก็บข้อมูล Libscout-Profiles
คุณสมบัติการตรวจจับที่ไม่ซ้ำกัน:
เมื่อเวลาผ่านไป libscout ได้รับการขยายเพื่อทำการวิเคราะห์เพิ่มเติมทั้งใน Library SDK และ Libraries ที่ตรวจพบในแอพ:
นอกจากนี้ยังมีส่วนขยายของ Android Studio UP2Dep ที่รวมข้อมูลความเข้ากันได้ของ API เข้ากับ IDE เพื่อช่วยให้นักพัฒนาซอฟต์แวร์รักษาการพึ่งพาของพวกเขาได้ทันสมัย (และอื่น ๆ )
ไดเรกทอรีสคริปต์มีสคริปต์ Python ไลบรารีเพื่อดาวน์โหลด SDK ไลบรารีดั้งเดิมโดยอัตโนมัติรวมถึงประวัติเวอร์ชันที่สมบูรณ์จาก Maven Central , JCenter และ ที่เก็บ MVN ที่กำหนดเอง ห้องสมุดดั้งเดิม SDK สามารถใช้ในการสร้างโปรไฟล์และทำการวิเคราะห์ความเข้ากันได้ของไลบรารี API (ดูโมดูลด้านล่าง) ใช้สคริปต์ผู้สร้างไลบรารีโปรไฟล์เพื่อสร้างโปรไฟล์ในระดับที่สะดวก
เครื่องขูดจำเป็นต้องกำหนดค่าด้วยการกำหนดค่า JSON ที่มีข้อมูลเมตาของไลบรารีที่จะดึง (ชื่อ, repo, groupid, artefactid) ไดเรกทอรี สคริปต์/ไลบรารีสเปคส์ มีไฟล์กำหนดค่าเพื่อดึงไลบรารีมากกว่า 100 ไลบรารีจาก Maven Central และการกำหนดค่าเพื่อดาวน์โหลดไลบรารี Amazon และไลบรารี Android จากที่เก็บ Maven ของ Google (350 ไลบรารีรวมถึง Support, GMS, KTX, Jetpack, .. )
ใหม่ (07/30/19): เพิ่มรายการไลบรารีโฆษณา/ติดตาม 45 รายการที่มีรุ่น 1182 ปัจจุบัน (trackers.json)
โปรไฟล์ห้องสมุดพร้อมใช้งานและเมตาดาต้าห้องสมุดสามารถพบได้ในพื้นที่เก็บข้อมูล libscout-profiles
Libscout มีฟังก์ชั่นการสร้างขึ้นเพื่อรายงานเวอร์ชันห้องสมุดที่มีช่องโหว่ด้านความปลอดภัยดังต่อไปนี้
โปรไฟล์ที่สร้างไว้ล่วงหน้าสำหรับเวอร์ชันที่มีช่องโหว่จะถูกแท็กด้วย [ความปลอดภัย] , แพตช์ที่มี [ความปลอดภัย-Fix]
ข้อมูลนี้ถูกเข้ารหัสในไฟล์ Library.xml ที่ใช้ในการสร้างโปรไฟล์ เราพยายามอัปเดตรายการ/โปรไฟล์เมื่อใดก็ตามที่เราพบปัญหาด้านความปลอดภัยใหม่ หากคุณสามารถแบ่งปันข้อมูลได้โปรดแจ้งให้เราทราบ
| ห้องสมุด | เวอร์ชัน | แก้ไขเวอร์ชัน | ความอ่อนแอ | การเชื่อมโยง |
|---|---|---|---|---|
| เครื่องนุ่งห่ม | <8.1 | > 8.1 | การตั้งค่า WebView เริ่มต้นที่ไม่ได้รับอนุญาต | การเชื่อมโยง |
| Apache CC | 3.2.1 / 4.0 | 3.2.2 / 4.1 | ช่องโหว่ deserialization | การเชื่อมโยง |
| กล่องดร็อปบ็อกซ์ | 1.5.4 - 1.6.1 | 1.6.2 | ช่องโหว่ที่ลดลง | การเชื่อมโยง |
| 3.15 | 3.16 | ช่องโหว่การจี้บัญชี | การเชื่อมโยง | |
| mopub | <4.4.0 | 4.4.0 | การตั้งค่า WebView เริ่มต้นที่ไม่ได้รับอนุญาต | การเชื่อมโยง |
| Okhttp | 2.1 - 2.7.4 3.0.0- 3.1.2 | 2.7.5 3.2.0 | บายพาส Pinning Certificate | การเชื่อมโยง |
| Plexus Archiver | <3.6.0 | 3.6.0 | ช่องโหว่ซิปสลิป | การเชื่อมโยง |
| เกี่ยวกับความเร็วเหนือเสียง | <6.3.5 | 6.3.5 | การเปิดรับฟังก์ชั่นที่ไม่ปลอดภัยผ่าน JS | การเชื่อมโยง |
| อาเจียน | <3.3.0 | 3.3.0 | ช่องโหว่การโจมตีของ MITM | การเชื่อมโยง |
| Zeroturnaround | <1.13 | 1.13 | ช่องโหว่ซิปสลิป | การเชื่อมโยง |
ในการสแกนแอพฟรีครั้งสุดท้ายของเราใน Google Play (05/25/2017) ตรวจพบ Libscout> แอพ 20k ยังคงมีหนึ่งในเวอร์ชัน LIB ที่มีช่องโหว่เหล่านี้ ผลการวิจัยได้รับการรายงานไปยังโปรแกรม ASI ของ Google น่าเสียดายที่รายงานดูเหมือนจะถูกเพิกเฉย ด้วยเหตุนี้เราจึงแจ้งนักพัฒนาแอพหลายคนด้วยตนเอง
ในหมู่คนอื่น ๆ McAfee เผยแพร่คำแนะนำด้านความปลอดภัยสำหรับหนึ่งในแอพของพวกเขา
|_ gradlew / gradlew.bat (gradle wrappers to generate runnable LibScout.jar)
|_ assets
| |_ library.xml (Library meta-data template)
|_ config
| |_ LibScout.toml (LibScout's config file)
| |_ logback.xml (log4j configuration file)
|_ data
| |_ app-version-codes.csv (Google Play app packages with valid version codes)
|_ lib
| Android axml
|_ scripts
| |_ library-specs (pre-defined library specs)
| |_ library-scraper.py (scraper for mvn-central, jcenter, custom mvn)
| |_ library-profile-generator.sh (convenience profile generator)
|_ src
source directory of LibScout (de/infsec/tpl). Includes some open-source,
third-party code to parse AXML resources / app manifests etc.
โมดูลนี้สร้างลายนิ้วมือไลบรารีที่ไม่ซ้ำกันจาก LIB SDKS ดั้งเดิม (รองรับไฟล์. JAR และ .AAR) โปรไฟล์เหล่านี้สามารถใช้สำหรับการทดสอบในภายหลังว่าเวอร์ชันไลบรารีที่เกี่ยวข้องนั้นรวมอยู่ในแอพหรือไม่ แต่ละไฟล์ไลบรารียังต้องการ library.xml ที่มีข้อมูลเมตา (เช่นชื่อรุ่น, .. ) เทมเพลตสามารถพบได้ในไดเรกทอรีสินทรัพย์ เพื่อความสะดวกของคุณคุณสามารถใช้เครื่องมีดโกนห้องสมุด (./scripts) เพื่อดาวน์โหลดประวัติห้องสมุดเต็มรูปแบบจากที่เก็บ Maven โดยค่าเริ่มต้น libscout จะสร้างโปรไฟล์ที่ใช้แฮชทรีพร้อมแพ็คเกจและข้อมูลคลาส (วิธีการละเว้น)
java -jar libscout.jar -o โปรไฟล์ [-a Android_sdk_jar ] -x path_to_library_xml path_to_library_file
ตรวจจับไลบรารีในแอพโดยใช้โปรไฟล์ที่สร้างไว้ล่วงหน้า ทางเลือก Libscout ยังดำเนินการวิเคราะห์การใช้ API สำหรับไลบรารีที่ตรวจพบเช่น API ห้องสมุดที่ใช้โดยแอพหรือโดยไลบรารีอื่น ๆ (-U สวิตช์)
ผลการวิเคราะห์สามารถเขียนในรูปแบบที่แตกต่างกัน
java -jar libscout.jar -o match -p path_to_profiles [-a Android_sdk_jar ] [-u] [-j json_dir ] [-m] [-d log_dir ] path_to_app (s)
วิเคราะห์การเปลี่ยนแปลงในชุด API ที่บันทึกไว้ (สาธารณะ) ของเวอร์ชันห้องสมุด
ผลการวิเคราะห์ในปัจจุบันรวมถึงข้อมูลต่อไปนี้:
การปฏิบัติตามเวอร์ชัน semantic (semver) เช่นการเปลี่ยนแปลงของสตริงเวอร์ชันระหว่างเวอร์ชันติดต่อกัน (semver ที่คาดหวัง) ตรงกับการเปลี่ยนแปลงในชุด API สาธารณะที่เกี่ยวข้อง (Semver จริง) ผลลัพธ์เพิ่มเติมรวมถึงสถิติเกี่ยวกับการเปลี่ยนแปลงในชุด API (เพิ่มเติม/ลบ/modifcations) สำหรับ API ที่ถูกลบออก LIBSCOUT ยังพยายามอนุมาน API ทางเลือก (ขึ้นอยู่กับคุณสมบัติที่แตกต่างกัน)
สำหรับการวิเคราะห์คุณต้องจัดเตรียมเส้นทางไปยังห้องสมุด SDK ดั้งเดิม libscout ค้นหาขวดไลบรารีซ้ำอีกครั้ง | AARS (ไดเรกทอรีใบคาดว่าจะมีไฟล์มากที่สุดหนึ่งขวด | ไฟล์ AAR และไฟล์ library.xml หนึ่งไฟล์) เพื่อความสะดวกของคุณให้ใช้เครื่องตรวจจับห้องสมุด ผลการวิเคราะห์ถูกเขียนลงในดิสก์ในรูปแบบ JSON (-J Switch)
java -jar libscout.jar -o lib_api_analysis [-a Android_sdk_jar ] [-j json_dir ] path_to_lib_sdks
โหมดนี้เป็นส่วนขยายของโหมดการจับคู่ มันตรวจพบเวอร์ชันห้องสมุดก่อนในแอพที่ให้ไว้และดำเนินการวิเคราะห์การใช้งานห้องสมุด (-U โดยนัย) นอกจากนี้ยังต้องใช้ข้อมูลส่วนประกอบ Library API (ผ่านสวิตช์ -L) ตามที่สร้างขึ้นในโหมด LIB_API_ANALYSIS ขึ้นอยู่กับการใช้งาน LIB API ในแอพและข้อมูลที่เข้าร่วม Libscout กำหนดเวอร์ชันสูงสุดที่ยังคงเข้ากันได้กับชุดของ API lib ที่ใช้แล้ว
หมายเหตุ: การใช้งานใหม่ยังขาดคุณสมบัติบางอย่างเช่นผลลัพธ์จะถูกบันทึกไว้ในปัจจุบัน แต่ยังไม่ได้เขียนถึง JSON ดูความคิดเห็นของรหัสสำหรับข้อมูลเพิ่มเติม
java -jar libscout.jar -o updatability [-a Android_sdk_jar ] [-j json_dir ] -l lib_api_data_dir path_to_app (s)
สำหรับรายละเอียดทางเทคนิคและผลการประเมินขนาดใหญ่โปรดดูสิ่งพิมพ์ของเรา:
การตรวจจับห้องสมุดบุคคลที่สามที่เชื่อถือได้ใน Android และแอปพลิเคชันความปลอดภัย (CCS'16)
ให้ฉันอัปเดต: การศึกษาเชิงประจักษ์ของการปรับปรุงห้องสมุดของบุคคลที่สามบน Android (CCS'17)
หากคุณใช้ libscout ในสิ่งพิมพ์ทางวิทยาศาสตร์เราจะขอบคุณการอ้างอิงโดยใช้รายการ BibTex เหล่านี้: [BIB-CCS16] [BIB-CCS17]