Một cách có thể, mặc dù nó sẽ mất một thời gian cực kỳ lâu trong thực tế, sẽ là quay trở lại cội nguồn. Sự phát triển của GNU bắt đầu vào năm 1984 và phiên bản gốc của Minix (được sử dụng trong quá trình phát triển Linux ban đầu cho mục đích bootstrapping) đã được phát hành vào năm 1987.
Toàn bộ câu trả lời này dựa trên tiền đề của bạn rằng "[bạn] hoặc người khác có khả năng đọc và hiểu mã nguồn cho các lỗi bảo mật, vì vậy mã nguồn sẽ được xem xét trước khi biên dịch" và bạn có thể tin tưởng vào kết quả phân tích như vậy . Không có điều đó, câu trả lời này có lẽ tồi tệ hơn vô giá trị, vì bạn sẽ dành một lượng thời gian khổng lồ mà hoàn toàn không có lợi ích gì.
Nếu bạn có thể tìm thấy một bản sao của cuốn sách Minix gốc với mã nguồn, bạn có thể nhập nó từ cuốn sách. Biên dịch nó, và sau đó sử dụng một trình dịch ngược khác nhau trên một hệ thống khác để xác minh rằng trình biên dịch tạo ra đầu ra nhị phân của ngôn ngữ máy dự kiến. (Mã chỉ có 12.000 dòng, có lẽ là C, do đó, việc này rất tốn thời gian nhưng vẫn có lý do nếu bạn nghiêm túc với một dự án như vậy.) Bạn thậm chí có thể viết trình dịch ngược của chính mình; Điều đó không nên rất khó khăn.
Nắm bắt các phiên bản cũ nhất của các tiện ích GNU mà bạn có thể có trong tay (vì chúng có thể có ít mã hơn và ít phụ thuộc hơn vào các thư viện bên ngoài), đi qua mã, xây dựng nó cho Minix (mặc dù điều này có thể mất một số công việc hoàn toàn muốn tránh là điều chỉnh mã nguồn, vì điều đó sẽ khiến việc thêm các bản vá sau này rất dễ bị lỗi) và trải qua một chu trình xác minh tháo rời tương tự cho các công cụ GNU. Tại thời điểm đó, bạn tin tưởng vào HĐH và chuỗi công cụ, vì vậy bạn chỉ cần xem qua mã nguồn trong bản vá (mọi thứ không có trong bản vá đã được tin cậy), nhưng các công cụ vẫn sẽ rất thô sơ và thô sơ so với những gì bạn đang sử dụng đến ngày hôm nay. Chẳng hạn, không mong đợi gì hơn chức năng cơ bản nhất của các công cụ hệ thống đang hoạt động.Đọc nhiều XKCD.
Tại một số điểm, bạn sẽ có một hệ thống có thể biên dịch và khởi động phiên bản đầu tiên của nhân Linux, giống như nó đã được thực hiện vào đầu những năm 1990 khi Linux bắt đầu có được lực kéo giữa các tin tặc. Tôi khuyên bạn nên chuyển sang Linux vào thời điểm đó (xây dựng lại các thư viện hệ thống và chuỗi công cụ chống lại Linux, xây dựng nhân Linux, khởi động vào Linux và có thể xây dựng lại nhân Linux và chuỗi công cụ GNU trong Linux; lưu trữ), nhưng điều đó phần lớn phụ thuộc vào bạn. Tiếp tục xác minh các bản vá, vá kernel, thư viện và các công cụ GNU cơ bản và xây dựng lại cho đến khi bạn có được các phiên bản hiện đại.
Đó là khi bạn có một hệ điều hành và trình biên dịch cơ bản đáng tin cậy có thể được sử dụng để xây dựng phần mềm hiện đại. Đến lúc đó, bạn có thể làm theo, ví dụ như các hướng dẫn Linux From Scratch để xây dựng một hệ thống có khả năng thực hiện các tác vụ hữu ích .
Không bao giờ có thể kết nối hệ thống "trình biên dịch" với một mạng theo bất kỳ cách nào (kể cả dưới dạng VM trên máy chủ được nối mạng); bạn có nguy cơ thâm nhập thông qua bất kỳ thành phần nào có khả năng kết nối mạng bao gồm cả kernel. Nếu bạn lo lắng về một cuộc tấn công trình biên dịch Thompson , bạn phải hy vọng rằng bất kỳ máy chủ VM nào cũng có thể bị xâm phạm. Sử dụng sneakernet để lấy mã nguồn và nhị phân từ máy chủ vật lý mà bạn đang biên dịch mọi thứ trên đó. Mong đợi sự cố khi bật và tắt tệp ít nhất là trước khi bạn đến điểm hỗ trợ lưu trữ dung lượng lớn USB. Nếu bạn thực sự hoang tưởng, hãy in danh sách mã nguồn và nhập chúng bằng tay (và hy vọng rằng trình điều khiển máy in và máy in không có mã tương tự trong đó) hoặc đọc mã trên một màn hình máy tính và nhập mã vào một máy tính khác bên cạnh nhưng không được kết nối với nó.
Vâng, điều này sẽ mất rất nhiều thời gian. Nhưng lợi thế của phương pháp này là mỗi bước được tăng dần, có nghĩa là sẽ khó khăn hơn nhiều cho bất kỳ thứ gì độc hại để vượt qua trừ khi nó được giới thiệu dần dần trong một khoảng thời gian của nhiều phiên bản; điều này là do tập hợp các thay đổi ở mỗi bước tương đối nhỏ và do đó dễ nhìn hơn nhiều. So sánh bản vá với thay đổi và đảm bảo bạn có thể xác định chính xác mục nhập thay đổi nào tương ứng với mọi thay đổi trong mã nguồn. Một lần nữa, điều này giả định rằng bạn có khả năng (có thể thông qua người mà bạn tin tưởng) để xác minh rằng những thay đổi đó chưa được đưa vào codebase, nhưng nó sẽ giúp bạn tiến gần đến một hệ thống đáng tin cậy như một phần mềm ngoại trừ - phương pháp phần mềm có thể.