1) IOCs (أمثلة — حدّثوا من مصدر TI)
SHA256 (مثال): af912f6f4bea757de772d22f01dc853fc4d7ab228dc5f7b7eab2a93f64855fbe
IP C2 (مثال): 136.243.146.46 (منفذ 8898)
HTTP header مميز: X-tag يحتوي بيانات Base64 مشفّرة
ملاحظة: القيم أعلاه نموذجية من تقارير أولية — حدّثوا القوائم بقيمكم المحلية من مصدر التهديدات.
2) نص البلاغ (نموذج بريد إلكتروني قصير)
الموضوع: [تنبيه أمني] YiBackdoor — إجراء عاجل مطلوب
الزملاء/الفريق الأمني،
رصدنا أنشطة مرتبطة بـ YiBackdoor (بواب خلفي) قد تؤثر على أنظمتنا. يُطلب من الفريق تنفيذ الإجراءات التالية فوراً:
1) تحديث قواعد EDR/SIEM (مرفق قواعد Sigma وYARA).
2) حظر أي اتصالات إلى IPs/Ports المشبوهة (أمثلة مذكورة أعلاه) حتى التحقق.
3) تشغيل سكربت الفحص التحليلي المرفق وجمع الأدلة لأي مضيف يظهر سلوكاً مشبوهاً.
4) عزل أي مضيف يُظهر اتصالات لـC2 أو دلائل حقن.
الملفات المرفقة: IOCs.csv, sigma_yibackdoor.yml, yara_yibackdoor.yar, hunt_yibackdoor.ps1
للاستفسار/التنسيق:[ sbtanhnbas.blogspot.com ]
3) قاعدة YARA دفاعية (للفحص في مختبر معزول)
rule YiBackdoor_Defensive_Detect
{
meta:
author = "Defensive Team"
date = "2025-09-24"
description = "Defensive YARA rule to flag YiBackdoor-related artifacts (lab use only)."
strings:
$s_xtag = "X-tag" wide ascii
$s_regsvr32 = "regsvr32" ascii wide
$s_svchost = "svchost.exe" ascii wide
$s_appdata = "AppData" ascii wide
$s_triple_des = "3DES" ascii wide
$s_rdtsc = "rdtsc" ascii wide
condition:
(uint16(0) == 0x5A4D and any of ($s_xtag, $s_regsvr32, $s_svchost, $s_appdata))
or (2 of ($s_triple_des, $s_rdtsc, $s_xtag))
}
تشغيل القاعدة: فقط على عينات داخل بيئة معملية معزولة (sandbox). لا تشغّلوا عينات مشبوهة على أنظمة إنتاج.
4) قاعدة Sigma (قابلة للتعديل للـ SIEM/EDR)
title: YiBackdoor — svchost Creation with Injection or HTTP X-tag
id: yi-svchost-injection-2025-09-24
status: stable
description: Detects svchost.exe creation from suspicious parents or with injection indicators; detects outbound HTTP to port 8898 or requests containing header 'X-tag'.
author: Defensive Team
date: 2025-09-24
logsource:
product: windows
service: sysmon
detection:
selection_svchost:
EventID: 1
Image|endswith: '\svchost.exe'
suspicious_parent:
ParentImage|contains:
- '\regsvr32.exe'
- '\powershell.exe'
- '\cmd.exe'
- '\mshta.exe'
- '\wscript.exe'
injection_events:
EventID: [8,10]
network_c2:
EventID: 3
Protocol|contains: 'http'
(DestinationPort: 8898 OR HttpRequestHeader|contains: 'X-tag')
condition: (selection_svchost and suspicious_parent) or (selection_svchost and injection_events) or network_c2
level: high
تعديل الحقول: اضبط أسماء الحقول لتتناسب مع مخططات Sysmon/EDR/Proxy .
5) سكربت PowerShell دفاعي (قراءة فقط — للبحث)
آمن — لا يقوم بتنفيذ أو تغيير ملفات. شغّله على محطة تحقيق أو jump-box بصلاحيات قراءة السجلات.
# hunt_yibackdoor.ps1 — Safe read-only hunting script
function Get-SysmonEvents { param($IdList) try { Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational'; Id=$IdList} -ErrorAction Stop } catch { return @() } }
Write-Output "`n[1/4] svchost.exe creations with suspicious parents..."
$procEvents = Get-SysmonEvents -IdList 1
$svchostMatches = $procEvents | Where-Object {
($_.Properties[1].Value -like '*\svchost.exe') -and ($_.Properties[3].Value -match 'regsvr32|powershell|cmd|mshta|wscript')
}
if ($svchostMatches) {
$svchostMatches | Select TimeCreated,@{n='Image';e={$_.Properties[1].Value}},@{n='ParentImage';e={$_.Properties[3].Value}},@{n='CommandLine';e={$_.Properties[9].Value}} | Format-Table -AutoSize
} else { Write-Output "No suspicious svchost creation events found." }
Write-Output "`n[2/4] Checking for injection indicators (Sysmon EventID 8/10)..."
$inj = Get-SysmonEvents -IdList @(8,10)
if ($inj) { $inj | Select TimeCreated, Id, @{n='Message';e={$_.Message}} | Format-Table -AutoSize } else { Write-Output "No injection-related events found." }
Write-Output "`n[3/4] Checking Run keys for regsvr32 or AppData patterns..."
$runPaths = @('HKLM:\Software\Microsoft\Windows\CurrentVersion\Run','HKCU:\Software\Microsoft\Windows\CurrentVersion\Run')
$foundRun = @()
foreach ($p in $runPaths) {
try {
$props = Get-ItemProperty -Path $p -ErrorAction Stop
foreach ($name in ($props.PSObject.Properties | Where-Object {$_.MemberType -eq 'NoteProperty'} | Select-Object -ExpandProperty Name)) {
$val = $props.$name
if ($val -and $val -match 'regsvr32|%AppData%|AppData') { $foundRun += [PSCustomObject]@{Key=$p;Name=$name;Value=$val} }
}
} catch { }
}
if ($foundRun) { $foundRun | Format-Table -AutoSize } else { Write-Output "No suspicious Run entries found." }
Write-Output "`n[4/4] Network quick-check guidance: search proxy logs/pcaps for dest_port:8898 or HTTP header 'X-tag'. Collect PCAPs for any hits."
6) استعلامات Splunk / ELK سريعة للفحص
Splunk — svchost مع آباء مشبوهين
index=sysmon EventCode=1 Image="*\\svchost.exe"
| where match(ParentImage, "regsvr32.exe|powershell.exe|cmd.exe|mshta.exe|wscript.exe")
| table _time host user Image ParentImage CommandLine
Splunk — HTTP header X-tag أو اتصالات لمنفذ 8898
index=proxy OR index=network http_request_header="*X-tag*" OR dest_port=8898
| stats count by src_ip, dest_ip, dest_port, http_user_agent, http_request_header
7) سيمولاتور شبكي آمن للاختبار (Python)
يرسل طلبات HTTP تحتوي هيدر X-tag مع بيانات Base64 وهمية لاختبار قواعد البروكسي/IDS/SIEM. شغّل فقط داخل مختبر معزول.
#!/usr/bin/env python3
import base64, time, uuid, argparse, requests
def make_xtag_payload(id_label: str):
payload = {"test_id": id_label, "timestamp": int(time.time()), "note": "harmless-sim"}
s = str(payload).encode('utf-8')
return base64.b64encode(s).decode('ascii')
def send_request(target_url: str, rounds: int = 5, delay: float = 1.0):
for i in range(rounds):
test_id = str(uuid.uuid4())
xtag = make_xtag_payload(test_id)
headers = {"User-Agent": "TestAgent/1.0", "X-tag": xtag}
try:
r = requests.get(target_url, headers=headers, timeout=10)
print(f"[{i+1}/{rounds}] Sent to {target_url} status={r.status_code} test_id={test_id}")
except Exception as e:
print(f"[{i+1}/{rounds}] Failed to send to {target_url}: {e}")
time.sleep(delay)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--url","-u",required=True,help="Target URL (lab/proxy endpoint)")
parser.add_argument("--rounds","-n",type=int,default=5)
parser.add_argument("--delay","-d",type=float,default=1.0)
args = parser.parse_args()
send_request(args.url, rounds=args.rounds, delay=args.delay)
شغّل السيمولاتور فقط على عناوين داخلية للاختبار أو عبر نقطة بروكسي مخبرية. لا تُستخدم ضد أنظمة طرف ثالث.