Bước 1: Khám phá và nhận dạng
có bốn phương tiện chính bởi khám phá hoặc xác định mà có thể mất
đặt: tác giả
1. Bằng cách báo cáo của những người khác, mặc dù bởi cảnh báo bảo mật mũ trắng hoặc bản tin, hoặc
thông qua mũ đen ngầm.
2. Bởi rà soát mã nguồn. năm 2002,
3. Bởi tai nạn hoặc đột quỵ của may mắn.
4. Bởi brute dùng thử andInstituteerror, sử dụng có nghĩa là cố ý và có hệ thống.
TwoSANSmeans đầu tiên là khá rõ ràng và đảm bảo không có thảo luận ở đây. Tình cờ phát hiện thường có thể không được công nhận như vậy, với kết quả cuối cùng là một "tai nạn © bãi chứa" của hệ thống UNIX hoặc NT, hoặc phương ngôn MessageBox thông báo cho người dùng Windows chương trình của họ có thể thực hiện "một bất hợp pháp
hoạt động và sẽ là tắt", hoặc chương trình "hướng dẫn tham chiếu bộ nhớ của họ mà không thể được đọc". Tuy nhiên, hiểu biết hoặc quanh co minded người dùng có thể có thông báo về ý nghĩa tiềm năng và điều tra thêm bằng cách sử dụng brute thử nghiệm và báo lỗi thông qua cố ý và có hệ thống means.
2/6/2003 trang 12 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ả giữ quyền đầy đủ.
Trang 13 của 24
The cuộc biểu tình mã
chiến thuật thử nghiệm và báo lỗi có thể được sử dụng từ đầu bởi những người có quá nhiều thời gian trên bàn tay của họ. Quá trình đường mòn và lỗi nghĩa là bao gồm cho ăn lặp đi lặp lại của thay đổi chiều dài đầu vào thành một chương trình hoặc application15. Bởi cơ hội, Nếu các "chương trình của bạn đã thực hiện một hoạt động bất hợp pháp và sẽ là tắt" hoặc "chương trình hướng dẫn tham chiếu bộ nhớ của bạn mà có thể không được đọc" thông điệp arises16, sau đó "Bingo!! Tại thời điểm này, thêm vào đó điều tra thông qua nhưng nhiều thử và sai là cần thiết để xác định nếu thực sự một overrun bộ đệm đã được phát hiện. Một khi overrun được xác nhận, brainwork thực sự bắt đầu.
.
Điều này có thể là một thời điểm tốt để phá vỡ trong phiên bản đầy đủ của chương trình trình diễn của chúng tôi và bắt đầu thể hiện các thủ tục khai thác. Earli er chúng tôi đã giới thiệu
đến chức năng authenticate() để minh họa các hoạt động ngăn xếp. Đây là toàn bộ
khối mã cho authenticate.exe chương trình: đầy đủ quyền
15 này thường được thực hiện sử dụng chức năng looping trong kịch bản, có hiệu quả "tự động" quá trình.
16 cần lưu ý rằng nhiều loại khác nhau của lỗi có thể tạo ra các thư này. Họ là
không tất cả chỉ của một bộ đệm overrun.
2/6/2003
© 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.
Authnticate.exe là một chương trình đơn giản, và khá thẳng thắn, một cách chính xác như nó là không có khả năng được tìm thấy trong một môi trường sản xuất. Hãy hy vọng không anyway. Tuy nhiên, nó sẽ chứng minh đầy đủ hơn cho thấy chúng tôi như thế nào một hacker hoạt động trên một bộ đệm đánh dấu. Dưới đây là làm thế nào các chương trình hoạt động.
lần đầu tiên, main() phân bổ ba mảng biến có chứa các thông tin cần thiết để xác thực người dùng đăng nhập vào một hệ thống máy tính. Chương trình yêu cầu người dùng nhập tên và mật khẩu của họ. Thông tin này thu được bằng cách gọi các nổi tiếng là flawed17 C tập hợp con gets() chức năng. Sau khi main() có những người sử dụng "tên người dùng" trong tay, nó gọi get_password() chức năng. để có được dự kiến cá "mật khẩu" từ cơ sở dữ liệu hệ thống. Nó sau đó đi "nhập khẩu" và "mật khẩu hệ thống" để bạn cũ của chúng tôi xác thực ()
để chế biến tiếp. quyền
tiếp theo, authenticate() nhanh chóng sao chép hai giá trị passwordfull vào bộ đệm tương ứng của họ bằng cách sử dụng chức năng thiếu sót strcpy(). Cuối cùng, các nội dung của các
hai bộ đệm được so sánh bằng cách gọi các chức năng strcmp() thiếu sót. Nếu hai giá trị phù hợp với người dùng được ủy quyền, và họ được phép sử dụng hệ thống.
bây giờ, hãy chạy nó
giữ lại
có vẻ © công việc khá tốt với tôi. Như bạn có thể nhìn thấy, người dùng nhập vào các
tên người dùng của "đánh dấu" và mật khẩu của "passwd". Điều này kết hợp các mục trong
/ etc/bóng tệp, và người dùng được xác thực thành công. Vì vậy, những gì là vấn đề?
17 Flawed có nghĩa là nó hạnh phúc và sẵn sàng chấp nhận một giá trị đệm như là đối số mà không kiểm tra đầu tiên kích thước hoặc giới hạn của nó. Nổi tiếng có nghĩa là các lỗ hổng"" cũng được biết đến và một mục tiêu dễ dàng để khai thác 2/6/2003 trang 14 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.
bước 2: xác định kích thước bộ đệm
để trả lời câu hỏi này, Hãy trở lại theo dõi để bước 1 (khám phá và nhận dạng) tấn công overrun đệm, và bắt đầu cho ăn khác nhau chiều dài đầu vào thành yêu cầu mật khẩu của chương trình. Và Bingo!! Chúng tôi nhấn trả dirt.
chúng tôi chỉ cần trượt khỏi một bộ đệm và phát hiện ra một lỗ hổng tràn. đầy đủ, bây giờ bước 2.
trước khi chúng tôi có thể làm nhiều với chúng tôi mới được phát hiện vẫn giữ đệm vấn đề, chúng ta cần phải
xác định kích thước chính xác của bộ đệm. Chúng tôi có thể làm điều này thông qua thử nghiệm,
và bởi chậm phát triển và thu hẹp lại số ký tự chúng tôi nhập vào các
bộ đệm. Ngay sau khi chúng tôi xác định số ký tự nó cần để tai nạn chương trình, chính xác, chúng tôi đã hoàn thành StepAuthor2.In trường hợp này, phải mất ít làm việc để tìm ra điều này là một mảng tám ký tự (bảy ký tự cộng với một kẻ hủy diệt null). Chúng tôi
bây giờ biết điểm mà tại đó các bộ đệm bắt đầu tràn. Bây giờ bước 3.
bước 3: điều khiển viết lưu vào bộ đệm dữ liệu
dựa trên những gì chúng tôi đã học về chương trình này vậy, đến nay, bước này có thể là một không có trí tuệ. Hãy nguồn cấp dữ liệu trong một loạt các x và xem nếu chúng ta có thể kiểm soát những gì
sẽ xảy ra trong chương trình. Năm 2002,
2/6/2003 trang 15 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ó vẻ như là mặc dù chúng tôi có thể. Trước tiên, chúng tôi đã nhập cùng tên người dùng của "đánh dấu". Như một chương trình Vâng lời nào, nó thành công lấy mật khẩu chính xác của
"passwd" cho người sử dụng "đánh dấu" từ các tập tin của bóng tối/etc /. Tuy nhiên, thay vì nhập đúng mật khẩu, chúng tôi đã nhập 10 x Một cái gì đó đáng sợ đã xảy ra với những gì chương trình tin là "hệ thống mật khẩu". Bước 3 hoàn thành.
bước 4: ghi đè an ninh nhạy cảm biến dưới đây The đệm
có rất nhiều khả năng hành động một khi các hacker đã đạt đến giai đoạn này
của quá trình. Trong 4 bước của chúng tôi, chúng tôi sẽ cố gắng ghi đè lên một bảo mật nhạy cảm
.
biến bởi tràn bộ đệm dễ bị tổn thương với đầu vào của sự lựa chọn của chúng tôi, do đó
ảnh hưởng đến kết quả của chương trình. Ở đây chúng tôi đi. quyền
kiểm soát của chương trình này.InstituteDepending trên những gì chúng tôi muốn thực hiện, có rất nhiều hướng khác nhau, trong đó chúng tôi có thể đi. Trước tiên, hãy xem xét một
Quan sát rằng chúng tôi chỉ cần thay đổi mật khẩu của hệ thống"" từ "passwd" để "giả mạo"
bởi ghi đè lên nó với đầu vào của sự lựa chọn của chúng tôi. Chúng tôi, các hacker, bây giờ đã hoàn tất
ngăn xếp và xem chính xác những gì đã xảy ra đến thời điểm này (con số 7).
lần đầu tiên, các tham số hai mật khẩu (mật khẩu và etc_password) được thông qua
SANS
vào authenticate() bằng cách tham khảo. W hen authenticate() thực hiện, strcpy() được gọi là
© bản chút bởi bit của etc_password thành buffer1. Tiếp theo, strcpy() là một lần nữa
thực hiện
summands để thực hiện một bản sao chút bởi bit của mật khẩu vào buffer2. Thật không may, strcpy() trả tiền không chú ý đến kích thước hoặc nội dung của mật khẩu hoặc buffer2. Buffer2 tải lên với giá trị tám char, nhưng strcpy() mù quáng tiếp tục bơm giá trị bổ sung từ đầu vào của chúng tôi vào buffer2. Vấn đề thực tế là họ không phù hợp, nhưng phải đi một nơi nào đó. Alas, kính bắt đầu tràn. Do các
2/6/2003 trang 16 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.
bản chất vốn có của ngăn xếp hoạt động, Các giá trị bổ sung char nghĩa là tràn buffer2 và tràn qua vào buffer1. Như một kết quả cuối cùng, chúng tôi thành công thay đổi các
giá trị "mật khẩu" là để được kết hợp với chúng tôi đầu vào cho xác thực. Vì vậy, chúng tôi bây giờ kiểm soát cả hai giá trị tại sẽ.
bước 5: thay thế nhắm mục tiêu thực thi hướng dẫn với khác hướng dẫn
mũ đen hầu hết sẽ không được hài lòng với thành tích này một mình Tuy nhiên. Họ là thường tìm kiếm lớn hơn và thêm những điều hùng vĩ, chẳng hạn như Thang máy của họ
đặc quyền trong hệ thống bằng cách trở thành "gốc" hoặc "quản trị". Mà dẫn chúng ta đến
bước 5. .
Chúng tôi đã học được rất nhiều về ngăn xếp lên đến thời điểm này, cũng như mã cuộc biểu tình của chúng tôi. Ví dụ, khi các cuộc gọi đến authenticate() được thực hiện, Các chương trình và xử lý cần thiết để đánh dấu đường mòn của nó để họ sẽ biết nơi để đi sau khi authenticate() hoàn thành thực hiện nó. Để thực hiện việc này, con trỏ hướng dẫn (EIP) đã được đẩy lên
ngăn xếp trực tiếp sau khi xác thực của ()
giữ lại
tham số. EIP giữ này "địa chỉ trả lại",
và đây là địa chỉ của một tập tin thực thi
hướng dẫn. Chúng tôi quan sát rằng alsoAuthorresides EIP trên ngăn xếp dưới đây các bộ đệm bộ nhớ chúng tôi đã chứng minh có thể được thao tác tại sẽ. Điều này thực sự mang lại một situation.2002 hấp dẫn, trước khi chúng tôi tiến hành, hãy đầu tiên, chúng ta hãy xem nhanh
quá trình hệ thống và đặc quyền.
Hệ thống quy trình viện và đặc quyền
mặc dù cơ chế nội bộ hoạt động khá khác nhau, cả hai Windows NT và UNIX có một sự tương đồng trong quá trình cách mới được tạo ra. Ví dụ, trong UNIX, khi một quá trình forks hoặc tạo ra một quá trình con, con
quá trình nói chung có mức độ đặc quyền tương tự như các quá trình phụ huynh.
do đó, nếu một chương trình được cấu hình với SUID "gốc" quyền và
thực hiện worldSANSexecutable, bất kỳ quá trình nó sinh ra sẽ có nhiều khả năng có giống hệt nhau
đặc quyền. © Này sẽ bao gồm bất kỳ UNIX shell có thể được sinh ra.
Tương tự như vậy, trong Windows NT, khi một quá trình bắt đầu một quá trình con, quá trình con bình thường thừa hưởng token18 quyền truy cập của phụ huynh process19.
18 trong Windows NT, một mã thông báo truy cập là một phím soá xác định cấp đặc quyền và những gì một
người dùng có thể làm điều đó machine.
2/6/2003 trang 17 của 24
© SANS viện năm 2002, như là một phần của th
đang được dịch, vui lòng đợi..