Bölüm 2: Linux Format String Exploiti
Linux exploit eğitimi serimizin ilk bölümüne hoş geldiniz. Kyuzo?ya bilgilerini bizimle paylaştığı için tekrar teşekkür etmek istiyorum. Bu bölümde, Format String Exploitine bakacağız. Format String güvenlik açığı genellikle bir programcı, kullanıcı tarafından kontrol edilen bir fonksiyonu yazdırmak istediğinde ortaya çıkar ancak kötü amaçlı saldırganın kendi format belirleyicisini enjekte etmesini engelleyemiyor. Bu da kötü niyetli saldırganın önceden tanımlanmamış hafızayı okumasına ve yazmasına izin verir.
Format String exploiti konusunda kendimi kendi çabalarımla eğitmek için şu 2 mükemmel kaynağı okudum: (1) Exploiting Format String Vulnerabilities [scut / Team Teso ? 2001] ve (2) Advances in format string exploitation [ gera & rig / Phrack ? 2002]. Aşağıda her iki kaynak için de bağlantılar ekledim ve arka planda ne olduğunu öğrenmeniz için okumanızı şiddetle tavsiye ederim.
İyi şeylere geçmeden önce, varsayılan olarak gdb?nin AT&T söz diziminde opcode unassembles olduğunu belirtmek isterim. Bu Windows exploit geliştirme konusunda çok şey yapmış olanlarımız için biraz kafa karıştırıcıdır. Neyse ki, aşağıdaki komutlarla gdb?deki ayrıştırma lezzetini kolayca alabileceksiniz.
set disassembly-flavor intel
set disassembly-flavor att
Kaynaklar:
Exploiting Format String Vulnerabilities (by scut): buradan
Advances in format string exploitation (by gera & riq): buradan
Giriş
Birkaç ay önce b33f ve ben bir üniversite ortamında sunulması için yazılım exploiti üstüne bir atölye çalışması yaptık. Atölyenin iki ana fikri vardı: (1) arabellek taşması olmayan exploit güvenlik açıkları ile başa çıkmak ve (2) Windows ve Linux hakkında konuşmak. Bu yüzden daha az çekici ve daha az nadir (!) güvenlik açıklarının bir listesini aldım; Linux söz konusu olduğunda son birkaç yılda oldukça önemli oldukları için, bunların arasına format stringi de dahil etmeye karar verdik. Sadece bir şeyden bahsetmek gerekirse, sudo 2012?nin başında, sudo_debug fonksiyonunda bir format stringi açığıyla piyasaya sürüldü ve bu Fedora ve OpenSUSE gibi ana akım dağıtımları ile Dünya?ya dağıtıldı.
Bu atölyeden sonra B33f?ye FuzzySecurity?ye birkaç ay sonra bazı materyallerle katkıda bulunacağıma söz verdim. Sonunda kararımı verdim ve format string exploiti hakkında birkaç video yapmaya karar verdim.
Eğitim videosunun ilk kısımında kullanılan örnek kod:
Kod:
/* example.c
*
* $ gcc -o example example.c
* $ execstack -s example # make stack executable
*/
#include
int main() {
int a = -5;
float b = 5.5;
char *c = "My String";
printf("A = %d, B = %f, C = %s\n", a, b, c);
}
Eğitim videosunun birinci ve ikinci kısmında kullanılan örnek kod:
Kod:
/* fmt.c - sample program vulnerable to format string exploitation
*
* $ gcc -o fmt fmt.c
* $ execstack -s fmt # make stack executable
*/
#include
#include
int main(int argc, char *argv[]) {
char b[128];
strcpy(b, argv[1]);
printf(b);
printf("\n");
}
Format String Eğitimi
İlk video, format stringlerinin ne olduğuna ve bilgi sızıntısına nasıl yol açtığına dair bir giriş sunuyor (bahsedilen bazı konular: dönüşüm belirteçleri kullanımı ve doğrudan parametre erişimi). İkinci kısımda, ileri bir adım ileriye taşıyoruz ve dönüşüm belirteçlerindeki arcane gibi kötü belirteçleri kullanan bir programa nasıl sahip olacağınızı gösteriyoruz.
Bölüm 1
YouTube
Bölüm 2
YouTube
Linux exploit eğitimi serimizin ilk bölümüne hoş geldiniz. Kyuzo?ya bilgilerini bizimle paylaştığı için tekrar teşekkür etmek istiyorum. Bu bölümde, Format String Exploitine bakacağız. Format String güvenlik açığı genellikle bir programcı, kullanıcı tarafından kontrol edilen bir fonksiyonu yazdırmak istediğinde ortaya çıkar ancak kötü amaçlı saldırganın kendi format belirleyicisini enjekte etmesini engelleyemiyor. Bu da kötü niyetli saldırganın önceden tanımlanmamış hafızayı okumasına ve yazmasına izin verir.
Format String exploiti konusunda kendimi kendi çabalarımla eğitmek için şu 2 mükemmel kaynağı okudum: (1) Exploiting Format String Vulnerabilities [scut / Team Teso ? 2001] ve (2) Advances in format string exploitation [ gera & rig / Phrack ? 2002]. Aşağıda her iki kaynak için de bağlantılar ekledim ve arka planda ne olduğunu öğrenmeniz için okumanızı şiddetle tavsiye ederim.
İyi şeylere geçmeden önce, varsayılan olarak gdb?nin AT&T söz diziminde opcode unassembles olduğunu belirtmek isterim. Bu Windows exploit geliştirme konusunda çok şey yapmış olanlarımız için biraz kafa karıştırıcıdır. Neyse ki, aşağıdaki komutlarla gdb?deki ayrıştırma lezzetini kolayca alabileceksiniz.
set disassembly-flavor intel
set disassembly-flavor att
Kaynaklar:
Exploiting Format String Vulnerabilities (by scut): buradan
Advances in format string exploitation (by gera & riq): buradan
Giriş
Birkaç ay önce b33f ve ben bir üniversite ortamında sunulması için yazılım exploiti üstüne bir atölye çalışması yaptık. Atölyenin iki ana fikri vardı: (1) arabellek taşması olmayan exploit güvenlik açıkları ile başa çıkmak ve (2) Windows ve Linux hakkında konuşmak. Bu yüzden daha az çekici ve daha az nadir (!) güvenlik açıklarının bir listesini aldım; Linux söz konusu olduğunda son birkaç yılda oldukça önemli oldukları için, bunların arasına format stringi de dahil etmeye karar verdik. Sadece bir şeyden bahsetmek gerekirse, sudo 2012?nin başında, sudo_debug fonksiyonunda bir format stringi açığıyla piyasaya sürüldü ve bu Fedora ve OpenSUSE gibi ana akım dağıtımları ile Dünya?ya dağıtıldı.
Bu atölyeden sonra B33f?ye FuzzySecurity?ye birkaç ay sonra bazı materyallerle katkıda bulunacağıma söz verdim. Sonunda kararımı verdim ve format string exploiti hakkında birkaç video yapmaya karar verdim.
Eğitim videosunun ilk kısımında kullanılan örnek kod:
Kod:
/* example.c
*
* $ gcc -o example example.c
* $ execstack -s example # make stack executable
*/
#include
int main() {
int a = -5;
float b = 5.5;
char *c = "My String";
printf("A = %d, B = %f, C = %s\n", a, b, c);
}
Eğitim videosunun birinci ve ikinci kısmında kullanılan örnek kod:
Kod:
/* fmt.c - sample program vulnerable to format string exploitation
*
* $ gcc -o fmt fmt.c
* $ execstack -s fmt # make stack executable
*/
#include
#include
int main(int argc, char *argv[]) {
char b[128];
strcpy(b, argv[1]);
printf(b);
printf("\n");
}
Format String Eğitimi
İlk video, format stringlerinin ne olduğuna ve bilgi sızıntısına nasıl yol açtığına dair bir giriş sunuyor (bahsedilen bazı konular: dönüşüm belirteçleri kullanımı ve doğrudan parametre erişimi). İkinci kısımda, ileri bir adım ileriye taşıyoruz ve dönüşüm belirteçlerindeki arcane gibi kötü belirteçleri kullanan bir programa nasıl sahip olacağınızı gösteriyoruz.
Bölüm 1
YouTube
Bölüm 2
YouTube