Tải bản đầy đủ (.doc) (38 trang)

tìm hiểu, phân tích kỹ thuật buffer overflow

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (573.75 KB, 38 trang )

Đồ án An ninh mạng Module 17: Buffer Overflow
LỜI MỞ ĐẦU
Ngày nay, khi Internet được phổ biến rộng rãi, các tổ chức cá nhân đều có nhu
cầu giới thiệu thông tin của mình trên xa lộ thông tin cũng như thực hiện các phiên
giao dịch trực tuyến. Vấn đề nảy sinh là khi phạm vi ứng dụng của các dịch vụ trên
Internet càng mở rộng thì khả năng xuất hiện lỗi và bị tấn công càng cao, trở thành
đối tượng cho nhiều người tấn công với các mục đích khác nhau.
Cùng với sự phát triển không ngừng của Internet và các dịch vụ trên Internet,
số lượng các vụ tấn công trên Internet cũng tăng theo cấp số nhân. Trong khi các
phương tiện thông tin đại chúng ngày càng nhắc nhiều đến những khả năng truy
nhập thông tin của Internet, thì các tài liệu chuyên môn bắt đầu đề cập đến nhiều
vấn đề bảo đảm và an toàn dữ liệu cho các máy tính được kết nối vào mạng
Internet.
Những vụ tấn công nhằm vào tất cả các máy tính có mặt trên Internet, các
máy tính của công ty lớn như AT&T, IBM, các trường đại học, các cơ quan nhà
nước, các tổ chức quan sự, nhà băng Một số vụ tấn công có quy mô khổng lồ (có
tới 100.000 máy tính bị tấn công ). Hơn nữa, nhưng con số này chỉ là phần nổi của
tảng băng. Một phần rất lớn các vụ tấn công không được thông báo, vì nhiều lý do,
trong đó có thể kể đến nỗi lo bị mất uy tín, hoặc đơn giản những người quản trị hệ
thông không hay biết những cuộc tấn công đang nhằm vào hệ thông của họ.
Với những công cụ tự động tìm lỗi hổng tuy giúp rất nhiều cho những nhà
lập trình web nhưng vẫn không thể ngăn chặn toàn bộ vì công nghệ web đang phát
triển nhanh chóng (chủ yếu chú trọng đến yếu tố thẩm mĩ, yếu tố tốc độ ) nên dẫn
đến nhiều khuyết điểm mới phát sinh. Sự tấn công không nằm trong khuổn khổ vài
kĩ thuật đã phát hiện, mà linh động và tăng lên tùy vào những sai sót của nhà quản
trị hệ thống cũng như của những người lập trình.
Đồ án được thực hiện với mục đích tìm hiểu, phân tích kỹ thuật mà hacker
thường hay sự dụng đó là kỹ thuật Buffer Overflow.
MỤC LỤC
Lớp CCMM03A Trang i
Đồ án An ninh mạng Module 17: Buffer Overflow


LỜI MỞ ĐẦU Error: Reference source not found
DANH MỤC HÌNH ẢNH Error: Reference source not found
DANH MỤC CÁC TỪ VIẾT TẮT Error: Reference source not found
Lớp CCMM03A Trang ii
Đồ án An ninh mạng Module 17: Buffer Overflow
DANH MỤC HÌNH ẢNH
CHƯƠNG 1:
CHƯƠNG 2:

Lớp CCMM03A Trang iii
Đồ án An ninh mạng Module 17: Buffer Overflow
DANH MỤC CÁC TỪ VIẾT TẮT
Từ viết tắt Tên tiếng Anh Tên tiếng Việt
CERT
Computer Emegency
Response Team
Đội cấp cứu máy tính
BKIS
Bach Khoa Internet
Security
Trung tâm an ninh mạng
Bách Khoa
HTTP
Hypertext Transfer
Protocol
Giao thức truyền tải siêu
văn bản
Lớp CCMM03A Trang iv
Đồ án An ninh mạng Module 17: Buffer Overflow
CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN VỀ AN NINH MẠNG

1.2 TÌNH HÌNH AN NINH MẠNG THẾ GIỚI:
Theo số liệu của CERT (Computer Emegency Response Team - "Đội cấp cứu
máy tính"), số lượng các vụ tấn công trên Internet được thông báo cho tổ chức này
là ít hơn 200 vào năm 1989, khoảng 400 vào năm 1991, 1400 vào năm 1993, và
2241 vào năm 1994, và năm 2001 là 5315 vụ.
Những vụ tấn công này nhằm vào tất cả các máy tính có mặt trên Internet, các
máy tính của tất cả các công ty lớn như AT&T, IBM, các trường đại học, các cơ
quan nhà nước, các tổ chức quân sự, nhà băng Một số vụ tấn công có quy mô
khổng lồ (có tới 100.000 máy tính bị tấn công). Hơn nữa, những con số này chỉ là
phần nổi của tảng băng. Một phần rất lớn các vụ tấn công không được thông báo, vì
nhiều lý do, trong đó có thể kể đến nỗi lo bị mất uy tín, hoặc đơn giản những người
quản trị hệ thống không hay biết những cuộc tấn công đang nhằm vào hệ thống của
họ.
Điển hình là cuộc tấn công vào phần mềm thương mại của IBM tháng 3/2001,
hai hacker đã tìm thấy lỗ hổng trên ứng dụng mà bất cứ ai với một trình duyệt Web
cũng có thể lấy tài khoản của người dùng, thậm chí cả người quản trị.
Không chỉ số lượng các cuộc tấn công tăng lên nhanh chóng, mà các phương
pháp tấn công ngày càng tinh vi và có tổ chức. Mặt khác, việc quản trị các hệ thống
mạng đòi hỏi nhà quản trị hệ thống có kiến thức và kinh nghiệm về hệ thống mạng
chắc chắn, do đó sự yếu kém trong quản lý sẽ tạo nhiều điều kiện cho các hacker
khai thác.
Cũng theo CERT, những cuộc tấn công thời kỳ 1988-1989 chủ yếu là đoán tên
người sử dụng-mật khẩu (UserID/password) hoặc sử dụng một số lỗi của các
chương trình và hệ điều hành (security hole) làm vô hiệu hệ thống bảo vệ, tuy
nhiên các cuộc tấn công vào thời gian gần đây còn bao gồm cả các thao tác như giả
mạo địa chỉ IP, theo dõi thông tin truyền qua mạng, chiếm các phiên làm việc từ xa
(telnet hoặc rlogin), cài trojan hay worm để kiểm soát hay điều khiển máy tính…vì
Lớp CCMM03A Trang 1
Đồ án An ninh mạng Module 17: Buffer Overflow
thế, nhu cầu bảo vệ thông tin trên Internet là cần thiết nhằm mục đích bảo vệ dữ

liệu, bảo vệ thông tin người dùng và bảo vệ hệ thống.
Khi nói đến vấn đề bảo mật, hầu hết các chuyên gia bảo mật đều chú trọng đến
sự an toàn của hệ thống mạng và hệ điều hành. Để bảo vệ cho hệ thống, phương
pháp thường được chọn là sử dụng firewall. Tuy nhiên, theo tuyên bố của CSI/FBI:
78% nơi bị hại có sử dụng firewall và 59% thì bị tấn công thông qua Internet, cụ
thể hơn là theo báo cáo của CSI/FBI Computer Crime và Security Survey thì tổng
số thiệt hại do những ứng dụng Web bị tấn công từ năm 1997 đến năm 2000 là 626
triệu đôla Mỹ.
1.2 TÌNH HÌNH AN NINH MẠNG TẠI VIỆT NAM:
Khi tốc độ ứng dụng công nghệ thông tin và phổ cập Internet được đẩy nhanh,
đời sống thực ngày càng gần như phụ thuộc vào đời sống ảo trên mạng thì vấn đề
an ninh mạng càng cần được coi trọng và đặt ở tầm an ninh quốc gia.
Môi trường internet tại Việt Nam hiện có nhiều yếu tố gây mất an toàn như
không có cơ chế định danh người dùng, khó kiểm soát các giao tiếp và thiếu sự
phối hợp, giám sát giữa các tổ chức quản lý internet. Điều này dẫn tới sự bùng nổ
của các hành vi: lấy cắp tài khoản, viết và phát tán virus máy tính, tấn công
website…, mang lại nhiều nguy cơ tiềm tàng cho an ninh mạng
1.2.0 Thiếu nhận thức, nhân lực và đầu tư:
An ninh mạng là một vấn đề mới đối với đa số người sử dụng máy tính.
Những công ty lập trình website cũng chưa ý thức đầy đủ về vấn đề này. Ở công ty
nước ngoài, mỗi lập trình viên sau khi tuyển dụng phải qua một khoá đào tạo lập
trình đặc biệt về an ninh mạng. Tìm được công ty thiết kế website ở Việt Nam làm
điều này rất khó. Việc đầu tư thời gian và công sức vào bảo mật có thể làm chậm
tiến độ triển khai dự án, hiệu quả lại khó kiểm chứng. Tuy đã được các chuyên gia
máy tính liên tục cảnh báo nhưng nhận thức về nguy cơ, tính rủi ro và hậu quả của
tình trạng mất an ninh mạng vẫn chưa được quan tâm tìm hiểu đúng mức. Tình
trạng lơ là, mất cảnh giác đối với nguy cơ virus tấn công các trang web xảy ra khá
Lớp CCMM03A Trang 2
Đồ án An ninh mạng Module 17: Buffer Overflow
phổ biến trong giới quản trị website, thậm chí ngay cả đối với website của các

doanh nghiệp CNTT.
Rất nhiều website tồn tại các lỗ hổng có thể trở thành mục tiêu cho tin tặc,
trong đó có những website có nội dung hết sức quan trọng liên quan đến chính phủ
điện tử, thương mại điện tử, doanh nghiệp điện tử… Theo thống kê của Trung tâm
An ninh mạng ĐHBK Hà Nội (BKIS) thì có khoảng 400 website luôn đặt trong tình
trạng nguy hiểm, trong đó có website của các cơ quan nhà nước, các công ty và
ngân hàng. Trung bình mỗi tháng, trung tâm BKIS phát hiện trên dưới hai chục
trang web bị hacker tấn công, trong đó có cả trang web của những công ty tên tuổi
như Viettel, VDC hay MobiFone. Bên cạnh đó, các doanh nghiệp đang phải đương
đầu với sự thiếu hụt về nhân lực CNTT và hiểu biết về tội phạm mạng.
Hiện nay, phần lớn các doanh nghiệp Việt Nam chưa có sự đầu tư đúng mức
về công nghệ bảo mật cũng như về con người do chi phí cho lĩnh vực này khá cao.
BKIS cho biết, các lổ hổng bảo mật trên các trang web của Việt Nam phần lớn là
do các công ty viết phần mềm chưa quan tâm đến an toàn hệ thống và đầu tư cho an
ninh mạng chưa đủ ngưỡng. Người quản trị mạng chưa làm tốt công việc của mình:
đặt mật khẩu yếu, mở nhiều dịch vụ không cần thiết; các doanh nghiệp và tổ chức ở
Việt Nam thường đầu tư dưới 10% chi phí CNTT cho bảo mật - một tỷ lệ dưới mức
đảm bảo an toàn cho hệ thống thông tin.
1.2.0 Tình hình tội phạm:
“An toàn mạng” ngày nay không chỉ trong phạm vi khái niệm an ninh mạng
(network security) vốn dành cho những đối tượng chuyên nghiệp mà quan trọng
hơn là bảo vệ các ứng dụng trong hệ thống của doanh nghiệp. Phần lớn các doanh
nghiệp Việt Nam hiện chưa có hệ thống bảo mật dữ liệu chuyên nghiệp mà chủ yếu
chỉ trang bị vài hệ thống bảo vệ: tường lửa, phần mềm chống virus. Các chuyên gia
nhận định rằng: tình hình an ninh trên môi trường mạng ở Việt Nam đang ở tình thế
rất đáng ngại khi số lượng và mức độ các loại hình tội phạm ngày càng gia tăng.
Lớp CCMM03A Trang 3
Đồ án An ninh mạng Module 17: Buffer Overflow
Có thể chia tội phạm mạng ở Việt Nam thành 2 hai nhóm: tội phạm tấn công
trang web, các cơ sở dữ liệu và phát tán virus; và tội phạm lợi dụng môi trường

mạng để ăn cắp, tống tiền và tổ chức hoạt động phạm tội, như đánh bạc qua mạng,
ăn cắp và làm giả thẻ tín dụng, dùng internet để trộm cước viễn thông. Cả hai nhóm
tội phạm mạng này đều đang tăng cả về lượng và mức độ tác động. Thống kê của
BKIS cho thấy, đầu năm 2008, số lượng virus mới tăng hơn rất nhiều so với trước.
Tội phạm mạng ở Việt Nam hiện đã chuyển sang mục đích kiếm tiền chứ không
còn là thoả mãn niềm ham mê ghi điểm “thành tích” như trước.
Về mức độ tinh vi, các phương thức tội phạm mạng ở Việt Nam đang dần tiếp
cận với thế giới. Thế giới có tội phạm gì liên quan đến môi trường mạng thì cũng
nhanh chóng có ở Việt Nam. Mới đây, đơn vị chống tội phạm công nghệ cao (C15)
thuộc Tổng cục Cảnh sát đã phối hợp với cơ quan chống tội phạm mạng của Anh
bắt được một nhóm hacker Việt Nam ăn cắp mật khẩu thẻ tín dụng bán cho một tổ
chức tội phạm của Anh. Trước đó, C15 đã bắt được một đường dây hơn 10 sinh
viên ăn cắp thẻ tín dụng và làm giả thẻ tín dụng để rút tiền.
Trong khi đó, yếu tố chính góp phần làm cho tình hình an ninh mạng ở Việt
Nam thêm nghiêm trọng chính là hành lang pháp lý chưa đủ mạnh, hình phạt dành
cho tội phạm mạng còn nhẹ, chưa tương xứng với thiệt hại do hành vi phạm tội gây
ra nên chưa đạt mục đích trừng trị người phạm tội, giáo dục họ trở thành người có
ích cho xã hội và giáo dục người khác tôn trọng pháp luật, đấu tranh phòng, chống
tội phạm. Một bất cập nữa là các quy định liên quan đến tội phạm mạng quá chung
chung, không áp dụng được vào các hành vi cụ thể, nhất là các quy định về tội
phạm máy tính của bộ luật Hình sự. Các quy định thiếu rõ ràng làm cho các cơ
quan lúng túng trong việc xử lý.
1.2.0 Cần hoàn thiện qui định của pháp luật:
Nước ta nên theo xu hướng của thế giới khi quy định về những hành vi liên
quan tới tội phạm mạng: các quy định nên trung lập với công nghệ để có thể dễ
dàng áp dụng và ban hành các văn bản dưới luật điều chỉnh những hành vi này. Tội
Lớp CCMM03A Trang 4
Đồ án An ninh mạng Module 17: Buffer Overflow
phạm mạng có tốc độ phát triển nhanh như tốc độ phát triển của CNTT. Các quy
định của pháp luật luôn lạc hậu hơn so với những thay đổi trong môi trường CNTT.

Mặc dù các nhà làm luật đã sửa đổi, bổ sung các quy định pháp luật, nhưng việc
sửa đổi các quy định của luật nhất là Bộ luật Hình sự, Bộ luật Tố tụng Hình sự
không thể làm trong một sớm một chiều. Với những văn bản hướng dẫn, việc điều
chỉnh sẽ được thực hiện dễ dàng hơn.
1.2.0 Nâng cao nhận thức về an ninh mạng:
Hiện nay, nhận thức về nguy cơ, tính rủi ro và hậu quả của tình trạng mất an
ninh mạng trong xã hội ta chưa cao. Nhiều người vẫn coi hành vi xâm phạm an
ninh mạng chỉ là trò đùa ác ý, trong khi các hành vi này cần phải bị lên án và xử lý
nghiêm minh. Không chỉ trên phương diện công nghệ mà ở cả góc độ luật pháp,
vấn đề phòng chống tội phạm tin học cũng chưa đặt đúng tầm. Những gì đã diễn ra
cho thấy hiện nay chưa có biện pháp hữu hiệu đảm bảo an ninh mạng tại Việt Nam.
Tiện ích của mạng Internet thì đã rõ nhưng đi cùng với đó, các vấn đề tiêu cực
cũng liên tục phát sinh. Theo quy luật, người dân ngày càng quan tâm hơn đến an
ninh mạng. Vấn đề càng lúc càng nóng bỏng khi nguy cơ mất an toàn mạng hiện
hữu hơn bao giờ hết. Nhiệm vụ của mỗi cơ quan chức năng và người dân lúc này là
phải hiểu rõ lỗ hổng trên môi trường mạng để bịt kín, không để tội phạm mạng có
đất hoạt động.
1.2 CÁC KHÁI NIỆM VÀ THUẬT NGỮ:
1.3.0 Hacker:
Hacker là một thuật ngữ dùng để chuyên chỉ những kẻ phá hoại các hệ thống
mạng…Hacker thường là những chuyên gia về máy tính. Hacker không tạo ra các
kẽ hở chohệ thống, nhưng hacker lại là những người am hiểu về hệ điều hành, hệ
quản trị dữ liệu, các ngôn ngữ lập trình…
Họ sử dụng kiến thức của mình trong việc tìm tòi và khai thác các lỗ hổng của
hệ thống mạng. Một số hacker chỉ dừng lại việc phát hiện và thông báo lỗi tìm
được cho những nhà bảo mật hay người phát triển chương trình, họ được xem như
Lớp CCMM03A Trang 5
Đồ án An ninh mạng Module 17: Buffer Overflow
là WhiteHat (Hacker mũ trắng). Một số hacker dựa vào những lỗ hổng thực hiện
việc khai thác trái phép nhằm mục đích phá hoại hay mưu lợi riêng, những người

này bị xem như là BlackHat (Hacker mũ đen).
1.3.0 HTTP header:
HTTP header là phần đầu (header) của thông tin mà trình khách và trình chủ
gửi cho nhau. Những thông tin trình khách gửi cho trình chủ được gọi là HTTP
requests (yêu cầu) còn trình chủ gửi cho trình khách là HTTP responses (trả lời).
Thông thường, một HTTP header gồm nhiều dòng, mỗi dòng chứa tên tham số và
giá trị. Một số tham số có thể được dùng trong cả header yêu cầu và header trả lời,
còn số khác thì chỉ đuợc dùng riêng trong từng loại.
1.3.0 Session:
HTTP là giao thức hướng đối tượng tổng quát, phi trạng thái, nghĩa là HTTP
không lưu trữ trạng thái làm việc giữa trình duyệt với trình chủ. Sự thiếu sót này
gây khó khăn cho một số ứng dụng Web, bởi vì trình chủ không biết được trước đó
trình duyệt đã có những trạng thái nào. Vì thế, để giải quyết vấn đề này, ứng dụng
Web đưa ra một khái niệm phiên làm việc (Session). Còn SessionID là một chuỗi
để chứng thực phiên làm việc. Một số trình chủ sẽ cung cấp một SessionID cho
người dùng khi họ xem trang web trên trình chủ.
Để duy trì phiên làm việc thì sessionID thường được lưu vào :
 Biến trên URL
 Biến ẩn form
 Cookie
Phiên làm việc chỉ tồn tại trong một khoảng thời gian cho phép, thời gian này
được cấu hình qui định tại trình chủ hoặc bởi ứng dụng thực thi. Trình chủ sẽ tự
động giải phóng phiên làm việc để khôi phục lại tài nguyên của hệ thống.
1.3.0 Cookie:
Cookie là những phần dữ liệu nhỏ có cấu trúc được chia sẻ giữa trình chủ và
trình duyệt của người dùng.
Lớp CCMM03A Trang 6
Đồ án An ninh mạng Module 17: Buffer Overflow
Các cookie được lưu trữ dưới những file dữ liệu nhỏ dạng text, được ứng dụng
tạo ra để lưu trữ/truy tìm/nhận biết các thông tin về người dùng đã ghé thăm trang

Web và những vùng mà họ đi qua trong trang. Những thông tin này có thể bao gồm
tên/định danh người dùng, mật khẩu, sở thích, thói quen cookie được trình duyệt
của người dùng chấp nhận lưu trên đĩa cứng của máy mình, tuy nhiên không phải
lúc nào trình duyệt cũng hỗ trợ cookie, mà còn tùy thuộc vào người dùng có chấp
nhận chuyện lưu trữ đó hay không.
Ở những lần truy cập sau đến trang Web đó, ứng dụng có thể dùng lại những
thông tin trong cookie (như thông tin liên quan đến việc đăng nhập vào Yahoo
Messenger! ) mà người dùng không phải làm lại thao tác đăng nhập hay phải cung
cấp lại các thông tin khác.
Cookie được phân làm 2 loại secure/non-secure và persistent/non-persistent do
đó ta sẽ có 4 kiểu cookie là:
 Persistent và Secure
 Persistent và Non-Secure
 Non-Persistent và Secure
 Non-Persistent và Non-Secure
Persistent cookies được lưu trữ dưới dạng tập tin .txt (ví dụ trình duyệt
Netscape Navigator sẽ lưu các cookie thành một tập tin cookie.txt còn Internet
Explorer sẽ lưu thành nhiều tập tin *.txt trong đó mỗi tập tin là một cookie) trên
máy khách trong một khoản thời gian xác định.
Non-persistent cookie thì được lưu trữ trên bộ nhớ RAM của máy khách và sẽ
bị hủy khi đóng trang web hay nhận được lệnh hủy từ trang web.
Secure cookies chỉ có thể được gửi thông qua HTTPS (SSL).
Non-Secure cookie có thể được gửi bằng cả hai giao thức HTTPS hay HTTP.
Thực chất là đối với secure cookie thì trình chủ sẽ cung cấp chế độ truyền bảo mật.
Domain Flag Path Secure Expiration Name Value
Lớp CCMM03A Trang 7
Đồ án An ninh mạng Module 17: Buffer Overflow
www.redhat.
com
False / False

115402949
0
Apache
64.3.40.151.16
018996349247
480
Hình 1.1: Các thành phần của một cookie
 Domain: tên miền của trang Web đã tạo cookie (trong ví dụ trên là
www.redhat.com)
 Flag: mang giá trị TRUE/FALSE xác định các máy khác với cùng tên miền
có được truy xuất đến cookie hay không.
 Path: Phạm vi các địa chỉ có thể truy xuất cookie.Sercure: Mang giá trị
TRUE/FALSE xác định đây là một secure cookie hay không nghĩa là kết nối
có sử dụng SSL hay không.
 Expiration: Thời gian hết hạn của cookie, được tính bằng giây kể từ 00:00:00
giờ GMT ngày 01/01/1970. Nếu giá trị này không được thiết lập thì trình
duyệt sẽ hiểu đây là non-persistent cookie và chỉ lưu trong bộ nhớ RAM và
sẽ xóa nó khi trình duyệt bị đóng.
 Name: tên biến (trong trường hợp này là Apache).
 Value: Với cookie được tạo ở trên thì giá trị của Apache.
54.3.40.151.16018996349247480 và hết hạn là 27/07/2006, của tên miền

Set-Cookie:Apache="64.3.40.151.16018996349247480"; path="/";
domain="www.redhat.com"; path_spec; expires="2006-07-27
19:39:15Z"; version=0
Các cookie của Netscape (NS) đặt trong một tập tin Cookies.txt, với đường
dẫn là: C:\Program Files\Netscape\Users\UserName\Cookies.txt
Lớp CCMM03A Trang 8
Đồ án An ninh mạng Module 17: Buffer Overflow
Các cookies của IE được lưu thành nhiều tập tin, mỗi tập tin là một cookie và

được đặt trong C:\Documents and Setting\[username]\Cookies (Win2000), đối với
win9x, thư mục cookies nằm trong thư mục C:\Windows\cookies.
Kích thước tối đa của cookie là 4kb. Số cookie tối đa cho một tên miền là 20
cookie.Cookie bị hủy ngay khi đóng trình duyệt gọi là “session cookie”.
1.3.0 Proxy:
Proxy cung cấp cho người sử dụng truy xuất Internet những nghi thức đặt biệt
hoặc một tập những nghi thức thực thi trên dual_homed host hoặc basion host.
Những chương trình client của người sử dụng sẽ qua trung gian proxy server thay
thế cho server thật sự mà người sử dụng cần giao tiếp.
Proxy server xác định những yêu cầu từ client và quyết định đáp ứng hay
không đáp ứng, nếu yêu cầu được đáp ứng, proxy server sẽ kết nối với server thật
thay cho client và tiếp tục chuyển tiếp những yêu cầu từ client đến server, cũng như
trả lời của server đến client. Vì vậy proxy server giống cầu nối trung gian giữa
server và client.
Lớp CCMM03A Trang 9
Đồ án An ninh mạng Module 17: Buffer Overflow
CHƯƠNG 2: GIỚI THIỆU VỀ KỸ THUẬT BUFFER OVERFLOW
2.3 ĐỊNH NGHĨA:
Lỗi tràn bộ đệm là một điều kiện bất thường khi một tiến trình lưu dữ liệu
vượt ra ngoài biên của bộ nhớ đệm có chiều dài cố định. Kết quả là dữ liệu có thể
đè lên các bộ nhớ liền kề. Dữ liệu bi ghi đè có thề bao gồm các bộ nhớ đệm khác,
các biến và dữ liệu điều khiển luồng chảy của chương trình (program flow control).
Các lỗi tràn bộ đệm có thề làm cho tiến trình bị đổ vỡ hoặc cho ra kết quả sai.
Các lỗi này có thể được kích hoạt bởi các dữ liệu vào được thiết kế đặc biệt để thưc
thi các đoạn mả phá hoại hoặc để làm cho chương trình hoạt động không như mong
đợi. Bằng cách đó các lỗi tràn bộ đệm gây ra nhiều lổ hổng bảo mật đối với phần
mềm và tạo cơ sở cho nhiều thủ thuật khai thác.
Chương trình khi nạp trong bộ nhớ:
Khi những tiến trình được nạp đến bộ nhớ, chúng chia thành 6 phân đoạn như
sau:

Hình 1.2: Các phân đoạn chương trình thực thi
 text: phân đoạn này tương ứng là phần của file thực thi nhị phân. Nó chứa
các chỉ thị lệnh (mã máy) để thực hiện các tác vụ của chương trình. Phân
đoạn này được đánh dấu là chỉ đọc và sẽ gây ra lỗi nếu như ghi trên phân
đoạn này. Kích thước là cố định tại lúc thực thi khi tiến trình lần đầu tiên
được nạp.
 data: là phân đoạn được sử dụng để lưu trữ các biến toàn cục và có khởi tạo
giá trị ban đầu như là: int a=0; kích thước này cũng cố định tại lúc thực thi
chương trình.
Lớp CCMM03A Trang 10
Đồ án An ninh mạng Module 17: Buffer Overflow
 bss (Below stack section) là được sử dụng để lưu trữ các biến toàn cục nhưng
không có khởi tạo giá trị ban đâu như là: int a. Kích thước của phân đoạn này
cũng cố định lúc thực thi chương trình.
 Heap: Phân đoạn này được sử dụng để cấp phát các biến động và phát triển
từ vùng địa chỉ thấp đến vùng địa chỉ cao trong bộ nhớ. Trong ngôn ngữ C
thì việc cấp phát và giải phóng được thực hiện qua hai hàm malloc() và
free().
Ví dụ: int i = malloc(sizeof (int));
 Stack: phân đoạn stack có tác dụng giữ những lời gọi hàm trong thủ tục đệ
quy và phát triển theo địa chỉ vùng nhớ cao đến địa chỉ vùng nhớ thấp trên
hầu hết các hệ thống.
 Phân đoạn biến môi trường và đối số: phân đoạn này lưu trữ một bản sao
chép các biến cấp độ hệ thống mà có thể được yêu cầu bởi tiến trình trung
quá trình thực thi. Phân đoạn này có khả năng ghi được.
Trong các ngôn ngữ lập trình thì ngôn ngữ C dễ sinh ra các lỗi tràn nhớ mà
attacker có thể khai thác. Trong ngôn ngữ C, các chuỗi (string) hay các buffer được
thể hiện như sau: Con trỏ (pointer) sẽ chỉ trỏ vào byte đầu tiên của chuỗi hay buffer
đó,và chúng ta xác định được kết điểm kết thúc khi con trỏ trỏ đến 1 byte null →
không xác định độ dài của đối tượng nhập vào → có thể copy 1 buffer có độ dài lớn

vào 1 buffer có độ dài nhỏ hơn → gây tràn bộ nhớ đệm (buffer overflow).
Ví dụ một lỗi đơn giản:
#include<stdio.h>
Int main (int argc, char **argv)
{
char target [5] = “TTTT”;
char attacker [11] = “AAAAAAAA”;
strcpy(attacker, “DDDDDDDDDDDDD”);
Lớp CCMM03A Trang 11
Đồ án An ninh mạng Module 17: Buffer Overflow
printf(“% \n”,target);
return 0;
}
2.3 LỖI BUFFER OVERFLOW VÀ NGUYÊN NHÂN GÂY LỖI:
Thông thường có 2 cách khai thác lỗi buffer overflow mà attacker có thể sử
dụng:
 Khai thác dựa vào các lỗ hỏng phần mền thông qua ngôn ngữ lập trình (phần
mềm viết bằng ngôn ngữ C).
 Khai thác các trang web có tương tác người dùng nhưng không ràng buộc dữ
liệu nhập vào như các trường username, password
Nguyên nhân gây ra các lỗi buffer overflow của các chương trình và ứng
dụng:
 Phương thức kiểm tra biên (boundary) không được thực hiện đầy đủ, hoặc là
được bỏ qua.
 Các ngôn ngữ lập trình, như là ngôn ngữ C, bản thân nó đã tiềm ẩn các lỗi
mà hacker có thể khai thác. Các phương thức strcat(), strcpy(), sprintf(),
bcopy(), gets(), và canf() trong ngôn ngữ C có thể được khai thác vì các hàm
này không kiểm tra xem những buffer được cấp phát trên stack có kích thước
lớn hơn dữ liệu được copy vào buffer hay không.
 Những chương trình hoặc ứng dụng được lập trình không tốt khi tạo ra nó

(khả năng lập trình kém).
Một lỗi buffer overflow xuất hiện khi buffer cố gắng cấp phát 1 không gian
lưu trữ có dữ liệu lớn hơn khả năng lưu trữ của nó.
Có 2 kiểu Buffer Overflow chính:
 Stack overflow
 Heap overflow
Stack (nơi lưu trữ tĩnh của không gian bộ nhớ) và Heap (nơi lưu trữ động của
không gian bộ nhớ, được sinh ra khi chạy một chương trình) là địa điểm lưu trữ
Lớp CCMM03A Trang 12
Đồ án An ninh mạng Module 17: Buffer Overflow
cung cấp cho các biến khi chạy một chương trình. Biến được lưu trữ trong stack
hoặc heap cho đến khi chương trình có nhu cầu sử dụng.
2.3 STACK OVERFLOW:
2.3.0 Định nghĩa:
Stack là một kiểu cấu trúc dữ liệu hoạt động theo cơ chế LIFO (last in first
out) được máy tính sử dụng để truyền các đối số vào các hàm để tham chiếu đến
các biến cục bộ.
Stack sẽ lưu giữ tất cả các thông tin mà hàm cần Stack được khởi tạo khi bắt
đầu của một hàm và được “phóng thích” khi hàm kết thúc.
Stack overflow xuất hiện khi buffer tràn trong stack space. Đoạn code độc hại sẽ
được push vào stack.
Lỗi tràn nhớ có thể viết lại giá trị của return pointer, vì thế hacker có thể điều
khiển con trỏ tới các đoạn code độc hại mà họ muốn thực thi.
Hình 2.1: Stack
2.3.0 Mục đích chính của Stack buffer overflow:
Ghi đè một biến địa phương nằm gần bộ nhớ đệm trong stack đê thay đổi hành
vi của chương trình nhằm phục vụ cho ý đồ của hacker
Lớp CCMM03A Trang 13
Đồ án An ninh mạng Module 17: Buffer Overflow
Ghi đè địa chỉ trả về trong khung stack (stack frame). Khi hàm trả về thưc thi

sẽ được tiếp tục tại địa chỉ mà hacker đã chỉ rõ, thường là tại một bộ đệm chứa dữ
liệu vào của người dùng
Ví dụ:
Hình 2.2: Ví dụ Stack Overflow
Hình 2.3: Stack khi bị tấn công bởi Atacker
Lớp CCMM03A Trang 14
Đồ án An ninh mạng Module 17: Buffer Overflow
2.3 HEAP OVERFLOW:
2.4.0 Định nghĩa:
Heap là một khu vực của bộ nhớ được sử dụng bởi một ứng dụng và được cấp
phát động tại thời gian chạy của các hàm, chẳng hạn như malloc().
Heap lưu trữ tất cả các trường hoặc thuộc tính, hàm tạo và phương thức của
một lớp hoặc một đối tượng.
Các biến được cấp phát tự động trong hàm, như malloc() được tạo ra trong
heap.
Hình 2.4: Heap
Trong cách tấn công heap overflow, attacker làm tràn bộ nhớ sẽ có thể
overwrite các dynamic variables, vì thế có thể dẫn đến các hiệu ứng không mong
muốn. Trong hầu hết các môi trường ứng dụng, việc này có thể giúp attacker có thể
điều khiển các thực thi của chương trình.
Ví dụ:
Lớp CCMM03A Trang 15
Đồ án An ninh mạng Module 17: Buffer Overflow
Hình 2.5: Ví dụ Heap Overflow
Heap trước và sau khi bị lỗi Buffer Overflow:
Hình 2.6: Heap Overflow
2.4.0 OVERWRINGTING POINTERS (viết lại con trỏ):
Kẻ tấn công có thể sử dụng phương pháp này để viết lại filename, password
,uid
Các dạng tấn công dựa vào heap:

Lớp CCMM03A Trang 16
Đồ án An ninh mạng Module 17: Buffer Overflow
Cuộc tấn công kiểu này cần một số điều kiện tiên quyết trong mã nguồn của
vulnerable binary: một định nghĩa buffer và pointer. Khó khăn của phương pháp
này là tìm ra hai điều kiện tiên quyết như trên.Một khó khăn khác là xác định địa
chỉ của vulnerable program. Overwriting function pointers.
Mục đích: attacker muốn ghi đè lên một con trỏ và làm cho nó trỏ đến những
gì họ muốn. Nó có thể trỏ đến 1 chương trình nào đó.
2.4.0 Khai thác thư viện malloc():
Dlmalloc được gọi là thư viện Doug Lea malloc, và cũng là malloc thư viện
được sử dụng bởi LIBC.
Lớp CCMM03A Trang 17
Đồ án An ninh mạng Module 17: Buffer Overflow
 U: Used chunk
 F: Free chunk
 Wilderness: top most free chunk
Định nghĩa cấu trúc của 1 đoạn (trunk) là:
struct malloc_chunk
{
size_t prev_size; // only used when previous chunk is free
size_t size; // size of chunk in bytes + 2 status-bits
struct malloc_chunk *fd; // only used for free chunks: pointer to next
chunk
struct malloc_chunk *bk; // only used for free chunks: pointer to
previous chunk
}
;
2.4.0 Mục đích của việc làm hỏng cấu trúc DLMALLOC:
Attacker làm tràn bộ nhớ,sau đó ghi đè dữ liệu lên các mục tiêu của họ.
Yêu cầu đặc biệt cho một dlmalloc khai thác là có hai khối bộ nhớ thu được

bằng malloc.
Ví dụ: vul2.c
int main(void)
{
char * buf ;
char * buffer1 = (char *)malloc(666) ;
Lớp CCMM03A Trang 18
Đồ án An ninh mạng Module 17: Buffer Overflow
char * buffer2 = (char *)malloc(2);
printf(Enter something: );
gets(buf);
strcpy (buffer1, buf);
free(buffer1);
free(buffer2);
return (1);
}
Sau khi thực thi khai thác lỗi ta có kết quả sau:
2.3 CÁCH PHÁT HIỆN BUFFER OVERFLOW:
Có 2 cách cơ bản để phát hiện các lỗi buffer overflow mà hacker có thể sử
dụng :
 Nhìn vào source code: Hacker tìm kiếm các string là các biến cục bộ trong
các hàm của chương trình, xem xét chúng có được kiểm tra biên (boundary
check) chưa. Kiểm tra tiêu chuẩn của các hàm có liên quan đến phần các
chuỗi trong phần input, output.
Lớp CCMM03A Trang 19
Đồ án An ninh mạng Module 17: Buffer Overflow
 Nhập vào các ứng dụng một dữ liệu rất lớn và xem xét ứng dụng có bất cứ
biểu hiện không bình thường nào không.
Các bước xác định Buffer Overflow:
 Bước 1: chạy máy chủ web trên máy cục bộ

 Bước 2: Phát yêu cầu với mọi thẻ dài thẻ kết thúc với “$$$$$”
 Bước 3: nếu máy chủ web bị treo, tìm kiếm bãi tập kết lõi của “$$$$$” để
tìm kiếm vị trí tràn.
 Bước 4: sử dụng các công cụ tự động như codeBlocker, eEye Retina, …
 Bước 5: Sử dụng bộ phận phân tách và trình gỡ rối
 Bước 6: Sử dụng IDA-Proto để xây dựng lại nơi bị khai thác
Hình 2.7: Các bước xác định Buffer Overflow
Lớp CCMM03A Trang 20
Đồ án An ninh mạng Module 17: Buffer Overflow
2.3 CÁCH PHÒNG TRÁNH BUFFER OVERFLOW:
Các cách có thể cản trở đối các kĩ thuật khai thác lỗi buffer overflow: xử lý bộ
đệm trước khi đọc hay thực thi có thể làm thất bại các cố gắng khai thác lỗi tràn bộ
đệm nhưng vẫn không ngăn chặn được một cách tuyệt đối
+ Chuyển từ chữ hoa thành chữ thường
+ Loại bỏ các kí tự đặc biệt và lọc các xâu không chứa kí tự là chữ số hoặc chữ cái.
Tuy nhiên vẫn có các kĩ thuật để tránh việc lọc và xử lý này:
- alphanumeric code :mã gồm toàn chữ và số
- polumorphic code : mã đa hình
- Self-modifying code : mã tự sửa đổi
- Tấn công kiểu return-to-libc
Vì thế để tránh các nguy cơ bị khai thác lỗi buffer overflow chúng ta cần sử
dụng các biện pháp phòng tránh hiệu quả hơn.
2.6.0 Lựa chọn ngôn ngữ lập trình:
Ngôn ngữ lập trình có một ảnh hưởng lớn đối với sự xuất hiện lỗi tràn bộ đệm:
- Ngôn ngữ lập trình C và C++ là hai ngôn ngữ lập trình thông dụng, nhưng hạn
chế của nó là không kiểm tra việc truy cập hoặc ghi đè dữ liệu thông qua các con
trỏ. Cụ thể nó không kiểm tra dữ liệu copy vào một mảng có phù hợp kích thước
của mảng hay không
- Cyclone, một biến thể của C, giúp ngăn chặn các lỗi tràn bộ đệm bằng việc gắn
thông tin về kích thước mảng với các mảng.

- Ngôn ngữ lập trình D sử dụng nhiều kĩ thuật đa dạng để tránh gần hết việc sử
dụng con trỏ và kiểm tra biên do người dùng xác định.
- Nhiều ngôn ngữ lập trình khác cung cấp việc kiểm tra tại thời gian chạy. Việc
kiểm tra này cung cấp một ngoại lệ hay 1 cảnh báo khi C hay C++ ghi đè dữ liệu, ví
dụ như: Pythol, Ada, Lisp.
- Ngoài ra các môi trường của Java hay .NET cũng đòi hỏi kiểm tra biên đối với tất
cả các mảng
Lớp CCMM03A Trang 21

×