Klaim bahwa paket VPN membawa tepat dua checksum terdengar rapi dan cukup sering salah sehingga layak dibongkar. Jumlahnya bergantung pada versi IP mana yang muncul, protokol transport mana yang dibawa, dan format perlindungan yang dipakai terowongan. Checksum header, checksum lapisan atas, dan tag integritas kriptografis adalah tiga mekanisme dengan tiga cakupan. Menghitungnya dimulai dengan menandai apa yang dicakup masing-masing.

Periksa versi IP mana yang benar-benar ada di kabel

Header IPv4 membawa checksum header 16-bit, dan header IPv6 tidak membawa apa pun semacam itu. Fakta tunggal itu mengubah jumlah untuk setiap terowongan, karena membungkus IPv4 di dalam IPv6 dan IPv6 di dalam IPv4 menghasilkan dokumen yang berbeda. Sebuah terowongan dapat membawa kedua keluarga sekaligus, dan dalam hal itu satu arah dapat memuat bidang yang tidak dimiliki arah lain. Tetapkan versinya sebelum menghitung apa pun.

Tulis tata letaknya sebagai daftar header, bukan gambar. Urutannya penting saat membaca tangkapan, dan ada atau tidaknya bidang checksum adalah hal pertama yang harus ditandai.

outer IPv6 | ESP | inner IPv6 | UDP | application data
outer IPv4 | ESP | inner IPv4 | TCP | application data

Baris pertama tidak memiliki checksum header IP di mana pun dalam header IP-nya, sedangkan baris kedua memiliki dua ketika kedua header adalah IPv4. Teknologi terowongan yang sama, jumlah berbeda, dan tidak ada baris yang merupakan format kabel lengkap.

Periksa apa yang dicakup setiap checksum

Cakupan adalah bagian yang dilewati orang, dan itulah yang membuat sebuah angka bermakna. Checksum header IPv4 melindungi header dan tidak yang lain, jadi tidak mengatakan apa pun tentang muatan di belakangnya. Checksum UDP di atas IPv6 mencakup pseudo-header plus header dan muatan UDP, yang berarti menjangkau ke dalam paket yang dibawa ketika datagram diterowangkan. TCP memiliki checksum sendiri dengan ketergantungan pseudo-header yang serupa. Itu tiga cakupan berbeda meskipun ketiganya disebut checksum.

RFC 791 mendefinisikan pemeriksaan header IPv4 dan penghitungan ulangnya di setiap hop, dan RFC 8200 mendefinisikan perlakuan lapisan atas di atas IPv6 termasuk pseudo-header. Tidak ada dokumen yang mengatakan paket VPN memiliki jumlah checksum yang tetap, karena tidak ada yang menjelaskan terowongan.

tshark -r capture.pcap -Y "ip.proto == 50" -V | grep -i checksum

Periksa perlindungan integritas secara terpisah

Integritas ESP adalah perlindungan kriptografis dengan cakupannya sendiri dan representasi yang bergantung pada algoritme. Itu bukan checksum IP atau UDP dengan nama lain, dan panjangnya bervariasi sesuai konstruksi yang dipilih. Pemeriksaan integritas mencakup bagian tertentu dari paket, yang bergantung pada mode dapat mencakup header ESP dan sebagian muatan. Menghitungnya sebagai bidang checksum dengan lebar yang diketahui adalah tempat sebagian besar penjelasan semacam ini buyar.

Baca konstruksi yang dipilih sebelum menghitung byte, dan gambarkan hasilnya sebagai perlindungan integritas, bukan sebagai checksum dengan label lain. Decoder akan menamai bidangnya untuk Anda jika Anda bertanya.

tshark -r capture.pcap -Y esp -V | grep -iE "integrity|icv"

Periksa titik pengamatan sebelum menghitung

Tangkapan pada antarmuka dalam dan tangkapan pada kabel dapat menunjukkan lapisan yang sangat berbeda. Pada antarmuka dalam terowongan sudah dilepas, jadi Anda melihat paket yang dibawa dan tidak satu pun header luar. Pada kabel Anda melihat header luar dan muatan terenkripsi yang tidak dapat Anda baca. Tidak ada pandangan yang salah, dan keduanya bukan pandangan atas objek yang sama. Sebutkan di mana tangkapan diambil sebelum mengutip angka apa pun.

sudo tcpdump -ni eth0 -vv -c 5 esp
sudo tcpdump -ni tun0 -vv -c 5

Perintah pertama menunjukkan paket luar dengan trailer integritasnya, dan yang kedua menunjukkan paket yang dibawa dengan checksum transportnya sendiri. Menjumlahkan angka dari kedua tangkapan tidak menghitung apa pun dua kali, tetapi menjelaskan paket yang sama dua kali.

Uji angkanya terhadap tangkapan nyata

Dekode satu paket sepenuhnya dan tandai setiap bidang yang disebut decoder sebagai checksum atau nilai integritas. Lalu bandingkan setiap tanda dengan tata letak yang Anda tulis, dan hapus yang termasuk lapisan yang tidak benar-benar Anda hitung. Angka yang bertahan dari latihan itu dapat dipertahankan, dan angka yang dikutip dari ingatan tidak.

Ulangi untuk arah balasan, karena terowongan yang membawa kedua keluarga dapat berbeda per arah dan per aliran. Lalu sebutkan angkanya beserta cakupannya, misalnya tiga checksum untuk paket dalam ini pada titik pengamatan ini, bukan sebagai sifat paket VPN secara umum.

tshark -r capture.pcap -T fields -e ip.checksum -e udp.checksum -e tcp.checksum

Artikel terkait