Lỗ hổng backport trong RouterOS khiến hàng trăm nghìn thiết bị gặp rủi ro

Lỗ hổng backport trong RouterOS khiến hàng trăm nghìn thiết bị gặp rủi ro

Khả năng hạ cấp từ xa các thiết bị dựa trên RouterOS (Mikrotik) khiến hàng trăm nghìn thiết bị mạng gặp rủi ro. Lỗ hổng này có liên quan đến việc đầu độc bộ đệm DNS của giao thức Winbox và cho phép bạn tải chương trình cơ sở đã lỗi thời (với cài đặt lại mật khẩu mặc định) hoặc chương trình cơ sở đã sửa đổi vào thiết bị.

Lỗ hổng backport trong RouterOS khiến hàng trăm nghìn thiết bị gặp rủi ro

Chi tiết về lỗ hổng

Thiết bị đầu cuối RouterOS hỗ trợ lệnh giải quyết để tra cứu DNS.

Lỗ hổng backport trong RouterOS khiến hàng trăm nghìn thiết bị gặp rủi ro

Yêu cầu này được xử lý bởi một hệ nhị phân được gọi là trình phân giải. Resolver là một trong nhiều chương trình nhị phân kết nối với giao thức Winbox của RouterOS. Ở mức cao, "tin nhắn" được gửi tới cổng Winbox có thể được định tuyến đến nhiều tệp nhị phân khác nhau trong RouterOS dựa trên sơ đồ đánh số dựa trên mảng.

Theo mặc định, RouterOS đã tắt tính năng máy chủ DNS.

Lỗ hổng backport trong RouterOS khiến hàng trăm nghìn thiết bị gặp rủi ro

Tuy nhiên, ngay cả khi chức năng máy chủ bị tắt, bộ định tuyến vẫn duy trì bộ đệm DNS của riêng nó.

Lỗ hổng backport trong RouterOS khiến hàng trăm nghìn thiết bị gặp rủi ro

Khi chúng tôi thực hiện yêu cầu bằng winbox_dns_request chẳng hạn như example.com, bộ định tuyến sẽ lưu kết quả vào bộ đệm.

Lỗ hổng backport trong RouterOS khiến hàng trăm nghìn thiết bị gặp rủi ro

Vì chúng tôi có thể chỉ định máy chủ DNS mà yêu cầu sẽ được gửi qua đó nên việc nhập địa chỉ không chính xác là điều bình thường. Ví dụ: bạn có thể định cấu hình triển khai máy chủ DNS từ Philip Klausđể luôn phản hồi bằng bản ghi A chứa địa chỉ 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()

Bây giờ nếu bạn tìm kiếm example.com bằng Winbox, bạn có thể thấy rằng bộ đệm DNS của bộ định tuyến đã bị nhiễm độc.

Lỗ hổng backport trong RouterOS khiến hàng trăm nghìn thiết bị gặp rủi ro

Tất nhiên, việc đầu độc example.com không hữu ích lắm vì bộ định tuyến sẽ không thực sự sử dụng nó. Tuy nhiên, bộ định tuyến cần truy cập vào nâng cấp.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com và download.mikrotik.com. Và nhờ một sai lầm khác, có thể đầu độc tất cả chúng cùng một lúc.

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()

Bộ định tuyến yêu cầu một quyền và chúng tôi cấp lại năm quyền. Bộ định tuyến không lưu trữ chính xác tất cả các phản hồi này.

Lỗ hổng backport trong RouterOS khiến hàng trăm nghìn thiết bị gặp rủi ro

Rõ ràng, cuộc tấn công này cũng hữu ích nếu bộ định tuyến hoạt động như một máy chủ DNS, vì nó cho phép các máy khách của bộ định tuyến bị tấn công.

Cuộc tấn công này cũng cho phép bạn khai thác một lỗ hổng nghiêm trọng hơn: hạ cấp hoặc backport phiên bản RouterOS. Kẻ tấn công tạo lại logic của máy chủ cập nhật, bao gồm cả nhật ký thay đổi và buộc RouterOS coi phiên bản lỗi thời (dễ bị tổn thương) là phiên bản hiện tại. Điều nguy hiểm ở đây nằm ở chỗ khi phiên bản được “cập nhật”, mật khẩu quản trị viên sẽ được đặt lại về giá trị mặc định - kẻ tấn công có thể đăng nhập vào hệ thống bằng mật khẩu trống!


Cuộc tấn công khá hiệu quả, mặc dù thực tế là tác giả thực hiện thêm một số vectơ nữa, bao gồm cả những vectơ liên quan đến nhúng backdoor vào firmware, nhưng đây đã là một kỹ thuật dư thừa và việc sử dụng nó cho các mục đích bất hợp pháp là bất hợp pháp.

sự bảo vệ

Chỉ cần vô hiệu hóa Winbox sẽ cho phép bạn tự bảo vệ mình khỏi những cuộc tấn công này. Mặc dù việc quản trị thông qua Winbox thuận tiện nhưng tốt hơn nên sử dụng giao thức SSH.

Nguồn: www.habr.com

Thêm một lời nhận xét