Yüzbinlerce Vatandaşın Sağlık Bilgisinin Sızabileceği Bir Güvenlik Açığı ve Yaşadığım Süreç
Özet: Ülkemizin büyük hastaneler zincirinin birinde (kod adı: Sıhhat Bahçesi), tüm hastaların tahlil/işlem sonuçlarının sızabileceği bir güvenlik açığı keşfettim. Bu güvenlik açığı yüzbinlerce insanın verisinin ifşasına ve ilgili hastane zincirinin para ve prestij kaybına yol açacaktı. Hastane ile iletişime geçip açığı kapattırdım. Fakat karşılığında bir para ödülü vermedikleri gibi bu açıkla alakalı blog yazmam halinde hukuki yaptırımlara maruz kalacağımı ilettiler (o yüzden gerçek adını veremiyorum). Bu yazıda hem yaşanan süreci anlatacağım hem de yazının sonunda güvenlik zafiyetiyle alakalı teknik detaylara yer vereceğim.
Etik Hackerlık Nedir?
Bir siber güvenlik araştırmacısı ve etik hacker olarak boş zamanlarımda çeşitli platformlarda güvenlik zafiyetleri arıyorum. Literatürümüzde bu eyleme ödül avcılığı (bug hunting/bounty hunting) ismi verilmekte. Bir etik hacker’ın ödül avcılığı yapmasının üç temel sebebi vardır:
- Kritik güvenlik zafiyetlerini kötü niyetli hacker’lardan önce bularak toplumu korumak. Bu genelde kamu kurumlarını etkileyen güvenlik açıkları için geçerlidir.
- Güvenlik zafiyeti ile alakalı teknik makale yayınlayarak saygınlık ve prestij kazanmak.
- Şirketlerin vereceği para ödülleri ile maddi gelir sağlamak.
Peki bir etik hacker bir firmada güvenlik zafiyeti bulduğu zaman süreç nasıl ilerler? Tüm dünyada etik olarak kabul gören süreç şöyledir:
Hacker açıkla ilgili raporu ilgili şirkete iletir. Şirketteki güvenlik uzmanları ya da yazılımcılar bunu analiz edip doğrular. Daha sonra hacker, güvenlik zafiyetinin kapatılması için şirkete bir süre tanır (maksimum 3 ay) ve bu süre zarfında açıkla ilgili tüm bilgileri gizli tutar. Güvenlik zafiyeti kapatıldıktan sonra da gerçekleşebilecek üç senaryo vardır:
- Hacker, güvenlik zafiyeti ile ilgili bir makale yayınlayarak bunu topluma duyurur.
- Fakat etik olarak kurumların blog yazılmasını istememe hakları vardır. Ancak bu durumda şirket hacker’a tatmin edici bir para ödülü vermelidir.
- Şirket hem para ödülü verip hem de blog yazılmasına izin verir. (Büyük şirketlerin tercih ettiği yol genellikle budur)
Peki bir şirket, hem para ödülü vermeyip hem de blog yazılmamasını talep edebilir mi? Yasal olarak bunun cevabı malesef evet. Fakat etik olarak koca bir HAYIR. Çünkü şirket, bu güvenlik açığını kapatarak hem maddi zararlardan kendini koruyor, hem de olası bir prestij kaybının önüne geçiyor. Fakat hacker hem harcadığı zamandan oluyor, hem para kazanamıyor hem de bununla alakalı bir blog yazamadığı için prestij elde edemiyor.
Etik hackerlar etik kuralları takip eder. Fakat biz bir hayır kurumu değiliz. Eğer bir şirketi maddi manevi zarardan kurtardıysak, bunun karşılığını para ya da prestij olarak almamız gerekir.
Zafiyetin Bulunması ve Yaşanan Süreç
Bundan yaklaşık 3 hafta önce, kendi sağlık işlemlerimi de yaptırdığım “Sıhhat Bahçesi” hastanesinin websitesine girdim. Eski bir tahlil sonucum lazım olmuştu. Websitesinin tahlil sonuçlarını görebileceğimiz kısmına gittim. İçimden bir ses, burada bir güvenlik zafiyeti olduğunu söyledi ve araştırmaya koyuldum. Sonuç olarak hastanede işlem yaptıran tüm hastaların tahlil sonuçlarının ele geçirilmesini sağlayabilecek bir güvenlik açığı keşfettim (teknik detaylar yazının sonunda)
Zafiyetle alakalı raporumu yazıp yetkili bir insan bulma sürecine başladım. Hastanenin websitesinde bu tip raporları iletebileceğimiz bir iletişim adresi bulunmuyordu. Hastaneyi aradığımda da bilgi alamadım. Daha sonra siber güvenlik sektöründeki çevresi geniş insanlara yazıp kontak bilgisi aramaya başladım. Bir kişinin kontağı varmış. İlgili kontağa raporu göndersem de cevap alamadım.
Daha sonra raporu USOM’a ilettim. İlgileneceklerini söylediler fakat daha sonra buradan da geri dönüş alamadım. Son çare olarak Linkedin’i açtım ve hastanenin tüm teknik personelini ekleyip mesaj atmaya başladım. Bu şekilde yetkili bir kişi buldum.
Kendisiyle telefonda konuştuk. Raporu kendisine e-mail attım. Bir süre sonra zafiyeti kapattıklarına dair geri dönüş yaptılar.
Fakat analiz gerçekleştirdiğimde açığın tam olarak kapatılamadığını farkettim. Bir hafta sonra tekrar dönüş yaptılar. Bu sefer zafiyetin kapatıldığını onayladım.
Kendilerine zafiyetle alakalı blog yazmak istediğimi söyledim. Bunu yazmamı istemediler. Ben de bu isteklerinin etik olduğunu, fakat hizmetlerim için sembolik bir para ödülü ile ödüllendirilmem gerektiğini söyledim. Düşüneceklerini söylediler.
Bir süre sonra bana ödül olarak ücretsiz check-up vereceklerini söylediler. Bu komik teklifi reddettim. Çünkü en kötü tamamlayıcı sağlık sigortası bile her yıl check-up hakkı zaten veriyordu. Bu teklifi reddettikten sonra uzun bir süre cevap alamadım. Tekrar sorduğumda hukuk departmanının konuyu araştırdığını söyediler.
Ben de saf gibi “herhalde fatura kesmeden bana nasıl para göndereceklerini düşünüyorlar” diye düşündüm. Yine uzun bir süre ses çıkmadı. Para ödülü alamayacağım kesinleşti. Tekrar bir umut iletişime geçtiğimde ise avukatların blog yayınlamakla alakalı hukuki süreci araştırdıklarını söylediler.
Yani aba altından bir hukuk sopası göstermekti bu. Para ödülü vermiyoruz ve blog yayınlarsan dava açarız. Ve işin kötüsü gerçekten açabilirler ve muhtemelen de kazanırlar. Dava sürecinden çekinip hastanenin ismini telaffuz etmememin iki sebebi var:
- Mahkemeye benim yaptığım işin kötü niyetli olmadığını, etik amaçlar güttüğümü muhtemelen anlatamam.
- Blog yazarak marka değerlerini düşürdüğümü iddia edebilirler. Mahkemede tüm dünyada etik hackerlık sürecinin böyle ilerlediğini muhtemelen anlatamam.
Dolayısıyla başımdan geçen süreci “Sıhhat Bahçesi” kod adını kullanarak anlattım. Süreçle ilgili takdiri okurların akılına ve vicdanına bırakıyorum.
Zafiyetlerin Teknik Analizi
Bu kısımda zafiyetlerin detaylarını, siber güvenlik uzmanlarının ve yazılım geliştiricilerin ilgisi için anlatacağım.
SMS Kodunun Sızması ile Authentication Bypass
Sıhhat bahçesinin tahlil sonuç adresine gittiğimiz zaman bizi bir form karşılamaktadır. Burada kişinin TC kimlik numarası istenmektedir. TC kimlik numarası girildiği zaman aşağıdaki gibi bir request oluşmaktadır.
Daha sonra karşımıza bir SMS onay paneli çıkmaktadır. Telefona gelen SMS kodu doğru girildiği takdirde tahlil sonuçları görüntülenmektedir.
Fakat TC kimlik numarasını girdikten sonra Burp Suite ile gelen response’a baktığımız zaman, SMS kodunun response içerisinde “message” parametresi ile saldırgana döndüğünü görüyoruz.
Yani SMS doğrulama tüm anlamını yitirmekte. Saldırgan TC kimlik numarası gönderip, gelen response içerisindeki kodu okuyarak tahlillere erişmekte.
Websitesinde herhangi bir rate-limit ya da CAPTCHA mekanizması olmadığı için bir saldırgan milyonlarca TC Kimlik numarasını sisteme göndererek tahlil sonucu olup olmadığını analiz edebilir. Olumlu yanıt dönen TC kimlik numaralarına ait sonuçları otomatik bir şekilde indirebilir. Mernis gibi sızıntılarla TC kimlik numaraları hali hazırda sızdığı için, 24 yaş üstü tüm vatandaşların tahlil sonuçları görüntülenebilir. Bunun yanısıra saldırgan, TC kimlik numaralarını rastgele üreterek de sonuçlara ulaşabilir.
Aşağıda bunun bir örneği gösterilmiştir. 1798 başarısız denemeden sonra doğru TC kimlik numarası başarılı bir şekilde tespit edilmiştir:
Client-Side Validation Bypass
Yukarıda bahsedilen zafiyet aslında tek authentication zafiyeti değil. Panelde SMS kodunu yanlış girdiğimiz zaman uygulama bize aşağıdaki gibi bir response dönmekte:
Response’daki “success” kısmını “false”dan “true”ya döndürdüğümüz zaman tahlillere ulaşabiliyoruz. Bunun sebebi de kontrolün front-end’de Javascript kullanılarak yapılması.
Brute Force
Yukarıdaki zafiyetler bulunmasa bile sistemde herhangi bir rate-limit ya da CAPTCHA koruması bulunmadığı için, TC kimlik numarası bilinen bir hastanın 5 haneli SMS kodu kolayca brute-forcelanıp tahlil sonucu görülebilir.