2023
1
ThS. Nguyn Chí Hiếu
2023
1.
Gii thiu v An toàn bo mt Phn mm
2.
Các k thut bo mt Phn mm
Ni dung
2023 An toàn bảo mật Hệ thống thông tin 2
1
2
2023
2
Bo mt thông tin cha trong các phn mm
Ngăn chn k tn công ăn cp mã ngun phn mm
Theo dõi vi phm bn quyn
Làm ri mã ngun (code obfuscation): khó dch ngưc
(reverse) li mã ngun
Chng gi mo (tamperproofing): khó b qua vic kim tra
mã ngun
1. Gii thiu An toàn bo mt phn mm
2023 An toàn bảo mật Hệ thống thông tin 3
Mt s thách thc:
V thi gian: phn mm có th đưc bo mt trong bao
lâu?
V kinh tế: bo mt phn mm mang li giá tr thế nào?
V hiu qu: chp nhn phn mm chm hơn đ khó b
khóa hơn hay không?
Gii thiu An toàn bo mt phn mm
2023 An toàn bảo mật Hệ thống thông tin 4
3
4
2023
3
Mt s thách thc:
V thi gian: phn mm có th đưc bo mt trong bao
lâu?
V kinh tế: bo mt phn mm mang li giá tr thế nào?
V hiu qu: chp nhn phn mm chm hơn đ khó b
khóa hơn hay không?
Gii thiu An toàn bo mt phn mm
2023 An toàn bảo mật Hệ thống thông tin 5
Các lĩnh vc liên quan
Mt mã (cryptography)
K thut phn mm (software engineering)
Che giu d liu (steganography)
Trình biên dch (compiler)
An toàn bo mt phn mm
2023 An toàn bảo mật Hệ thống thông tin 6
5
6
2023
4
Dch ngưc phn mm
Gii thiu An toàn bo mt phn mm
2023 An toàn bảo mật Hệ thống thông tin 7
Dch ngưc phn mm
Gi s, Alice viết mt phn mm mang li giá tr rt ln
(v mt thut toán, thiết kế hay kinh tế)
Bob là mt lp trình viên mun phát trin mt phn mm
cnh tranh. Do đó, Bob mun đánh cp mã ngun đ tích
hp thành mt phân h nào đó trong phn mm ca mình!
Gii thiu An toàn bo mt phn mm
2023 An toàn bảo mật Hệ thống thông tin 8
7
8
2023
5
Sao chép phn mm
Gii thiu An toàn bo mt phn mm
2023 An toàn bảo mật Hệ thống thông tin 9
Sao chép phn mm
Gi s, Alice viết mt phn mm mang li giá tr rt ln
(v mt thut toán, thiết kế hay kinh tế)
Bob là mt lp trình viên mun sao chép (clone) toàn b
phn mm!!!
Gii thiu An toàn bo mt phn mm
2023 An toàn bảo mật Hệ thống thông tin 10
9
10
2023
6
Vi phm bn quyn phn mm
Gii thiu An toàn bo mt phn mm
2023 An toàn bảo mật Hệ thống thông tin 11
Vi phm bn quyn phn mm
Gi s, Alice viết mt phn mm.
Bob là mua mt bn sao chép ca Alice và bán li bt
hp pháp cho ngưi khác
Gii thiu An toàn bo mt phn mm
2023 An toàn bảo mật Hệ thống thông tin 12
11
12
2023
7
Bn quyn các d liu k thut s
Gii thiu An toàn bo mt phn mm
2023 An toàn bảo mật Hệ thống thông tin 13
Bn quyn các d liu k thut s
Gi s, Alice có d liu k thut s (hình, nhc, phim, )
đưc mã hóa
Bob tìm cách phá mã đ ly v thông tin t d liu k
thut s
Gii thiu An toàn bo mt phn mm
2023 An toàn bảo mật Hệ thống thông tin 14
13
14
2023
8
Kim tra vi phm bn quyn phn mm
Gii thiu An toàn bo mt phn mm
2023 An toàn bảo mật Hệ thống thông tin 15
Kim tra vi phm bn quyn phn mm
Gi s, Alice viết mt phn mm.
Bob can thip phn mm đ tìm cách loi b yêu cu kim
tra vi phm bn quyn
Alice cn có bin pháp không cho chy phn mm khi b vi
phm bn quyn
Gii thiu An toàn bo mt phn mm
2023 An toàn bảo mật Hệ thống thông tin 16
15
16
2023
9
Truy vết k tn công
Gii thiu An toàn bo mt phn mm
2023 An toàn bảo mật Hệ thống thông tin 17
Truy vết k tn công
Theo vết, truy tìm da vào phong cách lp trình ca k tn
công
Gii thiu An toàn bo mt phn mm
2023 An toàn bảo mật Hệ thống thông tin 18
17
18
2023
10
K thut làm ri mã ngun (code obfuscation)
Làm cho k tn công khó dch ngưc đ tìm li mã ngun
gc ca phn mm (tn nhiu thi gian, tin bc, )
K thut chng gi mo (tamperproofing)
Phát hin và đưa ra x lý vi hành vi gi mo
2.Các k thut bo mt Phn mm
2023 An toàn bảo mật Hệ thống thông tin 19
Biến đi mc tru tưng (abstraction)
Hy lp, hàm,
Biến đi d liu (data)
Thay thế d liu bng các biu din mi!
Biến đi điu khin (control)
Hy các cu trúc điu khin if, while, for,
Biến đi đng (dymamic)
Làm cho mã ngun thay đi trong thi gian chy
Các k thut làm ri mã ngun
2023 An toàn bảo mật Hệ thống thông tin 20
19
20
2023
11
2023 An toàn bảo mật Hệ thống thông tin 21
int foo(int x) {
return x 7;
}
void bar(int x, int z) {
if (x == z)
printf("%i \n", x);
}
int main() {
int y = 6;
y = foo(y);
bar(y, 42);
}
Biến đi mc tru tưng
2023 An toàn bảo mật Hệ thống thông tin 22
int foobar(int x, int z, int s)
{
if (s == 1)
return x 7;
else if (s == 2)
if (x == z)
printf("%i\n", x);
}
int main(){
int y = 6;
y = foobar(y, 99, 1);
foobar(y, 42, 2);
}
int foo(int x) {
return x 7;
}
void bar(int x, int z) {
if (x == z)
printf("%i\n", x);
}
int main() {
int y = 6;
y = foo(y);
bar(y, 42);
}
21
22
2023
12
Biến đi d liu
2023 An toàn bảo mật Hệ thống thông tin 23
int foo(int x) {
return x 7;
}
void bar(int x, int z) {
if (x == z)
printf("%i\n", x);
}
int main() {
int y = 6;
y = foo(y);
bar(y, 42);
}
int foobar(int x, int z, int s){
if (s == 1)
return (x37)%51;
else if (s == 2) {
if (x == z) {
int x2 = xx%51, x3 = x2x%51;
int x4 = x2x2%51, x8 = x4x4%51;
int x11 = x8x3%51; printf("%i\n", x11);
}
}
}
int main(){
int y = 12;
y = foobar(y, 99, 1);
foobar(y, 36, 2);
}
Biến đi cu trúc điu khin
2023 An toàn bảo mật Hệ thống thông tin 24
int foo(int x) {
return x 7;
}
void bar(int x, int z) {
if (x == z)
printf("%i\n", x);
}
int main() {
int y = 6;
y = foo(y);
bar(y, 42);
}
int foobar(int x, int z, int s){
char next = &&cell0;
int retVal = 0;
cell0: next = (s == 1) ? &&cell1 : &&cell2; goto next;
cell1: retVal = (x37) % 51; goto end;
cell2: next = (s == 2)? && cell3 : && end; goto next;
cell3: next = (x == z)? && cell4 : &&end; goto next;
cell4: {
int x2 = x x % 51, x3 = x2 x % 51;
int x4 = x2 x2 % 51, x8 = x4 x4 % 51;
int x11 = x8 x3 % 51;
printf("%i\n", x11); goto end;
}
end: return retVal;
}
23
24
2023
13
Tuy nhiên, k tn công cũng có th làm ri mã ngun
nhm mc đích:
Bo v mã ngun virus trưc các phn mm dit virus
Che giu phong cách lp trình ca bn thân
Các k thut làm ri mã ngun
2023 An toàn bảo mật Hệ thống thông tin 25
K tn công có th làm ri mã ngun nhm mc đích:
Bo v mã ngun virus trưc các phn mm dit virus
Che giu phong cách lp trình ca bn thân
Các k thut làm ri mã ngun
2023 An toàn bảo mật Hệ thống thông tin 26
25
26
2023
14
K tn công có th làm ri mã ngun nhm mc đích:
Bo v mã ngun virus trưc các phn mm dit virus
Che giu phong cách lp trình ca bn thân
Các k thut làm ri mã ngun
2023 An toàn bảo mật Hệ thống thông tin 27
Hai giai đon ca k thut chng gi mo:
Phát hin:
Phát hin mã ngun đã b thay đi
Các biến trng thái bình thưng
X lý:
Không cho chy
Gây li
Gi đin thoi
Các k thut chng gi mo
2023 An toàn bảo mật Hệ thống thông tin 28
27
28
2023
15
Chng vi phm bn quyn bng k thut đu dóng bn
quyn phn mm (watermarking)
Nhúng du bn quyn vào phn mm
Trích du bn quyn đ kim tra
Đóng du bn quyn phn mm
2023 An toàn bảo mật Hệ thống thông tin 29
Đóng du bn quyn phn mm
2023 An toàn bảo mật Hệ thống thông tin 30
29
30
2023
16
Đóng du bn quyn phn mm
2023 An toàn bảo mật Hệ thống thông tin 31
class Fibonacci {
string COPYRIGHT = "Copyright Alice";
public int fibonacci(int n){
if (n <= 2)
return 1;
else
return fib(n − 1) + fib(n2);
}
}
Đóng du bn quyn phn mm
2023 An toàn bảo mật Hệ thống thông tin 32
31
32
2023
17
Chng vi phm bn quyn bng k thut đu dóng bn
quyn phn mm (watermarking)
K tn công có th to du bn quyn ca chính h
K tn công mua mt s bn quyn phn mm và so sánh
đ phát hin nơi đt du đóng bn quyn
Đóng du bn quyn phn mm
2023 An toàn bảo mật Hệ thống thông tin 33
1.
Cho đon mã ngun, hãy tìm cách dch ngưc mã ngun
gc
Bài tp
2023 An toàn bảo mật Hệ thống thông tin 34
int x = 42;
if ((x > 12) && !!(x > 12)) {}
33
34
2023
18
2.
Cho đon mã ngun, hãy tìm cách dch ngưc mã ngun
gc
Bài tp
2023 An toàn bảo mật Hệ thống thông tin 35
int i_acbd(int i_eca0) {
int i_9dd4 = 42 + i_eca0;
return i_9dd4;
}
int main() {
int i_4152 = 2;
return i_acbd(i_4152);
}
3.
Cho đon mã ngun, hãy tìm cách dch ngưc mã ngun
gc
Bài tp
2023 An toàn bảo mật Hệ thống thông tin 36
var = 1;
switch (var)
{
case 1 : init; var = 2; break;
case 2 : if (cond) var = 3; else var = 4; break;
case 3 : f(); var = 2; break;
case 4 : var = 1; end;
}
35
36
2023
19
4.
Cho đon mã ngun, hãy tìm cách dch ngưc mã ngun
gc
Bài tp
2023 An toàn bảo mật Hệ thống thông tin 37
var = 1;
switch (var)
{
case 1: init; var = 2; break;
case 2: if (cond) var = 3; else var = 7; break;
case 3: f(); var = 4; break;
case 4: if (test) var = 5; else var = 6; break;
case 5: stat1; var = 2; break;
case 6: stat2; var = 2; break;
case 7: var = 1; end;
}
Cám ơn đã theo dõi
Hi & Đáp
2023 An toàn bảo mật Hệ thống thông tin 38
37
38

Preview text:

2023 ThS. Nguyễn Chí Hiếu 2023 1 Nội dung
1. Giới thiệu về An toàn bảo mật Phần mềm
2. Các kỹ thuật bảo mật Phần mềm 2023
An toàn bảo mật Hệ thống thông tin 2 2 1 2023
1. Giới thiệu An toàn bảo mật phần mềm
 Bảo mật thông tin chứa trong các phần mềm
 Ngăn chặn kẻ tấn công ăn cắp mã nguồn phần mềm
 Theo dõi vi phạm bản quyền
 Làm rối mã nguồn (code obfuscation): khó dịch ngược (reverse) lại mã nguồn
 Chống giả mạo (tamperproofing): khó bỏ qua việc kiểm tra mã nguồn 2023
An toàn bảo mật Hệ thống thông tin 3 3
Giới thiệu An toàn bảo mật phần mềm  Một số thách thức:
 Về thời gian: phần mềm có thể được bảo mật trong bao lâu?
 Về kinh tế: bảo mật phần mềm mang lại giá trị thế nào?
 Về hiệu quả: chấp nhận phần mềm chậm hơn để khó bẻ khóa hơn hay không? 2023
An toàn bảo mật Hệ thống thông tin 4 4 2 2023
Giới thiệu An toàn bảo mật phần mềm  Một số thách thức:
 Về thời gian: phần mềm có thể được bảo mật trong bao lâu?
 Về kinh tế: bảo mật phần mềm mang lại giá trị thế nào?
 Về hiệu quả: chấp nhận phần mềm chậm hơn để khó bẻ khóa hơn hay không? 2023
An toàn bảo mật Hệ thống thông tin 5 5
An toàn bảo mật phần mềm
 Các lĩnh vực liên quan  Mật mã (cryptography)
 Kỹ thuật phần mềm (software engineering)
 Che giấu dữ liệu (steganography)
 Trình biên dịch (compiler) 2023
An toàn bảo mật Hệ thống thông tin 6 6 3 2023
Giới thiệu An toàn bảo mật phần mềm
 Dịch ngược phần mềm 2023
An toàn bảo mật Hệ thống thông tin 7 7
Giới thiệu An toàn bảo mật phần mềm
 Dịch ngược phần mềm
 Giả sử, Alice viết một phần mềm mang lại giá trị rất lớn
(về mặt thuật toán, thiết kế hay kinh tế)
 Bob là một lập trình viên muốn phát triển một phần mềm
cạnh tranh. Do đó, Bob muốn đánh cắp mã nguồn để tích
hợp thành một phân hệ nào đó trong phần mềm của mình! 2023
An toàn bảo mật Hệ thống thông tin 8 8 4 2023
Giới thiệu An toàn bảo mật phần mềm  Sao chép phần mềm 2023
An toàn bảo mật Hệ thống thông tin 9 9
Giới thiệu An toàn bảo mật phần mềm  Sao chép phần mềm
 Giả sử, Alice viết một phần mềm mang lại giá trị rất lớn
(về mặt thuật toán, thiết kế hay kinh tế)
 Bob là một lập trình viên muốn sao chép (clone) toàn bộ phần mềm!!! 2023
An toàn bảo mật Hệ thống thông tin 10 10 5 2023
Giới thiệu An toàn bảo mật phần mềm
 Vi phạm bản quyền phần mềm 2023
An toàn bảo mật Hệ thống thông tin 11 11
Giới thiệu An toàn bảo mật phần mềm
 Vi phạm bản quyền phần mềm
 Giả sử, Alice viết một phần mềm.
 Bob là mua một bản sao chép của Alice và bán lại bất hợp pháp cho người khác 2023
An toàn bảo mật Hệ thống thông tin 12 12 6 2023
Giới thiệu An toàn bảo mật phần mềm
 Bản quyền các dữ liệu kỹ thuật số 2023
An toàn bảo mật Hệ thống thông tin 13 13
Giới thiệu An toàn bảo mật phần mềm
 Bản quyền các dữ liệu kỹ thuật số
 Giả sử, Alice có dữ liệu kỹ thuật số (hình, nhạc, phim, …) được mã hóa
 Bob tìm cách phá mã để lấy về thông tin từ dữ liệu kỹ thuật số 2023
An toàn bảo mật Hệ thống thông tin 14 14 7 2023
Giới thiệu An toàn bảo mật phần mềm
 Kiểm tra vi phạm bản quyền phần mềm 2023
An toàn bảo mật Hệ thống thông tin 15 15
Giới thiệu An toàn bảo mật phần mềm
 Kiểm tra vi phạm bản quyền phần mềm
 Giả sử, Alice viết một phần mềm.
 Bob can thiệp phần mềm để tìm cách loại bỏ yêu cầu kiểm tra vi phạm bản quyền
 Alice cần có biện pháp không cho chạy phần mềm khi bị vi phạm bản quyền 2023
An toàn bảo mật Hệ thống thông tin 16 16 8 2023
Giới thiệu An toàn bảo mật phần mềm
 Truy vết kẻ tấn công 2023
An toàn bảo mật Hệ thống thông tin 17 17
Giới thiệu An toàn bảo mật phần mềm
 Truy vết kẻ tấn công
 Theo vết, truy tìm dựa vào phong cách lập trình của kẻ tấn công 2023
An toàn bảo mật Hệ thống thông tin 18 18 9 2023
2.Các kỹ thuật bảo mật Phần mềm
 Kỹ thuật làm rối mã nguồn (code obfuscation)
 Làm cho kẻ tấn công khó dịch ngược để tìm lại mã nguồn
gốc của phần mềm (tốn nhiều thời gian, tiền bạc, …)
 Kỹ thuật chống giả mạo (tamperproofing)
 Phát hiện và đưa ra xử lý với hành vi giả mạo 2023
An toàn bảo mật Hệ thống thông tin 19 19
Các kỹ thuật làm rối mã nguồn
 Biến đổi mức trừu tượng (abstraction)  Hủy lớp, hàm, …
 Biến đổi dữ liệu (data)
 Thay thế dữ liệu bằng các biểu diễn mới!
 Biến đổi điều khiển (control)
 Hủy các cấu trúc điều khiển if, while, for, …
 B iến đổi động (dymamic)
 Làm cho mã nguồn thay đổi trong thời gian chạy 2023
An toàn bảo mật Hệ thống thông tin 20 20 10 2023 int foo(int x) { return x ∗ 7; } void bar(int x, int z) { if (x == z) printf("%i \n", x); } int main() { int y = 6; y = foo(y); bar(y, 42); } 2023
An toàn bảo mật Hệ thống thông tin 21 21
Biến đổi mức trừu tượng int foo(int x) {
int foobar(int x, int z, int s) return x ∗ 7; { } if (s == 1) return x ∗ 7; void bar(int x, int z) { else if (s == 2) if (x == z) if (x == z) printf("%i\n", x); printf("%i\n", x); } } int main() { int main(){ int y = 6; int y = 6; y = foo(y); y = foobar(y, 99, 1); bar(y, 42); foobar(y, 42, 2); } } 2023
An toàn bảo mật Hệ thống thông tin 22 22 11 2023 Biến đổi dữ liệu
int foobar(int x, int z, int s){ if (s == 1) return (x∗37)%51; int foo(int x) { else if (s == 2) { return x ∗ 7; if (x == z) { }
int x2 = x∗x%51, x3 = x2∗x%51;
int x4 = x2∗x2%51, x8 = x4∗x4%51; void bar(int x, int z) {
int x11 = x8∗x3%51; printf("%i\n", x11); if (x == z) } printf("%i\n", x); } } } int main() { int main(){ int y = 6; int y = 12; y = foo(y); y = foobar(y, 99, 1); bar(y, 42); foobar(y, 36, 2); } } 2023
An toàn bảo mật Hệ thống thông tin 23 23
Biến đổi cấu trúc điều khiển int foo(int x) {
int foobar(int x, int z, int s){ return x ∗ 7;
char ∗ next = &&cell0; } int retVal = 0;
cell0: next = (s == 1) ? &&cell1 : &&cell2; goto ∗ next; void bar(int x, int z) {
cell1: retVal = (x∗37) % 51; goto end; if (x == z)
cell2: next = (s == 2)? && cell3 : && end; goto ∗ next; printf("%i\n", x);
cell3: next = (x == z)? && cell4 : &&end; goto ∗ next; } cell4: {
int x2 = x ∗ x % 51, x3 = x2 ∗ x % 51;
int x4 = x2 ∗ x2 % 51, x8 = x4 ∗ x4 % 51; int main() { int x11 = x8 ∗ x3 % 51; int y = 6; printf("%i\n", x11); goto end; y = foo(y); } bar(y, 42); end: return retVal; } } 2023
An toàn bảo mật Hệ thống thông tin 24 24 12 2023
Các kỹ thuật làm rối mã nguồn
 Tuy nhiên, kẻ tấn công cũng có thể làm rối mã nguồn nhằm mục đích:
 Bảo vệ mã nguồn virus trước các phần mềm diệt virus
 Che giấu phong cách lập trình của bản thân 2023
An toàn bảo mật Hệ thống thông tin 25 25
Các kỹ thuật làm rối mã nguồn
 Kẻ tấn công có thể làm rối mã nguồn nhằm mục đích:
 Bảo vệ mã nguồn virus trước các phần mềm diệt virus
 Che giấu phong cách lập trình của bản thân 2023
An toàn bảo mật Hệ thống thông tin 26 26 13 2023
Các kỹ thuật làm rối mã nguồn
 Kẻ tấn công có thể làm rối mã nguồn nhằm mục đích:
 Bảo vệ mã nguồn virus trước các phần mềm diệt virus
 Che giấu phong cách lập trình của bản thân 2023
An toàn bảo mật Hệ thống thông tin 27 27
Các kỹ thuật chống giả mạo
 Hai giai đoạn của kỹ thuật chống giả mạo:  Phát hiện: 
Phát hiện mã nguồn đã bị thay đổi 
Các biến ở trạng thái bình thường  Xử lý:  Không cho chạy  Gây lỗi  Gọi điện thoại 2023
An toàn bảo mật Hệ thống thông tin 28 28 14 2023
Đóng dấu bản quyền phần mềm
 Chống vi phạm bản quyền bằng kỹ thuật đấu dóng bản
quyền phần mềm (watermarking)
 Nhúng dấu bản quyền vào phần mềm
 Trích dấu bản quyền để kiểm tra 2023
An toàn bảo mật Hệ thống thông tin 29 29
Đóng dấu bản quyền phần mềm 2023
An toàn bảo mật Hệ thống thông tin 30 30 15 2023
Đóng dấu bản quyền phần mềm class Fibonacci {
string COPYRIGHT = "Copyright Alice"; public int fibonacci(int n){ if (n <= 2) return 1; else
return fib(n − 1) + fib(n − 2); } } 2023
An toàn bảo mật Hệ thống thông tin 31 31
Đóng dấu bản quyền phần mềm 2023
An toàn bảo mật Hệ thống thông tin 32 32 16 2023
Đóng dấu bản quyền phần mềm
 Chống vi phạm bản quyền bằng kỹ thuật đấu dóng bản
quyền phần mềm (watermarking)
 Kẻ tấn công có thể tạo dấu bản quyền của chính họ
 Kẻ tấn công mua một số bản quyền phần mềm và so sánh
để phát hiện nơi đặt dấu đóng bản quyền 2023
An toàn bảo mật Hệ thống thông tin 33 33 Bài tập
1. Cho đoạn mã nguồn, hãy tìm cách dịch ngược mã nguồn gốc int x = 42;
if ((x > 12) && !!(x > 12)) {} 2023
An toàn bảo mật Hệ thống thông tin 34 34 17 2023 Bài tập
2. Cho đoạn mã nguồn, hãy tìm cách dịch ngược mã nguồn gốc int i_acbd(int i_eca0) { int i_9dd4 = 42 + i_eca0; return i_9dd4; } int main() { int i_4152 = 2; return i_acbd(i_4152); } 2023
An toàn bảo mật Hệ thống thông tin 35 35 Bài tập
3. Cho đoạn mã nguồn, hãy tìm cách dịch ngược mã nguồn gốc var = 1; switch (var) { case 1 : init; var = 2; break;
case 2 : if (cond) var = 3; else var = 4; break; case 3 : f(); var = 2; break; case 4 : var = 1; end; } 2023
An toàn bảo mật Hệ thống thông tin 36 36 18 2023 Bài tập
4. Cho đoạn mã nguồn, hãy tìm cách dịch ngược mã nguồn gốc var = 1; switch (var) { case 1: init; var = 2; break;
case 2: if (cond) var = 3; else var = 7; break; case 3: f(); var = 4; break;
case 4: if (test) var = 5; else var = 6; break; case 5: stat1; var = 2; break; case 6: stat2; var = 2; break; case 7: var = 1; end; } 2023
An toàn bảo mật Hệ thống thông tin 37 37 Hỏi & Đáp  Cám ơn đã theo dõi 2023
An toàn bảo mật Hệ thống thông tin 38 38 19