แนะนำเทคนิคใหม่สำหรับการใช้ประโยชน์จากช่องโหว่ใน SQLite

นักวิจัยจากจุดตรวจสอบ เปิดเผย ในการประชุม DEF CON รายละเอียดของเทคนิคใหม่สำหรับการโจมตีแอปพลิเคชันโดยใช้ SQLite เวอร์ชันที่มีช่องโหว่ วิธี Check Point พิจารณาไฟล์ฐานข้อมูลเป็นโอกาสในการรวมสถานการณ์เพื่อหาช่องโหว่ในระบบย่อย SQLite ภายในต่างๆ ที่ไม่สามารถหาประโยชน์ได้โดยตรง นักวิจัยยังได้เตรียมเทคนิคสำหรับการหาประโยชน์จากช่องโหว่โดยการเข้ารหัสการใช้ประโยชน์ในรูปแบบของชุดคำสั่ง SELECT ในฐานข้อมูล SQLite ซึ่งช่วยให้คุณข้าม ASLR ได้

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

ตัวอย่างเช่น เราแสดงให้เห็นถึงความสามารถในการรันโค้ดใน iOS เมื่อเปิดสมุดที่อยู่ ไฟล์ที่มีฐานข้อมูล “AddressBook.sqlitedb” ได้รับการแก้ไขโดยใช้วิธีการที่เสนอ การโจมตีดังกล่าวใช้ช่องโหว่ในฟังก์ชัน fts3_tokenizer (CVE-2019-8602, ความสามารถในการอ้างอิงตัวชี้) ซึ่งแก้ไขแล้วในการอัพเดต SQLite 2.28 เดือนเมษายน พร้อมด้วยช่องโหว่อื่น ช่องโหว่ ในการใช้งานฟังก์ชั่นหน้าต่าง นอกจากนี้ ยังสาธิตการใช้วิธีการควบคุมเซิร์ฟเวอร์แบ็กเอนด์ของผู้โจมตีจากระยะไกลที่เขียนด้วย PHP ซึ่งรวบรวมรหัสผ่านที่ถูกดักจับระหว่างการทำงานของโค้ดที่เป็นอันตราย (รหัสผ่านที่ถูกสกัดกั้นถูกส่งในรูปแบบของฐานข้อมูล SQLite)

วิธีการโจมตีนั้นใช้เทคนิคสองอย่างคือ "Query Hijacking" และ "Query Oriented Programming" ซึ่งอนุญาตให้ใช้ประโยชน์จากปัญหาที่กำหนดเองซึ่งนำไปสู่ความเสียหายของหน่วยความจำในกลไก SQLite สาระสำคัญของ "Query Hijacking" คือการแทนที่เนื้อหาของฟิลด์ "sql" ในตารางบริการ sqlite_master ซึ่งกำหนดโครงสร้างของฐานข้อมูล ฟิลด์ที่ระบุประกอบด้วยบล็อก DDL (Data Definition Language) ที่ใช้เพื่ออธิบายโครงสร้างของอ็อบเจ็กต์ในฐานข้อมูล คำอธิบายถูกระบุโดยใช้ไวยากรณ์ SQL มาตรฐาน เช่น ใช้โครงสร้าง "สร้างตาราง"
ซึ่งดำเนินการระหว่างกระบวนการเริ่มต้นฐานข้อมูล (ระหว่างการเปิดตัวครั้งแรก
ฟังก์ชัน sqlite3LocateTable เพื่อสร้างโครงสร้างภายในที่เกี่ยวข้องกับตารางในหน่วยความจำ

แนวคิดก็คือ จากการแทนที่ "CREATE TABLE" ด้วย "CREATE VIEW" คุณจะสามารถควบคุมการเข้าถึงฐานข้อมูลได้โดยการกำหนดมุมมองของคุณเอง การใช้ "CREATE VIEW" การดำเนินการ "SELECT" จะถูกผูกไว้กับตาราง ซึ่งจะถูกเรียกแทน "CREATE TABLE" และช่วยให้คุณเข้าถึงส่วนต่างๆ ของล่าม SQLite ถัดไป วิธีการโจมตีที่ง่ายที่สุดคือการเรียกใช้ฟังก์ชัน "load_extension" ซึ่งช่วยให้คุณสามารถโหลดไลบรารี่ที่มีส่วนขยายได้ตามใจชอบ แต่ฟังก์ชันนี้จะถูกปิดใช้งานตามค่าเริ่มต้น

ในการโจมตีเมื่อเป็นไปได้ที่จะดำเนินการ "SELECT" จะมีการเสนอเทคนิค "Query Oriented Programming" ซึ่งทำให้สามารถใช้ประโยชน์จากปัญหาใน SQLite ที่นำไปสู่ความเสียหายของหน่วยความจำได้ เทคนิคนี้ชวนให้นึกถึงการเขียนโปรแกรมเชิงผลตอบแทน (ROP, การเขียนโปรแกรมเชิงส่งคืน) แต่ใช้ข้อมูลโค้ดเครื่องที่ไม่มีอยู่เพื่อสร้างสายการเรียก (“แกดเจ็ต”) แต่แทรกในชุดของแบบสอบถามย่อยภายใน SELECT

แนะนำเทคนิคใหม่สำหรับการใช้ประโยชน์จากช่องโหว่ใน SQLite

แนะนำเทคนิคใหม่สำหรับการใช้ประโยชน์จากช่องโหว่ใน SQLite

ที่มา: opennet.ru

เพิ่มความคิดเห็น