SSRF Korumasında Hostname ve IP Doğrulaması Yöntemleri

0 Ответы 3 Просмотры
·
Участники
Автор темы #1
Giriş ve Temel İlkeler
Sunucu tarafı istekleri yönetirken SSRF (Server-Side Request Forgery) saldırılarına karşı alınacak önlemler kritik öneme sahiptir. Bu saldırılar, saldırganların kötü niyetli URL'ler aracılığıyla iç ağ kaynaklarına veya hassas servislere erişim sağlamasına olanak tanır. Bu yüzden, hostname ve IP doğrulaması, güvenilirlik ve erişim kontrolü açısından temel güvenlik önlemleridir.

Hostname Doğrulaması ve Güvenlik Kısıtlamaları
İlk adım olarak, kullanıcıdan gelen hostname bilgilerinin, sadece izin verilen alan adları veya domainler ile eşleştiğinden emin olmak gerekir. Bu, genellikle şu şekilde yapılır:
  • DNS çözümleme: Kullanıcıdan alınan hostname'in DNS sorgusunu gerçekleştirerek IP adresini alırsınız. Bu aşamada, DNS yanıtını dikkatle inceleyerek, yanıtın beklenen alan adından geldiğinden emin olmalısınız.
  • Sadece belirli alan adları: Güvenlik açısından, erişime izin verilen alan adlarını bir liste halinde tutup, hostname'in bu listede olup olmadığını kontrol edebilirsiniz.

    Örneğin:
    КОД
    1234567891011121314  
    allowed_hosts = ['api.example.com', 'internal.service.local']  
      
    def is_allowed_hostname(hostname):  
        return hostname in allowed_hosts  
      
    def resolve_hostname(hostname):  
        # DNS çözümleme işlemi  
        ip_addresses = socket.gethostbyname_ex(hostname)[2]  
        return ip_addresses  
      
    if is_allowed_hostname(user_input_hostname):  
        ip_list = resolve_hostname(user_input_hostname)  
        # ip doğrulaması devam eder  
    


    IP Adresi ve Ağ Doğrulaması
    İkinci aşama, DNS çözümlemesi sonrası alınan IP adreslerinin, iç veya dış ağa ait olup olmadığını doğrulamaktır. Bu noktada, IP'lerin belirli IP bloklarıyla karşılaştırılması gereklidir.
  • İç ağ IP'leri: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 gibi özel IP blokları ile eşleştirilir.
  • Dış IP'ler: Güvenilir dış IP'ler veya belirli IP aralıklarıyla sınırlandırılır.

    Örnek:
    [code]
    def is_private_ip(ip):
    private_ranges = [
    ('10.0.0.0', '10.255.255.255'),
    ('172.16.0.0', '172.31.255.255'),
    ('192.168.0.0', '192.168.255.255')
    ]

    ip_int = int(ipaddress.IPv4Address(ip))

    for start, end in private_ranges:
    if ip_int >= int(ipaddress.IPv4Address(start)) and ip_int
  • Чтобы ответить, необходимо войти в систему.

    0 цитат выбрано