ช่องโหว่ Backport ใน RouterOS ทำให้อุปกรณ์หลายแสนเครื่องตกอยู่ในความเสี่ยง

ช่องโหว่ Backport ใน RouterOS ทำให้อุปกรณ์หลายแสนเครื่องตกอยู่ในความเสี่ยง

ความสามารถในการดาวน์เกรดอุปกรณ์จากระยะไกลโดยใช้ RouterOS (Mikrotik) ทำให้อุปกรณ์เครือข่ายหลายแสนเครื่องตกอยู่ในความเสี่ยง ช่องโหว่นี้เกี่ยวข้องกับการวางพิษแคช DNS ของโปรโตคอล Winbox และอนุญาตให้คุณโหลดเฟิร์มแวร์ที่ล้าสมัย (ด้วยการรีเซ็ตรหัสผ่านเริ่มต้น) หรือเฟิร์มแวร์ที่แก้ไขลงในอุปกรณ์

ช่องโหว่ Backport ใน RouterOS ทำให้อุปกรณ์หลายแสนเครื่องตกอยู่ในความเสี่ยง

รายละเอียดช่องโหว่

เทอร์มินัล RouterOS รองรับคำสั่งแก้ไขสำหรับการค้นหา DNS

ช่องโหว่ Backport ใน RouterOS ทำให้อุปกรณ์หลายแสนเครื่องตกอยู่ในความเสี่ยง

คำขอนี้ได้รับการจัดการโดยไบนารีที่เรียกว่าตัวแก้ไข Resolver เป็นหนึ่งในไบนารีจำนวนมากที่เชื่อมต่อกับโปรโตคอล Winbox ของ RouterOS ในระดับสูง "ข้อความ" ที่ส่งไปยังพอร์ต Winbox สามารถกำหนดเส้นทางไปยังไบนารีต่างๆ ใน ​​RouterOS ตามรูปแบบการกำหนดหมายเลขแบบอาเรย์

ตามค่าเริ่มต้น RouterOS จะปิดใช้งานคุณลักษณะเซิร์ฟเวอร์ DNS

ช่องโหว่ Backport ใน RouterOS ทำให้อุปกรณ์หลายแสนเครื่องตกอยู่ในความเสี่ยง

อย่างไรก็ตาม แม้ว่าฟังก์ชันเซิร์ฟเวอร์จะถูกปิดใช้งาน เราเตอร์จะรักษาแคช DNS ของตัวเองไว้

ช่องโหว่ Backport ใน RouterOS ทำให้อุปกรณ์หลายแสนเครื่องตกอยู่ในความเสี่ยง

เมื่อเราทำการร้องขอโดยใช้ winbox_dns_request สำหรับ example.com เราเตอร์จะแคชผลลัพธ์

ช่องโหว่ Backport ใน RouterOS ทำให้อุปกรณ์หลายแสนเครื่องตกอยู่ในความเสี่ยง

เนื่องจากเราสามารถระบุเซิร์ฟเวอร์ DNS ที่ต้องการส่งคำขอได้ การป้อนที่อยู่ที่ไม่ถูกต้องจึงเป็นเรื่องเล็กน้อย ตัวอย่างเช่น คุณสามารถกำหนดค่าการใช้งานเซิร์ฟเวอร์ DNS ได้ ฟิลิป เคลาส์เพื่อตอบกลับด้วยบันทึก A ที่มีที่อยู่ IP 192.168.88.250 เสมอ

def dns_response(data):
    request = DNSRecord.parse(data)
    reply = DNSRecord(DNSHeader(
        id=request.header.id, qr=1, aa=1, ra=1), q=request.q)
    qname = request.q.qname
    qn = str(qname)
    reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250")))
    print("---- Reply:n", reply)
    return reply.pack()

ตอนนี้หากคุณค้นหา example.com โดยใช้ Winbox คุณจะเห็นว่าแคช DNS ของเราเตอร์เป็นพิษ

ช่องโหว่ Backport ใน RouterOS ทำให้อุปกรณ์หลายแสนเครื่องตกอยู่ในความเสี่ยง

แน่นอนว่าการวางยาพิษ example.com ไม่มีประโยชน์มากนักเนื่องจากเราเตอร์ไม่ได้ใช้งานจริง อย่างไรก็ตาม เราเตอร์จำเป็นต้องเข้าถึง upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com และ download.mikrotik.com และด้วยความผิดพลาดอีกครั้ง คุณจึงสามารถวางยาพิษทั้งหมดได้ในคราวเดียว

def dns_response(data):
    request = DNSRecord.parse(data)
    reply = DNSRecord(DNSHeader(
        id=request.header.id, qr=1, aa=1, ra=1), q=request.q)
    qname = request.q.qname
    qn = str(qname)
    reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250")))
    reply.add_answer(RR("upgrade.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    reply.add_answer(RR("cloud.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    reply.add_answer(RR("cloud2.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    reply.add_answer(RR("download.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    print("---- Reply:n", reply)
    return reply.pack()

เราเตอร์ขอสิทธิ์หนึ่งรายการ และเราให้สิทธิ์คืนห้ารายการ เราเตอร์แคชการตอบสนองเหล่านี้ทั้งหมดไม่ถูกต้อง

ช่องโหว่ Backport ใน RouterOS ทำให้อุปกรณ์หลายแสนเครื่องตกอยู่ในความเสี่ยง

แน่นอนว่าการโจมตีนี้ยังมีประโยชน์หากเราเตอร์ทำหน้าที่เป็นเซิร์ฟเวอร์ DNS เนื่องจากจะทำให้ไคลเอนต์ของเราเตอร์ถูกโจมตีได้

การโจมตีนี้ยังช่วยให้คุณใช้ประโยชน์จากช่องโหว่ที่ร้ายแรงยิ่งขึ้น: ดาวน์เกรดหรือแบ็คพอร์ตเวอร์ชันของ RouterOS ผู้โจมตีสร้างตรรกะของเซิร์ฟเวอร์การอัพเดทขึ้นใหม่ รวมถึงบันทึกการเปลี่ยนแปลง และบังคับให้ RouterOS รับรู้เวอร์ชันที่ล้าสมัย (มีช่องโหว่) ว่าเป็นเวอร์ชันปัจจุบัน อันตรายอยู่ที่ความจริงที่ว่าเมื่อเวอร์ชัน "อัปเดต" รหัสผ่านผู้ดูแลระบบจะถูกรีเซ็ตเป็นค่าเริ่มต้น - ผู้โจมตีสามารถเข้าสู่ระบบด้วยรหัสผ่านที่ว่างเปล่า!


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

การป้องกัน

การปิดใช้งาน Winbox เพียงอย่างเดียวจะช่วยให้คุณสามารถป้องกันตนเองจากการโจมตีเหล่านี้ได้ แม้จะสะดวกในการดูแลระบบผ่าน Winbox แต่ควรใช้โปรโตคอล SSH จะดีกว่า

ที่มา: will.com

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