Trong bất kỳ hệ thống nào thì việc bảo mật là cực kỳ quan trọng, trước khi phát triển hệ thống sẽ có khâu tổng hợp phân tích requirement liên quan đến security. Dưới đây là output mẫu cho NFR’s Security.
Hoặc có thể tải trên IPA
https://www.ipa.go.jp/archive/digital/iot-en-ci/jyouryuu/hikinou/ent03-b.html
nhưng làm sao các bạn biết cái nào cần, cái nào không cho hệ thống ?
Thì câu trả lời là dùng tool gọi là thread modeling , nói nôm na nó là một phương thức, checklist , process để nhận diện các mối đe doạ ( thread) tiềm tàng xảy ra trong hệ thống của mình, nó giống như việc bạn kiểm tra nhà cửa để tìm ra những chỗ yếu có thể bị kẻ trộm tấn công. Với thread modeling, bạn sẽ biết được những điểm yếu của hệ thống để có biện pháp phòng ngừa.
Why Thread Modeling và bảo mật ?
- Phòng ngừa sớm: Nhận biết các mối đe dọa trước khi chúng trở thành vấn đề thực sự.
- Tiết kiệm chi phí: Sửa chữa các lỗ hổng bảo mật sớm thường rẻ hơn nhiều so với khi đã bị tấn công.
- Bảo vệ dữ liệu: Giữ an toàn cho thông tin cá nhân và dữ liệu quan trọng của công ty.
cho nên Thread Modeling sẽ cần được thực hiện ở phase requirement ( youkenteigi ) hoặc phase development .
Các Bước Cơ Bản Trong Thread Modeling
dựa vào 4 câu hỏi sau :
- – What do we build?
- – What can go wrong?
- – How can I mitigate that ?
- – Did we succeed?
Giờ ta sẽ đi vào từng chi tiết :
- What do we build?
Hiểu hệ thống của bạn: Đầu tiên, bạn cần hiểu rõ hệ thống mà mình muốn bảo vệ. Gồm những phần nào, hoạt động ra sao, dữ liệu di chuyển như thế nào.
Xác định các tài sản cần bảo vệ: Tài sản ở đây có thể là dữ liệu, thông tin cá nhân, hệ thống mạng, hoặc bất cứ thứ gì quan trọng đối với hệ thống của chúng ta. - What can go wrong?
Xác định các mối đe dọa:
Những cách nào chúng có thể dùng để xâm nhập vào hệ thống của chúng ta ? Đó có thể là lỗ hổng phần mềm, mật khẩu yếu, hoặc các tấn công xã hội như lừa đảo… - How can I mitigate that ?
Đánh giá rủi ro: Xác định mức độ nguy hiểm của từng mối đe dọa. Cái nào dễ xảy ra nhất và gây hậu quả nghiêm trọng nhất?
Dựa vào đánh giá rủi ro, bạn sẽ tìm ra cách để giảm thiểu hoặc loại bỏ các mối đe dọa. Có thể là cập nhật phần mềm, thay đổi mật khẩu, hoặc tăng cường đào tạo về bảo mật. - Did we succeed?
Kiểm tra bằng việc thực thi kiểm thử như Penetration Testing và Load Testing :
– Penetration Testing giúp tìm điểm yếu, lỗ hổng trong hệ thống cho phép attacker truy cập trái phép.
– Load Testing thì không hẳn là liên quan tới bảo mật, nó là một kiểu test giả định tải nặng trên hệ thống để kiểm tra xem hệ thống có hoạt động bình thường hay không, giúp bảo vệ disruption of service.
Giờ thì chúng ta sẽ áp dụng Thread Modeling để áp dụng vào một case-study là hệ thống HR management có những chức năng cơ bản sau đây :
- Quản lý nhân viên (Employee) : thêm, xoá , sửa, cập nhật (CRUD).
- Quản lý ngày phép (Vacation) của nhân viên.
- Quản lý lương bổng ( Salary) : Cho phép quản lý tăng/ giảm lương nhân viên.
- Thanh toán lương cho nhân viên: thông qua payment system.
1. What Do We Build:
- Service Type: Web App
- Hệ thống quản lý nhân sự gồm có quản lý nhân viên, lương, ngày nghỉ, thanh toán lương.
2. What Can Go Wrong:
- Sensitive Data Might Leak: Dữ liệu nhạy cảm ( tiền lương ) có thể bị lộ.
- Unauthorized Access: Truy cập trái phép có thể dẫn tới dữ liệu bị thay đổi trái phép .
- Payment Data Tampering: Dữ liệu thanh toán( tài khoản, số tiền cần thanh toán ) có thể bị giả mạo khi liên kết với payment system .
3. How Can We Mitigate That:
Mục | Rủi ro | Cách đối phó / Action |
1 | Sensitive Data Might Leak | – Mã hoá dữ liệu( Salary) nhạy cảm để dù có thể lộ cũng không đọc được. – Triển khai nguyên lý đặc quyền tối thiểu ( Least-Privilege authorization) trong database |
2 | Unauthorized Access | – Strong Authentication: Triển khai xác thực mạnh mẽ cho mọi quyền truy cập vào dữ liệu – Logging & Monitoring để phát hiện hành vi gian lận một cách kịp thời. |
3 | Payment Data Tampering | – Mã hoá dữ liệu nhạy cảm để dù có thể lộ cũng không đọc được ( hệ thống gửi account id của nhân viên + số tiền thanh toán ) – Sử dụng phương thức giao tiếp bảo mật |
Implementation :
- Mã hoá dữ liệu Salary : vì lưu trong database nên dùng chức năng có sẵn ( built-in feature) trong hệ quản trị cơ sở dữ liệu như Always Encrypted trong sql server.
https://learn.microsoft.com/en-us/sql/relational-databases/security/encryption/always-encrypted-database-engine?view=sql-server-ver15
Đối với các password, connectionstring của database, hay api key thì không lưu trong code mà dùng key store như Azure KeyVault.
- Implement Least-Privilege authorization: Nguyên lý này thì nói đơn giản là chỉ gán quyền thực sự cho người cần, ví dụ nhân viên A thì chỉ có thể xem dữ liệu của mình, chứ không thể xem của nhân viên B, hay là gán quyền theo từng table của database…
- Strong Authentication: Sử dụng identity provider tin cậy, bật xác thực 2 yếu tố (MFA )…
- Logging & Monitoring: Ghi log tất cả thông tin liên quan tới security như sign-in log, audit log, validation problem, setting alert…
- Mã hoá dữ liệu thanh toán : Vì không lưu trong database nên cần dùng thư viện mã hoá để mã hoá trong code, lưu key trong key store ( Azure KeyVault )
- Sử dụng phương thức giao tiếp bảo mật : dùng TLS version 1.2 trở lên
4. Did we succeed?
Để trả lời cho câu hỏi hệ thống đã đáp ứng bảo mật chưa thì verify lại thông qua kiểm thử, cụ thể là Penetration Testing.
Các mục cần kiểm thử ví dụ :
- Đăng nhập gian lận
- Quyền truy cập cơ sở dữ liệu
- Mã hóa dữ liệu
Ở đây chúng giả định là kẻ tấn công sẽ đăng nhập bằng cái thông tin của một user nào đó, check case MFA chưa bật rồi sau đó bật mfa rồi re-test lại …
Xong những bước này thì sẽ tổng hợp lại thành output của Non Functional Requirement( 非機能要件) ở phase requirement(youkenteigi) cho security và kế hoạch kiểm thử ( testing ).
Dựa vào các yêu cầu này mà SA hay SE sẽ thiết kế ra Security Architecture cho hệ thống.
Tổng kết lại :
Thread Modeling là một công cụ quan trọng giúp bảo vệ hệ thống của bạn khỏi các mối đe dọa tiềm ẩn. Bằng cách hiểu rõ hệ thống, xác định tài sản cần bảo vệ, nhận diện mối đe dọa, đánh giá rủi ro, và đưa ra biện pháp phòng ngừa, bạn có thể đảm bảo an toàn cho dữ liệu và dịch vụ của mình. Hãy nhớ, bảo mật không bao giờ là thừa thãi,nên luôn đảm bảo hệ thống luôn cần có requirement cho security , và được thực thi chuẩn chỉ, phòng bệnh thì bao giờ cũng tốt hơn chữa bệnh.
Hy vọng qua bài viết này, bạn đã có cái nhìn rõ hơn và dễ hiểu hơn về mô hình Thread Modeling và bảo mật .