OverviewA buffer overflow condition exists when a program attempts to  dịch - OverviewA buffer overflow condition exists when a program attempts to  Việt làm thế nào để nói

OverviewA buffer overflow condition

Overview
A buffer overflow condition exists when a program attempts to put more data in a buffer than it can hold or when a program attempts to put data in a memory area past a buffer. In this case, a buffer is a sequential section of memory allocated to contain anything from a character string to an array of integers. Writing outside the bounds of a block of allocated memory can corrupt data, crash the program, or cause the execution of malicious code.

Description
Buffer overflow is probably the best known form of software security vulnerability. Most software developers know what a buffer overflow vulnerability is, but buffer overflow attacks against both legacy and newly-developed applications are still quite common. Part of the problem is due to the wide variety of ways buffer overflows can occur, and part is due to the error-prone techniques often used to prevent them.

Buffer overflows are not easy to discover and even when one is discovered, it is generally extremely difficult to exploit. Nevertheless, attackers have managed to identify buffer overflows in a staggering array of products and components.

In a classic buffer overflow exploit, the attacker sends data to a program, which it stores in an undersized stack buffer. The result is that information on the call stack is overwritten, including the function's return pointer. The data sets the value of the return pointer so that when the function returns, it transfers control to malicious code contained in the attacker's data.

Although this type of stack buffer overflow is still common on some platforms and in some development communities, there are a variety of other types of buffer overflow, including Heap buffer overflow and Off-by-one Error among others. Another very similar class of flaws is known as Format string attack. There are a number of excellent books that provide detailed information on how buffer overflow attacks work, including Building Secure Software [1], Writing Secure Code [2], and The Shellcoder's Handbook [3].

At the code level, buffer overflow vulnerabilities usually involve the violation of a programmer's assumptions. Many memory manipulation functions in C and C++ do not perform bounds checking and can easily overwrite the allocated bounds of the buffers they operate upon. Even bounded functions, such as strncpy(), can cause vulnerabilities when used incorrectly. The combination of memory manipulation and mistaken assumptions about the size or makeup of a piece of data is the root cause of most buffer overflows.

Buffer overflow vulnerabilities typically occur in code that:

Relies on external data to control its behavior
Depends upon properties of the data that are enforced outside of the immediate scope of the code
Is so complex that a programmer cannot accurately predict its behavior
Buffer Overflow and Web Applications

Attackers use buffer overflows to corrupt the execution stack of a web application. By sending carefully crafted input to a web application, an attacker can cause the web application to execute arbitrary code – effectively taking over the machine.

Buffer overflow flaws can be present in both the web server or application server products that serve the static and dynamic aspects of the site, or the web application itself. Buffer overflows found in widely used server products are likely to become widely known and can pose a significant risk to users of these products. When web applications use libraries, such as a graphics library to generate images, they open themselves to potential buffer overflow attacks.

Buffer overflows can also be found in custom web application code, and may even be more likely given the lack of scrutiny that web applications typically go through. Buffer overflow flaws in custom web applications are less likely to be detected because there will normally be far fewer hackers trying to find and exploit such flaws in a specific application. If discovered in a custom application, the ability to exploit the flaw (other than to crash the application) is significantly reduced by the fact that the source code and detailed error messages for the application are normally not available to the hacker.

Consequences

Category:Availability: Buffer overflows generally lead to crashes. Other attacks leading to lack of availability are possible, including putting the program into an infinite loop.
Access control (instruction processing): Buffer overflows often can be used to execute arbitrary code, which is usually outside the scope of a program’s implicit security policy.
Other: When the consequence is arbitrary code execution, this can often be used to subvert any other security service.
Exposure period

Requirements specification: The choice could be made to use a language that is not susceptible to these issues.
Design: Mitigating technologies such as safe-string libraries and container abstractions could be introduced.
Implementation: Many logic errors can lead to this condition. It can be exacerbated by lack of or mis¬use of mitigating technologies.

Environments Affected

Almost all known web servers, application servers, and web application environments are susceptible to buffer overflows, the notable exception being environments written in interpreted languages like Java or Python, which are immune to these attacks (except for overflows in the Interpretor itself).

Platform

Languages: C, C++, Fortran, Assembly
Operating platforms: All, although partial preventative measures may be deployed, depending on environment.
Required resources

Any

Severity

Very High

Likelihood of exploit

High to Very High

How to Determine If You Are Vulnerable

For server products and libraries, keep up with the latest bug reports for the products you are using. For custom application software, all code that accepts input from users via the HTTP request must be reviewed to ensure that it can properly handle arbitrarily large input.

How to Protect Yourself

Keep up with the latest bug reports for your web and application server products and other products in your Internet infrastructure. Apply the latest patches to these products. Periodically scan your web site with one or more of the commonly available scanners that look for buffer overflow flaws in your server products and your custom web applications. For your custom application code, you need to review all code that accepts input from users via the HTTP request and ensure that it provides appropriate size checking on all such inputs. This should be done even for environments that are not susceptible to such attacks as overly large inputs that are uncaught may still cause denial of service or other operational problems.

Risk Factors
TBD


Examples
Example 1.a
The following sample code demonstrates a simple buffer overflow that is often caused by the first scenario in which the code relies on external data to control its behavior. The code uses the gets() function to read an arbitrary amount of data into a stack buffer. Because there is no way to limit the amount of data read by this function, the safety of the code depends on the user to always enter fewer than BUFSIZE characters.


...
char buf[BUFSIZE];
gets(buf);
...
Example 1.b
This example shows how easy it is to mimic the unsafe behavior of the gets() function in C++ by using the >> operator to read input into a char[] string.

...
char buf[BUFSIZE];
cin >> (buf);
...
Example 2
The code in this example also relies on user input to control its behavior, but it adds a level of indirection with the use of the bounded memory copy function memcpy(). This function accepts a destination buffer, a source buffer, and the number of bytes to copy. The input buffer is filled by a bounded call to read(), but the user specifies the number of bytes that memcpy() copies.

...
char buf[64], in[MAX_SIZE];
printf("Enter buffer contents:
");
read(0, in, MAX_SIZE-1);
printf("Bytes to copy:
");
scanf("%d", &bytes);
memcpy(buf, in, bytes);
...
Note: This type of buffer overflow vulnerability (where a program reads data and then trusts a value from the data in subsequent memory operations on the remaining data) has turned up with some frequency in image, audio, and other file processing libraries.

Example 3
This is an example of the second scenario in which the code depends on properties of the data that are not verified locally. In this example a function named lccopy() takes a string as its argument and returns a heap-allocated copy of the string with all uppercase letters converted to lowercase. The function performs no bounds checking on its input because it expects str to always be smaller than BUFSIZE. If an attacker bypasses checks in the code that calls lccopy(), or if a change in that code makes the assumption about the size of str untrue, then lccopy() will overflow buf with the unbounded call to strcpy().

char *lccopy(const char *str) {
char buf[BUFSIZE];
char *p;

strcpy(buf, str);
for (p = buf; *p; p++) {
if (isupper(*p)) {
*p = tolower(*p);
}
}
return strdup(buf);
}
Example 4
The following code demonstrates the third scenario in which the code is so complex its behavior cannot be easily predicted. This code is from the popular libPNG image decoder, which is used by a wide array of applications, including Mozilla and some versions of Internet Explorer.

The code appears to safely perform bounds checking because it checks the size of the variable length, which it later uses to control the amount of data copied by png_crc_read(). However, immediately before it tests length, the code performs a check on png_ptr->mode, and if this check fails a warning is issued and processing continues. Because length is tested in an else if block, length would not be tested if the first check fails, and is used blindly in the call to png_crc_read(), potentially allowing a stack buffer overflow.

Although the code in this example is not the most complex we have seen,
0/5000
Từ: -
Sang: -
Kết quả (Việt) 1: [Sao chép]
Sao chép!
Tổng quanMột điều kiện tràn bộ đệm tồn tại khi một chương trình cố gắng để đặt thêm dữ liệu vào một bộ đệm hơn nó có thể lưu trữ hoặc khi một chương trình cố gắng để các dữ liệu trong một khu vực bộ nhớ qua một bộ đệm. Trong trường hợp này, một bộ đệm là đoạn tuần tự của bộ nhớ được cấp phát cho có chứa bất cứ điều gì từ một nhân vật chuỗi để một loạt các số nguyên. Viết bên ngoài giới hạn của một khối được phân bổ bộ nhớ có thể làm hỏng dữ liệu, tai nạn chương trình, hoặc gây ra việc thực hiện các mã độc hại.Mô tảLỗi tràn bộ đệm có lẽ là hình thức nổi tiếng nhất của phần mềm bảo mật dễ bị tổn thương. Hầu hết các nhà phát triển phần mềm biết những gì một lỗ hổng tràn bộ đệm là, nhưng tấn công tràn bộ đệm chống lại cả cũ và mới được phát triển các ứng dụng vẫn còn khá phổ biến. Một phần của vấn đề là do sự đa dạng trong cách tràn bộ đệm có thể xảy ra, và một phần là do các kỹ thuật dễ bị lỗi thường được sử dụng để ngăn chặn chúng.Tràn bộ đệm không phải là dễ dàng để khám phá và ngay cả khi một phát hiện, nó nói chung là vô cùng khó khăn để khai thác. Tuy nhiên, kẻ tấn công có quản lý để xác định tràn bộ đệm trong một mảng đáng kinh ngạc của sản phẩm và thành phần.Trong một khai thác lỗi tràn bộ đệm cổ điển, những kẻ tấn công sẽ gửi dữ liệu đến một chương trình, nó lưu trữ trong một bộ đệm nhỏ hơn cở thường ngăn xếp. Kết quả là rằng thông tin trên chồng gọi ghi đè, bao gồm các chức năng trả lại con trỏ. Các dữ liệu bộ giá trị của con trỏ trở lại vì vậy rằng khi chức năng trả về, nó chuyển kiểm soát để mã độc hại có trong dữ liệu của kẻ tấn công.Mặc dù loại lỗi tràn bộ đệm ngăn xếp là vẫn còn phổ biến trên một số nền tảng và trong một số cộng đồng phát triển, có rất nhiều của các loại lỗi tràn bộ đệm, bao gồm cả đống lỗi tràn bộ đệm và Off-của-một lỗi trong số những người khác. Một lớp học rất tương tự như lỗ hổng được gọi là định dạng chuỗi tấn công. Có là một số cuốn sách tuyệt vời mà cung cấp thông tin chi tiết về làm thế nào lỗi tràn bộ đệm tấn công việc, bao gồm cả tòa nhà an toàn phần mềm [1], viết mã an toàn [2], và The Shellcoder Handbook [3].Ở mức độ mã, bộ đệm tràn lỗ hổng thường liên quan đến việc vi phạm của các giả định một lập trình viên. Nhiều chức năng thao tác bộ nhớ bằng C/C++ không thực hiện các giới hạn kiểm tra và có thể dễ dàng ghi đè lên các giới hạn được phân bổ của bộ đệm họ hoạt động on. Chức năng thậm chí bị chặn, chẳng hạn như strncpy(), có thể gây ra lỗ hổng khi được sử dụng không chính xác. Sự kết hợp của thao tác bộ nhớ và các giả định sai lầm về kích thước hoặc trang điểm của một phần dữ liệu là nguyên nhân gốc rễ của hầu hết các tràn bộ đệm.Lỗi tràn bộ đệm lỗ hổng thường xảy ra trong mã đó:Dựa trên các dữ liệu bên ngoài để kiểm soát hành vi của nóPhụ thuộc vào tính chất của các dữ liệu được thi hành bên ngoài phạm vi ngay lập tức của mãLà rất phức tạp rằng một lập trình viên không thể dự đoán chính xác hành vi của nóLỗi tràn bộ đệm và ứng dụng WebKẻ tấn công sử dụng tràn bộ đệm để tham nhũng chồng thực hiện một ứng dụng web. Bằng cách gửi một cách cẩn thận crafted đầu vào cho một ứng dụng web, một kẻ tấn công có thể gây ra các ứng dụng web để thực thi mã tùy ý-có hiệu quả việc trên máy.Lỗi tràn bộ đệm có thể được xuất hiện trong máy chủ web hoặc máy chủ ứng dụng sản phẩm phục vụ các khía cạnh tĩnh và năng động của các trang web, hoặc các ứng dụng web riêng của mình. Tràn bộ đệm tìm thấy trong các máy chủ được sử dụng nhiều sản phẩm có khả năng trở thành được biết đến rộng rãi và có thể gây nguy hiểm đáng kể cho người dùng của các sản phẩm này. Khi ứng dụng web sử dụng thư viện, chẳng hạn như một thư viện đồ họa để tạo ra hình ảnh, họ mở bản thân để tiềm năng tấn công tràn bộ đệm.Tràn bộ đệm cũng có thể được tìm thấy trong ứng dụng web tùy chỉnh mã, và có thể thậm chí được nhiều khả năng cho thiếu của giám sát ứng dụng web thường đi qua. Lỗi tràn bộ đệm trong ứng dụng web tùy chỉnh ít có khả năng được phát hiện bởi vì sẽ thường có ít hơn đến nay tin tặc cố gắng tìm và khai thác các lỗ hổng trong một ứng dụng cụ thể. Nếu phát hiện trong một ứng dụng tùy chỉnh, khả năng khai thác lỗ hổng (khác hơn để sụp đổ các ứng dụng) được giảm đáng kể bởi thực tế là các mã nguồn và thông báo lỗi chi tiết cho các ứng dụng thường không có sẵn để các hacker.Hậu quảThể loại: tình trạng sẵn có: Tràn bộ đệm thường dẫn đến tai nạn. Các cuộc tấn công dẫn đến thiếu sẵn có là có thể, bao gồm cả việc đưa chương trình vào một vòng lặp vô hạn.Truy cập điều khiển (hướng dẫn chế biến): tràn bộ đệm thường có thể được sử dụng để thực thi mã tùy ý, mà thường là bên ngoài phạm vi của chính sách bảo mật tiềm ẩn của chương trình.Khác: Khi các hậu quả là tùy ý mã thực hiện, điều này có thể thường được sử dụng để subvert bất kỳ dịch vụ nào khác của an ninh.Thời gian tiếp xúcYêu cầu đặc điểm kỹ thuật: sự lựa chọn có thể được thực hiện để sử dụng một ngôn ngữ đó không phải là dễ bị những vấn đề này.Thiết kế: Giảm nhẹ các công nghệ như Két an toàn-chuỗi thư viện và container abstractions có thể được giới thiệu.Thực hiện: Nhiều logic lỗi có thể dẫn đến tình trạng này. Nó có thể trầm trọng hơn do thiếu hoặc mis¬use của giảm nhẹ công nghệ.Môi trường bị ảnh hưởngHầu như tất cả các máy chủ web nổi tiếng, máy chủ ứng dụng và web ứng dụng môi trường là dễ bị tràn bộ đệm, ngoại lệ đáng chú ý là môi trường viết bằng các ngôn ngữ diễn giải như Java hay Python, đó là miễn dịch với các cuộc tấn công (ngoại trừ tràn trong Interpretor chính nó).Nền tảngNgôn ngữ: C, c + +, Fortran, lắp rápHoạt động nền tảng: tất cả, mặc dù các biện pháp phòng ngừa một phần có thể được triển khai, tùy thuộc vào môi trường.Yêu cầu tài nguyênBất kỳMức độ nghiêm trọngRất caoKhả năng khai thácCao rất caoLàm thế nào để xác định xem bạn dễ bị tổn thươngĐối với sản phẩm máy chủ và thư viện, theo kịp với các báo cáo lỗi mới nhất cho các sản phẩm bạn đang sử dụng. Phần mềm ứng dụng tùy chỉnh, tất cả các mã chấp nhận đầu vào từ người dùng thông qua yêu cầu HTTP phải được xem xét để đảm bảo rằng nó có thể xử lý đúng tùy tiện lớn đầu vào.Làm thế nào để tự bảo vệ mìnhTheo kịp với các báo cáo lỗi mới nhất cho trang web của bạn và sản phẩm máy chủ ứng dụng và các sản phẩm khác trong cơ sở hạ tầng Internet của bạn. Áp dụng các bản vá lỗi mới nhất cho các sản phẩm này. Định kỳ quét trang web của bạn với một hoặc nhiều các máy quét phổ biến có sẵn mà tìm lỗi tràn bộ đệm trong sản phẩm máy chủ của bạn và các ứng dụng web tùy chỉnh của bạn. Cho mã tùy chỉnh các ứng dụng của bạn, bạn cần phải xem xét tất cả các mã chấp nhận đầu vào từ người dùng thông qua yêu cầu HTTP và đảm bảo rằng nó cung cấp kích thước phù hợp kiểm tra trên tất cả các đầu vào như vậy. Điều này nên được thực hiện ngay cả đối với môi trường mà không phải là dễ bị tấn công như vậy như đầu vào quá lớn mà còn tự do vẫn còn có thể gây ra từ chối dịch vụ hoặc các vấn đề hoạt động khác.Yếu tố nguy cơTBDVí dụVí dụ 1.aMẫu mã sau đây cho thấy một lỗi tràn bộ đệm đơn giản thường được gây ra bởi các kịch bản đầu tiên trong đó mã dựa trên các dữ liệu bên ngoài để kiểm soát hành vi của nó. Mã sử dụng các chức năng gets() để đọc một lượng dữ liệu tùy ý vào bộ đệm ngăn xếp. Vì không có cách nào để hạn chế số lượng dữ liệu được đọc bởi chức năng này, sự an toàn của bộ luật phụ thuộc vào người sử dụng để luôn luôn nhập ít hơn so với BUFSIZE nhân vật. ... Char buf [BUFSIZE]; Gets(BUF); ...Ví dụ 1.bVí dụ này cho thấy cách dễ dàng nó là bắt chước hành vi không an toàn của các chức năng gets() trong C++ bằng cách sử dụng các >> nhà điều hành để đọc đầu vào thành một chuỗi char []. ... Char buf [BUFSIZE]; cin >> (buf); ...Ví dụ 2Mã trong ví dụ này cũng dựa vào người dùng nhập vào để kiểm soát hành vi của nó, nhưng nó thêm một mức độ về mình với việc sử dụng bộ nhớ bị chặn sao chép chức năng memcpy(). Chức năng này chấp nhận một bộ đệm điểm đến, một bộ đệm nguồn, và số lượng byte để sao chép. Bộ đệm đầu vào là đầy bằng một cuộc gọi bị chặn để read(), nhưng người dùng chỉ định số byte memcpy() đó sao. ... Char buf [64], tại [MAX_SIZE]; printf ("Enter đệm nội dung:
"); đọc (0, trong, MAX_SIZE-1); printf ("byte để bản sao:
"); scanf ("%d", & byte); memcpy (buf, theo, byte); ...Lưu ý: Loại dễ bị tổn thương tràn bộ đệm (nơi một chương trình đọc dữ liệu và sau đó tín thác một giá trị từ dữ liệu trong bộ nhớ sau đó hoạt động trên các dữ liệu còn lại) đã bật lên với một số tần suất trong hình ảnh, âm thanh, và tập tin xử lý thư viện.Ví dụ 3Đây là một ví dụ về các kịch bản thứ hai, trong đó mã phụ thuộc vào tính chất của dữ liệu chưa được xác minh tại địa phương. Trong ví dụ này là một hàm được đặt tên theo lccopy() mất một chuỗi như là đối số của nó và trả về một bản sao đống phân bổ của chuỗi với tất cả các ký tự chữ hoa chuyển đổi sang chữ thường. Các chức năng thực hiện không có giới hạn kiểm tra trên đầu vào của nó bởi vì nó sẽ str để luôn luôn nhỏ hơn BUFSIZE. Nếu một kẻ tấn công đi qua kiểm tra trong mã mà gọi lccopy(), hoặc nếu một sự thay đổi trong rằng mã sẽ làm công việc giả định về kích thước của str sai sự thật, sau đó lccopy() sẽ tràn buf với cuộc gọi chặn để strcpy(). Char * lccopy (const char * str) {} Char buf [BUFSIZE]; Char * p; strcpy (buf, str); cho (p = buf; * p; p ++) {} Nếu (isupper(*p)) {} * p = tolower(*p); } } trở lại strdup(buf); }Ví dụ 4Mã sau đây cho thấy các kịch bản thứ ba, trong đó mã là rất phức tạp, hành vi của nó không thể được dễ dàng dự đoán. Mã này từ bộ giải mã hình ảnh phổ biến libPNG, được sử dụng bởi một mảng rộng các ứng dụng, bao gồm một số phiên bản của Internet Explorer và Mozilla.Các mã xuất hiện để thực hiện một cách an toàn các giới hạn kiểm tra vì nó kiểm tra kích thước của độ dài biến, nó sau đó sử dụng để kiểm soát số lượng dữ liệu đã sao chép bởi png_crc_read(). Tuy nhiên, ngay lập tức trước khi nó kiểm tra chiều dài, mã thực hiện một kiểm tra về png_ptr -> chế độ, và nếu điều này kiểm tra thất bại một cảnh báo đã được ban hành và tiếp tục xử lý. Bởi vì chiều dài được thử nghiệm trong một khác nếu khối, chiều dài sẽ không được kiểm tra nếu là người đầu tiên kiểm tra thất bại, và được dùng một cách mù quáng trong các cuộc gọi đến png_crc_read(), có khả năng cho phép một lỗi tràn bộ đệm ngăn xếp.Mặc dù mã trong ví dụ này không phải là phức tạp nhất, chúng tôi đã thấy,
đang được dịch, vui lòng đợi..
Kết quả (Việt) 2:[Sao chép]
Sao chép!
Tổng quan
Một tình trạng tràn bộ đệm tồn tại khi một chương trình cố gắng để đưa dữ liệu hơn trong một bộ đệm hơn nó có thể giữ hoặc khi một chương trình cố gắng để đưa dữ liệu trong một khu vực bộ nhớ qua một bộ đệm. Trong trường hợp này, một bộ đệm là một phần liên tục của cấp phát bộ nhớ để chứa bất cứ điều gì từ một chuỗi ký tự vào một mảng các số nguyên. Viết bên ngoài giới hạn của một khối bộ nhớ phân bổ có thể làm hỏng dữ liệu, phá hủy chương trình, hoặc làm cho thực thi mã độc. Mô tả Buffer overflow có lẽ là hình thức nổi tiếng nhất của lỗ hổng bảo mật phần mềm. Hầu hết các nhà phát triển phần mềm biết những gì một lỗ hổng tràn bộ đệm, nhưng các cuộc tấn công tràn bộ đệm chống lại cả hai di sản và các ứng dụng mới được phát triển vẫn còn khá phổ biến. Một phần của vấn đề là do sự đa dạng của cách tràn bộ đệm có thể xảy ra, và một phần là do các kỹ thuật dễ bị lỗi thường được sử dụng để ngăn chặn chúng. tràn bộ đệm không phải là dễ dàng để phát hiện và ngay cả khi người ta phát hiện ra, nó thường vô cùng khó khăn để khai thác. Tuy nhiên, kẻ tấn công đã quản lý để xác định lỗi tràn bộ đệm trong một mảng đáng kinh ngạc của các sản phẩm và linh kiện. Trong một lỗi tràn bộ đệm cổ điển khai thác, kẻ tấn công gửi dữ liệu tới một chương trình, mà nó lưu trữ trong một đống đệm cở. Kết quả là thông tin về các cuộc gọi stack được ghi đè, bao gồm con trỏ trả về của hàm. Các bộ dữ liệu giá trị của con trỏ trở lại để khi hàm trả về, nó chuyển điều khiển đến mã độc hại có trong dữ liệu của kẻ tấn công. Mặc dù loại hình này tràn bộ đệm vẫn còn phổ biến trên một số nền tảng và trong một số cộng đồng phát triển, có một nhiều loại khác của lỗi tràn bộ đệm, bao gồm cả lỗi tràn bộ đệm Heap và Off-by-một lỗi trong số những người khác. Một lớp học tương tự như lỗ hổng được gọi là cuộc tấn công dạng chuỗi. Có một số cuốn sách tuyệt vời mà cung cấp thông tin chi tiết về cách tấn công tràn bộ đệm làm việc, bao gồm xây dựng an toàn Phần mềm [1], Viết Bảo mật Mã [2], và Sổ tay của Shellcoder [3]. Ở cấp độ mã, lỗ hổng tràn bộ đệm thường liên quan đến việc vi phạm các giả định của một lập trình viên. Nhiều chức năng thao tác bộ nhớ trong C và C ++ không thực hiện giới hạn kiểm tra và có thể dễ dàng ghi đè lên các giới hạn phân bổ của bộ đệm họ hoạt động trên. Ngay cả chức năng giới hạn, chẳng hạn như strncpy (), có thể gây ra lỗ hổng bảo mật khi sử dụng không đúng. Sự kết hợp của các thao tác bộ nhớ và giả định sai lầm về kích thước hoặc trang điểm của một phần dữ liệu là nguyên nhân gốc rễ của hầu hết các lỗi tràn bộ đệm. lỗ hổng tràn bộ đệm thường xảy ra trong mã rằng: Dựa vào dữ liệu bên ngoài để kiểm soát hành vi của nó Tùy thuộc vào tính chất của dữ liệu được thực thi bên ngoài phạm vi trước mắt của mã là quá phức tạp mà một lập trình viên không thể dự đoán chính xác hành vi của nó tràn bộ đệm và các ứng dụng Web Những kẻ tấn công tràn bộ đệm để tham nhũng stack thực hiện một ứng dụng web. Bằng cách gửi đầu vào một cách cẩn thận để một ứng dụng web, kẻ tấn công có thể gây ra các ứng dụng web để thực thi mã tùy ý -. Lấy hiệu quả hơn máy Buffer lỗ hổng tràn có thể có mặt trong cả hai máy chủ web hoặc ứng dụng các sản phẩm máy chủ phục vụ các khía cạnh tĩnh và động của trang web, hoặc các ứng dụng web riêng của mình. Lỗi tràn bộ đệm trong các sản phẩm máy chủ sử dụng rộng rãi có khả năng để trở thành được biết đến rộng rãi và có thể gây ra một nguy cơ đáng kể cho người sử dụng các sản phẩm này. Khi các ứng dụng web sử dụng thư viện, chẳng hạn như một thư viện đồ họa để tạo ra hình ảnh, họ mở lòng mình để tấn công tràn bộ đệm tiềm năng. tràn bộ đệm cũng có thể được tìm thấy trong mã ứng dụng web tùy chỉnh, và có thể thậm chí được nhiều khả năng do thiếu giám sát các ứng dụng web thường đi qua. Buffer lỗ hổng tràn trong các ứng dụng web tùy chỉnh ít có khả năng bị phát hiện vì có bình thường sẽ rất ít tặc đang cố gắng tìm kiếm và khai thác lỗ hổng như vậy trong một ứng dụng cụ thể. Nếu phát hiện trong một ứng dụng tùy chỉnh, khả năng khai thác các lỗ hổng (khác hơn là để sụp đổ các ứng dụng) được giảm đáng kể bởi thực tế là các mã nguồn và các thông báo lỗi chi tiết cho các ứng dụng thường không có sẵn cho các hacker. Hậu quả Category: Sẵn có : tràn bộ đệm thường dẫn đến tai nạn. Các cuộc tấn công khác dẫn đến thiếu tính khả là có thể, bao gồm cả việc đưa chương trình vào một vòng lặp vô hạn. Truy cập điều khiển (xử lý lệnh): Buffer tràn thường có thể được sử dụng để thực thi mã tùy ý, mà thường là ngoài phạm vi của chính sách bảo mật tiềm ẩn của chương trình. Khi hậu quả là thực thi mã tùy ý, điều này thường có thể được sử dụng để phá vỡ bất kỳ dịch vụ bảo mật khác: khác. Tiếp xúc với thời gian yêu cầu đặc điểm kỹ thuật: Sự lựa chọn có thể được thực hiện để sử dụng một ngôn ngữ không phải là nhạy cảm với những vấn đề này. Thiết kế: Giảm nhẹ các công nghệ như thư viện an toàn-string và trừu tượng chứa có thể được giới thiệu. Thực hiện: Nhiều lỗi logic có thể dẫn đến tình trạng này. Nó có thể trầm trọng hơn do thiếu hoặc mis¬use giảm nhẹ công nghệ. môi trường bị ảnh hưởng các máy chủ web Hầu như tất cả đã biết, máy chủ ứng dụng, và môi trường ứng dụng web dễ bị lỗi tràn bộ đệm, ngoại lệ đáng chú ý là môi trường viết bằng ngôn ngữ giải thích như Java hay Python, đó là miễn dịch với các cuộc tấn công (trừ tràn trong Biên dịch chính nó). Platform Ngôn ngữ: C, C ++, Fortran, hội nền tảng điều hành:. Tất cả, mặc dù các biện pháp phòng ngừa một phần có thể được triển khai, tùy thuộc vào môi trường tài nguyên yêu cầu Bất kỳ Mức độ nghiêm trọng rất cao Khả năng của khai thác cao đến rất cao Làm thế nào để Xác định Nếu bạn là dễ bị tổn thương Đối với sản phẩm máy chủ và các thư viện, theo kịp với các báo cáo lỗi mới nhất cho các sản phẩm bạn đang sử dụng. Đối với phần mềm ứng dụng tùy chỉnh, tất cả các mã mà chấp nhận đầu vào từ người dùng thông qua các yêu cầu HTTP phải được xem xét để đảm bảo rằng nó đúng cách có thể xử lý đầu vào tùy tiện lớn. Làm thế nào để bảo vệ mình Giữ đầu với những báo cáo lỗi mới nhất cho các sản phẩm web và máy chủ ứng dụng của bạn và khác sản phẩm cơ sở hạ tầng Internet của bạn. Áp dụng các bản vá lỗi mới nhất cho các sản phẩm này. Định kỳ quét trang web của bạn với một hoặc nhiều trong những máy quét thường có sẵn mà tìm kiếm lỗ hổng tràn bộ đệm trong các sản phẩm máy chủ của bạn và các ứng dụng web tùy chỉnh của bạn. Đối với mã ứng dụng tùy chỉnh của bạn, bạn cần phải xem xét tất cả các mã mà chấp nhận đầu vào từ người dùng thông qua các yêu cầu HTTP và đảm bảo rằng nó cung cấp kiểm tra kích thước thích hợp trên tất cả các yếu tố đầu vào như vậy. Điều này nên được thực hiện ngay cả đối với môi trường mà không phải là dễ bị tấn công như đầu vào quá lớn mà còn tự do vẫn có thể gây ra từ chối dịch vụ hoặc các vấn đề hoạt động khác. Các yếu tố rủi ro TBD Ví dụ Ví dụ 1.a Các mẫu mã sau thể hiện một lỗi tràn bộ đệm đơn giản thường được gây ra bởi kịch bản đầu tiên trong đó các mã dựa vào dữ liệu bên ngoài để kiểm soát hành vi của nó. Mã này sử dụng được () để đọc một số lượng tùy ý của dữ liệu vào một đống đệm. Bởi vì không có cách nào để hạn chế số lượng dữ liệu được đọc bởi chức năng này, sự an toàn của các mã phụ thuộc vào người sử dụng luôn luôn nhập ít hơn BUFSIZE ký tự. ... char buf [BUFSIZE]; được (buf); ... Ví dụ 1.b Ví dụ này cho thấy cách dễ dàng là để bắt chước các hành vi không an toàn của được () trong C ++ bằng cách sử dụng các toán tử >> để đọc đầu vào thành một char [] string. ... char buf [BUFSIZE]; cin >> (buf); ... Ví dụ 2 Các mã trong ví dụ này cũng dựa vào đầu vào người dùng để kiểm soát hành vi của mình, nhưng nó thêm một mức gián tiếp với việc sử dụng các chức năng sao chép bộ nhớ bị chặn memcpy (). Chức năng này chấp nhận một bộ đệm đích, một bộ đệm nguồn, và số byte để sao chép. Các bộ đệm đầu vào được lấp đầy bởi một cuộc gọi bị chặn để đọc (), nhưng người sử dụng xác định số byte memcpy () bản sao. ... char buf [64], trong [MAX_SIZE]; printf ("Nhập nội dung đệm: n "); đọc (0, trong, MAX_SIZE-1); printf ("Bytes để sao chép: n"); scanf ("% d", & bytes); memcpy (buf, trong, bytes); ... Chú ý : Đây là loại lỗi tràn bộ đệm (nơi một chương trình đọc dữ liệu và sau đó tin tưởng một giá trị từ các dữ liệu trong bộ nhớ hoạt động tiếp theo trên các dữ liệu còn lại) đã bật lên với một số tần số trong hình ảnh, âm thanh, và các thư viện xử lý tập tin khác. Ví dụ 3 này là một ví dụ về kịch bản thứ hai, trong đó các mã phụ thuộc vào tính chất của dữ liệu không được xác nhận tại địa phương. Trong ví dụ này là một chức năng có tên lccopy () có một chuỗi như là đối số của nó và trả về một bản sao đống phân bổ của chuỗi với ký tự chữ hoa chuyển thành chữ thường. Các chức năng không thực hiện kiểm tra trên đầu vào của nó bởi vì nó hy vọng str luôn luôn nhỏ hơn BUFSIZE giới hạn. Nếu kẻ tấn công bỏ qua kiểm tra trong các mã mà các cuộc gọi lccopy (), hoặc nếu có thay đổi trong mã mà làm cho các giả định về kích thước của str không đúng sự thật, sau đó lccopy () sẽ tràn buf với các cuộc gọi không giới hạn để strcpy (). char * lccopy (const char * str) { char buf [BUFSIZE]; char * p; strcpy (buf, str); for (p = buf; * p; p ++) { if (isupper (* p)) { * p = ToLower ( * p); } } trở lại strdup (buf); } Ví dụ 4 Các mã sau đây cho thấy kịch bản thứ ba trong đó các mã rất phức tạp hành vi của nó không thể dễ dàng dự đoán. Mã này là từ phổ biến libpng bộ giải mã hình ảnh, được sử dụng bởi một mảng rộng các ứng dụng, bao gồm cả Mozilla và một số phiên bản của Internet Explorer. Mã này xuất hiện để thực hiện giới hạn kiểm tra an toàn vì nó sẽ kiểm tra kích thước của chiều dài thay đổi, mà nó sau này sử dụng để kiểm soát số lượng dữ liệu được sao chép bằng png_crc_read (). Tuy nhiên, ngay lập tức trước khi nó kiểm tra chiều dài, mã thực hiện một kiểm tra trên png_ptr-> chế độ, và nếu việc kiểm tra này không một lời cảnh báo được ban hành và xử lý tiếp tục. Bởi vì chiều dài được kiểm tra trong một khác nếu khối, chiều dài sẽ không được kiểm tra nếu kiểm tra đầu tiên không thành công, và được sử dụng một cách mù quáng trong cuộc gọi đến png_crc_read (), có khả năng cho phép một tràn bộ đệm. Mặc dù các mã trong ví dụ này không phải là nhất phức tạp, chúng tôi đã nhìn thấy,





















































































































đ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: