Torvalds surada bir seyler yazmis buna dair: https://plus.google.com/+LinusTorvalds/posts/7tp2gYWQugL
Burada bir elestirisini gördum: https://news.ycombinator.com/item?id=13733812
Yani dunya cökmuyor da, git'i kaynak kod dagitimi vs icin kullanan yerler var. Bu tur sistemlere birseyler asilamak herhalde daha olasi olmustur.
https://news.ycombinator.com/item?id=13719250. Bu comment'de en basitinden anlatilmis/tartisilmis duruma
Yazik C'ye.
Saka bi tarafa Ragel ile de tanismis olduk boylece. Napmislar Null-terminator'u mi silmisler?
Problemi kendi yakalamamalari acayip bi problem. Bence en buyuk sorun o. Insan bir taraftan dusunuyor tabi, boyle kac vakka yasaniyor da, sadece bir iki tanesi boyle su yuzene vurulacak kadar savsaklaniyor.
Yukaridaki ekran goruntusunu aldigim yazi surada: https://blog.cloudflare.com/incident-report-on-memory-leak-caused-by-cloudflare-parser-bug/ "bizim Ragel'i kullanma seklimizde hata var," filan demisler. Uretilen C kodunu statik analize ne denli tabi tuttular, onu tam anlamayadim.
Gormustum yaziyi da, pek begenip okumamistim dogrusu. Simdi artik kasip okudum biraz daha. Daha once de ayni cumle midemi bulandirmisti simdi de tekrar dikkatimi cekti, insan muhendislik etigini sorguluyor:
"The engineers working on the new HTML parser had been so worried about bugs affecting our service that they had spent hours verifying that it did not contain security problems."
Evet yani muhendisler koda saatlerce bakinca is cozuluyor. Artik guvenebiliriz, cunku guvenlik acigi yokmus. Niye cunku saatlerce bakmislar :)
C'ye laf carpmaya gerek yok bizim tarafimizdan, hatayi yapan C degil. C uzerinden de boyle bi pointer sola attik bi saga attik onceden kornerden yemistik simdi defans oynuyoruz demek de suyu bulandirmaktan baska bir ise yaramiyor. Duzgun kod yazamayacagini kabul edip, daha guvenli sistemler kullanmayi tercih etmek ya da daha temiz katmanli calismanin nesi kotu? Dertleri buyuk ihtimalle performanstir, lakin bu rezilligede dusmek, insanlarin bilgilerini sacmak herhalde kazandiklari toplam performansa degmemistir. Gerci bunlarin yaptigi is cache degil mi? Yani o kod, topu topu bir kez calismiyor mu her sayfa icin, zamana bagimli olsa da?
Statik analizle birsey olur muydu bilmiyorum bu arada. C'de genelde öyle seyleri yakalamasi pratikte imkansiza yakin. Heartbleed'i hatirliyorsaniz, acik-kaynak kod, tum C kod analiz firmalarinin hava attigi zamanlar. Heartbleed cikti, hic biri yakayamiyordu. Ciktiktan sonra bir sablon koydular tabi, artik o tek problem yasanmaz herhalde. Geriye kaldi ∞-1.
"Part of the infosec team started fuzzing the generated code to look for other possible pointer overruns." -> Benim buradan anladigim simdiye dek o 'generated C code' kismina pek guvenlik sapkasi takip bakmamislar. "Calisiyor mu, calisiyor, hizli mi, hizli, e o halde isimiz gucumuz var, hayat devam ediyor" seklinde gitmisler gibi.
IBM kismini daha cok begendim ben, bildigim birseydi de bu sekilde adlandirildigini bilmiyordum.
"Research by IBM in the 1960s and 1970s showed that bugs tend to cluster in what became known as “error-prone modules”. Since we’d identified a nasty pointer overrun in the code generated by Ragel it was prudent to go hunting for other bugs."
Gerci yine ayni problem, kodun baska yerinde baska bir hata yine vardir. Oralara bakmiyorlardir, sanirim makalenin bir yerinde eski-yeni kod parcaciklari diyordu. Daha once kullanilmayan parcalar, aciga cikmayan sorunlar boyle durumlarda cikiyor.
Tekrardan dedigim gibi ben muhendislik etiginde problem oldugunu dusunuyorum. Yaptiklari isin ciddiyetine yakisir sekilde calismamislar.
Mühendislik etiği deyince aklıma şu iki yazı geliyor hep:
Ve sonra şirketlerin iç işleyişlerini düşünüyorum: tepedeki yöneticilerden yaptıkları planlarda güvenlik kontrolleri, analizleri, vs. için ne kadar bütçe ayırıyorlar? Yöneticilerin yöneticileri... Ne tür baskılar, ticari durumlar, vs.
Evet, bir kez skandal kafaya dank edince, kaça patladığı anlaşılınca geriye dönük olarak "neden filanca tedbirleri almadınız?" demek kolay oluyor, diğer yandan işler "yolunda giderken" biri çıkıp "filanca şeyleri kullanalım" dese muhtemelen "kar zara analizi" yapıp reddedecek epey birileri oluyordur tepede. Tabii o esnada bu tür bir "skandal" nurlu ufuklarda doğmamış güneş kategorisinde, kimsenin de bu zaten olmuş gibi maliyet hesapladığı yok demek ki.
Çözüm nedir, bilemiyorum. Kanunları değiştirmek? Tepedeki yöneticilerin kabus görmesine yetecek resmi düzenlemeleri, cezaları getirmek? Bunun yol açacağı bilinçlenme ve bunun tetikleyeceği daha iyi süreçler, daha düzgün araç kullanımları, vs.?
Evet, Heartbleed ve statik analiz konusu epey gundeme gelmisti vakti zamaninda, 2014'te calistigim yere Coverity sunumu yapmaya gelen amcalari bu konuda sIkIstIrdIgImI hatirliyorum :)
Su adreste, yazar Frama-C ile Heartbleed hatasinin yakalanabilecegini iddia etmis: http://blog.regehr.org/archives/1125 ama hemen ardindan gelen yorum da ilginc: ""How much effort would be required to push OpenSSL through Frama-C? I don’t know, but wouldn’t plan on getting this done in a week or three."
Sonucta ana tema degismiyor tabii, islerin arap sacina donmesi cok kolay ve paranoyak yaklasmadikca basa cikilabilecek gibi degil.
Göründüğü kadarıyla SHA1 çakışması bunun yanında devede kulak bir güvenlik açığı oldu. Tüm interneti "MITM" üzerine inşa edip bunun üzerine iş kuran ve tek politikası "bize güvenin" olan Cloudflare sayesinde artık kullandığınız hiçbir şifre veya SSL oturumu güvende değil.
Konu hakkındaki diğer tartışma başlıkları: reddit, hn.
Etkilenen sitelerin bir listesini github.com adresinde bulabilirsiniz.
Cloudflare'in cevabını da blog.cloudflare.com adresinde bulabilirsiniz.