| import streamlit as st |
| import os |
| import pickle |
| import torch |
| import torch.nn as nn |
| from transformers import AutoTokenizer, AutoModel |
|
|
| |
| |
| |
| 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 |
|
|
| |
| 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) |
|
|
| |
| |
| |
| 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." |
| } |
| } |
|
|
| |
| |
| |
| 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() |
|
|
| |
| |
| |
| 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() |
|
|
| |
| |
| |
| 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) |
|
|
| |
| 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 = "" |
|
|
| |
| 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) |
|
|
| |
| |
| |
| 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"]) |
| |
| |
| bar_percentage = final_score * 10 |
| |
| |
| if final_score >= 8.5: |
| sev_title = "KRİTİK TEHDİT" |
| glow_color = "#ff4545" |
| elif final_score >= 6.5: |
| sev_title = "YÜKSEK TEHDİT" |
| glow_color = "#ff9130" |
| elif final_score >= 4.0: |
| sev_title = "ORTA SEVİYE RİSK" |
| glow_color = "#e1b317" |
| else: |
| sev_title = "DÜŞÜK SEVİYE RİSK" |
| glow_color = "#30a46c" |
| |
| st.markdown('<div class="section-header">📊 YAPAY ZEKA ÇEKİRDEK RİSK DEĞERLENDİRMESİ</div>', unsafe_allow_html=True) |
| |
| |
| 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) |
| |
| |
| 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}") |
| |
| |
| 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) |