แฮ็กรถ Kia: ควบคุมรถจากระยะไกลได้ด้วยแค่ป้ายทะเบียน
(samcurry.net)- เมื่อวันที่ 11 มิถุนายน 2024 มีการค้นพบช่องโหว่ในรถ Kia ที่ทำให้สามารถควบคุมฟังก์ชันสำคัญของรถจากระยะไกลได้ด้วยแค่ป้ายทะเบียน
- ผู้โจมตีสามารถดึงข้อมูลส่วนบุคคลของเหยื่อได้อย่างเงียบ ๆ เช่น ชื่อ หมายเลขโทรศัพท์ อีเมล และที่อยู่จริง
- ด้วยช่องโหว่นี้ ผู้โจมตีสามารถเพิ่มตัวเองเป็นผู้ใช้คนที่สองแบบมองไม่เห็นของรถได้โดยที่เจ้าของรถไม่รู้ตัว
- มีการสร้างเครื่องมือเดโมเพื่อแสดงผลกระทบของช่องโหว่นี้ แต่ไม่ได้เผยแพร่ต่อสาธารณะหรือถูกนำไปใช้โจมตีจริง
- หลังจากนั้นช่องโหว่นี้ได้รับการแก้ไขแล้ว เครื่องมือนี้ไม่ได้ถูกปล่อยออกมา และทีม Kia ยืนยันว่าไม่เคยมีการนำช่องโหว่นี้ไปใช้ในทางที่เป็นอันตราย
รถที่ได้รับผลกระทบ
- รถ Kia หลายรุ่นตั้งแต่ปี 2014 ถึง 2025 ได้รับผลกระทบ
- แต่ละรุ่นสามารถใช้ฟังก์ชันอย่างล็อก/ปลดล็อกระยะไกล สตาร์ต/ดับเครื่องระยะไกล แตร/ไฟระยะไกล และกล้องระยะไกลได้
รายละเอียดช่องโหว่
ราว 2 ปีก่อน เราพบช่องโหว่ด้านความปลอดภัยในผู้ผลิตรถยนต์มากกว่า 12 ราย เราพบปัญหาร้ายแรงที่ทำให้สามารถติดตามตำแหน่งจากระยะไกล ดับเครื่อง ปลดล็อก และสตาร์ตรถได้มากกว่า 15 ล้านคัน - Paul Roberts
- หลังจากเวลาผ่านไปมาก เราตัดสินใจกลับไปตรวจดูเว็บไซต์ของผู้ผลิตที่เคยพบช่องโหว่อีกครั้ง
- เว็บไซต์ owners และแอปมือถือของ Kia น่าสนใจ เพราะสามารถส่งคำสั่งควบคุมรถผ่านอินเทอร์เน็ตได้
- เว็บไซต์จะส่งคำสั่งผ่านพร็อกซีเซิร์ฟเวอร์ไปยังแบ็กเอนด์ API ส่วนแอปจะเข้าถึง API โดยตรง
- ตัวอย่างคำขอ HTTP ที่ส่งคำสั่งปลดล็อกประตูจากเว็บไซต์ owners:
POST /apps/services/owners/apigwServlet.html HTTP/2 Host: owners.kia.com Httpmethod: GET Apiurl: /door/unlock Servicetype: postLoginCustomer Cookie: JSESSIONID=SESSION_TOKEN; - เซิร์ฟเวอร์ใช้
JSESSIONIDเพื่อสร้าง session ID ชื่อSidแล้วส่งต่อไปยังแบ็กเอนด์ API ดังนี้:GET /apigw/v1/rems/door/unlock HTTP/1.1 Host: api.owners.kia.com Sid: 454817d4-b228-4103-a26f-884e362e8dee Vinkey: 3ecc1a19-aefd-4188-a7fe-1723e1663d6e Sidคือโทเค็นเซสชัน ส่วนVinkeyคือ UUID ที่แมปกับหมายเลขตัวถังรถ (VIN)
ช่องโหว่ในโครงสร้างพื้นฐานของดีลเลอร์
- เราตัดสินใจตรวจดูเว็บไซต์ดีลเลอร์ของ Kia ด้วย เพราะอยากรู้ว่า Kia จัดการข้อมูลลูกค้าอย่างไรเมื่อมีการซื้อรถใหม่
- พวกเราตรวจสอบ URL ในอีเมลที่ส่งให้ลูกค้าเพื่อใช้ลงทะเบียนรถใหม่บนเว็บไซต์ดีลเลอร์:
https://kiaconnect.kdealer.com/content/kDealer/… - โดเมน
kiaconnect.kdealer.comที่ไม่เคยเห็นมาก่อนดูน่าสนใจ - ใน URL ข้างต้น พารามิเตอร์
tokenคือ VIN key ซึ่งเป็นโทเค็นเข้าถึงแบบใช้ครั้งเดียวที่ดีลเลอร์สร้างขึ้น และสามารถแก้ไขรถที่ระบุด้วยพารามิเตอร์vinได้ - เมื่อโหลด URL จะมีการส่งคำขอ HTTP เพื่อตรวจสอบความถูกต้องของโทเค็น:
POST /apps/services/kdealer/apigwServlet.html HTTP/1.1 Host: kiaconnect.kdealer.com { "token": "985a49f0-1fe5-4d36-860e-d9b93272072b", "vin": "5XYP3DHC9NG310533", "scenarioType": 3, "loginPref": null } - สิ่งที่น่าสนใจคือ request URI ของเว็บไซต์ดีลเลอร์เป็น
/apps/services/kdealer/apigwServlet.htmlซึ่งคล้ายกับเว็บไซต์ owners - จึงคาดว่าน่าจะมีพร็อกซีที่ส่งต่อคำขอไปยัง API ภายในสำหรับดีลเลอร์
- เมื่อตรวจดูโค้ด JavaScript ก็พบการเรียก API สำหรับฟังก์ชันเฉพาะพนักงาน เช่น ค้นหารถของดีลเลอร์ ค้นหาบัญชี ลงทะเบียน และยกเลิกการลงทะเบียน
- เราลองเข้าถึง API endpoint ด้วย VIN ของรถที่เราเป็นเจ้าของเองโดยตรง แต่ได้รับข้อผิดพลาด 401 Unauthorized โทเค็นของดีลเลอร์ใช้ไม่ได้
เข้าถึง Dealer API ด้วยบัญชีทั่วไป
- เราจึงลองสมัครเว็บไซต์ดีลเลอร์ด้วยบัญชีทั่วไปเพื่อสร้าง access token แล้วนำไปใช้เข้าถึง API เพราะรูปแบบคล้ายกับเว็บไซต์ owners
- ผลคือสามารถสมัครผู้ใช้บนเว็บไซต์ดีลเลอร์ได้ด้วยวิธีเดียวกับเว็บไซต์ owners!
- หลังจากล็อกอินและออก access token แล้ว เมื่อเรียก VIN lookup API ที่ก่อนหน้านี้เข้าถึงไม่ได้ พบว่าคำตอบมีชื่อ หมายเลขโทรศัพท์ และอีเมลของเจ้าของรถอยู่ด้วย
- นั่นหมายความว่า หากยืนยันตัวตนกับพอร์ทัลดีลเลอร์ด้วยบัญชีทั่วไปที่เราสร้างขึ้นเองและใช้ channel header ที่แก้ไข ก็จะเข้าถึง API สำหรับดีลเลอร์ได้ทั้งหมด
เข้าถึงรถโดยไม่ได้รับอนุญาต
- หลังวิเคราะห์โค้ด JavaScript อยู่หลายชั่วโมง เราก็เข้าใจว่า endpoint สำหรับลงทะเบียน ยกเลิกการลงทะเบียน และแก้ไขข้อมูลรถทำงานอย่างไร
- สามารถเข้าถึงรถของเหยื่อได้ด้วย 4 ขั้นตอนต่อไปนี้:
- สร้างโทเค็นดีลเลอร์และดึงค่า "token" จาก HTTP response header
- หาอีเมลและหมายเลขโทรศัพท์ของเหยื่อ
- ใช้อีเมลที่รั่วไหลและ VIN เพื่อแก้ไขสิทธิ์การเข้าถึงของเจ้าของเดิม
- เพิ่มผู้โจมตีเป็นเจ้าของคนใหม่ของรถ
- จากมุมมองของเหยื่อ จะไม่มีการแจ้งเตือนว่ามีคนเข้าถึงรถของตนหรือมีการเปลี่ยนสิทธิ์เกิดขึ้น
- ผู้โจมตีสามารถหาค่า VIN จากป้ายทะเบียนของใครบางคน จากนั้นใช้ API เพื่อติดตามเหยื่ออย่างลับ ๆ และส่งคำสั่งอย่างเปิดประตู สตาร์ตรถ หรือบีบแตรได้
การสร้างแดชบอร์ดพิสูจน์แนวคิด
- เพื่อแสดงให้เห็นถึงความร้ายแรงของช่องโหว่นี้ เราได้สร้างแดชบอร์ดพิสูจน์แนวคิดที่ทำให้ผู้โจมตีสามารถ (1) ป้อนป้ายทะเบียนของรถ Kia (2) ดึงข้อมูลส่วนบุคคลของเจ้าของรถ และ (3) สั่งควบคุมรถได้
- หน้า "Exploit" ใช้สำหรับพยายามเข้าถึงรถโดยไม่ได้รับอนุญาต ส่วนหน้า "Garage" ใช้สั่งงานและติดตามตำแหน่ง
- เราทดสอบกับรถ Kia ที่เช่ามาและถูกล็อกอยู่ และในวิดีโอด้านบนสุดของบล็อกจะเห็นการแฮ็กรถผ่านสมาร์ตโฟน จากนั้นสั่งล็อก/ปลดล็อกประตู เปิด/ดับเครื่อง บีบแตร และติดตามตำแหน่งจากระยะไกลได้
บทสรุป
- เช่นเดียวกับที่ Meta อาจเผลอทำการเปลี่ยนแปลงโค้ดระหว่างการพัฒนาจนเปิดทางให้ใครบางคนยึดบัญชี Facebook ของคุณได้ ผู้ผลิตรถยนต์ก็อาจสร้างช่องโหว่ลักษณะเดียวกันขึ้นในรถของคุณได้เช่นกัน
- ต่อจากนี้ไป เราจะยังคงพบช่องโหว่ในรถยนต์ต่อไป
ไทม์ไลน์
- 06/07/24 16:40 UTC - สอบถามทีม Kia ถึงวิธีรายงานช่องโหว่
- 06/10/24 13:21 UTC - ได้รับคำตอบจากทีม Kia
- 06/11/24 22:41 UTC - รายงานช่องโหว่
- 06/12/24 18:20 UTC - ส่งอีเมลแจ้งเตือน ticket เนื่องจากระดับความรุนแรง
- 06/14/24 18:00 UTC - ทีม Kia ตอบว่ากำลังตรวจสอบ
- 06/18/24 16:41 UTC - ส่งอีเมลแจ้งเตือน ticket และภาพหน้าจอของเครื่องมือเนื่องจากระดับความรุนแรง
- 06/20/24 02:54 UTC - ส่งอีเมลแจ้งเตือน ticket และภาพหน้าจอการเข้าถึงผ่านการป้อนป้ายทะเบียน
- 08/12/24 12:30 UTC - ขออัปเดตผ่านอีเมลแจ้งเตือน ticket
- 08/14/24 17:41 UTC - ทีม Kia ตอบว่าช่องโหว่ได้รับการแก้ไขแล้วและกำลังทดสอบ
- 09/26/24 08:15 UTC - ยืนยันการแก้ไขช่องโหว่และเปิดเผยต่อสาธารณะ
ความเห็นของ GN⁺
- นี่เป็นกรณีที่น่าตกใจซึ่งแสดงให้เห็นว่าการแฮ็กรถยนต์กำลังกลายเป็นเรื่องจริง ยิ่งรถเชื่อมต่ออินเทอร์เน็ตมีมากขึ้น ปัญหาช่องโหว่แบบนี้ก็จะยิ่งรุนแรงขึ้น
- เหตุการณ์นี้สะท้อนอย่างชัดเจนถึงการขาดความตระหนักด้านความปลอดภัยและการออกแบบระบบที่หละหลวมของผู้ผลิตรถยนต์ การนำ secure software development lifecycle (SSDLC) มาใช้ เช่น การจัดการช่องโหว่ซอฟต์แวร์และ code review ดูเป็นเรื่องเร่งด่วน
- เทคโนโลยีควบคุมรถจากระยะไกลช่วยเพิ่มความสะดวก แต่ในขณะเดียวกันก็ขยายพื้นผิวการโจมตีด้วย การรักษาสมดุลระหว่างเทคโนโลยี ความปลอดภัย และความเป็นส่วนตัวจึงสำคัญ
- เหตุการณ์นี้ยังเผยให้เห็นปัญหาของวิธีการยืนยันตัวตนที่อิงกับข้อมูลส่วนบุคคล การที่รู้เพียงป้ายทะเบียนก็ยึดรถได้ถือว่าหละหลวมเกินไป จำเป็นต้องมีระบบยืนยันตัวตนที่เข้มแข็งขึ้น เช่น biometric authentication หรือ multi-factor authentication
- ผู้ใช้ควรสามารถรับรู้และควบคุมสถานะความปลอดภัยของรถตัวเองได้ ต้องมีฟังก์ชันแจ้งเตือนว่าใครเข้าถึงรถของฉัน และมีการสั่งงานอะไรบ้าง
4 ความคิดเห็น
โห น่ากลัวมาก
ผมคิดว่าควรมีตัวเลือกที่เหมาะสมให้เจ้าของรถสามารถตัดการเชื่อมต่อระหว่างรถกับอินเทอร์เน็ตออกทางกายภาพได้
สงสัยโครงสร้างแพ็กเกจอยู่พอดี ที่แท้ก็ให้ใช้ฟรีพื้นฐานหลายปีเพื่อดึงให้สมัครนี่เอง..
ความคิดเห็นจาก Hacker News
การที่ Kia ตัดสินใจละเว้นระบบ interlock ในรถที่จำหน่ายในสหรัฐฯ ทำให้เกิดปัญหาการขโมยรถในวงกว้างทั่วประเทศ
สามารถสร้างแอป "rideshare" ที่ครอว์ลฐานข้อมูลรถ Kia ที่มีช่องโหว่ เพื่อแสดงรถ Kia ใกล้เคียงและปลดล็อกได้
ปัญหาคือใครก็สมัครเป็นดีลเลอร์ได้ และดีลเลอร์ยังสามารถดูข้อมูลรถที่ยังไม่ได้ขายได้ด้วย
ตามบทความ เดิมทีมีเพียง Kia และดีลเลอร์เท่านั้นที่ติดตามรถได้ แต่ตอนนี้คนที่ "ไม่ได้รับอนุญาต" ก็ทำได้แล้ว
ปัญหาคือ Kia เก็บข้อมูลเกี่ยวกับรถและเจ้าของไว้เป็นจำนวนมาก
พี่ชายคนหนึ่งที่เป็นเจ้าของรถ Kia กำลังได้รับผลกระทบด้านลบต่อสุขภาพจิตจากเหตุการณ์ขโมยรถ
จะไม่ซื้อรถที่ต้องสร้างบัญชีออนไลน์เพื่อเปิดใช้งานรถ
ตอนนี้ไม่มีรถใหม่ในตลาดที่ไม่มีฟีเจอร์เชื่อมต่อแล้ว
ในฐานะเจ้าของรถ Kia รู้สึกโล่งใจที่ช่องโหว่ถูกแก้แล้วและไม่ได้ถูกนำไปใช้ในทางร้าย
คิดว่าไม่ควรเชื่อมต่อรถเข้ากับอินเทอร์เน็ต