Kodax

التصيد الاحتيالي (Phishing) — أساسيات الأمن السيبراني

التصيد الاحتيالي (Phishing)

ما هو Phishing؟

محاولة خداع لسرقة معلومات حساسة.

أنواع Phishing

📧 Email Phishing

رسائل تتنكر كجهات موثوقة.

🎯 Spear Phishing

هجوم موجه لشخص/منظمة محددة.

🐋 Whaling

استهداف المدراء التنفيذيين.

📱 Smishing

عبر الرسائل النصية.

📞 Vishing

عبر المكالمات الهاتفية.

علامات التحذير

- 🔗 روابط مشبوهة

- ✍️ أخطاء إملائية

- ⚠️ طلب معلومات عاجل

- 📧 عنوان مرسل غريب

- 🎁 عروض "جيدة جداً"

كيف تحمي نفسك؟

- تحقق من المرسل

- لا تضغط روابط مشبوهة

- تحقق من HTTPS

- استخدم 2FA

# كاشف روابط التصيد البسيط
import re
from urllib.parse import urlparse

class PhishingDetector:
    def __init__(self):
        # الكلمات المشبوهة في الروابط
        self.suspicious_keywords = [
            'login', 'signin', 'verify', 'secure',
            'account', 'update', 'confirm', 'banking',
            'paypal', 'amazon', 'apple', 'microsoft',
            'password', 'credential'
        ]
        
        # نطاقات موثوقة (مثال)
        self.trusted_domains = [
            'google.com', 'microsoft.com', 'apple.com',
            'amazon.com', 'paypal.com', 'facebook.com'
        ]
        
        # TLDs مشبوهة
        self.suspicious_tlds = [
            '.tk', '.ml', '.ga', '.cf', '.gq',
            '.xyz', '.top', '.work', '.click'
        ]
    
    def analyze_url(self, url):
        """تحليل URL للكشف عن التصيد"""
        results = {
            "url": url,
            "risk_score": 0,
            "warnings": [],
            "is_suspicious": False
        }
        
        try:
            parsed = urlparse(url)
            domain = parsed.netloc.lower()
            path = parsed.path.lower()
            
            # 1. فحص HTTPS
            if parsed.scheme != 'https':
                results["risk_score"] += 2
                results["warnings"].append("⚠️ لا يستخدم HTTPS")
            
            # 2. فحص طول URL
            if len(url) > 75:
                results["risk_score"] += 1
                results["warnings"].append("⚠️ URL طويل جداً")
            
            # 3. فحص IP بدلاً من نطاق
            if re.match(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', domain):
                results["risk_score"] += 3
                results["warnings"].append("🚨 يستخدم IP بدلاً من نطاق")
            
            # 4. فحص @ في URL
            if '@' in url:
                results["risk_score"] += 3
                results["warnings"].append("🚨 يحتوي @ (محاولة إخفاء)")
            
            # 5. فحص الكلمات المشبوهة
            for keyword in self.suspicious_keywords:
                if keyword in domain and domain not in self.trusted_domains:
                    results["risk_score"] += 2
                    results["warnings"].append(f"⚠️ يحتوي كلمة مشبوهة: {keyword}")
                    break
            
            # 6. فحص TLD مشبوه
            for tld in self.suspicious_tlds:
                if domain.endswith(tld):
                    results["risk_score"] += 2
                    results["warnings"].append(f"⚠️ نطاق TLD مشبوه: {tld}")
                    break
            
            # 7. فحص النطاقات الفرعية الكثيرة
            subdomains = domain.split('.')
            if len(subdomains) > 4:
                results["risk_score"] += 2
                results["warnings"].append("⚠️ نطاقات فرعية كثيرة")
            
            # 8. فحص typosquatting (مثال بسيط)
            typos = {
                'googel': 'google', 'gogle': 'google',
                'microsft': 'microsoft', 'mircosoft': 'microsoft',
                'amzon': 'amazon', 'amazn': 'amazon'
            }
            for typo, correct in typos.items():
                if typo in domain:
                    results["risk_score"] += 4
                    results["warnings"].append(f"🚨 Typosquatting محتمل: {typo} → {correct}")
            
            # التقييم النهائي
            if results["risk_score"] >= 5:
                results["is_suspicious"] = True
                results["verdict"] = "🔴 خطر عالي"
            elif results["risk_score"] >= 3:
                results["is_suspicious"] = True
                results["verdict"] = "🟡 مشبوه"
            else:
                results["verdict"] = "🟢 يبدو آمناً"
                
        except Exception as e:
            results["warnings"].append(f"خطأ في التحليل: {str(e)}")
        
        return results

# اختبار
detector = PhishingDetector()
urls = [
    "https://google.com/search",
    "http://googel-login.tk/verify",
    "http://192.168.1.1/paypal/login",
    "https://secure-banking-update.xyz/account"
]

for url in urls:
    result = detector.analyze_url(url)
    print(f"\n{result['verdict']} - {url}")
    for warning in result['warnings']:
        print(f"  {warning}")
اختبر فهمك