MobSF
น่าจะได้อ่านกันไปแล้วกับบทความที่แล้วกับการตรวจ dependencies ของ iOS ด้วย OWASP Dependency-Check วันนี้มาตรวจ ipa
กันต่อด้วย MobSF
ซึ่ง MobSF สามารถตรวจได้ทั้งแบบ static และ dynamic สำหรับบทความนี้จะตรวจแบบ static เท่านั้น และ MobSF สามารถติดตั้งลงเครื่องก็ได้ แต่เราจะพาทำแบบใช้ docker เท่านั้น
ต้องใช้อะไรบ้าง
- docker โดยผมจะข้ามการติดตั้ง docker ไป
-
ipa
ไม่สอนการ archive ในบทความนี้เช่นกัน
เริ่ม
เมื่อเรา start docker แล้ว ให้ทำการดึง MobSF
docker pull opensecurity/mobile-security-framework-mobsf
run แบบใช้ครั้งเดียวทิ้ง
docker run --rm -it --name MobSF -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
พอ start เสร็จแล้วก็เข้าไปที่ http://localhost:8080 แล้วโยนไฟล์ apk
, ipa
, หรือ zip
ของ โปรเจค iOS เข้าไปได้เลย แล้วมันจะทำการวิเคราะห์ให้ทันที และพาไปหน้าผลการวิเคราะห์เมื่อเสร็จ แต่ผลของการวิเคราะห์ zip
กับ ipa
จะไม่เหมือนกัน
โดย zip ของ iOS ต้องไม่รวม folder project นอกสุด ให้ (ให้ไฟล์ xcodeproj
อยู่ที่ root ของ zip)
ผลการทดลอง
ตัว report มีหน้าเว็บให้ดู ถ้าเราใช้ docker แล้วทุบทิ้งอาจจะดูย้อนหลังไม่ได้ ซึ่งเราสามารถดึงเป็น JSON ผ่าน API ของ MobSF หรือดาวโหลด PDF มาเก็บไว้ก็ได้
ทดลองด้วย zip ของโปรเจค iOS
ซึ่งไม่มี source code ของเราเองเลยเป็นของ dependencies ล้วน ๆ จะเจอว่า
- เจอว่ามีการเก็บ keys, usersnames, passwords, ในไฟล์ของ dependencies ซึ่ง เข้าไปดูก็ไม่มี
- เจอว่ามีการใส่ ip ไว้ตรง ๆ ใน source code แต่มันคือ comment ของ Alamofire
- เจอว่ามีการใช้ hash ที่ไม่แข็งแรงแล้วเช่น MD5 ซึ่งมีใน source code ของ Kingfisher
- เจอว่ามีการเก็บ log ซึ่งอาจจะมีการ log ข้อมูล sensitive ก็ได้ ตรงนี้ถ้าเราต้องใช้ dependencies นั้น ๆ ก็คงแก้อะไรไม่ได้ 🤣
- เจอว่ามีการใช้ API ที่ไม่อนุญาต ตรงนี้เดี๋ยวตอนเอาขึ้น TestFlight เดี๋ยวมันบอกอีกทีเองแหละว่าเจอจริงหรือป่าว
แต่ก็น่าสนว่ามันสามารถวิเคราะห์ได้ประมาณนึงว่าเราพลาดอะไรหรือป่าว ที่ไฟล์ไหน ถ้าใช้กับโปรเจคจริง อาจจะเจอสิ่งที่เราพลาดไปก็ได้ แต่ถ้าต้องมาดูทุกวันคงเหนื่อยน่าดู อาจจะดู release ละครั้งก็ได้
ทดลองด้วย ipa
สำหรับการตรวจด้วย ipa นั้น จะไม่สามารถระบุได้ว่าที่ตรวจเจอหนะมาจากไฟล์ไหน
- มีตรวจเจอว่าใช้คำสั่งที่อันตราย เช่น _strlen, _strncpy, _fopen, _printf, _memcpy, _sscanf แต่ดูแล้ว เราคงไม่ได้ใช้เองนะ
- พบ NSLog ใน code อาจจะเผลอ log ข้อมูล sensitive ได้ – มีการใช้ _malloc ฟังก์ชัน ซึ่งอาจจองหรือเข้าถึง memory บางส่วน หรือจอง memory เยอะเกินไปได้ แหงหละ lib ของ Google ส่วนใหญ่เป็น C จะเจอก็ไม่แปลก
- มีคำชมเช่นใช้ Automatic Reference Counting (ARC), Position Independent Executable (PIE), etc.
- และมีการตรวจว่า domain ที่ระบุอยู่ใน source code มียิงไปหา server ที่อยู่ในรายชื่อของเว็บไม่พึงประสงค์หรือไม่ ซึ่งจะเจอเป็นของ Google, Fabric, Apple, etc. แต่ไม่เจอ domain ของ server เราเองแฮะ น่าจะเพราะไม่ได้ใส่
https://
ไว้ข้างหน้าของ string ที่ไว้เก็บ domain ของเรา (นอกงี้ hacker ก็แอบใส่ domain ที่ไม่รวม http เข้าไปใน open source ก็จะตรวจหาไม่เจอแล้วสินะ)
ทดลองด้วย apk
ซึ่งทดลองจาก Debug ที่ไม่ได้ obfuscate ไม่ใช่จาก Release อาจจะเจอช่องโหว่ หรือจุดอันตรายมากกว่าปกติ
- Sign ตัวแอปด้วย SHA1 ซึ่งไม่ค่อยแข็งแรงแล้ว
- จะมีการตรวจ permission ที่ขอในแอป ซึ่งบางส่วนผมก็ว่าปกตินะ ก็ต้องขออะ แต่บางส่วนผมก็ดูไม่รู้เรื่องเหมือนกัน พอดีไม่ค่อยเชี่ยว Android
- Activities สามารถเข้าถึงด้วยแอปอื่นได้ บอกรายชื่อมาด้วย
- เนื่องจากของ Android จะ compile เป็น object code เลยสามารถ decompile และแกะชื่อไฟล์กลับมาได้ด้วย ก็ว่าทำไม ไม่มีให้ตรวจ
zip
ของ Android - หลาย ๆ อย่างก็ตรวจได้ข้อเดียวกับของ iOS เช่น algorithm hash ห่วย มี log อาจจะ hardcode username, password, keys
อื้ม มีประโยชน์มากทีเดียว เพราะรอบนี้จงใจ hardcode key เข้าไป แล้วมันก็ตรวจเจอจริง ๆ (ไม่มีโปรเจคให้ดูนะ 555) จริง ๆ เราก็ไปเอา apk จากใน Play Store มาโยนเข้าไปเล่น ๆ ก็ได้ น่าจะง่ายกว่าสร้างโปรเจคมาเล่น
ทิ้งท้าย
คิดว่ามีประโยชน์มากเลยทีเดียวสำหรับ security audit หรือทีมที่พัฒนาที่ต้องการมอบความปลอดภัยให้กับผู้ใช้งาน
ซึ่งตอนเราเขียน เราอาจจะไม่มีความรู้ว่า code ที่เราเขียนส่งผลร้ายขอผู้ใช้งานอย่างไรบ้าง แต่พอเราเจอรายงานที่ระบุประเภทช่องโหว่ และไฟล์ที่ตรวจเจอ เราก็นำผลการตรวจมาแก้ไข และ code ครั้งหน้าเราก็จะทำได้ดีขึ้น
สำหรับบทความนี้ไว้เท่านี้ก่อนแล้วกันนะครับ เดี๋ยวจะยาวเกินไป ถ้ามีโอกาส จะมาเขียนให้ทำงานผ่าน build pipelines ให้ดูว่าพอจะทำยังไงได้บ้าง
สำหรับใครที่อ่านมาถึงตรงนี้ผมกำลังมองหางานอยู่ครับ ไม่มีงานทำ skill หลัก ๆ จะเป็น iOS ถ้าสนใจอยากทำงานด้วย จิ้มเบา ๆ ไปหาเบอร์โทรหรืออีเมลได้ที่ https://github.com/ph9/cv
Top comments (0)