4 poin oleh GN⁺ 2023-08-11 | 1 komentar | Bagikan ke WhatsApp
  • arpchat adalah alat yang dibuat menjadi aplikasi chat dengan memanfaatkan ARP, yang digunakan komputer untuk menemukan alamat MAC komputer lain di jaringan yang sama
  • Proyek ini dilatarbelakangi oleh skenario penggunaan ingin mengobrol dengan teman di jaringan dengan isolasi klien
  • Dengan mengimplementasikan protokol transport serbaguna sederhana di atas ARP, aplikasi ini dapat mengirim pesan sepanjang puluhan ribu karakter dan juga menggunakan sedikit kompresi
  • Memiliki sistem presence discovery dan heartbeat untuk memperbarui daftar pengguna online, beserta notifikasi saat masuk dan keluar
  • Biner instalasi dapat diunduh dari releases page
    • Di Windows, npcap mungkin diperlukan, dan saat instalasi perlu memilih Install Npcap in WinPcap API-compatible Mode
    • Di Linux, mungkin perlu memberikan izin jaringan dengan sudo setcap CAP_NET_RAW+ep /path/to/arpchat
  • Jalankan biner dari terminal; jika pesan yang dikirim muncul di layar sendiri, berarti aplikasi bekerja dengan benar
  • Build telah diuji pada Rust unstable terbaru, dan untuk build Windows diperlukan WinPcap Developer's Pack serta pengaturan variabel lingkungan LIB ke folder WpdPack/Lib/x64/

1 komentar

 
GN⁺ 2023-08-11
Pendapat di Hacker News
  • Aku pembuatnya. Aku juga membuat hal lain yang hari ini kuunggah ke HN (https://news.ycombinator.com/item?id=37062422), jadi cukup menarik melihat ArpChat juga ikut naik. Mungkin ada yang melihat profilku
    Ini benar-benar proyek yang menyenangkan, dan aku belajar banyak soal networking
    Beberapa waktu lalu aku juga sempat benar-benar mencobanya di lingkungan yang sepenuhnya offline, dan itu menyenangkan. Namun setelah itu aku menemukan bug besar, dan bug ini menyebabkan latensi yang sangat besar. Sudah kuperbaiki, tetapi aku belum sempat mengunggah artefak build baru, jadi kalau ingin mengujinya di lingkungan nyata, sebaiknya build sendiri dari source. Untuk iseng, aku juga menambahkan warna nama pengguna dan waktu pesan. Aku berjanji akan segera mengunggah rilis baru
    Kalau tertarik, ada juga tulisan yang kubuat sekitar setahun lalu tentang cara kerja ArpChat: https://kognise.dev/writing/arp

    • Aku terus tertawa sambil membaca ini. ArpChat kemungkinan besar bisa membuat administrator jaringan kena serangan jantung, tetapi idenya sendiri benar-benar keren. Aku juga termasuk tipe yang membaca buku lapisan OSI untuk bersenang-senang, jadi aku paham
      Semoga terus bermain-main dengan kode. Ini juga agak mirip dengan hal-hal yang ditunjukkan justine tunney dalam karya seperti https://justine.lol/ape.html. Rasanya seperti menggali sangat dalam ke area yang hanya dipahami dengan baik oleh segelintir orang, misalnya detail format biner compiler, lalu mengajukan pertanyaan gila seperti “bisakah semua format biner dirangkai menjadi satu meta-format dan benar-benar berjalan di semuanya?”, kemudian membuat sesuatu yang benar-benar berfungsi
    • Banner di bagian bawah README benar-benar lucu dan indah. Kerja yang keren
    • Apakah diperkirakan juga berjalan di Linux?
      # sudo getcap ./arpchat
      ./arpchat cap_net_raw=ep
      Aku mendapat “error getting channel, might be missing permissions”
      Tambahan: error ini berasal dari arpchat, bukan dari pengaturan setcap
  • Inilah persis yang kuinginkan. Main-main di lapisan data link
    Untuk yang tidak tahu apa itu Address Resolution Protocol (ARP), secara sangat kasar ini adalah mata rantai yang menghubungkan alamat MAC (yang dipakai Ethernet) dan alamat IP (yang dipakai internet). Jika tabel routing IP yang bisa dilihat dengan route menentukan alamat IP tujuan berikutnya untuk sebuah paket, cache ARP yang bisa dilihat dengan arp menentukan alamat MAC yang sesuai dengan IP tersebut. Biasanya itu adalah alamat IP lokal router
    Sekarang, mengetahui bahwa ARP ada saja kadang dianggap seperti pengetahuan mistis yang agak non-spesialis, apalagi saudaranya di IPv6, Neighbor Discovery Protocol. Meski dalam deployment modern berbasis cloud kita tidak sering menanganinya langsung, mengetahui keberadaannya membuat pandangan kita terhadap keseluruhan network stack jauh lebih utuh

    • Sulit bagiku setuju bahwa ARP adalah pengetahuan yang sulit dipahami. Bagi orang yang bekerja di networking, memahami atau setidaknya mengetahui ARP masih hampir wajib. arping sangat berguna untuk memeriksa apakah perangkat di segmen jaringan yang sama menyala tetapi tidak merespons ICMP ping
      Kalau melihat dump tcpdump atau Wireshark, cepat atau lambat pasti akan menjumpainya. Namun bagi software engineer, karena cloud dan jaringan tradisional cukup berbeda, mereka mungkin lebih dulu menemuinya saat men-debug jaringan rumah daripada aplikasi
    • Saat ini mungkin yang lebih umum adalah 802.11. Meski begitu, ketika host perlu mendapatkan IP, ARP bisa dipakai pada protokol lapisan data link mana pun: https://en.wikipedia.org/wiki/Data_link_layer
    • Kalau ARP benar-benar mulai terasa asing, itu menyedihkan. Sulit membayangkan seseorang mengaku memahami cara kerja jaringan IP tetapi bahkan tidak punya familiaritas minimal dengan ARP
    • Kita juga bisa meng-hardcode entri ARP untuk komputer lain di jaringan yang memiliki alamat IP statis
  • Menarik memang menyalahgunakan fakta bahwa ARP bisa membawa payload arbitrer, tetapi dari sudut pandang pengantar networking, inti yang diandalkan penulis adalah fakta sederhana bahwa switch akan membanjiri paket yang ditujukan ke ff:ff:ff:ff:ff:ff ke seluruh domain broadcast
    Bahkan tanpa hak superuser atau izin raw packet, mengirim paket ke alamat broadcast L3 biasanya akan dibanjiri di L2, sehingga bisa membuat penyebaran pesan serupa. Dengan kata lain, melakukan ping ke alamat broadcast itu menyenangkan
    Tidak ada keunggulan khusus dalam memakai ARP. Selain itu, banyak switch modern memiliki fitur untuk memantau paket ARP, jadi mengalirkan trafik ARP palsu dalam jumlah besar bisa benar-benar berdampak buruk. Meski begitu, ini karya yang menarik, dan mengingatkanku pada mainan yang kubuat saat dulu belajar. Secara pribadi, aku mungkin akan menyalahgunakan ICMP untuk tujuan ini, dan itu bisa saja menjadi arah pengembangan berikutnya. Tepuk tangan untuk proyek yang menyenangkan ini

    • Ini juga memakai prinsip penting lain dalam pengantar networking: pada akhirnya semuanya angka
      ARP, DNS, HTTP, TLS di satu sisi adalah protokol-protokol yang kita bayangkan itu, tetapi pada saat yang sama semuanya hanyalah angka. ARP mengakses ruang angka yang sama seperti HTTP. Bukan hanya UDP yang memakai byte 11-bit, dan tidak ada instruksi CPU khusus yang hanya bisa dipakai DNS. Pada akhirnya semuanya angka. Di ujungnya, kita bisa mendorong angka yang kita inginkan ke kabel, dan seluruh dunia lainnya menerima angka itu lalu melakukan urusannya masing-masing
    • Salah satu serangan DDoS amplifikasi pertama yang kulihat terjadi pada 1990-an, caranya dengan memalsukan alamat host korban sebagai sumber lalu mengirim ping ke alamat broadcast jaringan kampus yang polos
      Sekarang seharusnya tidak berfungsi, tetapi saat itu implementasi TCP/IP yang polos—banyak di antaranya—dengan senang hati ikut berpartisipasi
    • Maksudnya https://hpbn.co/?
  • Saya suka menyalahgunakan protokol yang sudah terpasang bawaan di sebagian besar sistem operasi. Karena tidak menemukan sistem messaging GUI/CLI lintas platform yang tidak memerlukan pemasangan software klien terpisah, saya pernah membuat Samba share palsu yang konyol supaya pesan bisa dilihat di Finder.app/Explorer.exe/Gnome/KDE
    Memanggil netcat di jaringan lokal pun tidak berjalan mulus, dan untuk broadcast ada perbedaan flag di tiap sistem operasi. Caranya: melihat pesan di Samba share dari file browser, mengekliknya, lalu mengubah nama file untuk memperbarui “papan pesan” 3 baris
    https://github.com/jedahan/samba-haiku/blob/master/index.js
    Ini juga sebenarnya implementasi ulang dari sesuatu yang semula memakai SSID Wi-Fi untuk membuat haiku captive portal
    https://github.com/jedahan/haiku-wifi

  • Ini bisa lebih menarik dari yang diperkirakan. Saya memisahkan jaringan dengan VLAN memakai hardware dari vendor besar, dan menemukan bahwa dalam kebanyakan kasus VLAN memang bekerja, tetapi trafik ARP bocor
    Mesin-mesin seharusnya mengirim semua trafik melalui router, tetapi kadang melihat respons ARP yang seharusnya tidak terlihat, lalu menyimpulkan bahwa mesin lain bisa dijangkau langsung. Akibatnya, trafik tidak bisa dikirim sampai entri cache ARP kedaluwarsa, dan itu merepotkan. Vendornya terlalu besar untuk peduli, dan tidak menunjukkan minat memperbaiki bug itu
    Dalam situasi tertentu, aplikasi chat ini mungkin bisa menembus VLAN

    • Menarik karena alasan yang sama. Kalau bisa mengirim dan menerima pesan ARP berisi payload arbitrer, troubleshooting VLAN atau pengecekan konektivitas L2 lain jelas akan jadi lebih mudah
    • Dari pengujian saya, ini bisa menembus cukup banyak hal
  • Istri, anak-anak, dan saya kebanyakan bekerja atau belajar dari rumah, jadi sering berada di kamar masing-masing. Untuk saling berkirim pesan saat perlu, kami memakai BeeBEEP. Tidak perlu server, dan tersedia klien Linux maupun Windows; itu yang menentukan
    Cukup berfungsi dengan baik, tetapi setelah laptop bangun dari sleep, kadang perlu direstart agar bisa melihat lagi orang lain di LAN. Dan hampir satu-satunya keluhan saya adalah tidak bisa langsung membuka jendela pesan ke orang tertentu dari ikon tray. Bisa juga copy-paste foto kucing lucu, dan ada fitur seperti transfer file yang tidak saya pakai. Ini bukan iklan berbayar, cuma saya saja yang kepanjangan cerita
    https://www.beebeep.net/

    • Menurut saya keindahan proyek ini bukan pada messaging itu sendiri, melainkan pada penyalahgunaan protokol jaringan level rendah untuk lolos dari hal-hal seperti isolasi klien
  • Waktu SMA saya melakukan ini dengan net send lalu kena marah

    • Saya menemukan trik itu dan menunjukkannya ke beberapa teman, tetapi rahasianya tidak bertahan lama. Tahu-tahu sekelompok orang yang lebih besar, bahkan bukan teman saya, memakainya untuk menyontek saat pelajaran di lab komputer. Mencontek terang-terangan itu sendiri mengganggu, dan saya juga agak kesal karena orang-orang yang tidak terlalu saya sukai mendapat keuntungan dari sesuatu yang saya temukan
      Jadi saya spoof username administrator sistem (tidak sulit di Win9x), lalu mengirim pesan peringatan keras. Dari fakta bahwa pesan-pesan tiba-tiba berhenti semua, tampaknya mereka cukup kaget
    • write menyampaikan salam
      https://en.wikipedia.org/wiki/Write_(Unix)
    • Seingat saya net send harus terhubung ke domain, jadi sepertinya tidak memakai ARP
    • Kalau network analyzer-nya salah atau tidak memperhatikan paket ARP yang aneh, mungkin messaging lewat ARP akan sulit dideteksi
    • Memang ada masa seperti itu. Di kampus, secara tidak sengaja—atau mungkin sengaja—kami mengirim pesan ke seluruh domain, dan para guru IT langsung menatap kami para pembuat masalah
  • Sangat keren. Namun TCP/IP tidak mengikuti model OSI, jadi sulit menerapkan begitu saja pembedaan halus ala OSI
    Secara praktik, ARP bisa didefinisikan sebagai layer 2.5 dalam model TCP/IP versi Stevens, jadi menyebutnya 2.5 tampaknya paling masuk akal. Dan frame ARP tidak dirutekan, jadi jelas bukan L3

  • Pada masa ketika NAT IPv4 praktis menjadi standar—sebenarnya sampai sekarang juga, meski kini ada IPv6 dan CGNAT—saya pernah membuat sesuatu bernama NATChat
    Pada dasarnya, ia membuat ruang chat berdasarkan alamat IPv4 publik, sehingga bisa chat dengan siapa pun di jaringan yang sama. Cukup bagus dipakai bersama orang lain di kantor. Kantor juga sesuatu yang masih ada pada masa itu

  • Ada juga yang serupa dalam C++: https://github.com/gbonacini/arpchatcpp