The Buffer OverflowA buffer overflow is very much like pouring ten oun dịch - The Buffer OverflowA buffer overflow is very much like pouring ten oun Việt làm thế nào để nói

The Buffer OverflowA buffer overflo

The Buffer Overflow

A buffer overflow is very much like pouring ten ounces of water in a glass designed to hold eight ounces. Obviously, when this happens, the water overflows the rim of the glass, spilling out somewhere and creating a mess.
6 .
Here, the glass represents the buffer and the water represents application or
user data. Let’s look a simple C/C++ code snippet that overruns a buffer.

In this function we have a buffer capable of holding eight ASCII characters.
rights
Assuming we are on a 32-bit system, this means 16 bytes of memory have been
allocated to the buffer. We then place the full
buffer in an initialization loop and force-

feed 15 “x” characters into it through
programming error. Obviously they are not
all going to fit, and nine of them must spill
over into some other memory area like the
water overflows its glass. Notice there is
no code in this function to check the
bounds of the array or to prevent this
programming error from occurring. Under
most conditions, the overrun of aAuthorbuffer
does not present a security problem in
with a core dump. The buffer2002,overflow itself really is that simple. As we shall soon see though, identifying and exploiting the vulnerability complicates matters
itself. Typically, a segmentation fault will occur and the program will terminate

The literature definesInstitutethe“Stack” and the “Heap” as the two primary types of buffer overrun situations. The stack overflow has two basic variations. One type
very quickly.

Types of Buffer Overflows


involves overwriting (and thus changing) security sensitive variables or control

5 With the exception of VMS, most computer architectures, including the Spark, handle memory
SANS
use in a similar fashion. One difference that must be considered is the big-endian, little-endian
©
phenomenon. In big-endian architectures, the leftmost bytes (those with a lower address) are
most significant. In little-endian architectures, the rightmost bytes are most significant. Many mainframe computers, particularly IBM mainframes, use a big-endian architecture. Most modern computers, including PCs, use the little-endian system. The PowerPC system is bi-endian because it can understand both systems.

6 In its simplest terms, a buffer is a chunk of memory used to temporarily store user data.

2/6/2003 Page 4 of 24






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

flags stored in memory adjacent to the unchecked buffer. The most common type of stack overflow involves the overwriting of function pointers that can be used to change program flow or gain elevated privileges within the operating system environment. The more complex heap overrun involves dynamic memory allocations, or memory allocated at run time by an application.

In this study, we will place our focus on the Stack Buffer Overflow. However, in either case, one must have a good understanding of how the operating system
allocates memory, and how the application utilizes this allocation. Additionally,
.
this may be the prudent opportunity to define and demonstrate what the stack
and heap are and how they work in realistic application. rights
Structure and Management of Program Memory

Any application or program can logically be divided into the two basic parts of
text and data. Text is the actual read-only program fullcode in machine-readable format, and data is the information that the text operates on as it executes

instructions. Text data resides in the lower areas of a processes memory allocation. Several instances of the same program can share this memory area.

Data, in turn, can be divided into the three logical parts of static, stack, and heap
data. The distinction between these types is retains

dependant on when and how the memory is
allocated, and where it is stored or located.
When an executable is first loaded by the
operating system, the text segmentAuthoris
loaded into memory first. The data
segments then follow. Figure 1
demonstrates these relationships.
2002,
Static data, located above and adjacent to
the text data, is pre-known information
whose storage space is compiled into the
program. This memory area is normally
reserved for global variablesInstitute and static C++
class members. Static data can be in either
an initialized or uninitialized state. Heap
data, located above and adjacent to static
data, is allocatedSANS at runtime by the C
©
language functions malloc() and calloc(), and by the C++ new operator. The heap grows up from a lower memory address to a higher memory address.



2/6/2003 Page 5 of 24






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

The stack is an actual data structure in memory, accessed in LIFO (last-in, first-out) order. This memory segment, located above and adjacent to heap data, grows down from a higher memory address to a lower memory address. Like heap data, stack data is also allocated at runtime. The stack is like a “scratch pad” that temporarily holds a function’s parameters and local variables, as well as the return address for the next instruction to be executed. This return address is of prime importance as it represents executable code sitting on the stack waiting for its turn to execute.

A thorough understanding of the stack and how it functions and. performs is essential to understanding how buffer overflow vulnerabilities can be used and exploited for devious and malicious purposes. This being the case, we need to
explore the stack and the stack segment in a little more detail. To do this, we will
rights
take a temporary and adventurous detour down to the hardware level and into
the bowels of the Intel 80386 CPU. Let’s begin with the CPU Registers.
full
Registers
Registers are either 16 or 32 bit7 high-speed storage locations directly inside the
CPU, designed for high-speed access. For the purposes of discussion, registers
can be grouped into the four categories of Data, Segment, Index, and Control
retains
(see Table II). Certainly, there are some terms here that should seem somewhat
familiar. The complete register set is illustrated in Figure 2.

TABLE II
REGISTER SET INTELAuthor80386 ARCHITECTURE
Category Register Function
Data EAX (accumulator) 2002, Used for arithmetic and data movement.Each
EBX (base) register can be addressed as either a 16 or 32 bit
ECX (counter) value. EBX can hold the address of a procedure or
EDX (data) variable.
Segment CS (code segment) Used as base locations for program instructions, data,
DS (data segment) and the stack. All references to memory involve a
SS (stack segment) segment register used as a base location.
ES (extra segment)
FS & GS Institute
Index EBP (base pointer) Contain the offsets of data and instructions. The term
ESP (stack pointer) offset refers to the distance of a variable or instruction
ESI (source index) from its base segment. The stack pointer contains the
EDI (destination index) offset of the top of the stack
SANS
Control © EIP (instruction pointer) The instruction pointer always contains the offset of
EFLAGS the next instruction to be executed within the current
code segment.

For instance, the segment registers CS, DS, ES, and SS used as base locations for program instructions (text data), data (static and heap data), and the stack

7 32-bit and 64-bit in 64 bits systems such as the Alpha and the new Intel Itanium.
2/6/2003 Page 6 of 24






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

(stack data). The index registers EBP and ESP contain offset references to the code, data, and stack registers. They are, in effect, a compass or positioning service that allow the program to keep track of exactly where all of its data and instructions are located.

The data registers contain actual data bits and are used for the movement and manipulation of this data. EBX is particularly useful for holding the address of a function or variable. EBX plays a crucial role in the exploitation of a buffer
overrun. The control registers are bit-wise storage units used to alert the
. or the program
program or CPU of critical states or conditions, within the data
itself. EIP is of special importance in that it
contains the address of the next instruction to
be executed. Again, this is a crucial element
in the exploitation of the buffer overrun.
The Stack
Our primary interest, of course, is the stack.
Let’s look at this data structure a bit closer and
see how it relates to and interfaces with the
registers. We are forced to look at a little
assembly language code at this point, but as
you shall see, it is really not all that frightening.
As mentioned earlier, the stack is a special
memory buffer outside of the CPU usedAuthoras a
temporary holding area for addresses and
data. The stack resides inside of the stack
segment. Each 16-bit location on the stack is
2002,
pointed at by the ESP register, or stack
pointer. The stack pointer, in turn, holds the
address of the last data element to be added
to, or pushed onto the stack.
It is important to noteInstitutethat the push operation
pushes data backwards onto the stack. This is
what causes stack memory to grow downward,
or grow toward SANS the lower memory addresses.

Now this can© truly be confusing and make one’s head spin, but it must be understood to execute an attack on the stack. So please, just hang tight.

Conversely, the last value added to the stack is also the first one to be removed, or popped from the stack. Hence, th
0/5000
Từ: -
Sang: -
Kết quả (Việt) 1: [Sao chép]
Sao chép!
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 bộ nhớ một số khu vực 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 đ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 bãi chứa lõi. Buffer2002, tràn chính nó thực sự là đơn giản. Như chúng ta sẽ sớm thấy mặc dù, xác định và khai thác các lỗ hổng làm phức tạp vấn đề
chính nó. Thông thường, một lỗi phân khúc sẽ xuất hiện và chương trình sẽ chấm dứt

definesInstitutethe văn học "Chồng" và "Heap" là hai loại chính của bộ đệm tràn ngập những tình huống. Ngăn xếp tràn có hai biến thể cơ bản. Một loại
rất nhanh chóng.

loại bộ đệm tràn


liên quan đến việc ghi đè lên (và do đó thay đổi) an ninh nhạy cảm biến hoặc điều khiển

5 ngoại trừ VMS, hầu hết các kiến trúc máy tính, bao gồm cả các tia lửa, xử lý bộ nhớ
SANS
sử dụng trong một thời trang tương tự. Một sự khác biệt phải được xem xét là lớn về cuối nhỏ, về cuối nhỏ
©
hiện tượng. Trong kiến trúc lớn về cuối nhỏ, các byte tận cùng bên trái (những người có một địa chỉ thấp hơn) là
quan trọng nhất. Trong kiến trúc về cuối nhỏ, byte bìa phải là quan trọng nhất. Nhiều máy tính, đặc biệt là máy tính lớn IBM, sử dụng một kiến trúc về cuối lớn. Máy tính hiện đại nhất, bao gồm máy tính cá nhân, sử dụng hệ thống về cuối nhỏ. Hệ thống PowerPC là bi-về cuối bởi vì nó có thể hiểu cả hai hệ thống.

6 trong điều kiện đơn giản nhất của nó, một bộ đệm là một đoạn của bộ nhớ được sử dụng để tạm thời lưu trữ dữ liệu người dùng.

2/6/2003 trang 4 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ờ được lưu trữ trong bộ nhớ tiếp giáp với các bộ đệm đánh dấu. Loại phổ biến nhất của ngăn xếp tràn liên quan đến việc ghi đè lên con trỏ chức năng có thể được sử dụng để thay đổi chương trình dòng chảy hoặc đạt được các đặc quyền cao trong môi trường điều hành hệ thống. Overrun đống phức tạp hơn liên quan đến việc cấp phát bộ nhớ năng động, hoặc bộ nhớ được cấp phát tại thời gian chạy bởi một ứng dụng.

trong nghiên cứu này, chúng tôi sẽ đặt chúng tôi tập trung vào ngăn xếp bộ đệm tràn. Tuy nhiên, trong cả hai trường hợp, một trong những phải có một sự hiểu biết tốt như thế nào hệ điều hành
phân bổ bộ nhớ, và làm thế nào các ứng dụng sử dụng phân bổ này. Ngoài ra,
.
Điều này có thể là thận trọng cơ hội để xác định và chứng minh những gì ngăn xếp
và heap được và làm thế nào họ làm việc trong các ứng dụng thực tế. quyền
cơ cấu và quản lý bộ nhớ chương trình

bất kỳ ứng dụng hoặc chương trình một cách hợp lý có thể được chia thành hai phần cơ bản của
văn bản và dữ liệu. Văn bản là fullcode thực tế chỉ đọc các chương trình trong máy có thể đọc định dạng, và dữ liệu là thông tin mà các văn bản hoạt động trên như nó thực hiện

hướng dẫn. Dữ liệu văn bản nằm trong các khu vực thấp của một quá trình cấp phát bộ nhớ. Một số trường hợp của cùng một chương trình có thể chia sẻ này bộ nhớ area.

dữ liệu, lần lượt, có thể được chia thành ba phần hợp lý của tĩnh, ngăn xếp, và đống
dữ liệu. Sự khác biệt giữa các loại là giữ lại

phụ thuộc vào khi và làm thế nào bộ nhớ là
phân bổ, và nơi nó được lưu trữ hoặc nằm.
Khi thực thi một lần đầu tiên được nạp bởi các
hệ điều hành, segmentAuthoris văn bản
tải vào bộ nhớ lần đầu tiên. Dữ liệu
phân đoạn theo sau đó. Hình 1
chứng tỏ các mối quan hệ.
2002,
dữ liệu tĩnh, nằm ở trên và tiếp giáp với
dữ liệu văn bản, trước khi được biết đến thông tin
có dung lượng lưu trữ được biên dịch vào các
chương trình. Khu vực bộ nhớ này là bình thường
dành riêng cho toàn cầu variablesInstitute và tĩnh C
lớp thành viên. Dữ liệu tĩnh có thể trong một trong hai
trạng khởi tạo hoặc uninitialized. Đống
dữ liệu, nằm ở trên và tiếp giáp với tĩnh
dữ liệu, là allocatedSANS tại thời gian chạy của C
©
ngôn ngữ chức năng malloc() và calloc(), và bởi các nhà điều hành mới C. Heap lớn lên từ một địa chỉ bộ nhớ thấp hơn để một bộ nhớ cao address.


2/6/2003 trang 5 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.

ngăn xếp là một cấu trúc dữ liệu thực tế trong bộ nhớ, truy cập theo thứ tự LIFO (cuối-in, first-out). Phân khúc bộ nhớ này, nằm ở trên và tiếp giáp với đống dữ liệu, phát triển xuống từ một địa chỉ bộ nhớ cao đến một địa chỉ bộ nhớ thấp hơn. Như đống dữ liệu, dữ liệu ngăn xếp cũng được cấp phát tại thời gian chạy. Ngăn xếp là như một pad đầu"" đó tạm thời giữ chức năng một tham số và biến địa phương, cũng như các địa chỉ trả lại cho các hướng dẫn tiếp theo được thực hiện. Điều này trở lại địa chỉ là nguyên tố quan trọng khi nó đại diện cho thực thi mã ngồi trên ngăn xếp chờ đợi lần lượt mình để thực hiện.

một sự hiểu biết toàn diện của ngăn xếp và làm thế nào nó hoạt động và thực hiện là rất cần thiết cho sự hiểu biết làm thế nào bộ đệm tràn lỗ hổng có thể được sử dụng và khai thác cho mục đích quanh co và độc hại. Đây là trường hợp, chúng tôi cần phải
khám phá các ngăn xếp và đoạn ngăn xếp, chi tiết hơn một chút. Để làm điều này, chúng tôi sẽ
quyền
có một đường vòng tạm thời và mạo hiểm xuống phần cứng cấp và vào
của Intel 80386 CPU. Hãy bắt đầu với các CPU đăng ký.
đầy đủ
đăng ký
đăng ký là 16 hoặc 32 bit7 tốc độ cao lưu trữ vị trí trực tiếp bên trong các
CPU, được thiết kế cho tốc độ cao truy cập. Cho các mục đích của cuộc thảo luận, đăng ký
có thể được nhóm lại thành bốn loại dữ liệu, phân đoạn, chỉ số, và kiểm soát
giữ lại
(xem bảng II). Chắc chắn, có một số điều khoản ở đây nên có vẻ hơi
quen thuộc. Các thiết lập hoàn thành đăng ký được minh họa trong hình 2.

BẢNG II
đăng ký thiết lập kiến trúc INTELAuthor80386
mục đăng ký chức năng
dữ liệu EAX (accumulator) năm 2002, Được sử dụng để di chuyển số học và dữ liệu.Mỗi
đăng ký EBX (cơ sở) có thể được giải quyết như hoặc là một chút 16 hoặc 32
ECX (số lượt truy cập) giá trị. EBX có thể giữ địa chỉ của một thủ tục hoặc
biến EDX (dữ liệu).
Phân đoạn CS (mã phân đoạn) được sử dụng như là các địa điểm cơ sở cho hướng dẫn chương trình, dữ liệu,
DS (dữ liệu phân đoạn) và ngăn xếp. Tất cả các tham chiếu đến bộ nhớ liên quan đến một
SS (ngăn xếp phân đoạn) phân đoạn đăng ký sử dụng như một điểm cơ sở.
ES (phân đoạn phụ)
FS & GS viện
chỉ số EBP (căn cứ con trỏ) chứa các offsets của dữ liệu và hướng dẫn. Thuật ngữ
bù đắp ESP (ngăn xếp con trỏ) đề cập đến khoảng cách của một biến hoặc giảng dạy
ESI (nguồn chỉ số) từ phân khúc cơ sở của nó. Con trỏ stack chứa các
EDI (điểm đến chỉ số) đối tượng dời hình phía trên cùng của ngăn xếp
SANS
kiểm soát © EIP (hướng dẫn con trỏ) con trỏ hướng dẫn luôn chứa đối tượng dời hình của
EFLAGS các chỉ dẫn tiếp theo được thực hiện trong vòng hiện tại
phân đoạn mã.

Ví dụ, các phân đoạn đăng ký CS, DS, ES và SS được sử dụng như là cơ sở địa điểm để được hướng dẫn chương trình (dữ liệu văn bản), dữ liệu (tĩnh và heap dữ liệu), và chồng

7 32-bit và 64-bit 64 bit hệ thống chẳng hạn như Alpha và mới Intel Itanium.
2/6/2003 trang 6 / 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.

(stack data). Đăng ký chỉ số EBP và ESP chứa bù đắp tham chiếu đến mã, dữ liệu, và ngăn xếp đăng ký. Họ là, trên thực tế, một la bàn hoặc vị trí dịch vụ cho phép chương trình để theo dõi chính xác nơi mà tất cả dữ liệu và hướng dẫn của nó được đặt.

đăng ký dữ liệu chứa dữ liệu thực tế bit và được sử dụng để di chuyển và thao tác dữ liệu này. EBX là đặc biệt hữu ích để giữ địa chỉ của một chức năng hoặc biến. EBX đóng một vai trò quan trọng trong việc khai thác của một bộ đệm
tràn ngập. Đăng ký kiểm soát là đơn vị lưu trữ bit-wise được sử dụng để cảnh báo các
. hoặc chương trình
chương trình hoặc CPU của kỳ quan trọng hoặc các điều kiện, trong dữ liệu
chính nó. EIP có tầm quan trọng đặc biệt trong đó nó
chứa địa chỉ của các hướng dẫn tiếp theo để
được thực thi. Một lần nữa, đây là một yếu tố quan trọng
trong việc khai thác của overrun bộ đệm. Ngăn xếp

quan tâm chính của chúng tôi, tất nhiên, là ngăn xếp.
Hãy nhìn vào cấu trúc dữ liệu này một chút gần gũi hơn và
xem làm thế nào nó liên quan đến và giao diện với các
đăng ký. Chúng tôi buộc phải xem xét một chút
mã ngôn ngữ lắp ráp vào thời điểm này, nhưng như
bạn sẽ thấy, nó thực sự không phải là tất cả những gì đáng sợ.
Như đã đề cập trước đó, ngăn xếp là một đặc biệt
bộ nhớ đệm bên ngoài CPU usedAuthoras một
tạm thời giữ lá cho các địa chỉ và
dữ liệu. Ngăn xếp cư trú bên trong của ngăn xếp
phân đoạn. Mỗi vị trí 16-bit trên ngăn xếp là
2002,
chĩa ngay vào của ESP đăng ký, hoặc ngăn xếp
con trỏ. Con trỏ ngăn xếp, lần lượt, Giữ các
địa chỉ của các phần tử dữ liệu cuối cùng sẽ được thêm vào
tới, hoặc đẩy vào ngăn xếp.
Nó là quan trọng để noteInstitutethat hoạt động đẩy
đẩy các dữ liệu về phía sau vào ngăn xếp. Đây là
những gì gây ra bộ nhớ ngăn xếp để phát triển xuống,
hoặc phát triển hướng tới SANS các thấp hơn bộ nhớ địa chỉ.

bây giờ điều này có thể © thực sự là khó hiểu và làm cho quay đầu, nhưng nó phải được hiểu để thực hiện một cuộc tấn công vào ngăn xếp. Vì vậy xin vui lòng, chỉ cần treo chặt chẽ.

ngược lại, giá trị cuối thêm vào ngăn xếp cũng là người đầu tiên để được loại bỏ, hoặc popped từ ngăn xếp. Do đó, th
đang được dịch, vui lòng đợi..
Kết quả (Việt) 2:[Sao chép]
Sao chép!
Các tràn bộ đệm Một lỗi tràn bộ đệm là rất nhiều như đổ mười ounce nước trong một ly thiết kế để giữ tám ounce. Rõ ràng, khi điều này xảy ra, nước tràn ra mép của thủy tinh, đổ ra một nơi nào đó và tạo ra một mớ hỗn độn. 6. Ở đây, kính đại diện cho các bộ đệm và các 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 đơn giản C / C ++ đoạn mã mà vượt một bộ đệm. Trong chức năng này, chúng ta có một bộ đệm có khả năng giữ tám ký tự ASCII. quyền Giả sử chúng ta đang ở trên một hệ thống 32-bit, điều này có nghĩa là 16 byte của bộ nhớ đã được phân bổ cho các đệm. Sau đó chúng tôi đặt toàn bộ đệm trong một vòng lặp khởi tạo và force- thức ăn 15 "x" ký tự vào nó thông qua lỗi lập trình. Rõ ràng họ không phải là tất cả sẽ phù hợp với, và chín trong số họ phải đổ hơn vào một số khu vực bộ nhớ khác như nước tràn ly của nó. Chú ý 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 xảy ra lỗi lập trình. Theo hầu hết các điều kiện này, tràn ngập của aAuthorbuffer không trình bày một vấn đề an ninh trong một bãi chứa lõi. Các buffer2002, tràn bản thân thực sự là đơn giản. Như chúng ta sẽ sớm thấy, mặc dù xác định và khai thác lỗ hổng này làm phức tạp vấn đề riêng của mình. Thông thường, một lỗi phân khúc sẽ xảy ra và chương trình sẽ chấm dứt Các tài liệu definesInstitutethe "Stack" và "Heap" là hai loại chính của các tình huống tràn bộ đệm. Stack tràn có hai kiểu khác nhau. Một loại rất nhanh. Các loại đệm tràn liên quan đến việc ghi đè lên (và do đó thay đổi) biến nhạy cảm an ninh, kiểm soát 5 Với ngoại lệ của VMS, hầu hết các kiến trúc máy tính, bao gồm Spark, xử lý bộ nhớ SANS sử dụng trong một thời trang tương tự. Một sự khác biệt phải được xem xét là lớn về cuối, ít về cuối © tượng. Trong kiến trúc lớn về cuối, các byte tận cùng bên trái (những người có địa chỉ thấp hơn) là quan trọng nhất. Trong kiến trúc ít về cuối, các byte ngoài cùng bên phải là quan trọng nhất. Nhiều máy tính lớn, đặc biệt là máy tính lớn IBM, sử dụng một kiến trúc lớn về cuối. Hầu hết các máy tính hiện đại, bao gồm máy tính, sử dụng hệ thống ít về cuối. Hệ thống PowerPC là bi về cuối bởi vì nó có thể hiểu được cả hai hệ thống. 6 Trong thuật ngữ đơn giản của nó, một bộ đệm là một đoạn bộ nhớ được sử dụng để tạm thời lưu trữ dữ liệu người dùng. 2003/02/06 Trang 4 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ờ được lưu trữ trong bộ nhớ tiếp giáp với bộ đệm không được kiểm soát. Loại phổ biến nhất của chồng tràn liên quan đến việc ghi đè lên các con trỏ chức năng có thể được sử dụng để thay đổi dòng chảy chương trình được đặc quyền nâng cao trong môi trường hệ điều hành. Các đống tràn ngập phức tạp hơn liên quan đến việc cấp phát bộ nhớ động, hoặc cấp phát bộ nhớ lúc chạy thời gian bằng một ứng dụng. Trong nghiên cứu này, chúng tôi sẽ đặt trọng tâm vào việc Stack tràn bộ đệm. Tuy nhiên, trong cả hai trường hợp, người ta phải có một sự hiểu biết tốt về hệ điều hành cấp phát bộ nhớ, và cách ứng dụng sử dụng phân bổ này. Ngoài ra, . này có thể là cơ hội thận trọng để xác định và chứng minh những gì stack và heap và làm thế nào họ làm việc trong ứng dụng thực tế. quyền cơ cấu và quản lý bộ nhớ Chương trình Bất kỳ ứng dụng hoặc chương trình một cách hợp lý có thể được chia thành hai phần cơ bản của văn bản và dữ liệu. Văn bản là chỉ đọc chương trình thực tế fullcode ở định dạng máy có thể đọc được, và dữ liệu là những thông tin mà các văn bản hoạt động trên vì nó thực hiện hướng dẫn. Văn bản dữ liệu cư trú trong khu vực thấp hơn của một quá trình phân bổ bộ nhớ. Một số trường hợp của cùng một chương trình có thể chia sẻ vùng nhớ này. dữ liệu, lần lượt, có thể được chia thành ba phần logic tĩnh, ngăn xếp, và đống dữ liệu. Sự khác biệt giữa các loại là vẫn giữ được phụ thuộc vào khi nào và như thế nào bộ nhớ được phân bổ, và nơi mà nó được lưu trữ hoặc nằm. Khi thực thi lần đầu tiên được tải bởi các hệ điều hành, các văn bản segmentAuthoris nạp vào bộ nhớ đầu tiên. Các dữ liệu phân đoạn sau đó làm theo. Hình 1 thể hiện các mối quan hệ. năm 2002, dữ liệu tĩnh, nằm ​​ở trên và liền kề với các dữ liệu văn bản, thông tin trước khi được biết đến có không gian lưu trữ được biên dịch vào chương trình. Vùng nhớ này thường được dành cho variablesInstitute toàn cầu và C ++ tĩnh thành viên lớp. Dữ liệu tĩnh có thể ở một trong hai trạng thái khởi tạo hoặc chưa được khởi tạo. Đống dữ liệu, nằm ​​ở trên và tiếp giáp với tĩnh dữ liệu, là allocatedSANS trong thời gian chạy của C © chức năng ngôn ngữ malloc () và calloc (), và C ++ điều hành mới. Các đống lớn lên từ một địa chỉ bộ nhớ thấp hơn đến một địa chỉ bộ nhớ cao hơn. 2003/02/06 Trang 5 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. Stack là một cấu trúc dữ liệu thực tế trong bộ nhớ, truy cập trong LIFO (last-in, đầu ra) theo thứ tự. Phân đoạn bộ nhớ này, nằm ​​ở trên và tiếp giáp với dữ liệu heap, phát triển xuống từ một địa chỉ bộ nhớ cao hơn đến một địa chỉ bộ nhớ thấp hơn. Giống như dữ liệu đống, đống dữ liệu còn được phân bổ trong thời gian chạy. Stack là giống như một "đầu pad" tạm thời nắm giữ các thông số của chức năng và biến địa phương, cũng như các địa chỉ trả lại cho lệnh tiếp theo được thực hiện. Địa chỉ trở lại này là quan trọng hàng đầu vì nó đại diện cho mã thực thi ngồi trên đống chờ đợi đến lượt của mình để thực hiện. Một sự hiểu biết thấu đáo về chồng và làm thế nào nó hoạt động và. biểu diễn là điều cần thiết để có thể hiểu như thế nào lỗ hổng tràn bộ đệm có thể được sử dụng và khai thác cho mục đích quanh co và nguy hiểm. Đây là trường hợp, chúng ta cần phải khám phá những ngăn xếp và phân đoạn ngăn xếp trong một chi tiết nhỏ hơn. Để làm điều này, chúng tôi sẽ quyền phải đi đường vòng tạm thời và mạo hiểm xuống đến cấp độ phần cứng và vào ruột của Intel 80386 CPU. Hãy bắt đầu với CPU Đăng ký. đầy đủ Đăng ký Đăng ký hoặc là 16 hoặc 32 BIT7 tốc độ cao địa điểm lưu trữ trực tiếp bên trong CPU, được thiết kế để truy cập tốc độ cao. Theo mục đích của cuộc thảo luận, đăng ký có thể được nhóm lại thành bốn loại dữ liệu, bộ phận, chỉ số và kiểm soát giữ lại (xem bảng II). Chắc chắn, có một số thuật ngữ ở đây là nên có vẻ hơi quen thuộc. Các thiết lập đăng ký hoàn toàn được minh họa trong hình 2. BẢNG II ĐĂNG KÝ SET INTELAuthor80386 KIẾN TRÚC mục Đăng ký chức năng dữ liệu EAX (ắc quy) năm 2002, được sử dụng cho số học và dữ liệu movement.Each EBX (cơ sở) đăng ký có thể được giải quyết hoặc là một chút 16 hoặc 32 ECX (truy cập) giá trị. EBX có thể giữ địa chỉ của một thủ tục hoặc EDX (dữ liệu) biến. Segment CS (đoạn mã) được sử dụng làm địa điểm cơ sở để được hướng dẫn chương trình, dữ liệu, DS (đoạn dữ liệu) và ngăn xếp. Tất cả các tham chiếu tới bộ nhớ liên quan đến một SS (stack phân khúc) đoạn đăng ký sử dụng như một địa điểm cơ sở. ES (bộ phận phụ) FS & GS Viện Index EBP (con trỏ cơ sở) Bao gồm các hiệu số của dữ liệu và hướng dẫn. Thuật ngữ ESP (ngăn xếp con trỏ) bù đắp đề cập đến khoảng cách của một biến hoặc hướng dẫn ESI (chỉ số nguồn) từ phân khúc cơ sở của nó. Các con trỏ ngăn xếp chứa EDI (chỉ đích) offset của đỉnh ngăn xếp SANS kiểm soát © EIP (hướng dẫn con trỏ) Các con trỏ chỉ dẫn luôn luôn có bù đắp của EFLAGS lệnh tiếp theo được thực hiện trong hiện tại đoạn mã. Ví dụ, đoạn ghi CS, DS, ES, SS và sử dụng như địa điểm cơ sở để được hướng dẫn chương trình (dữ liệu văn bản), dữ liệu (dữ liệu tĩnh và heap), và chồng 7 32-bit và 64-bit trong 64 bit hệ thống như Alpha và mới Intel Itanium. 2003/02/06 Trang 6 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. (ngăn xếp dữ liệu). Chỉ số đăng ký EBP và ESP chứa tài liệu tham khảo để bù đắp sổ đăng ký mã số, dữ liệu, và ống khói. Họ đang có, có hiệu lực, một la bàn định vị hoặc dịch vụ cho phép các chương trình để theo dõi chính xác nơi mà tất cả các dữ liệu và hướng dẫn của nó được đặt. Việc đăng ký dữ liệu chứa các bit dữ liệu thực tế và được sử dụng để di chuyển và thao tác dữ liệu này. EBX đặc biệt hữu ích để giữ địa chỉ của một chức năng hoặc biến. EBX đóng một vai trò quan trọng trong việc khai thác một bộ đệm tràn ngập. Việc đăng ký kiểm soát là đơn vị lưu trữ bit-khôn ngoan sử dụng để cảnh báo . hoặc chương trình chương trình hoặc CPU của các quốc gia quan trọng hoặc các điều kiện, trong các dữ liệu của chính nó. EIP có tầm quan trọng đặc biệt vì nó chứa địa chỉ của lệnh kế tiếp để được thực thi. Một lần nữa, đây là một yếu tố quan trọng trong việc khai thác tràn bộ đệm. Stack quan tâm chính của chúng tôi, tất nhiên, là chồng. Hãy nhìn vào cấu trúc dữ liệu này một chút gần gũi hơn và xem làm thế nào nó liên quan đến giao diện và với đăng ký. Chúng ta buộc phải nhìn vào một chút mã ngôn ngữ lắp ráp tại thời điểm này, nhưng như bạn sẽ thấy, nó thực sự không phải là tất cả những gì đáng sợ. Như đã đề cập trước đó, chồng là một đặc biệt bộ nhớ đệm bên ngoài của CPU usedAuthoras một khu vực tạm giữ cho địa chỉ và dữ liệu. Ngăn xếp nằm bên trong của ngăn xếp phân khúc. Mỗi vị trí 16-bit trên stack là năm 2002, chỉ bởi ESP đăng ký, hoặc ngăn xếp con trỏ. Các con trỏ ngăn xếp, lần lượt, giữ địa chỉ của các phần tử dữ liệu cuối cùng được thêm vào , hoặc đẩy vào stack. Điều quan trọng là noteInstitutethat hoạt động đẩy là đẩy dữ liệu ngược trở lại vào ngăn xếp. Đây là những gì gây ra ngăn xếp bộ nhớ để phát triển đi xuống, hoặc phát triển theo hướng SANS các địa chỉ bộ nhớ thấp hơn. Bây giờ điều này có thể thực sự © gây nhầm lẫn và làm cho một người quay đầu, nhưng nó phải được hiểu để thực hiện một cuộc tấn công trên stack. Vì vậy, xin vui lòng, chỉ cần treo chặt chẽ. Ngược lại, giá trị cuối cùng được thêm vào stack cũng là người đầu tiên được gỡ bỏ, hoặc xuất hiện từ ngăn xếp. Do đó, 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 ©2025 I Love Translation. All reserved.

E-mail: