Ntr đi vi các th th ut khai thác

Một phần của tài liệu Tài liệu Giáo trình bài tập C/EH ppt (Trang 42 - 47)

Vi c x lý b đ m tr c khi đ c hay th c thi nó có th làm th t b i các c g ng khai thác l i tràn b đ m. Các x lý này có th gi m b t m i đe d a c a vi c khai thác l i, nh ng có th không ng n ch n đ c m t cách tuy t đ i. Vi c x lý có th bao g m: chuy n t ch hoa thành ch th ng, lo i b các ký t đ t bi t (metacharacters) và l c các xâu không ch a ký t là ch s ho c ch cái. Tuy nhiên, có các k thu t đ tránh vi c l c và x lý này; alphanumeric code (mã g m toàn ch và s ), polymorphic code (mã đa hình), Self-modifying code (mã t s a đ i) và t n công ki u return-to-libc.. C ng chính các ph ng pháp này có th

đ c dùng đ tránh b phát hi n b i các h th ng phát hi n thâm nh p (Intrusion detection system).

Ch ng tràn b đ m

Nhi u k thu t đa d ng v i nhi u u nh c đi m đã đ c s d ng đ phát hi n ho c ng n ch n hi n t ng tràn b đ m. Cách đáng tin c y nh t đ tránh ho c ng n ch n tràn b đ m là s d ng b o v t đ ng t i m c ngôn ng l p trình. Tuy nhiên, lo i b o v này không th áp d ng cho mã th a k (legacy code), và nhi u khi các ràng bu c k thu t, kinh doanh hay v n

L a ch n v ngôn ng l p trình có th có m t nh h ng l n đ i v i s xu t hi n c a l i tràn b đ m. N m 2006, C và C++ n m trong s các ngôn ng l p trình thông d ng nh t, v i m t l ng kh ng l các ph n m m đã đ c vi t b ng hai ngôn ng này. C và C++ không cung c p s n các c ch ch ng l i vi c truy nh p ho c ghi đè d li u lên b t c ph n nào c a b nh thông qua các con tr b t h p l ; c th , hai ngôn ng này không ki m tra xem d li u đ c ghi vào m t m ng cài đ t c a m t b nh đ m) có n m trong biên c a m ng đó hay không. Tuy nhiên, c n l u ý r ng các th vi n chu n c a C++, th vi n khuôn m u chu n - STL, cung c p nhi u cách an toàn đ l u tr d li u trong b đ m, và các l p trình viên C c ng có th t o và s d ng các ti n ích t ng t . C ng nh đ i v i các tính n ng b t k khác c a C hay C++, m i l p trình viên ph i t xác đnh l a ch n xem h có mu n ch p nh n các h n ch v t c đ ch ng trình đ thu l i các l i ích ti m n ng (đ an toàn c a ch ng trình) hay không.

M t s bi n th c a C, ch ng h n Cyclone, giúp ng n ch n h n n a các l i tràn b đ m b ng vi c ch ng h n nh g n thông tin v kích th c m ng v i các m ng. Ngôn ng l p trình D s d ng nhi u k thu t đa d ng đ tránh g n h t vi c s d ng con tr và ki m tra biên do ng i dùng xác đnh.

Nhi u ngôn ng l p trình khác cung c p vi c ki m tra t i th i gian ch y, vi c ki m tra này g i m t c nh báo ho c ngo i l khi C ho c C++ ghi đè d li u. Ví d v các ngôn ng này r t đa d ng, t pythol t i Ada, t Lisp t i Modula-2, và t Smalltalk t i OCaml. Các môi tr ng bytecode c a Java và .NET c ng đòi h i ki m tra biên đ i v i t t c các m ng. G n nh t t c các ngôn ng thông d ch s b o v ch ng trình tr c các hi n t ng tràn b đ m b ng cách thông báo m t tr ng thái l i đnh rõ (well-defined error). Thông th ng, khi m t ngôn ng cung c p đ thông tin v ki u đ th c hi n ki m tra biên, ngôn ng đó th ng cho phép l a ch n kích ho t hay t t ch đ đó. Vi c phân tích t nh (static analysis) có th lo i đ c nhi u ki m tra ki u và biên đ ng, nh ng các cài đ t t i và các tr ng h p r i r m có th gi m đáng k hi u n ng. Các k s ph n m m ph i c n th n cân nh c gi a các phí t n cho an toàn và hi u n ng khi quy t đnh s s d ng ngôn ng nào và c u hình nh th nào cho trình biên d ch.

S d ng các th vi n an toàn

V n đ tràn b đ m th ng g p trong C và C++ vì các ngôn ng này đ l các chi ti t bi u di n m c th p c a các b nh đ m v i vai trò các ch ch a cho các ki u d li u. Do đó, ph i tránh tràn b đ m b ng cách gìn gi tính đúng đ n cao cho các ph n mã ch ng trình th c hi n vi c qu n lý b đ m. Vi c s d ng các th vi n đ c vi t t t và đã đ c ki m th , dành cho các ki u d li u tr u t ng mà các th vi n này th c hi n t đ ng vi c qu n lý b nh , trong đó có ki m tra biên, có th làm gi m s xu t hi n và nh h ng c a các hi n t ng tràn b đ m. Trong các ngôn ng này, xâu ký t và m ng là hai ki u d li u chính mà t i đó các hi n t ng tràn b đ m th ng x y ra; do đó, các th vi n ng n ch n l i tràn b đ m t i các ki u d li u này có th cung c p ph n chính c a s che ch n c n thi t. Dù v y, vi c s d ng

c a h đi u hành OpenBSD cung c p các hàm h u ích strlcpy strlcat nh ng các hàm này nhi u h n ch h n nhi u so v i các cài đ t th vi n an toàn đ y đ .

Tháng 9 n m 2006, Báo cáo k thu t s 24731 c a h i đ ng tiêu chu n C đã đ c công b ; báo cáo này mô t m t t p các hàm m i d a trên các hàm vào ra d li u và các hàm x lý xâu ký t c a th vi n C chu n, các hàm m i này đ c b sung các tham s v kích th c b

đ m.

Ch ng tràn b nh đ m trên stack

Stack-smashing protection là k thu t đ c dùng đ phát hi n các hi n t ng tràn b đ m ph bi n nh t. K thu t này ki m tra xem stack đã b s a đ i hay ch a khi m t hàm tr v . N u stack đã b s a đ , ch ng trình k t thúc b ng m t l i segmentation fault. Các h th ng s d ng k thu t này g m có Libsafe, StackGuard và các b n vá l i (patch) Propolicy

Ch đ Data Execution Prevention (c m th c thi d li u) c a Microsoft b o v th ng các con tr t i SEH Exception Handler, không cho chúng b ghi đè.

Có th b o v stack h n n a b ng cách phân tách stack thành hai ph n, m t ph n dành cho d li u và m t ph n cho các b c tr v c a hàm. S phân chia này đ c dùng trong ngôn ng l p trình Forth, tuy nó không ph i m t quy t đnh thi t k d a theo tiêu chí an toàn. Nh ng dù sao thì đây c ng không ph i m t gi i pháp hoàn ch nh đ i v i v n đ tràn b đ m, khi các d li u nh y c m không ph i đa ch tr v v n có th b ghi đè.

B o v không gian th c thi

B o v không gian th c thi là m t cách ti p c n đ i v i vi c ch ng tràn b đ m. K thu t này ng n ch n vi c th c thi mã t i stack hay heap. M t k t n công có th s d ng tràn b đ m đ

chèn m t đo n mã tùy ý vào b nh c a m t ch ng trình, nh ng v i b o v không gian th c thi, m i c g ng ch y đo n mã đó s gây ra m t ngo i l (exception).

M t s CPU h tr m t tính n ng có tên bit NX ("No eXecute" - "Không th c thi") ho c bit XD ("eXecute Disabled" - "ch đ th c thi đã b t t" ). Khi k t h p v i ph n m m, các tính n ng này có th đ c dùng đ đánh d u các trang d li u (ch ng h n các trang ch a stack và heap) là đ c đ c nh ng không th c thi đ c.

M t s h đi u hành Unix (ch ng h n OpenBSD, Mac OS X) có kèm theo tính n ng b o v không gian th c thi. M t s gói ph n m m tùy ch n bao g m:

Các bi n th m i c a Microsoft Windows c ng h tr b o v không gian th c thi, v i tên g i Data Execution Prevention (ng n ch n th c thi d li u). Các ph n m m g n kèm (Add-on) bao g m:

SecureStack OverflowGuard BufferShield StackDefender

Ph ng pháp b o v không gian th c thi không ch ng l i đ c t n công return-to-libc.

Ng u nhiên hóa s đ không gian đa ch

Ng u nhiên hóa s đ không gian đa ch (Address space layout randomization - ASLR) là m t tính n ng an ninh máy tính có liên quan đ n vi c s p x p v trí các vùng d li u quan tr ng (th ng bao g m n i ch a mã th c thi và v trí các th vi n, heap và stack) m t cách ng u nhiên trong không gian đa ch c a m t ti n trình.

Vi c ng u nhiên hóa các đa ch b nh o mà các hàm và bi n n m t i đó làm cho vi c khai thác m t l i tràn b đ m tr nên khó kh n h n, nh ng ph i là không th đ c. Nó còn bu c k t n công ph i đi u ch nh khai thác cho h p v i t ng h th ng c th , đi u này làm th t b i c g ng c a các con Sâu internet M t ph ng pháp t ng t nh ng kém hi u qu h n, đó là k thu t rebase đ i v i các ti n trình và th vi n trong không gian đ a ch o.

Ki m tra sâu đ i v i gói tin

Bi n pháp ki m tra sâu đ i v i gói tin (deep packet inspection - DPI) có th phát hi n các c g ng t xa đ khai thác l i tràn b đ m ngay t biên gi i m ng. Các k thu t này có kh n ng ch n các gói tin có ch a ch ký c a m t v t n công đã bi t ho c ch a m t chu i dài các l nh No-Operation (NOP - l nh r ng không làm gì), các chu i nh v y th ng đ c s d ng khi v trí c a n i dung quan tr ng (payload) c a t n công h i có bi n đ i.

Vi c rà các gói tin không ph i là m t ph ng pháp hi u qu vì nó ch có th ng n ch n các t n công đã bi t, và có nhi u cách đ mã hóa m t l nh NOP. Các k t n công có th đã s d ng mã alphanumeric, metamorphic, và Shellcode t s a đ tránh b phát hi n b i vi c rà gói tin.

#include <stdio.h> main() {

char *name;

char *dangerous_system_command; name = (char *) malloc(10);

dangerous_system_command = (char *) malloc(128); printf("Address of name is %d\n", name);

printf("Address of command is %d\n", dangerous_system_command); sprintf(dangerous_system_command, "echo %s", "Hello world!"); printf("What's your name?");

gets(name);

system(dangerous_system_command); }

L u đo n sau đây thành file text và biên d ch b ng gcc

root@1[Desktop]# gcc buffer.c -o buffer

buffer.c:13:2: warning: no newline at end of file /tmp/ccefevDP.o(.text+0x82): In function `main':

: warning: the `gets' function is dangerous and should not be used. root@1[Desktop]# ./buffer

Address of name is 134520840 Address of command is 134520856

What's your name?hao

Hello world!

root@1[Desktop]# ./buffer Address of name is 134520840 Address of command is 134520856

What's your name?1234567890123456cat /etc/passwd

root:x:0:0:root:/home/knoppix:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh

proxy:x:13:13:proxy:/bin:/bin/sh

majordom:x:30:31:Majordomo:/usr/lib/majordomo:/bin/sh postgres:x:31:32:postgres:/var/lib/postgres:/bin/sh

www-data:x:33:33:www-data:/var/www:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh

msql:x:36:36:Mini SQL Database Manager:/var/lib/msql:/bin/sh operator:x:37:37:Operator:/var:/bin/sh

list:x:38:38:Mailing List Manager:/var/list:/bin/sh irc:x:39:39:ircd:/var:/bin/sh

gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats/gnats-db:/bin/sh mysql:x:100:103:MySQL Server:/var/lib/mysql:/bin/false postfix:x:102:65534:Postfix Mailsystem:/var/spool/postfix:/bin/false knoppix:x:1000:1000:Kanotix User:/home/knoppix:/bin/bash nobody:x:65534:65534:nobody:/nonexistent:/bin/sh sshd:x:103:65534:SSH Server:/var/run/sshd:/bin/false partimag:x:104:65534::/home/partimag:/bin/false telnetd:x:101:101::/usr/lib/telnetd:/bin/false distccd:x:105:65534::/:/bin/false bind:x:106:108::/var/cache/bind:/bin/false messagebus:x:108:1002::/var/run/dbus:/bin/false captive:x:109:65534::/var/lib/captive:/bin/false sslwrap:x:107:1001::/etc/sslwrap:/bin/false distmp3:x:112:112::/nonexistent:/bin/false saned:x:114:114::/home/saned:/bin/false arpwatch:x:110:116:ARP Watcher,,,:/var/lib/arpwatch:/bin/sh snort:x:111:117:Snort IDS:/var/log/snort:/bin/false thpot:x:113:65534:Security Officer,,,:/usr/share/thpot:/dev/null ftp:x:115:65534::/home/ftp:/bin/false freerad:x:116:118::/etc/freeradius:/bin/false debian-tor:x:119:119::/var/lib/tor:/bin/bash

Một phần của tài liệu Tài liệu Giáo trình bài tập C/EH ppt (Trang 42 - 47)

Tải bản đầy đủ (PDF)

(47 trang)