Install Burp Certificate in Android 14

Datafarm
3 min readNov 27, 2024

สวัสดีมิตรรักแฟนเพลงที่ติดตามเพจดาต้าฟาร์มทุกท่านครับ สำหรับในบทความนี้จะเป็นเรื่องของการติดตั้ง Certificate ของโปรแกรม Burp Suite ลงในอุปกรณ์ Android ตั้งแต่เวอร์ชัน 14 ขึ้นไปนะครับ ซึ่งการที่เราจะติดตั้ง Burp Certificate บนระบบปฏิบัติการแอนดรอยด์เวอร์ชันนี้จะมีขั้นตอนวิธีการที่แตกต่างไปจากเดิมนิดหน่อยครับ

ก่อนจะเข้าสู่เนื้อหาจะขอเกริ่นนำนิดหน่อยนะครับว่าทำไมเราจึงจะต้องลง Burp Certificate กันด้วยละ ซึ่งคำตอบก็คือในการทดสอบเจาะระบบแอปพลิเคชันบนโทรศัพท์มือถือไม่ว่าจะเป็นระบบปฏิบัติการ Android หรือ iOS ก็ตาม เราจำเป็นต้องวิเคราะห์ข้อมูลที่มีการรับส่งระหว่างโทรศัพท์มือถือของเรากับเซิร์ฟเวอร์ถูกต้อง ซึ่งหากข้อมูลเหล่านี้ถูกส่งผ่านโปรโตคอล HTTP ปกติก็จะไม่มีปัญหาอะไร แต่หากข้อมูลดังกล่าวนี้ถูกส่งผ่านโปรโตคอล HTTPS ที่มีการเข้ารหัสอยู่ เราจะไม่สามารถใช้โปรแกรมจำพวก Intercepting Proxy ในการ Intercept ข้อมูลเหล่านี้ได้ครับ นี่เลยเป็นเหตุผลว่าทำไมเราถึงต้องติดตั้ง Certificate ไว้บนอุปกรณ์ของเราก่อนที่จะทดสอบได้นั่นเอง

สำหรับการติดตั้ง Certificate บนอุปกรณ์แอนดรอยด์ตั้งแต่เวอร์ชัน 7 ขึ้นมา เราจำเป็นจะต้องติดตั้งในระดับของ System ครับ เนื่องจากว่าตัวระบบปฏิบัติการแอนดรอยด์จะไม่เชื่อถือ Certificate ที่ถูกติดตั้งไว้ในระดับ User อีกต่อไป และตั้งแต่แอนดรอยด์เวอร์ชัน 10 ขึ้นมาเราจะไม่สามารถนำ Certificate ของโปรแกรม Burp Suite ไปวางไว้ในไดเรกทอรี่ “/system/etc/security/cacerts/” ตรง ๆ ได้แม้ว่าจะใช้สิทธิ์ของ Root ก็ตาม เนื่องจากว่าสิทธิ์ของไดเรกทอรี่ดังกล่าวจะเป็นแบบ Read-Only ครับ ดังนั้นแล้วในการจะติดตั้ง Certificate บนแอนดรอยด์เวอร์ชันนี้ได้เราจะนิยมใช้วิธีการ Mount tmpfs ไดเรกทอรี่แทนครับ โดยการ Mount ไดเรกทอรี่ที่เรามีสิทธิ์ในการเขียนเข้ากับไดเรกทอรี่ “/system/etc/security/cacerts/” นั่นเอง

What’s changed in Android 14

สำหรับระบบปฏิบัติการแอนดรอยด์เวอร์ชัน 14 ใบรับรอง CA Certificate ที่เชื่อถือได้ในระดับ System จะถูกเก็บไว้ในไดเรกทอรี่ “/apex/com.android.conscrypt/cacerts” ซึ่งไดเรกทอรี่ “/apex” ดังกล่าวจะไม่สามารถเปลี่ยนแปลงหรือแก้ไขได้ซึ่งทำให้ระบบมีความปลอดภัยมากยิ่งขึ้นเพราะเป็นการป้องกันการแก้ไขโดยไม่ได้รับอนุญาตนั่นเอง

นอกจากนี้แล้วไดเรกทอรี่ “/apex” ดังกล่าวนี้ยังไม่สามารถ Remount ให้มีสิทธิ์เขียนได้และไม่สามารถใช้วิธีการ Mount tmpfs ไดเรกทอรี่หรือที่เรียกว่าเทคนิคการ Mount ระบบไฟล์แบบชั่วคราวเช่นเดียวกับแอนดรอยด์ในเวอร์ชันก่อนหน้าได้อีกด้วย โดยรวมแล้วการออกแบบของแอนดรอยด์ 14 ทำให้การแก้ไขใบรับรอง CA Certificate สามารถทำได้ยากขึ้นซึ่งเป็นการเพิ่มความปลอดภัยของระบบนั่นเองครับ

เอาละครับมาถึงจุดนี้เราก็พอจะทราบถึงความเปลี่ยนแปลงของแอนดรอย์ 14 กันไปแล้ว ก่อนที่เราจะไปเริ่มติดตั้ง CA Certificate กันผมขออธิบายเพิ่มเติมเกี่ยวกับไดเรกทอรี่ “/apex” อีกสักหน่อยนะครับ

ในระบบปฏิบัติการแอนดรอยด์ แอปพลิเคชันแต่ละอันจะถูกแยกออกจากกัน โดยแอนดรอยด์จะใช้ Linux namespaces ครับ ส่งผลให้แต่ละแอปพลิเคชันไม่สามารถเข้าถึงข้อมูลของกันและกันได้ นอกจากนี้แล้วแต่ละแอปพลิเคชันก็จะมีพื้นที่ในการ Mount หรือ Mount namespaces เป็นของตัวเอง ซึ่งหมายถึงแต่ละแอปพลิเคชันก็จะมองเห็นข้อมูลจากการ Mount ไม่เหมือนกัน

โดยปกติแล้วการ Mount ไดเรกทอรี่จะเป็นแบบ “SHARED Propagation” คือการเปลี่ยนแปลงของข้อมูลจากการ Mount จะถูกส่งต่อไปยัง namespace ของแอปพลิเคชันอื่น ๆ โดยอัตโนมัติ ซึ่งหมายความว่าทุก ๆ แอปพลิเคชันจะมองเห็นข้อมูลของการ Mount เหมือน ๆ กัน

แต่อย่างไรก็ตามสำหรับไดเรกทอรี่ “/apex” จะแตกต่างออกไป ซึ่งการ Mount ที่ไดเรกทอรี่นี้จะเป็นแบบ “PRIVATE Propagation” นั่นหมายถึงการเปลี่ยนแปลงจากการ Mount จะไม่ถูกส่งต่อไปยัง Namespace หรือ Process อื่น ๆ ซึ่งถ้าจะให้อธิบายง่าย ๆ ก็คือ แม้ว่าเราจะติดตั้ง CA Certificate ในไดเรกทอรี่ “/apex” แล้วก็ตาม แอปพลิเคชันอื่นจะไม่สามารถเห็น CA Certificate เหล่านี้ได้เพราะ Namespace นี้ถูกตั้งค่าเป็นแบบ Private นั่นเอง

สรุปคือการติดตั้งใบรับรอง CA Certificate บน Namespace ที่ถูก Mount แบบ Private เป็นไปได้ยากหรือไม่สามารถทำได้โดยตรงบนระบบปฏิบัติการแอนดรอยด์ 14

Let’s install Burp certificate on Android 14

สำหรับวิธีการติดตั้ง CA Certificate ในบทความนี้จะเป็นการใช้ประโยชน์จาก Process ของ Zygote เพื่อเข้าถึงและแก้ไขการ Mount namespace ของทุก ๆ แอปพลิเคชันที่ถูกสร้างขึ้นโดย Zygote นั่นเองครับ

หลักการของ Zygote คือเมื่อเราเปิดแอปพลิเคชันใดก็ตาม Process ของ Zygote จะสร้าง Process ใหม่โดยการ Fork ตัวเองซึ่งจะเรียกใช้ทรัพยากรหรือ Resource ที่ถูกโหลดไว้อยู่แล้ว ทำให้การเริ่มแอปพลิเคชันใหม่สามารถทำได้เร็วขึ้น การ Fork ตัวเองของ Zygote จะเป็นการคัดลอก Resource ต่าง ๆ จาก Zygote ไปยัง Process ของแอปพลิเคชันใหม่ ซึ่งก็รวมไปถึงข้อมูลจากไดเรกทอรี่ “/apex” ด้วย ดังนั้นแล้วหากเรา Mount ไฟล์โดยนำเอา Certificate ของโปรแกรม Burp Suite ไปวางไว้ใน Namespace “/apex” ของ Zygote แล้วทุก ๆ แอปพลิเคชันที่ถูกสร้างโดย Zygote ก็จะมองเห็นข้อมูลต่าง ๆ ภายในไดเรกทอรี่ “/apex” ด้วยนั่นเองครับ

ในขั้นตอนแรก Export CA Certificate จากโปรแกรม Burp Suite ก่อนโดยเลือกเมนู “Setting” จากนั้นเลือก “Import/export CA certificate” และเลือก Export “Certificate in DER format”

หลังจากนั้นเราจะ Convert Certificate ที่ได้จากขั้นตอนก่อนหน้าเป็น PEM Format โดยใช้คำสั่ง openssl ดังนี้

openssl x509 -inform DER -in burpCA.der -out burpCA.pem
openssl x509 -inform PEM -subject_hash_old -in burpCA.pem | head -1
mv burpCA.pem 9a5ba575.0

ขั้นตอนต่อมาเราจะนำ Certificate ที่ได้ Convert ให้อยู่ใน Format ของ PEM จากขั้นตอนก่อนหน้ามาไว้ในอุปกรณ์โทรศัพท์ซึ่งสามารถทำได้หลากหลายวิธี แต่ในที่นี้จะใช้คำสั่ง ADB ดังนี้

adb push 9a5ba575.0 /data/local/tmp

หลังจากที่เราได้นำ Certificate ไปวางไว้ใน Storage ของอุปกรณ์แอนดรอยด์แล้ว ขั้นตอนต่อมาเราสามารถนำ Script ที่ได้จากลิงก์ “https://httptoolkit.com/blog/android-14-install-system-ca-certificate/” มาใช้ในการติดตั้ง CA Certificate ได้เลยครับ โดย Transfer Script ดังกล่าวไว้ใน Storage ของอุปกรณ์และ Execute Script ด้วยสิทธิ์ Root ของอุปกรณ์ของเราเอง และท้ายที่สุดเราก็จะสามารถติดตั้ง Burp CA Certificate ภายใต้ System Trust นั่นเอง

โดยในบทความนี้ผมได้นำเอา Script ดังกล่าวมาปรับแก้เล็กน้อยและเขียนให้ด้วยภาษา Python แทน Shell Script ครับ ซึ่งเมื่อ Execute แล้วก็จะได้ผลลัพธ์เช่นเดียวกัน

หลังจากนั้นเมื่อตรวจสอบดูก็จะพบ Certificate ของ PortSwigger อยู่ใน System Trust บนอุปกรณ์ของเรา ซึ่งในตอนนี้อุปกรณ์แอนดรอยด์ของเราก็พร้อมที่จะนำมาใช้ในการทดสอบแล้วละครับ

--

--

No responses yet