sudo ile çalıştırınca port taraması neden değişir
Ham soketler kullanılamadığında Nmap, SYN taramasını sessizce TCP connect taramasıyla değiştirir; bu yüzden root ve normal kullanıcı farklı yolları ölçer.
Nmap her zaman istediğinizi düşündüğünüz paketi göndermez. Ham soketler kullanılamadığında, varsayılan SYN taramasını TCP connect taramasıyla değiştirir; bu yüzden normal kullanıcı olarak çalıştırma ile sudo altında çalıştırma aynı port hakkında farklı soruları yanıtlayabilir. Sonuçlar bir izin sorunu gibi görünür, oysa genellikle bir yöntem değişikliğidir. Yöntemi açık hale getirmek, iki çalıştırmayı karşılaştırmanın tek yoludur.
İki sonda, tek port, farklı kod yolları
SYN taraması TCP başlığını kendisi oluşturur, ham soketten gönderir ve çekirdeğin TCP yığını tamamlanmış bir bağlantıyı kaydetmeden önce yanıtı ağdan okur. connect taraması işletim sisteminden sıradan bir soket açmasını ister ve connect() ne döndürürse onu bildirir. İkisi de bir portu açık diye adlandırabilir, ama yalnızca biri yarı açık bir deneme bırakır ve yalnızca biri gönderen sürece bağlı soket düzeyi politikaya tabidir.
Ham yol CAP_NET_RAW gerektirir, bu yüzden bu yetenek yokken varsayılan tarama sessizce zayıflar. Nmap’in kendi tarama teknikleri başvurusu bu değişimi belgeler: connect taraması yedektir çünkü hiçbir özel yetki gerektirmez. Değişim çoğu çalıştırmada uyarı olmadan gerçekleşir ve onu yanlış okumayı bu kadar kolay yapan da budur. Yedeğin var olduğunu bildiğinizde, “root olarak açık, kullanıcı olarak kapalı” artık bir izin hatası gibi kulağa gelmez ve iki farklı ölçüm gibi gelmeye başlar.
sudo taramada gerçekte neyi değiştirir
Yetkileri yükseltmek ham soket yolunu geri getirir ve bu, karardan fazlasını değiştirir. Kaynak port seçimi, paket zamanlaması, yeniden gönderme davranışı ve filtrelenmiş bir yanıtın sınıflandırılma biçimi hepsi farklı koddan gelir. SYN hızını sınırlayan bir ara kutu, hedef ana makine aynı olsa bile iki çalıştırmaya eşit olmayan biçimde davranır.
Hedef taraftaki günlükleme de farklıdır. Tamamlanmış bir el sıkışma hizmete ve herhangi bir soket muhasebesine görünür, oysa sıfırlanmış yarı açık bir sonda çoğu zaman görünmez. Günlüklerini de okuduğunuz bir ana makineye karşı çalıştırmaları karşılaştırırsanız, gördüğünüz farkın bir kısmı gözlemin kendisidir.
Yöntemi iki çalıştırmada sabit tutun
İki çağrıda da aynı tekniği zorlayın ve karşılaştırma bir anlam kazanmaya başlar. -sT bayrağı connect taramasını açıkça ister, -Pn ana makine keşfini kaldırır, -n ad çözümlemesini kaldırır ve tek bir -p port listesi farklarını kaldırır.
nmap -sT -Pn -n -p 8443 198.51.100.77
sudo nmap -sT -Pn -n -p 8443 198.51.100.77
Adresi ve portu, test etme izniniz olan bir ana makineyle değiştirin; yukarıdaki belge aralığı bir örnektir, hedef değildir. İki çalıştırma artık uyuşuyorsa, asıl fark tarama yönteminden geliyordu. Hâlâ uyuşmuyorlarsa trafiği başka bir şey sınıflandırıyor ve bir sonraki bölüm bakılacak yerdir.
Hesap bağlamı yalnızca bir yetki bayrağı değildir
Bir VPN dağıtımı paketleri UID’ye, cgroup’a veya soketi açan sürece bağlı bir kurala göre sınıflandırabilir. O zaman root trafiği ile kullanıcı trafiği farklı yönlendirme tablolarından çıkar ya da farklı kural kümelerine çarpar ve hiçbir tarama yöntemi disiplini onları uzlaştıramaz.
Yetkiyi değil politikayı inceleyin. Linux’ta nftables bunu meta skuid ile, iptables ise sahip eşleşmesiyle ifade eder ve her ikisi de bir UID’yi tünele gönderebilirken diğeri fiziksel varsayılan rotayı kullanmaya devam eder.
sudo nft list ruleset | grep -n skuid
sudo iptables-save | grep -n uid-owner
ip rule show
ip route get 198.51.100.77
Sonuçları karşılaştırmadan önce sondanın kendisini doğrulayın
Sonuç çıkarmadan önce hangi sondanın çalıştığını kanıtlayın. Nmap tekniği kendi çıktısında adlandırır ve --reason her durumun arkasındaki kanıtı ekler; el sıkışmanın gerçekten tamamlanıp tamamlanmadığını söyleyen kısım budur.
nmap --reason -sT -Pn -n -p 8443 198.51.100.77
sudo nmap --reason -sS -Pn -n -p 8443 198.51.100.77
getcap "$(command -v nmap)"
capsh --print | grep -i net_raw
Aynı durumu farklı nedenlerle bildiren iki çalıştırma çelişki değildir ve farklı durumları aynı nedenle bildiren iki çalıştırma taramaya değil yönlendirmeye veya politikaya işaret eder. Hedefi, portu, ad alanını ve zamanlamayı aynı tutun, sonra her seferinde bir değişkeni değiştirin. Hizmeti root olarak çalıştırmak politika uyuşmazlığının onarımı değildir; amaçlanan politikayı hizmetin sahibi aracılığıyla ifade etmek onarımdır.