Herhangi bir bilgisayar kullanıcısının öğrendiği ilk düşük seviyeli ağ araçlarından biri saygıdeğerdir. ping
Yarar.
Adını, denizaltıların yer aldığı eski usul savaş filmlerinin her sahnesindeki aynı ses efektinden alan komut, RADAR'ın SONAR olarak bilinen sualtı versiyonunun mecazi bir yankısıdır (orada ne yaptığımıza bakın?).
Bir ping gönderirsiniz (daha çok bir doinnnng sesi gibi, gerçeklik) tuzlu derinliklere ve ürkütücü yankısının size geri dönmesinin ne kadar sürdüğünü ölçerek ve çevredeki okyanustaki sesin hızını tahmin ederek, yankıyı üreten nesneye olan mesafeyi hesaplayabilirsiniz.
Şaşırtıcı bir şekilde, TCP/IP kısaltmasının internete güç sağlayan protokol yapıştırıcısının genel bir tanımı olarak kullanıldığını muhtemelen duymuşsunuzdur. ping
teknik olarak hiç TCP/IP kullanmaz.
Aslında, TCP/IP kısaltmasıdır. internet protokolü üzerinden iletim kontrol protokolü, ve internet üzerinden veri göndermek için oldukça yüksek seviyeli bir mekanizmayı ifade eder, öyle ki ağın kendisi pek çok "bu gerçekten düzgün çalıştı mı?" senin için çaba.
Örneğin, TCP bağlantılarında, gönderdiğiniz herhangi bir veri parçasının ya diğer uca bozulmadan ulaşması ya da bir hataya neden olması garanti edilir, böylece başarmadıklarını bilirsiniz.
Ayrıca, farklı veri yığınları internet üzerinde farklı rotalar izlese bile (örneğin, yük dengeleme, geçici kesintiler veya diğer kurtarılabilir hatalar nedeniyle) ve bazı parçaların ulaşması diğerlerinden daha uzun sürse bile, TCP verileri doğru bir şekilde ara belleğe alınır. yukarı ve diğer uçta doğru sırayla sunulur.
ping farklıdır
The ping
komutu, bununla birlikte, genellikle ilgilendiğiniz bir bilgisayarın çevrimiçi olup olmadığını doğrulamak için kullanılır, özellikle de e-posta almak veya SSH oturumlarına izin vermek gibi beklediğiniz türden üst düzey TCP bağlantılarını kabul etmiyorsa.
Bu, bir kesintinin ağdan mı yoksa sunucunun kendisinin kapanmasından mı yoksa o sunucuda çalışan bireysel hizmetlerin düzgün başlatılamamasından mı kaynaklandığını hızlı bir şekilde belirlemenize yardımcı olur.
Sonuç olarak, ping
TCP'den çok daha düşük seviyeli bir protokol kullanır.
Aslında, ping
TCP'nin daha sıradan kuzeni UDP'yi bile kullanmaz, kısacası Kullanıcı Datagram ProtokolüBu, veri yığınlarını hızlı ve kolay bir şekilde iletmenin bir yoludur, ancak popüler olarak gönder ve umut et (veya alaycı biriyseniz, püskürt ve dua et) olarak adlandırılır.
UDP'nin kendisi, verilerinizin karşı uca ulaşıp ulaşmadığını size bildirmez ve sağlam gelse bile UDP, paketlerinizin orijinal olarak gönderilme sırasını takip etmez, bu nedenle onları yeniden düzenleyemez. sıra dışı gelirlerse diğer uç.
Ping
, ne pahasına olursa olsun, ICMP olarak bilinen sorun giderme ve ağ yeniden yapılandırma amaçları için özel olarak tasarlanmış çok düşük düzeyli bir protokol kullanır veya internet kontrol mesaj protokolü.
Tipik olarak doğrudan işletim sistemi çekirdeğinde işlenir, böylece ICMP/IP paketlerinin hiçbir üst düzey ağ yazılımı doğru şekilde gelmese bile geçmesi neredeyse kesindir, ICMP özellikle iki özel mesaj türü içerir:
- 0x08 yazın. Resmen aradı
ICMP Echo
, bu bir çeşit paket genellikle Yankı İsteği olarak adlandırılır. bu neping
program, ağdaki aktif bilgisayarları araştırmak için gönderir. - 0x00 yazın. Resmen aradı
ICMP Echo Reply
, bu paket türü tam olarak ne diyor. Canlı, çevrimiçi ve ICMP Yankı trafiğini engelleyecek şekilde yapılandırılmamış bir bilgisayarın bu tür paketleri doğrudan onu isteyen bilgisayara geri göndermesi gerekir.
Bunun gibi:
$ ping -c 3 -p 4E414B45445345435552495459 nakedsecurity.sophos.com PATTERN: 0x4e414b45445345435552495459 PING news-sophos.go-vip.net (192.0.66.227) 56(84) bytes of data. 64 bytes from 192.0.66.227 (192.0.66.227): icmp_seq=1 ttl=53 time=84.0 ms 64 bytes from 192.0.66.227 (192.0.66.227): icmp_seq=2 ttl=53 time=85.1 ms 64 bytes from 192.0.66.227 (192.0.66.227): icmp_seq=3 ttl=53 time=84.8 ms --- news-sophos.go-vip.net ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 84.025/84.644/85.062/0.446 ms
Görmek için ping
biraz daha düşük seviyede çalışırken, kendi ICMP Echo paketimizi oluşturmak ve varsa gelen yanıtı okumak için makalenin sonunda bulabileceğiniz Lua kodunu kullanacağız:
$ sudo luax ping.lua nakedsecurity.sophos.com Sending ICMP ECHO request to 192.0.66.227 --> 00000000 08 00 03 02 bb 5a 6f 1d 50 69 6e 67 52 65 71 75 |.....Zo.PingRequ| 00000010 65 73 74 4d 65 73 73 61 67 65 20 42 42 35 41 36 |estMessage BB5A6| 00000020 46 31 44 |F1D | Got back--> 00000000 45 00 00 37 f6 af 00 00 35 01 94 7f c0 00 42 e3 |E..7....5.....B.| 00000010 XX XX XX XX 00 00 0b 02 bb 5a 6f 1d 50 69 6e 67 |.........Zo.Ping| 00000020 52 65 71 75 65 73 74 4d 65 73 73 61 67 65 20 42 |RequestMessage B| 00000030 42 35 41 36 46 31 44 |B5A6F1D |
Bu arada, kullanmamız gerekiyordu sudo
Komut dosyamızı süper kullanıcı ayrıcalıklarıyla çalıştırmak için yukarıdaki ham IP soketi – TCP, UDP ve burada gerektiği gibi ICMP dahil olmak üzere istediğimiz herhangi bir temel formatta üretilebilen bir format.
Birçok Linux/Unix sisteminde, ping
Dağıtımınız tarafından sağlanan komut, genellikle özel güvenlik yetenekleriyle veya özel güvenlik özellikleriyle yüklendiğinden, açıkça kök ayrıcalıkları verilmeden çalışır. setuid
bayrak seti, yani onu çalıştıran kullanıcıdan farklı bir kullanıcı hesabı altında çalışmaya başlar.
İyi tasarlanmış ping
programlar, ihtiyaç duydukları ham soketi açtıktan sonra, elbette, ekstra ayrıcalıklarını otomatik olarak atacaktır.
Kısa olması adına bu ayrıcalık düşürücü kodu örnek betiğimizden çıkardık. kullanabilirsiniz posix.unistd.setpid()
soketi oluşturduktan sonra, ancak herhangi bir veri göndermeden veya almadan önce ayrıcalıksız bir hesaba geçme işlevi.
Cevabı incelemek
Yukarıdaki betiğimizden veri dökümünde fark edebileceğiniz gibi, yanıt veren sunucudan verileri geri okumak için kullandığımız ağ soketi işlevi yalnızca ICMP Echo Reply verilerini değil, aynı zamanda düşük seviyeli IP'yi (internet protokol başlıkları) da içerir. temel pakette.
Bu verileri ayrıştırmayı veya başka bir şekilde işlemeyi denemedik, ancak FreeBSD ping
programın, geri gelen herhangi bir hata mesajını anlamlandırmak da dahil olmak üzere yanıtı anlamlandırmak için bunu yapması gerekir.
Eğer ping
bir şekilde reddedilirse, Yankı Yanıtı tipik olarak yalnızca kendi IP başlıklarını (yukarıda görüldüğü gibi) değil, aynı zamanda orijinal giden istekte görünen IP başlıklarının ve ICMP verilerinin bir referans kopyasını da içerecektir.
IPv4 paket başlıkları genellikle yukarıda gördüğünüz gibi görünür, IP başlıklarının başladığı yer 45 00 00 37...
ve şekilde gösterilen baytlara kadar ve dahil olmak üzere toplamda 20 bayt boyunca devam edin. ...XX XX XX XX
, dizüstü bilgisayarımın IP adresi.
Bunun gibi:
00000000 45 00 00 37 f6 af 00 00 35 01 94 7f c0 00 42 e3 |E..7....5.....B.| 00000010 XX XX XX XX |.... | IP version and header length: 0x45 (4 = IPv4, 5 = five 32-bit words, i.e. 20 bytes Service type and congestion data: 0x00 Total length of packet: 0x0037 (decimal 55) Sequence information: F6 AF 00 00 Time-to-live (hops left): 0x35 (decimal 53) Protocol type: 0x01 (ICMP) Checksum: 0x947F (decimal 38015) Sending computer's IP number: C0 00 42 E3 (192.0.66.227 = nakedsecurity.sophos.com) Recipient's IP (my laptop): XX XX XX XX (REDACTED = my own IP number)
FreeBSD'ler ping
Görünüşe göre programcılar, bu türden başlıkların, ilk bayttaki başlık uzunluğu değerine bağlı olarak, gerçekten de her zaman tam olarak 20 bayt uzunluğunda olacağını varsaydılar. 0x45
, IPv4'ü (0x4?
) 5-DWORD ile (0x?5
) veya 20 baytlık başlık.
Endişelenecek sadece 20 bayt ile programcılar, yanıtta IP üstbilgilerinin bir kopyasını ve işlenecek bir hata durumu varsa orijinal istekteki tüm gömülü IP üstbilgilerini tutabilecekleri yığında sabit boyutlu arabellekler ayırdı. .
Bunun nereye varacağını tahmin edebilirsiniz.
IPv4 başlığındaki bu ilk bayt yasal olarak herhangi bir değere sahip olabilir. 0x45
(gösterildiği gibi minimum başlık boyutu 5 DWORD veya 20 bayt) 0x4F
(15 DWORD'u belirtir, çünkü 0xF ondalık 15 veya toplamda 60 bayt başlık verisidir), böylece isteğe bağlı fazladan 40 bayt başlık verisine düzgün bir şekilde izin verilir.
Bu nadir, ancak yasal, ekstra başlık baytları, aşağıdakiler gibi ilginç adlara sahip çeşitli korkak ve sıra dışı "özellikler" için kullanılabilir: Seçici Yönlendirmeli Yayın, Deneysel Akış Kontrolü ve Yukarı Akış Çok Noktaya Yayın Paketi – adını duyduğumuz ama bilerek kullanmadığımız, hatta görmediğimiz şeyler.
Sizi teste tabi tutan siber suçlulara dikkat edin
Tahmin edebileceğiniz gibi, bu ekstra alanların neredeyse hiç kullanılmadığı göz önüne alındığında, IPv4 paketinden başka bir şeyle asla göremeyebilirsiniz. 0x45
sizi test etmeye hazır bir grup siber suçluyla karşılaşmadığınız sürece, başlangıçta ve toplamda 20 baytlık başlık verisiyle.
Ne yazık ki, bir saldırganın FreeBSD kullanıp kullanmadığınızı tahmin eden bir sunucuyu donatmasını engelleyecek pek bir şey yoktur ve kasıtlı olarak büyük boyutlu ICMP/IP Echo Reply paketleri oluşturur. yığın arabellek taşması senin içinde ping
programı.
Sunucularının aktif olup olmadığını kontrol ettiğinizde (hatta veya belki de özellikle şüpheli olduğunu düşünüyorsanız!), bubi tuzaklı bir yanıtın hedefi olabilirsiniz.
en iyi ihtimalle, senin ping
program çökecek; en kötü ihtimalle, FreeBSD güvenlik danışma belgesinin cömertçe kabul ettiği gibi, "kötü niyetli bir ana bilgisayarın ping'de uzaktan kod yürütmeyi tetiklemesi mümkün olabilir."
Neyse ki, FreeBSD yazarlarının da işaret etmek, "[t]ping işlemi, FreeBSD'nin etkilenen tüm sürümlerinde bir yetenek modu sanal alanında çalışır ve bu nedenle, hatanın ortaya çıkabileceği noktada sistemin geri kalanıyla nasıl etkileşime girebileceği konusunda çok kısıtlıdır."
Başka bir deyişle, kesinlikle yama yapmanız gerekir, ancak riskler mütevazı sayılabilir.
Özellikle, ping
program yalnızca bir sanal alanda kilitli değil, aynı zamanda güvenlik danışma belgesinde onaylandığı gibi hatalı koda ulaşıldığında kök olarak çalışmıyor: "Ne zaman ping
çalışır, işini yapmak için gereken ham soketi oluşturur ve ardından yükseltilmiş ayrıcalıklarını iptal eder.”
Yukarıda açıklandığı gibi, süper kullanıcı yetkileri yalnızca işletim sisteminden ham bir IP soketi almak için gereklidir; sendto()
ve recvfrom()
daha sonra bu sokette çalışır.
Bu hataya resmi tanımlayıcı verildi CVE-2022-23093; güvenlik danışma belgesinde belgelenmiştir ÜcretsizBSD-SA-22:15.ping.
Ne yapalım?
- FreeBSD kullanıcısıysanız, etkilenen sürümleri (FreeBSD 12 ve FreeBSD 13) bu hatanın düzeltildiği en son sürümlerine güncellemeniz yeterlidir.
- Bir ağ programcısıysanız, olağandışı boyut varyasyonlarını gösterebilecek paket başlıklarını hesaba kattığınızdan her zaman emin olun. Daha önce hiç varyasyon görmemiş olmanız, yarın sıra dışı ama tamamen yasal bir paketle karşılaşmanızı engellemez.
- Bir ağ yöneticisiyseniz, 4 bayt boyutunda olmayan IP başlıklarına sahip IPv20 paketlerini engellemeyi düşünün. Bazı yazılım ürünlerinin alışılmadık IPv4 başlık seçeneklerini kullanmasına gerçekten izin vermeniz gerekiyorsa, nedenini öğrenmek için bu olağandışı paketleri günlüğe kaydetmeyi düşünün.
Orada dikkatli ol!
PING TRAFİĞİNİ GÖSTERMEK İÇİN ÖRNEK KOD
- blockchain
- arabellek taşması
- zeka
- cryptocurrency cüzdanlar
- kripto değişimi
- siber güvenlik
- siber suçluların
- Siber güvenlik
- iç güvenlik bakanlığı
- dijital cüzdanlar
- güvenlik duvarı
- freebsd
- ICMP
- Kaspersky
- kötü amaçlı yazılım
- Mcafee
- Çıplak Güvenlik
- NexBLOC
- ping
- Platon
- plato yapay zekası
- Plato Veri Zekası
- Plato Oyunu
- PlatoVeri
- plato oyunu
- VPN
- güvenlik açığı
- web sitesi güvenliği
- zefirnet