Spoofing Attack
A simple TCP spoofing attack
Selama beberapa tahun terakhir, jumlah serangan prediksi nomor TCP telah menjadi
ancaman aktual terhadap jaringan yang tidak terlindungi, mengambil laba dari yang melekat
hubungan kepercayaan hadir di banyak instalasi jaringan. Urutan TCP
jumlah serangan prediksi paling sering diimplementasikan dengan membuka a
serangkaian koneksi ke host target, dan mencoba memprediksi nomor urut yang akan dipakai selanjutnya. Banyak sistem operasi Oleh sebab itu berusaha untuk memecahkan problem ini dengan menerapkan metode menghasilkan nomor urut dalam mode tak terduga. Metode ini tidaktidak memecahkan masalah.
Penasihat ini memperkenalkan metode alternatif untuk mendapatkan awal nomor urut dari beberapa layanan tepercaya umum. Serangan yang disajikan di sini tidak mengharuskan penyerang untuk membuka banyak koneksi, atau membanjiri port pada host tepercaya untuk menuntaskan serangan. Satu-satunya persyaratan ialah itu source routed paket sanggup disuntikkan ke jaringan sasaran dengan palsu alamat sumber.
Penasihat ini menganggap bahwa pembaca sudah mempunyai pemahaman wacana caranya Serangan prediksi nomor urut TCP diimplementasikan. Dampak dari hikmah ini sangat berkurang sebab banyaknya jumlah organisasi yang memblokir paket dan paket paket yang di-routing dengan alamat di dalam jaringan mereka. Oleh sebab itu kami menyajikan informasi lebih banyak pesan 'heads up' untuk yang cenderung teknis, dan untuk mengulangnya kembali pengacakan nomor urut TCP bukanlah solusi yang efektif terhadap serangan ini.
Detail Teknis
Masalah terjadi ketika daemon jaringan mendapatkan koneksi
dengan perutean sumber diaktifkan, dan lanjutkan untuk menonaktifkan perutean sumber apa pun
opsi pada koneksi. Namun, koneksi diizinkan untuk dilanjutkan
rute sebaliknya tidak lagi digunakan. Contoh serangan sanggup diluncurkan melawan
daemon in.rshd, yang pada kebanyakan sistem akan mengambil opsi soket
via getsockopt () dan kemudian matikan semua opsi berbahaya melalui setsockopt ().
Contoh serangan berikut.
Host A ialah host tepercaya
Host B ialah host target
Host C ialah penyerang
Host C menginisiasi sumber yang mengarahkan koneksi ke in.rshd pada host B, berpura-pura
menjadi tuan rumah A.
Host C spoofing Host A <SYN> -> Host B in.rshd
Host B mendapatkan paket SYN awal, menciptakan PCB gres (protokol
blok kontrol) dan mengaitkan rute dengan PCB. Tuan rumah B merespons,
memakai rute sebaliknya, mengirim kembali SYN / ACK dengan nomor urut.
Host C spoofing Host A <- <SYN / ACK> Host B in.rshd
Host C merespon, masih spoofing host A, mengakui nomor urut.
Opsi routing sumber tidak diharapkan pada paket ini.
Host C spoofing Host A <ACK> -> Host B in.rshd
Kami kini mempunyai koneksi yang mapan, panggilan accept () selesai, dan
Kontrol kini diteruskan ke daemon in.rshd. Daemon kini melaksanakan IP
pilihan mengusut dan memilih bahwa kami telah memulai sumber yang diarahkan
koneksi. Daemon kini mematikan opsi ini, dan setiap paket dikirim
sesudah itu akan dikirim ke host A yang sebenarnya, tidak lagi memakai reverse
rute yang telah kami tentukan. Biasanya ini akan aman, namun
host menyerang kini tahu apa nomor urut berikutnya akan. Penuh arti
nomor urut ini, kita kini sanggup mengirim paket palsu tanpa sumber
opsi routing diaktifkan, berpura-pura berasal dari Host A, dan kami
perintah akan dieksekusi.
Dalam beberapa kondisi, banjir pelabuhan pada host A yang bersama-sama diperlukan
bila lebih banyak jumlah data dikirim, untuk mencegah A host yang sebenarnya
menanggapi dengan RST. Ini tidak diharapkan dalam banyak perkara ketika melakukan
serangan ini terhadap in.rshd sebab kecilnya jumlah data yang dikirimkan.
Perlu dicatat bahwa nomor urut diperoleh sebelum mendapatkan ()
telah kembali dan ini tidak sanggup dicegah tanpa mematikan sumber
routing di kernel.
Sebagai catatan tambahan, kami sangat beruntung bahwa TCP hanya menghubungkan rute sumber dengan
sebuah PCB ketika SYN awal diterima. Jika diterima dan mengubah ip
pilihan kapan saja selama koneksi, lebih banyak serangan eksotis sanggup dimungkinkan.
Ini bisa termasuk koneksi pembajakan di internet tanpa bermain
seorang laki-laki di serangan tengah dan bisa melewati investigasi opsi IP
dipaksakan oleh daemon memakai getockopt (). Untungnya, tumpukan TCP / IP berbasis BSD akan
tidak melaksanakan ini, namun akan menarik untuk mengusut implementasi lain.
Dampak
Dampak dari serangan ini seolah-olah dengan urutan TCP yang lebih kompleks
nomor serangan prediksi, namun ini melibatkan lebih sedikit langkah, dan tidak memerlukan
kita untuk 'menebak' nomor urut. Ini memungkinkan penyerang untuk mengeksekusi
perintah absolut sebagai root, tergantung pada konfigurasi target
sistem. Diperlukan bahwa kepercayaan hadir di sini, sebagai contoh, penggunaannya
file .rhosts atau hosts.equiv.
Solusi
Solusi ideal untuk problem ini ialah mempunyai layanan apa pun yang mengandalkan
Otentikasi berbasis IP drop koneksi sepenuhnya ketika awalnya
mendeteksi opsi routed source yang hadir. Administrator jaringan
dan pengguna sanggup mengambil tindakan pencegahan untuk mencegah pengguna di luar jaringan mereka
dari mengambil laba dari problem ini. Solusinya mudah-mudahan sudah
diimplementasikan atau diimplementasikan.
1. Blokir semua koneksi yang diarahkan sumber ke jaringan Anda
2. Blok semua paket dengan alamat berbasis internal dari memasuki jaringan Anda.
Administrator jaringan harus sadar bahwa serangan ini sanggup dengan gampang terjadi
diluncurkan dari belakang penyaringan router dan firewall. pelayanan internet
penyedia dan perusahaan harus memastikan bahwa pengguna internal tidak sanggup memulai
serangan yang dideskripsikan. Tindakan pencegahan yang disarankan di atas harus dilaksanakan
untuk melindungi jaringan internal.
Contoh isyarat untuk memroses paket source routed dengan benar disajikan di sini
sebagai contoh. Tolong beri tahu kami bila ada problem dengan itu.
Kode ini telah diuji pada sistem operasi berbasis BSD.
u_char optbuf[BUFSIZ/3];
int optsize = sizeof(optbuf), ipproto, i;
struct protoent *ip;
if ((ip = getprotobyname("ip")) != NULL)
ipproto = ip->p_proto;
else
ipproto = IPPROTO_IP;
if (!getsockopt(0, ipproto, IP_OPTIONS, (char *)optbuf, &optsize) &&
optsize != 0) {
for (i = 0; i < optsize; ) {
u_char c = optbuf[i];
if (c == IPOPT_LSRR || c == IPOPT_SSRR)
exit(1);
if (c == IPOPT_EOL)
break;
i += (c == IPOPT_NOP) ? 1 : optbuf[i+1];
}
}
Salah satu perhatian penting ialah dalam perkara di mana TCP wrappers digunakan. Jika
seorang pengguna mengandalkan pembungkus TCP, perbaikan di atas harus dimasukkan ke dalam
fix_options.c. Masalahnya ialah bahwa TCP wrappers sendiri tidak menutup
koneksi, namun menghapus opsi melalui setsockopt (). Pada perkara ini
ketika kontrol diteruskan ke in.rshd, itu tidak akan pernah melihat opsi apa pun yang ada,
dan koneksi akan tetap terbuka (bahkan bila in.rshd mempunyai patch di atas
tergabung). Sebuah opsi untuk benar-benar menjatuhkan koneksi yang diarahkan sumber
semoga sanggup diberikan dalam rilis TCP wrapper berikutnya. Pilihan lainnya
ialah untuk mendefinisikan KILL_IP_OPTIONS, yang sepertinya tidak ditentukan secara default.
Ini melewati opsi IP dan memungkinkan daemon yang dipanggil untuk menanganinya
demikian.
Menonaktifkan Routing Sumber
Kami yakin informasi berikut ini akurat, namun tidak demikian
terjamin.
--- Cisco
Agar router membuang datagram apa pun yang berisi opsi rute sumber IP
berikan perintah berikut:
tidak ada sumber-rute ip
Ini ialah opsi konfigurasi global.
--- NetBSD
Versi NetBSD sebelum 1.2 tidak menawarkan kemampuan untuk menonaktifkan
perutean sumber. Versi lain dikirimkan dengan routing sumber ENABLED secara default.
Kami tidak tahu cara untuk mencegah NetBSD mendapatkan paket routed source.
Sistem NetBSD, bagaimanapun, sanggup dikonfigurasi untuk mencegah penerusan paket
ketika bertindak sebagai gateway.
# sysctl net.inet.ip.forwarding
# sysctl net.inet.ip.forwsrcrt
Respons akan berupa 0 atau 1, 0 berarti off, dan 1 artinya aktif.
Penerusan paket routed source sanggup dimatikan melalui:
# sysctl -w net.inet.ip.forwsrcrt = 0
Penerusan semua paket secara umum sanggup dimatikan melalui:
# sysctl -w net.inet.ip.forwarding = 0
--- BSD / OS
BSDI telah menciptakan patch availible untuk rshd, rlogind, tcpd dan nfsd. Ini
patch tersedia di:
ftp://ftp.bsdi.com/bsdi/patches/patches-2.1
ATAU melalui server email patch mereka <patches@bsdi.com>
Nomor patchnya
U210-037 (versi normal)
D210-037 (versi domestik untuk situs yang menjalankan versi kerberized)
BSD / OS 2.1 mempunyai perutean sumber yang dinonaktifkan secara default
Versi sebelumnya dikirimkan dengan perutean sumber ENABLED secara default. Sejauh
kita tahu, BSD / OS tidak sanggup dikonfigurasi untuk menjatuhkan paket yang diarahkan sumber yang ditakdirkan
untuk dirinya sendiri, namun sanggup dikonfigurasi untuk mencegah penerusan semacam itu
paket ketika bertindak sebagai gateway.
Untuk memilih apakah penerusan paket routed source diaktifkan,
berikan perintah berikut:
# sysctl net.inet.ip.forwarding
# sysctl net.inet.ip.forwsrcrt
Respons akan berupa 0 atau 1, 0 berarti off, dan 1 artinya aktif.
Penerusan paket routed source sanggup dimatikan melalui:
# sysctl -w net.inet.ip.forwsrcrt = 0
Penerusan semua paket secara umum sanggup dimatikan melalui:
# sysctl -w net.inet.ip.forwarding = 0
--- OpenBSD
dengan routing sumber dimatikan secara default. Untuk memilih apakah sumber
routing diaktifkan, perintah berikut sanggup dikeluarkan:
# sysctl net.inet.ip.surceroute
Respons akan berupa 0 atau 1, 0 yang berarti bahwa perutean sumber dimatikan,
dan 1 artinya aktif. Jika perutean sumber telah diaktifkan, matikan melalui:
# sysctl -w net.inet.ip.sourceroute = 0
Ini akan mencegah OpenBSD meneruskan dan mendapatkan sumber apa pun yang diarahkan
paket-paket.
--- FreeBSD
dengan routing sumber dimatikan secara default. Untuk memilih apakah sumber
routing diaktifkan, perintah berikut sanggup dikeluarkan:
# sysctl net.inet.ip.surceroute
Respons akan berupa 0 atau 1, 0 yang berarti bahwa perutean sumber dimatikan,
dan 1 artinya aktif. Jika perutean sumber telah diaktifkan, matikan melalui:
# sysctl -w net.inet.ip.sourceroute = 0
--- Linux
Linux secara default mempunyai perutean sumber yang dinonaktifkan di kernel.
--- Solaris 2.x
Kapal dengan routing sumber diaktifkan secara default. Solaris 2.5.1 ialah salah satu dari
beberapa sistem operasi komersial yang mempunyai urutan yang tidak sanggup diprediksi
angka, yang tidak membantu dalam serangan ini.
Kami tahu tidak ada metode untuk mencegah Solaris mendapatkan sumber yang diarahkan
koneksi, bagaimanapun, sistem Solaris bertindak sebagai gateway sanggup dicegah
dari meneruskan paket routed sumber apa pun melalui perintah berikut:
# ndd -set / dev / ip ip_forward_src_routed 0
Anda sanggup mencegah penerusan semua paket melalui:
# ndd -set / dev / ip ip_forwarding 0
Perintah-perintah ini sanggup ditambahkan ke /etc/rc2.d/S69inet untuk diterapkan ketika boot.
--- SunOS 4.x
Kami tahu tidak ada metode untuk mencegah SunOS mendapatkan sumber yang disalurkan
koneksi, namun patch tersedia untuk mencegah sistem SunOS
meneruskan paket routed source.
Patch ini tersedia di:
ftp://ftp.secnet.com/pub/patches/source-routing-patch.tar.gz
Untuk mengkonfigurasi SunOS biar mencegah penerusan semua paket, berikut ini
perintah sanggup dikeluarkan:
# echo "ip_forwarding / w 0" | adb -k -w / vmunix / dev / mem
# echo "ip_forwarding? w 0" | adb -k -w / vmunix / dev / mem
Perintah pertama mematikan paket forwarding di / dev / mem, yang kedua di
/ vmunix.
--- HP-UX
HP-UX sepertinya tidak mempunyai opsi untuk mengkonfigurasi sistem HP-UX ke
mencegah mendapatkan atau meneruskan paket routed source. HP-UX mempunyai IP
penerusan diaktifkan secara default dan harus dimatikan bila bertindak sebagai
firewall. Untuk memilih apakah IP forwarding ketika ini aktif, berikut ini
perintah sanggup dikeluarkan:
# adb / hp-ux
ipforwarding? X <- input pengguna
ipforwarding:
ipforwarding: 1
#
Tanggapan 1 memperlihatkan IP forwarding ON, 0 memperlihatkan off. HP-UX bisa
dikonfigurasi untuk mencegah penerusan paket apa pun melalui yang berikut ini
perintah:
# adb -w /hp-ux /dev/kmem
ipforwarding/W 0
ipforwarding?W 0
^D
#
--- AIX
AIX tidak sanggup dikonfigurasi untuk membuang paket routed source yang ditakdirkan untuk dirinya sendiri,
namun sanggup dikonfigurasi untuk mencegah penerusan paket routed source.
IP forwarding dan forwarding paket routed sumber secara khusus dapat
dimatikan di bawah AIX melalui perintah berikut:
Untuk mematikan penerusan semua paket:
# / usr / sbin / no -o ipforwarding = 0
Untuk mematikan penerusan paket routed source:
# / usr / sbin / no -o nonlocsrcroute = 0
Perhatikan bahwa perintah-perintah ini harus ditambahkan ke /etc/rc.net
Jika mematikan routing sumber tidak dimungkinkan dan Anda masih menggunakannya
layanan yang mengandalkan otentikasi alamat IP, mereka harus dinonaktifkan
segera (in.rshd, in.rlogind). in.rlogind kondusif bila .rhosts dan
/etc/hosts.equiv tidak digunakan.
Atribusi
Terima kasih buat semua Crew LNX# yang selalu kompak Kalian semua tamvan
Terima kasih kepada Niels Provos <provos@physnet.uni-hamburg.de> untuk menyediakan
informasi dan detail dari serangan ini. Anda sanggup melihat web-nya
situs di http://www.physnet.uni-hamburg.de/provos
Terima kasih kepada Theo de Raadt, pengelola OpenBSD untuk meneruskan ini
informasi kepada kami. Informasi lebih lanjut wacana OpenBSD sanggup ditemukan di
http://www.openbsd.org
Terima kasih kepada Keith Bostic <bostic@bsdi.com> untuk diskusi dan cepat
solusi untuk BSD / OS.
Terima kasih kepada Brad Powell <brad.powell@west.sun.com> untuk menawarkan informasi
untuk Solaris 2.x dan SunOS 4.x sistem operasi.
Terima kasih kepada CERT dan AUSCERT untuk rekomendasi dalam saran ini.
Anda sanggup menghubungi penulis penasehat ini di oliver@secnet.com
Thank You.