Improper Resource Shutdown or Release Açıklığı (CWE-404) | |||||
Bu makalede Improper Resource Shutdown or Release (CWE-404), yani Uygunsuz Kaynak Kapatma veya Uygunsuz Serbest Bırakma açıklığı anlatılacaktır.
Açıklık Önem Derecesi: Düşük Açıklığın Etkisi: Servis dışı kalma Açıklığın Açıklaması: Uygulamalar kaynak kodlarındaki kodlamalara göre bellekten alanlar ayırırlar. Örneğin kaynak kodda
Bir uygulamada kaynak sızıntısı meydana geliyorsa ve saldırganlarca bu bir tekrara bindirilebilirse uygulama bellekteki tüm alanları tüketebilir ve hizmet dışı kalabilir. Bellekte alan tüketimi ile gelecekte olası hizmet kesintileriyle karşılaşmamak için kaynak sızıntısı açıklığı şimdiden önlenmelidir. Bunun için açılan her bir kaynak işi bittiği zaman kapatılmalıdır. Açıklığı anlamak adına ilgili açıklığa sahip bir kod bloğu örnek olarak verilmiştir: Java: // Güvensiz Kod // ENG: Unreleased Database Connection // TR : Serbest Bırakılmamış Veritabanı Bağlantısı private MyObject getDataFromDb(int id) { MyObject data = null; Connection con = null; try { Connection con = DriverManager.getConnection(CONN_STRING); data = queryDb(con, id); } catch ( SQLException e ) { handleError(e); } } Bu örnekte try bloğu içerisinde getConnection() ile bir veritabanı bağlantısı başlatılmıştır ve metot içerisinde veritabanı bağlantısı sonlandırılmamıştır. Bu güvensiz kodun güvenli hale dönüştürülmüş haline ise iki ayrı örnek verilebilir. Bunlardan ilki şu şekildedir: Java: // Güvenli Kod // ENG: Explicit Release of Database Connection // TR : Açık Bir Şekilde Veritabanı Bağlantısının Serbest Bırakılması private MyObject getDataFromDb(int id) { MyObject data = null; Connection con = null; try { Connection con = DriverManager.getConnection(CONN_STRING); data = queryDb(con, id); } catch ( SQLException e ) { handleError(e); } finally { if ((con != null) && (!con.isClosed())) { con.close(); } } } Bu güvenli kodlama örneğinde try’dan sonra mutlaka uğranılacak durak olan finally durağına gelindiğinde daha önce başlatılan veritabanı bağlantısının kapatıldığını görmekteyiz. Bu güvenli kodlamada veritabanı bağlantısı açık bir şekilde (explicitly) kapatılmaktadır. Bunu üstü kapalı (implicitly) olarak da yapabiliriz. Java: // Güvenli Kod // ENG: Automatic Implicit Release Using Try-With-Resources // TR : Try-With-Resources Yapısı Kullanarak Kaynağı Otomatik // Üstü Kapalı Olarak Serbest Bırakma private MyObject getDataFromDb(int id) { MyObject data = null; Connection con = null; try (Connection con = DriverManager.getConnection(CONN_STRING)) { data = queryDb(con, id); } catch ( SQLException e ) { handleError(e); } } Bu örnekte try-with-resources yapısı kullanılmıştır. Try-with-resources yapısı kaynak oluşturmaya yarar ve oluşturulan kaynağı program try bloğunu tamamladığında otomatik olarak serbest bırakır. Bu güvenli kodlama örneğinde kaynak otomatik olarak bellekte serbest bırakılmaktadır. Kaynakların oluşturulup sonra serbest bırakılmadığı durumda gerçekleşen güvensiz kodlamaya “Uygunsuz Kaynak Kapatma veya Serbest Bırakma” açıklığı adı verilir. Açıklığın Önlemi: Nesnelere atanan açılan kaynaklar nesneler üzerinden kapatılmalıdır. İlave eklenecek kodlama satırları ile kaynaklar kapatılarak bellekte gereksiz kaynak tüketiminin önüne geçilmelidir ve böylece uygulamanın servis dışı kalması riski ortadan kaldırılmalıdır. Yararlanılan Kaynaklar:
|
|||||
![]() |
|||||
|
|||||
Yorumlar |
|||||
Henüz yorum girilmemiştir. | |||||
Yorum Ekle | |||||