Çatladı! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler

Çatladı! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler

2022 SANS Holiday Hack Challenge'da öğrenmek eğlenceyle buluşuyor - ben Grinchum'un faul planını bozup beş altın yüzüğü geri alırken Kuzey Kutbu'nda çılgın bir yolculuğa hazırlanın

Bu benim ilk katıldığım yıl SANS Tatil Hack Mücadelesi ve bir patlama oldu. Kolaydan zora değişen bir dizi 16 zorlukla, şüpheli ağ trafiğini ve PowerShell günlüklerini analiz etme, yazma alıştırmaları yaptım. Suricata kuralları, bir Docker kapsayıcı, yararlanmak için sızan anahtarları bulma GitLab CI/CD işlem hattı ve bir AWS kullanıcısı, iletken XML Harici Varlık saldırılarıve satın almak için bir akıllı sözleşmeyi hacklemek mantar olmayan token.

Bu deneyimin en iyi yanı, beni yeni araçlar ve teknolojilerle tanıştırması ve böylece siber güvenlik bilgimi çok daha fazla genişletmesiydi. Burada, zorlukları çözmekten birkaç önemli noktayı paylaşıyorum.

Oryantasyon

Her katılımcı, Kuzey Kutbu'nda geçen bir tarayıcı içi video oyunu ortamında gezinmek için bir avatar alır:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Oryantasyon sırasında, oyunun zorlukları tamamlama karşılığında KringleCoins vermek için kullandığı ve son mücadelede bir akıllı sözleşmeyi kırmak için kullandığınız bir kripto para cüzdanı alırsınız. İlginç bir şekilde oyun, bir Ethereum blok zincirindeki tüm KringleCoin işlemlerini takip eder, yani ilerlemenizin eksiksiz bir kaydı da bu blok zincirinde saklanır.

Oyunun ilk halkasına.

1. Tolkien Yüzüğü

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Tolkien Yüzüğü'nü bulmak, günlük analiz kaslarımı esnetmeyi gerektirdi.

Wireshark kimlik avı

İlk olarak, sağlananları analiz etmek için Wireshark'ı kullandım. .pcap adresinde bir sunucuyu ortaya çıkaran dosya adv.epostoday[.]uk dosyayı indirmek Ref_Sept24-2020.zip bir bilgisayara:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

ZIP dosyasının içine bakarken, adlı bir yürütülebilir dosya buldum. Ref_Sept24-2020.scr ESET Endpoint Security'de iki algılamayı tetikleyen: BAT/Koşucu.ES ve Genel.TAGTBG. Bu kötü amaçlı yazılım, sonunda bellekte çalışan kötü amaçlı bir yürütülebilir dosyaya yol açar. yapılandırma.dll ve ESET tarafından algılandı Gelişmiş Bellek Tarayıcı as Win32/Dridex.DD.

Windows olay günlükleri

Ardından, sağlananları analiz ettim .evtx Olay Görüntüleyicisi ile PowerShell günlüklerini içeren dosya. PowerShell günlüklerini analiz etmek için başka araçlar olsa da, saldırganlar radarın altında kalmak için karada yaşayan ikili dosyaları nasıl kullanacaklarını biliyorsa, savunucuların da bir işletim sisteminin sağladığı yerel araçlar konusunda bilgili olması gerekir.

Günlükler 10,434 olay içerdiğinden, olayları tarihe göre grupladım ve ardından Bul eylemini çalıştırarak bu olayları içeren olayları aradım. $ karakter. PowerShell'de, $ oluşturmak ve referans vermek için kullanılır değişkenler. Saldırganın aşağıdaki betiği çalıştırdığı 24 Aralık 2022'de gerçekleşen bir saldırı buldum:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Görünüşe göre saldırgan gizli bir tarif bulmuş, içindeki gizli içeriği değiştirmiş. bal için Balık Yağıve ardından yeni bir tarif dosyası oluşturdu. Bu, uzaktan PowerShell komutlarının yürütülmesi anlamına gelen 4104 kimliğine sahip bir olayı tetikledi. Bu nedenle, olayları bu kimliğe göre filtreleyerek ek kötü amaçlı olayları daha hızlı bulmama yardımcı oldum.

Suricata Yarışları

Tolkien Ring için son alıştırma, bir Dridex istilası için ağ trafiğini izlemek üzere dört Suricata kuralı yazmaktı:

alert dns $HOME_NET herhangi -> herhangi biri (msg:”Bilinen kötü DNS araması, olası Dridex enfeksiyonu”; dns.query; content:”adv.epostoday.uk”; nocase; sid:1; rev:1;)

alert http 192.185.57.242 herhangi bir <> herhangi bir (msg:”Şüpheli bağlantıları araştırın, olası Dridex bulaşması”; sid:2; rev:1;)

alert tls herhangi biri -> herhangi biri (msg:”Kötü sertifikaları araştırın, olası Dridex enfeksiyonu”; tls.cert_subject; içerik:”CN=heardbellith.Icanwepeh.nagoya”; sid:3; rev:1;)

alert http herhangi biri -> herhangi biri (msg:”Şüpheli JavaScript işlevi, olası Dridex enfeksiyonu”; file_data; content:”let byteCharacters = atob”; sid:4; rev:1;)

Sırasıyla, bu kurallar şu adres için DNS aramalarını yakalar: adv.epostoday[.]uk, IP adresine bağlantılar 192.185.57[.]242, kötü amaçlı sunucunun kullanımı Heardbellith.Icanwepeh[.]nagoya ortak adla tanımlanır (CN) bir TLS sertifikasında ve JavaScript kullanımı atob() istemcide base64 ile kodlanmış verileri içeren bir ikili dizenin kodunu çözme işlevi.

Bu üç görevi tamamlamak bana Tolkien Yüzüğünü kazandırdı:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

İkinci halkada.

2. Elfen Yüzüğü

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Elfen Ring için en belirgin zorluklar Prison Escape ve Jolly CI/CD idi.

Prison Escape

Prison Escape, bir Docker kapsayıcısındaki bir kullanıcıya kök ayrıcalıkları vermenin, ana bilgisayar sisteminde kök ayrıcalıkları vermek kadar iyi olduğunu sert bir şekilde hatırlattı. Buradaki zorluk, konteynırdan çıkmaktı. Kök olduğunuzda kolayca yapılır:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Kök kullanıcı olarak, aygıt için bölüm tablolarını listeledim ve ardından ana bilgisayar dosya sistemini bağlayarak ana bilgisayara tam erişim sağladım. Artık, oyun içi ipuçlarında gösterildiği gibi ana dizinde bulunması gereken anahtarı arayabilirim:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Neşeli CI/CD

Bu hızlı olsa da, Jolly CI/CD çözmem tüm zorluklar arasında en uzun olanıydı. İlk olarak, HTTP üzerinden klonlamamız için bize bir Git deposu verildi:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

URL'den, havuzun adının olduğunu görebiliyordum. wordpress.flag.net.dahili, bu yüzden depoya taşındım ve bir WordPress web sitesi buldum. Web sitesinin yayında olup olmadığını kontrol ettim:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Evet, web sitesi işlevseldi. Kaynak kodu geçmişinde herhangi bir sızdırılmış anahtar olup olmadığını merak ettim. Evet ise, düzenlemeleri kaynak koduna aktarabilmeliyim. ben de koştum git günlüğü:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Taahhüt mesajlarından, şuna benziyor: işlemek bir çemberi düzeltmek için varlıklar eklendikten sonra yapıldı. Whoops öncesi taahhüdü kontrol etme zamanı:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Harika, bir tane buldum .ssh anahtarları olan dizin. Bu anahtarları kopyalayalım ve bu anahtarların sahibini taklit edip edemeyeceğimi görmek için bir SSH aracısı ve bir Git kullanıcısı yapılandıralım:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Şimdi ana dala dönelim ve kaynak kodda önemsiz bir değişiklik yapıp yapamayacağımızı test edelim (nano kullanarak, dosyalardan birine bir boşluk ekledim):

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Böylece, WordPress geliştiricilerinden birinin kimliğine bürünerek zorluğun ilk bölümünü başardım, ancak web sitesi zorlamamdan sonra hala çalışıyor mu?

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Push'um bir şeyi değiştirdi çünkü artık web sitesi 8080 numaralı bağlantı noktasına yönlendirildi.

Şimdiye kadar, zorluğun tamamlamanın anahtarı olması gereken CI/CD kısmını görmezden gelmiştim. Depo bir içerir .gitlab-ci.yml GitLab CI/CD işlem hattı için yapılandırma sağlayan dosya. Depoya her bastığınızda, CI/CD sistemi devreye girer ve bir GitLab Koşucusu bu YML dosyasındaki komut dosyalarını yürütür. Bu, GitLab Runner'ın kurulu olduğu sunucuda uzaktan kod yürütmeyi başarmak kadar iyi, diye düşündüm.

Yakından bakınca bir gördüm rsync Git deposundaki tüm dosyaları web sitesinin sunulduğu web sunucusundaki dizine kopyalayan komut dosyası. İlk başta, kullanmayı denedim rsync web sunucusundaki tüm dosyaları Git deposuna kopyalayarak, ancak başarılı olmadan veri akışını tersine çevirmek.

Pek çok hipotez testinden sonra, sonunda çığır açan bir içgörüye sahip oldum: WordPress web sitesini "düzeltmeye" çalışmak veya derleme sistemi aracılığıyla kötü amaçlı komut dosyaları çalıştırmak yerine, web sunucusundan bilgi sızdıran bir web sitesi sunun. İçeri index.php (deponun en üst seviyesinde bulunur), WordPress web sitesini yükleyen kodu yorumlayabilir ve web sunucusunu araştıran PHP komutlarını çalıştırabilirim.

Aslında, PHP ile kabuk komutlarını bile çalıştırabilirim. onu buldum geçiş() kolayca çalıştı.

In index.php, Kullandım // iki satırı yorumlamak için ekledim parola('ls -la /'); son satırda. Bu, web sunucusunun kök dizinindeki tüm dosyaları listeleyen bir web sitesi oluşturur:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Sonra bu değişikliği Git deposuna aktardım ve GitLab CI/CD sistemi web sitesini benim için güncellemekle ilgilendi:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Ah, Elfen Yüzüğü içeride olmalı bayrak.txt! Önceki adımları tekrarladım, ancak bu sefer kullanarak parola('cat /flag.txt'); web sitesini bir dahaki sefere talep ettiğimde Elfen Yüzüğünü ortaya çıkarmak:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Üçüncü zile.

3. Ağ Yüzüğü

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Benim için en eğlenceli meydan okuma Open Boria Mine Door idi, ancak Glamtariel's Fountain ilginç olduğu kadar bilmeceler de sunuyordu.

Boria Maden Kapısını Aç

Open Boria Mine Door'da, giriş doğrulamasını atlamak için altı pin veya mini zorluklar sunuldu veya İçerik Güvenliği Politikası giriş ve çıkış borularını pimler arasında bağlamak, boru renklerini eşleştirmek dahil. Çoğu pin için, 'o' harflerini bağlayan bir liste yazmak için HTML kullandım. İşte benim son çözümüm:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Pim 1

Pin 1 için doğrulama yoktu, bu yüzden basit bir HTML ve satır içi CSS meselesiydi:

Pim 2

Pin 2, JavaScript'e izin vermeyen ancak satır içi CSS'ye izin veren bir İçerik Güvenliği Politikasına sahipti, dolayısıyla bu benim yöntemim için sorun değildi:

Pim 3

Pin 3, CSS'ye izin vermeyen ancak satır içi JavaScript'e izin veren bir İçerik Güvenliği Politikasına sahipti, bu yüzden stilleri değiştirmek için JavaScript kullandım:

Pim 4

Pin 4'ün İçerik Güvenliği Politikası yoktu, ancak istemci tarafında çift tırnak, tek tırnak, sol açılı ayraç ve sağ açılı ayraçları kaldıran bir sanitizeInput işlevi vardı. Buradaki püf nokta, bu işlevin formu göndererek değil, Bulanık Etkinlik. Başka bir deyişle, fareyi giriş alanından uzaklaştırmak, Bulanık olay, herhangi bir girişi dezenfekte ediyor. Çözüm, formu düğmesine basarak göndermekti. Keşfet fare imlecini giriş alanının sınırları dışına taşımamaya dikkat ederek:

Pim 5

Pin 5 aynıydı sanitizeGirişi satır içi CSS'yi yasaklayan ancak satır içi JavaScript'e izin veren bir İçerik Güvenliği Politikası ile birlikte çalışır ve atlar:

Pim 6

Son olarak, Pin 6 girişi temizlemedi, ancak hem satır içi CSS'yi hem de JavaScript'i yasaklayan daha katı bir İçerik Güvenliği Politikası kullandı. Benim çözümüm, ihtiyacım olan stilleri elde etmek için kullanımdan kaldırılmış HTML kullanmak ve liste yerine bir tablo kullanmaktı:

Glamtariel Çeşmesi

Glamtariel Çeşmesi pratik yapmak için bir fırsattı XML Harici Varlık (XXE) saldırıları. Özel bir XML varlığının nasıl tanımlanacağını bulmak, sunucudan dosya isteyen bir varlığı tanımlamak ve bu varlığı bir HTTP isteğine yük olarak eklemek zor olmadı. En zor kısım, sunucunun sızdıracağı dosyalara giden yolu tahmin etmek için oyun içi bilmeceleri bulmaktı. İşte altın yüzüğün yerini ortaya çıkaran o çığır açan talep:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Bu meydan okumadan öğrenilen iki ders sunacağım. İlk olarak, İçerik Türü Dönüştürücü uzatma Geğirmek JSON yüklerini XML'e dönüştürmek için. İkinci olarak, XXE yükünü farklı etiketlere yerleştirmeyi deneyin - tek yapmam gerekenin &xxe; içindeki yük talepTürü etiketi yerine imgDrop etiketi.

Dördüncü zile.

4. Bulut Yüzüğü

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Cloud Ring için oynamak, Amazon Web Services (AWS) Komut Satırı Arayüzüne (CLI) yeni başlayanlar için bir baskıydı.

Bu zorluklar dizisinin öne çıkan özelliği, yer mantarı AWS kimlik bilgilerini bir Git deposunda bulmak ve ardından bir AWS kullanıcısı olarak kimlik doğrulaması yapmak için bunlardan yararlanmak. Bu konuma gelen bir saldırgan, ayy ben kullanıcı için geçerli olan politikaları ve dolayısıyla hangi bulut varlıklarına erişilebileceğini ve kötüye kullanılabileceğini sorgulamak için komutlar.

Beşinci zile.

5. Yanan Ateş Çemberi

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Bu zorluklar dizisinin en öğretici kısmı, Merkle Ağaçları akıllı bir sözleşmeden yararlanmak ve misli olmayan bir jeton (NFT) satın almak için ön satış listesine girin. Buradaki zorluk, cüzdan adresim ve bir Merkle Ağacının kök değeriyle birlikte ön satış listesine dahil edildiğimi kanıtlayan kanıt değerlerini keşfetmekti.

Kanıt değerleri sağlamaya yönelik birkaç başarısız girişimden sonra, sağlanan kök değer için kanıt değerlerini asla çözemeyeceğimi fark ettim çünkü onu hesaplamak için kullanılan tüm yaprak değerleri bilmenin bir yolu yoktu. Geçerli bir Merkle Ağacı sağlayabilmem için kök değerini değiştirmem gerekiyordu.

kullanma Profesör QPetabyte'ın aracı, Cüzdan adresim ve cüzdan adresimden oluşan iki yapraktan bir Merkle Ağacı oluşturdum. BSRS_nft oyunun Ethereum blok zincirinin ikinci bloğunda oyun içi Blockchain Explorer'ı kullanarak bulduğum akıllı sözleşme. Araç, bu ağacın kök değerini ve cüzdan adresim için kanıt değerini oluşturdu. Daha sonra sunucuya gelen isteği durdurmak için Burp'u kullandım ve geçerli bir Merkle Ağacı gönderebilmek için varsayılan kök değerini değiştirdim. İşte benim NFT sporu 100 KringleCoin sabit fiyatla satın alındı:

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Gerçekten çirkin bir örnek.

Nihai

Kırdım! KringleCon 5'ten Öne Çıkanlar: Altın Yüzükler PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Zihnimi yeni yollarla genişlettikleri ve siber güvenlik bilgilerimi derinleştirmeye yardımcı oldukları için SANS Holiday Hack Challenge'ın organizatörlerine çok teşekkür ederim. Sadece gelecek yılki meydan okumayı dört gözle beklemekle kalmıyorum, aynı zamanda bu mücadelenin 2020 ve 2021 sürümlerini bile deneyeceğim. Ve daha önce bu yarışmaya katılmadıysanız, umarım bu önemli anlar ilginizi çekmiştir.

Zaman Damgası:

Den fazla Güvenliği Yaşıyoruz