Skip to content

Dark Web Intelligence Dashboard - CTI Project with Tor Integration for Siber-Vatan

Notifications You must be signed in to change notification settings

kayraaktas/interactive-scraper

Repository files navigation

Interactive Scraper - Dark Web Intelligence Dashboard

Kayra Aktas - CTI Project

Go ile geliştirilmiş dark web intelligence dashboard. Tor scraper verilerini görselleştirir, analiz eder ve yönetir.

Özellikler

Tor Scraper

  • Tor ağı üzerinden .onion sitelerini tarama
  • SOCKS5 proxy desteği (127.0.0.1:9150)
  • Otomatik kategori tahmini
  • Hata yönetimi ve loglama

Veri Yönetimi

  • SQLite veritabanı
  • Otomatik başlık üretimi (regex/pattern matching)
  • Kategori sınıflandırması (Forum, Market, Search Engine, Portal, Other)
  • Kritiklik seviyesi (1-5)
  • Tam metin arama

Web Dashboard

  • Session-based authentication
  • İstatistik kartları (toplam kayıt, kritik sayısı, vb.)
  • Kategori ve kritiklik dağılımı grafikleri (Chart.js)
  • Filtreleme (kategori, kritiklik, arama)
  • Detay görüntüleme
  • Kritiklik düzenleme (AJAX)
  • Modern gradient UI

Analist Bakış Açısı

Dashboard'daki her özellik CTI analisti için farklı amaçlara hizmet eder:

Kategori Dağılımı Grafiği Hangi platformların aktif olduğunu gösterir. Forumlar artıyorsa tehdit aktörleri bilgi paylaşımını yoğunlaştırıyor demektir. Analist buna göre hangi kategoriye odaklanacağına karar verir.

Kritiklik Seviyeleri Grafiği Seviye 5 kayıtlar acil inceleme gerektirir. Analist önce bu kayıtlara bakar, zaman yönetimi yapar. Seviye 1 kayıtlar bilgilendirme amaçlıdır.

Filtreleme Sistemi Analist "exploit" veya "ransomware" gibi anahtar kelimelerle hızlı arama yapar. Kategori filtresi ile sadece forumları veya sadece marketleri inceleyebilir. Binlerce kayıt arasında ilgili tehdidi bulmak için gerekli.

Detay Sayfası Ham içerik ve metadata'yı birlikte görmek önemli. Analist kaynak URL'ini takip edebilir, aynı siteyi tekrar ziyaret edebilir. İçeriği okuyup kritiklik seviyesini değiştirebilir.

Kritiklik Düzenleme Başlangıçta orta (3) olan bir kayıt, içerik okunduktan sonra kritik (5) olabilir. Analist manuel düzenleme yaparak veriyi güncel tutar.

Kritiklik Belirleme

Kritiklik seviyeleri şu kriterlere göre belirlenir:

Seviye 5 (Kritik): 0-day exploit, ransomware-as-a-service, canlı veri sızıntısı

Seviye 4 (Yüksek): Güvenlik açığı tartışmaları, exploit kit satışı

Seviye 3 (Orta): Genel güvenlik forumları, tartışma platformları (varsayılan)

Seviye 2 (Düşük): Privacy araçları, VPN/proxy servisleri

Seviye 1 (Çok Düşük): Arama motorları, dizin siteleri, wiki sayfaları

Analist içeriği okuduktan sonra seviyeyi manuel değiştirebilir.

Kategori Mantığı

Forum: Tehdit aktörlerinin bilgi paylaştığı platformlar. En önemli kategori çünkü yeni tehditler buradan çıkar.

Market: Illegal araç, veri veya servis satışı. Ransomware, exploit kit, stolen data izlenir.

Search Engine: Yeni .onion siteleri keşfetmek için kullanılır.

Portal: Haber, wiki ve dizin siteleri. Dark web haritası çıkarmak için kullanılır.

Other: Kategorize edilemeyen siteler.

Teknolojiler

Backend:

  • Go 1.21+
  • Gin Web Framework
  • GORM (ORM)
  • SQLite (pure Go driver)
  • Session management (cookie-based)
  • Tor SOCKS5 proxy (golang.org/x/net/proxy)

Frontend:

  • HTML5 / CSS3
  • Vanilla JavaScript (AJAX)
  • Chart.js (grafikler)
  • Modern gradient design

Kurulum

Docker ile (Önerilen)

# Docker ile çalıştır
docker-compose up -d

# Tarayıcıda aç
http://localhost:8080

Login:

  • Username: Kayra
  • Password: Aktas

Manuel Kurulum

# Bağımlılıkları yükle
go mod download

# Test verisi ekle
go run cmd/seed/seed.go

# Server başlat
go run cmd/server/main.go

Tor Scraper Kullanımı

1. Tor Browser'ı Başlat

Tor Browser'ı başlatın (Port 9150'de SOCKS5 proxy çalışacak).

2. Target Listesi Oluştur

targets.yaml dosyası oluşturun:

urls:
  - http://example1.onion
  - http://example2.onion
  - http://testforum.onion

3. Scraper'ı Çalıştır

go run cmd/scraper/main.go

Taranan siteler otomatik olarak veritabanına kaydedilir.

4. Dashboard'da Görüntüle

go run cmd/server/main.go
# http://localhost:8080

Başlık Üretimi Mantığı

Program, HTML içeriğinden otomatik başlık üretir:

Algoritma:

  1. HTML title tag varsa → Kullan (temizle, 100 karakter limiti)
  2. H1 tag varsa → Kullan (HTML taglerini temizle)
  3. İlk paragraf metni → İlk 80 karakter + "..."
  4. URL + Kategori → "DomainName - Category"

Özellikler:

  • Regex ile HTML tag temizleme
  • HTML entity decode ( , &, vb.)
  • Whitespace normalleştirme
  • Uzunluk kontrolü (50-100 karakter)

Örnek:

HTML: "<title>Security Forum - Exploit Discussions</title>"
→ Başlık: "Security Forum - Exploit Discussions"

HTML: "<h1>Latest Vulnerabilities</h1><p>CVE discussions...</p>"
→ Başlık: "Latest Vulnerabilities"

HTML: "Boş veya title/h1 yok"
→ Başlık: "Darkforum - Forum"

Proje Yapısı

interactive-scraper/
├── cmd/
│   ├── server/main.go      # Web server
│   └── seed/seed.go        # Test data seeder
├── internal/
│   ├── database/
│   │   └── db.go           # Veritabanı fonksiyonları (10 adet)
## Güvenlik

Session-based authentication  
Cookie-based session storage  
Protected routes (middleware)  
SQL injection koruması (GORM)  
XSS koruması (HTML escaping)

**Production Uyarısı:**
- `Kayra/Aktas` credential'larını değiştirin
- Session secret key'i değiştirin ([router.go](internal/web/router.go))
- HTTPS kullanın

### Content Struct

```go
type Content struct {
    ID          uint       // Primary key
    Title       string     // Üretilmiş başlık
    SourceName  string     // Site adı
    SourceURL   string     // .onion URL (unique)
    RawContent  string     // Temizlenmiş metin
    HTMLContent string     // Ham HTML
    PublishDate *time.Time // Paylaşım tarihi (opsiyonel)
    Category    string     // Kategori
    Criticality int        // 1-5 kritiklik seviyesi
    CreatedAt   time.Time  // Kayıt tarihi
    UpdatedAt   time.Time  // Güncelleme tarihi
}

Kritiklik Seviyeleri

  • 1: Çok Düşük
  • 2: Düşük
  • 3: Orta
  • 4: Yüksek
  • 5: Kritik

Kategoriler

  • Forum
  • Market
  • Search Engine
  • Portal
  • Other

Veritabanı Fonksiyonları

Temel İşlemler

Fonksiyon Açıklama
Connect() Veritabanı bağlantısını başlatır
SaveContent(content *Content) Yeni kayıt ekler
GetAllContents() Tüm kayıtları getirir (en yeni önce)
GetContentByID(id uint) ID'ye göre kayıt getirir
UpdateCriticality(id uint, criticality int) Kritiklik seviyesini günceller
DeleteContent(id uint) Kayıt siler

Filtreleme ve Arama

Fonksiyon Açıklama
GetContentsByCategory(category string) Kategoriye göre filtreler
GetContentsByCriticality(criticality int) Kritiklik seviyesine göre filtreler
SearchContents(query string) Başlık, içerik veya kaynak adında arama yapar

İstatistikler

GetStatistics() fonksiyonu şu bilgileri döndürür:

  • Toplam kayıt sayısı
  • Kategori dağılımı
  • Kritiklik dağılımı
  • Kritik kayıt sayısı (Seviye 5)

Kurulum ve Çalıştırma

Gereksinimler

  • Go 1.21+
  • SQLite3

Adımlar

  1. Bağımlılıkları yükle:
go mod download
  1. Uygulamayı çalıştır:
go run cmd/main.go
  1. Veritabanı otomatik oluşturulur:
  • Dosya: scraper.db
  • Tablo: contents

📝 Kullanım Örnekleri

Yeni Kayıt Ekleme

content := &models.Content{
    Title:       "Dark Web Forum Tartışması",
    SourceName:  "SecureForum",
    SourceURL:   "http://example.onion/thread/123",
    RawContent:  "İçerik metni...",
    HTMLContent: "<html>...</html>",
    Category:    models.CategoryForum,
    Criticality: 4,
}

err := database.SaveContent(content)

Kategori Bazlı Filtreleme

forumContents, err := database.GetContentsByCategory(models.CategoryForum)

İstatistik Alma

stats, err := database.GetStatistics()
fmt.Printf("Toplam: %v\n", stats["total"])
fmt.Printf("Kritik: %v\n", stats["critical_count"])

Arama

results, err := database.SearchContents("güvenlik")

🧪 Test

Test verileri ile uygulama otomatik test edilir:

go run cmd/main.go

Çıktı:

✓ Veritabanı bağlantısı başarılı
✓ Yeni kayıt eklendi: ID=1, Title=...
✓ Kritiklik güncellendi: ID=2, Criticality=4
...

🔐 Güvenlik

  • Tüm URL'ler unique olarak saklanır
  • Kritiklik seviyeleri 1-5 arası kontrol edilir
  • GORM ile SQL injection koruması
  • Hata yönetimi ve loglama

📦 Bağımlılıklar

gorm� Docker Komutları

```bash
# Build ve başlat
docker-compose up -d

# Logları izle
docker-compose logs -f

# Durdur
docker-compose down

# Rebuild (kod değişikliği sonrası)
docker-compose up -d --build

📝 API Endpoints

Public:

  • GET / - Login sayfası
  • POST /login - Login işlemi

Protected (Auth gerekli):

  • GET /dashboard - Ana dashboard
  • GET /list - Kayıt listesi (filtreleme desteği)
  • GET /detail/:id - Kayıt detayı
  • POST /update-criticality - Kritiklik güncelle
  • POST /delete/:id - Kayıt sil
  • GET /api/stats - İstatistikler (JSON)
  • GET /api/contents - Tüm kayıtlar (JSON)

🧪 Test

# Test verisi ekle
go run cmd/seed/seed.go

# Server başlat
go run cmd/server/main.go

# API test
curl http://localhost:8080/api/stats

📈 Veritabanı Şeması

CREATE TABLE contents (
    id INTEGER PRIMARY KEY,
    title TEXT NOT NULL,
    source_name TEXT NOT NULL,
    source_url TEXT UNIQUE NOT NULL,
    raw_content TEXT,
    html_content TEXT,
    publish_date DATETIME,
    category TEXT,
    criticality INTEGER DEFAULT 3,
    created_at DATETIME,
    updated_at DATETIME
);

🎓 Eğitim Notları

Bu proje CTI (Cyber Threat Intelligence) eğitimi kapsamında geliştirilmiştir.

Öğrenim Hedefleri:

  • Dark web veri toplama ve analiz
  • Veri görselleştirme ve dashboard tasarımı
  • Go ile web uygulama geliştirme
  • Docker containerization
  • Veritabanı yönetimi

Kritiklik Seviyeleri Neden Önemli?
CTI analistleri için her veri kaynağının risk seviyesini bilmek kritiktir. Dashboard, analistlerin öncelikli tehditleri hızlıca tespit etmesini sağlar.

Kategori Dağılımı Neden?
Tehdit aktörlerinin hangi platformları (forum, market, vb.) kullandığını görmek, trend analizi ve proaktif tehdit avcılığı için gereklidir.

📄 Lisans

Educational purposes only - CTI Project

👤 Geliştirici

Kayra Aktas

About

Dark Web Intelligence Dashboard - CTI Project with Tor Integration for Siber-Vatan

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published