CRLF enjeksiyon ataklari diger ataklar gibi çok iyi bilinmz. Fakat vulnerable uygulamalarina karsi kullanildiginda, CRLF enjeksiyon sadece saldirganlar için ise yarar ve (senin için) yakip yikicidir. Bu uygulamalar ile nasil saldiri yapildigini ve organizasyonlari korumak için ne yapabilecegimize bir bakalim:
CRLF terimi carriage return ( tasima dönüsü) (CR, ASCII 13, \\\\\\\\\\\\\\\\\\r) ) Line Feed (satir ilerleme) (LF, ASCII 10, \\\\\\\\\\\\\\\\\\n) için bulunur. Bunlar ekranda hiçbirseyin görünmedigi ASCII karakterleridir. Fakat windowsta line (çizgi) sonunu göstermek için genis kullanim alani vardir.Linux/UNIX sistemlerde line sonu, sadece line feed kullanimi yoluyla gösterilir.
CR ve LR’nin bu kombinasyonu örnegin keybordda “enter”a basarken kullanilir. Uygulamanin kullanimina bagli olarak “enter ”a basmak genelde uygulamaya yeni bir line açmasi için talimat verir veya komut gönderir.
CRLF Injection saldirisi, hacker sisteme CRLF komutu sokmayi basardigi zaman ortaya çikar. Bu çest bir saldiri operating sistemde ya da serversoftware’de teknolojik bir güvenlik açigi degildir. Fakat daha çok web sitesinin gelistirilme sekline baglidir. Bazi webmasterlar bu saldirilardan habersizdirler ve web uygulamalari yaparken açik kapilar birakirlar ki, bunlar hackerin CRLF komutlarienjekte etmesine olanak verir
Siteniz zayifsa hacker ne yapabilir?
Hackerlar CRLF Injection için açik bir website bulsalar bile uygulama yapilari yapmada ve sistemde kusurun ne kadar siddetli oldugu konusunda sinirlidirlar.
Bazi websayfasi çesitlerinde, bu kusur sayfanin güvenligi için öldürüceü olabilir. Diger durumlarda, bu en küçük öncelik ile sadece küçük bir hata olabilir. Bu, kusurun kulIaniciya web uygulamalarini maipule edip etmemesine izin vermesine baglidir.
CRLF Injection attack için örnek 1
Uygunca onaylanmamissa herhangi bir “user input” güvenlik konusu olabilir.
Örnek bir basic (temel) log file:
|
Date |
UserName |
Message |
|
25/07/2005-14:23:47 |
GoodSurfer |
I perfectly agree! |
Bu og file çok normal, bununla birlikte eger kullanici söyle bir input girdiyse:
I also agree with you..\\\\\\\\\\\\\\\\\\n25/07/2005-15:00:00 AnotherSurfer What are you talking about!?
log file söyle görünür:
|
Date |
UserName |
Message |
|
25/07/2005-14:23:47 |
GoodSurfer |
I perfectly agree! |
|
25/07/2005-14:42:19 |
BadSurfer |
I also agree with you.. |
|
25/07/2005-15:00:00 |
AnotherSurfer |
What are you talking about!? |
Bu durumda, input CR ve LR karakterlerinden düzenli olarak filtrelenmeden önce, kullanici log file içinde fake bir giris olusturdu.
CRLF Injection Attack örnek 2
HTTP’yi de içeren birçok network protokolü, CRLF tarafindan ayrilan bu protokol içindeki her çizgi komutlarin genis bir carriage return ve line feed kombinasyonlarini yaparlar. Eger bir kullanici filtrelenmemis bir http header tanimlayabilirse, kullanicinin application layer’i geçerek direkt olarak serverla baglanmasini mümkün kilan bir risk ortaya çikar.
Örnegin E-mail, News (NNTP), ve http headerlari “key:value” yapisi üzerine kurulmustur ve her line sonda bir CRLF kombinasyonuyla tanimlanmistir. "Location:" headeri HTTP içinde diger diger adrese yönlendirmek için kullanilir ve “set-cookie” header cookieler için kullanilir.Eger bu inputlar düzenli olarak geçerli kilinirsa, CR ve LF karakterleri user input içine sokulabilir, ve scriptler orjianal olarak yapildiklari seyden farkli farkli seyler yapmalari için yaniltilabilir.
Eger input CR ve LF için kontrol edilmemisse ve script string ile bir redirect (farkli bir adres yazma) olusturursa:
Location: $url%0d%0a
$url ‘yi bir cookie ayarlarken ayarlarsak siteyi baska bir adrese yönlendirebiliriz (bir string olarak):
http://www.i-was-redirected.com/%0d%0aSet-Cookie: Authenticated=yes%0d%0aReferer: www.somesite.com
Eger hacker diger kullanicinin yönlendirilecegi, önemli datayla cookileri içeren adresi save edebilirse bu çok ciddi olur.
CRLF vulnerabilities’i kontrol etme
Web siteniz ve ve uygulamalarlnizi CRLF açikligi için kontrol etmenin en iyi yolu Web Vulnerability Scanner kullanmaktir. Bir Web Vulnerability Scanner web sitenizi yavas yavas yürütür ve otomatik olarak CRLf saldirilari için kontrol eder. Hangi URLs/script Zayif gösterir ve kolayca kapatirsiniz.
Acunetix Web Vulnerability Scanner , SQL injection, Cross site scripting, Google hacking ve daha birçok zayiflik için scan yapar.
CRLF attacklarini önleme
Sitenizi CRLF saldirilarina karsi korumanin en iyi yolu, onu kullanicinin girebilecek oldugu tüm inputlara karsi kapsamli olarak filtrelemektir. Bilinen iyi data haricinde her sey silinmeli ve meta karakterleri user inputtan filtrelenmeli. Bu sadece girilmesi gerekenlerin servera kabul edilmesini saglayacaktir.
Eger siteniz saldirilara zayifsa nasil kontrol etmelisiniz?
Acunetix Web Vulnerability Scanner kullanan Acunetix elemani tarafindan kullanilan Security audit al.Acunetix sitenzi çesitli hacking tekniklerine karsi (örnegin sql injection, cross site scripting, google hacking vb..) tarayacaktir (Bence bu program çok güzel isler yapmak için kullanilabilir.Bi ara msnden görüselim bunla ilgili :) )Ve sitenizdeki açiklari listeleyecektir (iste en can alici nokta bu sanirim)) . Bu scan dan sonra eger sitenizde açiklar varsa bunlarla ilgili bir özet alacaksiniz. (ben bu programi çok sevdim.Bunu edinelim)
LOG FILES
Log dosyalari, LF, CRLF veya sadece CR tarafindan ayrilan log girislerinden olusurlar. Eger CR ve LF karakterleri her bir log girisini yapmaya yarayan inputtan silinmemisse log dosyasini line olarak degismesini saglayabiliriz ve daha sonra ilave ilave fake log girisi yapilabilir.
Örnek olarak, düsünelim ki date alanli bir bir log dosyamiz var. Bir kullanici alani ve bir yorum alani söyle görünür:
2002-04-30 hans One log entry
2002-05-01 ulf Another log entry
Eger data bu log file içinde perl statement (hesabi) tarafindan doldurulursa :
print LOG "$date $user $comment\\\\\\\\\\\\\\\\\\n";
ve the $comment degiskeni CR ve LF karakterleri için kontrol edilmezse, bu ilave fake entry (giris)i ekleyebiliriz:
2002-05-01 root This is serious!
$comment’e "Another log entry\\\\\\\\\\\\\\\\\\n2002-05-01 root This is serious!" degerini vererek. Ayni anda su "Another log entry" yapildi ve hatta program fake log entry yapar.
INTERNET PROTOKOLLERI
Internet üzerinde müsterinin her komuttan sonra servera gidecek olan bir CRLF kombinasyonu göndermesini tanimlayan birçok network protocolü kullanilir. Eger CR ve LF karakterleri komutlari birlikte tutmak için kullanilan inputtan silinmemisse, ayni anda birkaç komut gönderebiliriz.
POP3 protocol, mesajlari geri almak için "RETR x" komutunu kullanir ve silmek için "DELE x" komutunu. Eger bir müsteri programi bir mesaji geri almak için "RETR $msg\\\\\\\\\\\\\\\\\\015\\\\\\\\\\\\\\\\\\012"stringi ile komut üretirse , ve $msg stringi CR ve LF için kontrol edilmemisse, ikinci mesaji $msg degeri "1\\\\\\\\\\\\\\\\\\015\\\\\\\\\\\\\\\\\\012DELE 2" vererek silerken birinci mesaji okuyabiliriz.Bu servera asagidaki komutlari gönderecektir:
RETR 1
DELE 2
NNTP protocol’ü mesajlari geri almak için "ARTICLE x" ve postalamak için "POST" komutu kullanir. Eger müsteri programi bir mesaj almak için "ARTICLE $id\\\\\\\\\\\\\\\\\\015\\\\\\\\\\\\\\\\\\012" stringi ile bir komut üretirse , ve $id string CR ve LF karakterleri için check (kontrol) edilmemisse bir mesaji sessizce gönderirken baska bir mesaj okuyabiliriz.
Bu durumlarin her ikisi de asagidaki yapiya sahiptirler: "<KEY><SEP><VAL><NL>",<KEY>’in "DELE" olabilecegi yerde, <SEP> " " dir, <VAL> ‘"1" olabilir, ve <NL> CRLF’dir.Eger <VAL> alani user inputtan gelirse ve <KEY> içinde bulunan data çesitlerini içerme izni olursa, hata meydana gelir.
MAIL, NEWS VE WEB HEADERS
E-mail headerlari, news headerlari ve HTTP headerlarinin hepsi her bir line’in CRLF tarafindan ayrildigi yerde "Key: Value" degerine sahiptirler.
HTTP, diger URL’ye yönlendiren bir "Location:" headeri tanimlar ve cookieleri ayarlamak "Set-Cookie:" headeri tanimlar.CR ve LR karakterleri user inputa sokarak diger siteye yönlenirken bir cookie ayarlayarak web cookieler yaniltilabilir. Eger script "Location: $url\\\\\\\\\\\\\\\\\\015\\\\\\\\\\\\\\\\\\012" stringi ile bir yönlendirme yaparsa ve $url stringi CR ve LF karakterleri için kontrol edilmezse, cookie’yi $url degeri vererek baska bir siteye yönlendirebiliriz.
"http://www.kuro5hin.org/\\\\\\\\\\\\\\\\\\015\\\\\\\\\\\\\\\\\\012Set-Cookie: evil=natas".
Eger cookie önemli datayi içerirse ve bir kullanici diger kullanicinin yönlendirilecegi URL’yi kaydederse, bu ciddi sonuçlar dogurablir.
Ayni teknigi kullanarak Using the same technique, bir e-mail sistemi adi bilinmeyen kisilerin kimliklerini ortaya çikarabilir. Düsünelim ki kullanicilarin diger kullanicilara email gönderebilecekleri bir sistemimiz var fakat burada alicilarin gerçek email adresleri gizlidir.Eger kendimize bir mail header verme iznimiz olursa "Subject:" header gibi, ve onlar CR ve LF karakterleri için kontrol edilmezse biz bir CRLF kombinasyonu içereiliriz ve sonra "Subject:" header içindeki email adresimizle beraber "Bcc:" alani. Mesaj alicilara gönderildigi anda sessiz bir sekilde bize de gönderilecektir, bununla birlikte alicilarin kimliklerini ortaya çikaracaktir.
Bu durumlar yukarida belirtildigi gibi "<KEY><SEP><VAL><NL>" yapisina da sahiptirler.<KEY> , "Subject" olabilir, <SEP> , ": " ‘dir, <VAL> , "CRLF Injection" olabilir, and <NL> , CRLF’dir.
Saldirganlar vulnerability için olan aramalarinda CRLF yi kibarca kabul etmezler.
Bir CRLF dizini bir miktar veriye koyarak programin kabul ettigi veri ilk nasil tutuldugunu degistirmek için saldirgan bir CRLF enjeksiyonu çalistirabilir.
Birçok basit CRLF atak örneklerinde log dosyalarina sahte girisler gerçeklesmektedir. Söyle söyleyebilirz, bir vulnerable uygulamasinda bir kullanicidan girdisini almak ve onlari log dosyalarinayazdirmak. Bir saldirgan asagidaki girdileri saglar
Testing123<CR><LF>MYSQL DATABASE ERROR: TABLE CORRUPTION
Sysadmin sabah loglara baktigi zaman, kendini var olmayan bir problem için ariza tesbiti için zaman harciyor olarak bulabilir. Kurnaz saldirganlar bu tarz trojen atlarini sistemin baska bir yerine saldiri yaparken adminin oyalamak için kullanirlar.
Bir uygulamanin kullanicidan dosyayi girdi olarak aldigini hayal et. Sonra bu dosyada
bir komutu çalistirdigini "ls-a" gibi. Eger uygulama CRLF enjeksiyon ile vulnerable ediliyorsa , bir saldirgan buna benzer bir girdi tedarik edecektir:
File.txt<CR><LF>rm -rf /
Vulnerable edilebilir uygulamalarda "ls –a File.txt" komutu çalisacaktir. Sonrada "rm –rf /." komutu çalisacaktir. Eger uygulama root(köken) olarak çaisirsa, bu son komut olacaktir. Eger hiç çalismazsa , root taki tüm dosyalar gibi partitionlar(bölünme) silinecektir.
Bir webe dayali imzasiz e-mail sistemi kullanarak birilerinin email adreslerini ortayaçikarmak içim CRLF enjeksiyon atagini kullandigini düsün. Bunun yolusistemin, göndericinin emaili diger email adresleriyla, konusuyla ve kendi mesajlariyla beraber bir formu doldurmayi desteklemesi gerekmektedir. Form web server vasitasiyla teslim edildigi zaman, bir SMTF mailine çevrilir ve aliciya gönderilir. Gönderici askla alicinin mail adresini görmez, mail adresini sadece server bilir.
Eger bir uygulamada bir CRLF atak ile vulnerable edilmisse, emailin göndericisi alicinin gerçek ismini saklamasi buna benzer bir konu satiri olusturarak bozacaktir:
Subject: Peekaboo, I see you<CR><LF>Bcc: [email protected]
Eger vulnerable uygulamasi bu bilgiyi alirsa, ana basliga bilinmeyen bir satir ekleycektir. Mesajin kör karbon bir kopyasini göndericinin email adresinde olusturacaktir. Bu Kopyada "To" görülebilecektir. Böylecegöndericinin vasitasi le alicinin adresi ortaya çikacaktir.
CRLF ataklari içeren enjeksiyon ataklari iyi programlama tekniklri kullanilarakönlenebilir. Uygulamalarini CRLF enjeksiyondan güvenle muhafaza etmek için diger tarzdaki enjeksiyon ataklarindan (SQL enjeksiyonu gibi) kaçinmak için gösterdigimiz uyanikligi burda da göstermelsin. Girdiye asla güvenme: Senin Kontrolünde mutlaka kontrol ettigi, herhangi bir girdi dilari kaynaklardan gelir ve herhangi bir karakter kabul edilebilir bir veri tipi ile programin onda çalismadan önce uygun gelmez. Örnegin, eger kabul dilebilir bir email konu satiri ise, verinin içindeki tüm karakterler harf, rakam ve noktalama isareti olacaktir. Eger programin kabul edilebilir bir dosya ismi ise, verinin içindeki dosya ismi sadece karakter geçerli olacaktir.Programci her iki örnklerde basitçe, CR ve LF karakterlerini süzgeçten geçirirse, atak basarisiz olacaktir.
Kullanici girdisi kötü karakterlerin kaynagidir. Fakat diger senin yazmadigin programlardaki girdileri kotrol etmeyi unutma. Öyleyse, bir saldirgan vulnerable edilebilir bir programdan enjeksiyon atakalarindan vazgeçirilebilir. Bu programda belli bir rutinle programci verileri temizlememistir. Çünkü bir kullanicidan direkt olarak gelmez. Herhangi bir veriyi memnuniyetle güvenilir bir kaynaga dayanmayacagini düsün ve güvende olacaksin.
NOXHCO & Kano