CVE-2015-7547: glibc getaddrinfo ngăn xếp dựa trên tràn bộ đệm
16 Tháng hai 2016
đăng bởi Fermin J. Serna, Nhân viên an ninh kỹ sư và Kevin Stadmeyer, Giám đốc chương trình kỹ thuật
Đã bao giờ bạn được sâu trong mỏ gỡ lỗi và chợt nhận ra rằng mình đã nhìn chằm chằm vào một cái gì đó thú vị hơn nhiều hơn bạn mong đợi? Bạn không đơn độc! Gần đây, một kỹ sư của Google nhận thấy rằng khách hàng của họ SSH segfaulted mỗi khi họ cố gắng để kết nối đến một máy chủ cụ thể. Kỹ sư đó nộp một vé để điều tra hành vi và sau khi một cuộc điều tra cường độ cao, chúng tôi phát hiện ra vấn đề nằm ở glibc và không có trong SSH như chúng tôi mong đợi.
Nhờ sự quan sát sắc sảo của kỹ sư này, chúng tôi đã có thể xác định rằng vấn đề này có thể dẫn đến thực thi mã từ xa . Chúng tôi ngay lập tức bắt đầu một phân tích sâu về vấn đề này để xác định xem nó có thể được khai thác, và có thể sửa chữa. Chúng tôi nhận thấy đây là một thách thức, và sau một vài phiên hacking cường độ cao, chúng tôi có thể đưa ra một công việc đầy đủ khai thác!
Trong quá trình điều tra của chúng tôi, và thật ngạc nhiên, chúng tôi được biết các nhà bảo trì glibc trước đây đã được cảnh báo về vấn đề này thông qua tracker của họ lỗi trong Tháng Bảy, 2015. (bug). Chúng ta có thể không ngay lập tức nói cho dù sửa chữa lỗi được tiến hành, vì vậy chúng tôi đã làm việc chăm chỉ để đảm bảo rằng chúng tôi hiểu vấn đề và sau đó đã tìm đến các nhà bảo trì glibc. Để thỏa thích của chúng tôi, Florian Weimer và Carlos O'Donell của Red Hat cũng đã nghiên cứu ảnh hưởng của lỗi, mặc dù hoàn toàn độc lập! Do tính chất nhạy cảm của vấn đề, điều tra, tạo ra bản vá, và kiểm tra hồi quy thực hiện chủ yếu bởi Florian và Carlos đã tiếp tục "off-lỗi."
Đây là một trùng hợp ngẫu nhiên, và nhờ vào công việc khó khăn của họ và hợp tác, chúng tôi có thể . dịch kiến thức cả hai đội 'vào một thử nghiệm bản vá và suy thoái toàn diện để bảo vệ người dùng glibc
vá đó có sẵn ở đây.
Issue Tóm tắt:
điều tra ban đầu của chúng tôi cho thấy rằng vấn đề này ảnh hưởng đến tất cả các phiên bản của glibc kể từ 2.9. Bạn chắc chắn nên cập nhật nếu bạn đang ở trên một phiên bản cũ mặc dù. Nếu lỗ hổng được phát hiện, các chủ sở hữu máy có thể muốn thực hiện các bước để giảm thiểu nguy cơ bị tấn công.
Các glibc DNS phía khách hàng giải quyết là dễ bị lỗi tràn bộ đệm dựa trên stack khi getaddrinfo () chức năng thư viện được sử dụng. Phần mềm sử dụng chức năng này có thể được khai thác với các tên miền kẻ tấn công kiểm soát, các máy chủ DNS kẻ tấn công kiểm soát, hoặc thông qua một cuộc tấn công man-in-the-middle.
Google đã tìm thấy một số giải pháp giảm thiểu có thể giúp ngăn chặn khai thác nếu bạn không thể ngay lập tức vá bạn thể hiện của glibc. Lỗ hổng này dựa trên một quá khổ (2048+ byte) UDP hoặc TCP phản ứng, được theo sau bởi một phản ứng đó sẽ ghi đè lên stack. Giảm nhẹ đề nghị của chúng tôi là để hạn chế các phản ứng (ví dụ, thông qua dnsmasq hoặc các chương trình tương tự) có kích thước chấp nhận bởi bộ giải quyết DNS tại địa phương cũng như để đảm bảo rằng các truy vấn DNS được chỉ gửi đến các máy chủ DNS mà giới hạn kích thước đáp ứng cho phản ứng UDP với bit cắt ngắn bộ.
thông tin kỹ thuật:
. dự trữ glibc 2048 byte trong ngăn xếp qua alloca () cho câu trả lời DNS tại _nss_dns_gethostbyname4_r () để lưu trữ các phản ứng với một truy vấn DNS
Sau đó, tại send_dg () và send_vc (), nếu các phản ứng lớn hơn 2048 byte, một bộ đệm mới được phân bổ từ đống và tất cả các thông tin (đệm trỏ, kích thước bộ đệm mới và kích thước phản ứng) được cập nhật.
trong điều kiện nhất định không phù hợp giữa đống đệm và giao heap mới sẽ xảy ra. Hiệu quả cuối cùng là ngăn xếp bộ đệm sẽ được sử dụng để lưu trữ các phản ứng DNS, mặc dù phản ứng lớn hơn chồng đệm và một bộ đệm heap đã được phân bổ. Hành vi này dẫn đến tràn ngăn xếp đệm.
Các vectơ để kích hoạt lỗi tràn bộ đệm này là rất phổ biến và có thể bao gồm ssh, sudo, và cong. Chúng tôi tin tưởng rằng các vectơ khai thác rất đa dạng và phổ biến; chúng tôi đã không cố gắng để liệt kê các vectơ thêm.
Khai thác:
thực thi mã từ xa là có thể, nhưng không phải đơn giản. Nó đòi hỏi phải bỏ qua các giải pháp giảm thiểu bảo mật trên hệ thống, chẳng hạn như ASLR. Chúng tôi sẽ không phát hành khai thác của chúng tôi mã, nhưng một Proof phi vũ khí của Concept đã được làm sẵn có đồng thời với bài blog này. Với bằng chứng này của khái niệm, bạn có thể xác minh nếu bạn bị ảnh hưởng bởi vấn đề này, và xác minh bất kỳ giải pháp giảm thiểu bạn có thể muốn để ban hành.
Như bạn có thể thấy trong các phiên gỡ lỗi dưới đây chúng ta có thể tin cậy kiểm soát EIP / RIP.
(Gdb) x / i $ rip
=> 0x7fe156f0ccce <_nss_dns_gethostbyname4_r + 398>: req
(gdb) x / a $ RSP
0x7fff56fd8a48: 0x4242424242424242 0x4242424242420042
Khi mã lỗi bất thường, nó có thể là một dấu hiệu của một cái gì đó nhiều hơn đáng kể hơn nó xuất hiện; ! bỏ qua tai nạn nguy hiểm của bạn
không thành công khai thác các chỉ số, do ASLR, có thể dao động từ:
Sụp đổ về miễn phí (ptr) nơi ptr được điều khiển bởi những kẻ tấn công.
Sụp đổ về miễn phí (ptr) nơi ptr là bán điều khiển bởi những kẻ tấn công từ ptr có là một địa chỉ có thể đọc được hợp lệ.
sụp đổ đọc từ bộ nhớ trỏ bởi một biến ghi đè địa phương.
đang được dịch, vui lòng đợi..