Aracılığıyla paylaş


Güvenli yazılım tedarik zinciri için en iyi yöntemler

Açık Kaynak her yerdedir. Birçok özel kod tabanında ve topluluk projesinde yer alır. Kuruluşlar ve bireyler için, bugünkü soru açık kaynak kodu kullanıp kullanmadığınız değil, hangi açık kaynak kodunu kullandığınız ve ne kadar kullandığınızdır.

Yazılım tedarik zincirinizde neler olduğunun farkında değilseniz bağımlılıklarınızdan birindeki yukarı akış güvenlik açığı önemli olabilir ve bu da sizi ve müşterilerinizi olası bir tehlikeye karşı savunmasız hale getirir. Bu belgede , "yazılım tedarik zinciri" teriminin ne anlama geldiğini, neden önemli olduğunu ve en iyi yöntemlerle projenizin tedarik zincirinin güvenliğini sağlamaya nasıl yardımcı olabileceğinizi ayrıntılı olarak ele alacaktır.

The State of the Octoverse 2020 - Open Source

Bağımlılıklar

Yazılım tedarik zinciri terimi, yazılımınıza giren her şeyi ve nereden geldiğini ifade etmek için kullanılır. Yazılım tedarik zincirinizin bağımlı olduğu bağımlılıklarınız ve özellikleridir. Bağımlılık, yazılımınızın çalışması için gerekendir. Kod, ikili dosyalar veya diğer bileşenler olabilir ve depo veya paket yöneticisi gibi nereden geldikleri.

Kodu kimin yazdığı, ne zaman katkıda bulunduğu, güvenlik sorunları, bilinen güvenlik açıkları, desteklenen sürümler, lisans bilgileri ve işlemin herhangi bir noktasında ona dokunan hemen hemen her şey için nasıl gözden geçirildiği dahildir.

Tedarik zinciriniz, derleme ve paketleme betikleriniz veya uygulamanızın güvendiği altyapıyı çalıştıran yazılım gibi yığınınızın tek bir uygulamanın ötesindeki diğer bölümlerini de kapsar.

Güvenlik Açıkları

Günümüzde yazılım bağımlılıkları çok kapsamlıdır. Projelerinizin, kendi yazmanız gerekmeyen işlevler için yüzlerce açık kaynak bağımlılığı kullanması oldukça yaygındır. Bu, uygulamanızın çoğunun yazmadığınız koddan oluştuğu anlamına gelebilir.

The State of the Octoverse 2020 - Dependencies

Üçüncü taraf veya açık kaynak bağımlılıklarınızdaki olası güvenlik açıkları, büyük olasılıkla yazdığınız kod kadar sıkı bir şekilde denetleyemeyeceğiniz bağımlılıklardır ve bu da tedarik zincirinizde olası güvenlik riskleri oluşturabilir.

Bu bağımlılıklardan birinin güvenlik açığı varsa, sizin de bir güvenlik açığınız olabilir. Bağımlılıklarınızdan biri farkında bile olmadan değişebildiğinden bu korkutucu olabilir. Bugün bir bağımlılıkta bir güvenlik açığı olsa da, ancak bu güvenlik açığından yararlanılamaz olsa bile, gelecekte bu güvenlik açığından yararlanılabilir.

Binlerce açık kaynak geliştirici ve kitaplık yazarının çalışmalarından yararlanabilmek, binlerce yabancının üretim kodunuzla doğrudan katkıda bulunabileceği anlamına gelir. Ürününüz, yazılım tedarik zinciriniz aracılığıyla düzeltilmemiş güvenlik açıklarından, masum hatalardan ve hatta bağımlılıklara karşı kötü amaçlı saldırılardan etkilenir.

Tedarik zincirinin tehlikeye atılmasına neden olan riskler

Tedarik zincirinin geleneksel tanımı üretimden gelir; bir şeyler yapmak ve tedarik etmek için gereken süreçler zinciridir. Planlamayı, malzeme tedarikini, üretimi ve perakendeyi içerir. Bir yazılım tedarik zinciri benzerdir, ancak malzemeler yerine koddur. Üretim yerine geliştirmedir. Kod, yerden kazmak yerine tedarikçilerden, ticari veya açık kaynak kaynaklanır ve genel olarak açık kaynak kodu depolardan gelir. Bir depodan kod eklemek, ürününüzün bu koda bağımlı olduğu anlamına gelir.

Yazılım tedarik zinciri saldırısının bir örneği, kötü amaçlı kod bir bağımlılığına bilerek eklendiğinde, kodu kurbanlarına dağıtmak için söz konusu bağımlılığın tedarik zincirini kullanarak oluşur. Tedarik zinciri saldırıları gerçek. Doğrudan yeni katkıda bulunan olarak kötü amaçlı kod eklemekten, başkalarını fark etmeden katkıda bulunanın hesabını devralmaya, hatta bağımlılığın resmi bir parçası olmayan yazılımları dağıtmak için imzalama anahtarını tehlikeye atmaya kadar birçok tedarik zincirine saldırmanın birçok yöntemi vardır.

Yazılım tedarik zinciri saldırısı nadiren son hedefin içindedir, bunun yerine bir saldırganın kötü amaçlı yazılım eklemesi veya gelecekteki erişim için bir arka kapı sağlaması için bir fırsat başlangıcıdır.

The State of the Octoverse 2020 - Vulnerability Lifecycle

Eşleşmeyen yazılım

Günümüzde açık kaynak kullanımı önemlidir ve yakın zamanda yavaşlayaması beklenmemektedir. Açık kaynak yazılım kullanmayı bırakmayacağımız göz önüne alındığında, tedarik zinciri güvenliği tehdidi eşleşmeyen yazılımdır. Bunu bilerek, projenizin bağımlılığının bir güvenlik açığına sahip olması riskini nasıl giderebilirsiniz?

  • Ortamınızda ne olduğunu bilmek. Bu, güvenlik açıkları veya lisanslama kısıtlamaları gibi bu bağımlılıkların risklerini anlamak için bağımlılıklarınızı ve geçişli bağımlılıkları keşfetmeyi gerektirir.
  • Bağımlılıklarınızı yönetin. Yeni bir güvenlik açığı bulunduğunda etkilenip etkilenmeyeceğini belirlemeniz ve etkileniyorsa en son sürüme ve kullanılabilir güvenlik yaması güncelleştirmeniz gerekir. Bu, özellikle yeni bağımlılıklar getiren veya eski bağımlılıkları düzenli olarak denetleen değişiklikleri gözden geçirmek için önemlidir.
  • Tedarik zincirinizi izleyin. Bu, bağımlılıklarınızı yönetmek için sahip olduğunuz denetimleri denetleyerek gerçekleştirilir. Bu, bağımlılıklarınız için karşılanması gereken daha kısıtlayıcı koşulları zorlamanıza yardımcı olur.

The State of the Octoverse 2020 - Advisories

NuGet ve GitHub tarafından sunulan ve projenizdeki olası riskleri ele almak için kullanabileceğiniz çeşitli araç ve teknikleri ele alacağız.

Ortamınızda ne olduğunu öğrenme

NuGet bağımlılık grafiği

📦 Paket Tüketicisi

Doğrudan ilgili proje dosyasına bakarak projenizdeki NuGet bağımlılıklarınızı görüntüleyebilirsiniz.

Bu genellikle iki yerden birinde bulunur:

NuGet bağımlılıklarınızı yönetmek için hangi yöntemi kullandığınıza bağlı olarak, bağımlılıklarınızı doğrudan Çözüm Gezgini veya NuGet Paket Yöneticisi'de görüntülemek için Visual Studio'yu da kullanabilirsiniz.

CLI ortamlarında komutunu kullanarak dotnet list package projenizin veya çözümünüzün bağımlılıklarını listeleyebilirsiniz.

NuGet bağımlılıklarını yönetme hakkında daha fazla bilgi için aşağıdaki belgelere bakın.

GitHub bağımlılık grafı

📦 Paket Tüketicisi | 📦🖊 Paket Yazarı

Projenizin bağımlı olduğu paketleri ve buna bağlı depoları görmek için GitHub'ın bağımlılık grafiğini kullanabilirsiniz. Bu, bağımlılıklarında algılanan güvenlik açıklarını görmenize yardımcı olabilir.

GitHub depo bağımlılıkları hakkında daha fazla bilgi için aşağıdaki belgelere bakın.

Bağımlılık sürümleri

📦 Paket Tüketicisi | 📦🖊 Paket Yazarı

Güvenli bir bağımlılık tedarik zinciri sağlamak için, tüm bağımlılıklarınızın ve araçlarınızın düzenli olarak en son kararlı sürüme güncelleştirildiğinden emin olmak istersiniz. Bu sürümler genellikle bilinen güvenlik açıklarına yönelik en son işlevleri ve güvenlik düzeltme eklerini içerir. Bağımlılıklarınız, bağımlı olduğunuz kodu, kullandığınız ikili dosyaları, kullandığınız araçları ve diğer bileşenleri içerebilir. Bu şunları içerebilir:

Bağımlılıklarınızı yönetme

NuGet kullanım dışı ve savunmasız bağımlılıklar

📦 Paket Tüketicisi | 📦🖊 Paket Yazarı

Projenizde veya çözümünüzde sahip olabileceğiniz bilinen kullanım dışı veya güvenlik açığı olan bağımlılıkları listelemek için dotnet CLI'yi kullanabilirsiniz. komutunu dotnet list package --deprecated kullanabilir veya dotnet list package --vulnerable bilinen kullanımdan kaldırmaların veya güvenlik açıklarının listesini sağlayabilirsiniz.

GitHub güvenlik açığı olan bağımlılıklar

📦 Paket Tüketicisi | 📦🖊 Paket Yazarı

Projeniz GitHub'da barındırılıyorsa, projenizdeki güvenlik açıklarını ve hataları bulmak için GitHub Security'den yararlanabilirsiniz ve Dependabot, kod tabanınızda bir çekme isteği açarak bunları düzeltir.

Savunmasız bağımlılıkları kullanılmadan önce yakalamak, "Sola Kaydır" hareketinin bir hedefidir. Bağımlılıklarınız hakkında lisans, geçişli bağımlılıklar ve bağımlılıkların yaşı gibi bilgilere sahip olmak tam olarak bunu yapmanıza yardımcı olur.

Dependabot uyarıları ve güvenlik güncelleştirmeleri hakkında daha fazla bilgi için aşağıdaki belgelere bakın.

NuGet akışları

📦 Paket Tüketicisi

Birden çok genel ve özel NuGet kaynak akışı kullanılırken, akışlardan herhangi birinden bir paket indirilebilir. Derlemenizin tahmin edilebilir ve Bağımlılık Karışıklığı gibi bilinen saldırılara karşı güvenli olduğundan emin olmak için paketlerinizin hangi akışlardan geldiğini bilmek en iyi uygulamadır. Koruma için yukarı akış özelliklerine sahip tek bir akış veya özel akış kullanabilirsiniz.

Paket akışlarınızın güvenliğini sağlama hakkında daha fazla bilgi için bkz . Özel Paket Akışlarını Kullanırken Riski Azaltmanın 3 Yolu.

Özel akış kullanırken, kimlik bilgilerini yönetmek için en iyi güvenlik yöntemlerine bakın.

İstemci güven ilkeleri

📦 Paket Tüketicisi

Oturum açmak için kullandığınız paketlerin kullanılmasını istediğiniz ilkeler vardır. Bu, bir paket yazarına, yazar imzalı olduğu sürece güvenmenize veya NuGet.org tarafından imzalanan depoya ait belirli bir kullanıcı veya hesaba aitse bir pakete güvenmenize olanak tanır.

İstemci güven ilkelerini yapılandırmak için aşağıdaki belgelere bakın.

Dosyaları kilitleme

📦 Paket Tüketicisi

Kilit dosyaları paketinizin içeriğinin karması depolar. Yüklemek istediğiniz paketin içerik karması kilit dosyasıyla eşleşiyorsa, paket yinelenebilirliğini sağlar.

Kilit dosyalarını etkinleştirmek için aşağıdaki belgelere bakın.

Paket Kaynağı eşlemesi

📦 Paket Tüketicisi

Paket Kaynağı Eşlemesi, çözümünüzdeki her paketin nuget.config dosyanızda hangi kaynaktan geri yüklenmesi gerektiğini merkezi olarak bildirmenize olanak tanır.

Paket kaynağı eşlemesini etkinleştirmek için aşağıdaki belgelere bakın.

Tedarik zincirinizi izleme

GitHub gizli dizi taraması

📦🖊 Paket Yazarı

GitHub, yanlışlıkla işlenen gizli dizilerin sahte kullanımlarını önlemek için NuGet API anahtarları için depoları tarar.

Gizli dizi tarama hakkında daha fazla bilgi edinmek için bkz . Gizli dizi tarama hakkında.

Paket İmzalama Yazma

📦🖊 Paket Yazarı

Yazar imzalama , bir paket yazarının kimliğini bir pakete damgalamasına ve tüketicinin sizden geldiğini doğrulamasına olanak tanır. Bu sizi içerik üzerinde oynanmaya karşı korur ve paketin kaynağı ve paketin orijinalliği hakkında tek bir gerçek kaynağı görevi görür. İstemci güven ilkeleriyle birleştirildiğinde, paketin belirli bir yazardan geldiğini doğrulayabilirsiniz.

Bir paketi imzalamayı yazmak için bkz . Paketi imzalama.

Yeniden Üretilebilir Derlemeler

📦🖊 Paket Yazarı

Yeniden üretilebilir derlemeler, her derlemede bayt için aynı olan ikili dosyalar oluşturur ve bir paket tüketicisinin ikili dosyayı doğrudan yeniden oluşturmasını ve derleme ortamının gizliliğinin ihlal edilmediğini doğrulamasını sağlayan kaynak kod bağlantıları ve derleyici meta verileri içerir.

Yeniden üretilebilir derlemeler hakkında daha fazla bilgi edinmek için bkz . Kaynak Bağlantı ile Paket Oluşturma ve Yeniden Üretilebilir Derleme Doğrulama belirtimi.

İki Öğeli Kimlik Doğrulaması (2FA)

📦🖊 Paket Yazarı

nuget.org'da her hesapta 2FA etkindir. Bu, GitHub hesabınızda veya NuGet.org hesabınızda oturum açarken ek bir güvenlik katmanı ekler.

Paketleme kimlik ön eki ayırma

📦🖊 Paket Yazarı

Paketlerinizin kimliğini korumak için, paket kimliği ön ekiniz belirtilen ölçütlere uygun şekilde düşerse eşleşen bir sahibi ilişkilendirmek için ilgili ad alanınızla bir paket kimliği ön eki ayırabilirsiniz.

Kimlik ön eklerini ayırma hakkında bilgi edinmek için bkz . Paket Kimliği ön eki ayırma.

Güvenlik açığı olan bir paketi kullanımdan kaldırma ve listeden çıkarma

📦🖊 Paket Yazarı

Yazdığınız bir pakette bir güvenlik açığı olduğunu fark ettiğinizde .NET paketi ekosistemini korumak için paketi kullanımdan kaldırıp listeden çıkararak paket arayan kullanıcılardan gizlenmesi için en iyisini yapın. Kullanım dışı bırakılmış ve listelenmemiş bir paket kullanıyorsanız, paketi kullanmaktan kaçınmanız gerekir.

Bir paketi kullanımdan kaldırmayı ve listeden kaldırmayı öğrenmek için paketleri kullanım dışı bırakma ve listeden çıkarma ile ilgili aşağıdaki belgelere bakın.

Özet

Yazılım tedarik zinciriniz, kodunuzun içine giren veya kodu etkileyen her şeydir. Tedarik zinciri risklerinin gerçek olmasına ve popülerliğinin artmasına rağmen, bunlar hala nadirdir; bu nedenle yapabileceğiniz en önemli şey, bağımlılıklarınızın farkında olarak tedarik zincirinizi korumak, bağımlılıklarınızı yönetmek ve tedarik zincirinizi izlemektir.

NuGet ve GitHub'ın tedarik zincirinizi görüntüleme, yönetme ve izleme konusunda daha etkili olmak için bugün kullanabileceğiniz çeşitli yöntemler hakkında bilgi edindiniz.

Dünyanın yazılımının güvenliğini sağlama hakkında daha fazla bilgi için bkz . Octoverse 2020 Güvenlik Raporu'nun Durumu.