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

8 673 1
Lỗi do tràn bộ nhớ đệm và cách khắc phục pdf

Đang tải... (xem toàn văn)

Thông tin tài liệu

Lỗi do tràn bộ nhớ đệm và cách khắc phục Về cơ bản, tràn bộ nhớ đệm 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 dữ liệu tới một chương trình và một phần của dữ liệu này buộc phải lưu trữ ra ngoài bộ nhớ mà lập trình viên đã cấp cho chương trình đó. Quá trình tràn bộ nhớ đệm 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 trữ dữ liệu tới một mức độ 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. Trongbài viết này chúngta sẽ tìm hiểu một tình huốngtràn bộ nhớ đệmmà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 đượctích hợp trong hệ điều hành Windows có chức năngngăntrà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 vững ngôn ngữ lập trìnhcao cấp như C hay C++,cũngnhư cómộtvốn kiến thứcsâuvề quá trìnhvận hành của các ngăn xếp bộ nhớ. Khi viết mộtchươngtrình,một trongnhững điều mà lậptrình viên cần phải tính toáncẩn trọng đó là kíchthướcvùng trống của bộ đệm được phânbổ cho những hàm cụ thể. Bộ nhớ đệm là một vùng trống liền kề của bộ nhớ màmộtchương trìnhcó thể sử dụngđể lưu trữ dữ liệu mà các chức năng khác có thể sử dụng. Chúng tahãy xem xét đoanmãví dụ sau: Hình 1: Hàm A C rất dễ bị tấn công khi tràn bộ nhớ đệm. Hàm này rất rõ ràng, bắtđầu bằngviệc khaibào hai biếnbufferA vàbufferB có kích thướclầnlượt là 50 và16. Chươngtrình nàyhiển thị một câu hỏi tới người dùng yêu cầu nhậptên và sử dụng hàm gets đễnnhận thông tinnhập vào.Sauđó dữ liệu mà người dùng cungcấp được copytừ bufferA sang tham số bộ nhớ đệmvà hàm này được hoànthành. Với một chương trình đơn giản như vậy cóthể hơi quá khi chorằng nó có thể bị tác động bởi mọi cuộc tấn công. Tuy nhiên vấnđề ở đây nằmtrong hàm gets. Vì hàm gets không tự kiểm tra giới hạn do đó khó có thể khẳng địnhrằng thôngtin nhập vào bufferA khôngvượtquá 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 dữ liệu trongbufferA sangbufferB.Tuy nhiên bufferB có kích thướcnhỏ hơn bufferA, điều này có nghĩa là dù người dùng nhậpvào ít hơn 50 kí tự nhưng vẫn có thể nhiều hơn 16 kí tự vào bufferA, và khicopy sangbufferB sẽ gây ra hiện tượngtràn bộ nhớ đệmvà chương trình cũngsẽ bị sập. Chương trình nhỏ này không chỉ cómột mà là hai lỗ hổng trànbộ nhớ đệm. Khai thác tràn bộ nhớ Tiếp theochúng ta sẽ tìmhiểu nhữngđiều kiện gây ra tràn bộ nhớ và vấnđề phát sinh từ tràn bộ nhớ? Trongnhữngtrườnghợp bộ nhớ đệm bị trànthìdữ liệu tràn ra ngoài bộ nhớ đệm đượcchỉ địnhsẽ phải lưu trữ vàomộtnơi khác. Dữ liệu này sẽ chảy vàocác vùng nhớ lân cận, vàthông thườngkhiđó chương trình sẽ bị lỗi vì nó khôngthể xử lý các dữ liệu bổ sung.Mặt khác, khi lỗi này bị mộtai đó hiểu biết về ngôn ngữ Assembly (một bộ ngôn ngữ lậptrình cấpthấp được sử dụng trong lập trình máytí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. Trongtìnhhuốngnày, tin tặc có thể gây tràn bộ nhớ đệm theo phươngpháp màchúng cóthể tạo những lệnhhệ thống riêng, rồi chuyển đổi những lệnhnày thành mã byte cấp thấp sau đó gửi chúng tới chương trình này theođịnhdạng phù hợp thì những lệnhnày sẽ được 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ạnmã được chạy trong ngữ cảnh ứng dụng dễ bị tấn công banđầucủa người dùng. Điều đó có nghĩalà nếu chương trìnhnày đượcquản trị hệ thống chạy thì mãkết hợp cũngchạytrong ngữ cảnhcủa một quản trị viên hệ thống.Tùy thuộcvào kích thướccủa bộ nhớ đệm mà tin tặc có thể kết hợp nhiều loại mã khác nhau. Nhữngloại mãthường được sử dụnglà những loại đượcgọ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ã đó. Trongmột ngữ cảnh phù hợpthì người chạy mãđó sẽ có toàn quyền kiểmsoátvới máy trạm này. Tràn bộ nhớ đệm cóthể xảy ra dưới nhiềuhìnhthứ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ànquyền kiểmsoátmọi hệ thống dễ bị tấn công. Data Execution Prevention Phương pháp đơn giảnnhấtđể chặn khả năngkhaitháclỗ hổng phát sinh do tràn bộ nhớ đệm mà các lậptrì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ựcra đây khôngphải làmộttiến trìnhđược tự độnghóa vì nó yêu cầu tiêutốn nhiều thời gian vàcôngsứccho việc kiểmtra lại mã để đảm bảo rằng tính toànvẹn của mã chương trình được duy trì, do đó số lượng dòng lệnh tỉ lệ thuận vớithời gian và công sứccần phải bỏ ra. Xuấtphát từ yêu cầu đó Microsoftđã phát triển một tínhnăngcó tên Data ExecutionPrevention(DEP). DEP, một tínhnăngbảo mật đượcgiới thiệu trongWindowsXP SP2, được thiết kế để chặnứng dụng chạy mã trong vùng không thể chạy của bộ nhớ. DEPxuấ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 nhấtkhisử dụngHardware-basedDEP.Trong trường hợp nàyvi xử lý sẽ đánh dấu mọi vị trí nhớ là “khôngthể thựcthi”nếuvị trí này khôngchứamã thực thi. Mụcđích của việcnày là DEP sẽ chặn mọi mã chạytrong những vùng không thể thựcthi. Vấn đề chính của việc sử dụng Hardware-based DEP là nó chỉ được hỗ trợ bởimột số ít tiến trình. Vi xử lýcó thể thực hiệnđượcđiềunày là nhờ có tínhnăng NX của bộ vi xử lý AMDvàXD củaIntel. Software-based DEP KhiHardware-basedDEPkhôngtồntạithì Software-basedDEPphảiđược sử dụng. Loại DEP này được tíchhợptrong hệ điều hành Windows. Software-basedDEP 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ươngtrình đưa vào và đảmbảo rằngnhữngngoại lệ này là một phần hợplệ của chương trình này trướckhicho phép chúng xử lý. Cấu hình Data Execution Prevention TrongWindows7, 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ùychọn cấu hình.Tùy chọn mặc địnhtrong hình3 được gọi là cấu hình OptIn.Tùy chọn này chỉ áp dụng DEP cho những chươngtrình và dịchvụ hệ thốngquantrọng.Đây là một cấp độ bảo mật thấp (được gọi là cấu hình OptOut), nhưngnếu muốnsử dụng một cấpđộ bảo mật caohơn bạn nên lựa chọn tùy chọn thứ hai, tùy chọnnày áp dụngDEPcho mọi chương trìnhvàdịch vụ trên hệ thống.Lưu ýrằng, phía dưới củahộp thoại nàycho biết CPUđangsử dụngcóhỗ trợ Hardware-based DEP hay không. Mặcdù việc cấu hìnhDEP áp dụngcho mọi chương trìnhvàdịch vụ có cấpđộ bảo mậtcao 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ìnhsẽ thựchiện nhữngchức năngchính thống mà có thể bị DEP chặn do phươngpháp chúng vận hành.Trong nhữngtrườnghợpnày chúng ta phảitạomộtngoại lệ cho chương trìnhđó.Trên hộp thoạicấu hình DEP, nhấnnút Addrồi lựachọn những file thực thi phù hợp. Microsoft đề xuấtrằng chỉ nên sử dụng những driver được đăng ký để ngăn chặn những vấn đề tươngthích có thể xảyra khilựa chọn tùy chọn thứ hai 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ưucấu hình,khi xuất hiện mã thực thi trong vùng khôngthể thực thi DEP sẽ hiển thị thôngbáo như trong hình5. Hình 5: DEP chặn thực thi trong Windows Explorer. Kết luận Trànbộ nhớ đệm tưởng như khôngcógì nguy hại nhưng lại là một trong những mối đedọa tới khả năng bảo mật hệ thốngđángchúý nhất. Cơ bản, tin tặc thường nhằm vào lỗinày để khai thác hệ thống.Nếu là mộtlập trình viên bạn nên hạn chế lỗi này bằng cách đảm bảo quá trình kiểm tra mã và ápdụng các biện pháp bảo mật mã.Nếu là một quản trị viên hệ thống bạncó thể sử dụng DEP để ngăn chặn những nguycơ bảo mật cóthể phát sinh. . hổng trànbộ nhớ đệm. Khai thác tràn bộ nhớ Tiếp theochúng ta sẽ tìmhiểu nhữngđiều kiện gây ra tràn bộ nhớ và vấnđề phát sinh từ tràn bộ nhớ? Trongnhữngtrườnghợp bộ nhớ đệm bị trànthìdữ liệu tràn ra. Lỗi do tràn bộ nhớ đệm và cách khắc phục Về cơ bản, tràn bộ nhớ đệm 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 dữ liệu tới một chương trình và một phần. hợp trong hệ điều hành Windows có chức năngngăntrà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 vững ngôn ngữ lập trìnhcao

Ngày đăng: 05/08/2014, 19:22

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan