Terminal Kaçış Enjeksiyonu
Bilgi güvenlik uzmanları olarak, potansiyeli yüksek tehlikeli dosyalarla günlük olarak uğraşmak zorundayız. Çeşitli komut dosyaları, PoC kodu, exploit ve diğer gerksenimleri çalıştırıyoruz ve bu dosyaları tarayan yardımcı programlara güveniyoruz. Onlara gerçekten güvenebilir miyiz? Bu yazıda ANSI/VT kaçış dizileri dünyasına bir zirve olacak.Kaçış dizileri nelerdir?
Terminal kaçış dizisi, yazdırılan özel bir karakter dizisidir (diğer metinler gibi). Ancak, terminal diziyi anlarsa, karakter dizisini göstermez, ancak bazı eylemler gerçekleştirir.
Kaçış dizileri her türlü şeyi yapabilir. Metnin rengini değiştirmek, belirlenen yazıları kalın yapmak veya imlecimizin yanıp sönmesini sağlamanın yanı sıra,:
*İmleci herhangi bir yönde veya herhangi bir konuma taşıyın
*Metni silme veya listeden silme.
*Çeşitli ekran manipülasyonları yerine geitirmek.
*Bizim klavyedeki tuşları yeniden atayabilir.
Kısacası, kaçış dizileri, terminaldeki şeyleri nasıl gördüğümüzü kötü yönde değiştirebilir.
Ve gerçekten kötü sonuçlar doğurabilir:
Ve her yerde ve her şeyle çalışır! Örneğin, aşağıda bir kaçış örneği mevcuttur.
Mac OS'de bir Python script enjeksiyonu:
Ama bekle, Windows ile güvendeyim!
Maalesef değilsin. Windows 10'dan bu yana, Windows Terminal emülatörü ANSI/VT kaçış dizilerini de destekler. Ve hem Komut İstemi hem de PowerShell tarafından kullanılabilir.
Yani, bu aynı zamanda Windows üzerinde çalışır..
Peki burada neler oluyor?
Terminal kaçış enjeksiyonları dünyasına hoş geldiniz, ya da bazı kişilerin geçmişte onu çağırdığı gibi-Linux sysadmins için yeni XSS.
Artık bunun sadece bir Linux sıkıntısı olmadığını biliyoruz-VT/ANSI uyumlu terminali kullanan her platformu etkiliyor.
Ve bu yeni bir şey değil. Terminaller bilgisayarların başlangıcından beri bizimle birlikte.
Orada birçok farklı terminal emülatörü var ve her biri ortak ANSI/VT olanların üstünde belirli kaçış dizilerine sahiplik gösterebilir.
Bu kaçış dizileri kötü niyetli bir şekilde (kötü niyetli bir maksatla) kullanıldığında, buna terminal kaçış enjeksiyonu denir.
Pekala, potansiyel etki nedir?
Bu dalavereye düşmenin sonuçları açıkça çok ciddi olabilir. eğer root / Yönetici olarak çalışıyorsak.
Temel olarak sistemimizde (ACE) sistemimizi ve kendimizi tamamen tehlikeye atıyoruz. Örneğin, bir saldırgan olabilir ve yapacağı işlemler:
- Sistemimiz (RAT) yükleyebilir.
- Sistem malwareimize kötü amaçlı yazılım veya rootkit yerleştir.
- Yazdıklarımızı ve ekranımız kaydedebilir.
- Pratik olarak hayal edebileceğiniz her şey
- Bunun üzerine, enjeksiyonları kaçmak atfedilen yıllar boyunca bildirilen birçok farklı güvenlik açıkları olmuştur
- Bunun da ötesinde, yıllar boyunca kaçış enjeksiyonlarına atfedilen birçok farklı güvenlik açığı var
Kaçış enjeksiyonlarını nerede bulabiliriz?
Bunları çeşitli komut dosyalarına eklemenin yanı sıra, başarılı bir şekilde de ekilebilirler:
- Yapılandırma dosyaları - potansiyel olarak aynı etkiye sahip (ACE)
- Günlük dosyaları - algılama baypas çabalarının bir parçası olarak
Peki, keyfi bir dosya oluşturmak ne kadar güvenli?
Daha önce de gördüğümüz gibi, hiç güvenli değil. Ancak aynısı Powershell'deki get-content komutu veya Komut İstemi'nde type komutu için de söylenebilir.
Bunların sorunu, çıktıyı hiçbir şekilde sterilize etmemeleri. Sadece var olan içeriği yazdırırlar. Umurlarında değil.
Bu yüzden bazı ikili içerik varsa, sadece yazdırırlar ve biraz anlamsız görürüz.
ANSI / VT terminalinin bir kaçış dizisi olarak anladığı belirli bir bayt dizisi varsa, terminal bunu basitçe yorumlayacaktır.
Yani bu gerçekten bir hata değil. Konsol uygulamalarında işler böyle. Infosec uzmanları olarak riskler konusunda dikkatli olmalıyız.
Kaçış enjeksiyonu nasıl çalışır?
Görünür şekilde görüntülenen kaçış enjeksiyonu ile aşağıdaki kabuk betiğini düşünelim:
Şimdi -v parametresini kullanmadığımızı varsayalım. Cat komutu komut dosyasının içeriğini satır satır görüntülediğinden, çıkış dizisi ( ^[[2A) imleci 2 satır yukarı - kötü kodun bulunduğu konuma geri taşır. Ve sonra kod iyi huylu (Hello World) kodumuz tarafından yeniden yazılır.
Bunun yalnızca tanıtım amaçlı olduğunu unutmayın. Kaçış dizileri yeterince güçlüdür, böylece herhangi bir iyi huylu veya sahte kod kullanmamız gerekmez. İstersek, kötü niyetli hatların kaybolmasını sağlayabilirdik.
Terminallerde kaçış sırası saldırıları nasıl önlenir?
İşte kendimizi kaçış enjeksiyonlarından nasıl koruyabileceğimize dair eyleme geçirilebilir bir tavsiye:
UNIX / Linux
1. UNIX tabanlı sistemlerde ham veri çıkışı sağlayan yardımcı programlara dikkat edin. Bu içerir:
kedi, kafa, kuyruk, daha
kıvırmak
diff
Çıktılarının, önemli olduğunda, tamamen denetlemeden inanmayın.
2. Yazdırılamayan karakterleri görüntülemek için cat -v kullanın veya daha az komutu kullanın.
Örneğin, yazılımı sadece curl / wget kullanarak ve kabuğa bağlayarak İnternet'ten yüklememeliyiz. Görsel analiz yeterli değildir:
Her zaman cat -v kullanarak veya daha az komut kullanarak balıkların olup olmadığını görmek için incelemeliyiz:
Buradaki zorluğu açıkça görebiliyoruz.
3. Ayrıca nano, pico, vim, emacs veya tercih ettiğimiz diğer editörler gibi metin editörlerini de kullanabiliriz.
pencereler
1. Komut İstemi'nde, type komutu yerine more komutunu kullanabiliriz. Daha fazla komut kaçış dizilerini gösterecektir:
Buradaki zorluğu açıkça görebiliyoruz.
3. Ayrıca nano, pico, vim, emacs veya tercih ettiğimiz diğer editörler gibi metin editörlerini de kullanabiliriz.
pencereler
1. Komut İstemi'nde, type komutu yerine more komutunu kullanabiliriz. Daha fazla komut kaçış dizilerini gösterecektir:
Ancak PowerShell'de çalışmaz.
2. PowerShell'de, get-content komutunu kullanmak yerine bir kaç parametre veya başka bir işlev kullanarak kaçış dizilerini temizlemenin bir yolu yok gibi görünüyor.
Gizli terminal enjeksiyonlarını ortaya çıkarmak için sadece biraz beceriksiz ve karmaşık çözümler üretebildim:
Çözüm 1:
Kod:
gc <file> -encoding Byte | % { [char]$_+" " | write-host -nonewline }
Çözüm 2:
Kod:
gc <file> -encoding Byte | % { if ( $_ -lt 32 -or $_ -gt 126 ) { [char]$_+" " } else { [char]$_ } } | write-host -nonewline
İkisi de çalışır ve gizli kaçış enjeksiyonlarını ortaya koyar.
3. Windows'taki en iyi çözüm her zaman Not Defteri veya WordPad gibi metin düzenleyicileri kullanmaktır. Konsol yardımcı programlarına güvenmeyin.
Kendiniz test edin
Aşağıdaki kod parçacıkları, bu makalede gösterilen tüm örneklerin nasıl oluşturulacağıyla ilgili yönergeler sağlar.
Bunları GitHub InfosecMatter ayrılmış depomuzda da bulabilirsiniz .
Shell script kaçış enjeksiyonu
Kod:
echo -e '#!/bin/sh\n\necho "evil!"\nexit 0\n\033[2Aecho "Hello World!"\n' > script.sh
chmod a+x script.sh
Ortaya çıkan script.sh üzerinde çalışacaktır (üzerinde test edilmiştir):
Linux (gnome terminali, xterm, aterm)
Mac OS (Terminal 2.0, iTerm2)
Cygwin (Windows)
Python script kaçış enjeksiyonu
Kod:
echo -e '#!/usr/bin/python\n\nprint "evil!";\nexit(0);\n#\033[2A\033[1Dprint "Hello World!";\n' > script.py
chmod a+x script.py
Ortaya çıkan script.py daha sonra üzerinde çalışacaktır (üzerinde test edilmiştir):
Linux (gnome terminali, xterm, aterm)
Mac OS (Terminal 2.0, iTerm2)
Cygwin (Windows)
Toplu (Komut İstemi) kaçış enjeksiyonu
Kod:
echo -e '@echo off\n\r\n\recho evil!\r\n::\033[2D \033[A\033[2Decho Hello World!' > script.bat
Ortaya çıkan script.bat daha sonra üzerinde çalışacaktır (üzerinde test edilmiştir):
Windows 10 PowerShell
Windows 10 Komut İstemi
PS1 (PowerShell) kaçış enjeksiyonu
Kod:
echo -e 'write-host "evil!"\r\n#\033[A\033[2Dwrite-host "Hello World!"' > script.ps1
Ortaya çıkan script.ps1 daha sonra üzerinde çalışacaktır (üzerinde test edilmiştir):
Windows 10 PowerShell
Windows 10 Komut İstemi
Sonuç
Bu makalede gördüğümüz gibi, terminal kaçış enjeksiyonları hemen hemen her modern işletim sistem ortamını etkiler ve gerçekten kötü olabilirler.
Infosec uzmanları olarak, onlar hakkında bilgi sahibi olmalıyız ve önemli olduğunda korumalarımızı güncel tutmalıyız. Umarım bu makale güvende kalmak için yeterli bilgi sağlamıştır.
Moderatör tarafında düzenlendi: