Bộ đệm dùng đề lưu trữ các giá trị lạm thời của biến, mảng hay một xâu phục vụ cho quả trình xử lý Lỗi tràn bộ đệm là lỗi của chương trình thực hiện sao chép dữ liệu có kích thước lớn
Trang 1LỜI CAM ĐOAN Tôi xin cam đoan những gì mả tôi viết ra trong luân văn nảy là do sự tìm hiểu và
nghiên cửu của bản thân Mọi kết quả nghiên cứu cũng như ý tưởng của các tác giả
khác đều được trích dẫn đầy đủ
Luan van này cho đến nay van chưa hè được bảo vệ tại bắt kỳ một hội đồng bảo vệ
luận văn thạc sĩ nảo trên toàn quốc cũng như nước ngoài và cho đền nay chưa hễ được
công bố trên bắt kỷ phương tiên thông tin nảo
Tôi xin hoàn toàn chịu trách nhiệm về những gì mả tôi đã cam đoan trên đây
Hà Nội, ngày 02 tháng 9 năm 2013
Trang 2LỜI CẢM ƠN Trước tiên, tôi xm phép bảy tỏ lòng biết ơn chân thành tới PGS.TS Huỳnh Quyết
Thang đã tận tình giúp đỡ tôi hoàn thành luận văn nảy
Tôi cũng xin chân thành cảm ơn các thây cô ở Viên Công nghệ Thông tin và Truyền thông của Đại học Bach Khoa Ha Nội đã giảng dạy và truyền đạt cho tôi những kiến thức qui bảu trong suốt quá trình học tập trong suốt thời gian của khóa Thạc sĩ 201 1 Cuối củng, không kém phần quan trọng, xin cảm ơn các đồng nghiệp ở Bkav Security
đã tạo điều kiên đề tôi có cơ hội biển nghiên cứu trong luận văn nảy thành hiện thực
Hà Nội, ngày 02 tháng 9 năm 2013
Trang 3B Giải pháp đảm bảo chất lượng phần mềm 12
2.5.3 Fuzzer trong bé nihé (In-memory fuzzer) 35
Học viên thee hién: Lé Dire Anh Lép LIBMTTT Khéa hoc 2011B 3
Trang 4
2.8.2 Phân tích khả năng khai thác của lỗi 4I
3.1.4 Trình duyệt: Đích ngắm sô một của tôi phạm mạng, 50
3.2.1 Mô hình Fuzzing có thể đơn giản hơn, mang tỉnh phân tán sẵn 32 3.2.2 Xuất hiện các lỗi liên quan tới xử lý bộ nhớ nguy hiểm khác 55
3.2.4 Ý tưởng cải tiền cơ chế sinh dữ liệu Fuzzing 60
3.3 Để xuất phương pháp xây dựng hệ thông Fuzzing trình đuyệt 61
Trang 6DANH MỤC CÁC HÌNH VẼ
Hình l: Thông kê sâu Confieker (Nguồn: Bkis)
Hình 2: Thông kê về vùng ảnh hưởng của Sttnet (Nguon: Threatpost.com)
Hình 3: Thông kê về sô lỗ hồng trong 25 năm (nguồn: SoureeFire) "
Hình 4: Thông kê về phần mềm có nhiều lỗ hỏng nguy hiểm ong 25 năm (nguồn:
Hình 9: Quet 16 héng Website với Acunetix sina —
Hình 10: Kiểm thử đâm xuyên với Metasploit
Hình 11: Phần mễm Internet Explorer khi gặp lỗi xử lý
Hình 13: Mô hình Fuzzing cô điể
Hinh 14: Mô hình Fuzzing thu gọn
Hình 15: Lưu đỗ hoạt động của quá trình Fuzzing
Hình 16: Fuzzing với cơ chế phản hội từ debugger
Hình 17: Các mức của lỗ hồng phần mềm
Hình 18: Một mô hình zing phân tản
Hình 19: Thông kê vẻ thí phần các trinh duyét vào tháng 10/2012 (Nguồn: Wiamada)
Hình 20: Một trang HTML đơn giản
Hình 21: Trang HTML được hiền thị trên trình duyệt Tternet kuugi er 10
Hinh 22: Cac thanh phan co ban trong trinh duyét :
Hình 23: Luéng thực thí của một Rendering Engine đơngiản
Hình 24: Số lỗ hồng trình duyệt trong giai đoạn 2007-2011
Hình 25: Tự động tải lai trang Web qua ma Javascript
Hinh 26: M6 hinh fuzzing khong can debugger
Hình 27: M6 hinh fwzzing khong có debugger & server riêng
Hình 2§: Màn hình của Cross_Fuzz khi hoạt động
Hình 29: File HTML demo lỗi CVE-2012-4792
Hình 30: Sinh dữ liệu Fuzzing voi Python
Hình 31: Các bước hoạt động trong LangFuzz
Hình 32: Các bước trong xây dựng hệ thông,
Hình 33: Dẫn hướng biên dịch trong zBNE:
Hình 34: Ví dụ sử dụng zBNE -
Hình 35: Luật sinh dữ liệu chưa ‘duge chuẩn hóa
Hình 36: Các luật của dạng chuẩn Chomsky
Hình 37: Các bước của quả trình biên dịch
Hình 38: FSM của quá trình Tokenizing dit ligu ZBNF
Hình 39: Lưu độ lưu kết quả biên địch +
Hinh 40: Luu do > Bit thuật không đệ quy sinh dit liệu fing
Hình 41: Biểu đồ phân rã chức năng 5
Trang 7Biên dịch đữ liệu zBNE °
Dũ liệu mẫu được sinh ra từ đặc tá zBNE,
Trang Web hiển thị quá trình Fuzzing
Qua trinh fixzzing 6 phia agent
Hiển thị cac 16i da fuzz duge trong Crash Bench
Van pham ding zBNF cho fuzz cac tag
Cac trinh duyét va 16i duoc Iya chon dé fuzz
Cay DOM
'Văn phạm cho thí nghiệm đo hiệu suấi
ö liệu thu được từ thí nghiệm đo hiệu suất,
Sự biến đổi hiệu suất theo sô máy tham gia
Trang 8
MO DAU
A Tình hình an ninh ứng dụng hiện nay
B Giải pháp đảm bảo chất lượng phần mềm
Trang 9A Tình hình an ninh ứng dụng hiện nay
Với sự phát triên như vũ bão của công nghệ thông tin và truyền thông hiện nay, chiếc
máy tỉnh đã trổ nên thân thiết với chúng ta Có lẽ có nhiều bạn cỏn phải gắn bỏ với
máy tỉnh trong công việc riêng thường ngay của mình Nêu bạn là lập trình viên, môi
trường phát triên tích hợp (TDE) nao quen thuộc với bạn nhất? Nếu là nhân viên văn phòng, trình xử lý văn bản nào mà bạn hay dùng nhất? Hoặc giả dụ, đơn thuần bạn là một gamer, bạn đã thử qua game Dante's Inferno, tưa game hot nhất mủa hè 2010 nay
chưa?
Môi trường mạng internet tạo điều kiện rât tốt cho các ứng dụng len lỏi vào từng ngõ
ngách của đời sống của con người Các dịch vụ thương mại điện tir (E-commerce) ngay cảng nở rộ tại Việt Nam như thanh toán online, mua hàng online Theo một bảo cáo
khảo sát năm 2008, 40% doanh nghiệp có doanh thu từ thương mại điện tử và mức
doanh thu ấy chiếm 159% tổng doanh thu Một hướng khác đó đang được đây mạnh la
ứng dụng công nghệ thông tin trong xây dựng chỉnh phủ điện tử, nhằm giúp công tác quản lý nhà nước hiệu quả hơn, minh bạch hỏa, giảm chỉ phí, phục vụ nhân dân và
doanh nghiệp tốt hơn
Tuy nhiên, nhiêu hacker đã lợi dụng internet cho các mục đích xâu Bạn tưởng tượng ra
sao nều một ngày tài khoản ngân hàng của mỉnh bị rút một số tiên lớn một cach "day bi an"? Bạn có biết kẻ nảo đã gây ra các cuộc tân công DDoS vào website của chính phủ
Mĩ và Hàn Quốc mả báo chí đã tồn rất nhiều giây mực trong năm 2009 chưa? Các phần
mềm phổ biển như Windows Media Player, Winamp, các trình duyệt web Internet
Explorer, Firefox dang la muc tiéu rat hap dan cua hacker, Hau như ngày nảo, trên
các trang tin an ninh mạng cũng công bỏ lỗi của các phản mem Hang phan mem
Microsoft hang thang déu phai công bỏ các bản vá cho sản phẩm của mình Ngay trong,
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 9
Trang 10thang 4/2010 vita roi, Microsoft tung ra 10 ban cap nhật an minh, quả nửa trong số đỏ là
các lỗi cực kỉ nguy hiểm
Trước đó trong năm 2009, hảng triệu máy tính chạy hệ điểu hành Windows XP trên
toàn thể giới bị nhiễm sâu conficker Lỗ hồng bảo mật bị khai thác ở đây phát sinh từ
trong Windows RPC va Microsoft bit lai bing ban va khan cap mang ma s6 MS08-67
Sâu Conficker rất phức tap, nguy hiểm vả đủ khả năng tao mang may tinh ma đề tân
công hạ gục bắt kỳ hệ thống máy tính nào chưa được vá lỗ hỏng Theo thông kê của
trung tâm an ninh mạng Đkis, đã có rất nhiều biển thể của Conficker xuất hiện Trung Quốc là nước có số lượng máy tính bị nhiềm nhiều nhất
mvc nanan HONEA {RRERUBUCOF KOREA mvewnitue
*UNC0S[ATSU5
Hình 1: Thống kê sâu Conficker (Nguén: Bkis)
Trong năm 2010, cả thế giới xôn xao vẻ sâu Stuxnet, vũ khí mạng đầu tiên được biết
đến Stuxnet đã được xem là một trong những virus máy tính tỉnh vi nhất từng được tạo
ra, đã lây nhiễm vào hàng trăm ngản hệ thông máy tỉnh nhờ khai thác 20 lỗ hồng xếp
loai “zero-day”, von có mặt trong mọi phiền bản hệ điều hành Windows khi đó
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 10
Trang 11Stuxnet pha hoai cac hệ thông SCADA dùng trong các nhả máy công nghiệp, ma trong
trường hợp gần đây nhất là chiếm quyền kiểm soát hệ thống phát điện cho tổ hop may
lam giau uranium — nguyên liệu dung trong công nghiệp nguyên ti tai Iran
'Hình 2: Thống kê về vùng ảnh hưởng của Stuxnet (Nguồn: Threatpost.com)
Tiếp đó, trong năm 2012, xuất hiện hàng loạt các vũ khí mạng khác như Gauss, Flame,
Mini Flame, Tac hai ctia ching nhu thé nao, dén nay vẫn chưa có con s6 cu thé Va
người ta cũng chưa thê biết rằng: liệu chiến tranh mang (cyber war) da dién ra hay
chưa & điện ra từ lúc nảo
Học viên thực hiện: Lê Đức anh Lớp TIBMTTT Khóa học 2011B I
Trang 12Vấn đẻ an ninh mạng nói chung và an ninh ứng dụng nói chung đang đặt ra rất nhiều vấn đề nỏng bỏng, đỏi hỏi phải cỏ sự quan tâm đúng mức tử phia người dùng, tổ chức, doanh nghiệp và cả từ phía nhà nước
B Giai phap dam bao chat lượng phần mềm
Lam thé nao dé han ché tdi da nhiing 16 hong an ninh trong phản mềm ứng dụng?”
Từ góc nhìn của các công tỉ phát triển phan mêm đó là: phải đảm bão tốt nhất chất
lượng phân mềm trước khi tung ra thị trường, Hoạt động kiểm thử phần mềm là qui
trình bắt buộc trong các dự án phát triển phân mềm Với mục đích phát hiện lỗi, kiêm
thử phần mềm thưởng phải trải qua các bước: tạo dữ liệu thử, thực thi phần mềm trên
dữ liêu thử và quan sát kết quả nhận được Bước tạo dữ liệu đóng vai trò quan trọng
nhất, ảnh hưởng lớn nhất tới khả năng phát hiện lỗi
Tuy nhiên, việc kiểm thử phân mềm hiện nay đa phần được thực hiện một cách thủ
công, không có hiệu quả cao trong việc phát hiện những lỗ hồng an ninh tiềm tàng
Công nghệ Fuzzing chính là một giải pháp cho vẫn để trên Với khả năng tự động hóa
cao độ củng với cơ chẻ phát hiện lỗ hỏng hiệu quả, công nghệ này được rất nhiều hãng, quan tâm sử dụng Tuy rằng, fuzzing đã ra đời được 20 năm, nhưng vẫn có nhiều van
dé can phải nghiên cứu, nhất là cải tiên hơn nữa hiệu suất và độ tin cậy của fuzZing
C Nhiệm vụ của đề tài
Tên đề tài (tiếng Việt: Kiểm thử an toàn cho trình duyệt dựa trên kỹ thuật Fuzzing
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 12
Trang 13L6 héng phan mém (software vulnerability) dùng đề chỉ lỗi của phần mềm trong quả trình xử lý dữ liệu đầu vào Do xử lý không tốt, một số lỗi cỏ thể dẫn tới khả năng bị hacker khai thác, tân công, thậm chỉ chiêm dụng toàn bộ hệ thông
Lỗ hỏng phân mêm có thê phân ra rất nhiều loại, tuy nhiên, đối với phần mềm thông thường, các lỗ hỏng liên quan tới bộ nhớ (nhu tran bé dém, dangling pointer .) 1 rat thường gặp vả tương đối nguy hiểm
Dữ liệu gây ra các lỗi liên quan tới bộ nhớ có thể cỏ khuôn dạng, rất dễ nhận thây như
dữ liệu có độ dài lớn, số nguyên lớn Tuy nhiên, trong một số trường hợp khó hơn, dữ liệu đó thực tế là không thể xác định được ngay từ ban đầu và cần phải nhiều phép thử
để xác định Để đảm bảo chất lượng phần mềm, ta cân một giải pháp đề tư động sinh
dữ liêu, kiểm soát hành vi của phần mềm trong khi xử lý dữ liệu đó Và công nghệ
Fuzzing lả một câu trả lời cho nhu cầu đỏ
Kỹ thuật Fuzzing là kỹ thuật kiểm thử hộp đen có tỉnh tự động hóa cao, có thẻ dùng đề phát hiện các lỗ hồng an minh có trong phan mềm Nhiều lỗ hồng trong các phần mềm
thông dụng như Google Chrome, Microsoft Word đã được phát hiện đựa trên công nghệ này
Mục đích của đề tài (các kết quả cần đạt được):
Xây dựng hệ thống kiểm thử trình duyệt dựa trên Fuzzing với các đặc trưng như sau
+ Xây dưng ngôn ngữ đặc tả dữ liệu fuzzing, giúp mô các loại dữ liệu chỉ có thể được
mô tä bằng văn phạm phi ngữ cảnh (Context Free Grammar) nhu Javascript, CSS
Đây là đối tượng xử lý chính của các trình duyệt Web hiện nay
« Phân tán xử lý
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 13
Trang 14CHUONG I: CO SO LY THUYET CHUNG
Trang 151.1 Tổng quan về lỗ hỗng phần mềm
Thuật ngữ "lỗ hồng" (vulnerabilityf) được dùng ở đây đề chỉ những lỗi lập trình có thể
bị khai thác (exploitable), cho phép hacker lợi dụng đề thực thi mã độc trên máy người
sử dụng, đánh cắp thông tin quan trọng
Hinh 3: Thống ké ve s6 16 hong trong 25 nam (nguon: SourceFire)
Qua 25 năm, số lỗ hỏng phản mềm có chiều hưởng gia tăng nhanh chóng trong giai
đoạn 1988-2005, với một chút tạm lắng trong năm 2003 Số lỗ hỏng đạt đỉnh vao nam
2006, và liên tục giảm cho tới năm 2011 Tuy nhiên, cho đến cuối năm 2012, số lỗ
hồng lại tiếp tục tăng trở lại
Phản mềm với nhiều lỗ hông nhất là Linux Kernel với 937 lỗ hỏng Trình duyệt
Chrome “vượt mặt' Internet Explorer về số lượng lỗ hỏng gặp phải
Học viên thực hiện: Lê Đức anh Lớp TIBMTTT Khóa học 2011B 15
Trang 16
Hinh 4: Thống kê về phẩn mềm có nhiễu lễ hỗng nguy hiểm trong 25 năm (nguồn: SourceFire)
Theo một thông kê khác vẻ thành phân của các lỗi nguy hiểm (Common Vulnerability
Scoring System (CVSS) lon hon 7), cac 16 héng lién quan téi tran bé đệm chiếm phan
lớn (23%):
etal format tt
Trang 17Lỗ hồng trên phần mềm cỏ thể được đặc trưng bởi các yếu tô sau:
« _ Nền tảng (platform) mà phần mềm hoạt động: trước đây, môi trường Desktop
với các ứng dụng chạy trên hệ điều hành là đích nhắm của nhiều hacker Tuy nhiên,
do sự phát triển của công nghệ điện toán, các nên tâng khác như web, mobile cũng
là mục tiêu đây tiêm năng đề hacker khai thác
+ Mite dé phổ dụng của phần mềm: phản mềm cảng phỏ biến, nêu có lỗ hỏng thì
cảng nghiêm trọng
« _ Tính chất khai thác: có 2 loại hình tân công phỏ biển là tân công từ xa (remote
attack) hoặc tân công local Tân công từ xa thường được thực hiện qua môi trường mạng và nguy hiểm hơn và có tỉnh chất lây nhiễm nhiều hơn Sự kiện sâu Conficker
là một ví dụ điển hình Confieker hay Downadup lợi dụng một lỗi bảo mật dịch vụ
Windows Server tich hop trong hau hết mọi phiên bản Windows - từ Windows
2000, XP, Vista, Server 2003 đẻn Server 2008 - đẻ tân công và lây nhiệm lên PC người dùng lần mạng nội bộ mà máy tính đó kết nói đến Khi được kích hoạt,
Conficker sé khéa mét s6 dich vu hé théng nhu Windows Automatic Update,
Windows Security Center, Windows Defender, and Windows Error Reporting Ké
đến, Confieker kết nói đến một mảy chủ chứa mã đỏc đề tải các loại mã độc khác
cải đặt lên máy tính nạn nhân Theo một thống kê không chính thức, cho tới tháng
4/2012, đã có trên 220 triệu máy tỉnh trên toàn câu bị nhiễm conficker
«_ Độ khó của việc khai thác: các lỗ hỏng đã được phát hiện sẽ được các nhà sản
xuất phan mém cập nhật đề bảo về người dùng Nhiễu cơ chế mới được thêm vào
dé đảm bảo cho điều này Ví dụ như cơ chế ASLR (Address Space Layout
Randomization) được đưa vào trong các phiên bản của Microsoft Windows bắt đầu
từ năm 2007 Việc vượt qua được câc cơ chế bảo vệ đó đỏi hỏi nhiều kỹ năng và
kiến thức, đôi khi rất khỏ đẻ hacker có thẻ tiễn hảnh khai thác ứng dụng bị lỗi
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 17
Trang 18Toản bộ các thông tỉn trinh bảy ở trong luận văn này sẽ tập trung vảo lỗ hồng liên quan
tới xử lý bộ nhớ, lỗ hồng thường gặp nhất của các phần mềm Desktop thông thường
1.1.1 Lỗ hồng tràn bộ đệm
Bộ đệm (buffer) là một vùng nhớ liên tục có kích thước giới hạn trong máy tính Bộ
đệm dùng đề lưu trữ các giá trị lạm thời của biến, mảng hay một xâu phục vụ cho quả
trình xử lý
Lỗi tràn bộ đệm là lỗi của chương trình thực hiện sao chép dữ liệu có kích thước lớn
hơn vào một bộ đệm mà không thực hiện các thao tác kiêm tra biên, dẫn đến vùng nhớ
phía sau bộ đệm bị ghỉ đè, vùng nhớ này có thé lại là một bộ đệm khác hoặc là vùng
nhớ hệ thông Kết quả là có thể làm chương trình hoạt động không chính xác hoặc đỗ
vỡ
Các ngôn ngữ lập trinh họ C và C++ không tự động so sánh kích thước dữ liệu sẽ được
sao chép với kích thước của bộ đệm Do đó nêu người thiết kế chương trình không,
thêm đoạn mã kiểm tra kích thước dữ liệu vào, hoàn toàn có thê ghi đè lên vùng nhớ
phía sau bộ đêm vả những điều không lường trước cỏ thẻ xảy ra
Bộ đêm có hai loại, bộ đêm trên stack và bộ đệm trên heap Stack dùng để chứa các
biển cục bộ kích thước thường nhỏ, sử dụng trong hảm, được cấp phát khi hàm khởi tạo, giải phóng khi kết thúc hàm Bộ đêm trên heap cỏ câu trúc phức tạp hơn và được
tham chiều đến bởi con trỏ - thường là một biển trong stack, tuy nhiên cả hai đều có
nguy cơ gặp lỗi tràn bộ đệm nều không kiểm tra cần thận trước khi tao tác
Sau đây là một vi du vẻ lỗi tràn bộ đệm trong một chương trinh đơn giản:
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 18
Trang 19void main(int arge, char* argv[]]{
char buffer[5];
memepy (buffer, argv{1]):
Mang buffer 6 trén chi duoc cap phat 5 phan ti char va duoe dùng đề lưu tạm tham số
truyền vào cho chương trình Néu tham so truyén vao co dé dai nhỏ hơn 5, mọi chuyện
vẫn ôn Tuy nhiên, nếu ta nhập vảo tham số với độ dai lon hon 5, sé gây ra lỗi thực thi
và khiển chương trình đồ vỡ
1.1.2 Lỗ hổng tràn số nguyên
Các số nguyên cỏ độ đài có định (8 bịt, 16 bít, 32 bit, .), vi thé né chi c6 thé dit mot
giá trị lớn nhất nào đỏ Khi lưu một giá trị lớn hơn ngưỡng đó, hiện tượng tràn số
nguyên sẽ xây ra Theo chuẩn ISO C99, tran số nguyên gây ra các hành vị không xác
định: trình biên dịch cỏ thê không làm tròn số hoặc thoát hắn chương trình
Lỗi tràn số nguyên không thẻ bị phát hiện cho tới khi nó diễn ra Không có cách nào
cho một ứng dụng xác định rằng một kết quả được tỉnh toán trước đỏ cỏ đúng hay
không Điều nảy có thể vô củng nguy hiểm néu như tỉnh toán đỏ làm việc với kích cỡ
bộ nhớ hoặc chỉ số trong mâng Tắt nhiên, phân lớn các lỗi tràn số nguyên là không thẻ
khai thác được bởi vì bộ nhớ không bị ghí đè trực tiếp, nhưng nó thường hay dân tới
các loại lỗi khác, mả điền hành lả tràn bộ đệm
Sau đây là một ví dụ vẻ lỗi tràn bộ đệm trong một chương trình đơn giản:
Hoe vién thực hiện: Lé Dire Anh Lop 1IBMTTT Khoa hoc 2011B 19
Trang 20Độ dài của tham số truyền vào cho chương trình được truyền vào từ dòng lệnh và giữ
trong số nguyên ¡ Khi giả trị này được chuyên đổi thành kiểu short, nó bị cắt cụt
(truncated) nếu như giá trị đỏ quá lớn để chứa vảo s (ví dụ, nêu i 1a 65536 chẳng hạn)
Bởi vi thể, hoàn toàn có thê vượt qua được bước kiểm tra biên tại [+1] và gây tràn bộ
đêm
1.1.3 Lé héng format string
L6 héng nay xảy ra khi dữ liêu được truyền vào của một string được đánh giả như là
lệnh đối với chương trình Theo cách nảy, kẻ tân công có thẻ thực thị mã độc, gây ra
các hành vi ảnh hướng tới tính bên vững của phan mềm Đề hiểu thêm vẻ cách tân
công nảy, ta cân phải hiểu một số thành phần như sau:
« _ Hàm format là hàm chuyên đôi như printf, fprintf, Các hàm đó được dùng để
chuyên đổi các biến trong ngôn ngữ lập trình thành các string (có thẻ được hiểu bởi
CON người)
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 20
Trang 21«_ Chuỗi format là tham số của hảm format và nó lả một string, chita text và các ký tự
fomnat Ví dụ như: printf ("The magie number is: %d\n", 1911)
« Tham số format, ví dụ như %x, %d,
Bảng giới thiệu một số hàm format trong C/C++ và tham số format tương ứng
printf Ghiramảnhinh một chuối được định dạng
sprintf Xuất ra mét string
‘Hinh 7: Cac tham so format
Sau đây là một đoạn mã bị lỗi format string Đoạn mã copy tham số truyền từ
command line vào một bộ đệm, sử dụng hàm snprintf():
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 21
Trang 22int main(int arge, char **argv){ char buf [i229];
printf (buf,125,argv[1])z
Kế tấn công có thể truyền tham số đầu vào chứa các tham số format như %4x
Hàm snprintfQ) sẽ coi như đó là một chuỗi format và sẽ sử dụng các tham số đi
kèm để trả về kết quả ở bộ đệm Tuy nhiên, vi không có tham số nảo được cung
câp, nên ở đây sẽ Xây ra một lỗi truy cập bộ nhớ trái phép (Memory Access
Violation) và có thể bị khai thác
1.2 Kiểm thử bảo mật
1.2.1 Khái niệm
Theo Wikipedia, kiém thử báo mật (Securily testing) là quá trình để xác định tính an
loàn của một hệ thống thông tin trong bảo vệ đữ liệu và hoạt động theo đúng những gì
đã được thiết kế hay không!”
Có sảu khia cạnh liên quan tới kiêm thử bảo mật đó là:
s _ Tính riêng tư (Confidentiality): Chống lại thất thoát dữ liệu và dữ liêu chỉ được
gửi cho những đối tượng xác định,
s _ Tính toàn vẹn (Integrity): Dữ liệu nhận được bởi hệ thông lả nguyên vẹn, không
bị sửa đổi dọc đường truyền
¢ Tinh xác thực (Authentication): Liên quan tới việc xác thực người sử dụng hệ
thống
¢ Tinh iy quyén (Authorization): Xác định xem người sử dụng có được thực hiện
một số tác vụ nhất định trên hệ thông hay không Ví dụ: người đừng Admin có
quyền thực hiện nhiều tác vụ hơn là người dùng bình thường
¢ Tinh san sang (Availability): Dam bảo rằng thông tin và đường truyền luôn sẵn
sàng khi có yêu cầu Thông tin chỉ được cap cho những người được ủy quyền
* _ Tính không chối bỏ (Non-repudiation): Tính chất nảy là một cách đề khẳng định
chắc chắn răng: người đã gửi một thông điệp không thế chỏi bỏ rằng mình đã không
lảm điều đó, vả ngược lại: người nhận cũng không thẻ chối bỏ rằng minh da khong
nhận được thông điệp
1.2.2 Các thuật ngữ
Có các thuật ngữ sau trong lĩnh vực kiểm thử bảo mật
«_ Phát hiện (Discovery): mục đích của bước này lả xác định các thành phân trong hệ
thống và các dịch vụ liên quan Nó không được sử dụng trong quá trình phát hiện lỗ
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B ˆ s
Trang 23hồng, nhưng giúp cho việc xác định phiên bản của các phan mém/firmware citi de
tìm các lỗ hông liên quan
tap Soin zepOEC YoE'geltƒs02.sšY Most 42 up (0.0883 ietency)
Yiot_shom: 65821 closed ports
“I bena-tisie: Teat Page for the Apache BITP Server on Red Set Enverprize Linux 1i1/tcp cpmm rpebind = (rpe #100000)
status 1 (rpc #100024) 8.323/0.931
isco-aceE 3406/tcp cpan — mựag! MySQL (unauthorized) 563/kcp faltered atp
16000/tcp opøn http ebsin httpd
|_htmi-title: Site doesate have a title (rexc/het)
\heep-fevioont Unknown favicon MDS: 5B3D30CA668B36SFA9D370E0E92093F4
15000/tep cpen http Apache Teecat/Corote JSP engine 1.1 16091/tcp open — http Apache Toscat/Coyote JSP engine 2.2 1603/cp open — http Apache Toscat/Coyote JSP enyine 2.2
| robots.txt: nae 1 disallowed entey
iw
| -hrml~civie: TBSymphony
Hình 8: Quét các dịch vụ dang chay voi Nmap
© Quét 1 héng: Sau Phat hién, giai đoạn này sẽ xác định các nguy cơ bảo mật bằng,
thủ công hoặc bằng việc sử dụng các công cụ tự động phát hiện lỗ hỏng Các công,
cụ trên thường được gọi là Fuzzer, la déi tượng nghiên cửu của luận văn này Hiện
nay, có rất nhiều fuzzer với khả năng khác nhau trong phát hiện lỗ hồng của các
phan mém, website, giao thức
Học viên thực hiện: Lê Đức anh Lớp TIBMTTT Khóa học 2011B 23
Trang 24
Hinh 9: Quét lỗ hồng Website với Acunetix
+ _ Đánh giá lỗ hỗng (Vulnerability AssessmenÐ: Thuật ngữ này chỉ sự kết hợp của
2 giai đoạn Phát hiện và Quét lỗ hỏng dé xác định các lỗ hồng và đặt chúng trong
ngữ cảnh liên quan đẻ kiêm tra lại Việc kiểm tra lại có thẻ giúp loại bỏ các false
positive va true negative Í!Ï va xác định mức độ nguy hiểm của các lỗ hồng
«_ Kiểm thử đâm xuyên (Penetration Test): Kiều kiểm thử nảy áp dụng kiểu tân
công được thực hiện bởi các hacker xâu Được xây dựng trên kết quả của Đánh giá
lỗ hông, kết hợp với việc khai thác hệ thông Sử dụng cách tiếp cận này sẽ giúp ta
có được hiểu biết vẻ khả năng của hacker đề truy cập vào các thông tin riêng tư, ảnh
hưởng tới tính toàn vẹn của dữ liệu hoặc tính săn sảng của dịch vụ Môi bài kiểm
tra được tiên hành theo một phương pháp xác định, cỏ thể phát hiện các lỗ hỏng ma
các công cụ kiêm tra tự động không thẻ phát hiện Điều nảy có được là dựa vào
kinh nghiệm và trình độ của người kiểm tra, kết hợp với nhiều công cụ liên quan
Kiểm thử đâm xuyên sẽ tập trung vào độ sâu của các cuộc tấn công, trong khi,
Đánh giá lỗ hồng lại tập trung vào độ rộng
Trang 25
(ÿmetasploit' sommn N'
Ronee Nap S Am=km ÔCamsem Fie Ayn Men Tags Spann ats
| cmentne ar Eien tepme Gusts Ammwe sree ÄiSE (S1 ais) eves | © Marrabines (WE Capers soe
ow mete
Hình 10: Kiếm thử đâm xuyên với Metasploit
¢ Kiém tra bao mat (Security Audit): Kiéu kiém tra nay tap trung vao mét phan
hẹp hơn, một chức năng của của hệ thông Cỏ thẻ sử dụng tất cả các phương pháp
nêu trên để tiền hành
« _ Xem xét bảo mật (Security Review): Xác nhận lại xem các tiêu chuẩn về an toàn thông tim có được ả ap dung vao trong các thành phan hé théng hoặc sản phẩm hay: không Điều này thường được tiên hành theo các quy trình có sẵn như: xem lại mã nguồn, xem lại thiết kế
1.3 Kết chương | -
Các nội dung của chương này đã trình bảy ở mức độ tổng quan vẻ một số loại lỗi hay
gặp trong xử lý bộ nhớ của phần mềm và khái niệm về phương pháp kiểm thử bảo mật
Trong chương tiếp theo, ta sẽ trình bảy sâu hơn về Fuzzing: định nghĩa, cơ chế hoạt
đông, cũng như những điểm mạnh & yêu của phương pháp nảy
Học viên thực hiện: Lê Đức anh Lớp TIBMTTT Khóa học 2011B 25
Trang 26Mô hình fuzzing cỗ điển
Phân loại phương pháp Fuzzing
Phân loại Fuzzer Các bước của Fuzzing
Han chế của Fuzzing Các vẫn dé trong fuzzing
Trang 272.1 Khái niệm
Trong lĩnh vực an ninh ứng dụng, #zzing là kỹ thuật phát hiện lỗi phần mềm bằng
cách cung cấp đữ liệu đầu vào cho chương trình, sau đó theo dõi và ghi lại lỗi xây ra trong quá trình xử lý của chương trình] Dữ liều không mong đợi thường là các giá trị vượt ra ngoài biên, các giá trị đặc biệt Fuzzing là quả trình tự động hoặc bản tự động
lặp lại thao tác sinh dữ liệu và chuyên cho phần mẻm xử lý Khái niệm Fuzzing thiên
về lý thuyết hơn là giải pháp cụ thể Các chương trình ứng dụng Fuzzing gọi là FuzZer
Tuy theo môi trường vả ứng dụng cân kiểm tra mả người ta có các phương án khác
nhau để xây dung Fuzzer
(l5 //122 227157 27
Intemet Explorer has encountered a problem and needs
to close We are sorry for the inconvenience
iF you Were in the middle of something, the infomtion you wets working on ghi be loi
Please tell Microsoft about this problem
‘We have created sn ert report that you can zend lo help us improve Inteinet Explorer We wil leat this report as confidential and anonymous
To.see what date tic ence report contains, cick here
Send Enc rept
Hinh 11; Phin mém Internet Explorer khi gặp lỗi xử lý
Dit ligu fuzzing c6 thé la
© Dir ligu kiéu x4u (string): xâu cỏ độ đài lớn, hoặc chứa một số kỷ tự đặc biệt như
%x, %s, CLSID, HTTP
©_ Dữ liệu kiểu số nguyên: có thẻ lả số nguyên dài 1 byte, 2 byte hay 4 byte, cỏ thể cỏ
dau hay khéng dau Cac gia tri lam tran số nguyên có thể sử dụng là MAX_INT,
MAX _INT-1, MAX INT-2
Hoe vién thực hiện: Lé Dire Anh Lop 1IBMTTT Khoa hoc 2011B 27
Trang 28Các dữ liệu nảy cần được kết hợp với các đỡ liệu thông thường khác trong quả trình
fuzzing,
2.2 Lịch sử của Fuzzing
Thuật ngữ Fuzz được giáo sư Barton Miller đưa ra trong bài tập về nhà cho sinh viên tại trường đại hoc Winconsin Madison vao nam
1988 Bài tập được đặt tên la "Operating System Utility Program
Reliability - The Fuzz Generator" dé kiém tra mức độ chịu đựng
của các ứng dụng Unix, độ tín cậy của mã nguồn Hiện nay, các
kết quả nghiên cứu của nhỏm vẫn được cập nhật tại địa chỉ:
Hình 12: GSMiller hịtp//pages.cs.wise edu/~barVfuzz/
Năm 1999, trường đại học Oulu bắt đâu xây dựng các bộ kiêm thử PROTOS Các bộ
kiểm thử đã được xây dựng qua việc nghiên cứu đặc tả giao thức sau đó tạo ra các gói
tin “di dang” dé kiem tra xem tmg dung cai dat c6 xit ly dung dan no hay không Việc
tạo ra những bộ kiểm thử như vậy tồn kha nhiều công sức, nhumg mot khi hoan tat, sẽ
có thể áp dụng cho nhiều ứng dụng khác nhau của nhiều hãng phát triển khác nhau
Một số lượng lớn lôi đã được phát hiện trong quá trình fuzzing sau do
Năm 2002, Microsoft đã quyết định đầu tư cho nhóm sáng lập PROTOS Năm 2003,
các thảnh viên của nhóm đã thành lập Codenomicon, một công ty chuyên thiết kế và
phát triển các sản phẩm fuzzing thương mại
Fuzzer cho các định đạng tệp tin bắt đầu xuất hiện năm 2004, cùng năm đỏ Microsoft
công bó lỗi MS04-028, một lỗi của hệ điều hành trong xử lý ảnh định dạng IPEG Đich
tiếp theo đó là các định dạng tài liệu của Microsoft Office Tại Blackhat 2005 nhiều
công cụ Fuzzing định dạng tệp đã được giới thiệu như: FileFuzz, SPIKEBIe và
notSPIKEfile
Hoe vién thực hiện: Lé Dire Anh Lop 1IBMTTT Khoa hoc 2011B 28
Trang 29Tiếp đỏ, ActiveX lại trở thành mục tiêu mới khi cỏ khả nhiều lỗi được phát hiện liên
quan đến công nghệ này Việc khai thác lỗi của ActiveX qua trình duyệt web khá dễ
dang Nam 2006 David Zimmer cho ra COMRaider, cting nam do H.D.Moore giới
thiệu AxMan Cả hai công cụ đều tập trungvào những ActiveX có thể sử dụng được
trong trinh duyệt web Internet Explorer của Microsoft
Gan day nhất, vào tháng 4/2010, trong bải phát biểu về những nỗ lực “ñuzzing” của
Microsoft tai hội thảo bảo mật CanSecWest, Tom Gallagher, trưởng bộ phân Microsoft
Office Security Test, cho biết: “Chứng (ôi đã phát hiện và sửa chữa khoảng 1800 lỗi trong các mã Office 2010 Mặc đù số lượng này khá lớn nhưng điều đó không có nghia
là chúng tôi đã phát hiện ra 1800 vấn đề liên quan đến bảo mật Chúng tôi cfing kỳ
vọng sẽ có thê sửa chữa được cả các lỗi không liên quan đến bảo mật” Liên quan den
co cau Distributed Fuzzing ciia Microsoft, Gallagher cho biết: “chúng tôi gọi đây là
botnet cho fu
phân mềm của nhóm Access Tuy nhiên, các thông tin liên quan tới framework nảy hầu
1g” Mạng “fuzzing” được khởi tạo bởi David Conger, một nhả thiết kế
như là không có
2.3 Mô hình fuzzing cổ điển
Lệnh và phản hồi—» Debugger £ Lệnh và phản hồi
Trang 30Mô hinh nảy ' gồm có 3 thành phần cơ bản:
« Target software: chinh la phan mém ma ban can kiểm tra
© Fuzzer: tao ra cac dit ligu test giti toi debugger, liên tục yêu càu kiểm tra xem phan mềm có hoạt động bình thường hay không Nếu phần mềm đỗ vỡ, thi yêu cầu
debugger khởi động lại phân mềm và ghi lại thông báo lỗi Fuzzer và Debugger
giao tiếp với nhau qua IPC (Interprocess communicaton) theo một giao thức nhất
định
»_ Debugger: tương tác trực tiếp với phản mềm, nhận các lệnh và gửi phản hỏi tới
fuzzer Cũng phải nói thêm rằng, ngoải Autodafe, debugger ctia cae fuzzer hoat
động theo nguyên tắc một chiều, không có có thêm vỏng phản hồi tir software dé
Xem test case nảo nên được ưu tiên tạo tiếp sau
Mô hình trên có thê được biểu điện gọn hơn theo hình dưới đây:
Fuzzer &——Dữliu——y Debugger Phần mềm
'Hình 14: Mô hình Fuzzing thu gon
Phần mêm mục tiêu hoạt động dưới sự giảm sát của Debugger, nó được biểu diễn như
lả một khỏi năm trong Debugger Cả 2 khỏi Debugger va phân mềm đều trao đổi dữ
liệu với Fuzzer
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 30
Trang 31Hình 15: Lưu đỗ hoạt động của quá trình Fuzzing
2.4 Phân loại phương pháp Fuzzing
Theo phuong phap sinh dit ligu, Fuzzer duge chia lam hai loai lon la intelligent fuzzing
va dumb fuzzing!*] Dumb fuzzing la phuong phap sinh dit ligu dé fuzz dua vao mau dit
liệu hợp lê cỏ sẵn, có thể lả một tệp tin đúng chuẩn hoặc một gói tín bắt được, rồi sửa
đổi ngẫu nhiên và chuyên cho chương trình /w/elligent fizzing là phương pháp sinh ra
các bộ đữ liệu mới bằng cách mô phỏng lại giao thức mạng hoặc định đạng tép Dumb fuzzing có ưu điểm là đơn giản, không đòi hỏi nhiều kiến thức vẻ các định dạng file,
các protoeol, tuy nhiên thời gian thực thi cỏ thể rất lâu Intelligent fuzzing thì ngược
lại, đòi hỏi các bạn phải có kiến thức về mục tiêu cân fuzz, khá phức tạp; ưu điểm nỗi
bật là hiệu suất hon han dumb fuzzing
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 31
Trang 32Tuy nhiên, bằng cách chia nhỏ hai phương pháp trên, phương pháp fuzzing có thể được
chia thành 5 loại nhỏ hơn như sau
«_ Sử dụng các test case được sinh trước (Pregenerated Test Cases) Theo cách
này người thực hiện fuzzing sẽ sử dụng những bộ dữ liệu đặc biệt, có định, được
lập trình cứng, tạo ra những bộ đữ liệu này cần nhiêu công sức Một khi tất cả các
bộ dữ liêu đã được gửi đi, quả trình fuzzing cũng kết thúc Điểm bất lợi của phương
pháp này lả khả năng hạn chế trong tân dụng lại dữ liệu cho các dự án fuzzing khác
sau nay
« _ Sinh dữ liệu ngẫu nhiên (Random) Dữ liệu được sinh ra ngau nhién, liên tục và gửi đi, không theo giao thức nảo, Cách này không hiệu quả, mặc dù vậy thật ngạc
nhiên là đã có những lỗi cực kỳ quan trọng đã được phát hiện bởi phương pháp nảy
« _ Kiểm tra thủ công bằng thay đổi giao thức (Manual Protocol Mutation
'Testing) Theo phương pháp này, không có một chương trình fuzZer tự động nào
Thực tế người nghiên cửu chính lả fuzzer, họ chăn các giao thức, sửa đổi ngau
nhiên và chuyên đi Cách này được dùng chủ yêu cho các ứng dụng Web
« _ Vét cạn (Mutation-based hay là Brute Force Testing) Phuong pháp này bắt đầu
từ một mâu đữ liệu hợp lệ, sửa từng byte, word, dword, hay xâu trong đó Phương
pháp nảy có ưu điểm là không tốn công nghiên cứu giao thức vả định dạng tệp, thời
gian để xây dựng công cụ fuzzer nhanh Tuy nhiên mức độ bao trùm lệnh tủy thuộc việc chọn gói tin hay tệp mẫu ban đâu Phần lớn các giao thức và định dạng tệp khá
phức tạp, do vậy số lượng mẫu ban đầu phải tương đổi lớn đề bao phủ hết các khả
năng kiêm thử FileFuzz và notSPIKEfIe là hai fuzzer mã nguồn mở sử dụng kỹ
thuật này
« _ Tự động sinh dữ liệu cho giao thức (Automatic Protocol Generation Testing)
Đây là phương pháp cao cập nhất hiện nay Thay vì tạo ra các bộ dữ liệu cứng đẻ
kiểm tra, người nghiên cứu sẽ xây dựng một ngữ pháp để mô tả giao thức sẽ hoạt
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 32
Trang 33động thế nảo, các đơn vị dữ liệu cơ bản, vả trình tự hoạt động của giao thức Cong
việc nảy đòi hỏi thời gian và công sức nghiên cửu, nhưng công việc sau đó là dành
cho fuzzer Thảnh công hay không là phụ thuộc vảo việc người nghiên cứu có chỉ ra
được khu vực nảo có khã năng lỗi cao của giao thức hay không SPIKE và
SPIKEiIIe là những fuzzer loại nảy Hạn ché của phương pháp nảy là mất thời gian
để tìm hiểu vả xây dựng ngữ pháp cho du an fuzzing
2.5 Phân loại Fuzzer
2.5.1 Fuzzer cục bộ (Local fuzzer)
Phan mém mục tiêu ở đây lả phần mẻm chạy trên củng máy tỉnh với fuzzer
« Command-line fuzzer: Khi một ứng dụng bắt đầu chạy, nỏ thường được người
dùng truyền cho một vải tham số đầu gọi là command-line (tham số dòng lệnh) Ví
dụ: khi người dùng click đúp lên một file doc, Microsoft Word sẽ được thực thi với tham số là đường dẫn đến tệp văn bản mả người dùng, Euzzer loại nảy sẽ sinh ra
những eommand line đặc biệt dài, hoặc chửa những ký tự đặc biệt rồi truyền cho
ứng dụng lúc bắt đầu thực thú Lỗi thuộc loại nảy rất ít và không nguy hiểm
« Environment variable fuzzer: Tuong tu nhu command-line fuzzer, các biển môi
trường cũng được hệ điều hành cung cấp cho ứng dụng đề nó biết thông tin vẻ môi trưởng làm việc hiện tại, thí dụ như đường dẫn thư mục hệ thông, đường dan thu mục lam việc, Lỗi tràn bộ đệm loại này rất hiểm và không nguy hiểm Các
fuzzer dién hinh la Sharefuzz va iFuzz
+ File format fuzzer: Mot sd luong lon img dụng sử dụng tệp đề lưu trữ dữ liêu Tất
cả đều cỏ thẻ gặp nguy hiểm khi khi dữ liệu không được xử lý đúng đắn Day
chính là mục tiêu của fuzzer loại này Các công cụ fuzz tệp lả FileFuzZ,
notSPIKEfile, SPIKEfile, PAIMEIfilefuzz
wy ø
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B
Trang 342.5.2 Fuzzer từ xa (Remote fuzzer) -
Đây là trường hợp khi fuzzer và phẩn mềm mục tiêu không củng nằm trên một máy, vi
dụ như khi thực thi fuzzing mét may chi SMTP, POP3,
»_ Fuzzer giao thức mạng: Fuzzer các giao thức mạng có thê chia thành hai loại:
Fuzz các giao thức đơn giản: thường có hoặc không có chẻ độ xác thực, dữ
liêu hay lệnh thường dưới dang văn bản đọc được, không có các biên chứa chiêu
dài hay checksum của dữ liệu FTP, SMTP là các giao thức loại này
Fuzz các giao thức phức tạp: thường gồm dữ liệu nhị phân củng với các xâu
kết hợp lại Cơ chế xác thực thường yêu câu một vài hình thức mã hỏa vả các
trạng thái giao thức phức tạp
«_ Fuzzer ứng dụng Web: Ứng dụng web đang dân trở nên thông dụng vả thuận tiên cho người dùng trong việc truy cập các dịch vụ đầu cuối như email, thanh toán trực tuyên Với sự phát triển của Web 2.0, các ứng dụng truyền thông chạy trên PC dang
dần chuyền sang Web
Khi ñuzzing các ứng dụng Web, nhà nghiên cứu chủ yêu tìm kiếm các lỗi đặc trưng
như SQL injeetion, Cross Site Scripting (XSS), Những gì cản thiết của fuzzer lả
khả năng giao tiếp theo giao thức HTTP, thu nhận dữ liệu phản hỏi và phân tích
Một vai fuzzer loại nay la: WebSearab, SPI Fuzzer va Codenomicon HTTP Test
Suite
+ Fuzzer trinh duyét web: Thuc chat day là một hình thức fuzz định dạng tệp, mục tiêu là các trình duyệt web Do tỉnh thông dụng của của các ứng dụng Web nên
người ta chia nó ra thành một loại riêng Fuzzer trình duyệt web không chỉ hạn chế
ở các thẻ HTML, mà cỏn tìm lỗi trong việc phân tích các thẻ CSS, các thành phân
COM COMRaider la céng cụ xuất sắc trong việc fuzzing các thành phản
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 34
Trang 35COM/ActiveX Các công cu fuzzing loai nay phải kế đến mangleme, DOM-Hanoi,
Hamachi, CSSDIE, COMRaider
2.5.3 Fuzzer trong bộ nhớ (In-memory fuzzer)
Đôi khi trong quá trình kiểm tra cỏ một vải khỏ khăn làm cản trở việc fuzzing Thí dụ
cân Ñuzz một trường của giao thức, nhưng trường nảy lại được mã hoa một cách phức
tạp trong gói tin mã việc mô phỏng gỏi tin như vậy khá phức tạp, người nghiên cứu
muốn bỏ qua công đoạn mã hóa và giải ma, do 1 hic can dén In-Memory fuzzer Y
tưởng của loại Ñuzzer nay kha don giản, nhưng việc cài đặt không đơn giản chút nào Một cách tiếp cận lả tạm dừng tiến trình đích cần fuzzing lại, chèn dữ liệu vào đúng
hảm cân kiểm tra, khôi phục lại trạng thái của tiền trình với dữ liệu mới, lặp đi lặp lại
đến khí hết bộ dữ liệu
uzzer loại này có những ưu điểm điểm sau:
« _ Tốc độ fuzzing cao: Dữ liệu chèn trực tiếp vào bộ nhớ, những đoạn chương trình
không cần thiết được bỏ qua nên tốc độ tăng đảng kẻ nhất là với các giao thức
mạng
+ Nhanh đến đoạn chương trình cần kiểm tra: Đôi khí một vải giao thức cân thực
hiện thao tác nén hoặc mã hóa hoặc tính toan checksum Thay vi tao ra fuzzer phai
sinh đữ liệu chính xác đề vượt qua được các thao tác trên, In-Memory cỏ thể chèn
trực tiếp nội dung cần fuzz ngay sau khi chương trình giải nén, giải mã hoặc thực
hiện tỉnh checksum
Nhược điểm của loại fuzzer nảy cũng không ít
© Dy đoán sai: Bởi vi đữ liệu thô được chèn trực tiếp vảo bộ nhớ của ứng dụng, có
thể có trong thực tế điều đó không bao giờ xảy ra so với truyền dữ liệu vào chương trình một cách chỉnh thống,
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 35
Trang 36« _ Khó mô phỏng lại: Trong trường hợp phát hiện lỗi, người nghiên cửu cũng phải
bằng cách nảo đỏ mô phỏng được trường hợp xây ra lỗi trong thực thế, không phải
trực tiếp chèn vào bộ nhớ, quá trình này khả tôn thời gian vả phúc tap
«_ Độ phức tạp cao: Phương pháp nảy cực kỳ phức tạp đề cài đặt thành chương trình
hoản chỉnh
2.5.4 Fuzzing framework
Fuzzing framework thuc chat la nhiig fuzzer rat chung chung, hodc cac ther vién hé trợ việc biểu diễn dữ liệu cho nhiều loại ứng dụng, Thường Fuzzing framework bao
gồm thư viện đề sinh ra các xâu hoặc giả trị thường gây lỗi săn cho chương trình
fuzzer Đông thời nó cũng gồm các công cụ hồ trợ cho việc truyền dữ liệu qua mạng
hoặc ghỉ vào tệp Một số fuzzing framework cé sin nhu: SPIKE, Peach,
Fuzzing Framework cé uu diem sau
« _ Tính tái sử dụng cao: Mot fuzzing framework thue su sé co thé duoc ding cho
nhiều ứng dụng đa dạng khác nhau
« _ Phát triển bởi cả cộng đồng: Một dự án với tính mở sẽ được chảo đỏn bởi công
đồng, trong trường hợp này mỗi giao thức, mỗi định dạng sẽ được công đông phát triển và bồ sung vào framework cho hoàn thiện hơn, đa dạng hơn
Nhược điểm của Fuzzing Framework :
« _ Phức tạp cho người sử dung: Khó khăn này chỉ là bước đầu khi ta phải tìm hiểu
và sử dụng được cả một framework lớn, có quá nhiều tính năng,
5 _ Thời gian phát triển: Việc thiết kế và phát triển một Fuzzing famework so với
thiết kế một ứng dụng fuzzing cho những giao thức cụ thể đỏi hỏi nhiều thời gian
và công sức hơn
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 36
Trang 372.6 Các bước của Fuzzing
Quá trình fuzzing phụ thuộc vào nhiều yếu tổ, do đó cách tiếp cận có thể rất khác nhau, hoàn toản phụ thuộc vào tmg dụng cân kiêm tra, kĩ năng của người nghiên cứu Tuy
vây có thể chia lâm các bước cơ bản Í? sau
@
`
1 Xác định phần mềm và dữ liệu đầu vào
Gan như tật cả các lỗi khai thác được đều do ứng dụng chấp nhận dữ
liêu vào của người dùng và xử lý má không kiểm tra đây đủ tính đúng
đắn của dữ liệu Liệt kê hết được các khả năng, đầu vào của dữ liệu là nhân tổ quyết định sự thành công của fuzzing
2 Sinh dữ liệu fuzing
Khi đã xác định được đầu vảo, việc quyết định sử dụng intelligent
fuzzing hay dumb fuzzing 1a tủy thuộc vào mục tiêu và định dạng dữ liệu Quả trinh sinh nảy nên được thực hiên tự động, mang tính kinh
nghiệm của người phát triển các bộ sinh dữ liệu
3 Gửi dữ liệu cho ứng dung
Quả trình nảy có thể thực hiện bằng tay hay tự đông, có thẻ lả tự động gửi gói ti đến giao thức mạng cân fuzz, hoặc mở một file Tuy nhiên
việc nảy nêu thực hiện tự động được là tốt nhật
4 Theo dõi lỗi và phân tích
Trong bước này, đòi hỏi các kĩ thuật giám sát các hành vi của phản mềm
khi xử lý dữ liệu Khi lỗi được phát hiện, tủy theo mức độ mả ta có thể
danh giá được khả năng bị khai thác của lỗi, càng dễ khai thác thì càng,
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 37
Trang 38nguy hiểm Thêm vào đó, ghi log trong quả trình fuzzing là một yêu cầu
bat buộc đề tìm ra medule gây lỗi của phản mem
2.7 Hạn chế của Fuzzing
«+ Các lỗi logic: Một vài ứng dụng cân những quyên đặc biệt của user mới có thẻ thực thi các chức năng nảo đó Thí dụ hệ thông quản lý công việc trực tuyên, cho phép
người đủng truy cập từ xa thông qua trinh duyệt Những người dùng đặc biệt, chẳng,
han quan tri, có quyền truy nhập đến những chắc năng như thêm/xóa công việc,
trong khi người dùng thông thường chỉ cỏ quyền xem Lúc đỏ, Fuzzer không thẻ
nảo biết được khu vực nảo, tính năng nảo có thê truy cập được bởi người quản trị
Việc cài đặt ứng dụng fuzzer hiểu được điều nảy là hoàn toàn có thê song sẽ cực kỳ phức tạp
« _ Hiệu quả không cao khi có ít thông tin về mục tiêu: Đối với một FuzZer, khi cỏ
rat ít thông tin vẻ mục tiêu, chương trình sẽ không thê làm gì hơn được ngoài việc
gửi đữ liệu đến Thí dụ chúng ta cản fuzzing một giao thức nảo đỏ và đầu tiên cân
đăng nhập đề cỏ thê tiếp tục fuzz các lệnh khác, nhưng nêu không có đủ thông tin
để biết liệu quá trình đăng nhập có thành công hay không, cũng như không biết liệu
câu lệnh gửi đi có đến được được đoạn chương trình ứng dụng xử lý lệnh đó không,
phạm vị fuzzing sẽ hạn chế đi rất nhiều
« _ Các lỗi về hư hỏng bộ nhớ: Việc bộ nhớ bị phá hủy bởi dữ liệu fuzz thường được
ghi nhận bởi các ngoại lệ (exeeption), tuy vậy nêu ứng dụng bắt vả xử lý các ngoại
lệ cân thận và không có trình gỡ rồi nào gắn vào ứng dụng, sẽ rất khó đẻ fuzzer phát
hiện được có lôi hay không
»_ Lỗi đa cấp: Khai thác một hệ thông thông thường không chỉ tân công vào một
điểm yêu là đủ, có thẻ cần đến sự kết hợp của nhiều lỗi lại Fuzzing thường chỉ hữu ích khi phát hiện một điểm yêu riêng biệt chử không có khả năng liên tiếp tân công, một loạt các lỗi đẻ đạt được mục đích cudi cing
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 38
Trang 392.8 Các van dé trong fuzzing
Đây là một trong những vẫn để khá gai góc trong fuzzing BS sinh dữ liệu tốt phải đảm
bảo dữ liêu sinh ra phải bao trùm được các khả năng của đầu vào Nêu cỏ quá nhiều dữ liệu thừa được sinh ra, sẽ ảnh hưởng không tốt tới hiệu năng fuzzing Điều này cỏ thể được mình chứng qua phương pháp dump 22mg
Hiện nay, cũng đã có một số phương pháp nhằm tăng hiệu quả trong sinh dữ liệu
ñuzzing Sau đây, xin giới thiệu hai phương pháp khá hay
a Phương pháp sử dụng cơ chế phản hồi từ debugger
Hinh 16: Fuzzing với cơ chế phân hỗi từ đebugger
Trong mô hình fuzzing cô điền, phản hỏi từ debugger về fuzzer chỉ đơn thuân là thông
báo về tình trạng của phần mềm mục tiêu sau mỗi lần lặp fuzzing, không hẻ cỏ thông
tin kèm theo nảo hỗ trợ việc sinh dữ liệu hiệu quả
Học viên thực hiện: Lê Đức -inh Lớp ITIBMTTT Khóa học 2011B 39
Trang 40Cơ chế sử dụng phản hỏi tử debugger này nảy sinh ra từ nhận xét: “việc sinh ra các test case cho tất cả các trường của một file format, một protocol là không cân thiết" Bởi vì
có những thành phân đữ liệu có thể được coi là "vô hại"; nhưng cũng có những thành phần lại được đưa vào xử lý bởi những hàm "khả nguy hiểm" như: strepyQ prinfO
Autodafẻ là một fuzzer có cách xử lý khả thông minh khi lợi dụng điều này Các thành
phản dữ liêu được Autodafe coi là các marker, với các trọng só tương ứng Trọng số của marker sẽ tăng lên khi bị phát hiện rằng nó đã được truyền tới hàm API nguy hiểm Marker vi trong số cao hơn sẽ được xét thêm mức ưu tiên và fuzz trước Khi đebugger phát hiện ra các lõi, nó liên thông bảo cho fuzzer, test case cũng sẽ được lưu lại Bang
việc xét mức tru tiên các biến cỏ thẻ fuzz và bỏ qua các trường hợp không bao giờ được
truyền tới hàm API nguy hiểm, phân dữ liêu fuzzing có thể giảm khá nhiều
b _ Phương pháp sử dụng thực thỉ hình thức (symbolic execution)
Thực thi hình thức là thuật ngữ dùng để chỉ việc phân tích chương trình bằng việc theo
đối các kỉ hiệu của biển hơn sử dụng các giả trị thực của nó
Thực thi hình thức có thể được dùng đề suy ra tất cả các đâu vào mả chương trình s
nhận Ta có thẻ thấy điều nảy qua vỉ dụ sau đây:
hạn gọi là s (không nằm trong các biên của chương trình), sẽ được dùng với liên kết
"OK" Nếu chương trình được thực thi một cách hình thức, một biến đặc biệt,