Step 1: Discovery and IdentificationThere are four primary means by wh dịch - Step 1: Discovery and IdentificationThere are four primary means by wh Việt làm thế nào để nói

Step 1: Discovery and Identificatio

Step 1: Discovery and Identification
There are four primary means by which discovery or identification may take
place: Author
1. By the reporting of others, albeit by white hat security alert or bulletin, or
through the black hat underground.
2. By scrutinizing source code. 2002,

3. By accident or stroke of luck.
4. By brute trial andInstituteerror, utilizing intentional and systematic means.
The first twoSANSmeans are quite obvious and warrant no discussion here. Accidental discovery may often be unrecognized as such, with the end result being a “crash© dump” of the UNIX or NT system, or the proverbial MessageBox informing the Windows user that their program has either performed “an illegal

operation and will be shutdown”, or their program “instruction referenced memory that could not be read”. However, the savvy or devious minded user might take notice of the potential significance and investigate further by employing brute trial and error through intentional and systematic means.


2/6/2003 Page 12 of 24






© SANS Institute 2002, As part of the Information Security Reading Room. Author retains full rights.


Page 13 of 24

The Demonstration Code
Trial and error tactics might be used from the start by those who have far too much time on their hands. The trail and error process literally involves the repetitive feeding of varying length input into a program or application15. By chance, if the “your program has performed an illegal operation and will be shutdown” or “your program instruction referenced memory that could not be read” message arises16, then “Bingo!! At this point, additionally investigation through yet more trial and error is required to determine if indeed a buffer overrun has been discovered. Once the overrun is confirmed, the real brainwork begins.

.

This may be a good time to break out the full version of our demonstration program and begin illustrating the exploit procedure. Earli er we were introduced
to the authenticate() function for illustrating stack operation. Here is the entire
code block for the program authenticate.exe: full rights



































15 This is commonly done utilizing looping functions in scripts, effectively “automating” the process.

16 It should be noted that many different types of errors may produce these messages. They are
not all indicative of a buffer overrun.

2/6/2003






© SANS Institute 2002, As part of the Information Security Reading Room. Author retains full rights.

Authnticate.exe is a simple program, and quite frankly, one exactly like it is not likely to be found in a production environment. Let’s hope not anyway. However, it should prove more than adequate to show us how a hacker works on an unchecked buffer. Here is how the program works.

First, main() allocates three array variables to contain the information necessary to authenticate a user logging into to a computer system. The program requests that the user input their name and password. This information is obtained by calling the notoriously flawed17 C subset gets() function. Once main() has the users “username” in hand, it calls the function get_password(). to acquire the expected authenticating “password” from the system database. It then passes the “input password” and the “system password” to our old friend authenticate()
for further processing. rights
Next, authenticate() promptly copies the two passwordfull values into their respective buffers using the flawed strcpy() function. Finally, the contents of the

two buffers are compared by calling the flawed strcmp() function. If the two values match, the user is authorized, and they are permitted to use the system.

Now, let’s run it.
retains




























Seems to © work pretty good to me. As you can see, the user entered the

username of “mark” and the password of “passwd”. This matched the entries in
the /etc/shadow file, and the user was successfully authenticated. So, what’s the problem?

17 Flawed means it happily and willingly accepts a buffer value as an argument without first checking its size or limits. Notorious means the “flaw” is well known and an easy target for exploit 2/6/2003 Page 14 of 24






© SANS Institute 2002, As part of the Information Security Reading Room. Author retains full rights.


Step 2: Determine Buffer Size

To answer this question, let’s back track to Step 1 (Discovery and Identification) of the buffer overrun attack, and begin feeding varying length input into the program’s password request. And Bingo!! We hit pay dirt.











We just overran a buffer and discovered a overflow vulnerability. full Now Step 2.


Before we can do much with our newly discovered retains buffer problem, we need to

determine the exact size of the buffer. We can do this through experimentation,

and by slowly growing and shrinking the number of characters we input into the

buffer. As soon as we determine the exact number of characters it takes to crash the program, we have completed StepAuthor2.In this case, it took little work to figure out this was an eight character array (seven chars plus one null terminator). We
now know at which point the buffer begins to overflow. Now Step 3.

Step 3: Control Data Written Into Buffer

Based on what we have learned about this program thus far, this step may be a no brainer. Let’s feed in a series of x’s and see if we are able to control what
happens within the program. 2002,


















2/6/2003 Page 15 of 24





© SANS Institute 2002, As part of the Information Security Reading Room. Author retains full rights.

Seems as though we can. First, we entered the same username of “mark”. As an obedient program would, it successfully retrieved the correct password of

“passwd” for user “mark“ from the /etc/shadow file. However, instead of entering the correct password, we entered 10 x’s. Something dreadful has happened to what the program believes to be the “system password”. Step 3 completed.

Step 4: Overwrite Security Sensitive Variables Below The Buffer

There are several possibilities of action once the hacker has reached this stage
of the process. In our Step 4, we will attempt to overwrite a security sensitive
.
variable by overflowing the vulnerable buffer with input of our choice, thereby
affecting the outcome of the program. Here we go. rights



















control of this program.InstituteDepending on what we wish to accomplish, there are several different directions in which we could go. First, let’s take another look at
Observe that we just changed the “system password” from “passwd” to “phony”
by overwriting it with input of our choice. We, the hacker, now have complete


the stack and see exactly what has occurred to this point (Figure 7).

First, the two password parameters (password and etc_password) were passed
SANS
into authenticate() by reference. W hen authenticate() executes, strcpy() is called
© a bit-by-bit copy of etc_password into buffer1. Next, strcpy() is again
to perform
summands to perform a bit-by-bit copy of password into buffer2. Unfortunately, strcpy() pays no attention to the size or the contents of either password or buffer2. Buffer2 loads up with eight char values, but strcpy() blindly continues to pump the additional values from our input into buffer2. The real problem is they don’t fit, but must go somewhere. Alas, the glass begins to overflow. Due to the

2/6/2003 Page 16 of 24






© SANS Institute 2002, As part of the Information Security Reading Room. Author retains full rights.

inherent nature of stack operation, the additional char values literally overflow buffer2 and spill over into buffer1. As an end result, we successfully changed the

“password” value that is to be matched against our input for authentication. Thus, we now control both values at will.

Step 5: Replace Targeted Executable Instructions With Other Instructions

Most black hats won’t be satisfied with this achievement alone however. They are generally seeking larger and more grandeur things, such as elevating their
privilege in the system by becoming “root” or “administrator”. That leads us to
Step 5. .


We have learned a great deal about the stack up to this point, as well as our demonstration code. For instance, when the CALL to authenticate() was made, the program and processor needed to mark its trail so they would know where to go once authenticate() completed its execution. To accomplish this, the instruction pointer (EIP) was pushed onto
the stack directly after authenticate()’s
retains
parameters. EIP holds this “return address”,
and this is the address of an executable
instruction. We observe that EIP alsoAuthorresides on the stack below the memory buffer we have already proven can be manipulated at will. This indeed presents a tempting situation.2002, Before we proceed, let’s first, let’s take a quick look at
system processes and privileges.

System Processes Institute and Privileges

Although the internal mechanism works quite differently, both Windows NT and UNIX have a commonality in the manner new processes are created. For instance, in UNIX, when a process forks or creates a child process, the child

process generally has the same privilege level as its parent process.
Consequently, if a program was configured with SUID “root” permissions and
made worldSANSexecutable, any process it spawned would most likely have identical
privileges. © This would include any UNIX shell that might be spawned.


Similarly, in Windows NT, when a process starts a child process, the child process normally inherits the access token18 of the parent process19.

18 In Windows NT, an access token is a numeric key that determines privilege level and what a

user can do on that machine.
2/6/2003 Page 17 of 24






© SANS Institute 2002, As part of th
0/5000
Từ: -
Sang: -
Kết quả (Việt) 1: [Sao chép]
Sao chép!
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..
Kết quả (Việt) 2:[Sao chép]
Sao chép!
Bước 1: Phát hiện và xác định
có bốn phương tiện chính mà phát hiện hay xác định có thể mất
vị trí: Tác giả
1. Bởi báo cáo của người khác, mặc dù bằng trắng cảnh báo an ninh mũ hoặc thông báo, hoặc
thông qua chiếc mũ màu đen dưới lòng đất.
2. By rà soát mã nguồn. 2002, 3. Do tai nạn hoặc đột quỵ của may mắn. 4. Bằng cách thử vũ phu andInstituteerror, sử dụng phương tiện cố ý và có hệ thống. Các twoSANSmeans đầu tiên là khá rõ ràng và đảm bảo không có thảo luận ở đây. Khám phá tình cờ thường có thể được 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 © dump" của hệ thống UNIX hay NT, hoặc ngôn MessageBox thông báo cho người dùng Windows rằng chương trình của họ đã thực hiện một trong hai ", một bất hợp pháp hoạt động và sẽ được tắt máy " , hoặc chương trình của họ "hướng dẫn tham chiếu bộ nhớ mà không thể được đọc". Tuy nhiên, người sử dụng đầu óc hiểu biết hoặc quanh co có thể chú ý đến tầm quan trọng tiềm năng và điều tra thêm bằng cách sử dụng thử nghiệm vũ phu và lỗi thông qua các phương tiện cố ý và có hệ thống. 2003/02/06 Trang 12 của 24 © SANS Institute năm 2002, Là một phần của bảo mật thông tin Reading Room. Tác giả giữ toàn quyền. Trang 13 của 24 Các diễn Mã thử nghiệm và chiến thuật lỗi có thể được sử dụng ngay từ đầu bởi những người có quá nhiều thời gian trên tay. Quá trình đường mòn và lỗi nghĩa liên quan đến việc ăn lặp đi lặp lại của việc thay đổi chiều dài đầu vào vào 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ẽ được tắt máy" hoặc "hướng dẫn chương trình của bạn tham chiếu bộ nhớ mà không thể được đọc" tin nhắn arises16, sau đó "Bingo !! Tại thời điểm này, điều tra bổ sung thông qua thử nghiệm chưa nhiều và lỗi là cần thiết để xác định xem thực sự là một tràn bộ đệm đã được phát hiện. Khi tràn được xác nhận, các brainwork thực sự bắt đầu. . Đây có thể là một thời điểm tốt để thoát ra khỏi 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 minh họa khai thác thủ tục. Er Earli chúng tôi đã giới thiệu cho xác thực () chức năng để minh họa ngăn xếp hoạt động. Dưới đây là toàn bộ khối mã cho authenticate.exe chương trình: toàn quyền . 15 này thường được thực hiện bằng cách sử dụng chức năng lặp trong kịch bản, hiệu quả "tự động hóa" quá trình 16 Cần lưu ý rằng nhiều loại lỗi khác nhau có thể tạo ra những tin nhắn. Họ là không phải tất cả biểu hiện của một bộ đệm tràn ngập. 2003/02/06 © SANS Institute năm 2002, Là một phần của Reading Room bảo mật thông tin. Tác giả giữ toàn 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ó không có khả năng được tìm thấy trong môi trường sản xuất. Chúng ta hãy hy vọng không nào. Tuy nhiên, cần chứng minh đầy đủ hơn cho chúng ta thấy làm thế nào hacker hoạt động trên một vùng đệm không được kiểm soát. Đây là cách chương trình hoạt động. Đầu tiên, main () phân bổ ba biến mảng để 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 mà người dùng nhập tên và mật khẩu của họ. Thông tin này được thu được bằng cách gọi nổi tiếng flawed17 C tập hợp được () chức năng. Một khi chính () có những người sử dụng "tên người dùng" trong tay, nó sẽ gọi hàm get_password (). để có được các chứng thực dự kiến "mật khẩu" từ hệ thống cơ sở dữ liệu. Sau đó nó vượt qua các "mật khẩu đầu vào" và "mật khẩu hệ thống" để xác thực người bạn cũ của chúng tôi () để chế biến tiếp. quyền Tiếp theo, xác thực () kịp thời các bản sao hai giá trị passwordfull vào bộ đệm của mình bằng cách sử dụng strcpy không hoàn thiện () chức năng. Cuối cùng, nội dung của hai bộ đệm được so sánh bằng cách gọi sai lầm strcmp () chức năng. Nếu hai giá trị phù hợp với, người dùng được phép, và họ được phép sử dụng hệ thống. Bây giờ, hãy chạy nó. vẫn giữ được vẻ © công việc khá tốt với tôi. Như bạn có thể 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 "passwd". Điều này phù hợp với các mục trong tập tin / etc / shadow, và người sử dụng đã được xác thực thành công. Vì vậy, những gì là vấn đề? 17 khiếm khuyết có nghĩa là nó vui vẻ và sẵn sàng chấp nhận một giá trị đệm như một tham số mà không cần kiểm tra kích thước và giới hạn của nó. Khét tiếng có nghĩa là "lỗ hổng" rất nổi tiếng và là một mục tiêu dễ dàng cho khai thác 2003/02/06 Trang 14 của 24 © SANS Institute năm 2002, Là một phần của Reading Room bảo mật thông tin. Tác giả giữ toàn quyền. Bước 2: Xác định bộ đệm Để trả lời câu hỏi này, chúng ta hãy theo dõi lại Bước 1 (Discovery và nhận dạng) của cuộc tấn công tràn bộ đệm, và bắt đầu cho ăn khác nhau vào thời gian vào yêu cầu mật khẩu của chương trình. Và Bingo !! Chúng tôi đánh trả đất. Chúng tôi chỉ tràn ngập một bộ đệm và phát hiện ra một lỗ hổng tràn. Bây giờ đầy đủ Bước 2. Trước khi chúng ta có thể làm được gì nhiều với các vấn đề mới được phát hiện vẫn giữ được bộ đệm của chúng tôi, chúng ta cần phải xác định chính xác kích thước của bộ đệm. Chúng ta có thể làm điều này thông qua thử nghiệm, và bằng cách từ từ phát triển và thu hẹp số lượng các ký tự, chúng tôi nhập vào bộ đệm. Ngay sau khi chúng tôi xác định chính xác số lượng ký tự cần thiết để sụp đổ chương trình, chúng tôi đã hoàn thành StepAuthor2.In trường hợp này, phải mất chút công việc để tìm ra đây là một mảng tám nhân vật (bảy ký tự cộng với một terminator null). Chúng tôi bây giờ biết lúc đó bộ đệm bắt đầu tràn. Bây giờ Bước 3. Bước 3: Kiểm soát dữ liệu viết vào đệm Dựa trên những gì chúng ta đã biết về chương trình này cho đến nay, bước này có thể không có trí tuệ. Hãy ăn trong một loạt các x và xem liệu chúng ta có thể kiểm soát những gì xảy ra trong chương trình. 2002, 2003/02/06 Trang 15 của 24 © SANS Institute năm 2002, Là một phần của Reading Room bảo mật thông tin. Tác giả giữ toàn quyền. Có vẻ như chúng ta có thể. Đầu tiên, chúng tôi bước vào cùng tên người dùng của "đánh dấu". Là một chương trình sẽ vâng lời, nó lấy ra thành công mật khẩu chính xác của "passwd" cho người sử dụng "nhãn hiệu" từ file / etc / shadow. Tuy nhiên, thay vì nhập mật khẩu chính xác, chúng tôi đã nhập 10 x. Một cái gì đó khủng khiếp đã xảy ra với những chương trình tin là "mật khẩu hệ thống". . Bước 3 hoàn thành Bước 4: Ghi đè lên an biến nhạy cảm Dưới đây Các đệm Có nhiều khả năng hành động một khi hacker đã đạt đến giai đoạn này của quá trình. Trong Bước 4 của chúng tôi, chúng tôi sẽ cố gắng để ghi đè lên một an ninh nhạy cảm . biến do việc 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 ta đi. quyền kiểm soát của program.InstituteDepending này vào những gì chúng tôi mong muốn thực hiện, có những hướng khác nhau, trong đó chúng ta có thể đi. Đầu tiên, chúng ta hãy nhìn vào một quan sát mà chúng ta chỉ cần thay đổi các "mật khẩu hệ thống" từ "passwd" để "giả" bằng cách ghi đè 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ờ phải hoàn thành các ngăn xếp và xem chính xác những gì đã xảy ra đến thời điểm này (hình 7). Đầu tiên, hai tham số mật khẩu (password và etc_password) đã được thông qua SANS vào xác thực () bằng cách tham khảo. W xác thực gà () thực hiện, strcpy () được gọi là một bản sao © bit-by-bit của etc_password vào 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 bit-by-bit của mật khẩu vào buffer2. Thật không may, strcpy () không chú ý đến kích thước hoặc nội dung của một trong hai mật khẩu hoặc buffer2. Buffer2 tải lên với tám giá trị char, nhưng strcpy () một cách mù quáng tiếp tục bơm các giá trị bổ sung từ đầu vào của chúng tôi vào buffer2. Vấn đề thực sự là họ không phù hợp, nhưng phải đi đâu đó. Than ôi, kính bắt đầu tràn. Do 2003/02/06 Trang 16 trong 24 © SANS Institute năm 2002, Là một phần của Reading Room bảo mật thông tin. Tác giả giữ toàn quyền. bản chất vốn có của ngăn xếp hoạt động, các giá trị char thêm nghĩa đen tràn buffer2 và lan sang buffer1. Như một kết quả cuối cùng, chúng tôi đã thay đổi thành công "mật khẩu" giá trị đó là được kết hợp với đầu vào của chúng tôi để xác thực. Vì vậy, bây giờ chúng tôi kiểm soát cả hai giá trị theo ý muốn. Bước 5: Thay thế Hướng dẫn thực thi Targeted Với Hướng dẫn khác Hầu hết mũ đen sẽ không thể hài lòng với thành tích này một mình tuy nhiên. Chúng thường được tìm kiếm những điều vĩ đại lớn hơn và nhiều hơn nữa, chẳng hạn như nâng cao của họ đặc quyền trong hệ thống bằng cách trở thành "root" hoặc "quản trị". Điều đó dẫn chúng ta đến Bước 5. Chúng tôi đã học được rất nhiều về các ngăn xếp đến thời điểm này, cũng như đang trình diễn của chúng tôi. Ví dụ, khi CALL để xác thực () đã được thực hiện, chương trình và bộ xử lý cần thiết để đánh dấu đường mòn của mình vì vậy họ sẽ biết đi đâu một lần xác thực () hoàn thành thực hiện. Để thực hiện điều này, con trỏ lệnh (EIP) đã được đẩy vào ngăn xếp trực tiếp sau khi xác thực () 's giữ lại các thông số. EIP tổ chức này "địa chỉ trả lại", và đây là địa chỉ của một thực thi lệnh. Chúng tôi nhận thấy rằng alsoAuthorresides EIP trên các ngăn xếp dưới bộ nhớ đệm chúng ta đã được chứng minh có thể điều chỉnh theo ý thích. Điều này thực sự trình bày một situation.2002 hấp dẫn, Trước khi chúng tôi tiếp tục, chúng ta hãy đầu tiên, chúng ta hãy xem nhanh tiến trình hệ thống và đặc quyền. System Processes Viện và đặc quyền Mặc dù cơ chế nội bộ hoạt động khá khác nhau, cả Windows NT và UNIX có một tính phổ biến trong cách quy trình mới được tạo ra. Ví dụ, trong UNIX, khi một quá trình dĩa hoặc tạo ra một quá trình con, đứa trẻ quá trình thường có mức độ đặc quyền tương tự như quá trình cha mẹ. của nó Do đó, nếu một chương trình được cấu hình với SUID "root" cho phép và thực hiện worldSANSexecutable, bất kỳ quá trình đó sinh ra rất có thể sẽ phải giống hệt các đặc quyền. © Điều này sẽ bao gồm bất kỳ vỏ UNIX 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 thường được thừa hưởng token18 truy cập của process19 mẹ. 18 Trong Windows NT, một thẻ truy cập là một số quan trọng để xác định mức độ ưu tiên và những gì một người dùng có thể làm trên máy đó. 2003/02/06 Trang 17 trong 24 © SANS Institute năm 2002, Là một phần của thứ
























































































































































































































































































đang được dịch, vui lòng đợi..
 
Các ngôn ngữ khác
Hỗ trợ công cụ dịch thuật: Albania, Amharic, Anh, Armenia, Azerbaijan, Ba Lan, Ba Tư, Bantu, Basque, Belarus, Bengal, Bosnia, Bulgaria, Bồ Đào Nha, Catalan, Cebuano, Chichewa, Corsi, Creole (Haiti), Croatia, Do Thái, Estonia, Filipino, Frisia, Gael Scotland, Galicia, George, Gujarat, Hausa, Hawaii, Hindi, Hmong, Hungary, Hy Lạp, Hà Lan, Hà Lan (Nam Phi), Hàn, Iceland, Igbo, Ireland, Java, Kannada, Kazakh, Khmer, Kinyarwanda, Klingon, Kurd, Kyrgyz, Latinh, Latvia, Litva, Luxembourg, Lào, Macedonia, Malagasy, Malayalam, Malta, Maori, Marathi, Myanmar, Mã Lai, Mông Cổ, Na Uy, Nepal, Nga, Nhật, Odia (Oriya), Pashto, Pháp, Phát hiện ngôn ngữ, Phần Lan, Punjab, Quốc tế ngữ, Rumani, Samoa, Serbia, Sesotho, Shona, Sindhi, Sinhala, Slovak, Slovenia, Somali, Sunda, Swahili, Séc, Tajik, Tamil, Tatar, Telugu, Thái, Thổ Nhĩ Kỳ, Thụy Điển, Tiếng Indonesia, Tiếng Ý, Trung, Trung (Phồn thể), Turkmen, Tây Ban Nha, Ukraina, Urdu, Uyghur, Uzbek, Việt, Xứ Wales, Yiddish, Yoruba, Zulu, Đan Mạch, Đức, Ả Rập, dịch ngôn ngữ.

Copyright ©2024 I Love Translation. All reserved.

E-mail: