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

AN TOÀN BẢO MẬT TRONG CÔNG NGHỆ THÔNG TIN AN TOÀN PHẦN MỀM – LỖI PHẦN MỀM

21 715 0

Đ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

Định dạng
Số trang 21
Dung lượng 648,71 KB

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

Nội dung

AN TOÀN BẢO MẬT TRONG CÔNG NGHỆ THÔNG TIN AN TOÀN PHẦN MỀM – LỖI PHẦN MỀM.An toàn thông tin là sự cân bằng của 3 mục tiêu: Bí mật (confidentiability), toàn vẹn (Intergrity), và sẵn dùng (availability).Bí mật (Confidentiability): tài sản chỉ được truy nhập bởi những người có quyền.Toàn vẹn (Intergrity): tài sản chỉ được tạoxóasửa đổi bởi những người có quyền Sẵn dùng (Availability): tài sản sẵn sàng để đáp ứng sử dụng cho những người có quyền

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘIVIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

  

AN TOÀN BẢO MẬT TRONG CÔNG NGHỆ THÔNG TIN

AN TOÀN PHẦN MỀM – LỖI PHẦN MỀM

Giáo viên hướng dẫn: TS Trần Đức Khánh

Học viên thực hiện : Trương Thảo Nguyên

Vũ Đình PhúNguyễn Hồng Tâm

Đỗ Ngọc Phục

Lê Gia Vĩnh

HÀ NỘI 05 – 2013

Trang 2

Mục lục

Mục lục i

1 Tổng quan về an toàn phần mềm 1

1.1 Khái niệm an toàn phần mềm 1

1.2 Lỗi phần mềm 1

2 Một số lỗi phần mềm thường gặp 2

2.1 Lỗi tràn bộ đệm 2

2.1.1 Tổng quan về lỗi tràn bộ đệm 2

2.1.2 Một số ví dụ thực tế về tràn bộ đệm 3

2.1.3 Bản chất của lỗi tràn bộ đệm 4

2.2 Lỗi không đầy đủ 6

2.2.1 Tổng quan về lỗi không đầy đủ 6

2.2.2 Ví dụ thực tế về lỗi không đầy đủ 7

2.2.3 Bản chất của lỗi không đầy đủ 8

2.3 Lỗi đồng bộ 8

2.3.1 Tổng quan về lỗi đồng bộ 8

2.3.2 Ví dụ thực tế về lỗi đồng bộ 9

2.3.3 Bản chất của lỗi đồng bộ 10

3 Các biện pháp an toàn phần mềm 10

3.1 Kiểm thử phần mềm 10

3.2 Kiểm định hình thức 12

3.2.1 Kiểm định mô hình 12

3.2.2 Suy diễn logic 13

3.3 Lập trình an toàn 16

Tài liệu tham khảo A

Trang 3

1 Tổng quan về an toàn phần mềm

1.1 Khái niệm an toàn phần mềm

An toàn thông tin là sự cân bằng của 3 mục tiêu: Bí mật (confidentiability), toàn vẹn(Intergrity), và sẵn dùng (availability)

- Bí mật (Confidentiability): tài sản chỉ được truy nhập bởi những người có quyền.

- Toàn vẹn (Intergrity): tài sản chỉ được tạo/xóa/sửa đổi bởi những người có quyền

- Sẵn dùng (Availability): tài sản sẵn sàng để đáp ứng sử dụng cho những người có quyền

Hình 1: Các yếu tố trong an toàn thông tin

Đứng từ góc nhìn của người lập trình viên, việc xác định được một phần mềm, một thànhphần phần mềm là đảm bảo được tính an toàn thông tin là việc xác định phần mềm có đảm bảođược 3 đặc tính trên một cách cân bằng nhất hay không

1.2 Lỗi phần mềm

Có một sự thực là phần mềm nào được làm ra cũng có lỗi Lỗi phần mềm có nhiều loại Cónhững lỗi thông thường, không ảnh hưởng đến tính an toàn của phần mềm Có những lỗi lại gâyảnh hưởng nghiêm trọng, có thể bị kẻ xấu lợi dụng để khai thác Đây là những lỗi phần mềmkhiến cho một hay một vài tính chất kể trên bị vi phạm

Trang 4

Hình 2: Một số ví dụ về lỗi phần mềm

Hình trên là một số ví dụ về lỗi phần mềm Code injection là loại lỗi có thể khiến kẻ xấu lợi

dụng để chèn mã độc, qua đó thực thi mã độc, chiếm quyền điều khiển hoặc thực hiện các thaotác trái phép vốn không đủ thẩm quyền để thực hiện Nhóm lỗi này vi phạm tính toàn vẹn và tínhbảo mật của hệ thống

Ping of death là một hình thức tấn công từ chối dịch vụ, tấn công vào phần mềm ở web

server Đây là loại tấn công gửi một số các gói tin ping message có phần nội dung rất lớn tới webserver dựa trên giao thức SMCP Phần mềm ở server khi nhận được gói tin này sẽ xử lý bị lỗigây đổ vỡ chương trình Từ đó người dùng hợp lệ không truy nhập được vào tài nguyên cần thiết.Lỗi này vi phạm tính sẵn dùng

WebDav là một extension của phần mềm IIS – server của MS) Từng bị lỗi và bị khai thác,

khiếm chiếm quyền điều khiển server Làm mất tính bí mật và toàn vẹn

Có thể thấy là nhiều loại lỗi an tòan phần mềm khác nhau, tuy nhiên trong bài trình bày nàychỉ tập trung vào 3 loại lỗi phần mềm cổ điển và thường gặp là :

- Lỗi tràn bộ đệm

- Lỗi không đầy đủ

- Lỗi đồng bộ

2 Một số lỗi phần mềm thường gặp

2.1 Lỗi tràn bộ đệm 2.1.1 Tổng quan về lỗi tràn bộ đệm

Lỗi tràn bộ đệm có thuật ngữ tiếng Anh là “Buffer Overflow Bộ đệm được định gnhĩa là một

vùng nhớ liên tục có kích thước giới hạn Bộ đệm thường dùng trong C là một ảng Bộ đệm đượcsử dụng để lưu trữ các giá trị tạm thời của một xâu phục vụ cho quá trình xử lý

Tràn bộ đệm được hiểu một cách đơn giản là việc sao chép một đoạn dữ liệu có kích thướclớn vào một bộ đệm có kịch thước nhỏ mà không thực hiện thao tác kiểm tra dẫn tới vùng nhớphía sau bộ đệm bị ghi đè, vùng nhớ này có thể lại là một bộ đệm khác hoặc là vùng nhớ của hệthống Hậu quả của quá trình này là làm cho chương trình họat động không chính xác hoặc bị đổvỡ

Lỗi tràn bộ đệm có thể bị kẻ xấu khai thác để thực hiện những mục đích xấu Kẻ xấu haòntoàn có thể chèn mã lệnh vào một chương trình có nguy cơ bị tràn bộ đệm và thực thi mã lệnh

đó Hầu hết các virus hay sâu phát tán trên diện rộng đều khai thác theo lỗi này Nó có thể chủđộng phát tán mà không cần sự can thiệp của người dùng (giống như virus lây file thường thựchiện là cần có sự thao tác của người dùng) Kẻ xấu khi đã khai thác được lỗi này có thể thực hiệnrất nhiều thao tác khác nhau như mở cổng để chiếm quyền điều khiển và điều khiển từ xa, cài đặt

Trang 5

một backdoor lên server, đặt phần mềm gián điệp Trojan hay cài keylogger để lấy cắp tài khoảncủa người dùng

Phạm vi ảnh hưởng của lỗi tràn bộ đệm tùy thuộc vào quyền của người dùng đăng nhập vào

hệ thống Có trường hợp kẻ xấu tuy khai thác đuợc lỗi này những không làm được gì nhưng cũng

có những trường hợp hậu quả là vô cùng nghiêm trọng Ví dụ các dịch vụ hệ thống như RPC –Remote ProcedureCalls là các idchj vụ quan trọng của hệ thống NT của window Các dịch vụnày được chạy tự động dưới quyền của user SYSTEM – một user ẩn của hệ thống có quyền caotrong hệ điều hành Nếu dịch vụ này bị đổ vỡ, hệ thống sẽ ngừng hoạt động

Bộ đệm có hai cách tổ chức lưu trữ đó là trên stack (dùng để lưu các biến tĩnh) và heap (lưucác biến được cấp phát động thông qua con trỏ) Do đó tràn bộ đệm cũng có hai loại khai tháckhác nhau:

- Tràn stack:

o Ghi đè lên đia chỉ trả về của hàm: Đây là một trong những kĩ thuật cơ bản nhất củatràn bộ đệm Ý tưởng của phương pháp khai thác này đó là ghi đề lên địa chỉ trả vềcủa hàm nằm trong stack Trong trường hợp lý tưởng, hàm thay vì trở về lệnh tiếptheo sau lời gọi hàm, nó sẽ nhảy tới mã lệnh mà kẻ xấu mong muốn, qua đó thực hiệnđoạn mã xấu đó

o Ghi đè lên SEH(Structured Exception Handling) SEH là cấu trúc quản lý exceptiontrong window Nó chứa các con trỏ trỏ tới các hàm xử lý exception khi có exceptionxảy ra Ví dụ như thông báo ngoại lệ này lên màn hình Kĩ thuật khai thác này sẽ cốgắng ghi đè lên các con trỏ này để trỏ tới một hàm thực thi xấu và gây ra exceptiontương ứng Qua đó thực hiện được đoạn mã thực thi xấu

- Tràn Heap: Tràn heap là kĩ thuật khai thác khó hơn và ở mức độ cao hơn Một số kĩ thuậthiện nay khai thác bao gồm ghi đè lên con trỏ trỏ tới hàm RtlEnterCriticalSection trong PEBhay ghi đè lên Unhanded Exception Handler

Trong phạm vi của bài viết, nhóm chỉ xin trình bày vào kĩ thuật cơ bản nhất là Ghi đè lên địachỉ trả về của hàm trong tràn stack

2.1.2 Một số ví dụ thực tế về tràn bộ đệm

Lỗi tràn bộ đệm được khai thác trên diện rộng và được công bố hàng ngày trên các trangwebsite bảo mật như milworm.com, secunia.org, security focus… Các virus hay sâu muốn pháttán trên diện rộng thường sử dụng cách này

Sâu Blaster còn được gọi là Lovsan hay Lovesan được phát tán vào hồi tháng 8 năm 2003,trên các hệ thống máy chạy hệ điều hành Windows XP và Windows server 2000 của Microsoft

Nó được phát hiện vào ngày 11/08/2003 và có tốc độ lây nhiễm tăng dần đến đỉnh điểm vào ngày13/08/2003 Mục đích của sâu này là tấn công từ chối dịch vụ trang web windowsupdate.com.Sâu này lợi dụng lỗ hổng tràn bộ đệm trong giao thức DCOM RPC để phát tán [5]

Trang 6

Một ví dụ khác của lỗi tràn bộ đệm là lỗ hổng trong chức năng Save As của Google Chromephiên bản 0.2.1.149.27 Đây là một trong những phiên bản đầu tiên của Google Chrome đuợcđưa ra thị trường vào tháng 9 năm 2008 Tuy nhiên phiên bản này tồn tại lỗ hổng tràn bộ đệm khisave một văn bản rất lớn Kẻ xấu có thể lợi dụng chèn mã độc vào những trang website để chúngđược thực hiện khi người dùng Save những trang web này về máy của mình Lỗi này được LêĐức Anh – một sinh viên của trường đại học Bách Khoa Hà Nội khi đó phát hiện ra Hình dưới

mô tả thông tin về lỗi này được công bố trên SecurityFocus.com

Hình 3: Mô tả lỗi tràn bộ đệm trên GoogleChrome

2.1.3 Bản chất của lỗi tràn bộ đệm

Xét một ví dụ C đơn giản như sau:

Bây giờ chúng ta xem xét bộ nhớ được tổ chức như thế nào Trên máy tĩnh x86(32 bit) cácthanh ghi có độ dài 32bit CPU có thể quản lý được tối đa $GB RAM địa chỉ Trong đó 2GB địachỉ cao từ 80000000 đến FFFFFFFF sẽ được dành cho nhân của hệ điều hành và các cấu trúc dữliệu duy trì họat động của hệ thống Vùng dữ liệu từ 00000000 đến 7FFFFFFF sẽ dành cho cácứng dụng phần mềm sử dụng để cư\gyứa nội dung của file exe được nạp vào, stack của chươngtrình chứa các biến được khai báo tính Khi một chương trình được chạy, hệ thống sẽ nạp tòan bộ

Sep 05 2008: Google Chrome 0.2.149.27 'SaveAs'

Function Buffer Overflow Vulnerability

Discoverer: Le Duc Anh - SVRT – Bkis

Description : The vulnerability is caused due to a

boundary error when handling the "SaveAs" function

On saving a malicious page with an overly long title

(<title> tag in HTML), the program causes a stack-based overflow

and makes it possible for attackers to execute arbitrary code on

users' systems

Nguồn:

http://www.securityfocus.com/archive/1/496042

Sep 05 2008: Google Chrome 0.2.149.27 'SaveAs'

Function Buffer Overflow Vulnerability

Discoverer: Le Duc Anh - SVRT – Bkis

Description : The vulnerability is caused due to a

boundary error when handling the "SaveAs" function

On saving a malicious page with an overly long title

(<title> tag in HTML), the program causes a stack-based overflow

and makes it possible for attackers to execute arbitrary code on

users' systems

Nguồn:

http://www.securityfocus.com/archive/1/496042

Trang 7

file nhị phân vào vùng địa chỉ bắt đầu là 00400000 Hình dưới thể hiện tổ chức bộ nhớ trong hệthống.

Hình 4: Tổ chức của bộ nhớ

Tiếp theo, chúng ta tìm hiểu đến quá trình gọi hàm của một chương trình trong hệ thống.Hình dưới mô tả quá trình này Giả sử một chương trình được nạp vào trong bộ nhớ và đang thựchiện đến câu lệnh thứ 5 Trong hệ điều hành có thanh ghi IP (Instruction pointer) là thanh ghichứa địa chỉ của câu lệnh được thực hiện tiếp theo Khi câu lệnh thứ 5 được thực hiện Hệ điềuhành sẽ cấp phát một stack frame mới để thực hiện cho hàm fn được gọi Trong frame này cómột số thành phần tuy nhiên quan trọng nhất là ba thành phần:

Trang 8

Hình 5: Quá trình gọi hàm của chương trình

- RET: return value: chứa địa trả về sau khi hàm fn được thực hiện xong

- Lưu lại SP (Stack pointer): SP là con trỏ sử dụng trong stack Việc lưu lại SP giúp việc quảnlý bộ nhớ tĩnh trong stack của hàm gọi chính xác khi hàm fn thực hiện xong

- Buffer: Bộ đệm được cấp phát cho các biến trong hàm fn (tham biến, tham số)

Bên cạnh việc cấp phát một stack frame, thanh ghi IP cũng chứa nội dung là địa chỉ đầu tiêncủa đoạn bộ nhớ chứa nội dung hàm fn Tiếp đó hàm fn được thực hiện Khi trả kết quả về, Stackframe được cấp phát sẽ được giải phóng Thanh ghi IP sẽ lấy giá trị của RET, các thanh ghi SPđược phục hồi Từ đó chuẩn bị thực hiện câu lệnh tiếp theo là câu lệnh thứ 6 trong chương trìnhchính

Hình 6: Khai thác tràn bộ đệm – ghi đè địa chỉ trả về

Lợi dụng cách thức họat động trên, kẻ xấu có thể ghi vào nội dung của buffer với kích thướcrất lớn khiến bộ đệm bị tràn sao cho tại đoạn nhớ chứa RET sẽ bị ghi đè lên giá trị trùng với địachỉ của đoạn mã độc Như vậy, khi hàm fn được thực hiện xong, thanh ghi IP sẽ nhận giá trị là

Trang 9

địa chỉ của đoạn mã độc thay vì địa chỉ của câu lệnh thứ 6 tại hàm gọi chương trình Câu lệnhtiép theo được thực hiện sẽ là câu lệnh đầu tiên của đoạn mã độc.

2.2 Lỗi không đầy đủ

2.2.1 Tổng quan về lỗi không đầy đủ

Lỗi không đầy đủ có thuật ngữ tiếng Anh là “Incomplete Mediation Lỗi không đầy đủ là lỗi

liên quan chặt chẽ đến các giá trị đầu vào của chương trình phần mềm và thường được địnhnghĩa bởi những người dùng bất kì (khó có thể tin tưởng được) Các ứng dụng web là một trongnhững ví dụ điển hình của nhóm chương trình phần mềm này Ví dụ, khi được yêu cầu nhập mộtđịa chỉ email, người dùng có thể nhập các giá trị như iang#cas.aaaa.ca Đây không phải là mộtđịa chỉ email hợp lệ Một chương trình phần mềm cần phải kiểm tra để chắc chắn rằng ngườidùng đã nhập giá trị đầu vào là hợp lệ Từ đó, những yêu cầu của người dùng mới có ý nghĩa làđược thực hiện một cách đúng đắn Quá trình kiểm tra này gọi là mediation

Lỗi không đầy đủ xảy ra khi mà một ứng dụng phần mềm chấp nhận những giá trị đầu vàokhông chính xác (về mặt kiểu dữ liệu, định dạng dữ liệu, nội dung vv), Qua đó chương trìnhphần mềm này sẽ thực hiện không chính xác Ví dụ như khi được yêu cầu nhập số điện thoại,người dùng thay vì nhập số 5198864567 thì lại nhập giá trị 519-886-4567 Đây là một giá trịnhập vào có ý nghĩa nhưng lại không đúng định dạng Có thể khiến cho phần mềm xử lý khôngchính xác[11]

Trong lỗi không đầy đủ chúng ta tập trung tìm hiểu vào các giá trị đầu vào không chính xácbao gồm:

- Không đúng định dạng: DOB (day of born): 1980-04-31

- Không có ý nghĩa: DOB nhận giá trị 1876-10-12 Một người đang sống hiện tại không thể cóngày sinh vào năm 1876

- Không đồng nhất với các giá trị khác

Do đó, trong thực tế, để phòng chống lỗi không đầy đủ, đặc biệt với các phần mềm nền web,chúng ta phải áp dụng kiểm tra giá trị của biến tại cả hai phía client và server Chương trình phảikiểm tra đối với các dữ liệu được nhập bởi người dùng Bên cạnh đó chương trình phải kiểm traviệc người dùng có điều chỉnh dữ liệu hay không đối với các trạng thái được người dùng lưu lại

2.2.2 Ví dụ thực tế về lỗi không đầy đủ

Xét một ví dụ đơn giản:

Trang 10

Error(“length too large”)

dữ liệu bị sai do quá trình truyền tin trên mạng Khi đó câu lệnh memcpy sẽ luôn được thựchiện Khi này len được ép kiểu sang hành số nguyên không dấu thì một số âm sẽ thành một sốnguyên rất lớn Do đó chương trình sẽ thực hiện sai, thậm chí hệ thống có thể đổ vỡ

Xét một ví dụ khác trong thực tế Things.com là website từng mắc lỗi này [7] trong một linkđặt hàng như sau:

Link đặt hàng trên things.com

2.2.3 Bản chất của lỗi không đầy đủ

Như đã trình bày trong hai phần trên, lỗi không đầy đủ về bản chất là không kiểm tra các giá trị đầu vào một cách hợp lý Lỗi không đầy đủ xảy ra khi mà một ứng dụng phần mềm chấp nhậnnhững giá trị đầu vào không chính xác (về mặt kiểu dữ liệu, định dạng dữ liệu, nội dung vv) Lỗi không đầy đủ có thể phòng chống bằng việc kiểm tra kĩ tất cả các giá trị đầu vào có phù hợp với yêu cầu của hàm được gọi hay không

2.3 Lỗi đồng bộ

2.3.1 Tổng quan về lỗi đồng bộ

Lỗi đồng bộ (Synchronization), trong lĩnh vực phần mềm còn được gọi là TOCTTOU (time

to check to time of use), là một lớp lỗi phần mềm gây ra bởi sự thay đổi hệ thống giữa việc kiểmtra (checking) một điều kiện nào đó (ví dụ như một chứng chỉ bảo mật) và việc sử dụng các kếtquả kiểm tra đó

Ngày đăng: 08/09/2014, 23:30

HÌNH ẢNH LIÊN QUAN

Hình 1: Các yếu tố trong an toàn thông tin - AN TOÀN BẢO MẬT TRONG CÔNG NGHỆ THÔNG TIN AN TOÀN PHẦN MỀM – LỖI PHẦN MỀM
Hình 1 Các yếu tố trong an toàn thông tin (Trang 3)
File nhị phân vào vùng địa chỉ bắt đầu là 00400000. Hình dưới thể hiện tổ chức bộ nhớ trong hệ thống. - AN TOÀN BẢO MẬT TRONG CÔNG NGHỆ THÔNG TIN AN TOÀN PHẦN MỀM – LỖI PHẦN MỀM
ile nhị phân vào vùng địa chỉ bắt đầu là 00400000. Hình dưới thể hiện tổ chức bộ nhớ trong hệ thống (Trang 7)
Hình 5: Quá trình gọi hàm của chương trình - AN TOÀN BẢO MẬT TRONG CÔNG NGHỆ THÔNG TIN AN TOÀN PHẦN MỀM – LỖI PHẦN MỀM
Hình 5 Quá trình gọi hàm của chương trình (Trang 8)
Hình 6: Khai thác tràn bộ đệm – ghi đè địa chỉ trả về - AN TOÀN BẢO MẬT TRONG CÔNG NGHỆ THÔNG TIN AN TOÀN PHẦN MỀM – LỖI PHẦN MỀM
Hình 6 Khai thác tràn bộ đệm – ghi đè địa chỉ trả về (Trang 8)
Hình 7: Ví dụ về lỗi đồng bộ[12] - AN TOÀN BẢO MẬT TRONG CÔNG NGHỆ THÔNG TIN AN TOÀN PHẦN MỀM – LỖI PHẦN MỀM
Hình 7 Ví dụ về lỗi đồng bộ[12] (Trang 12)
Hình 8:Kiểm thử an toàn phần mềm [4] - AN TOÀN BẢO MẬT TRONG CÔNG NGHỆ THÔNG TIN AN TOÀN PHẦN MỀM – LỖI PHẦN MỀM
Hình 8 Kiểm thử an toàn phần mềm [4] (Trang 13)
Hình 9: Ví dụ chuyển từ đồ thị chuyển trạng thái sang cây logic - AN TOÀN BẢO MẬT TRONG CÔNG NGHỆ THÔNG TIN AN TOÀN PHẦN MỀM – LỖI PHẦN MỀM
Hình 9 Ví dụ chuyển từ đồ thị chuyển trạng thái sang cây logic (Trang 15)
Hình 10: Mô hình của suy diễn logic - AN TOÀN BẢO MẬT TRONG CÔNG NGHỆ THÔNG TIN AN TOÀN PHẦN MỀM – LỖI PHẦN MỀM
Hình 10 Mô hình của suy diễn logic (Trang 17)

TỪ KHÓA LIÊN QUAN

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

w