Thành thật mà nói, chúng tôi cố gắng không đi qua cơ sở mã của bạn, chúng tôi cố gắng viết các công cụ để làm điều đó cho chúng tôi.
Đầu tiên, lý thuyết. Bảo mật là một yêu cầu của hệ thống phần mềm, vì vậy cũng giống như các yêu cầu khác (chức năng, khả năng sử dụng, khả năng truy cập, hiệu suất, v.v.) cần được xem xét ở mọi giai đoạn của quy trình kỹ thuật phần mềm từ thu thập yêu cầu đến triển khai và bảo trì. Thật vậy, điều này là có thể, và hướng dẫn tồn tại để giúp các nhóm dự án phần mềm làm điều đó. Mặc dù tôi chủ yếu làm việc với các nhà phát triển iOS, nhưng mô tả yêu thích của tôi về "vòng đời phát triển an toàn" là từ Microsoft Press .
Trong mô hình này, bảo mật ứng dụng bắt đầu khi chúng tôi cố gắng khơi gợi các yêu cầu từ người dùng của chúng tôi. Chúng tôi cần khám phá mối quan tâm về bảo mật và quyền riêng tư của họ, điều này không dễ dàng bởi vì chúng tôi là chuyên gia, không phải người dùng và nơi họ hiểu các yêu cầu bảo mật của họ, họ có thể thấy khó thể hiện chúng. Chúng ta cũng cần khám phá những rủi ro mà phần mềm sẽ gặp phải khi triển khai và mức độ rủi ro nào có thể chấp nhận được.
Chúng tôi thiết kế ứng dụng của chúng tôi với việc đáp ứng những yêu cầu đó trong tâm trí. Chúng tôi viết mã với một mắt để đáp ứng các yêu cầu đó và tránh các rủi ro bổ sung liên quan đến các lỗi bảo mật cấp mã. Chúng tôi kiểm tra phần mềm để đảm bảo rằng mô hình bảo mật của chúng tôi phù hợp với những gì chúng tôi thực sự xây dựng, sau đó chúng tôi triển khai phần mềm theo cách phù hợp với các giả định mà chúng tôi đưa ra về môi trường khi chúng tôi thiết kế. Cuối cùng, chúng tôi cung cấp hỗ trợ và bảo trì giúp người dùng vận hành phần mềm theo cách phù hợp với yêu cầu bảo mật của họ và cho phép họ (và chúng tôi) phản ứng với những thay đổi mới trong các rủi ro được đưa ra.
Ok, rất nhiều cho lý thuyết. Trong thực tế , vì những lý do được giải thích rất tốt (mặc dù theo kiểu phi kỹ thuật) trong Geekonomics và chủ yếu là do họ thúc đẩy các công ty phần mềm, hầu hết những điều trên không xảy ra. Thay vào đó, chúng tôi nhận được điều này. Các nhà phát triển sẽ:
- thuê một nhân viên an ninh hoặc gal để có mặt khi họ đấu thầu hợp đồng, để cho thấy rằng họ "có được" bảo mật.
- viết phần mềm.
- thuê một nhân viên bảo mật hoặc gal để xác nhận phần mềm trước khi phát hành, khắc phục nhiều vấn đề phát sinh trong bước 2.
- vá mọi thứ khác sau khi triển khai.
Vì vậy, những gì hầu hết mọi người bảo mật ứng dụng đang thực sự làm là, như bạn nói, tìm lỗi. Đây thực sự là một đánh giá mã được tôn vinh nhưng đó là một đánh giá mã rất tập trung được thực hiện bởi những người là chuyên gia về các loại lỗi mà đánh giá này đang tìm kiếm, vì vậy vẫn có giá trị trong việc giúp đỡ bên ngoài trong việc đó. Tất nhiên, đó là một quy tắc chung của việc tẩy rửa: luôn luôn nhờ người khác kiểm tra xem ai không liên quan đến việc tạo ra thứ đó.
Nếu chúng tôi chấp nhận những điều trên là đúng thì có nghĩa là mọi người đưa ra quyết định mua hàng có thể đánh đồng "anh chàng bảo mật có khả năng" với "tìm thấy rất nhiều lỗi". Những người sử dụng máy tính để làm việc cho họ sẽ tìm thấy nhiều lỗi hơn so với những người không sử dụng, vì vậy tất nhiên họ phụ thuộc nhiều vào các công cụ phân tích tĩnh và sẽ dành nhiều thời gian hơn để mở rộng các công cụ hơn là mã hóa cho các vấn đề cụ thể cho các khách hàng cụ thể. Sau đó, chúng tôi kết luận rằng những người bảo mật ứng dụng có nhiều khả năng viết các công cụ để đọc mã hơn là đọc mã.
** Cảnh báo: những gì còn lại là ý kiến cá nhân và suy đoán **
Hiện thực bị phá vỡ. Bạn sẽ nhận thấy rằng lý thuyết về bảo mật phần mềm là tất cả về việc xác định và ứng phó với rủi ro dựa vào hệ thống phần mềm, trong khi thực tế là tìm ra càng nhiều lỗi càng tốt. Chắc chắn, điều đó vẫn sẽ làm giảm rủi ro, nhưng chỉ là tác dụng phụ. Điểm của trò chơi đã trở nên ít quan trọng hơn so với "chiến thắng" trò chơi, vì vậy các quy tắc được thay đổi để dễ dàng giành chiến thắng hơn.
Bạn là nhà phát triển phần mềm có thể làm gì về điều đó? Chơi các trò chơi theo quy tắc ban đầu của nó. Tìm ai đó trong nhóm của bạn (tốt nhất là thực sự trong nhóm của bạn, chứ không phải là nhà thầu, để họ có động lực cung cấp kết quả lâu dài thay vì chiến thắng nhanh chóng), người hiểu tầm quan trọng của an ninh và huấn luyện bejeezus từ họ. Trao cho người đó trách nhiệm chỉ đạo nhóm trong việc cung cấp bảo mật đầu cuối được mô tả ở đầu câu trả lời của tôi.
Ngoài ra, cung cấp cho người đó thẩm quyền để làm theo thông qua . Nếu một thiết kế không thể hiện các yêu cầu bảo mật, nó phải được sửa đổi. Nếu việc thực hiện không đáp ứng các yêu cầu bảo mật thì không được phát hành . Nhân viên bảo mật của bạn có thể thực hiện cuộc gọi phán quyết, nhưng phải được phép hành động theo phán quyết đó. Tôi nhận ra điều này nghe có vẻ giống như anh chàng bảo mật nói rằng "Bảo mật OMFG là điều quan trọng nhất", nhưng đó không phải là ý tôi. Nếu sản phẩm của bạn không đáp ứng các yêu cầu về chức năng, khả năng sử dụng hoặc hiệu suất, bạn cũng không nên phát hành thứ đó.
Tại sao bạn muốn làm điều đó? Nó phải rẻ hơn: tất cả chúng ta đã thấy (và có thể được trích dẫn cho một đại diện +10 giá rẻ) bảng Code Complete nơi các lỗi trở nên đắt hơn sau khi bạn sửa chúng, phải không? Khiếm khuyết bảo mật cũng là khuyết điểm. Tôi là các quy tắc trong thế giới thực của trò chơi, hầu hết chúng là các vấn đề trong các yêu cầu được cố định trong bảo trì. Có rẻ không?
Ok, bây giờ tôi có thể là một khẩu súng an ninh cho thuê làm gì về điều đó? Chà, hóa ra tôi cũng có thể từ chối chơi theo luật sửa đổi. Tôi có thể nói với các nhà phát triển rằng đó là tất cả về việc giảm rủi ro, rằng điều này có thể được thực hiện ở mọi giai đoạn, và sau đó tôi có thể giúp họ làm điều đó.