vulnerability-prediction / src /streamlit_app.py
meryemarpaci's picture
Update src/streamlit_app.py
783349e verified
Raw
History Blame Contribute Delete
33.7 kB
import streamlit as st
import os
import pickle
import torch
import torch.nn as nn
from transformers import AutoTokenizer, AutoModel
# ==========================================
# 🛡️ GLOBAL PREMİUM SİSTEM AYARLARI
# ==========================================
st.set_page_config(
page_title="CyberNLP Tehdit Analiz Konsolu",
page_icon="🛡️",
layout="centered",
initial_sidebar_state="collapsed"
)
MODEL_NAME = "ehsanaghaei/SecureBERT"
MAX_LEN = 200
# Lüks Kurumsal UI Tasarımı (Vercel Dark & Cyber Intelligence Theme)
st.markdown("""
<style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap');
html, body, [data-testid="stAppViewContainer"] {
font-family: 'Inter', sans-serif !important;
background-color: #0b0e14 !important;
}
code, pre, .mono-text {
font-family: 'JetBrains Mono', monospace !important;
}
/* Üst Kurumsal Header */
.brand-header {
border-bottom: 1px solid #1f242c;
padding-bottom: 16px;
margin-bottom: 28px;
}
.report-title { font-size:24px; font-weight:700; color:#ffffff; letter-spacing:-0.5px; }
.report-subtitle { font-size:12.5px; color:#6272a4; margin-top:5px; font-weight: 400; }
/* Bölüm Çizgileri ve Başlıkları */
.section-header {
font-size:11px;
font-weight:700;
color:#4f46e5;
margin-top:25px;
margin-bottom:12px;
letter-spacing:1.5px;
text-transform: uppercase;
font-family: 'JetBrains Mono', monospace;
}
/* Gelişmiş Rapor Kartı */
.cwe-card {
background-color:#11151c;
padding:24px;
border-radius:8px;
border:1px solid #1f242c;
margin-top:20px;
box-shadow: 0 4px 20px rgba(0,0,0,0.2);
}
.meta-label { color:#6272a4; font-weight:700; font-size:11px; text-transform: uppercase; letter-spacing: 0.8px; display:block; margin-top:16px;}
.meta-value { color:#e2e8f0; font-weight:400; font-size:13.5px; line-height: 1.6; display: block; margin-top: 4px; }
/* Mikro Hap Buton Tasarımları */
.stButton > button {
background-color: #11151c !important;
color: #8b949e !important;
border: 1px solid #21262d !important;
font-size: 11.5px !important;
padding: 6px 12px !important;
border-radius: 20px !important;
transition: all 0.2s ease;
font-family: 'JetBrains Mono', monospace;
}
.stButton > button:hover {
color: #58a6ff !important;
border-color: #58a6ff !important;
background-color: #161b22 !important;
}
</style>
""", unsafe_allow_html=True)
# ==========================================
# 📚 AKADEMİK TÜRKÇE CWE BİLGİ BANKASI
# ==========================================
CWE_DICT = {
"CWE-79": {
"name": "Siteler Arası Betik Çalıştırma (Cross-Site Scripting - XSS)",
"description": "Uygulamanın, kullanıcı tarafından sağlanan girdileri tarayıcının DOM modelinde çalıştırmadan önce yetersiz şekilde sterilize etmesi veya filtrelememesi durumudur. Saldırganların istemci tarafında zararlı script çalıştırmasına yol açar.",
"impact": "Oturum çalma (Session Hijacking), kimlik doğrulama mekanizmalarının atlanması, çerez verilerinin sızdırılması ve kullanıcı taklidi.",
"mitigation": "Girdilerin basılacağı bağlama uygun (HTML gövdesi, nitelikler, JavaScript bağlamı) çıktı kodlaması (Output Encoding) uygulanmalı ve katı bir İçerik Güvenliği Politikası (CSP) devreye alınmalıdır."
},
"CWE-89": {
"name": "SQL Komutlarındaki Özel Öğelerin Hatalı Temizlenmesi (SQL Injection)",
"description": "Kullanıcıdan alınan verilerin önceden parametreleştirilmeden doğrudan ilişkisel veritabanı sorgularına dahil edilmesi durumudur. Çalışma zamanı sorgu mantığının manipüle edilmesine neden olur.",
"impact": "Veritabanındaki tüm hassas verilere yetkisiz erişim, veri sızıntısı, yapısal tabloların silinmesi ve veritabanı kabuk eklentileri üzerinden işletim sisteminde komut çalıştırılması.",
"mitigation": "Tüm veritabanı etkileşimlerinde parametrik sorgular (Prepared Statements) kullanılmalı, ORM çerçeveleri optimize edilmeli ve girdi beyaz listeye tabi tutulmalıdır."
},
"CWE-862": {
"name": "Eksik Yetkilendirme (Missing Authorization)",
"description": "Uygulamanın, kritik iş mantığı veya veri işlemlerini yürütmeden önce, çağrıyı yapan aktörün rollerini ve ayrıcalıklarını sunucu tarafında doğrulamaması hatasıdır.",
"impact": "Yatay ve dikey yetki yükseltme (Privilege Escalation), diğer kullanıcıların verilerine yetkisiz erişim ve kritik sistem yapılandırmalarının değiştirilmesi.",
"mitigation": "Merkezi bir erişim kontrol modeli (RBAC veya ABAC) uygulanmalı, her API uç noktası ve durum değişikliği sunucu tarafında doğrulanmalıdır."
},
"NVD-CWE-noinfo": {
"name": "Yetersiz Bilgi / Sınıflandırılamayan Yapısal Güvenlik Açığı",
"description": "Zafiyet bildiriminde veya üretici tavsiyesinde, hatanın tam olarak hangi yapısal CWE kategorisine ait olduğunu belirleyecek derinlikte teknik detayın bulunmaması durumudur.",
"impact": "Sistem mimarisine bağlı olarak değişkenlik gösterir; mantıksal bozulmalardan hizmet kesintilerine kadar geniş bir etki alanına sahip olabilir.",
"mitigation": "Üretici yama notları yakından takip edilmeli, üçüncü parti bağımlılıklar güncellenmeli ve genel güvenli çalışma zamanı sıkılaştırmaları uygulanmalıdır."
},
"CWE-74": {
"name": "Çıktıdaki Özel Öğelerin Hatalı Temizlenmesi (Genel Enjeksiyon)",
"description": "Dışarıdan sağlanan parametrelerin, komut kanallarına veya yorumlayıcı hatlarına, parametre ve komut ayrımı yapılmaksızın doğrudan aktarılması durumudur.",
"impact": "Alt sistem bileşenlerinde mantıksal akışın ele geçirilmesi ve veri kanallarının manipülasyonu.",
"mitigation": "Kullanıcı verileri alt süreçlere aktarılmadan önce güçlü veri tipi kapsülleyicileri (strong syntax typing) ve katı ayrıştırma katmanlarından geçirilmelidir."
},
"CWE-352": {
"name": "Siteler Arası İstek Sahteciliği (Cross-Site Request Forgery - CSRF)",
"description": "Web uygulamasının, işlemler için yalnızca tarayıcının kalıcı kimlik belirteçlerine (Çerezler) güvenmesi ve istemcinin bu isteği bilinçli olarak yapıp yapmadığını doğrulamaması durumudur.",
"impact": "Kullanıcının haberi olmadan kritik hesap ayarlarının değiştirilmesi, yetkisiz para transferleri veya hesap ele geçirme senaryoları.",
"mitigation": "Durum değiştiren tüm HTTP isteklerine benzersiz ve kriptografik anti-CSRF token'ları eklenmeli, çerezler için 'SameSite=Strict' özniteliği zorunlu kılınmalıdır."
},
"CWE-22": {
"name": "Dizin Geçişi / Dosya Yolunun Hatalı Sınırlandırılması (Path Traversal)",
"description": "Dosya erişim operasyonlarında kullanıcıdan alınan yol argümanlarının sınırlandırılmaması nedeniyle, saldırganın nokta-nokta-slash ('../') dizilerini kullanarak kök dizin dışına çıkabilmesi hatasıdır.",
"impact": "İşletim sistemi yapılandırma dosyalarının, kaynak kodların ve hassas sistem verilerinin yetkisiz aktörler tarafından okunması veya sızdırılması.",
"mitigation": "Girdi olarak doğrudan dosya yolları kabul edilmemeli, absolute/canonical yollar sunucu tarafında çözülmeli ve uygulama dizin görünürlüğü kısıtlanmalıdır."
},
"CWE-416": {
"name": "Serbest Bırakıldıktan Sonra Bellek Kullanımı (Use After Free)",
"description": "Yerel yazılım yürütme katmanında, dinamik olarak ayrılan bir bellek bloğunun serbest bırakılmasından (free) sonra, ilgili bellek işaretçisinin (pointer) hala referans alınmaya devam etmesi hatasıdır.",
"impact": "Uzaktan rastgele kod çalıştırılması (RCE), bellek bütünlüğünün bozulması, yerel yetki yükseltme ve kararsız sistem çökmeleri.",
"mitigation": "Bellek yönetimini otomatik gerçekleştiren akıllı işaretçiler (smart pointers) kullanılmalı veya deallocate edilen işaretçiler anında NULL durumuna çekilmelidir."
},
"CWE-125": {
"name": "Sınırların Dışında Bellek Okuma (Out-of-bounds Read)",
"description": "Yazılım algoritmasının, kendisine ayrılan tampon bellek (buffer) sınırlarının dışındaki komşu bellek adreslerinden veri okumaya çalışması durumudur.",
"impact": "Bellekteki diğer süreçlere ait gizli verilerin, kriptografik anahtarların ve oturum bilgilerinin sızıntısı (Örn: Heartbleed mantığı).",
"mitigation": "Otomatik sınır kontrolü yapan kütüphaneler tercih edilmeli, yerel kodlar AddressSanitizer (ASan) katmanları ile denetlenerek derlenmelidir."
},
"CWE-284": {
"name": "Hatalı Erişim Kontrolü (Improper Access Control)",
"description": "Yazılım mimarisinin, erişim kontrol görünürlük sınırlarını düzgün tanımlayamaması nedeniyle kimlik doğrulaması yapılmamış aktörlerin korumalı alanlara erişebilmesidir.",
"impact": "Veri ifşası, yetkisiz veri manipülasyonu ve çok kiracılı (multi-tenant) sistemlerde izolasyon ihlalleri.",
"mitigation": "Sistem genelinde 'En Düşük Ayrıcalık İlkesi' (Principle of Least Privilege) uygulanmalı, erişim matrisleri veri sahipliği ile eşleştirilmelidir."
},
"CWE-119": {
"name": "Bellek Arabelleği Sınırlarının Hatalı Kısıtlanması (Arabellek Taşması Atası)",
"description": "Yazılımın bellek blokları üzerinde işlem yaparken, gelen veri boyutunun ayrılan alana sığıp sığmadığını doğrulamadan kopyalama veya yazma işlemi yürütmesidir.",
"impact": "İşlem akışının (control flow) değiştirilmesi, hizmet kesintileri (Denial of Service) veya sistem üzerinde tam yetkiyle kod çalıştırılması.",
"mitigation": "Boyut kontrolü barındırmayan güvensiz eski fonksiyonlar (strcpy, gets vb.) tamamen terk edilerek güvenli API alternatiflerine geçilmelidir."
},
"CWE-787": {
"name": "Sınırların Dışında Bellek Yazma (Out-of-bounds Write)",
"description": "Uygulamanın, tanımlanan bellek sınırının dışındaki alanlara veri yazarak komşu bellek bloklarını, işaretçileri veya fonksiyon geri dönüş adreslerini manipüle etmesidir.",
"impact": "En kritik güvenlik ihlallerinden biridir; doğrudan uzaktan kod çalıştırma (RCE) ve tam sistem ele geçirme imkanı tanır.",
"mitigation": "Sınır kontrollü koleksiyon yapıları zorunlu kılınmalı, derleme aşamasında Stack Canaries ve ASLR gibi işletim sistemi korumaları aktif edilmelidir."
},
"CWE-476": {
"name": "NULL Gösterici Başvurusu (NULL Pointer Dereference)",
"description": "Yazılım yürütme hattının, geçerli bir bellek adresini işaret ettiğini varsaydığı ancak gerçekte NULL değerine sahip olan bir işaretçiyi okumaya veya çalıştırmaya zorlanmasıdır.",
"impact": "Uygulamanın anında çökmesi, sunucu kararsızlığı ve dağıtık hizmet dışı bırakma (DoS) durumları.",
"mitigation": "İşaretçiler referans alınmadan önce conditional block'lar ile geçerlilik kontrolüne tabi tutulmalı veya modern dillerdeki Optional yapıları kullanılmalıdır."
},
"CWE-200": {
"name": "Hassas Bilgilerin Yetkisiz Bir Aktöre İfşası (Information Disclosure)",
"description": "Uygulamanın; sistem yapılandırmalarını, hata çıktılarını, veritabanı şemalarını veya kriptografik özetleri istemeden dış gözlemcilere sızdırması durumudur.",
"impact": "Saldırganlar için hedef sistem mimarisi hakkında istihbarat sağlama, sonraki hedefli saldırıların haritasını çıkarma imkanı.",
"mitigation": "Kullanıcıya gösterilen hata arayüzleri jenerik tutulmalı, detaylı hata logları yalnızca güvenli dahili sunucu dosyalarında saklanmalıdır."
},
"CWE-78": {
"name": "İşletim Sistemi Komut Enjeksiyonu (OS Command Injection)",
"description": "Kullanıcıdan alınan parametrelerin doğrudan işletim sistemi kabuk yorumlayıcılarına (shell) aktarılması ve girdi içindeki sistem metakarakterlerinin ayıklanmaması hatasıdır.",
"impact": "Sunucu işletim sisteminde tam kontrol sağlama, tersine kabuk (Reverse Shell) bağlantısı kurma ve iç ağda yatay ilerleme (Lateral Movement).",
"mitigation": "Sistem düzeyinde kabuk süreçleri başlatılmamalı; bunun yerine dilin kendi yerel, doğrulanmış API kütüphaneleri kullanılmalıdır."
},
"CWE-20": {
"name": "Hatalı Girdi Doğrulaması (Improper Input Validation)",
"description": "Uygulama yazılımının; dışarıdan gelen verilerin uzunluk, şema tipi, değer aralığı veya karakter seti gibi katı kurallara uygunluğunu denetlemeden işleme alması hatasıdır.",
"impact": "Alt katmanlardaki iş mantıklarının bozulması, veri tipi dönüşüm hataları ve kaynak tükenmesi zafiyetleri.",
"mitigation": "Veri akış hattının en dış giriş noktalarında katı pozitif doğrulama şemaları (Beyaz Liste kontrolü) zorunlu tutulmalıdır."
},
"CWE-94": {
"name": "Kod Üretiminin Hatalı Kontrolü (Code Injection / RCE)",
"description": "Uygulamanın, dışarıdan gelen dinamik metin dizilerini doğrudan kendi çalışma zamanı yorumlayıcı motorunda (`eval`, `unserialize` vb.) kod parçası gibi çalıştırması hatasıdır.",
"impact": "Saldırganın, uygulamanın çalıştığı kullanıcı haklarıyla sunucu üzerinde anında rastgele kod yürütmesini sağlar.",
"mitigation": "Kullanıcı verileri üzerinde dinamik kod yorumlama çağrıları kesinlikle kullanılmamalı; parametrik mantık tabloları tercih edilmelidir."
},
"CWE-918": {
"name": "Sunucu Taraflı İstek Sahteciliği (Server-Side Request Forgery - SSRF)",
"description": "Uygulama sunucusunun, dışarıdan gelen bir URL parametresini kullanarak arka planda network istekleri göndermesi ve hedef destinasyonu doğrulamaması hatasıdır.",
"impact": "İç ağ altyapısının taranması, dışa kapalı firewalWAF kurallarının delinmesi ve bulut sunucu metaveri servislerine (IMDSv2) erişilerek kimlik bilgilerinin çalınması.",
"mitigation": "Kullanıcı tanımlı URL yönlendirmeleri sınırlandırılmalı, sunucunun outbound network çıkışlarına katı IP beyaz listeleri uygulanmalıdır."
},
"CWE-77": {
"name": "Komut Yapısının Hatalı Düzenlenmesi (Command Injection)",
"description": "Yazılımın, harici verileri belirli kurallara göre yorumlanan yapısal bir komut ifadesine dönüştürürken parametre sınırlarını koruyamamasıdır.",
"impact": "Sorgu veya komut mantığının dışarıdan değiştirilmesi ve yetkisiz mantıksal eylemlerin tetiklenmesi.",
"mitigation": "Güçlü parametre ayrıştırma algoritmaları uygulanmalı ve komut yapıları statik şablonlar olarak kilitlenmelidir."
},
"CWE-121": {
"name": "Yığın Tabanlı Arabellek Taşması (Stack-based Buffer Overflow)",
"description": "Belleğin 'Stack' bölgesinde ayrılmış sabit boyutlu yerel değişken alanlarına, boyut kontrolü yapılmaksızın veri yazılması ve fonksiyon dönüş adreslerinin ezilmesidir.",
"impact": "İşlemci kayıtçılarının (register) yönlendirilmesi, zararlı makine kodlarının çalıştırılması ve tam sistem manipülasyonu.",
"mitigation": "Statik kod analiz araçları ile geliştirme süreçleri denetlenmeli, modern bellek güvenli diller veya API'ler entegre edilmelidir."
},
"CWE-434": {
"name": "Tehlikeli Türdeki Dosyaların Kısıtlanmasız Yüklenmesi (Unrestricted File Upload)",
"description": "Sisteme dosya yükleme arayüzünün, gelen dosyaların uzantılarını, içerik türlerini veya kod yapılarını denetlemeden doğrudan sunucu disk alanına yazması hatasıdır.",
"impact": "Sunucu dizinlerine kalıcı web kabukları (Webshell) yüklenmesi ve HTTP üzerinden çağrılarak uzaktan kod yürütülmesi (RCE).",
"mitigation": "MIME tipi ve sihirli bayt (magic bytes) kontrolleri yapılmalı, dosya isimleri sunucu tarafından rastgele yeniden adlandırılmalı ve non-executable alanlarda saklanmalıdır."
},
"CWE-502": {
"name": "Güvenilmeyen Verilerin Serbestleştirilmesi (Deserialization Vulnerability)",
"description": "Uygulamanın, dış ağdan gelen ikili (binary) veya yapılandırılmış nesne akışlarını, veri doğruluğunu ve tip kısıtlamalarını kontrol etmeden canlı uygulama nesnelerine dönüştürmesidir.",
"impact": "Nesne enjeksiyonu saldırıları, bellek durumu manipülasyonları ve kritik RCE (Uzaktan Kod Çalıştırma) zincirleri.",
"mitigation": "Yerel nesne serbestleştirme modelleri yerine JSON veya Protocol Buffers gibi düz, sadece veri barındıran primitif şemalar tercih edilmelidir."
},
"CWE-122": {
"name": "Öbek Tabanlı Arabellek Taşması (Heap-based Buffer Overflow)",
"description": "Belleğin dinamik olarak yönetilen 'Heap' bölgesindeki veri yapılarına ayrılan alanın ötesinde veri yazılarak bellek yöneticisi yapılarının bozulması hatasıdır.",
"impact": "Sistem işaretçilerinin saptırılması, kararsız bellek sızıntıları ve dolaylı yoldan kod yürütme istismarları.",
"mitigation": "Gelişmiş güvenlik mimarisine sahip modern bellek ayırıcılar (Hardened Allocators) kullanılmalı ve döngü sınırları sıkı denetlenmelidir."
},
"CWE-863": {
"name": "Hatalı Yetkilendirme Çözümlemesi (Incorrect Authorization)",
"description": "Yetkilendirme modülünün mantıksal olarak çalışması fakat zayıf doğrulama anahtarları veya roller nedeniyle yanlış aktörlere yüksek yetkiler ataması hatasıdır.",
"impact": "Kiracı veri izolasyonlarının delinmesi, dikey yetki aşımı ve kullanıcı profillerinin manipüle edilmesi.",
"mitigation": "Endüstri standardı IAM kütüphaneleri entegre edilmeli, yetki kontrolleri doğrudan değiştirilemez veritabanı kayıt sahiplikleri ile ilişkilendirilmelidir."
},
"CWE-98": {
"name": "Dosya Adı Denetiminin Yapılmaması (Local/Remote File Inclusion)",
"description": "Sunucu tarafındaki script dosyası dahil etme işlemlerinde (`include`, `require`), kullanıcıdan alınan yol değişkenlerinin filtre edilmeden çalıştırılması hatasıdır.",
"impact": "Sunucuya dış ağdaki zararlı kod dosyalarının dahil edilmesi (RCE) veya sunucu içindeki gizli dosyaların okunması.",
"mitigation": "Sunucu ayarlarından harici URL'lerin dahil edilmesi kapatılmalı (`allow_url_include = Off`) ve statik dosya beyaz listesi uygulanmalıdır."
},
"CWE-400": {
"name": "Uncontrolled Resource Consumption",
"description": "Uygulamanın, harici bir istek tetiklemesiyle harcayacağı bellek boyutunu, dosya kanalı açılışını veya CPU döngü sınırlarını kısıtlamaması durumudur.",
"impact": "Sunucu kaynaklarının tamamen tükenmesi, kilitlenmeler ve uygulamanın tamamen hizmet dışı kalması (Denial of Service).",
"mitigation": "İstek oranları sınırlandırılmalı (Rate Limiting), işlem zaman aşımı sayaçları uygulanmalı ve konteyner bellek tavan sınırları kilitlenmelidir."
},
"CWE-120": {
"name": "Boyut Kontrolü Yapılmadan Arabellek Kopyalama (Classic Buffer Overflow)",
"description": "Yazılım bileşeninin, bir veri kaynağını hedef tampon belleğe kopyalarken hedef alanın bu veriyi alabilecek kapasitede olup olmadığını hiç denetlememesi hatasıdır.",
"impact": "Bellek kararsızlığı, komşu fonksiyon verilerinin bozulması ve potansiyel kod enjeksiyonu istismarları.",
"mitigation": "Boyut denetimsiz tüm bellek operasyonları durdurulmalı; her kopyalama öncesi hedef ve kaynak uzunlukları assert edilmelidir."
},
"CWE-639": {
"name": "Kullanıcı Kontrolündeki Anahtar ile Yetki Atlama (IDOR)",
"description": "Uygulamanın, istek parametrelerindeki birincil veritabanı anahtarlarını veya hesap ID'lerini değiştiren kullanıcının, o verinin gerçek sahibi olup olmadığını sunucuda kontrol etmemesidir.",
"impact": "Güvenlik mekanizmasının tamamen baypas edilmesi, diğer tüm müşterilerin/kullanıcıların özel verilerine toplu erişim sağlanması.",
"mitigation": "Sunucu tarafında, oturum açmış kullanıcı token'ı ile erişilmek istenen nesne kimliği arasında katı bir sahiplik doğrulaması (linkage assertion) yapılmalıdır."
},
"CWE-287": {
"name": "Hatalı Kimlik Doğrulama (Improper Authentication)",
"description": "Uygulamanın kimlik doğrulama modülünde barındırdığı tasarım hataları nedeniyle, zayıf kimlik bilgilerini kabul etmesi veya doğrulama adımlarının belirli girdilerle atlanabilmesidir.",
"impact": "Hesapların kolayca ele geçirilmesi, sahte oturum token'ları üretilmesi ve kimlik kontrol katmanlarının devre dışı kalması.",
"mitigation": "Çok faktörlü kimlik doğrulama (MFA) standartları uygulanmalı, oturum token'ları güçlü kriptografik imzalara (JWT) sahip olmalıdır."
},
"CWE-306": {
"name": "Kritik Fonksiyon İçin Eksik Kimlik Doğrulama",
"description": "Para transferi, şifre sıfırlama veya yönetici paneli gibi yüksek öncelikli iş mantığı hatlarının, kullanıcının kimliğini yeniden doğrulamadan doğrudan erişime açılmasıdır.",
"impact": "Yetkisiz yönetimsel işlemler yürütülmesi, sistem veritabanlarının sıfırlanması ve altyapı kontrollerinin kaybedilmesi.",
"mitigation": "Sifir Güven (Zero Trust) operasyonel modeli benimsenmeli, tüm kritik API hatları sıkı bir kimlik doğrulama geçidinden yönlendirilmelidir."
},
"CWE-Other": {
"name": "Diğer Yapısal Zafiyet Kategorileri",
"description": "İşlenen metnin, modelin ana sınıflandırma başlığında yer alan yüksek frekanslı ilk 30 CWE sınıfının dışındaki nadir siber güvenlik paternleri ile eşleşmesi durumudur.",
"impact": "İlgili spesifik zafiyet türüne bağlı olarak değişken bütünlük ve erişilebilirlik kayıpları tetiklenebilir.",
"mitigation": "Uçtan uca kaynak kod denetimi yapılmalı, hata yığın sınırları incelenmeli ve dinamik güvenlik test araçları (DAST) kullanılmalıdır."
}
}
# ==========================================
# 🔍 MODEL KONUM ALGORİTMASI
# ==========================================
def find_model_folder():
current_dir = os.path.dirname(os.path.abspath(__file__))
parent_dir = os.path.dirname(current_dir)
possible_paths = [
os.path.join(parent_dir, "securebert_multitask_model"),
os.path.join(current_dir, "securebert_multitask_model"),
"/app/securebert_multitask_model"
]
for path in possible_paths:
if os.path.exists(path) and "model_weights.pth" in os.listdir(path):
return path
return None
MODEL_FOLDER = find_model_folder()
# ==========================================
# ⚙️ MULTI-TASK MODEL MİMARİSİ
# ==========================================
class AdvancedSecureBERT(nn.Module):
def __init__(self, n_classes):
super(AdvancedSecureBERT, self).__init__()
self.bert = AutoModel.from_pretrained(MODEL_NAME)
hidden_size = self.bert.config.hidden_size
self.shared_layer = nn.Sequential(
nn.Linear(hidden_size, hidden_size // 2),
nn.GELU(),
nn.Dropout(p=0.3)
)
self.regressor = nn.Sequential(
nn.Linear(hidden_size // 2, 64),
nn.GELU(),
nn.Linear(64, 1)
)
self.classifier = nn.Sequential(
nn.Linear(hidden_size // 2, 128),
nn.GELU(),
nn.Dropout(p=0.2),
nn.Linear(128, n_classes)
)
def forward(self, input_ids, attention_mask):
outputs = self.bert(input_ids=input_ids, attention_mask=attention_mask)
cls_output = outputs.last_hidden_state[:, 0, :]
shared_out = self.shared_layer(cls_output)
score = self.regressor(shared_out)
category = self.classifier(shared_out)
return score, category
@st.cache_resource
def load_cyber_model(folder_path):
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
with open(os.path.join(folder_path, "label_encoder.pkl"), "rb") as f:
le = pickle.load(f)
model = AdvancedSecureBERT(n_classes=len(le.classes_))
weights_path = os.path.join(folder_path, "model_weights.pth")
model.load_state_dict(torch.load(weights_path, map_location=torch.device('cpu')))
model.eval()
return model, tokenizer, le
if MODEL_FOLDER is not None:
try:
model, tokenizer, le = load_cyber_model(MODEL_FOLDER)
except Exception as e:
st.error(f"Başlatma Hatası: {e}")
st.stop()
else:
st.error("Model yüklenemedi.")
st.stop()
# ==========================================
# 🎨 PREMIUM ANALİTİK PANEL PANELİ (CENTERED)
# ==========================================
st.markdown('<div class="brand-header"><div class="report-title">🛡️ CyberNLP İstihbarat Konsolu</div>'
'<div class="report-subtitle">SecureBERT ve Çok Görevli Sinir Ağları ile Gerçek Zamanlı Yapay Zeka Tehdit Modellemesi</div></div>', unsafe_allow_html=True)
# İnce Hap Şablon Butonları (Log Feed Tarzı)
st.markdown('<div class="section-header">🔍 TEHDİT ANALİZİ HIZLI TEST ŞABLONLARI</div>', unsafe_allow_html=True)
col_p1, col_p2, col_p3 = st.columns(3)
with col_p1:
if st.button("💾 Stack Buffer Overflow", use_container_width=True):
st.session_state.threat_text = "The internal memory management function uses an unbounded character copying mechanism to write user data into a fixed-allocation block allocated on the program execution stack, resulting in control register corruption."
with col_p2:
if st.button("💾 Outbound Proxy SSRF", use_container_width=True):
st.session_state.threat_text = "A URL-fetching proxy feature allows anonymous web clients to dictate the exact network destination of the backend HTTP client instance, enabling scan requests targeted against internal loopback interfaces."
with col_p3:
if st.button("💾 URL Path Access IDOR", use_container_width=True):
st.session_state.threat_text = "The analytics endpoint relies solely on numerical sequence guessing of the resource identifier parameters in the URL path, bypassing validation checks regarding whether the active session owns that specific dataset."
if "threat_text" not in st.session_state:
st.session_state.threat_text = ""
# Metin Giriş Katmanı
st.markdown('<div class="section-header">📝 ADVISORY VERİ GİRİŞ KATMANI (INGILIZCE METIN)</div>', unsafe_allow_html=True)
user_input = st.text_area(
"Zafiyet Metni Giriş Alanı:",
value=st.session_state.threat_text,
placeholder="Analiz edilecek ham CVE raporunu veya zafiyet açıklamasını buraya yapıştırın...",
height=125,
label_visibility="collapsed"
)
st.write("")
run_analysis = st.button("⚡ TEHDİT ANALİZ RAPORUNU ÇALIŞTIR", type="primary", use_container_width=True)
# ==========================================
# 📊 PREMIUM GÖRSEL SONUÇ KATMANI
# ==========================================
if run_analysis:
if user_input.strip() == "":
st.warning("İşlem Ertelendi: Boş bir metin girdisi analiz edilemez.")
else:
encoding = tokenizer(
user_input, add_special_tokens=True, max_length=MAX_LEN,
padding='max_length', truncation=True, return_tensors='pt'
)
with torch.no_grad():
pred_score, pred_cat = model(encoding['input_ids'], encoding['attention_mask'])
final_score = max(0.0, min(10.0, pred_score.item()))
cat_idx = torch.argmax(pred_cat, dim=1).item()
final_category = le.inverse_transform([cat_idx])[0]
cwe_info = CWE_DICT.get(final_category, CWE_DICT["CWE-Other"])
# Risk çubuğu için yüzde hesabı (0-10 arası skoru %0-100 ölçeğine çeker)
bar_percentage = final_score * 10
# Dinamik Tehdit Derecesi ve Glow Renk Atamaları
if final_score >= 8.5:
sev_title = "KRİTİK TEHDİT"
glow_color = "#ff4545" # Neon Parlak Kırmızı
elif final_score >= 6.5:
sev_title = "YÜKSEK TEHDİT"
glow_color = "#ff9130" # Parlak Turuncu
elif final_score >= 4.0:
sev_title = "ORTA SEVİYE RİSK"
glow_color = "#e1b317" # Altın Sarısı
else:
sev_title = "DÜŞÜK SEVİYE RİSK"
glow_color = "#30a46c" # Güvenli Yeşil
st.markdown('<div class="section-header">📊 YAPAY ZEKA ÇEKİRDEK RİSK DEĞERLENDİRMESİ</div>', unsafe_allow_html=True)
# ULTRAPREMIUM DİNAMİK GLOW BAR (HTML/CSS)
st.markdown(f"""
<div style="background-color:#11151c; border:1px solid #1f242c; padding:24px; border-radius:8px; margin-top:5px; box-shadow: 0 4px 20px rgba(0,0,0,0.15);">
<div style="display:flex; justify-content:between; align-items:center; width:100%; margin-bottom:14px;">
<div style="color:#6272a4; font-size:11px; font-weight:700; letter-spacing:1px; flex-grow:1; font-family:'JetBrains Mono', monospace;">NİHAİ MODEL ANALİZ SONUCU</div>
<div style="background:{glow_color}15; color:{glow_color}; font-size:11px; font-weight:700; padding:4px 12px; border-radius:20px; border:1px solid {glow_color}40; letter-spacing:0.5px;">{sev_title}</div>
</div>
<div style="display:flex; align-items:baseline; margin-bottom:20px;">
<span style="font-size:44px; font-weight:700; color:#ffffff; font-family:'JetBrains Mono', monospace; letter-spacing:-1px;">{final_score:.2f}</span>
<span style="font-size:16px; color:#6272a4; margin-left:6px; font-weight:500; font-family:'JetBrains Mono', monospace;">/ 10.0</span>
</div>
<div style="position:relative; width:100%; height:8px; background:linear-gradient(90deg, #30a46c 0%, #e1b317 45%, #ff9130 75%, #ff4545 100%); border-radius:4px; margin-bottom:8px;">
<div style="position:absolute; left:calc({bar_percentage}% - 5px); top:-4px; width:10px; height:16px; background:#ffffff; border-radius:2px; box-shadow:0 0 12px {glow_color}, 0 0 5px #ffffff; transition: left 0.6s cubic-bezier(0.25, 1, 0.5, 1);"></div>
</div>
<div style="display:flex; justify-content:space-between; color:#444c56; font-size:10px; font-weight:600; font-family:'JetBrains Mono', monospace; margin-top:6px;">
<span>0.0 (DÜŞÜK)</span>
<span>4.0 (ORTA)</span>
<span>6.5 (YÜKSEK)</span>
<span>8.5 (KRİTİK)</span>
<span>10.0</span>
</div>
</div>
""", unsafe_allow_html=True)
# Mini İstatistik Alanları
m_col1, m_col2 = st.columns(2)
with m_col1:
st.metric(label="Tahmin Edilen CWE İndeksi", value=final_category)
with m_col2:
st.metric(label="Model Ham Skor Çıktısı", value=f"{final_score:.4f}")
# Tamamen Türkçe Akademik Rapor Kartı
st.markdown('<div class="section-header">📝 GÜVENLİK TAKSONOMİSİ GENİŞLETİLMİŞ RAPORU</div>', unsafe_allow_html=True)
st.markdown(f"""
<div class="cwe-card">
<div style="font-size: 18px; font-weight: 700; color: #58a6ff; margin-bottom: 14px; border-bottom: 1px solid #21262d; padding-bottom: 8px; font-family:'JetBrains Mono', monospace;">
{final_category}: {cwe_info['name']}
</div>
<div>
<span class="meta-label">Teknik Sınıflandırma Tanımı:</span>
<span class="meta-value">{cwe_info['description']}</span>
</div>
<div>
<span class="meta-label">Sistemsel ve Yapısal Etki Alanı (Impact):</span>
<span class="meta-value" style="color: #ff7b72;">{cwe_info['impact']}</span>
</div>
<div>
<span class="meta-label">Kurumsal Çözüm ve İyileştirme Tavsiyeleri (Mitigation):</span>
<span class="meta-value" style="color: #7ee787;">{cwe_info['mitigation']}</span>
</div>
</div>
""", unsafe_allow_html=True)