SIM Swap Attacks: Complete Guide to Account Takeover

Blacksec

Administrator
Staff member
πŸ” SIM Swap Attacks: Complete Guide to Account Takeover πŸ“±


> Posted by: sim_swapper | Rank: Senior Member | Joined: 2023 [/I]



This guide covers SIM swap attack vectors for defensive research.

SIM swapping is one of the most effective account takeover methods.

By porting a victim's phone number to your SIM, you can bypass SMS-based 2FA and take over accounts. Here's the complete breakdown.

---

━━━ RECON PHASE ━━━[/B]

Information Gathering:
Code:
# Phone number format analysis
+1 (555) 123-4567 = US format
+44 7911 123456 = UK format

# Carrier lookup
β€’ IMEI.info - Device info by IMEI
β€’ SIMswap.pro - Carrier identification
β€’ Carrier lookup databases

# Social engineering targets
β€’ Victim's carrier (check through support chats)
β€’ Carrier employee contacts
β€’ Store locations near victim

---

━━━ SIM SWAP METHODS ━━━


Method 1: Social Engineering Carrier Support
Code:
Script:
"Hi, I'm having issues with my phone. I lost it yesterday 
and need to transfer my number to a new SIM. Can you help 
me with the verification?"

Required Info:
β€’ Full name (matching carrier records)
β€’ Account PIN/password
β€’ Last 4 of SSN
β€’ Date of birth
β€’ Address on file

Red Flags to Avoid:
β€’ Don't ask for too much info at once
β€’ Don't sound like you're reading from a script
β€’ Have a plausible story ready

Method 2: Store Visit (Insider-Assisted)
Code:
# Find carrier store locations
β€’ Google Maps search
β€’ Carrier store locators

# What you need:
β€’ Government ID (fake or borrowed)
β€’ Knowledge of account details
β€’ Cash for SIM cost ($10-20)

# Process:
1. Visit store with ID matching victim's name
2. Request SIM replacement
3. Provide account verification info
4. Get new SIM with victim's number

Method 3: Port-Out Attack
Code:
# Some carriers allow number porting to new carriers
# This is harder but more reliable

# Requirements:
β€’ Account number from carrier
β€’ PIN or PUK code
β€’ Billing info verification

# Carriers with weaker porting security:
β€’ Regional/Prepaid carriers
β€’ Smaller MVNOs
β€’ International carriers

---

━━━ ACCOUNT TAKEOVER FLOW ━━━


Code:
Phase 1: SIM Swap Complete
β”œβ”€β”€ Victim loses SMS/call reception
β”œβ”€β”€ Your device receives all SMS/calls
└── Carrier confirms port complete

Phase 2: Account Discovery
β”œβ”€β”€ Search email for SMS-based 2FA services
β”œβ”€β”€ Check common platforms:
β”‚   β€’ Gmail/Google Accounts
β”‚   β€’ Facebook
β”‚   β€’ Twitter/X
β”‚   β€’ Instagram
β”‚   β€’ PayPal
β”‚   β€’ Crypto exchanges
β”‚   β€’ Banking apps
└── Document all targets

Phase 3: Password Reset Abuse
β”œβ”€β”€ Use "Forgot Password" on each service
β”œβ”€β”€ Reset to new email you control
β”œβ”€β”€ Bypass SMS 2FA (you have the number)
└── Access account

Phase 4: Account Control
β”œβ”€β”€ Change recovery email
β”œβ”€β”€ Disable 2FA
β”œβ”€β”€ Add your own 2FA methods
└── Monitor for victim detection

---

━━━ DEFENSE MEASURES ━━━


How to Protect Yourself:
Code:
1. Use Authenticator Apps
   β€’ Google Authenticator
   β€’ Authy
   β€’ 1Password
   β€’ NOT SMS-based 2FA

2. Set Carrier PINs
   β€’ AT&T: Account PIN
   β€’ Verizon: Security PIN
   β€’ T-Mobile: Passcode
   β€’ Prevents unauthorized SIM swaps

3. Enable App-Based 2FA
   β€’ Hardware keys (YubiKey)
   β€’ TOTP apps
   β€’ WebAuthn

4. Monitor Your Number
   β€’ Watch for unexpected SMS about SIM changes
   β€’ Check carrier app for port status
   β€’ Report suspicious activity immediately

5. Use Email-Based Recovery
   β€’ Set email as primary recovery
   β€’ Disable SMS recovery where possible

---

━━━ TOOLS & SCRIPTS ━━━


Carrier Lookup Script:
Code:
#!/usr/bin/env python3
"""
Carrier Lookup & SIM Swap Recon Tool
"""
import requests
import json
import re

class SIMRecon:
    def __init__(self):
        self.carrier_db = self.load_carriers()
        
    def load_carriers(self):
        """Load carrier database"""
        return {
            "us": {
                "major": ["AT&T", "Verizon", "T-Mobile", "Sprint"],
                "prepaid": ["Metro", "Boost", "Cricket", "Straight Talk"],
                "mvno": ["Google Fi", "Visible", "Mint", "US Mobile"]
            },
            "uk": {
                "major": ["EE", "O2", "Vodafone", "Three"],
                "prepaid": ["giffgaff", "Lyca", "Tesco Mobile"]
            }
        }
    
    def lookup_carrier(self, phone_number):
        """Determine carrier from phone number"""
        # Extract country code
        if phone_number.startswith('+1'):
            country = 'us'
            number = phone_number[2:]
        elif phone_number.startswith('+44'):
            country = 'uk'
            number = phone_number[3:]
        else:
            return {"error": "Unsupported country code"}
        
        # Carrier lookup by prefix
        prefixes = {
            "us": {
                "201": "Verizon", "202": "AT&T", "203": "T-Mobile",
                "212": "Verizon", "213": "AT&T", "214": "T-Mobile",
                "215": "Verizon", "216": "AT&T", "217": "T-Mobile",
            }
        }
        
        prefix = number[:3]
        carrier = prefixes.get(country, {}).get(prefix, "Unknown")
        
        return {
            "phone": phone_number,
            "country": country,
            "carrier": carrier,
            "prepaid": carrier in ["Metro", "Boost", "Cricket"]
        }
    
    def check_sms_2fa_risk(self, email):
        """Check if email likely uses SMS 2FA"""
        risk_services = []
        
        # Common services that use SMS 2FA
        services = [
            "gmail.com", "facebook.com", "twitter.com",
            "instagram.com", "paypal.com", "coinbase.com",
            "binance.com", "kraken.com"
        ]
        
        for service in services:
            if service in email:
                risk_services.append(service)
        
        return {
            "email": email,
            "risk_level": "high" if len(risk_services) > 3 else "medium",
            "services_at_risk": risk_services
        }

if __name__ == "__main__":
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--phone', help='Phone number to lookup')
    parser.add_argument('--email', help='Email to check 2FA risk')
    args = parser.parse_args()
    
    recon = SIMRecon()
    
    if args.phone:
        result = recon.lookup_carrier(args.phone)
        print(json.dumps(result, indent=2))
    
    if args.email:
        result = recon.check_sms_2fa_risk(args.email)
        print(json.dumps(result, indent=2))

---

━━━ LEGAL & ETHICAL CONSIDERATIONS ━━━


Code:
⚠️ IMPORTANT:
β€’ SIM swapping without authorization is ILLEGAL
β€’ Penalties include felony charges and imprisonment
β€’ This guide is for EDUCATIONAL purposes only
β€’ Always obtain written authorization before testing
β€’ Report vulnerabilities responsibly

---

━━━ TL;DR ━━━


Code:
βœ… SIM swaps exploit weak carrier security
βœ… Social engineering is the primary vector
βœ… SMS 2FA is NOT secure
βœ… Use authenticator apps instead
βœ… Set carrier PINs to prevent swaps

---

Questions? Drop 'em below.
Next: Checkout automation techniques.

Last edited by sim_swapper; 1 hour ago.



[SIG]━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
sim_swapper | Senior Member | Account Takeover Specialist
⚑ "The phone is the new security key" ⚑
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[/SIG]
[/b][/b][/b][/b][/b][/b]
 
Top