1. Trang chủ
  2. » Luận Văn - Báo Cáo

Luận văn kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ fuzzing phân tán

99 1 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Xây dựng hệ thống fuzzing trình duyệt
Tác giả Lê Đức Anh
Người hướng dẫn PGS.TS Huỳnh Quyết Thắng
Trường học Đại học Bách Khoa Hà Nội
Chuyên ngành Công nghệ Thông tin
Thể loại luận văn
Năm xuất bản 2013
Thành phố Hà Nội
Định dạng
Số trang 99
Dung lượng 4,96 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

LỜ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 2

LỜ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 3

B 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 6

DANH 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 7

Biê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 9

A 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 10

thang 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 11

Stuxnet 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 12

Vấ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 13

L6 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 14

CHUONG I: CO SO LY THUYET CHUNG

Trang 15

1.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 17

Lỗ 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 18

Toả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 19

void 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 22

int 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 23

hồ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 26

Mô 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 27

2.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 28

Cá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 29

Tiế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 30

Mô 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 31

Hì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 32

Tuy 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 34

2.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 35

COM/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 37

2.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 38

nguy 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 39

2.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 40

Cơ 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,

Ngày đăng: 09/06/2025, 11:40

HÌNH ẢNH LIÊN QUAN

Hình  1:  Thống  kê  sâu  Conficker  (Nguén:  Bkis) - Luận văn kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ fuzzing phân tán
nh 1: Thống kê sâu Conficker (Nguén: Bkis) (Trang 10)
Bảng  giới  thiệu  một  số  hàm  format  trong  C/C++  và  tham  số  format  tương  ứng - Luận văn kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ fuzzing phân tán
ng giới thiệu một số hàm format trong C/C++ và tham số format tương ứng (Trang 21)
Hình  8:  Quét  các  dịch  vụ  dang  chay  voi  Nmap - Luận văn kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ fuzzing phân tán
nh 8: Quét các dịch vụ dang chay voi Nmap (Trang 23)
Hình  10:  Kiếm  thử  đâm  xuyên  với  Metasploit - Luận văn kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ fuzzing phân tán
nh 10: Kiếm thử đâm xuyên với Metasploit (Trang 25)
Hình  15:  Lưu  đỗ  hoạt  động  của  quá  trình  Fuzzing. - Luận văn kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ fuzzing phân tán
nh 15: Lưu đỗ hoạt động của quá trình Fuzzing (Trang 31)
Hỡnh  dưới  đõy  minh  họa  một  cỏch  phõn  tỏn  xử  lý  trong  bài  toỏn  ủizzing  với  một  ủizZer - Luận văn kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ fuzzing phân tán
nh dưới đõy minh họa một cỏch phõn tỏn xử lý trong bài toỏn ủizzing với một ủizZer (Trang 42)
Hình  21:  Trang  HTML  được  hiển  thị  trên  trinh  duyét  Internet  Explorer  10 - Luận văn kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ fuzzing phân tán
nh 21: Trang HTML được hiển thị trên trinh duyét Internet Explorer 10 (Trang 48)
Hình  24: Số  lỗ  hỗng  trình  duyệt  trong  giai  đoạn  2007-2011 - Luận văn kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ fuzzing phân tán
nh 24: Số lỗ hỗng trình duyệt trong giai đoạn 2007-2011 (Trang 51)
Hình  26:  Mô  hình  fuzzing  không  cần  đebugger - Luận văn kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ fuzzing phân tán
nh 26: Mô hình fuzzing không cần đebugger (Trang 53)
Hình  27:  M6  hinh fuzzing  không  có  debugger  &  server  riéng - Luận văn kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ fuzzing phân tán
nh 27: M6 hinh fuzzing không có debugger & server riéng (Trang 54)
Hình  31:  Các  bước  hoạt  động  trong  LangFuzz - Luận văn kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ fuzzing phân tán
nh 31: Các bước hoạt động trong LangFuzz (Trang 60)
Hình  32:  Các  bước  trong  xây  dựng  hệ  thông - Luận văn kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ fuzzing phân tán
nh 32: Các bước trong xây dựng hệ thông (Trang 61)
Hình  37:  Các  bước  của  quá  trình  biên  dich - Luận văn kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ fuzzing phân tán
nh 37: Các bước của quá trình biên dich (Trang 69)
Hình  44:  Biên  dịch  dữ liệu  zBNE - Luận văn kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ fuzzing phân tán
nh 44: Biên dịch dữ liệu zBNE (Trang 85)
Hình  47:  Quá  trình  fuzzing  ở  phía  agent - Luận văn kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ fuzzing phân tán
nh 47: Quá trình fuzzing ở phía agent (Trang 86)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm