Bảng các dấu đặc trưng diễn đạt mối quan tâm an ninh

Một phần của tài liệu Phương pháp hướng đối tượng và phân tích thiết kế an ninh hệ thống (Trang 52)

4.2.1. Đưa các dấu đặc trưng an ninh vào biểu đồ trường hợp sửdụng dụng

Các dấu đặc trưng sẽ được ghi trên đường nối giữa một tác nhân và một trường hợp sử dụng. Ý nghĩa của dấu đặc trưng đó là khi tác nhân thao tác với trường hợp sử dụng đó thì phát sinh mối quan tâm về an ninh được ghi trên dấu đặc trưng. Sau khi thêm vào các dấu đặc trưng biểu diễn mối quan tâm về an ninh, ta có các biểu đồ hình 4.1, 4.2, 4.3, 4.4

Với các biểu đồ trường hợp sử dụng đã thêm các dấu đặc trưng này, ta có thể nhận biết được, khi tác nhân tham gia vào trường hợp sử dụng nào đó, sẽ phát sinh mối quan ngại nào về vấn đề an ninh đang được đề cập.

4.2.2. Đưa các dấu đặc trưng an ninh vào biểu đồ hoạt độngSau khi đã đưa các dấu đặc trưng an ninh vào biểu đồ trường hợp sử dụng, ta tiếp tục Sau khi đã đưa các dấu đặc trưng an ninh vào biểu đồ trường hợp sử dụng, ta tiếp tục triển khai việc đưa các dấu đặc trưng an ninh vào biểu đồ hoạt động. Từ hình 4.5 tới ?? là các biểu đồ hoạt động có thêm các đấu đặc trưng an ninh. Từ các biểu đồ này, chúng ta biết rằng cần phải đưa các mối quan tâm an ninh vào các hoạt động nào của tác nhân với hệ thống.

4.2.3. Định nghĩa chính sách an ninh

Sau khi đặt ra các mối quan tâm an ninh, hệ thống phải định nghĩa các mối quan tâm đó được xử lý như thế nào, khi nào được phép và khi nào không cho phép. Các chính sách an ninh sẽ được thể hiện thành các lớp kiểm tra an ninh. Ta định nghĩa chính sách an ninh như bảng 4.3.

Phương pháp hướng đối tượng và phân tích thiết kế anh ninh hệ thống 49

Phương pháp hướng đối tượng và phân tích thiết kế anh ninh hệ thống 51

Hình 4.4: Biểu đồ trường hợp sử dụng cho khối RE đã thêm các dấu đặc trưng an ninh

Các mức kiểm soát được định nghĩa như sau:

• Mức 0: kiểm tra trong phiên làm việc, có nghĩa là nếu đúng người dùng đó được phép

làm như vậy thì sẽ cho phép.

• Mức 1: kiểm tra mối quan hệ, có nghĩa là phải đối chiếu với chứng từ thể hiện mối

quan hệ giữa hai công ty.

• Mức 2: kiểm tra trên chứng từ nối, có nghĩa là phải dùng một chứng từ nối (cụ thể ở

# AC_SA AC_CN AC_CF AC_CR AC_SP AC_SF

«sec:se01» 0 0 0 0 0 0 «sec:se02» 0 «sec:se03» 0 0 0 0 0 0 «sec:se04» 1 1 1 «sec:se05» 2 2 «sec:se06» 0 0 0 0 0 0

Phương pháp hướng đối tượng và phân tích thiết kế anh ninh hệ thống 53

Phương pháp hướng đối tượng và phân tích thiết kế anh ninh hệ thống 55

đây là kế hoạch vận chuyển) để xác định cho phép hay không cho phép thao tác.

Bảng định nghĩa chính sách an ninh (bảng 4.3) cần định nghĩa bằng ngôn ngữ OCL (Object Constraint Language). Tuy nhiên, do điều kiện thời gian còn hạn chế, cũng như trong thực tế dự án thì OCL rất khó sử dụng với các lập trình viên hoặc thiết kế viên trình độ trung bình, nên chúng không đi sâu diễn đạt bảng trên bằng OCL. (Điều này có thể tiếp tục nghiên cứu sau)

4.2.4. Thiết kế lớp diễn đạt mối quan tâm an ninh

Sau khi đã biểu diễn tất cả các mối quan tâm an ninh trên các biểu đồ hoạt động và biểu đồ trường hợp sử dụng, các biểu đồ trên sẽ được chuyển sang đội thiết kế. Lúc này, đội thiết kế có trách nhiệm chuyển các mối quan tâm về an ninh thành thiết kế lớp và được đưa vào chương trình.

Trong giai đoạn thiết kế, chúng ta đã có biểu đồ triển khai (hình 3.11), và sử dụng công nghệ Java AOP (aspect oriented programming). Biểu đồ lớp được thiết kế trong hình 4.8

Dựa trên đặc tả các dấu đặc trưng an ninh đã chỉ ra trong các biểu đồ trường hợp sử dụng và biểu đồ miêu tả trường hợp sử dụng, trong biểu đồ lớp (hình 4.8), ta định nghĩa một giao diện chung SecurityConcernable (các mối quan tâm an ninh), tiếp theo định nghĩa lớp AbstractSecurityGuard để thể hiện một cài đặt chung về các kiểm tra an ninh. Các lớp kế thừa thể hiện các bảo vệ cụ thể cho từng mối quan tâm đã đựơc phân tích ở trên, theo tên của mối quan tâm an ninh tương ứng: SE01_SelfPrivacyGuard,

SE02_UserPrivacyGuard, SE03_CompanyPrivacyGuard,

SE04_RelatedCompanyAccessGuard,

SE05_UnrelatedCompanyAccessGuard, SE06_DeleteGuard.

4.3. Giải pháp cài đặt mối quan tâm an ninh

4.3.1. Giới thiệu về công nghệ AOP và Java annotation

Lập trình hướng khía cạnh,AOP (aspect oriented programming) là một phương pháp tiếp cận lập trình trong đó các mối quan tâm được chia tách riêng biệt và được đưa vào chương trình chính thông qua các điểm giao (join point). AOP có rất nhiều ứng dụng trong (adsbygoogle = window.adsbygoogle || []).push({});

Phương pháp hướng đối tượng và phân tích thiết kế anh ninh hệ thống 57

lập trình hiện đại.

Công nghệ AOP cho phép chúng ta xen các xử lý ở một đơn thể ngoài (aspect module) vào trong luồng xử lý của một đơn thể khác. Việc trình bày đầy đủ về AOP nằm ngoài phạm vi luận văn này, nên chúng ta chỉ xem xét qua một ví dụ.

Trong một hệ thống ngân hàng, luồng xử lý chính của đơn thể chuyển tiền là:

1. kiểm tra số tồn

2. thực hiện trừ số ở tài khoản nguồn; và

3. thực hiện cộng số ở tài khoản đích

Một ví dụ mã chương trình là 4.1:

Ví dụ mã 4.1: Thực hiện chuyển khoản

1 void t r a n s f e r ( Account fromAcc , Account toAcc , i n t amount )

2 throws E x c e p t i o n {

3 i f ( fromAcc . g e t B a l a n c e ( ) < amount ) {

4 throw new I n s u f f i c i e n t F u n d s E x c e p t i o n ( ) ;

5 }

6 fromAcc . withdraw ( amount ) ;

7 toAcc . d e p o s i t ( amount ) ;

8 }

Tuy nhiên, bên cạnh luồng xử lý chính trên, có rất nhiều thao tác khác phải thực hiện, ví dụ đơn giản là ghi nhật ký, hoặc đảm bảo giao dịch không bị ngắt quãng. Ví dụ: sau khi thực hiện kiểm tra và trừ ở tài khoản nguồn thành công, đột nhiên hệ thống bị lỗi, không thể cộng ở tài khoản đích, kết quả là một số tiền bị mất ở tài khoản nguồn mà không thấy ở tài khoản đích.

Nếu sử dụng kỹ thuật lập trình bình thường, chúng ta phải xen vào các đoạn mã thực hiện giao dịch, quản lý giao dịch, và phục hồi giao dịch nếu gặp lỗi, như ví dụ 4.2.

Ví dụ mã 4.2: Thực hiện chuyển khoản có quản lý giao dịch

1 void t r a n s f e r ( Account fromAcc , Account toAcc , i n t amount )

2 throws E x c e p t i o n {

3 t r a n s a c t i o n M a n a g e r . b e g i n ( ) ;

Phương pháp hướng đối tượng và phân tích thiết kế anh ninh hệ thống 59

5 throw new I n s u f f i c i e n t F u n d s E x c e p t i o n ( ) ;

6 }

7 try{

8 fromAcc . withdraw ( amount ) ;

9 toAcc . d e p o s i t ( amount ) ; 10 }catch( E x c e p t i o n e ) { 11 t r a n s a c t i o n M a n a g e r . r o l l b a c k ( ) ; 12 } 13 t r a n s a c t i o n M a n a g e r . commit ( ) ; 14 }

Trong ví dụ mã 4.2, người lập trình phải tự lo việc thêm các đoạn quản lý giao dịch, và nếu người lập trình quên thì việc kiểm thử cũng rất khó để phát hiện ra lỗi này. Ngoài ra, để cho người lập trình thêm các mã quản lý giao dịch vào chương trình, thì ở mức phân tích và mức thiết kế, người phân tích, thiết kế phải đề cập ngay khía cạnh kỹ thuật này vào trong bản phân tích, thiết kế. (adsbygoogle = window.adsbygoogle || []).push({});

Lập trình hướng khía cạnh (AOP) cho phép ta giải quyết bài toán quản lý giao dịch và các bài toán tương tự, một cách toàn cục, mà không phải thêm vào các đoạn mã rải rác đâu đó trong chương trình. Xét về mặt nghiệp vụ chính của chương trình chuyển tiền, việc đảm bảo giao dịch thành công là một nhiệm vụ của hệ thống nền tảng (framework), chứ không phải của chương trình.

Để giải quyết việc quản lý giao dịch trên, ta sử dụng công nghệ AOP và đóng gói tất cả các lớp xử lý nghiệp vụ thành một giao dịch (transaction). Các lớp thể hiện nghiệp vụ sẽ kế thừa từ lớp AbstractBLogic (business logic) và lớp này sẽ khai báo giao dịch bằng annotation, như ví dụ mã 4.3.

Ví dụ mã 4.3: Định nghĩa lớp trừu tượng khai báo giao dịch

1 @ T r a n s a c t i o n a l ( r o l l b a c k F o r=j a v a . l a n g . E x c e p t i o n .c l a s s}

2 abstract c l a s s A b s t r a c t B L o g i c {

3 }

Như vậy, khi một lớp kế thừa từ lớp AbstractBLogic thì đối tượng của lớp đó đã được đặt vào bên trong một giao dịch. Và khi có một ngoại lệ (exception) xảy ra thì nền tảng quản

lý giao dịch sẽ tự động hủy giao dịch (rollback). Cụ thể ta có ví dụ mã 4.4.

Trong ví dụ mã 4.4, nội dung của mã không có gì thay đổi, ngoài việc kế thừa lớp xử lý giao dịch từ AbstractBLogic để giúp cho nền tảng AOP có thể xen vào các mã có thể xen vào các mã quản lý giao dịch.

Ví dụ mã 4.4: Thực hiện chuyển khoản quản lý giao dịch qua AOP

1 c l a s s B a n k T r a n s f e r B L o g i c extends A b s t r a c t B L o g i c {

2 public void e x e c u t e ( Account fromAcc , Account toAcc ,

3 i n t amount ) throws E x c e p t i o n {

4 i f ( fromAcc . g e t B a l a n c e ( ) < amount ) {

5 throw new I n s u f f i c i e n t F u n d s E x c e p t i o n ( ) ;

6 }

7 fromAcc . withdraw ( amount ) ;

8 toAcc . d e p o s i t ( amount ) ;

9 }

10 }

Với việc sử dụng kỹ thuật AOP, ta có thể xen các mối quan tâm an ninh vào các mã chương trình một cách nhẹ nhàng và có hệ thống hơn.

4.3.2. Sử dụng AOP đối với các mối quan tâm an ninh

Việc đưa các mối quan tâm an ninh vào chương trình thông qua AOP là một giải pháp đã được nhiều tác giả nghiên cứu [4] [5].

Trong bài toán của chúng ta, từ biểu đồ hoạt động của các trường hợp sử dụng, ta xác định được các điểm cắt (pointcut) mà các mối quan tâm an ninh của chúng ta sẽ được xen vào. Chúng ta xây dựng các quy ước đặt tên lớp như sau:

• Mỗi một nghiệp vụ của người dùng thường gồm một số bước và mỗi bước sẽ xuất hiện một yêu cầu (vật lý) gửi tới máy chủ. Ví dụ, với trường hợp MS01_01 thì các yêu cầu là:

1. Hiển thị màn hình (MS01_01_01)

2. Gửi dữ liệu lên (MS01_01_02)

Phương pháp hướng đối tượng và phân tích thiết kế anh ninh hệ thống 61

Để rõ hơn các yêu cầu thì ta có thể nhìn vào bảng mô tả trường hợp sử dụng. Mỗi mũi tên vẽ từ tác nhân sang hệ thống là một yêu cầu. Tuy nhiên, ta quy ước đối với yêu cầu hiển thị màn hình thì trứoc và sau là cùng số, vì đó là yêu cầu hiển thị cùng một màn hình.

• Các lớp thực hiện các nghiệp vụ của người sử dụng sẽ đặt tên là UC_*BLogic, và mỗi yêu cầu sẽ là một lớp. (adsbygoogle = window.adsbygoogle || []).push({});

• Trong mỗi lớp chỉ có một phương thức tên làexecute. Ví dụ cụ thể ta cóMS01_01_01BLogic là tên lớp và execute là tên phương thức.

Với các quy ước như vậy, ta định nghĩa các điểm cắt như ví dụ mã 4.5.

Ví dụ mã 4.5: Định nghĩa mối quan tâm và điểm cắt

1 @Aspect

2 abstract c l a s s S e c u r i t y A s p e c t {

3 @Before ( " bean (∗BLogic ) "

4 public void c h e c k ( J o i n P o i n t j p ) { 5 O b j e c t t a r g e t = j p . g e t T a r g e t ( ) ; 6 C l a s s <? extends A b s t r a c t S e c u r i t y G u a r d > t a r g e t C l a s s = 7 ( C l a s s <? extends A b s t r a c t S e c u r i t y G u a r d >) t a r g e t . g e t C l a s s ( ) ; 8 S t r i n g className = t a r g e t C l a s s . getCanonicalName ( ) ; 9 S t r i n g u c I d = className . s u b s t r i n g ( 4 1 , 4 7 ) ; 10 A b s t r a c t S e c u r i t y G u a r d [ ] g u a r d s = 11 A b s t r a c t S e c u r i t y G u a r d . getGuards ( u c I d ) ; 12 f o r( A b s t r a c t S e c u r i t y G u a r d g : g u a r d s ) { 13 g . c h e c k ( ) ;// t h r o w u n a u t h o r i z e d e x c e p t i o n i f any 14 } 15 } 16 }

Trong phương thức check(), chúng ta thực hiện các kiểm tra cần thiết và tạo ngoại lệ truy cập (UnauthorizedException) khi người dùng hiện tại không được phép thực hiện hành động đó.

4.4. Một số chi tiết trong cài đặt chương trình

Chương trình mà chúng tôi đưa ra làm ví dụ minh họa là một hệ thống đã được xây dựng và không sử dụng phương pháp phân tich thiết kế an ninh hệ thống.

Để thực hiện ý tưởng minh họa, chúng tôi tiến hành thêm vào các thành phần (lớp) kiểm tra anh ninh mà không ảnh hưởng tới mã hiện tại của chương trình.

Để phục vụ việc cài đặt các dấu đặc trưng an ninh, chương trình tổ chức một bảng cơ sở dữ liệu (“security_concern”), có cấu trúc như bảng 4.4.

Tên cột Kiểu dữ liệu Giải thích

use_case_id varchar(10) Tên trường hợp sử dụng

sec_stereotype varchar(10) Dấu đặc trưng an ninh tương ứng request_parameter varchar(50) Cách lấy tham số từ yêu cầu HTTP

guard_bean varchar(120) Tên đối tượng kiểm tra trong Spring context

Một phần của tài liệu Phương pháp hướng đối tượng và phân tích thiết kế an ninh hệ thống (Trang 52)