Chuyên Mục: Số Hóa

Lỗi do tràn bộ nhớ đệm và cách khắc phục - Quantrimang.com

Lỗi do tràn bộ nhớ đệm và cách khắc phục - Quantrimang.com

Kết quả: 5.0 / 5 - ( 1 Lượt bình chọn)

Quản trị mạng - Về cơ bản, tràn ram thường xuất phát từ một nguyên nhân duy nhất. Đó là do người dùng gửi quá nhiều data tới một chương trình và phần nào của dữ liệu này buộc
Quản trị mạng - Về cơ bản, tràn ram thường xuất phát từ một nguyên nhân duy nhất. Đó là do người dùng gửi quá nhiều data tới một chương trình và phần nào của dữ liệu này buộc phải lưu giữ ra ngoài bộ nhớ mà lập trình viên đã cấp cho chương trình đó. Quá trình tràn ram có thể gây ra nhiều vấn đề, trong đó có một vấn đề mà chúng ta cần quan tâm đó là khi bộ nhớ đệm lưu giữ dữ liệu tới một chừng độ nhất định nào đó thì tin tặc có thể chạy các đoạn mã chương trình trên hệ thống.

Trong bài viết này chúng ta sẽ tìm hiểu một tình huống tràn ram mà tin tặc có thể khai thác để chạy mã trên hệ thống. Sau đó chúng ta sẽ tìm hiểu Data Execution Preventions (DEP), một tính năng được tích hợp trong hệ điều hành Windows có chức năng ngăn tràn bộ nhớ đệm.

Nhận biết hiện tượng tràn bộ nhớ đệm

Để có thể hiểu rõ về hiện tượng tràn bộ nhớ đệm chúng ta phải nắm rõ ngôn ngữ lập trình thời thượng như C hay C++, cũng như có một vốn kiến thức sâu về quá trình vận hành của các ngăn xếp bộ nhớ.

Khi viết một chương trình, một trong mỗi điều mà lập trình viên cần phải tính toán cẩn thận đó là kích thước vùng trống của cục đệm được phân bổ cho những hàm cụ thể. Bộ nhớ đệm là một vùng trống liền kề của cục nhớ mà một chương trình có thể sử dụng để lưu giữ dữ liệu mà các chức năng khác có thể sử dụng. Chúng ta hãy xem xét đoan mã ví dụ sau:


Hình 1: Hàm A C rất dễ dẫn đến tấn công khi tràn bộ nhớ đệm.

Hàm này rất rõ ràng, bắt đầu bằng sự việc khai bào hai biến bufferA bufferB có kích thước lần lượt là 50 16 . Chương trình này hiển thị một câu hỏi tới người dùng yêu cầu nhập tên và sử dụng hàm gets đễn nhận thông tin nhập vào. Sau đó data mà người dùng cung cấp được copy từ bufferA sang tham số ram và hàm này được hoàn thành.

Với một chương trình dễ dàng như thế có thể hơi quá khi cho rằng nó có thể bị tác động bởi mọi cuộc tấn công. Tuy nhiên yếu tố ở đây nằm trong hàm gets . Vì hàm gets không tự kiểm tra giới hạn do đó khó có thể khẳng định rằng thông tin nhập vào bufferA không vượt quá 50 kí tự. Nếu người dùng nhập hơn 50 kí tự thì chương trình sẽ bị sập.

Hàm strcopy sẽ copy data trong bufferA sang bufferB . Tuy nhiên bufferB có kích thước nhỏ hơn bufferA , điều này có nghĩa là dù người dùng nhập vào ít hơn 50 kí tự nhưng vẫn có thể nhiều hơn 16 kí tự vào bufferA , và khi copy sang bufferB sẽ gây ra hiện tượng tràn ram và chương trình cũng sẽ bị sập. Chương trình nhỏ này không chỉ có một mà là hai lỗ hổng tràn bộ nhớ đệm.

Khai thác tràn bộ nhớ

Tiếp theo chúng ta sẽ tìm hiểu những điều kiện gây ra tràn bộ nhớ và luận điểm phát sinh từ tràn bộ nhớ? Trong những trường hợp ram bị tràn thì data tràn ra ngoài bộ nhớ đệm được chỉ định sẽ phải lưu giữ vào một nơi khác. Dữ liệu này sẽ chảy vào các vùng nhớ lân cận, và thông thường khi đó chương trình sẽ bị lỗi vì nó không thể xử lý các data bổ sung. Mặt khác, khi lỗi này bị một ai đó hiểu biết về ngôn ngữ Assembly (một bộ ngôn ngữ lập trình cấp thấp được dùng trong lập trình máy tính, vi xử lý, vi điều khiển và mạch tích hợp) và ngăn xếp bộ nhớ khai thác thì mọi chuyện còn tồi tệ hơn. Trong tình huống này, tin tặc có thể gây tràn bộ nhớ đệm theo phương pháp mà chúng có thể tạo những lệnh hệ thống riêng, rồi chuyển đổi những lệnh này thành mã byte thấp cấp sau đó gửi chúng tới chương trình này theo định dạng phù hợp thì những lệnh này sẽ tiến hành chạy.


Hình 2: Một mẫu Shellcode của Assembly và C được viết để trả về
một dấu nhắc C: của Windows.
Lúc này đoạn mã được chạy trong văn cảnh ứng dụng dễ dẫn đến tấn công ban sơ của những người dùng. Điều đó có nghĩa là nếu chương trình này được quản trị khối hệ thống chạy thì mã kết hợp cũng chạy trong văn cảnh của 1 quản trị viên hệ thống. Tùy thuộc vào kích thước của ram mà tin tặc có thể kết hợp nhiều loại mã khác nhau. Những loại mã thường được sử dụng là những loại được gọi là Shellcode. Mã này sẽ trả về một Shell (ví dụ một dấu nhắc C: của Windows) tới người đã chạy đoạn mã đó. Trong một văn cảnh phù hợp thì người chạy mã đó sẽ có toàn quyền kiểm soát với máy trạm này. Tràn bộ nhớ đệm có thể diễn ra dưới nhiều hình thức và quy mô, một người thành thạo trong việc điều khiển ngăn xếp sẽ chiếm được toàn quyền kiểm soát mọi hệ thống dễ bị tấn công.

Data Execution Prevention

Phương pháp thuần túy nhất để chặn cơ hội khai thác lỗ hổng phát sinh do tràn bộ nhớ đệm mà các lập trình viên thường sử dụng là luôn đảm bảo mã lập trình được bảo mật. Thực ra đây không phải là một tiến trình được tự động hóa hóa vì nó yêu cầu tiêu tốn nhiều thời gian và công sức cho sự phản ánh lại mã để phục vụ rằng tính toàn vẹn của mã chương trình được duy trì, do đó số lượng dòng lệnh tỉ lệ thuận với thời gian và công sức cần phải bỏ ra. Xuất phát từ yêu cầu đó Microsoft đã phát triển một tính năng có tên Data Execution Prevention (DEP).

DEP, một tính năng bảo mật thông tin được giới thiệu trong Windows XP SP2, được design để chặn ứng dụng chạy mã trong vùng không thể chạy của cục nhớ. DEP xuất hiện trong cả cấu hình Hardware-based DEP (nền tảng phần cứng) và Software-based DEP (nền tảng phần mềm).

Hardware-based DEP

DEP được cho là bảo mật thông tin nhất lúc sử dụng Hardware-based DEP. Trong tình huống này vi xử lý sẽ đánh dấu mọi vị trí nhớ là “không thể thực thi” nếu vị trí này không chứa mã thực thi. Mục đích của việc này là DEP sẽ chặn mọi mã chạy trong các vùng không thể thực thi.

Vấn đề chính của vấn đề sử dụng Hardware-based DEP là nó chỉ được bổ trợ bởi một số ít tiến trình. Vi xử lý có thể thực hiện được điều này là nhờ có tính năng NX của bộ vi xử lý AMD và XD của Intel.

Software-based DEP

Khi Hardware-based DEP không tồn tại thì Software-based DEP phải được sử dụng. Loại DEP này được tích hợp trong hệ điều hành Windows. Software-based DEP vận hành bằng cách dò tìm thời điểm mà những ngoại lệ được các chương trình đưa vào và đảm bảo rằng những ngoại lệ này là một phần hợp thức của chương trình này lúc trước cho phép chúng xử lý.







Cấu hình Data Execution Prevention

Trong Windows 7, DEP có thể được cấu hình trong Control Panel của hệ thống. Vào Control Panel | Advanced System Settings . Chọn tab Data Execution Prevention .

Hình 3: Cấu hình mặc định của DEP trong Windows 7.
DEP có hai tùy chọn cấu hình. Tùy chọn mặc định trong hình 3 được gọi là cấu hình OptIn. Tùy chọn này chỉ áp dụng DEP cho những chương trình và dv hệ thống quan trọng. Đây là một cấp độ bảo mật thông tin thấp (được gọi là cấu hình OptOut), nhưng nếu muốn sử dụng một cấp độ bảo mật thông tin cao hơn nữa bạn nên chọn lựa tùy chọn thứ hai, tùy chọn này áp dụng DEP cho mọi chương trình và dv trên hệ thống. Lưu ý rằng, phía dưới của hộp thoại này cho biết thêm CPU đang sử dụng có bổ trợ Hardware-based DEP hay không.

Mặc dù việc cấu hình DEP áp dụng cho mọi chương trình và Dịch Vụ có cấp độ bảo mật thông tin cao nhất, nhưng cần nhớ rằng nó lại ẩn chứa những vấn đề về tương thích. Thứ nhất, một số chương trình sẽ thực hiện những chức năng chính thống mà có thể bị DEP chặn do phương pháp chúng vận hành. Trong những trường hợp này chúng ta phải tạo một ngoại lệ cho chương trình đó. Trên hộp thoại cấu hình DEP, nhấn nút Add rồi lựa chọn những file thực thi phù hợp. Microsoft đề xuất rằng chỉ nên sử dụng những driver được đăng ký để phòng trừ những luận điểm tương thích có thể xảy ra khi lựa chọn tùy chọn thứ 2 này.

Hình 4: Cấu hình DEP cho mọi DỊCH VỤ và tạo chương trình ngoại lệ.

Sau khi thực hiện và lưu cấu hình, khi xuất hiện mã thực thi trong vùng không thể thực thi DEP sẽ hiển thị thông báo như trong hình 5.

Hình 5: DEP chặn thực thi trong Windows Explorer.

Kết luận

Tràn bộ nhớ đệm tưởng như không có gì nguy hại nhưng lại là một trong các mối dọa dẫm tới khả năng bảo mật thông tin hệ thống đáng chú ý nhất. Cơ bản, tin tặc thường nhằm vào lỗi này để khai thác hệ thống. Nếu là một lập trình viên bạn nên giới hạn lỗi này bằng cách đảm bảo quá trình phản ánh mã và áp dụng các biện pháp bảo mật thông tin mã. Nếu là một quản trị viên hệ thống bạn có thể sử dụng DEP để phòng trừ những nguy cơ bảo mật thông tin có thể phát sinh.
Tag:

Tin tức liên quan

backtop
Điện Thoại Công Ty Thiết Kế HCM
MENU