Ana içeriğe geç

        Artemisz - Featured image

Artemisz

Artemisz — ESP32 Üzerinde WiFi Ofansif Güvenlik Araç Seti Geliştirmek

14 saldırı modu, handshake yakalama, gerçek zamanlı şifre doğrulamalı sahte portal ve BLE spam — hepsi 10 dolarlık bir mikrodenetleyici üzerinde.

Kapak

Github: github.com/ssnrshnn/artemisz

Fikir

Dizüstü bilgisayar, Raspberry Pi veya minimum donanım dışında herhangi bir harici cihaz gerektirmeyen, cep boyutunda bir WiFi sızma testi aracı yapmak istedim. ESP32, tek bir 5 dolarlık çip üzerinde station modu, AP modu, promiscuous sniffing ve raw frame injection yapabiliyor. 3 dolarlık bir TFT ekran, beş buton ve bir delikli pertinaks ekleyin — 15 doların altında bağımsız bir ofansif güvenlik cihazınız olsun.

Sonuç Artemisz: ESP32-D0WD-V3 üzerinde çalışan 2.800 satır C++ kodu, 14 farklı saldırı modu, bir web yönetim paneli, seri CLI ve TFT gösterge paneli.

Donanım

| ESP32-D0WD-V3

| 1.9" IPS TFT

| 5× buton

| Delikli pertinaks + kablolar

Ekran SPI üzerinden bağlanır (GPIO 18/23/5/2/4/15) ve beş buton dahili pull-up dirençleriyle GPIO 12/13/14/27/33’e bağlanır — her biri diğer taraftan GND’ye bağlıdır. Harici direnç gerekmez.

Donanım — ağ tarama Donanım — ana gösterge paneli

Neler Yapabilir

Saldırı Modları

Mod Ne Yapar
Deauth Seçili AP’ye hedefli deauth/disassoc — istemci bazlı + broadcast patlamaları
Hepsini Deauth Et Tüm görünür ağlara sıralı deauth
Evil Twin Hedef SSID’yi klonlar, sahte portal sunar, WiFi şifresini phishing ile alır, ardından gerçek AP’ye karşı doğrular
CSA Saldırısı Sahte Channel Switch Announcement beacon’ları enjekte eder — WPA3/PMF’yi atlar
Auth Flood AP’nin association tablosunu doldurmak için toplu sahte kimlik doğrulama istekleri gönderir
Nuke Deauth + CSA + Auth Flood birleşik
Karma Probe request’leri yakalar, eşleşen beacon’larla yanıt verir, otomatik olarak Evil Twin’e dönüşebilir
Beacon Spam 30 sahte SSID yayınlar (“FBI Surveillance Van” vb.)
Random Beacon Rastgele oluşturulmuş SSID’ler yayınlar
AP Clone Hedefin klonlanmış beacon’larını farklı BSSID’lerle yayınlar
Rick Roll 16 beacon SSID’si olarak şarkı sözleri
Probe Flood Sahte MAC’lerle toplu probe request’leri
BLE Spam Sour Apple (iOS), Swiftpair (Windows), Samsung Galaxy popup spam
Deauth Algılama Pasif mod — deauth frame’lerini sayar ve uyarı verir

Yakalama Yetenekleri

  • 4-Yollu Handshake — EAPOL mesajlarını yakalar, PCAP (Wireshark) veya HCCAPX (Hashcat) olarak dışa aktarır
  • PMKID — EAPOL Mesaj 1’in vendor IE’sinden çıkarır
  • Kimlik Bilgileri — doğrulanmış/başarısız durumuyla 20’ye kadar SSID/şifre çifti saklar, flash belleğe kaydedilir

Evil Twin: Ana Özellik

Evil Twin en karmaşık saldırı ve en çok zaman harcadığım özellik. İşte tam akışın nasıl çalıştığı:

Adım 1: Deauth

Evil Twin’i başlattığınızda, ESP32 hemen istemcileri gerçek AP’den düşürmek için deauthentication frame’leri göndermeye başlar. Her patlama 10 frame gönderir — 5 deauth (0xC0) ve 5 disassoc (0xA0) — her iki yönde (istemci→AP ve AP→istemci olarak taklit edilmiş) birden fazla neden koduyla (0x07, 0x06, 0x01). Hedefin istemcileri bağlantılarının kesildiğini görür.

Adım 2: Sahte AP

Eş zamanlı olarak, ESP32 SoftAP’sini “Artemisz"den hedefin tam SSID’sine aynı kanalda, şifresiz olarak yeniden yapılandırır. Kurbanın cihazı tanıdık bir ağ adı görür ve ya otomatik bağlanır ya da kullanıcı manuel olarak bağlanır.

Adım 3: Sahte Portal

Bağlandıktan sonra, kurbanın cihazı bir bağlantı kontrolü yapar. Her büyük işletim sistemi bunu farklı yapar:

İşletim Sistemi Endpoint Beklenen Yanıt
iOS/macOS /hotspot-detect.html HTML (“Success” değil)
Android /generate_204 HTTP 200 (204 değil)
Windows /connecttest.txt HTML yönlendirme
Firefox /canonical.html HTML yönlendirme

Artemisz bunların hepsini yakalar. iOS ve Windows 302 yönlendirme alır. Android, meta-refresh ile HTTP 200 alır (204 döndürmek Android’e “çevrimiçisin” der ve portalı atlar). Samsung cihazlar /mobile/status.php adresine gider, bu da işlenir. Bilinmeyen her URL 302 yönlendirme alır.

Portal, kullanıcıdan WiFi şifresini tekrar girmesini isteyen bir “firmware güncelleme” sayfasını taklit eder. jQuery ile bir göz ikonu şifre görünürlüğünü açıp kapatır — daha gerçekçi görünmesini sağlayan bir detay.

Adım 4: Gerçek Zamanlı Şifre Doğrulama

Artemisz’i çoğu Evil Twin aracından ayıran kısım budur. Kurban bir şifre gönderdiğinde, ESP32 sadece kaydetmez — gerçek AP’ye karşı doğrular.

1. POST ile şifre al
2. Tüm saldırıları duraklat (bekleme süresi = 15 saniye)
3. WiFi.disconnect()
4. WiFi.begin(gerçek_ssid, gönderilen_şifre, hedef_kanal, hedef_bssid)
5. WiFi.status()'u istemcide 2 saniyelik meta-refresh ile sorgula
6. WL_CONNECTED → DOĞRULANDI olarak kaydet, deauth'u durdur
7. WL_CONNECT_FAILED → BAŞARISIZ olarak kaydet, "Yanlış şifre, tekrar deneyin" göster
8. Zaman aşımı (10s) → BAŞARISIZ olarak kaydet

Kurban, sonuç gelene kadar her 2 saniyede bir otomatik yenilenen bir “Bağlanıyor…” sayfası görür. Şifre yanlışsa forma geri gönderilir. Doğruysa, kimlik bilgisi NVS flash’a kaydedilir ve yeniden başlatmalarda korunur.

Tek Radyo Sorunu

ESP32’nin tek bir radyosu var. TX buffer taşmadan aynı anda deauth frame’leri gönderip HTTP yanıtları sunamaz. Buffer dolduğunda, DNS yanıtları sessizce başarısız olur (WiFiUdp endPacket(): could not send data: 12), sahte portal hiç yüklenmez ve kurban sadece “İnternet Yok” görür.

Çözüm bir bekleme süresi sistemi:

Olay Bekleme Süresi Deauth Aralığı
Evil Twin başlar 5 saniye (tam duraklama)
Sahte AP’ye yeni istemci bağlanır 5 saniye (uzatılmış)
İstemciler bağlı, bekleme sona erdi 2000ms (2 saniyede 1 patlama)
Sahte AP’de istemci yok 80ms (agresif)
Şifre gönderildi 15 saniye (tam duraklama)
Normal deauth (Evil Twin yok) 100ms

Bu, kurbanın gerçek AP’ye yeniden bağlanmasını engelleyecek kadar deauth baskısını sürdürürken sahte portal için belleği boş tutar.

ESP-IDF’nin Frame Injection Engelini Aşmak

ESP-IDF firmware’i, deauth ve disassoc gibi yönetim frame’leri için raw frame injection’ı engeller. esp_wifi_80211_tx() ile bir deauth frame’i gönderdiğinizde, ieee80211_raw_frame_sanity_check adlı dahili bir fonksiyon tarafından sessizce düşürülür.

Çözüm bir weak-symbol override:

extern "C" int ieee80211_raw_frame_sanity_check(int32_t arg, int32_t arg2, int32_t arg3) {
  return 0;
}

Bu, firmware’in uygulamasını her zaman “geçti” döndüren biriyle değiştirir. -Wl,-zmuldefs linker flag’i çift sembolü mümkün kılar ve -Wl,--no-undefined linker şikayetlerini önlemek için kaldırılır. Bu teknik ESP32 güvenlik araştırma topluluğunda iyi bilinen bir yöntemdir — ESP32Marauder, esp32-wifi-penetration-tool ve diğerleri tarafından kullanılır.

AP Değişimlerinde Promiscuous Mod

Evil Twin başladığında, ESP32 SoftAP’sini “Artemisz"den klonlanmış SSID’ye WiFi.softAPdisconnect(true) ve ardından WiFi.softAP() ile değiştirir. Sorun: softAPdisconnect(true) radyoyu sıfırlar ve promiscuous modu temizler, sniffer callback’ini öldürür.

Sniffer olmadan, ESP32 şunları yapamaz:

  • Hedefli deauth için istemci MAC’lerini toplamak
  • EAPOL handshake’lerini yakalamak
  • Karma için probe request’leri izlemek
  • Sinyal gücünü izlemek

Çözüm, her AP yeniden yapılandırmasından sonra promiscuous modu açıkça yeniden etkinleştirmektir:

void switchAPConfig(const char* ssid, const char* password, uint8_t channel) {
  dnsServer.stop();
  WiFi.softAPdisconnect(true);    // promiscuous modu öldürür
  WiFi.softAP(ssid, password, channel);
  esp_wifi_set_promiscuous(true);  // yeniden etkinleştir
  esp_wifi_set_promiscuous_rx_cb(&snifferCallback);
}

EAPOL Handshake Yakalama

Sniffer callback’i (dahili yüksek hızlı RAM’den hızlı çalışma için IRAM_ATTR ile işaretlenmiş) veri yükünde 802.1X EtherType’ı (0x888E) kontrol ederek EAPOL frame’lerini filtreler.

Bir EAPOL frame’i bulunduğunda, mesaj numarası Key Info alanından belirlenir:

Key Info Flag’leri Mesaj
ACK set, MIC temiz Mesaj 1 (AP → İstemci, ANonce içerir)
ACK temiz, MIC set, nonce ≠ 0 Mesaj 2 (İstemci → AP, SNonce içerir)
ACK set, MIC set Mesaj 3 (AP → İstemci)
ACK temiz, MIC set, nonce = 0 Mesaj 4 (İstemci → AP)

Her mesaj (BSSID, istemci MAC) ile anahtarlanmış bir handshake struct’ında ham 802.11 frame’i (400 byte’a kadar) olarak saklanır. Aynı anda 5’e kadar handshake saklanabilir.

PMKID Çıkarma

PMKID, Mesaj 1’in Key Data alanında gizlidir. Kod, 00:0F:AC:04 OUI’li vendor-specific IE’yi arar:

[0xDD] [uzunluk] [00:0F:AC:04] [PMKID — 16 byte]

Bulunursa, 16 byte’lık PMKID çıkarılır ve ayrı olarak saklanır. PMKID’ler değerlidir çünkü tam 4-yollu handshake yakalamadan kırılabilirler — sadece Mesaj 1 (AP → İstemci) gereklidir.

Dışa Aktarma Formatları

  • PCAP: Standart paket yakalama formatı. PCAP global başlığı + ham 802.11 frame’lerini saran paket başlıkları. Wireshark’ta açılır.
  • HCCAPX: Hashcat’in yerel formatı. ESSID, AP MAC, ANonce, STA MAC, SNonce, key versiyonu, MIC ve tam EAPOL frame’ini içeren 393 byte’lık kayıtlar. GPU ile kırmaya hazır.

CSA Saldırısı — WPA3/PMF’yi Atlamak

802.11w (Korumalı Yönetim Frame’leri) unicast yönetim frame’lerini sahteciliğe karşı korur. Ancak beacon frame’leri broadcast’tir ve PMF etkin olsa bile asla şifrelenmez.

CSA saldırısı, Channel Switch Announcement IE içeren sahte beacon’lar enjekte ederek bunu istismar eder:

Element ID: 0x25 (CSA)
Length: 3
Mode: 1 (geçiş sırasında iletimi yasakla)
New Channel: [mevcut kanaldan farklı rastgele kanal]
Count: 2 (2 beacon aralığından sonra geçiş yap)

Beacon’ın BSSID’si gerçek AP ile eşleşir, bu yüzden istemciler güvenir. CSA’ya uyarlar, yanlış kanala geçerler ve bağlantıyı kaybederler. Bu, işlevsel olarak bir deauth saldırısına eşdeğerdir ancak PMF etkin WPA3 ağlarına karşı çalışır. Artemisz her 50ms’de 5 CSA beacon’ı gönderir.

Nuke modu Deauth + CSA + Auth Flood’u aynı anda etkinleştirir — maksimum kesinti.

Karma Saldırısı

Karma, probe request’leri pasif olarak dinleyerek çalışır. Her WiFi cihazı, hatırladığı her ağ için periyodik olarak “$SSID, orada mısın?” yayınlar. Artemisz bu probe’ları yakalar (istemci MAC, SSID, RSSI ve isabet sayısı saklar) ve eşleşen beacon frame’leriyle yanıt verir.

Cihaz, güvendiği ağ için bir beacon görür, kullanıcı etkileşimi olmadan bağlanır ve sahte portale yönlendirilir.

Başka saldırı aktif olmadığında, Karma herhangi bir kanaldaki probe’ları yakalamak için her 300ms’de tüm 13 kanal arasında geçiş yapar. Web yönetim paneli, tüm yakalanan probe’ları, o belirli SSID için anında Evil Twin başlatan bir Klonla butonuyla gösterir.

BLE Spam

Artemisz ayrıca yakındaki cihazlarda eşleştirme açılır pencerelerini tetiklemek için Bluetooth Low Energy reklamları gönderebilir:

Mod Hedef Teknik
Sour Apple iOS/macOS AirDrop aksiyon kodlarıyla Apple üretici IE’si (0x4C00)
Swiftpair Windows Sahte cihaz adlarıyla Microsoft eşleştirme servis UUID’si (0xFE2C)
Samsung Samsung Galaxy Model ID’leriyle Samsung üretici IE’si (0xFF75)

Her mod, rastgele cihaz adresleri ve yükleriyle her 100ms’de 3 BLE reklam kanalının tamamında yayın yapar. BLE yığını isteğe bağlı olarak başlatılır ve sorunsuz şekilde WiFi ile birlikte çalışır — ESP32’nin radyosu eşzamanlı WiFi + BLE destekler.

Üç Arayüz

TFT Ekran

170×320 ST7789 ekran canlı bir gösterge paneli gösterir: çalışma süresi, ağ sayısı, hedef bilgisi, saldırı durumu, renk kodlamalı RSSI (yeşil/sarı/kırmızı) ve buton açıklaması. Kimlik bilgileri Yukarı/Aşağı butonlarıyla kaydırılır.

Ekran Ekran Ekran

Web Yönetim Paneli

Artemisz AP’sine bağlanın ve 192.168.4.1/admin adresine gidin (HTTP Basic Auth: admin / artemisz1337). Panel tam kontrol sağlar:

  • SSID, BSSID, kanal, sinyal gücü ve seçim butonlarıyla ağ tarayıcı
  • 14 modun tamamı için saldırı kontrolleri
  • Probe başına Klonla butonuyla Karma probe tablosu
  • PCAP/HCCAPX indirme ile handshake yakalama tablosu
  • Hex dump ile PMKID gösterimi
  • Doğrulanmış/başarısız durumuyla kimlik bilgisi günlüğü

HTML, yanıtın tamamını RAM’de oluşturmamak için chunked Transfer-Encoding ile render edilir — ESP32 aynı anda WiFi AP, promiscuous sniffer, DNS sunucusu ve deauth döngüleri çalıştırırken kritik önem taşır.

Web yönetim — tarayıcı ve saldırı kontrolleri

Web yönetim — gelişmiş saldırılar, BLE, Karma

Web yönetim — yakalanan kimlik bilgileri

Seri CLI

115200 baud’da help yazarak tüm komutları görebilirsiniz. Web panelinin yapabildiği her şey seri üzerinden mevcuttur: scan, select, deauth, eviltwin, karma, nuke, csa, beacon, blespam, status, creds ve daha fazlası.

Bellek Yönetimi

ESP32’nin 320KB SRAM’ı var. WiFi (AP + STA), promiscuous mod, DNS, HTTP ve isteğe bağlı BLE hepsi çalışırken, boş heap tehlikeli seviyelere düşer. Artemisz’in hayatta kalma yöntemleri:

Chunked HTTP yanıtları — RAM’de tam bir HTML dizesi oluşturmak yerine, yönetim paneli her tablo satırını webServer.sendContent() kullanarak ayrı ayrı aktarır.

Flash’ta saklanan şablonlar — statik HTML/CSS, raw string literal’leriyle const char[] kullanılarak flash’ta saklanır, heap’ten tamamen uzak tutulur.

Sniffer için IRAM — promiscuous callback, saniyede ~100+ çağrı aldığında cache miss’lerini önlemek için dahili yüksek hızlı RAM’den çalışmak üzere IRAM_ATTR ile işaretlenir.

Sabit boyutlu dairesel buffer’lar — sinyal monitörü, büyümek yerine eski verilerin üzerine yazan 170 byte’lık bir ring buffer kullanır.

TX buffer hız kontrolüesp_wifi_80211_tx() frame’leri ~16 frame’lik bir donanım FIFO’suna kuyruğa alır. Radyonun iletebileceğinden daha hızlı göndermek ESP_ERR_NO_MEM‘e neden olur. 5 frame’lik patlamalarla 100ms deauth aralığı kuyruğu ~2-3 frame’de tutar.

Platform Kısıtlamaları

Bu proje espressif32@6.7.0 (Arduino Core 2.0.x / ESP-IDF 4.4) ile sabitlenmiştir. Arduino Core 3.x (ESP-IDF 5.x) ieee80211_raw_frame_sanity_check override’ını engeller ve raw yönetim frame’i injection’ını imkansız kılar. platformio.ini‘deki versiyon sabitleme bunu otomatik olarak halleder.

Derleme

  1. PlatformIO kurun
  2. Repoyu klonlayın: git clone https://github.com/ssnrshnn/artemisz.git
  3. Derleyin ve yükleyin: pio run -t upload
  4. Seri monitörü açın: pio device monitor

platformio.ini tüm TFT_eSPI yapılandırmasını build flag’leri olarak içerir — kütüphane klasöründe manuel olarak User_Setup.h düzenlemeye gerek yoktur.