Preventing
the next Heartbleed and making FOSS more secure
Posted
22 Jul 2016 by Mark
Bohannon
Bài
được đưa lên Internet ngày: 22/07/2016
Lời
người dịch: Bài viết này trước hết dành cho bất kỳ
ai, bất kỳ công ty phần mềm nguồn mở nào muốn làm
việc được trong môi trường CNTT chính phủ. Nó cũng
dành cho bất kỳ quan chức chính phủ nào có trách nhiệm
về mua sắm phần mềm và/hoặc ra các chính sách về phần
mềm của quốc gia để hiểu về các vấn đề có liên
quan tới phần mềm nguồn mở.
David
Wheeler là lãnh đạo lâu năm trong việc tư vấn và làm
việc với chính phủ Mỹ về các vấn đề có liên quan
tới phần mềm nguồn mở (PMNM). Trang web của cá nhân ông
thường xuyên trích dẫn nguồn về các tiêu chuẩn mở,
PMNM, và an toàn máy tính. David đang lãnh đạo một dự án
mới, dự
án Huy hiệu Thực hành Tốt nhất CII, nó là một phần
của Sáng
kiến Hạ tầng Cốt lõi - CII (Core Infrastructure Initiative)
của Quỹ Linux Foundation cho việc thúc đẩy an toàn các
PMNM. Trong phỏng vấn này ông nói về điều này ngụ ý
gì cho cả chính phủ và những người sử dụng khác.
Hỏi
và Đáp
Hãy
bắt đầu với vài điều cơ bản. Dự án huy hiệu là gì
và nó đã ra đời như thế nào?
Vào
năm 2014, chỗ
bị tổn thương Heartbleed
đã được thấy trong OpenSSL, thư viện mật mã. Đáp lại,
Quỹ Linux
Foundation
đã tạo ra Sáng kiến Hạ tầng Cốt lõi (CII) để cấp
vốn và hỗ trợ cho PMNM mà chúng là các yếu tố sống
còn của hạ tầng thông tin toàn cầu. CII đã nhận diện
và cấp vốn cho các dự án quan trọng nhất định, nhưng
nó không thể cấp vốn cho tất cả các dự án PMNM. Vì
thế, CII cũng đang cấp vốn cho một vài tiếp cận để
cải thiện chung an toàn của PMNM.
Dự
án mới nhất CII tập trung vào việc cải thiện sự an
toàn nói chung, là dự án được gắn huy hiệu các thực
tiễn tốt nhất. Tôi là lãnh đạo kỹ thuật của dự án
này. Chúng tôi nghĩa rằng các dự án PMNM tuân theo các
thực tiễn tốt nhất có khả năng nhiều hơn là lành
mạnh và để tạo ra phần mềm tốt hơn, bao gồm cả
việc có sự an toàn tốt hơn. Nhưng điều đó đòi hỏi
là mọi người biết những thực tiễn tốt nhất đó là
gì, và liệu có hay không một dự án được đưa ra là
tuân theo chúng.
Để
giải quyết điều này, chúng tôi trước hết đã xem xét
nhiều tài liệu và dự án PMNM để nhận diện được
tập hợp các thực tiễn tốt nhất về PMNM được thừa
nhận rộng rãi. Chúng tôi sau đó đã phát triển một
website nơi mà các dự án PMNM có thể báo cáo liệu có
hay không chúng áp dụng các thực tiễn tốt nhất đó.
Trong một số trường hợp chúng tôi có thể xem xét
website dự án và tự động điền vào vài thông tin. Chúng
tôi sử dụng thông tin đó (dù tự động hay không) để
xác định liệu dự án đó có tuân thủ đúng các thực
tiễn tốt nhất hay không. Nếu dự án đó đang tuân thủ
đúng các thực tiễn tốt nhất, thì dự án đó nhận
được một huy hiệu “qua được kiểm tra”.
Tôi
sẽ lưu ý ở đây rằng dự án gắn huy hiệu bản thân
nó là một dự án PMNM. thấy Bạn có thể site
của dự án đó. Chúng tôi muốn có thậm chí nhiều
sự tham gia hơn, nên hãy ra nhập với chúng tôi! Để trả
lời cho câuhỏi rõ ràng, vâng, nó giành được huy hiệu
của riêng nó. Các dự án PMNM khác mà đã giành được
huy hhiệu bao gồm nhân Linux, curl, Node.js, GitLab, OpenBlox,
OpenSSL, và Zephyr. Ngược lại, OpenSSL trước khi có
Heartbleed đã không qua được nhiều tiêu chí, gợi ý rằng
các tiêu chí đang nắm bắt được các yếu tố quan trọng
về các dự án.
Nếu
bạn tham gia trong một dự án PMNM, tôi khuyến khích bạn
có một huy hiệu. Nếu bạn đang nghĩ về việc sử dụng
một dự án PMNM, tôi khuyến khích bạn xem liệu dự án
đó có huy hiệu hay không. Bạn có thể thấy nhiều thông
tin hơn ở Chương
trình Huy hiệu các Thực hành Tốt nhất CII.
Bạn
có thể nói cho tôi nhiều hơn về các tiêu chí của huy
hiệu?
Chắc
rồi. Tất nhiên, không tập hợp các thực tiễn nào có
thể đảm bảo rằng các phần mềm sẽ không bao giờ có
lỗi hoặc chỗ
bị tổn thương. Nhưng vài thực tiễn khuyến khích sự
phát triển tốt, điều tới lượt nó làm gia tăng khả
năng có chất lượng tốt, và đó là những gì chúng tôi
hướng tới.
Để
tạo ra các tiêu chí chúng tôi đã rà soát lại nhiều tài
liệu về các dự án nào nên làm; nguồn có ảnh hưởng
nhiều nhất và duy nhất, có lẽ là cuốn sách của Karl
Fogel: Sản xuất PMNM (Producing
Open Source Software).
Chúng tôi cũng đã xem một số dự án thành công đang tồn
tại. Chúng tôi cũng nhận được các chỉ trích rất hữu
ích bản phác thảo các tiêu chí từ nhiều người, bao
gồm cả Karl Fogel, Greg Kroah-Hartman
(dự án nhân Linux),
Rich Salz (OpenSSL), và Daniel Stenberg
(curl).
Một
khi các tiêu chí ban đầu đã được xác định, chúng đã
được nhóm thành các tiêu chí sau: cơ bản, kiểm soát
thay đổi, báo cáo, chất lượng, an toàn, và phân tích
(basics, change control, reporting, quality, security, and analysis).
Chúng tôi kết thúc với 66 tiêu chí. Mỗi tiêu chí có một
mã nhận diện và văn bản. Ví dụ, tiêu chí floss_license
đòi
hỏi rằng, “phần mềm PHẢI được phát hành như là
phần mềm tự do nguồn mở (PMTDNM)”. Tiêu chí
know_common_errors
đòi hỏi rằng, “Ít nhất một trong các lập
trình viên ban đầu PHẢI biết các dạng lỗi chung dẫn
tới các chỗ
bị tổn thương ở dạng này của phần mềm, cũng như ít
nhất một phương pháp được tính tới hoặc làm giảm
nhẹ từng trong số chúng”.
Các tiêu chí là có sẵn trên
trực tuyến, và một bài báo trên LWN.net thảo luận về
các tiêu chí đó chi tiết hơn. Chỉ cần bỏ ra khoảng 1
giờ đồng hồ đối với một dự án điển hình PMNM để
điền vào mẫu, một phần vì chúng tôi tự động điền
vào vài thông tin. Nhiều trợ giúp hơn trong việc tự động
hóa này được đánh giá cao.
Các
tiêu chí sẽ thay đổi chậm, có lẽ theo hàng năm, khi dự
án gắn huy hiệu có được nhiều hơn phản hồi và tập
hợp các thực tiễn tốt nhất đang sử dụng thay đổi.
Chúng tôi cũng có ý định bổ sung thêm các mức huy hiệu
cao hơn vượt ra khỏi mức “qua được kiểm tra” như
hiện nay, dự kiến có các mức “vàng” và “bạch
kim”. Tuy nhiên, đội dự án đã quyết định tạo ra các
tiêu chí theo các giai đoạn; nhiều khả năng hơn chúng
tôi sẽ tạo ra các tiêu chí tốt một khi chúng tôi có
kinh nghiệm với tập hợp các tiêu chí hiện hành. Một
danh sách vài tiêu chí mức cao hơn được đề xuất đã
được đưa lên rồi; nếu bạn có các ý tưởng, xin hãy
đưa lên một ví dụ hoặc ra nhập danh sách thư dự án
gắn huy hiệu của chúng tôi.
Khi
đào sâu vào lĩnh vực này, điều gì đã gây ngạc nhiên
nhất cho bạn trong những phát hiện của chúng tôi?
Có
lẽ điều gây ngạc nhiên nhất là nhiều dự án PMNM
không mô tả cách báo cáo các chỗ
bị tổn thương về an toàn. Tất nhiên, cũng có nhiều dự
án có làm. Nhiều dự án, như Mozilla Firefox, mô tả cách
báo cáo các chỗ bị tổn thương tới một địa chỉ thư
điện tử chuyên dùng và đưa ra một khóa PGP để gửi
thư điện tử được mã hóa. Vài dự án, như Cygwin, có
chính sách rõ ràng rằng tất cả các báo cáo lỗi phải
được nêu công khai (trong trường hợp của họ thông qua
một danh sách thư), và họ rõ ràng cấm báo cáo qua thư
riêng tư. Tôi không phải là fan hâm mộ của các chính
sách “mọi điều đều công khai” (vì chúng có thể
trao cho những kẻ tấn công một sự khởi đầu), nhưng
khi mọi người biết các quy định đó, là dễ dàng hơn
để giải quyết các chỗ bị tổn thương. Tuy nhiên,
nhiều dự án hoàn toàn không nói cho mọi người làm thế
nào để báo cáo các chỗ bị tổn thương. Điều đó dẫn
tới nhiều câu hỏi. Liệu báo cáo của một nhà nghiên
cứu về an toàn về một chỗ bị tổn thương bằng việc
sử dụng trình theo dõi vấn đề hoặc danh sách thư một
cách công khai, hay có làm thứ gì đó khác hay không? Nếu
dự án muốn nhận được các báo cáo riêng tư bằng việc
sử dụng mã hóa, làm thế nào thông tin đó được mã
hóa? CÁc khóa nào sẽ được sử dụng? Báo cáo và xử
lý chỗ bị tổn thương có thể bị chậm lại nếu dự
án không nghĩ về nó trước.
Có
vài lý do gây ngạc nhiên về điều này. Trước hết, là
đáng ngạc nhiên rằng các lập
trình viên không biết trước sẽ có các chỗ
bị tổn thương trong mã của họ và rằng họ nên được
chuẩn bị để giải quyết chúng. Tin tức được làm đầy
với các báo cáo về các chỗ bị tổn thương! Thứ
2, là ngạc nhiên dễ giải quyết vấn đề này trước về
thời gian; hãy giải thích trên website dự án cách báo cáo
các chỗ bị tổn thương.
Điều đó chỉ mất 3 câu! Tất nhiên, việc viết điều
đó xuống đòi hỏi các thành viên của dự án nghĩ về
cách học sẽ xử lý các chỗ bị tổn thương, và điều
đó là có giá trị. Là
tốt hơn nhiều để quyết định cách xử lý các chỗ bị
tổn thương trước khi chúng được báo cáo.
Điều
gì không làm bạn ngạc nhiên, nhưng có thể gây ngạc
nhiên cho những người khác?
Vài
điều có thể gây ngạc nhiên cho bạn là:
- Vẫn còn có các dự án (hầu hết là các dự án cũ) không hỗ trợ kho phiên bản được kiểm soát công khai (như, việc sử dụng Git), gây khó khăn cho những người khác để theo dõi những thay đổi hoặc cộng tác.
- Vẫn có những dự án (hầu hết là các dự án cũ) không có bộ kiểm tra (hữu dụng) được tự động hóa hoặc được xây dựng tự động. Điều này làm khó hơn nhiều để thực hiện các cải tiến, và dễ dàng hơn nhiều cho các lỗi bị bỏ qua không được dò tìm ra. Nó cũng là khó để nâng cấp các phụ thuộc khi một chỗ bị tổn thương được tìm thấy trong chúng, vì không có cách dễ dàng nào để thẩm định rằng sự thay đổi đó hầu như chắc chắn vô hại.
- Có nhiều dự án (hầu hết là các dự án cũ) mà nhiều người nghĩ là PMNM, nhưng chúng không hợp pháp để sử dụng vì chúng không có giấy phép nào cả. Phần mềm không có giấy phép hoặc đánh dấu nào khác thường là không hợp pháp để sử dụng, phân phối, hoặc sửa đổi ở hầu hết các quốc gia. Điều này đặc biệt là vấn đề trên GitHub. Bài trình bày năm 2015 của Ben Balter: Open source licensing by the numbers (Cấp phép nguồn mở theo các con số) đã thấy rằng trên GitHub, 23% các dự án với 1.000 hoặc nhiều sao hơn đã không có giấy phép hoàn toàn. Đúng là trước năm 1976, các tác phẩm ở Mỹ không có các dấu bản quyền được gắn vào từng không bị hạn chế bới bản quyền, nhưng điều đó từng lâu lắm rồi. Ngày nay, luật ở hầu hết tất cả các nước đòi hỏi rằng các lập trình viên cấp phép cho phần mềm trước khi nó có thể được những người khác sử dụng hợp pháp, và điều đó có lẽ không thay đổi. Thậm chí nếu bạn nghĩ luật không áp dụng cho bạn, thì việc bỏ qua giấy phép của PMTDNM có xu hướng ngăn cấm sự sử dụng, đồng phát triển, và rà soát lại dự án (bao gồm cả rà soát lại an toàn).
- Hầu hết các lập trình viên vẫn còn không biết các nguyên lý cơ bản của việc phát triển phần mềm an toàn, hoặc những sai lầm phổ biến dẫn tới các chỗ bị tổn thương là gì.
Chúng
tôi hy vọng rằng chương trình gắn huy hiệu sẽ giúp
giải quyết các vấn đề như vậy.
Đối
tới các chính phủ đang vật lộn với sử dụng PMNM, có
các bài học nào từ sáng kiến này không?
Có
2 dạng các tổ chức lớn: các tổ chức mà biết họ
đang sử dụng PMNM, và các tổ chức không biết họ đang
sử dụng PMNM. Không có dạng thứ 3. Nếu
bạn trả tiền cho các giấy phép phần mềm sở hữu độc
quyền, nếu bạn nhìn vào bên trong, bạn sẽ thấy nhiều
PMNM trong hầu hết tất cả các phần mềm sở hữu độc
quyền.
Các phần mềm tùy biến thường được xây dựng trên
đỉnh và bởi PMNM.
Nhiều
nhà quản lý vật lộn vì họ không hiểu sự thay đổi
đã xảy ra rồi trong nền công nghiệp máy tính, ấy là,
PMNM là lực lượng chính trong điện toán và nằm ở đây.
Thay vì ôm lấy sự thay đổi, vẫn còn có những nhà quản
lý muốn giả vờ rằng sự thay đổi còn chưa xảy ra,
hoặc đang cố gắng quay lại vài “những ngày xưa tốt
lành” hoang đường mà thực sự không từng tốt lành
như vậy. Đối với những ai đang cố cản trở tất cả
sử dụng PMNM, tôi khuyến cáo một liều thuốc bổ: Hãy
dừng cố gắng quay ngược kim đồng hồ, và thay vào đó,
hãy ôm lấy sự thay đổi đã xảy ra rồi.
Sự
vật lộn khác nhau là những người mà chấp nhận một
phần thực tế này, nhưng muốn quản lý rủi ro và không
biết làm thế nào. Mục tiêu là đúng, nhưng các tiếp
cận của họ thường lạc hướng. Tôi thường xuyên nghe
thấy “nhưng bạn không biết ai đã phát triển PMNM”,
ví dụ thế. Trong hầu hết các trường hợp điều này
là sai, vì những người đã viết từng dòng lện thường
là vấn đề của hồ sơ công khai (nó được đưa vào dữ
liệu của hệ thống kiểm soát phiên bản). Thật ngớ
ngẩn, cũng chính những người đó hạnh phúc để lấy
các phần mềm sở hữu độc quyền thậm chí dù họ
không có bất kfy ý tưởng nào về ai đã viết các dòng
mã lệnh đó. Vấn đề có liên quan là nhiều người muốn
sử dụng ự đăng ký vị trí của một công ty như là
biện pháp rủi ro duy nhất đối với mã độc, và đó là
mộti sai lầm. Ví dụ, một công ty có thể được đăng
ký ở Mỹ, nhưng điều đó không có nghĩa là các lập
trình viên và những người kiểm thử của nó nằm ở Mỹ
hoặc là các công dân Mỹ. Đăng ký của công ty giống
như đăng ký của con thuyền; điều này là viễn tưởng
không có liên quan gì tới thực tế cả. Ngoài ra, bạn có
thể là một công dân của một quốc gia và vẫn tạo ra
mã độc để tấn công chính phủ nước đó. Những kiểm
thử đơn giản như “điều này là từ công ty ở nước
tôi” sẽ rất không hữu ích cho việc quản lý rủi ro;
chúng ta cần các cách thức tốt hơn.
Đối
với những người đang xem xét mang PMNM vào, nhưng cũng
muốn quản lý rủi ro của chúng, thì sáng kiến này chắc
chắn sẽ đưa ra vài điều giúp họ. Chúng tôi thay vì
tập trung vào các thực tiễn tốt nhất khác nhau mà có
khả năng nhiều hơn là để sản xuất các phần mềm
tốt, thay vì tập trung vào những điều hoang đường về
pháp lý như đăng ký quốc gia. Những người sử dụng
tiềm nưng có thể thấy, qua dự án cấp huy hiệu, các
thực tiễn tốt nhất và cách một dự án nhất định
đang làm.
Tất
nhiên, dự án cấp huy hiệu cho các thực tiễn tốt nhất
không thể giải quyết được tất cả các vấn đề.
Chúng tôi không thể nói cho bạn liệu vài PMNM nào đó sẽ
giải quyết được vấn đề bạn có hay không; chỉ bạn
có thể hiểu các nhu cầu của bạn. Có nhiều mô hình hỗ
trợ PMNM khác nhau; trong một số trường hợp sự tải về
đơn giản và sự phụ thuộc vào cộng đồng là một
tiếp cận tốt, trong khi trong các trường hợp khác, bạn
thực sự nên sử dụng một công ty mà cung cấp sự hỗ
trợ chuyên nghiệp. Chúng tôi đang làm việc để cung cấp
vài thông tin mọi người cần để đưa ra các quyết định
tốt hơn.
Trong
1 lưu ý khác, khi chúng tôi đã nói lần trước, bạn đã
chỉ ra rằng rủi ro của các dự án rẽ nhánh của chính
phủ Mỹ từng là một vấn đề lớn. Các anh thấy tình
trạng đó bây giờ thế nào?
Trước hết, sự làm rõ nhanh. Tôi sử dụng khái niệm “rẽ nhánh” để ngụ ý bất kỳ việc sao chép nào một dự án với ý định sửa đổi nó. Việc rẽ nhánh là tốt nếu bạn có kế hoạch đệ trình sửa đổi ngược về dự án chính. Vấn đề là một “rẽ nhánh dự án”, nó là một rẽ nhánh với ý định để tạo ra một dự án mới độc lập. Các rẽ nhánh dự án cản trở tới mức ngăn cấm sự cộng tác, thay vì khuyến khích nó, và điều đó giải thích vì sao các rẽ nhánh dự án là vấn đề.
Chính phủ Mỹ không theo dõi các rẽ nhánh dự án nó cấp vốn, nên tôi không thể trả lời câu hỏi đó với sự tin cậy. Nói đùa, tôi nghĩ vấn đề đó đã giảm đôi chút, nhưng vẫn còn là vấn đề lớn. Một điều mà đã giúp làm giảm việc rẽ nhánh dự án trong các dự án chính phủ cấp vốn là việc gia tăng sử dụng các kho công khai, đặc biệt là GitHub. Các kho công khai, và kỳ vọng là một kho sẽ được sử dụng, gia tăng đáng kể sự minh bạch. Nếu một công ty biết rằng nó sẽ bị ép buộc phải làm cho rẽ nhánh dự án của nó nhìn thấy được công khai, thì nó sẽ lo ngại đúng là nó có thể bị yêu cầu bảo vệ điều không thể bảo vệ được. Để giải thích chân lý này, Louis Dembitz Brandeis cho rằng, sự minh bạch thường là thuốc trừ độc tốt nhất. Hơn nữa, nếu chính phủ ép một công ty làm cho rẽ nhánh của họ sẵn sàng như là PMNM, thì vài sáng kiến kinh tế cho việc rẽ nhánh dự án sẽ biến mất, và những cải thiện của nó có thể được trộn ngược trở lại vào dự án chính (một quy trình được gọi là “chữa” bệnh rẽ nhánh).
Tuy
vậy, vẫn có quá nhiều sáng kiến ngoan cố trong chính
phủ. Một ví dụ rõ ràng là các nhà thầu kiếm được
lợi nhuận cao hơn đáng kể nếu họ phát triển các phần
mềm từ không có gì thay vì việc sử dụng lại phần
mềm đang có. Nhiều dự án tái tạo lại cái bánh xe, vì
chúng được trả tiền để làm như thế, và những người
đóng thuế sẽ phải trả cho hóa đơn đó.
Thậm
chí chính xác hơn, các nhà cung cấp biết rằng họ có
thể moi được các hợp đồng hàng đống tiền nhiều
hơn nếu học có thể khóa các khách hàng của họ vào
các sản phẩm của họ. Nếu không có cách gì để thoát
ra khỏi sản phẩm hoặc dịch vụ đó, thì nhà cung cấp
có thể cứ nâng giá mà không có khó khăn gì, và nhà
cung cấp không có sự khuyến khích nào để cung cấp công
nghệ mới hoặc hỗ trợ tốt cả. Toàn bộ hệ thống
mua sắm của chính phủ được cho là là có sự cạnh
tranh mở cho công việc và công việc trong tương lai, và
về lý thuyết đưa ra một lực đối kháng. Trong thực
tế, điều đó thường không tồn tại.
Trong
điện toán, các quyền dữ liệu (là các quyền sở hữu
trí tuệ hoặc các quyền dữ liệu kỹ thuật) là đồng
nghĩa với sức mạnh. Bạn không thể thay đổi phần mềm,
hoặc có đấu thầu cạnh tranh cho người duy trì lựa
chọn thay thế trong tương lai, trừ phi bạn có các quyền
dữ liệu, thậm chí nếu bạn ban đầu đã trả tiền rồi
cho sự phát triển của phần mềm đó. Vâng nhiều nhân
viên chính phủ không hiểu điều đó. Các nhà thầu không
hiểu điều đó, và được khuyến khích khai thác các
nhân viên ngây thơ của chính phủ không hiểu điều đó.
Các quyền dữ liệu được coi là quan trọng hơn nhiều
so với các yêu cầu, vì các yêu cầu luôn thay đổi,
trong khi các quyền dữ liệu xác định ai có thể sửa
phần mềm để đáp ứng cho các yêu cầu mới đó. Các
nhà thầu sẽ yêu cầu các quyền độc quyền đối với
phần mềm thậm chí dù họ đã không trả tiền cho hầu
hết sự phát triển của nó, hoặc sử dụng mánh khóe
như tạo ra “các tuyến giao tiếp” sở hữu độc quyền
mà mục đích đầu tiên của chúng là để khóa chính phủ
vào nhà thầu đó. Nếu
một nhà thầu có được các quyền độc quyền, thì
chính phủ đánh mất vĩnh viễn khả năng của mình để
có được sự cạnh tranh có hiệu quả cho sự duy trì của
nó.
Tương tự, các nhà cung cấp phần mềm bên thứ 3 thường
có các giao diện sở hữu độc quyền, hoặc tạo ra các
mở rộng sở hữu độc quyền cho các giao diện tiêu
chuẩn, để cấm những người sử dụng khỏi việc thay
đổi sang một nhà cung cấp cạnh tranh khác. Điều đó
không để nói rằng tất cả các nhà thầu hoặc các nhà
cung cấp bên thứ 3 là quỷ dữ, hoặc rằng tất cả các
nhân viên chính phủ là không hiểu gì; còn lâu mới thế.
Chính phủ cần những người đó! Nhưng
các khuyến khích cố chấp, kết hợp với sự ngây ngô ở
phía chính phủ, thường dẫn tới các tình huống ở đó
chính phủ bị khóa trói vào một nhà thầu hoặc nhà cung
cấp bên thứ 3, những người có thể sau đó lấy giá
tùy thích cho các kết quả tồi. Gợi ý của tôi là nếu
chính phủ thực sự có thể có sự cạnh tranh mở và đầy
đủ về phần mềm, thì nó có thể tiết kiệm được
hàng chục tỷ USD mỗi năm. Con số chính xác là ít có
vấn đề hơn bản thân vấn đề đó; chúng ta rõ ràng có
vấn đề cần sửa.
Tôi
nghĩ sự trợ giúp lớn cho điều này có thể là yêu cầu
phần mềm được phát triển bằng việc sử dụng nguồn
cấp vốn của chính phủ sẽ phải được phát hành công
khai như PMNM, trừ phi có nhu cầu thuyết phục để làm
khác. Điều đó có thể làm giảm đáng kể sự khuyến
khích tái tạo ra mọi điều từ đầu, hoặc việc cố
khóa trói chính phủ vào một nhà thầu duy nhất. Chúng ta
cũng có thể đặt ra các khoản phạt về tài chính lên
những ai không nghiên cứu thị trường để tìm ra các
lựa chọn thay thế; điều này được luật và hợp đồng
yêu cầu, nhưng thường không được thực hiện. Tôi chắc
chắn có những điều khác sẽ phải làm; mấu chốt là
hệ thống hiện hành có nhiều vấn đề.
Những
điều nào khác mà mọi người có liên quan tới chính phủ
Mỹ nên biết?
Như
tôi đã nêu lần trước, một trong những vấn đề lớn
nhất là hầu hết các nhân viên mua sắm không hiểu rằng
thực tế tất cả các PMNM là phần mềm thương mại.
Theo luật Mỹ, Quy định Mua sắm của Liên bang - FAR
(Federal Acquisition Regulation), và Bổ sung FAR của Bộ Quốc
phòng - DFARS (DoD FAR Supplement), thì phần mềm là thương
mại nếu nó có sử dụng phi chính phủ và được cấp
phép cho công chúng. Đặc biệt, xem Tiêu đề 41 Phần 103
Luật Mỹ (U.S. Code Title 41 Section 103), nó định nghĩa khái
niệm “khoản thương mại”.
Vì
gần như tất cả các PMNM đáp ứng được định nghĩa
về phần mềm thương mại, gần như tất cả PMNM là phần
mềm thương mại. Một khi bạn hiểu
được điều này, thì bạn hiểu rằng sử dụng PMNM bạn
cũng tuân theo các quy định về phần mềm thương mại y
hệt, và rằng ưu tiên của luật Mỹ cho các khoản thương
mại (10 USC 2377) bao gồm cả PMNM. Sự hiểu biết
này làm cho nhiều quyết định rất thẳng, nhưng nó vẫn
còn chưa được hiểu rộng rãi.
David
A. Wheeler làm việc cho Viện Phân tích Quốc phòng - IDA
(Institute for Defense Analyses), nhưng trong cuộc phỏng vấn
này ông không nói về IDA, chính phủ Mỹ, hay Quỹ Linux
Foundation.
David
Wheeler is a long-time leader in advising and working with the U.S.
government on issues related to open source software. His personal
webpage is a frequently cited source on open standards, open source
software, and computer security. David is leading a new project, the
CII
Best Practices Badging project, which is part of the Linux
Foundation's Core
Infrastructure Initiative (CII) for strengthening the security of
open source software. In this interview he talks about what it means
for both government and other users.
Q&A
Let's start with some basics. What is the badging project and how did it come about?
In
2014, the Heartbleed vulnerability was found in the OpenSSL
cryptographic library. In response, the Linux Foundation created the
Core Infrastructure Initiative (CII) to fund and support open source
software (OSS) that are critical elements of the global information
infrastructure. The CII has identified and funded specific important
projects, but it cannot fund all OSS projects. So the CII is also
funding some approaches to generally improve the security of OSS.
The
latest CII project, which focuses on improving security in general,
is the best practices badge project. I'm the technical lead of this
project. We think that OSS projects that follow best practices are
more likely to be healthy and to produce better software, including
having better security. But that requires that people know what those
best practices are, and whether or not a given project is following
them.
To
solve this, we first examined a lot of literature and OSS projects to
identify a set of widely accepted OSS best practices. We then
developed a website where OSS projects can report whether or not they
apply those best practices. In some cases we can examine the website
of a project and automatically fill in some information. We use that
information (automatic and not) to determine whether the project is
adequately following best practices. If the project is adequately
following best practices, the project gets a "passing"
badge.
I
should note here that the badging project is itself an OSS project.
You can see its
project site. We'd love to have even more participation, so
please join us! To answer the obvious question, yes, it does earn its
own badge. Other OSS projects that have earned a badge include the
Linux kernel, curl, Node.js, GitLab, OpenBlox, OpenSSL, and Zephyr.
In contrast, OpenSSL before Heartbleed fails many criteria, which
suggests that the criteria are capturing important factors about
projects.
If
you participate in an OSS project, I encourage you to get a badge. If
you're thinking about using an OSS project, I encourage you to see if
that project has a badge. You can see more information at CII
Best Practices Badge Program.
Can you tell me more about the badge criteria?
Sure.
Of course, no set of practices can guarantee that software will never
have defects or vulnerabilities. But some practices encourage good
development, which in turn increases the likelihood of good quality,
and that's what we focused on.
To
create the criteria we reviewed many documents about what FLOSS
projects should do; the single most influential source, was probably
Karl Fogel's book Producing
Open Source Software.
We also looked at a number of existing successful projects. We also
got very helpful critiques of the draft criteria from a large number
of people including Karl Fogel, Greg Kroah-Hartman (the Linux
kernel), Rich Salz (OpenSSL), and Daniel Stenberg (curl).
Once
the initial criteria were identified, they were grouped into the
following categories: basics, change control, reporting, quality,
security, and analysis. We ended up with 66 criteria. Each criterion
has an identifier and text. For example, criterion floss_license
requires
that, "the software MUST be released as FLOSS." Criterion
know_common_errors
requires that, "At least one of the primary developers MUST know
of common kinds of errors that lead to vulnerabilities in this kind
of software, as well as at least one method to counter or mitigate
each of them." The criteria are available online, and an LWN.net
article discusses the criteria in more detail. It only takes about an
hour for a typical OSS project to fill in the form, in part because
we automatically fill in some information. More help in automating
this would be appreciated.
The
criteria will change slowly, probably annually, as the badging
project gets more feedback and the set of best practices in use
changes. We also intend to add higher badge levels beyond the current
"passing" level, tentatively named the "gold" and
"platinum" levels. However, the project team decided to
create the criteria in stages; we're more likely to create good
criteria once we have experience with the current set. A list of some
proposed higher-level criteria is already posted; if you have
thoughts, please post an issue or join the badging project mailing
list.
In digging into this area, what surprised you the most in your findings?
Perhaps
most surprising is that many OSS projects do not describe how to
report security vulnerabilities. Many do, of course. Many projects,
like Mozilla Firefox, describe how to report vulnerabilities to a
dedicated email address and provide a PGP key for sending encrypted
email. Some projects, like Cygwin, have a clear policy that all
defect reports must be publicly reported (in their case via a mailing
list), and they expressly forbid reporting via private email. I'm not
a fan of "everything public" policies (because they can
give attackers a head start), but when everyone knows the rules it's
easier to handle vulnerabilities. However, many projects don't tell
people how to report vulnerabilities at all. That leads to a lot of
questions. Should a security researcher report a vulnerability using
a public issue tracker or mailing list, or do something else? If the
project wants to receive private reports using encryption, how should
the information be encrypted? What keys should be used? Vulnerability
reporting and handling can be slowed down if a project hasn't thought
about it ahead of time.
There
are several reasons to be surprised about this. First, it should be
surprising that developers don't anticipate that there are
vulnerabilities in their code and that they should be prepared to
address them. The news is filled with vulnerability reports! Second,
it's surprisingly easy to solve this problem ahead of time; just
explain on a project website how to report vulnerabilities. It only
takes one to three sentences! Of course, writing that down requires
project members to think about how they will handle vulnerabilities,
and that's valuable. It's much better to decide how to handle
vulnerabilities before they are reported.
What didn't surprise you, but might surprise others?
Some
things that might surprise you are:
1.
There are still projects (mostly older ones) that don't support a
public version-controlled repository (e.g., using Git), making it
difficult for others to track changes or collaborate.
2.
There are still projects (mostly older ones) that don't have a
(useful) automated build or automated test suite. This makes it much
harder to make improvements, and much easier for defects to slip
through undetected. It also makes it hard to upgrade dependencies
when a vulnerability is found in them, because there's no easy to way
to verify that the change is almost certainly harmless.
3.
There are many projects (mostly newer ones) that many people think
are OSS, but they aren't legal to use because they have no license at
all. Software without a license or other marking isn't normally legal
to use, distribute, or modify in most countries. This is especially a
problem on GitHub. Ben Balter's 2015 presentation Open
source licensing by the numbers
found that on GitHub, 23% of the projects with 1,000 or more stars
had no license at all. It's true that before 1976, works in the U.S.
without affixed copyright markings were not restricted by copyright,
but that was a long time ago. Today, law in almost all countries
requires that developers license software before it can be legally
used by others, and that is unlikely to change. Even if you think the
law doesn't apply to you, omitting a FLOSS license tends to inhibit
project use, co-development, and review (including security reviews).
4.
Most developers still don't know the basic principles of developing
secure software, or what the common mistakes that lead to
vulnerabilities are.
We're
hoping that the badging program will help counter problems like
these.
For governments struggling with the use of open source software, are there lessons from this initiative?
There
are two kinds of large organizations: those who know they're using
OSS, and those who don't know they're using OSS. There is no third
kind. If you pay for proprietary software licenses, if you look
inside, you'll find a lot of OSS in almost all proprietary software.
Custom software is usually built on top of, and by, OSS.
Many
managers struggle because they don't understand the change that has
already happened in the computer industry, namely, that OSS is a
major force in computing and here to stay. Instead of embracing
change, there are still managers who want to pretend that the change
hasn't happened, or are trying to return to some mythical "good
old days" that really weren't that good. For those trying to
prevent all use of OSS, I recommend a simple tonic: Stop trying to
turn back the clock, and instead, embrace the change that's already
happened.
A
different struggle is people who partly accept this reality, but want
to manage risk and don't know how. The goal is right, but their
approaches are often misguided. I repeatedly hear "but you don't
know who developed the OSS," for example. In most cases this is
false, since who wrote each line is often a matter of public record
(it's included in the version control system data). Absurdly, these
same people are happy to take proprietary software even though they
do not have any idea who wrote the code. A related problem is that
many people want to use a company's location registration as the sole
risk measure for malicious code, and that's a mistake. For example, a
company may be registered in the U.S., but that doesn't mean that its
developers and testers are in the U.S. or are U.S. citizens. Company
registration is like ship registration; it's a legal fiction
unrelated to reality. Besides, you can be a citizen of a country and
still create malicious code to attack that country's government.
Simple tests like "is this from a company in my country"
aren't very helpful for managing risk; we need better ways.
For
people who are looking at bringing in OSS, but also want to manage
their risk, this initiative should definitely provide some help. We
instead focus on various best practices that are more likely to
produce good software, instead of focusing on legal fictions like
country registration. Potential users can see, through the badging
project, the best practices and how well a particular project is
doing.
Of
course, the best practices badging project can't solve all problems.
We can't tell you if some given OSS will solve the problem you have;
only you can understand your needs. There are many different OSS
support models; in some cases a simple download and depending on
community is a good approach, while in others, you really should be
using a company that provides professional support. We're working to
provide some of the information people need to make better decisions.
On a different note, when we last spoke, you indicated that the risk of the U.S. government forking projects was still a big problem. What's your take on the state of this today?
First,
a quick clarification. I use the term "fork" to mean any
copying of a project with the intent to modify it. Forking is great
if you plan to submit the modification back to the main project. The
problem is a "project fork," which is a fork with the
intent to create a new independent project. Project forks inhibit
collaboration, instead of encouraging it, and that's why project
forks are a problem.
The
U.S. government doesn't track project forks it funds, so I can't
answer that question with confidence. Anecdotally, I think the
problem has slightly reduced, but it's still a big problem. One thing
that's helped reduce project forking in government-funded projects is
the increasing use of public repositories, particularly on GitHub.
Public repositories, and the expectation that one will be used,
greatly increase transparency. If a company knows that it will be
compelled to make its project fork publicly visible, it will
correctly worry that it might be asked to defend the indefensible. To
paraphrase Justice Louis Dembitz Brandeis, transparency is often the
best disinfectant. In addition, if the government forces a company to
make their project fork available as OSS, some of the economic
incentives for project forking disappear, and its improvements might
be merged back into the main project (a process called "healing"
a fork).
That
said, there are still too many perverse incentives in the government.
An obvious one example is that the contractors get significantly
higher profits if they develop software from scratch instead of
reusing existing software. Many projects reinvent the wheel, because
they're paid to do so, and taxpayers pick up the bill.
Even
more seriously, suppliers know that they can extort orders of
magnitude more money if they can lock their customers into their
products. If there's no way to escape the product or service, the
supplier can just keep raising prices without restraint, and the
supplier has no incentive to provide new technology or good support.
The government's entire acquisition system presumes that there's open
competition for work and future work, and in theory that provides a
countervailing force. In practice, it often doesn't.
In
computing, data rights (aka intellectual rights or technical data
rights) are a synonym for power. You can't change software, or have a
competitive bid for an alternative future maintainer, unless you have
the data rights , even if you originally paid for the development of
that software. Yet many government employees don't understand that.
Contractors do understand that, and are incentivized to exploit the
naïve government employees who don't. Data rights are arguably much
more important than requirements, because requirements constantly
change, while data rights determine who can modify the software to
respond to the new requirements. Contractors will ask for exclusive
rights to software even though they didn't pay for most of its
development, or use tricks like creating proprietary "communication
buses" whose primary purpose is to lock the government into that
contractor. If a contractor gets exclusive rights, then the
government loses forever its ability to have effective competition
for its maintenance. Similarly, third-party software suppliers often
have proprietary interfaces, or create proprietary extensions to
standard interfaces, to inhibit users from changing to a competing
supplier. That's not to say that all contractors or third-party
suppliers are evil, or that all government employees are clueless;
far from it. The government needs these people!
But
perverse incentives, combined with naiveté on the government side,
often leads to situations in which the government is locked into a
contractor or third-party supplier, who can then charge arbitrary
prices for poor results. My guess is that if the government could
actually have full and open competition on software, it would save at
least tens of billions of dollars a year. The exact number matters
less than the problem; we clearly have a problem that needs fixing.
I
think a big help to this would be to require software developed using
government funding to be released to the public as open source
software, unless there's a compelling need to do otherwise. That
would greatly reduce the incentive to recreate everything from
scratch, or trying to lock the government into a single contractor.
We might also want to impose financial penalties on those who fail to
do market research to find alternatives; this is required by law and
contract, but often not done. I'm sure there are other things that
should be done; the key is that the current system has many problems.
What are other things that people involved with the U.S. government should know?
As
I mentioned last time, one of the biggest problems is that most
acquisition personnel don't understand that practically all OSS is
commercial software. Under U.S. law, the Federal Acquisition
Regulation (FAR), and the DoD FAR Supplement (DFARS), software is
commercial if it has a non-government use and is licensed to the
public. In particular, see U.S. Code Title 41 Section 103 which
defines the term "commercial item."
Because
nearly all OSS meets the definition for commercial software, nearly
all OSS is commercial software. Once you understand this, you
understand that to use OSS you just follow the rules for commercial
software, and that the U.S. law's preference for commercial items (10
USC 2377) includes OSS. This understanding makes a lot of decisions
very straightforward, but it's still not widely understood.
David
A. Wheeler works for the Institute for Defense Analyses (IDA), but in
this interview he is not speaking for IDA, the U.S. government, or
the Linux Foundation.
Dịch:
Lê Trung Nghĩa
Không có nhận xét nào:
Đăng nhận xét
Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.