Bên trong các cuộc tấn công tràn bộ đệm:
cơ chế, phương pháp, & công tác phòng chống
Mark E. Donaldson
3 tháng 4 năm 2002
GSEC Phiên bản 1.3
trừu tượng
mục tiêu của nghiên cứu này là để có một bên trong cuộc tấn công tràn bộ đệm và thu hẹp khoảng cách giữa các tài khoản"mô tả" và "tài khoản kỹ thuật chuyên sâu". Mục đích là để cung cấp một hợp lý, chi tiết, và kỹ thuật. giải thích về vấn đề và khai thác có thể được hiểu rõ bởi tất cả, bao gồm cả những người có ít nền trong cơ học và phương pháp luận của ứng dụng
lập trình. quyền
chúng tôi sẽ bắt đầu bằng cách nhìn vào vấn đề"" và problemfull "cơ chế", và sau đó điều tra các phương tiện"" và "phương pháp". Dựa trên những gì chúng tôi tìm thấy, chúng tôi sẽ
mối quan tâm an ninh, nó là chắc chắn trong vòng khả năng realmretainsof rằng cuộc tấn công tràn bộ đệm được giảm đến một mức độ không quan trọng thông qua đúng
kết luận với các khuyến nghị, và chọn "chống". Hy vọng rằng điều này
phương pháp tiếp cận cũng có thể giúp thu hẹp khoảng cách giữa "kiến thức" và
"hiểu biết". Mặc dù nó có thể không bao giờ có thể dọn sạch các thế giới này
sự hiểu biết. Robert Louis StevensonAuthoronce đã viết: "nhìn vào chính mình. Có thể bạn trở thành một bác sĩ, một người đàn ông chữa bệnh, với những đôi mắt đã thấy? Đó là rất nhiều kiến thức trong đôi mắt, nhưng không có understanding.1 "cộng đồng công nghệ phải di chuyển từ chiến đấu tấn công bộ đệm tràn ngập phòng thủ để chiến đấu họ offensively. Để làm điều này, họ phải chuyển đổi kiến thức của mình vào sự hiểu biết.
Năm 2002 vấn đề,
vấn đề bộ đệm Instituteoverruns2 liên quan đến C lập trình ngôn ngữ toàn vẹn mô hình dữ liệu đầu tiên được công nhận sớm nhất là năm 1973. Người đầu tiên nổi tiếng
khai thác lỗ hổng này diễn ra năm 1988 khi các tài liệu và nổi tiếng Internet mòn tắt trên các hệ thống 6.000 trong chỉ là một vài giờ ngắn, sử dụng một bộ đệm đánh dấu khởi tạo bởi cuộc gọi chức năng gets() trong fingerd
quá trình daemon. Mặc dù này dài lịch sử và phương pháp phòng ngừa đơn giản, lỗi tràn bộ đệm tiếp tục là một bảo mật máy tính quan trọng và nổi bật
quan tâm ngay cả ngày nay. Ví dụ, bộ đệm tràn vấn đề có liên quan đến
© SANS
1 Robert Louis Stevenson từ "The cơ thể Snatcher" được xuất bản vào năm 1881.
2 tràn bộ đệm đã giả định một số tên gọi khác nhau trong những năm qua. Chúng bao gồm bộ đệm overrun, ngăn xếp overrun và ngăn xếp tràn. Trong thực tế, tất cả các điều khoản này chia sẻ cùng một định nghĩa và có thể được sử dụng synonymously và thay thế cho nhau. Ngoài ra, khai thác lỗi tràn bộ đệm ngăn xếp thường được gọi là "stack đập" trong parlance ngày nay.
2/6/2003 Trang 1 của 24
© SANS viện năm 2002, như là một phần của phòng đọc sách bảo mật thông tin. Tác giả vẫn giữ đầy đủ quyền.
năm trong số Sans "Top 20" vulnerabilities.3 nếu một mạo hiểm để SuSE Linux Web trang web, họ sẽ tìm thấy 22 bộ đệm tràn lỗ hổng kể từ tháng 1 năm 2001 đòi hỏi phải vá (xem bảng tôi). Ngoài ra, của tư vấn CERT 44 xuất bản từ năm 1997 đến năm 1999, 24 được liên quan đến bộ đệm tràn ngập các vấn đề.
bàn tôi
bộ đệm tràn lỗ hổng SUSE LINUX
ngày lỗ hổng
12.03.2002 lỗi tràn bộ đệm trong thư viện zlib.
04.03.2002 lỗi tràn bộ đệm trong mực
28,02.2002revised: lỗi tràn bộ đệm trong cupsd
28.02.2002 bộ đệm tràn trong mod_php4 và mod php
25.02.2002buffer tràn trong cupsd
25.01.2002buffer tràn trong rsync lỗi tràn bộ đệm trong rsync
16.01.2002buffer tham nhũng tràn trong/usr/bin/at quyền
07.01.2002buffer tràn trong mutt
24.12.2001buffer tràn trong glibc globbing functionsfull
03.12.2001buffer tràn vấn đề trong openssh
28.11.2001buffer tràn trong wuftpd
10.10.2001 tràn trong lpd/lprold
20.09.2001buffer tràn trong WindowMaker
lỗi tràn bộ đệm 03.09.2001daemon (nkitb)
giữ lại
23.08.2001signedness lỗi tràn bộ đệm trong sendmail
17.08.2001 lỗi tràn bộ đệm fetchmail
lỗi tràn bộ đệm 24.07.2001(xli), địa phương từ xa
18.04.2001exploitable lỗi tràn bộ đệm trong sudo
09.04.lỗi tràn bộ đệm khai thác từ xa 2001xntpd
27.03.2001buffer tràn trong eperl
tác giả
22.03.2001one-byte-buffer tràn trong bsd-ftpd và trong hẹn giờ
31.01.2001buffer tràn trong bind8 (vấn đề mới; Tháng 1 năm 2001)
nán lại bộ đệm overruns2002,
cư dân và còn lại trong mã chương trình thường được quy cho
lỗi tràn bộ đệm Institutevulnerability và tấn công chỉ vẫn lỏng lẻo và không chính thức tài liệu trong các tài liệu. Từ đây, người ta có thể kết luận vấn đề là
"lười", "sloppy", hoặc "uncaring" lập trình, hoặc để trình biên dịch hiện đại không
thực hiện toàn vẹn hoặc giới hạn kiểm tra về nguồn gốc của họ đầu vào hoặc đầu ra máy
hướng dẫn. Tuy nhiên, những quan điểm có thể là một chút quá đơn giản. Gốc rễ của sự
vấn đề có thể chạy sâu hơn đó. Ví dụ, mặc dù sự phổ biến của họ hôm nay,
nói chung không được hiểu rõ. Điều này có thể giải thích lý do tại sao tràn ngập các lỗ hổng
tiếp tục xuất hiện trong các ứng dụng phần mềm mới.
SANS là cần thiết ở đây. Thật vậy, lỗi tràn bộ đệm và khai thác
làm rõ một số ©
vấn đề đang nổi tiếng. Thật không may, "nổi tiếng" và "cũng hiểu" thường là hai quan điểm hoàn toàn khác nhau của cùng một điều. Ví dụ, gần như mỗi cuốn sách, bài viết, hoặc giấy trắng giá trị muối của nó tập trung vào bảo mật máy tính
3 bao gồm W2-ISAPI mở rộng bộ đệm tràn, U1-đệm tràn trong dịch vụ RPC, điểm yếu U3-ràng buộc, U5-LPD (giao thức in từ xa daemon), và U6-sadmind và mountd. 2/6/2003 trang 2 của 24
© SANS viện năm 2002, như là một phần của phòng đọc sách bảo mật thông tin. Tác giả vẫn giữ đầy đủ quyền.
đề cập đến dễ bị tổn thương tràn bộ đệm và các yếu tố cho phép của họ. Họ thường ngay cả trang web preventions hoặc phòng thủ chống lại họ. Tuy nhiên, họ thường tránh thảo luận hoặc mô tả chi tiết phức tạp hoặc các cơ chế phức tạp của nguyên nhân của họ và sử dụng manipulative của họ trong điều kiện mà có thể dễ dàng được hiểu bởi những người mới hoặc thiếu kinh nghiệm lập trình viên, quản trị hệ thống, hoặc máy tính bảo mật chuyên viên hoặc hiệu trưởng.
chắc chắn, một số chi tiết tài khoản của việc khai thác lỗi tràn bộ đệm đã được viết. Những đã được trích dẫn bởi Nicole LaRock Decker trong giấy GSEC của cô "tràn bộ đệm: tại sao, như thế nào và công tác phòng chống". Tuy nhiên, các tài khoản này. được viết bởi đặc biệt rực rỡ, và có lẽ quanh co, lập trình viên đã chọn để nhảy thẳng vào các chi tiết của thấp cấp máy và lắp ráp mã cần thiết
để có hiệu lực khai thác overrun. Một độc giả điển hình của các tài khoản thường trở nên
quyền
bị choáng ngợp bởi đoạn thứ ba, và đưa vào văn bản để nghỉ ngơi.
THE cơ chế đầy đủ
1997 nghiên cứu "Xếp chồng tuyệt VulnerabilitiesretainsInThe hệ điều hành UNIX." Tuy nhiên, các lỗ hổng là không chỉ giới hạn C hoặc UNIX. Thật vậy, cả hai DilDog
bộ đệm tràn lỗ hổng thường được quy cho những ảnh hưởng kết hợp của các
tính năng bảo mật quyền của các hệ điều hành UNIX và khiếm khuyết trong C
ngôn ngữ lập trình. Đó là tiền đề cho rằng bởi Nathan Smith trong
tràn "và"Exploiting Windows NT4 tác giả bộ đệm nghiêm." Giấy "Windows
và David Litchfield chứng minh việc khai thác có thể được sử dụng có hiệu quả chống lại
hạt nhân Windows NT trong giấy tờ tương ứng của họ "Tao Windows đệm
lỗi tràn bộ đệm NT bắt đầu để kết thúc" cho thấy vấn đề hiện tại và có thể trong vòng MFC4 là tốt. Do đó, this2002, giấy xem lỗi tràn bộ đệm như là một ngôn ngữ và một hệ điều hành độc lập vấn đề.
tập đoàn Microsoft xác định tấn công tràn bộ đệm như sau:
Một bộ đệm tràn attackInstituteisan tấn công trong đó một người sử dụng độc hại khai thác một bộ đệm đánh dấu trong một chương trình và sẽ ghi đè mã chương trình với dữ liệu của họ sở hữu. Nếu các
mã chương trình được ghi đè bằng mã thực thi mới, hiệu quả là để thay đổi hoạt động của chương trình là khiển bởi những kẻ tấn công. Nếu ghi đè bằng dữ liệu khác, hiệu quả có khả năng là gây ra chương trình sụp đổ.
Kể từ khi Microsoft đã sản xuất của họ chia sẻ công bằng của bộ đệm tràn lỗ hổng
trong những năm qua, SANS họ nên được thành thạo về vấn đề và chúng tôi không nên
nghi ngờ tính hợp lệ © của mô tả này. Vì vậy, chúng tôi sẽ sử dụng này như chúng tôi làm việc chính thức
định nghĩa. Nhưng những gì chính xác này có nghĩa là? Và, làm thế nào để chúng tôi có được có?
4 MFC là viết tắt của Microsoft Foundation Class, Của Microsoft hướng đối tượng C library.
2/6/2003 trang 3 của 24
© SANS viện năm 2002, như là một phần của phòng đọc sách bảo mật thông tin. Tác giả vẫn giữ đầy đủ quyền.
để trả lời những câu hỏi đầy đủ, chúng tôi phải bắt đầu bằng cách nhìn vào mã ngôn ngữ cấp cao và mã máy kết quả các cấp độ cơ bản nhất của "phần cứng chuỗi", và điều tra làm thế nào các kiến trúc bộ xử lý 80386 thật quản lý và sử dụng memory.5
The lỗi tràn bộ đệm
lỗi tràn bộ đệm là rất nhiều giống như đổ mười ounce nước trong một ly thiết kế để giữ 8 ounce. Rõ ràng, khi điều này xảy ra, nước tràn mép của kính, tràn ra một nơi nào đó và tạo ra một mess.
6.
ở đây, thủy tinh đại diện cho các bộ đệm và nước đại diện cho ứng dụng hoặc
dữ liệu người dùng. Hãy xem xét một đoạn mã đơn giản C/C mà overruns một bộ đệm.
trong chức năng này, chúng tôi có một bộ đệm khả năng nắm giữ tám ký tự ASCII.
quyền
giả sử chúng tôi đang trên một hệ thống 32-bit, điều này có nghĩa là 16 byte bộ nhớ đã
phân bổ cho các bộ đệm. Chúng tôi sau đó đặt đầy đủ
bộ đệm trong một vòng lặp khởi tạo và lực lượng -
feed 15 "x" ký tự vào nó thông qua
lỗi lập trình. Rõ ràng là họ phải
tất cả sẽ phù hợp, và 9 trong số họ phải đổ
hơn vào một số khu vực bộ nhớ khác như các
nước tràn thủy tinh của nó. Thông báo có
không có mã trong chức năng này để kiểm tra các
giới hạn của mảng hoặc để ngăn chặn điều này
lập trình lỗi xảy ra. Dưới
Hầu hết các điều kiện, overrun aAuthorbuffer
không trình bày một vấn đề bảo mật trong
với một lõi
đang được dịch, vui lòng đợi..