2.3.4 Thuật toán RSI (Recursive Shift Indexing)và MDH (Multi-Phase Dynamic Hash)
2.3.5 Một số thuật toán khác
2.3.6 Các kết quả thực nghiệm
Để đánh giá thời gian thực thi và yêu cầu bộ nhớ của các thuật toán với các
hướng tiếp cận khác nhau, chúng tôi đã triển khai cài đặt các thuật toán AC, AC-BM,
SBMH, SBOM, WM, RSI, MDH trên ngôn ngữ lập trình C. Điều kiện thực nghiệm
kiểm chứng trên các máy tính có bộ xử lý Intel Pentium 4 tốc độ 3.0 GHz Dual Core,
bộ nhớ cache 512 KB, Ram dung lượng 2 GB. Số lượng mẫu thực nghiệm là 1000
mẫu, chiều dài các mẫu từ 8 đến 30 ký tự, độ dài chuỗi kiểm tra là 1000 ký tự (trong
đó có 500 ký tự được gieo ngẫu nhiên, sau khi gieo nhẫu nhiên chúng tôi chèn thêm
các ký tự vào cho đủ độ dài 1000). Bảng chữ cái thực hiện là |S|=256.
26 trang |
Chia sẻ: lavie11 | Lượt xem: 559 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Tóm tắt Luận án Nghiên cứu một số kỹ thuật phát hiện giả mạo trên web, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ào việc xây dựng các hệ thống phát hiện xâm nhập.
ii) Nghiên cứu về giả mạo web. Phát triển các thuật toán so khớp có cấu trúc
(đồ thị) vào việc phát hiện các trang web giả mạo.
Với các mục tiêu của luận án như trên, ngoài phần mở đầu, luận án được tổ
chức thành ba chương như sau.
Chương 1: Trình bày tổng quan về xâm nhập mạng và giả mạo trên mạng.
Chương 2: Trình về các thuật toán so khớp đơn mẫu và đa mẫu áp dụng trong
việc phát hiện xâm nhập mạng.
Chương 3: Trình bày về so khớp đồ thị và phát hiện các trang web giả mạo.
Cuối cùng là phần kết luận và hướng phát triển của luận án.
1.5 Các kết quả của luận án
Với mục tiêu áp dụng các thuật toán so khớp trong việc phát triển các hệ thống
phát hiện xâm nhập trái phép, luận án đã đạt được các kết quả như sau:
(i) Phân tích đánh giá về hiệu năng cũng như thời gian thực hiện các thuật toán
so khớp đơn mẫu trên hệ thống phát hiện thâm nhập Snort;
(ii) Đưa ra các cải tiến cho thuật toán so khớp đa mẫu Aho – Corasick bằng
cách sử dụng kỹ thuật nén dòng và bảng chỉ số nhằm nâng cao hiệu quả của
thuật toán, các phân tích và so sánh thực tế nhằm kiểm nghiệm lý thuyết
cũng đã được thực hiện trên hệ thống Snort ;
(iii) Luận án cũng đề xuất một thuật toán so khớp đa mẫu mới bằng cách xây
dựng biểu đồ của các mẫu kết hợp với danh sách liên kết làm giảm thời gian
thực hiện việc so khớp đồng thời đa mẫu. Việc cài đặt thực nghiệm của
thuật toán với trong sự so sánh với một số thuật toán đã tồn tại cũng đã triển
khai trên hệ thống Snort.
Với mục tiêu phát hiện các trang web giả mạo, luận án đã đạt được các kết quả như
sau:
(iv) Đưa ra thuật toán mới dựa trên thuật toán di truyền để so khớp các đồ thị
không chính xác. Thuật toán mới có thể áp dụng đối với lớp đồ thị vô
hướng, có hướng, có trọng số hay gán nhãn.
(v) Áp dụng việc so khớp đồ thị vào việc so khớp các DOM-Tree để phát hiện
các trang web giả mạo.
1.6 Kết chương
Trong chương này, luận án đã trình bày chi tiết việc phát hiện xâm nhập trái
phép và giả mạo trên mạng. Về phát hiện xâm nhập trái phép, luận án đã trình bày lại
các kỹ thuật xâm nhập trái phép hiện đã được sử dụng bởi kẻ tấn công; các giải pháp
kỹ thuật nhằm ngăn chặn các kỹ thuật xâm nhập trái phép được biết; kiến trúc tổng
quát của một hệ thống phát hiện xâm nhập và chi tiết một hệ thống phát hiện xâm nhập
trái phép dựa trên mã nguồn mở Snort – cái sẽ là nền tảng để triển khai thử nghiệm các
7
thuật toán đề xuất trong các chương tiếp theo. Các cách tiếp cận của cộng đồng khoa
học trong nước và trên thế giới cho việc nghiên cứu và phát triển hệ thống phòng
chống xâm nhập được phân tích và trình bày tóm tắt. Dựa vào sự phân tích này, luận
án cũng xác định được mục tiêu thứ nhất của luận án. Tiếp theo, luận án đã trình bày
về vấn nạn giả mạo đặc biệt là giả mạo web. Các cách tiếp cận của cộng đồng khoa
học trong nước và trên thế giới cho việc nghiên cứu và phát triển hệ thống phát hiện
web giả mạo được phân tích và trình bày tóm tắt. Từ đó, luận án cũng đã xác định
được mục tiêu thứ hai.
Chương 2. SO KHỚP TRONG PHÁT HIỆN XÂM
NHẬP MẠNG
2.1 Bài toán so khớp chuỗi
Các thuật toán so khớp chuỗi có thể phân loại theo hai tiêu chí:
- Dựa trên số lượng mẫu, có hai loại: so khớp đơn mẫu (Single Pattern) và so
khớp đa mẫu (Multiple Patterns).
- Dựa trên cơ sở thiết kế thuật toán, có ba loại: so khớp dựa trên tiền tố
(prefix), so khớp hậu tố (suffix) và so khớp thừa số (factor).
Tất cả các thuật toán so khớp chuỗi đều có 2 giai đoạn là: tiền xử lý và tìm
kiếm. Việc đánh giá các thuật toán được thực hiện dựa trên dung lượng bộ nhớ sử
dụng và tốc độ so khớp. Các thuật toán so khớp được phân loại theo cách tiếp cận xây
dựng thuật toán và số lượng mẫu được cho trong hình 2.4.
Thuật toán so khớp đầu tiên được biết đến là Brute ForceError! Reference
source not found..
Void Brute_Force ( char *x, int m, char y, int n)
{
/* Searching */
For ( int j = 0 ; j <= n – m ; j++ )
{
For (int i = 0; i < m && x[i] == y [ y + j ]; i++ )
{
If ( i >= m )
OUTPUT (j);
}
}
}
2.2 Các thuật toán so khớp đơn mẫu
2.2.1 Thuật toán Knuth-Morris-Pratt (KMP)
Thuật toán tính mảng Next như sau:
int* InitNext(char *p,int m)
{ int i,j,*kmpNext;
i = -1; j = 0;
*kmpNext = -1;
while (j < m )
{
while (i > -1)&&( p[i] != p[j])
i = *(kmpNext + i);
i++; j++;
8
if (p[i]== p[j])
*( kmpNext + j) = *( kmpNext + i);
else *( kmpNext + j) = i;
}
return kmpNext;
}
Thuật toán Knuth - Morris – Pratt
int KMP(char *p, char *t)
{ int i, j, M = strlen(p), N = strlen(t);
InitNext(p);
for (i = 0, j = 0; j < M && i < N; i++, j++)
while ((j >= 0) && (t[i] != p[j]))
j = next[j];
if (j == M) return i - M;
else return i;
}
2.2.2 Thuật toán Boyer-Moore (BM)
Phát biểu thuật toán: Thuật toán sẽ lưu cách dịch thứ nhất trong mảng gs kích
thước m + 1 và cách dịch thứ hai được lưu trong mảng bc với kích thước 256 (tương
ứng với 256 ký tự của bảng mã ASCII).
Mảng bc được tính như sau:
int* PreBC (char *x,int m)
{ int i,j,*bc;
for (j=0;j<256;j++)
*(bc[j]) = m;
for (i=0;i<=m-2;i++)
*(bc[x[i]]) = m – i - 1;
return bc;
}
Việc tính mảng gs khá phức tạp, ta tính gián tiếp qua một mảng suff
int* Suffixes (char *x,int m)
{ int f,g,i,*suff;
*(suff + m - 1) = m ;
g = m - 1;
for (i=m-2;i>=0;i--)
{if(( i > g)&& (*(suff+i+m–1–f)!= i–g))
*(suff+i)=min{*(suff+i+m–1–f),i–g};
else
{if (i < g) g = i;
f= i;
while ((g>=0) && (x[g]==x[g+m–1–f])) g--;
*(suff+i) = f – g;
}
}
return suff;
}
int* PreGS (char *x,int m)
{ int *suff,*gs,i,j;
9
suff= Suffixes(x,m);
for (i=0;i<m;i++) *(gs+i)=m;
j=0;
for (i=m-1;i>=-1;i--)
if ((i==-1)||(*(suff+i)==i+1))
while (j<m-1-i)
{if (*(gs+j)==m) *(gs+j)= m-1–i;
j++; }
for (i=0;i<=m-2;i++)
*(gs+m-1– *(suff+i)) = m–1-i;
return gs;
}
Thuật toán Boyer – Moore
int Boyer_Moore(char *x,int m,char *y,int n)
{ int *gs, *bc, i, j, kq;
gs= PreGS(x,m);
bc=PreBC(x,m);
j= 0;
while (j<=n-m)
{ i= m -1;
while ((i >=0)&&(x[i]==y[i + j])) i--;
if (i<0)
{ kq=j; j=j+gs[0];}
else j=j+max{gs[i],bc[y[i+j]] – m +i +1};
}
return kq;
}
2.2.3 Thuật toán Karp-Rabin
Phát biểu thuật toán
int ReHash(int a,int b,int h,int d)
{
return((h–a*d) << 1 ) + b;
}
intKarp_Rabin(char *x,int m,char *y,int n)
{ int d,hx,hy,i,j,kq;
d= 1;
for (i=1;i<=m-1;i++)
d=d<<1;
hx=hy=0;
for (i=0;i<=m-1;i++)
{
hx= ((hx<<1) + x[i]);
hy= ((hy<<1) + y[i]);
}
if ((hx == hy)&&(x== y[0 . . m – 1])) kq=0;
j= m;
while (j < n)
{
10
hy = ReHash(y[j–m],y[j],hy,d);
if ((hx==hy)&&(x==y[j–m+1..j])) kq=(j – m + 1);
j++;
}
return kq;
}
2.2.4 Thuật toán Boyer-Moore Horspool (BMH)
2.2.5 Thuật toán BDM và BOM
2.3 Các thuật toán so khớp đa mẫu
2.3.1 Thuật toán Aho-Corasick (AC)
Algorithm 1 Aho-Corasick Algorithm
1: procedure AC (y,n,q0)
Input
y ← array of n bytes representing the text input
n ← integerrepresenting the text leght
q0← initial state
2: state ← q0
3: For i = 1 → n do → Matching
4: While g(state, y[i]) = fail do → whileg(state, y[i]) is
undefined
5: state ← f(state) → use the failure function
6: end while
7: state←g(state, y[i])
8: Ifo(state) ≠ then
9: output I → This an accepting state, i.e. state
A
10: end if
11:end for
12:end procedure
2.3.2 Thuật toán Commentz-Walter (CW)
1. Procedure CW(y,n,m,p,root)
Input:
y ← array of n bytes representing the text input
n ← integer representing the text length
m ← array of keyword lengths
p ← number of keywords
root ← root node of the trie
2. v ← root The current node
3. i ← min {m[0], m[1], . . . , m[p-1]} i point to the current position in
y
4. j ← 0 j indicates depth of the current
node v
5. while i ≤ n do
6. while v has child v’ labeled y[i – j] do
7. v ← v’
8. j ← j + 1
11
9. if out(v) ≠ Ø then
10. Output i – j Path from v to root matches y[i-j] to
y[i]
11. end if
12. end while Shifting
13. i ← i + min {shift2(v), max { shift1(v), char(y[ i - j] – j – 1}}
14. j ← 0
15. end while
16. end procedure
2.3.3 Thuật toán Wu & Manner (WM)
Algorithm 3 Wu and Manner Algorithm
procedure WM (y,n,B, B’, SHIFT, HASH, PREFIX, PAT_POINT)
Input
y ← array of n bytes representing the text input
B ← integer representing the suffix block length
B’ ← integer representing the prefix block lenght
SHIFT ← SHIFT table (see description above)
HASH ← HASH table (see description above)
PREFIX ← PREFIX table (see description above)
PAT_POINT ← table of pointers to keywords (like our x it has m keywords)
m ← min {length of all keywords} minlen
i ← m-1
While i ≤ n do → Matching
h ← hash (y[i – B + 1], , y[i]) → hash over B bytes back from index i in
y
shift ← SHIFT[h]
If shift = 0 then → Suffix block matches
text_prefix ← hash(y[i – m + 1], . . . , y [i – m + 1+ B’])
p ← HASH[h] → a C style pointer
p_end ← HASH[h + 1] → a C style pointer
while p < p_end do→ Matching
if text_prefix = PREFIX[p] then → Prefix matches
px ← PAT_POINT[p] → Pointer to the current
keyword
len ← length of px → Length of current keyword
j ← 0
while j < len and y[i –len + 1 + j] = px[j] do
j ← j + 1
end while
if j ≥ len then
output i – len + 1
end if
end if
p ← p + 1
end while
i ← i + 1 → Shift only by one place
else
i ← i + shift → Skip part of the text
end if
12
end while
end procedure
2.3.4 Thuật toán RSI (Recursive Shift Indexing)và MDH (Multi-Phase Dynamic
Hash)
2.3.5 Một số thuật toán khác
2.3.6 Các kết quả thực nghiệm
Để đánh giá thời gian thực thi và yêu cầu bộ nhớ của các thuật toán với các
hướng tiếp cận khác nhau, chúng tôi đã triển khai cài đặt các thuật toán AC, AC-BM,
SBMH, SBOM, WM, RSI, MDH trên ngôn ngữ lập trình C. Điều kiện thực nghiệm
kiểm chứng trên các máy tính có bộ xử lý Intel Pentium 4 tốc độ 3.0 GHz Dual Core,
bộ nhớ cache 512 KB, Ram dung lượng 2 GB. Số lượng mẫu thực nghiệm là 1000
mẫu, chiều dài các mẫu từ 8 đến 30 ký tự, độ dài chuỗi kiểm tra là 1000 ký tự (trong
đó có 500 ký tự được gieo ngẫu nhiên, sau khi gieo nhẫu nhiên chúng tôi chèn thêm
các ký tự vào cho đủ độ dài 1000). Bảng chữ cái thực hiện là |S|=256.
Kết quả thu được đánh giá theo tiêu chí về thời gian thực thi như hình 2.8
Hình 2.1 Đánh giá thời gian thực thi
của các thuật toán
Hình 2.2 Đánh giá yêu cầu bộ
nhớ của các thuật toán
2.3.7 Phân tích và đánh giá các thuật toán so khớp chuỗi
2.4 Ứng dụng so khớp đa mẫu trong phát hiện thâm nhập mạng
2.4.1. Biểu diễn không gian lưu trữ và tối ưu hóa bằng kỹ thuật nén dòng
Mô hình NFA của AC biểu diễn tập mẫu P={hers, she, his, he} được cho trong hình
2.13.
(a) Hàm Goto
i 1 2 3 4 5 6 7 8 9
f(i) 0 0 0 7 0 7 0 1 2
13
(b) Hàm Failure
i 2 9 6 4
Output(i) he she, he his hers
c) Hàm Output
Trạng
thái
Đầu vào
e h i r s
0 0 1 0 0 7
1 2 0 5 0 0
2 0 0 0 3 0
3 0 0 0 0 4
5 0 0 0 0 6
7 0 8 0 0 0
8 9 0 0 0 0
(d) Ma trận chuyển cho hàm Goto
Hình 2.3 Không gian trạng thái của AC với tập mẫu P
Rõ ràng, khi tập mẫu lớn với nhiều mẫu thì số trạng thái sẽ tăng lên rất nhanh.
Thêm nữa, chúng ta thấy trong ma trận trạng thái của NFA có rất nhiều thành phần có
giá trị 0. Do vậy, ý tưởng chính ở đây là sử dụng các kỹ thuật nén dòng (CSR:
Compressed Row Storage) Error! Reference source not found. để giảm bớt không
gian lưu trữ. Với tập mẫu P ở trên, không gian trạng thái của AC sau khi sử dụng kỹ
thuật CSR được trình bày trong bảng 3.
Bảng 1 : Nén ma trận chuyển hàm Goto với CSR
Giá trị 1 7 2 5 3 4 6 8 9
Cột 2 5 1 3 4 5 5 2 1
Dòng 1 1 2 2 3 4 5 6 7
Bảng 2 : Nén hàm failure của AC dùng bảng chỉ số
Giá trị 7 7 1 2
Chỉ số 4 6 8 9
(a) Nén hàm Failure dùng bảng chỉ số 2 chiều
8 4 7 6 7 8 1 9 2
(b) Nén hàm Failure dùng bảng chỉ số 1 chiều
Số lượng mục 8
Chỉ số bắt đầu 4
Giá trị 7 0 7 0 1 2
Dải lưu trữ 8 4 7 0 7 0 1 2
(c) Nén hàm Failure dùng bảng chỉ số lưu trữ
Chúng ta hoàn toàn có thể áp dụng cách lưu trữ này cho mỗi dòng trong ma trận
để tối ưu không gian trạng thái, chúng ta biểu diễn bảng dịch chuyển bằng danh sách
các con trỏ vectơ trạng thái.
2.4.2. Cải tiến giai đoạn tiền xử lý của AC
Do otomat đơn định DFA (Deterministic Finite Automata) yêu cầu xác định
duy nhất trạng thái tiếp theo nào ứng với mỗi ký tự vào nên cho hiệu quả thực thi tốt
14
hơn nên trong Snort chúng tôi khai báo thuật toán AC sử dụng DFA. Mô tả cấu trúc dữ
liệu danh sách liên kết của DFA như sau:
struct DFA {
struct State *NextState[256];
struct State *Failurelist;
struct Matched *Matchlist; }
Thuật toán 1. Xây dựng ma trận chuyển trạng thái dựa trên DFA ứng với tập
mẫu P sử dụng cấu trúc bảng chỉ số ký tự.
INPUT: Tập mẫu P có n mẫu.
OUTPUT: Bảng chuyển trạng thái của DFA chấp nhận tất cả các mẫu trong P.
DFA dfaBuild(Patterns P[], int n){
DFA dfa = new DFA();
String w;
State *state, *NextState;
//Cấp phát trạng thái mới
state = dfa.newState();
//Thiết lập trạng thái ban đầu
dfa.setStartState(state);
for (int i = 0; i < n; i++){
w = P[i]; //Xử lý từng mẫu P[i]
state = dfa.getStartState();
for (int j = 0; j < w.length(); i++){
*NextState = dfa.getTransition(*state, w(j))
if (!NextState.isValid()){
// Loại bỏ các trạng thái 0
*NextState = dfa.newState();
//Cấp phát trạng thái mới
// Thêm liên kết chuyển trạng thái các nút với ký tự vào w(j)
dfa.addTransition(*state,w(j),*NextState);}
*state = *NextState; }
dfa.addMatchlist(*state);}
return dfa;}
Trong đó, các hàm addMatchlist, addTransition có nhiệm vụ thêm
các trạng thái mới vào danh sách NextStatevàMatchlist ứng với ký tự đang xét
w(j) của mẫu P[i].
Thuật toán 2. Xây dựng bảng chỉ số con trỏ failure ứng với DFA
INPUT: DFA ứng với tập mẫu P được xây dựng trong thuật toán 1.
OUTPUT: Danh sách các trạng thái lỗi lưu trữ trong *failure.
Void FailureBuild(DFA dfa){
*dfa.Failurelist = new Failure();
Queue q = new Queue();
State state, nextState, s; char ch;
q.add(dfa.getStartState());
*dfa.Failurelist.setFailure(dfa.getStartState(), null);
while (! q.isEmpty()) {
state = q.remove();
for (int i = 0; i < 256; i++) {
ch = *dfa.Nextstate(i);
nextState=dfa.getTransition(state, ch);
if (nextState.isValid()){
s = *dfa.Failurelist.getFailure(state);
while((s!=null)&&!dfa.getTransition(s,ch).isValid()){
s = *dfa.Failurelist.getFailure(s);}
15
if (s ! = null)
{*dfa.Failurelist.setFailure(nextState, dfa.getTransition(s,ch));}
else {*dfa.Failurelist.setFailure(nextState, dfa.getStartState());}
if (f.getFailure(nextState).isMatchlist()){
dfa.addMatchlist(nextState);}
q.add(nextState);}}}}
a) Không gian lữu trữ của thuật toán AC gốc
b) Không gian lữu trữ của thuật toán AC khi tối ưu
Hình 2.4 Không gian trạng thái của AC trước và sau tối ưu
Cải tiến giai đoạn tìm kiếm của thuật toán AC
Thuật toán 3. Tìm kiếm mẫu trên bảng chỉ số ký tự
INPUT: Tập mẫu P có n mẫu. Gói tin cần kiểm soát M.
OUTPUT: Danh sách các mẫu trong P xuất hiện trong nội dung gói tin M
Results Search(Patterns P, Message M){
DFA dfa = dfaBuild(P, n);
FailureBuild(DFA dfa)
State state, nextState; char ch;
Results r = new Results();
state = dfa.getStartState();
while (! M.eof()){
ch = M.getChar();
nextState = dfa.getTransition(state,ch);
if (!NextState.isValid()){
nextState = *dfa.Failurelist.getFailure(state);
while ((nextState!=null) && ! dfa.getTransition(nextState,ch).isValid())
{nextState=*dfa.Failurelist.getFailure(nextState);}
if (nextState ! = null) {
nextState = dfa.getTransition(s,ch);}
else {
nextState = dfa.getStartState();}}
if (nextState.isMatchlist()) {
r.add(M.getPosition(),*dfa.Matchlist);}
state = *dfa.NextState[state.getChar];}
return r;}
2.4.3. Thực nghiệm và đánh giá
16
Bảng 3 : Thống kê không gian trạng thái thực nghiệm trên Snort với các tập luật
chuẩn
Tập luật
Số
lượng
mẫu
Số
lượng
ký tự
Thuật toán AC gốc Thuật toán AC cải tiến
Tỷ lệ % tổng
số trạng thái
rút gọn được
Số lần
chuyển
trạng thái
Tổng số
trạng
thái
Số lần
chuyển trạng
thái
Tổng số
trạng
thái
Ftp 96 466 402 406 391 375 7.63 %
Smtp 104 989 715 719 613 602 16.27 %
Web-misc 160 2.052 1.420 1.425 1.318 1.259 11.65 %
Oracle 337 11.128 6.793 6.804 4.512 3.957 41.84 %
Hình 2.5 So sánh không gian bộ nhớ của thuật toán AC với các cách tiếp cận lưu trữ
trạng thái khác nhau.
Trong việc làm này, chúng tôi đã phân tích kỹ thuật nén dòng để tối ưu không
gian trạng thái các thuật toán so khớp chuỗi AC dùng bảng chỉ số thay cho bảng chỉ số
trạng thái và thử nghiệm trên hệ thống phát hiện xâm nhập mạng Snort 2.4.2. Các kết
quả thực nghiệm cho thấy thuật toán mà chúng tôi đề xuất cho kết quả bằng và tốt hơn
thuật toán AC gốc và một số thuật toán AC đã được cải tiến AC-OPT Error!
Reference source not found. và AC-RDFError! Reference source not found.. Việc
hiểu rõ cấu trúc biểu diễn không gian trạng thái của thuật toán sẽ giúp chúng ta xây
dựng các hệ thống an ninh mạng đạt hiệu quả cao trong thực tế đáp ứng được sự phát
triển nhanh và đa dạng của các mẫu virus.
2.5 Thuật toán đề xuất
Để mô phỏng các quá trình của thuật toán, chúng ta quan tâm đến ví dụ sau:
Giả sử, chúng ta có tập mẫu P = {"search", "ear", "arch", "chart"}
Và dữ liệu đầu vào là xâu T= “strcmatecadnsearchof”.
2.5.1 Giai đoạn tiền xử lý
Chúng tôi xây dựng một biểu đồ cấu trúc để biểu diễn tập mẫu P. Biểu đồ cấu trúc
G có n mức (n là độ dài của mẫu dài nhất trong tập mẫu P), tại mỗi mức i (chẳng hạn)
chúng tôi chỉ phải giữ lại các ký tự khác nhau thứ i trong mỗi mẫu của tập P. Biểu đồ
cấu trúc của tập mẫu P = {"search", "ear", "arch", "chart"} được chỉ ra trong hình
2.19:
17
Hình 2.6 Kết quả giai đoạn tiền xử lý trong thuật toán của chúng tôi
Rõ ràng, với cách tiếp cận của chúng tôi, không gian lưu trữ sẽ được giảm do
chỉ lưu trữ các ký tự khác nhau tại mỗi mức.Yêu cầu về bộ nhớ trong thuật toán của
chúng tôi ở giai đoạn này là bằng hoặc nhỏ hơn không gian nhớ của DFA và hàm
trạng thái và hàm goto trong các thuật toán AC, WM, CW. Thêm nữa, thuật toán của
chúng tôi không sử dụng các bảng SHIFT và HASH và do đó giảm thời gian xây dựng
các bảng và không gian lưu trữ của các bảng này.
2.5.2 Giai đoạn tìm kiếm
Để phân tích quá trình tìm kiếm so khớp, chúng tôi giả sử đầu vào là xâu T=
“strcmatecadnsearchof”. Quá trình tìm kiếm của thuật toán AC được thực hiện thông qua
phép chuyển trạng thái của otomat nếu ký tự đang xét là khớp và sẽ làm thay đổi trạng thái
dịch chuyển, ngược lại sẽ kiểm tra hàm failure để tính bước dịch chuyển tiếp theo.
Trong pha tìm kiếm so khớp trong thuật toán của chúng tôi. Chúng tôi sử dụng
một danh sách các con trỏ để tối ưu hóa không gian. Số lượng tối đa các thành phần
trong con trỏ là bằng số lượng các mẫu (bằng lực lượng của tập P). Chúng tôi khởi tạo
giá trị các thành phần này của con trò bằng độ dài tương ứng của các mẫu trong tập
mẫu. Cấu trúc của một con trỏ được chỉ ra như sau:
Pi 6 3 4 5
Trong quá trình duyệt trên dữ liệu vào T, tại mỗi bước chúng tôi khởi tạo một
con trỏ Pi (i tương ứng với vị trí của ký tự hiện hành đang được xét trong T). Nếu ký tự
hiện hành trùng khớp với ký thứ j trong mẫu thứ k thì thành phần thứ k trong con trỏ Pj
(lưu ý là j luôn luôn nhỏ hơn hoặc bằng i) tương ứng sẽ được giảm đi 1. Các con trỏ sẽ
bị xóa nếu tại bước thứ i mà không có bất cứ thành phần nào của nó bị giảm đi. Ngược
lại, chúng sẽ được duy trì trong các bước duyệt tiếp theo. Khi có một thành phần của
một con trỏ nào đó mà giá trị của nó giảm đến 0 thì mẫu tương ứng được tìm thấy. Các
thao tác tìm kiếm và so khớp của thuật toán được mô tả như sau (hình 2.21)
18
Hình 2.7 Giai đoạn tìm kiếm và so khớp trong thuật toán chúng tôi đề xuất
Số các bước cần thực hiện trong thuật toán của chúng tôi bằng với chiều dài của
xâu vào T. Với một xâu T độ dài n, độ dài của mẫu dài nhất L, và m là số lượng mẫu.
Trong trường hợp xấu nhất, thời gian thực hiện của thuật toán là O(n*m*L). Mặc dù
vậy, các trường hợp trung bình là thường bé hơn nhiều vì rất ít khi có m con trỏ Pi tồn
tại đồng thời.
2.5.3 Thuật toán đề xuất
Algorithm 4. Our Algorithm
1: Procedure DNL (T, n, m, p, G)
Input:
T ← array of n byte representing the text input
n ← integer represent the text length
P[j] ← array of patterns
P0← array of keyword lengths P0[j] (j=1m)
m ← number of patterns
G ← graph of pattern P
S ←Set of Pi
2: S = ∅;
3: for i=1 → n do
4: Init pointer Pi = P0;
5: S = S U {Pi}
6: If (T[i] in G) and (PjinS) then
7: Pj[position of T[i] in P[j]] = Pj[position of T[i] in P[j]] -1;
8: If (Pj[k] = 0) then
9: Output P[k] detected;
10: Remove Pj;
11: endif
12: If (PjinS) and (Pjnot change) then Remove Pj
13: endif
19
14: endif
15: end for
16: End procedure
2.5.4 Các kết quả thực nghiệm
Hình 2.8 So sánh về thời gian thực hiện
khi cố định số lượng mẫu
Hình 2.9 So sánh về bộ nhớ sử dụng khi cố
định số lượng mẫu
2.6 Kết chương
Trong chương này, luận án đã trình bày chi tiết các thuật toán so khớp đơn mẫu
như Knuth-Morris-Pratt, Boyer-Moore-Horspool, Karp-Rabin, Backward Dawg
Matching và Backward Oracle Matching sử dụng trong hệ thống phát hiện xâm nhập
Snort verion 2.0. Sau đó, luận án cũng trình bày trong chi tiết các thuật toán so khớp
đa mẫu được sử dụng trong hệ thống Snort version 2.6. Sự đánh giá so sánh bằng lý
thuyết và thực nghiệm của các thuật toán này cũng được triển khai. Tiếp theo luận án
đề xuất một cải tiến cho thuật toán Aho-Corasick bằng kỹ thuật nén dòng và bảng chỉ
số. Các thực nghiệm chỉ ra thuật toán cải tiến đã đạt được hiệu năng tốt hơn thuật toán
ban đầu khi thực nghiệm trên hệ thống Snort. Cuối cùng, luận án trình bày đề xuất
thuật toán mới cho so khớp đa mẫu dựa trên kỹ thuật xây dựng biểu đồ cấu trúc các
mẫu kết hợp với danh sách liên kết. Các kết quả thực nghiệm chỉ ra thuật toán được đề
xuất có hiệu quả tốt hơn một số thuật toán hiện hành cả về không gian và thời gian.
Chương 3. SO KHỚP ĐỒ THỊ VÀ PHÁT HIỆN CÁC
WEBSITE GIẢ MẠO
3.1. Cấu trúc DOM-Tree
3.1.1. Khái niệm
3.1.2. Xây dựng cây DOM
Xây dựng cây DOM từ những trang Web đầu vào là một bước cần thiết trang
nhiều giải thuật trích xuất dữ liệu Error! Reference source not found.. Có hai
phương pháp cơ bản để xây dựng các cây DOM là Sử dụng các thẻ riêng biệt Sử dụng
các thẻ và các hộp ảo (visual cue)
3.2. So khớp đồ thị
Một trang Web (hay trang HTML) có thể được biểu diễn dưới dạng một DOM
– Tree và ngược lại người ta có thể cập nhật các trang Web dễ dàng bằng việc sửa đổi
DOM-Tree của nó. Do vậy, việc xem xét hai trang web có giống nhau hay không,
chúng ta hoàn toàn có thể so sánh xem hai DOM-Tree tương ứng của chúng. Mặt khác,
20
cây chỉ là một dạng đặc biệt của đồ thị. Vì vậy, tổng quát hơn trong phần này chúng tôi
sẽ nghiên cứu bài toán so khớp đồ thị.
3.2.1. Một số khái niệm về đồ thị
3.2.2. Bài toán so khớp đồ thị
3.2.3. Một số cách tiếp cận
3.2.3.1. Một số định nghĩa và ký hiệu :
Cho đồ thị gán nhãn G ={V, E, LV, LE, } với |V| =n. Đồ thị G được biểu diễn
bởi ma trận kề M = (mi,j)n*n, i, j = , trong đó mii = và mi,j= với i
j ( V).
Ma trận M không phải là ma trận duy nhất biểu diễn đồ thị G. Nếu ma trận M
biểu diễn đồ thị G thì các ma trận hoán vị của M cũng biểu diễn cho đồ thị G Error!
Reference source not found..
3.2.3.2. Tìm đẳng cấu đồ thị và đẳng cấu đồ thị con.
3.2.3.3. Thuật toán SI – COBRA cho bài toán so khớp đồ thị gán nhãn.
Ý tưởng : Cho hai đồ thị gán nhãn G và G’ (tương ứng với hai đồ thị mô hình
GM và đồ thị dữ liệu GD trong mục phát biểu bài toán) ta phải đi tìm một đồ thị con S
của G sao cho S G. Bài toán này được gọi là bài toán tìm đẳng cấu đồ thị con.
3.2.4. Thuật toán di truyền cho bài toán so khớp đồ thị
Thuật toán di truyền là một trong những thuật toán tiến hóa, hình thành dựa trên
quan niệm cho rằng, quá trình tiến hóa tự nhiên là quá trình hoàn hảo và hợp lý nhất,
tự nó đã mang tính tối ưu..
Như đã nói ở mục trên, với hai đồ thị GM = (VM , EM) và GD= (VD,ED) với |VM| =
m, |VD| = n (m < n) ta phải đi tìm một ánh xạ f: VM VD phù hợp nhất biến mỗi cặp
đỉnh của đồ thị GM thành một cặp đỉnh của đồ thị GD. Nếu tổng số cặp đỉnh thỏa mãn
ánh xạ f càng lớn thì ánh xạ f càng phù hợp.
Ta nói f là song ánh nếu và chỉ nếu với mỗi cặp đỉnh (u EM , cho ta cặp
(f(u),f(v)) ED. Như vậy cung (f(u),f(v)) là ảnh của cung (u,v) trong đồ thị GD.
Mã giã của một thuật toán di truyền áp dụng cho bài toán so khớp đồ thị nh
Các file đính kèm theo tài liệu này:
- tt_nghien_cuu_mot_so_ky_thuat_phat_hien_gia_mao_tren_web_8465_1921032.pdf