Bug Anubis Web Firewall Menyebabkan Penolakan Rawak pada Peranti dengan Bilangan Teras CPU Ganjil

Pasukan Komuniti BigGo
Bug  Anubis Web Firewall  Menyebabkan Penolakan Rawak pada Peranti dengan Bilangan Teras CPU Ganjil

Satu baris kod JavaScript dalam firewall aplikasi web Anubis telah menyebabkan ralat respons tidak sah yang misterius untuk pengguna dengan peranti yang mempunyai bilangan teras CPU ganjil. Bug ini, yang menjejaskan telefon pintar popular seperti Google Pixel 8 Pro dan Samsung Galaxy S24+ , menyerlahkan bagaimana kesilapan pengkodan yang paling kecil sekalipun boleh mencipta kekecewaan pengguna yang meluas.

Anubis adalah firewall web yang menggunakan cabaran bukti kerja untuk mengesahkan bahawa pelawat laman web adalah pelayar sebenar dan bukannya bot automatik. Sistem ini memaksa klien menyelesaikan teka-teki kriptografi menggunakan berbilang teras CPU untuk mengehadkan kadar sambungan dan menyekat pengikis. Walau bagaimanapun, andaian pembangun bahawa semua peranti mempunyai bilangan teras genap telah membawa kepada masalah yang tidak dijangka.

Peranti Yang Diuji oleh Pembangun Anubis (Semua Bilangan Teras Genap):

  • MacBook Pro M3/M4 Max : 16 teras
  • AMD Ryzen 9 7950x3D : 32 teras
  • Google Pixel 9a : 8 teras
  • iPhone 15 Pro Max : 6 teras
  • iPad Pro ( M1 ): 8 teras
  • Steam Deck : 8 teras
  • Core i5 10600 : 12 teras
  • ROG Ally : 16 teras

Matematik Di Sebalik Kekacauan

Kod bermasalah itu membahagikan bilangan teras CPU dengan dua untuk menentukan berapa banyak benang pekerja yang perlu diwujudkan: threads = Math.max(navigator.hardwareConcurrency / 2, 1);. Pada peranti dengan bilangan teras ganjil, ini mencipta nombor benang pecahan. Sebagai contoh, 9 teras Pixel 8 Pro menghasilkan 4.5 benang, menyebabkan sistem bukti kerja kadang-kadang menghasilkan penyelesaian dengan nonce perpuluhan yang akan ditolak oleh pelayan sebagai tidak sah.

Perbincangan komuniti mendedahkan bahawa ramai pengguna telah mengalami kegagalan rawak ini tanpa memahami puncanya. Seorang pengguna Samsung Galaxy S24+ menyatakan bahawa melayari laman web teknologi pada telefon bimbit telah menjadi menyedihkan selama beberapa bulan kebelakangan ini, dengan cabaran Anubis kerap gagal atau berjalan dengan teruk.

Pembetulan Kod:

  • Sebelum: threads = Math.max(navigator.hardwareConcurrency / 2, 1);
  • Selepas: threads = Math.trunc(Math.max(navigator.hardwareConcurrency / 2, 1));
  • Hasil: Pixel 8 Pro kini menggunakan 4 pekerja berbanding 4.5 pekerja

Reka Bentuk CPU Moden Memecahkan Andaian Lama

Bug ini mendedahkan bagaimana seni bina pemproses mudah alih telah berkembang melampaui jangkaan tradisional. Pixel 8 Pro menggunakan reka bentuk teras tiga peringkat dengan satu teras Cortex X3 berprestasi tinggi, empat teras Cortex A715 berprestasi sederhana, dan empat teras Cortex A510 berkecekapan tinggi, berjumlah sembilan teras. Reka bentuk asimetri ini mengoptimumkan hayat bateri dan prestasi tetapi memecahkan andaian bahawa pemproses sentiasa mempunyai bilangan teras genap.

Ahli komuniti menegaskan bahawa pemproses berteras ganjil bukanlah sesuatu yang benar-benar baharu. AMD telah menjual cip Phenom X3 bertiga teras beberapa tahun lalu, dan malah konsol permainan seperti Xbox 360 dan Wii U menggunakan pemproses tiga teras. Walau bagaimanapun, kebanyakan CPU desktop dan laptop menggunakan multithreading serentak ( SMT ) yang menggandakan bilangan teras yang kelihatan, menyembunyikan nombor ganjil yang mendasari.

Seni Bina CPU Google Pixel 8 Pro :

  • Prestasi tinggi: 1x teras Cortex X3 3 GHz
  • Prestasi sederhana: 4x teras Cortex A715 2.45 GHz
  • Kecekapan tinggi: 4x teras Cortex A510 2.15 GHz
  • Jumlah: 9 teras

Pembetulan Mudah dan Persoalan Yang Lebih Besar

Pembangun membetulkan masalah segera dengan menambah Math.trunc() untuk membuang bahagian perpuluhan: threads = Math.trunc(Math.max(navigator.hardwareConcurrency / 2, 1));. Ini memastikan Pixel 8 Pro kini menggunakan 4 pekerja dan bukannya 4.5, mencegah isu nonce perpuluhan.

Walau bagaimanapun, insiden ini telah mencetuskan perdebatan yang lebih luas mengenai sistem bukti kerja untuk pengesanan bot. Pengkritik berhujah bahawa cabaran ini mengenakan kos pengiraan yang sama pada pengguna sah dan pengikis, tanpa asimetri sebenar untuk dieksploitasi. Seperti yang dinyatakan oleh seorang ahli komuniti, pengikis canggih boleh dengan mudah menyesuaikan diri untuk mengatasi halangan sedemikian, manakala beban utama jatuh kepada pengguna sebenar dengan peranti yang lebih perlahan.

Anda mengenakan kos yang sama kepada pengguna sah seperti yang anda kenakan kepada pengikis. Ekonomi skala bermakna bahawa kos marginal untuk musuh anda sebenarnya jauh lebih rendah daripada pengguna sebenar anda.

Pembangun kini sedang mempertimbangkan pendekatan alternatif seperti cabaran Proof of React yang memerlukan pelaksanaan rangka kerja JavaScript khusus dan bukannya kuasa pengiraan mentah. Mereka juga meneroka mesej ralat yang dienkripsi untuk membantu pengguna dan pentadbir menyahpepijat isu masa depan dengan lebih baik.

Bug ini berfungsi sebagai peringatan bahawa pembangun berpengalaman pun boleh membuat andaian yang salah mengenai perkakasan. Apabila reka bentuk CPU menjadi lebih pelbagai dan kompleks, terutamanya dalam peranti mudah alih, perisian perlu menyesuaikan diri untuk mengendalikan variasi ini dengan anggun.

Rujukan: Sometimes CPU cores are odd