GitHub, dağıtım güvenliği için eBPF ile döngüsel bağımlılıkları nasıl engelliyor
GitHub, kendi kaynak kodunu barındırdığı için oluşan döngüsel bağımlılıkları eBPF ile nasıl tespit edip engellediğini anlatıyor; cGroup tabanlı ağ filtreleme ve DNS proxy yaklaşımı detaylarıyla ele alınıyor.
GitHub, kendi kaynak kodunu github.com üzerinde barındırdığı için ilginç bir döngüsel bağımlılık sorunuyla karşı karşıya: platform çökerse, çökmeyi düzeltmek için gereken kodu deploy edemiyor. Bu sorunu ayna depolar ve önceden derlenmiş build'lerle kısmen çözseler de, deploy script'lerinin kendi içinde GitHub'a veya iç servislere bağımlılık yaratması ayrı bir risk oluşturuyor. Şirket bunu doğrudan, gizli ve geçici bağımlılıklar olarak üç kategoriye ayırıyor; örneğin bir MySQL deploy script'inin açık kaynak bir aracı GitHub'dan çekmeye çalışması ya da başka bir iç servisin arka planda böyle bir istek göndermesi gibi.
GitHub, bu bağımlılıkları statik kod incelemesiyle bulmak yerine, deploy script'lerini çalışırken izleyip gerektiğinde ağ erişimini kesintiye uğratmadan kısıtlayacak bir sistem kurmuş. Çözüm, Linux çekirdeğine özel programlar yükleyip ağ trafiği gibi çekirdek düzeyindeki olaylara kanca atmayı sağlayan eBPF teknolojisi. Özellikle BPF_PROG_TYPE_CGROUP_SKB program tipini kullanarak, yalnızca deploy script'inin çalıştığı cGroup'un giden ağ trafiğini izleyip kontrol edebilmişler; böylece stateful ve müşteri trafiği sunan sunucuların genel ağ erişimini kesmeden, yalnızca script'in erişimini sınırlayabilmişler.
IP tabanlı filtrelemenin GitHub'ın büyük ve sürekli değişen altyapısında sürdürülemez olduğunu fark eden ekip, DNS sorgularını da eBPF ile ele almış. BPF_PROG_TYPE_CGROUP_SOCK_ADDR program tipiyle DNS sorgularını (port 53) kendi kullanıcı alanı DNS proxy'sine yönlendirmişler; bu proxy, istenen alan adını bir engel listesiyle karşılaştırıp eBPF Map'ler aracılığıyla ağ katmanına izin ver/engelle kararını iletiyor. Bu yaklaşım, mühendislere üretim ortamındaki dağıtım riskini azaltacak, düşük seviyeli ve esnek bir gözlemlenebilirlik/kontrol katmanı örneği sunuyor; benzer sorunlarla karşılaşan ekipler için cilium/ebpf gibi araçlarla kendi eBPF programlarını yazmaya başlamak mümkün.