Ne işe yarar ve ne işe yaramaz
A yazılım paketi yeniden kullanılabilirlik hayali mümkün hale geldi. Her türden bireysel geliştirici ve kuruluş, standartlaştırılmış ‘paket’ formatlarında genel depolarına yazılım bileşenleri katkıda bulundu; ve paket yöneticileri herkesin bu paketleri kendi yazılımlarına kurmasına ve entegre etmesine izin verdi. Açık kaynağı modern toplumda bu kadar yaygın hale getiren şey budur. Genel paket kayıtlarından, paket yöneticilerinden ve sürekli derleme ve dağıtım araçlarından oluşan altyapı, açık kaynak yazılımının benimsenmesini bu kadar yaygın hale getirdi. Bu altyapı, bulut bilişimle birlikte, bilgi bağımlısı toplumumuz için mükemmel bir temel oluşturur.
Son yıllarda, her türden suçlu kötü niyetli davranışları sunmak için açık kaynaklı yazılım kayıtlarını kullandı. Bu faaliyetler açık kaynak kadar eskidir, ancak sıklıkları son üç yılda patlama yaptı. Geçtiğimiz yıl tam 245.000 kötü amaçlı paket görüldü.
Bu saldırı vektörü neden tehdit aktörleri arasında bu kadar popüler hale geldi? Suçlular saldırılarını gerçekleştirmek için her zaman yeni yollar ararlar. Tek bir popüler açık kaynaklı bileşeni enfekte ederek binlerce kurbanı etkileyebileceklerini keşfettiler. Bu güçlendirme etkisi birincil itici güçtür. Ve açık kaynaklı altyapı, herhangi birinin, herhangi bir yerde bir bileşen kayıt defterinde veya işbirlikçi geliştirme platformunda geçici bir hesap oluşturmasına olanak tanır. Sıfır maliyet, inceleme yok ve yazılım ekiplerinin geleneksel olarak üçüncü taraf bileşenlere duyduğu aşırı güveni artırmak için birçok fırsat.
Açık kaynak kodlu bileşenleri kullanmayı bırakmalı mıyız? Hayır. Sağladıkları değer riske değer mi? Elbette. Açık kaynak kodlu bileşenleri aynı şekilde kullanmaya devam etmeli miyim? Kesinlikle hayır.
Peki altyapı bu kadar kolay saldırılara neden izin veriyor?
Paket kayıtları açıktır ve genellikle yayıncının kimliğinin asgari düzeyde doğrulanmasını gerektirir. “Herkes yazılımını burada yayınlamaya davetlidir!” Saldırganlar için çıta düşüktür: Kısa, kimlik avı benzeri kampanyalarda yüzlerce kötü amaçlı paket oluşturmak için tek kullanımlık e-posta adresleri ve GitHub hesapları kullanırlar. Sık sık birçok yıldız ve birden fazla sahte katkıda bulunanın gönderdiği taahhütlerle güvenilir bir GitHub kaynak deposunun oluşturulmasına tanık oluruz.
Paket yöneticileri güvenlik için değil, kullanım kolaylığı için tasarlanmıştır. Kurulum betiklerini çalıştırabilirler. Ayrıca, paket yöneticileri birden fazla kaynaktan kurulum yapar ve bazen varsayılan olarak dahili bileşenler için bile genel kayıt defterleri kullanılır. Ve son olarak, yayınlanan paket ile paket kaynakları arasında bir uyumsuzluk olup olmadığını kontrol etmezler.
Bağımlılıklar iç içedir ve kimsenin elle takip edemeyeceği bir grafik oluşturur. Bazı ekosistemlerde, küçük ölçekli bağımlılıklar yüzlerce veya binlerce birikir. Bir şey, yazılım projelerim tarafından beyan edilen doğrudan bağımlılıklar üzerinde sıkı bir kontrole sahip olmaktır, ancak geçişli bağımlılıkları kontrol etmek daha zordur. Açık kaynak “arkadaşlarımın arkadaşları benim arkadaşlarımdır”ı takip etti. Kardeşlik vahşi Uzak Doğu’da normdur! Tehdit aktörleri bunu bilir ve kötü niyetli davranışlarını belirsiz, bilinmeyen bağımlılıkların derinliklerinde gizler.
Son yıllarda açık kaynak altyapısına bazı güvenlik kontrolleri eklendi; örneğin bazı koşullar altında çok faktörlü kimlik doğrulama, kuruluşlar için mülkiyet kanıtı içeren kayıt prosedürleri veya paketler ve konteyner imajlarında dijital imzalara izin verilmesi gibi. Ancak bunlar saldırıların hızını hiç yavaşlatmadı.
Hangi kötü niyetli davranış?
En yaygın olanı bilgi hırsızı/kimlik bilgileri süzücü. Karmaşık olmayan saldırıların %90’ından fazlası, çoğunlukla parolalar, erişim belirteçleri veya API anahtarları gibi kimlik bilgilerini arayan basit hırsızlardır. Muhtemelen yazması en basit olanıdır. Fikir basittir: “Kimlik avı kimlik bilgileri için bir hırsız yayınlarım, böylece daha sonra yönlendirilmiş bir saldırı başlatmak için kimlik bilgilerini kullanabilirim”. Kimlik bilgileri bu şekilde çalındıktan sonra önemli fidye yazılımı saldırıları meydana gelmiştir.
Popülerlikte ikinci sırada geleneksel ikili kötü amaçlı yazılım varyantlarının dropper’ları/indiricileri yer alır; kötü amaçlı bileşenlerin üçte birinden fazlasında dropper’lar bulunur. Bunlar arka kapılar, casus yazılımlar ve kripto süzgeçleri gibi şeyler yükler.
Finansal olarak motive olmuş düşmanlar, kripto madencileri çalıştırmak için bulut varlıklarınızı kullanmaya isteklidir. Çalınan bulut altyapısı için kurbana fatura edilen her 53 dolara karşılık 1 dolarlık düşük kar oranını umursamazlar: faturaları ödemezler!
Meşru ve kötü niyetli bileşenlerin yanı sıra, spam paketleri (kolay kazanç, dolandırıcılık, Viagra tekliflerine bağlantılar ve benzeri) ve hata ödülü ve güvenlik araştırması aldatmacaları da dahil olmak üzere çeşitli suistimaller gözlemledik.
İyi bir haber mi? Henüz görmedik doğrudan kötü amaçlı bileşenler aracılığıyla iletilen fidye yazılımı saldırıları. Bilinmeyen nedenlerden dolayı, siber suçlular daha geleneksel dağıtım mekanizmalarını tercih ediyor gibi görünüyor.
Kuruluşum bazı yazılımlar üretiyor. Endişelenmeli miyim?
Risk yüksektir. Öncelikle, kötü amaçlı paketlerin kapsamlı bir veritabanı yoktur. Güvenlik açıklarına atanmış bir kod (CVE Kimliği) vardır, ancak yalnızca manşetlere çıkan birkaç kötü amaçlı pakete bir kod verilir. Alışılmış kötü amaçlı yazılım araçları kötü amaçlı bileşenler için özel hükümler koymaz (bu hoş olurdu!). Bileşen Y’nin X sürümünün kötü amaçlı yazılım içerip içermediğini doğrudan veya dolaylı olarak belirlemek kolay değildir.
Soruna daha yakından bakıldığında (biz siber güvenlik satıcıları genellikle felaket tellallarının tarafında yer alırız) riskin gerçek büyüklüğü biraz sınırlanır. Sayılarla ifade etmek gerekirse, kötü amaçlı paketlerin çoğu basit ve düşük risklidir: temel kimlik bilgilerini sızdıran, genellikle ikinci aşama saldırıları için kullanılan tipo-squatiing paketleriyle saf geliştiricileri “kimlik avına” çıkarmaya çalışırlar. Tespit edilen tüm kötü amaçlı paketlerin %98’i bu kadar basittir. Ancak önemsiz kötü amaçlı yazılımların (biz bunlara “hamsi” diyoruz) oluşturduğu o arka plan gürültüsünün ardında, bazen farklı canavarlar (“köpekbalıkları” olarak adlandırıyoruz) aniden ortaya çıkar. Manşetlere konu oldular.
Ne işe yaramıyor?
Güvenlik konusunda bilinçli çoğu profesyonelin bu tehdit ile nasıl başa çıkılacağına dair fikirleri vardır. Güvenlik yöneticilerinin, Yazılım Bileşimi Analizi (SCA) araçlarının bir paket sürümünün kötü amaçlı yazılım olduğunu size zaten söylediğini tereddüt etmeden duyduklarını duyduk. Ya da herhangi bir kötü amaçlı yazılımın derhal tespit edilip kaldırılacağı iyi bilinen, çokça incelenen yazılım bileşenlerine bağımlı olduklarını söylediler. Otomatik olarak güvenlik açığı düzeltmeleri almak için açık küçük/yama sürümlerini kullanırlar ve bu, “erken yama, sık yama” ilkesini izleyerek açık kaynak bağımlılıklarındaki riski düşürmenin uygun, önerilen yoludur. Bu fikirler açıkça yanlış Kötü amaçlı yazılımlara karşı, yanlış anlamaları çürütmek kolaydır.
SCA araçları gerçekten de (bazı) kötü amaçlı bileşenleri bildirir, ancak olaydan sonra… kötü bileşen bir yazılım derlemesinde kullanılmışsa muhtemelen çok geç olur. Sırlar sızdırılmış, ek kötü amaçlı yazılımlar indirilmiş ve yüklenmiş olabilir ve belki de saldırgan yatay olarak hareket etmiş ve başka bir yere erişim elde etmiş olabilir. Kötü amaçlı bileşenler, kayıt defteri güvenlik ekibi kötü amaçlı yazılım olduğunu doğruladıktan sonra kamu kayıt defterinden derhal kaldırılır. SCA araçları bunu öğrendiğinde, kötü amaçlı yazılım aslında etkisiz hale getirilir, ancak onu yükleyen kurbanlar için çok geç olur!
Başka bir yanlış anlama da, kurulum betiklerini derleme zamanında engellemenin açık kaynaklı bileşenlerden gelen kötü amaçlı davranışları engellediğidir. Kötü amaçlı davranış orada gerçekleşirse bu kısmen doğrudur, ancak saldırganlar artık saldırı yükünü çoğunlukla çalışma zamanında çalıştırır.
Açık sürümlerin paket yöneticisinin güvenlik düzeltmeleri için kullanılabilir olduğunda yeni güncellemeleri otomatik olarak yüklemesine izin verdiği “erken ve sık yama uygulama” ile bir yazılım için tüm doğrudan ve geçişli bağımlılıkların sabit bir sürümde olduğu “sürüm sabitleme” arasında bir denge vardır. Güvenlik ilkeleri inatçıdır ve bazen çelişkilidir. Bazı paket yöneticileri sunucu aralıklarıyla önerilen şekilde otomatik güncellemeler yapar. Kötü amaçlı güncellemeleri de almak istiyorsanız harika! Evet, güvenlik açıklarını mümkün olan en kısa sürede kapatan güvenlik düzeltmelerini almak için bileşenler güncellenmelidir, ancak… paket yöneticisinin bunu otomatik olarak yapmasına asla izin vermeyin.
Ve son olarak, popüler, güvenilir bileşenlerin kullanılmasının güvenli olduğunu ve herhangi bir kötü amaçlı sürümün derhal bulunacağını, ifşa edileceğini ve kaldırılacağını varsaymak, hayal ürünüdür. Bir bileşene güvenilir çünkü çok popülerdir, birçok göz güvenlik açığı arar, bakım için çok sayıda katkıda bulunan vardır ve tüm değişiklik isteklerini titizlikle inceleyen birden fazla çekirdek bakımcısı vardır. Gerçek ise oldukça farklıdır. En temel bileşenlerin çoğu tek bir ücretsiz geliştirici tarafından korunur. En iyi ihtimalle, birkaç düzenli katkıda bulunanları vardır. Saldırganlar da bariz nedenlerle birçok gözlerini en popüler paketlere koyarlar. Ve tespit ve kaldırmada “hızlılığı” unutun: Yeni bir kötü amaçlı bileşenin genel kayıt defterinden kaldırılması günler sürer. Kayıt defterleri, iyilik için bir bileşen sürümünü kaldırma konusunda dikkatlidir. Deneyimimize göre, tarafımızdan bildirildikten sonra, kayıt defterinin etkilenen sürümü kaldırması için ortalama süre 39 saattir, bir buçuk günden fazladır. İlk raporlamamızdan bir hafta sonra bile varlığını sürdüren kötü amaçlı bileşenler vardır. Bazı durumlarda ise, bileşen ancak mağdurun bileşenle ilgili bir olay bildirmesinin ardından kaldırılır.
Kötü amaçlı açık kaynaklı yazılımlara karşı daha iyi korunmak için ne yapabilirim?
Sağlam sürüm işleme. Kontrollü ve bilgilendirilmiş sürüm yükseltmeleriyle sürüm sabitleme, kötü amaçlı yazılım almadan güvenlik açıklarını kaldırma ihtiyacını dengelemenin yoludur. Bir sürümü güncellemeniz gerektiğinde, yeni sürümün kötü amaçlı davranış içerip içermediğini bilmeniz gerekir.
Bu, “erken uyarı” olarak adlandırılan ikinci savunma hattına yol açar. Kötü amaçlı bileşenler sorununa bir yaklaşım, yayınlanan yeni sürümlerin bir tespit motoru tarafından analiz edildiği ve yeterli kanıt bulunduğunda yeni sürümü potansiyel olarak kötü amaçlı olarak sınıflandırabileceği erken uyarı sistemidir (Kötü Amaçlı Yazılım Erken Uyarısı veya MEW). Otomasyon burada önemlidir, çünkü mevcut yayınlama oranında tüm yeni bileşenleri manuel olarak incelemek imkansızdır. Bu nedenle tespit motorunun statik, dinamik ve yetenek analizi, kullanıcı itibarı ve diğer kanıtlar dahil olmak üzere çeşitli teknikleri birleştirmesi gerekir.
Başka bir savunma hattı “bağımlılık güvenlik duvarı” olarak bilinir: Yazılımınızda kullanılan tüm bağımlılık grafikleri için bileşenlerin kapsamlı bir beyaz listesine sahip olmak, böylece kuruluşunuzda çalıştırılan herhangi bir yapı hattında yalnızca onaylı bileşen sürümleri yüklenebilir ve kullanılabilir. “Güvenlik duvarı”, izin verilen bileşen sürümleri için tarball’ların sunulduğu (önbelleğe alınmış veya proxy’lenmiş) dahili bir kayıt defteri kullanılarak uygulanır. Lütfen, erken uyarı sistemi gibi herhangi bir yeni sürümü makul derecede güvenli olarak sınıflandırmak ve böylece beyaz listeye eklenebilmesi için teknolojiye sahip olmadığınız sürece beyaz listelemenin işe yaramayacağını unutmayın.
Ve son yaklaşım çalışma zamanında ilerler, yazılımdaki sürümler için beklenen davranışı yakalayıp öğrenerek ve ardından yazılımın yapmaya çalıştığı şeydeki herhangi bir anormalliği tespit edip engelleyerek çalışma zamanında davranışı analiz eder. Fikir, normallikten sapan yazılımları izlemek ve engellemek için çalışma zamanını enstrümante etmektir ve bu, kötü amaçlı bileşen zararlısına karşı koruma mekanizmaları cephaneliğine eklenecek umut verici bir fikirdir.
Sonuç Açıklamaları
Önerilen strateji, yazılım geliştirme sürecinde farklı teknikleri bir araya getirmeli, gelen kötü amaçlı bileşenleri engellemek için sürüm güncellemelerinin kontrolünü ele almalıdır. Önemli güvenlik açıkları için düzeltmeler elde etmek üzere sürümleri güncelleyerek otomatik bulaşmayı önlemek için sürüm sabitlemeyi sağlamalıyız; kötü amaçlı yazılımlarla dolu olmadıklarına dair yeterli kanıta sahip olmak için sürüm güncellemeleri sırasında doğrudan ve dolaylı bağımlılıkların hızlı ve etkili bir şekilde değerlendirilmesi. Bilinen kötü amaçlı bileşenlere bağlı yazılım yapıları engellenmelidir. Ve hepsi uygulanmalıdır.
Açık kaynaklı yazılımları güvenli bir şekilde tüketmek kolay değildir ve kötü amaçlı yazılım faktörü tam olarak hesaba katılmalı, güvenlik açığı yönetimine de benzer bir çaba sarf edilmelidir. Düzenleyiciler sorumluluk yükünü yazılım üreticilerine yüklüyor, bu nedenle yazılımımızda kötü amaçlı yazılım dağıtıcısı olmaktan kaçınmak için neler yapabileceğimizi düşünmenin zamanı geldi.
Yazar Hakkında
Luis Rodríguez, siber güvenlikte, özellikle yazılım güvenliğinde 15+ yıllık deneyime sahip bir fizikçi ve matematikçidir. Alandaki farklı projelerde teknik bir evangelist olarak çalışmıştır ve şu anda Xygeni Security’nin kurucu ortağı ve CTO’sudur.
Luis Rodríguez’e çevrimiçi olarak şu adresten ulaşılabilir: [email protected] veya https://www.linkedin.com/in/luis-rodríguez-xygeni/ ve şirketimizin web sitesi https://xygeni.io/.