Lập trình viên tại các công ty bảo mật làm gì?


10

Tôi đã nghe nói về các công ty bảo mật tư vấn về bảo mật của hệ thống khách hàng. Tất cả những người tôi biết trong lĩnh vực này đều là kỹ sư mạng, nhưng tôi biết các lập trình viên cũng tham gia vào bảo mật. Các lập trình viên bảo mật thực hiện kiểm toán / tư vấn thực sự làm gì? Họ có thực sự đi qua codebase để tìm kiếm mọi lỗ hổng trong hệ thống di sản của mọi người không? Tôi đã luôn cho rằng đó là những gì họ đã làm, nhưng có vẻ như điều này sẽ rất không đáng tin cậy và không làm gì nhiều hơn là cung cấp một cảm giác an toàn sai lầm. Lưu ý: Tôi không nói về các lập trình viên viết thuật toán mã hóa hoặc bất cứ thứ gì tương tự, chỉ những người quan tâm đến kiểm toán / tư vấn bảo mật phần mềm.


1
Hãy duyệt qua security.stackexchange.com để có nhiều khán giả bảo mật hơn!
Rory Alsop

1
^ những gì anh ấy nói, chúng tôi đều là những người điều hành tem pro ở đằng kia.

Câu trả lời:


12

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 đó.


Đối với người ở vị trí của bạn, tôi ngạc nhiên rằng bạn không thể cung cấp nhiều hơn cho các cuộc thảo luận. Tôi rất muốn nghe những gì bạn nói.
Steven Evers

Bạn nói đúng, tôi đã mệt mỏi (máy bay phản lực) khi tôi viết câu trả lời. Tôi sẽ cố gắng lấp đầy nó một chút.

@snorfus Tôi nên xin lỗi vì đã không đưa ra một câu trả lời tốt. Tôi thành thật xin lỗi.

@Graham Lee: Tôi nghi ngờ rằng bạn đã có một câu trả lời tuyệt vời được ẩn giấu khỏi chúng tôi :) Các chỉnh sửa của bạn đã chứng minh điều đó; cảm ơn bạn!
Steven Evers

@snorfus Tôi thực sự nên suy nghĩ trước khi đăng. Và nếu tôi không ở trong trạng thái suy nghĩ, tôi không nên đăng ...

5

Từ 15 năm chạy các chương trình đảm bảo an ninh đối với các ứng dụng, môi trường, hệ thống nhỏ và cực kỳ lớn, tôi sẽ nói rằng có một chút của tất cả mọi thứ. Trong các đội của tôi, tôi luôn có một vài người là lập trình viên khó tính.

Ở cấp độ chi tiết, một số trong số đó được đưa ra để xem xét mã chuyên sâu - như một ví dụ tôi hiện đang làm việc trên một cơ sở mã hàng triệu triệu, sử dụng các công cụ để thu hẹp các vấn đề có thể, và sau đó xem xét từng vấn đề phân loại.

(Phải thừa nhận rằng sau đó tôi bàn giao cho các nhà phát triển để khắc phục hoặc giải thích cho tôi tại sao vấn đề không gây rủi ro)

Nhưng đây là một cam kết cụ thể mà hồ sơ rủi ro có ý nghĩa để thực hiện loại công việc chuyên sâu tài nguyên này.

Tiêu chuẩn hơn nhiều, và hiệu quả chi phí cao hơn nhiều là cố gắng tìm hiểu hồ sơ rủi ro của tổ chức và tập trung vào các rủi ro từ trên xuống, ví dụ:

  • Sự thèm ăn rủi ro - tác động đến doanh nghiệp, mô hình mối đe dọa
  • Quản trị - tuân thủ quy định, báo cáo vv
  • Chính sách - định nghĩa để đảm bảo khung quản trị có hiệu quả
  • Quy trình - kỹ thuật và con người
  • Tiêu chuẩn - định nghĩa cho mỗi kiểm soát bảo mật
  • Thực hiện - Cách làm

Phía lập trình thực sự chỉ đi vào hai phần cuối cùng, với đánh giá mã và kiểm tra thâm nhập tùy chỉnh. Đối với một số tổ chức, nó có tầm quan trọng rất thấp, ví dụ: nếu bạn đã kiểm soát bảo mật nhiều lớp đã được xem xét rộng rãi (nhiều loại mã hóa khác nhau) thì trong khi bạn có thể kiểm tra việc triển khai của mình, bạn thường sẽ không kiểm tra lại tất cả mã như đã được thực hiện trước đó.


2
Tôi + 1ngày, nhưng hãy cẩn thận "hoặc để giải thích cho tôi tại sao vấn đề không gây rủi ro". Các nhà phát triển thường sẽ tìm lý do để tránh thay đổi điều họ đã làm (nói với tư cách là nhà phát triển) và bên cạnh đó có thể không hiểu rủi ro của khách hàng. Rốt cuộc, chính các nhà phát triển đã viết Windows 98 ;-)

@Graham - bạn nói rằng cái không được đặt tên :-) Và tôi thích câu trả lời phiên bản mới dài hơn của bạn! +1
Rory Alsop

ô đúng rồi. Tôi cố tình nói rằng vì tôi không muốn đặt tên cho windows 98 nhưng ba năm trước đó.

1

Tôi chưa bao giờ gặp phải bất kỳ điều gì đi xa hơn là thảo luận về kiến ​​trúc / thực tiễn tốt nhất một cách mơ hồ trong quá trình thiết kế và / hoặc chạy các bộ thử nghiệm tấn công / fritzing / ngoại lệ chống lại các dự án đã hoàn thành.

Trong hầu hết các trường hợp, tôi thậm chí có thể cho biết họ sử dụng công cụ nào bởi các vectơ tấn công mà họ thử và cách thức thực hiện cuộc tấn công sau khi một trong các cuộc kiểm toán chuyển qua hệ thống hiện có.

Tôi tưởng tượng rằng có một số ít thực sự dành thời gian để kiểm tra mã và thực hiện một số đánh giá / kiểm tra whitebox, nhưng tôi chưa gặp chúng trong cuộc sống thực.


Nghe có vẻ như công ty bạn làm việc với giá rẻ liên tục và thực hiện các vụ hack, những người nói một trò chơi hay nhưng không thực sự có được điểm. Ngoài bản thân tôi và những người trả lời khác ở đây, tôi đã làm việc và đào tạo, nhiều người làm điều đó đúng. Phải thừa nhận rằng, có lẽ tôi cũng đã gặp nhiều loại mà bạn đã có ...
AviD

@avid Tôi không có ý đó là một tiêu cực. Tôi chắc chắn nếu bạn trả đô la hàng đầu, bạn có thể tìm thấy đủ các công ty cạnh tranh, nhưng ngay cả khi bạn có xu hướng nhận được nhiều đề xuất hơn để mua một cái gì đó hơn là bạn tư vấn về cải thiện / thực hiện một cái gì đó. ĐÓ KHÔNG PHẢI LÀ MỘT BAD THING sử dụng một sản phẩm đã biết với một hồ sơ bảo mật tốt sẽ tốt hơn khi nó phù hợp với không gian vấn đề. OP đã đề cập đến KIỂM TOÁN cụ thể và ở phạm vi bạn trả cho kiểm toán bên thứ 3 hàng năm của bạn, bạn có được thông qua điểm thứ 2, 3 và 1/2 của điểm thứ 4 của Rory.
Hóa đơn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.